[*] Binary protection state of ld-linux-armhf.so.3

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


[*] Function printf tear down of ld-linux-armhf.so.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/ld-linux-armhf.so.3 @ 0x21ec */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.000021ec ()              | void fcn_000021ec () {
                                         |     if (? >= ?) {
    0x000021ec strlt r4, [r8, -0x802]    |         *((r8 - 0x802)) = r4;
                                         |     }
    0x000021f0 add r0, pc                |     r0 += pc;
    0x000021f2 bl 0x8b5c                 |     dl_fatal_printf ()
    0x000021f6 nop                       |     
    0x000021f8 str r4, [r7, 0x58]        |     *((r7 + 0x58)) = r4;
    0x000021fa movs r1, r0               |     r1 = r0;
    0x000021fc ldr r3, [pc, 0x10]        |     
    0x000021fe add r3, pc                |     r3 = 0x4412;
    0x00002200 cmp r3, r0                |     
                                         |     if (r3 != r0) {
    0x00002202 beq 0x220c                |         
    0x00002204 ldr r3, [pc, 0xc]         |         
    0x00002206 add r3, pc                |         
    0x00002208 ldr r3, [r3]              |         r3 = *(0x441e);
    0x0000220a bx r3                     |         return uint32_t (*r3)() ();
                                         |     }
    0x0000220c 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/ld-linux-armhf.so.3 @ 0x2b90 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00002b90 ()                              | void fcn_00002b90 () {
    0x00002b90 ldr r3, [pc, 0xec]                        |     
    0x00002b92 push.w {r4, r5, r6, r7, r8, lr}           |     
    0x00002b96 add r3, pc                                |     r3 = 0x581a;
    0x00002b98 ldr r0, [r3]                              |     r0 = *(0x581a);
    0x00002b9a ldrb.w r3, [r0, 0x1a6]                    |     r3 = *((r0 + 0x1a6));
    0x00002b9e lsls r3, r3, 0x1c                         |     r3 <<= 0x1c;
                                                         |     if (r3 < r3) {
    0x00002ba0 bmi 0x2c2e                                |         goto label_2;
                                                         |     }
    0x00002ba2 ldr r3, [pc, 0xe0]                        |     
    0x00002ba4 vmov.i8 d16, 0xff                         |     __asm ("vmov.i8 d16, 0xff");
    0x00002ba8 add r3, pc                                |     r3 = 0x5832;
    0x00002baa adds r3, 8                                |     r3 += 8;
    0x00002bac vst1.32 {d16}, [r3]                       |     __asm ("vst1.32 {d16}, [r3]");
                                                         |     do {
    0x00002bb0 ldr r5, [pc, 0xd4]                        |         
    0x00002bb2 bl 0x26a4                                 |         r0 = fcn_000026a4 (r0);
    0x00002bb6 mov r4, r0                                |         r4 = r0;
    0x00002bb8 ldr r7, [pc, 0xd0]                        |         
    0x00002bba add r5, pc                                |         r5 = 0x5846;
    0x00002bbc ldr r0, [r5, 4]                           |         
    0x00002bbe add r7, pc                                |         r7 = 0x584e;
    0x00002bc0 ldr r3, [r7]                              |         r3 = *(0x584e);
    0x00002bc2 add.w r0, r0, r0, lsl 2                   |         r0 = 0x584a;
    0x00002bc6 lsls r0, r0, 2                            |         r0 <<= 2;
    0x00002bc8 blx r3                                    |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00002bca mov r6, r0                                |         r6 = r0;
    0x00002bcc str r0, [r5]                              |         *(r5) = r0;
                                                         |         if (r4 == 0) {
    0x00002bce cbnz r4, 0x2be2                           |             
    0x00002bd0 cmp r0, 0                                 |             
                                                         |             if (r0 == 0) {
    0x00002bd2 beq 0x2c5a                                |                 goto label_3;
                                                         |             }
    0x00002bd4 str r4, [r5, 4]                           |             *((r5 + 4)) = r4;
    0x00002bd6 bl 0x26a4                                 |             fcn_000026a4 (r0);
    0x00002bda ldr r1, [r5, 4]                           |             r1 = *((r5 + 4));
                                                         |             if (r1 != 0) {
    0x00002bdc cbnz r1, 0x2c3a                           |                 goto label_4;
                                                         |             }
                                                         | label_0:
    0x00002bde pop.w {r4, r5, r6, r7, r8, pc}            |             
                                                         |         }
    0x00002be2 cmp r4, 0x3f                              |         
    0x00002be4 ldr r3, [r7]                              |         r3 = *(r7);
    0x00002be6 it lo                                     |         
                                                         |         if (r4 >= 0x3f) {
    0x00002be8 movlo r4, 0x3f                            |             r4 = 0x3f;
                                                         |         }
    0x00002bea add.w r0, r4, r4, lsl 2                   |         r0 = r4 + (r4 << 2);
    0x00002bee lsls r0, r0, 2                            |         r0 <<= 2;
    0x00002bf0 adds r0, 0x10                             |         r0 += 0x10;
    0x00002bf2 blx r3                                    |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00002bf4 mov r6, r0                                |         r6 = r0;
                                                         |         if (r0 == 0) {
    0x00002bf6 cbz r0, 0x2c54                            |             goto label_5;
                                                         |         }
    0x00002bf8 ldr r7, [pc, 0x94]                        |         
    0x00002bfa movs r3, 0                                |         r3 = 0;
    0x00002bfc vmov.i32 d16, 0                           |         __asm ("vmov.i32 d16, 0");
    0x00002c00 ldr.w r8, [r5]                            |         r8 = *(r5);
    0x00002c04 add r7, pc                                |         r7 = 0x5898;
    0x00002c06 str r4, [r0, 0xc]                         |         *((r0 + 0xc)) = r4;
    0x00002c08 str r0, [r7]                              |         *(r7) = r0;
    0x00002c0a vst1.32 {d16}, [r0]                       |         __asm ("vst1.32 {d16}, [r0]");
    0x00002c0e str r3, [r0, 8]                           |         *((r0 + 8)) = r3;
    0x00002c10 cmp.w r8, 0                               |         
                                                         |         if (r8 == 0) {
    0x00002c14 beq 0x2c5a                                |             goto label_3;
                                                         |         }
    0x00002c16 str r3, [r5, 4]                           |         *((r5 + 4)) = r3;
    0x00002c18 bl 0x26a4                                 |         fcn_000026a4 (r0);
    0x00002c1c ldr r1, [r5, 4]                           |         r1 = *((r5 + 4));
                                                         |         if (r1 != 0) {
    0x00002c1e cbnz r1, 0x2c62                           |             goto label_6;
                                                         |         }
                                                         | label_1:
    0x00002c20 ldr r1, [r6, 8]                           |         r1 = *((r6 + 8));
    0x00002c22 add.w r0, r6, 0x10                        |         r0 = r6 + 0x10;
    0x00002c26 pop.w {r4, r5, r6, r7, r8, lr}            |         
    0x00002c2a b.w 0x2af4                                |         void (*0x2af4)() ();
                                                         | label_2:
    0x00002c2e ldr r1, [pc, 0x64]                        |         
    0x00002c30 add r1, pc                                |         r1 = 0x58ca;
    0x00002c32 adds r1, 8                                |         r1 += 8;
    0x00002c34 bl 0x2648                                 |         fcn_00002648 (r0, r1);
    0x00002c38 b 0x2bb0                                  |         
                                                         |     } while (1);
                                                         | label_4:
    0x00002c3a mov r0, r6                                |     r0 = r6;
    0x00002c3c bl 0x2af4                                 |     fcn_00002af4 (r0, r1);
    0x00002c40 ldrd r2, r3, [r5]                         |     __asm ("ldrd r2, r3, [r5]");
    0x00002c44 subs r3, 1                                |     r3--;
    0x00002c46 add.w r3, r3, r3, lsl 2                   |     r3 += (r3 << 2);
    0x00002c4a add.w r2, r2, r3, lsl 2                   |     r2 += (r3 << 2);
    0x00002c4e ldr r3, [r2, 4]                           |     r3 = *((r2 + 4));
    0x00002c50 str r3, [r5, 0x1c]                        |     *((r5 + 0x1c)) = r3;
    0x00002c52 b 0x2bde                                  |     goto label_0;
                                                         | label_5:
    0x00002c54 ldr r3, [pc, 0x40]                        |     
    0x00002c56 add r3, pc                                |     r3 = 0x58f2;
    0x00002c58 str r0, [r3]                              |     *(r3) = r0;
                                                         | label_3:
    0x00002c5a ldr r0, [pc, 0x40]                        |     
    0x00002c5c add r0, pc                                |     r0 = 0x58fe;
    0x00002c5e bl 0x8b5c                                 |     dl_fatal_printf ()
                                                         | label_6:
    0x00002c62 mov r0, r8                                |     r0 = r8;
    0x00002c64 bl 0x2af4                                 |     fcn_00002af4 (r0, r1);
    0x00002c68 ldrd r2, r3, [r5]                         |     __asm ("ldrd r2, r3, [r5]");
    0x00002c6c ldr r6, [r7]                              |     r6 = *(r7);
    0x00002c6e subs r3, 1                                |     r3--;
    0x00002c70 add.w r3, r3, r3, lsl 2                   |     r3 += (r3 << 2);
    0x00002c74 add.w r2, r2, r3, lsl 2                   |     r2 += (r3 << 2);
    0x00002c78 ldr r3, [r2, 4]                           |     r3 = *((r2 + 4));
    0x00002c7a str r3, [r5, 0x1c]                        |     *((r5 + 0x1c)) = r3;
    0x00002c7c b 0x2c20                                  |     goto label_1;
                                                         | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x62e4).
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/ld-linux-armhf.so.3 @ 0x8b78 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00008b78 ()                                      | void fcn_00008b78 (int16_t arg_10h, int16_t arg_28h) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h;
    0x00008b78 ldr.w r3, [pc, 0x4ac]                             |     r3 = *(0x00009028);
    0x00008b7c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00008b80 sub.w sp, sp, 0x26c                               |     
    0x00008b84 add r7, sp, 8                                     |     r7 += var_8h;
    0x00008b86 add r3, pc                                        |     r3 += pc;
    0x00008b88 ldr.w r6, [r3, 0x5dc]                             |     r6 = *((r3 + 0x5dc));
    0x00008b8c ldrh.w r1, [r6, 0x168]                            |     r1 = *((r6 + 0x168));
    0x00008b90 ldr.w r3, [r6, 0x160]                             |     r3 = *((r6 + 0x160));
    0x00008b94 lsls r1, r1, 5                                    |     r1 <<= 5;
    0x00008b96 adds r2, r3, r1                                   |     r2 = r3 + r1;
    0x00008b98 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x00008b9a bhs.w 0x8fae                                      |         goto label_7;
                                                                 |     }
    0x00008b9e ldr.w r2, [pc, 0x48c]                             |     r2 = *(0x0000902c);
    0x00008ba2 add r1, r3                                        |     r1 += r3;
    0x00008ba4 adds r1, 0x20                                     |     r1 += 0x20;
    0x00008ba6 adds r3, 0x20                                     |     r3 += 0x20;
    0x00008ba8 movs r4, 0                                        |     r4 = 0;
    0x00008baa mov.w r0, -1                                      |     r0 = -1;
    0x00008bae add r2, pc                                        |     r2 += pc;
    0x00008bb0 mov r8, r6                                        |     r8 = r6;
    0x00008bb2 ldr r5, [r2, 0xc]                                 |     r5 = *((r2 + 0xc));
    0x00008bb4 rsb.w ip, r5, 0                                   |     
    0x00008bb8 subs r5, 1                                        |     r5--;
    0x00008bba b 0x8bc2                                          |     
                                                                 |     while (r2 != 1) {
                                                                 | label_0:
    0x00008bbc adds r3, 0x20                                     |         r3 += 0x20;
    0x00008bbe cmp r3, r1                                        |         
                                                                 |         if (r3 == r1) {
    0x00008bc0 beq 0x8bf8                                        |             goto label_8;
                                                                 |         }
                                                                 | label_1:
    0x00008bc2 ldr r2, [r3, -0x20]                               |         r2 = *((r3 - 0x20));
    0x00008bc6 cmp r2, 1                                         |         
    0x00008bc8 bne 0x8bbc                                        |         
                                                                 |     }
    0x00008bca ldr r2, [r3, -0x8]                                |     r2 = *((r3 - 0x8));
    0x00008bce lsls r6, r2, 0x1f                                 |     r6 = r2 << 0x1f;
                                                                 |     if (r6 >= r2) {
    0x00008bd0 bpl 0x8bbc                                        |         goto label_0;
                                                                 |     }
    0x00008bd2 ldr r2, [r3, -0x18]                               |     r2 = *((r3 - 0x18));
    0x00008bd6 adds r3, 0x20                                     |     r3 += 0x20;
    0x00008bd8 ldr r6, [r3, -0x2c]                               |     r6 = *((r3 - 0x2c));
    0x00008bdc and.w lr, ip, r2                                  |     lr = ip & r2;
    0x00008be0 add r2, r6                                        |     r2 += r6;
    0x00008be2 cmp r0, lr                                        |     
    0x00008be4 add r2, r5                                        |     r2 += r5;
    0x00008be6 it hs                                             |     
                                                                 |     if (r0 < lr) {
    0x00008be8 movhs r0, lr                                      |         r0 = lr;
                                                                 |     }
    0x00008bea and.w r2, r2, ip                                  |     r2 &= ip;
    0x00008bee cmp r4, r2                                        |     
    0x00008bf0 it lo                                             |     
                                                                 |     if (r4 >= r2) {
    0x00008bf2 movlo r4, r2                                      |         r4 = r2;
                                                                 |     }
    0x00008bf4 cmp r3, r1                                        |     
                                                                 |     if (r3 != r1) {
    0x00008bf6 bne 0x8bc2                                        |         goto label_1;
                                                                 |     }
                                                                 | label_8:
    0x00008bf8 mov r6, r8                                        |     r6 = r8;
    0x00008bfa mov r1, r0                                        |     r1 = r0;
    0x00008bfc mov r2, r4                                        |     r2 = r4;
                                                                 | label_3:
    0x00008bfe ldr r3, [r6]                                      |     r3 = *(r6);
    0x00008c00 ldr.w r5, [pc, 0x42c]                             |     
    0x00008c04 add r0, r3                                        |     r0 += r3;
    0x00008c06 adds r3, 3                                        |     r3 += 3;
    0x00008c08 add r3, r4                                        |     r3 += r4;
    0x00008c0a bic r0, r0, 3                                     |     r0 = BIT_MASK (r0, 3);
    0x00008c0e bic r3, r3, 3                                     |     r3 = BIT_MASK (r3, 3);
    0x00008c12 movs r4, 0                                        |     r4 = 0;
    0x00008c14 sub.w r8, r3, r0                                  |     r8 = r3 - r0;
    0x00008c18 add r5, pc                                        |     r5 = 0x11c4c;
    0x00008c1a str r3, [r7, 0x18]                                |     *((r7 + 0x18)) = r3;
    0x00008c1c add.w r3, r8, r8, lsl 1                           |     r3 = r8 + (r8 << 1);
    0x00008c20 str r4, [r5]                                      |     *(r5) = r4;
    0x00008c22 movw r4, 0x1387                                   |     r4 = 0x1387;
    0x00008c26 cmp r3, r4                                        |     
                                                                 |     if (r3 < r4) {
    0x00008c28 bls.w 0x8dca                                      |         goto label_9;
                                                                 |     }
    0x00008c2c movs r4, 0x63                                     |     
    0x00008c2e movt r4, 0x640                                    |     r4 = 0x6400063;
    0x00008c32 cmp r3, r4                                        |     
                                                                 |     if (r3 < r4) {
    0x00008c34 bls.w 0x9008                                      |         goto label_10;
                                                                 |     }
    0x00008c38 movs r3, 0x40                                     |     r3 = 0x40;
    0x00008c3a mov.w r4, 0x100000                                |     r4 = 0x100000;
    0x00008c3e movt r3, 0x600                                    |     r3 = (r3 & 0xFFFF) | 0x6000000;
    0x00008c42 str r3, [r7, 0x24]                                |     *((r7 + 0x24)) = r3;
    0x00008c44 mov.w r3, 0x800000                                |     r3 = 0x800000;
    0x00008c48 str r3, [r7, 0x1c]                                |     *((r7 + 0x1c)) = r3;
                                                                 |     do {
                                                                 | label_6:
    0x00008c4a ldr r6, [pc, 0x3e8]                               |         
    0x00008c4c lsr.w lr, r8, 2                                   |         lr = r8 >> 2;
    0x00008c50 movw r3, 0x6d67                                   |         
    0x00008c54 ldr.w sb, [pc, 0x3e0]                             |         
    0x00008c58 movt r3, 0x6e6f                                   |         r3 = 0x6e6f6d67;
    0x00008c5c movs r5, 0                                        |         r5 = 0;
    0x00008c5e add r6, pc                                        |         r6 = 0x11c98;
    0x00008c60 strd r5, r5, [r7, 0x34]                           |         __asm ("strd r5, r5, [r7, 0x34]");
    0x00008c64 str r4, [r6, 0x10]                                |         *((r6 + 0x10)) = r4;
    0x00008c66 add.w r4, r7, 0x40                                |         r4 = r7 + 0x40;
    0x00008c6a str r0, [r6, 4]                                   |         *((r6 + 4)) = r0;
    0x00008c6c movw r0, 0xffff                                   |         
    0x00008c70 strd r1, r2, [r4]                                 |         __asm ("strd r1, r2, [r4]");
    0x00008c74 add.w r2, r7, 0x2c                                |         r2 = r7 + 0x2c;
    0x00008c78 movt r0, 1                                        |         r0 = 0x1ffff;
    0x00008c7c str r2, [r7, 0x20]                                |         *((r7 + 0x20)) = r2;
    0x00008c7e movs r2, 4                                        |         r2 = 4;
    0x00008c80 strd r3, r0, [r7, 0x2c]                           |         __asm ("strd r3, r0, [r7, 0x2c]");
    0x00008c84 str.w lr, [r4, 8]                                 |         __asm ("str.w lr, [r4, 8]");
    0x00008c88 add sb, pc                                        |         sb = 0x11cc4;
    0x00008c8a str r2, [r6, 0xc]                                 |         *((r6 + 0xc)) = r2;
    0x00008c8c str.w r8, [r6, 8]                                 |         __asm ("str.w r8, [r6, 8]");
    0x00008c90 str r5, [r7, 0x3c]                                |         *((r7 + 0x3c)) = r5;
    0x00008c92 bl 0x14950                                        |         fcn_00014950 ();
    0x00008c96 ldr r2, [pc, 0x3a4]                               |         
    0x00008c98 ldr.w sl, [sb, 0x174]                             |         sl = *(0x11e38);
    0x00008c9c str r0, [r4, 0xc]                                 |         *((r4 + 0xc)) = r0;
    0x00008c9e add r2, pc                                        |         r2 = 0x11ce0;
    0x00008ca0 str r5, [r7, 0x58]                                |         *((r7 + 0x58)) = r5;
    0x00008ca2 ldm.w r2, {r0, r1}                                |         r0 = *(r2);
                                                                 |         r1 = *((r2 + 4));
    0x00008ca6 add.w r2, r7, 0x50                                |         r2 = r7 + 0x50;
    0x00008caa str.w r5, [r7, 0x5b]                              |         __asm ("str.w r5, [r7, 0x5b]");
    0x00008cae stm.w r2, {r0, r1}                                |         *(r2) = r0;
                                                                 |         *((r2 + 4)) = r1;
    0x00008cb2 movs r2, 0x73                                     |         r2 = 0x73;
    0x00008cb4 mov r0, sl                                        |         r0 = sl;
    0x00008cb6 strb r2, [r4, 0x1f]                               |         *((r4 + 0x1f)) = r2;
    0x00008cb8 bl 0x161c0                                        |         fcn_000161c0 (r0, r1);
    0x00008cbc ldr.w r6, [sb, 0x170]                             |         r6 = *(0x11e34);
    0x00008cc0 mov fp, r0                                        |         
    0x00008cc2 mov r0, r6                                        |         r0 = r6;
    0x00008cc4 bl 0x161c0                                        |         r0 = fcn_000161c0 (r0, r1);
    0x00008cc8 add fp, r0                                        |         
    0x00008cca mov r1, sl                                        |         r1 = sl;
    0x00008ccc add.w fp, fp, 0x11                                |         
    0x00008cd0 bic fp, fp, 7                                     |         fp = BIT_MASK (fp, 7);
    0x00008cd4 sub.w sp, sp, fp                                  |         
    0x00008cd8 add.w sl, sp, 8                                   |         sl += var_8h;
    0x00008cdc mov r0, sl                                        |         r0 = sl;
    0x00008cde bl 0x15ea0                                        |         fcn_00015ea0 ();
    0x00008ce2 movs r2, 0x2f                                     |         r2 = 0x2f;
    0x00008ce4 mov r1, r6                                        |         r1 = r6;
    0x00008ce6 strb r2, [r0], 1                                  |         *(r0) = r2;
                                                                 |         r0++;
    0x00008cea bl 0x15ea0                                        |         fcn_00015ea0 ();
    0x00008cee ldr.w ip, [pc, 0x350]                             |         
    0x00008cf2 mov r6, r0                                        |         r6 = r0;
    0x00008cf4 mov.w r2, 0x1b6                                   |         r2 = 0x1b6;
    0x00008cf8 add ip, pc                                        |         ip = 0x11d3e;
    0x00008cfa ldm.w ip!, {r0, r1}                               |         r0 = *(ip!);
                                                                 |         r1 = *((ip! + 4));
    0x00008cfe str r1, [r6, 4]                                   |         *((r6 + 4)) = r1;
    0x00008d00 ldrb.w r1, [ip]                                   |         r1 = *(ip);
    0x00008d04 str r0, [r6]                                      |         *(r6) = r0;
    0x00008d06 mov r0, sl                                        |         r0 = sl;
    0x00008d08 strb r1, [r6, 8]                                  |         *((r6 + 8)) = r1;
    0x00008d0a movw r1, 0x8042                                   |         r1 = 0x8042;
    0x00008d0e bl 0x14db0                                        |         r0 = fcn_00014db0 (r0);
    0x00008d12 adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x00008d14 mov r6, r0                                        |         r6 = r0;
                                                                 |         if (r1 == r0) {
    0x00008d16 beq 0x8e0c                                        |             goto label_11;
                                                                 |         }
    0x00008d18 add.w fp, r7, 0x60                                |         
    0x00008d1c mov r1, fp                                        |         r1 = fp;
    0x00008d1e bl 0x14994                                        |         r0 = fcn_00014994 (r0, r1);
    0x00008d22 cmp r0, 0                                         |         
                                                                 |         if (r0 < 0) {
    0x00008d24 blt 0x8dda                                        |             goto label_12;
                                                                 |         }
    0x00008d26 ldr.w r2, [fp, 0x10]                              |         r2 = *(arg_10h);
    0x00008d2a and r2, r2, 0xf000                                |         r2 &= 0xf000;
    0x00008d2e cmp.w r2, 0x8000                                  |         
                                                                 |         if (r2 != 0x8000) {
    0x00008d32 bne 0x8dda                                        |             goto label_12;
                                                                 |         }
    0x00008d34 ldr r0, [r7, 0x24]                                |         r0 = *((r7 + 0x24));
    0x00008d36 lsr.w r3, r8, 1                                   |         r3 = r8 >> 1;
    0x00008d3a ldrd r1, r2, [fp, 0x28]                           |         __asm ("ldrd r1, r2, [arg_28h]");
    0x00008d3e str r3, [r7, 0x14]                                |         *((r7 + 0x14)) = r3;
    0x00008d40 add r0, r3                                        |         r0 += r3;
    0x00008d42 orrs.w r3, r1, r2                                 |         r3 = r1 | r2;
    0x00008d44 lsls r2, r0, 0xc                                  |         r2 = r0 << 0xc;
    0x00008d46 str r0, [r7, 0x24]                                |         *((r7 + 0x24)) = r0;
                                                                 |         if (r2 == r0) {
    0x00008d48 beq.w 0x8f3a                                      |             goto label_13;
                                                                 |         }
    0x00008d4c ldr r0, [r7, 0x24]                                |         r0 = *((r7 + 0x24));
    0x00008d4e asrs r3, r0, 0x1f                                 |         r3 = r0 >> 0x1f;
    0x00008d50 cmp r2, r3                                        |         
    0x00008d52 it eq                                             |         
                                                                 |         if (r2 == r3) {
    0x00008d54 cmpeq r1, r0                                      |             __asm ("cmpeq r1, r0");
                                                                 |         }
                                                                 |         if (r2 != r3) {
    0x00008d56 bne 0x8e18                                        |             goto label_14;
                                                                 |         }
                                                                 | label_2:
    0x00008d58 mov.w sb, 0                                       |         sb = 0;
    0x00008d5c str r6, [sp]                                      |         *(sp) = r6;
    0x00008d5e str.w sb, [sp, 4]                                 |         __asm ("str.w sb, [var_4h_2]");
    0x00008d60 str r0, [sp, 0x10]                                |         *((sp + 0x10)) = r0;
    0x00008d62 movs r3, 1                                        |         r3 = 1;
    0x00008d64 ldr r1, [r7, 0x24]                                |         r1 = *((r7 + 0x24));
    0x00008d66 movs r2, 3                                        |         r2 = 3;
    0x00008d68 mov r0, sb                                        |         r0 = sb;
    0x00008d6a bl 0x14fc4                                        |         r0 = fcn_00014fc4 (r0, r1);
    0x00008d6e adds r3, r0, 1                                    |         r3 = r0 + 1;
    0x00008d70 mov r5, r0                                        |         r5 = r0;
                                                                 |         if (r3 == r0) {
    0x00008d72 beq.w 0x8fba                                      |             goto label_15;
                                                                 |         }
    0x00008d76 mov r0, r6                                        |         r0 = r6;
    0x00008d78 bl 0x14c44                                        |         fcn_00014c44 ();
    0x00008d7c ldr r1, [r7, 0x14]                                |         r1 = *((r7 + 0x14));
    0x00008d7e add.w r3, r5, 0x38                                |         r3 = r5 + 0x38;
    0x00008d82 str r3, [r7, 0x10]                                |         *((r7 + 0x10)) = r3;
    0x00008d84 ldr r2, [pc, 0x2bc]                               |         
    0x00008d86 adds r6, r1, 4                                    |         r6 = r1 + 4;
    0x00008d88 add r6, r3                                        |         r6 += r3;
    0x00008d8a ldrd r3, r1, [fp, 0x28]                           |         __asm ("ldrd r3, r1, [arg_28h]");
    0x00008d8e add r2, pc                                        |         r2 = 0x11dd6;
    0x00008d90 adds r0, r6, 4                                    |         r0 = r6 + 4;
    0x00008d92 str r6, [r2, 0x14]                                |         *((r2 + 0x14)) = r6;
    0x00008d94 orrs r3, r1                                       |         r3 |= r1;
    0x00008d96 str r0, [r2, 0x18]                                |         *((r2 + 0x18)) = r0;
                                                                 |         if (r3 == r1) {
    0x00008d98 beq 0x8e3a                                        |             goto label_16;
                                                                 |         }
    0x00008d9a ldr r1, [r7, 0x20]                                |         r1 = *((r7 + 0x20));
    0x00008d9c movs r2, 0x14                                     |         r2 = 0x14;
    0x00008d9e mov r0, r5                                        |         r0 = r5;
    0x00008da0 bl 0x15418                                        |         r0 = fcn_00015418 (r0, r1, r2);
                                                                 |         if (r0 == 0) {
    0x00008da4 cbnz r0, 0x8dc0                                   |             
    0x00008da6 ldr r3, [r5, 0x14]                                |             r3 = *((r5 + 0x14));
                                                                 |             if (r3 != 0) {
    0x00008da8 cbnz r3, 0x8dc0                                   |                 goto label_17;
                                                                 |             }
    0x00008daa mov r1, r4                                        |             r1 = r4;
    0x00008dac movs r2, 0x20                                     |             r2 = 0x20;
    0x00008dae add.w r0, r5, 0x18                                |             r0 = r5 + 0x18;
    0x00008db2 bl 0x15418                                        |             r0 = fcn_00015418 (r0, r1, r2);
                                                                 |             if (r0 != 0) {
    0x00008db6 cbnz r0, 0x8dc0                                   |                 goto label_17;
                                                                 |             }
    0x00008db8 ldr r3, [r6, -0x4]                                |             r3 = *((r6 - 0x4));
    0x00008dbc cmp r3, 1                                         |             
                                                                 |             if (r3 == 1) {
    0x00008dbe beq 0x8e70                                        |                 goto label_18;
                                                                 |             }
                                                                 |         }
                                                                 | label_17:
    0x00008dc0 ldr r1, [r7, 0x24]                                |         r1 = *((r7 + 0x24));
    0x00008dc2 mov r0, r5                                        |         r0 = r5;
    0x00008dc4 bl 0x15010                                        |         fcn_00015010 (r0);
    0x00008dc8 b 0x8e1e                                          |         goto label_19;
                                                                 | label_9:
    0x00008dca mov.w r3, 0x190                                   |         r3 = 0x190;
    0x00008dce movs r4, 0x32                                     |         r4 = 0x32;
    0x00008dd0 str r3, [r7, 0x1c]                                |         *((r7 + 0x1c)) = r3;
    0x00008dd2 mov.w r3, 0x1300                                  |         r3 = 0x1300;
    0x00008dd6 str r3, [r7, 0x24]                                |         *((r7 + 0x24)) = r3;
    0x00008dd8 b 0x8c4a                                          |         
                                                                 |     } while (1);
                                                                 | label_12:
    0x00008dda ldr r3, [pc, 0x26c]                               |     
    0x00008ddc ldr r5, [pc, 0x26c]                               |     
    0x00008dde add r3, pc                                        |     r3 = 0x11e2c;
    0x00008de0 ldr r4, [r3]                                      |     r4 = *(0x11e2c);
    0x00008de2 add r5, pc                                        |     r5 = 0x11e32;
                                                                 | label_4:
    0x00008de4 mov r0, r6                                        |     r0 = r6;
    0x00008de6 bl 0x14c44                                        |     fcn_00014c44 ();
                                                                 |     do {
    0x00008dea add.w r1, r7, 0xd0                                |         r1 = r7 + 0xd0;
    0x00008dee mov r0, r4                                        |         r0 = r4;
    0x00008df0 mov.w r2, 0x190                                   |         r2 = 0x190;
    0x00008df4 bl 0xfa88                                         |         fcn_0000fa88 (r0, r1);
    0x00008df8 mov r1, sl                                        |         r1 = sl;
    0x00008dfa mov r2, r0                                        |         r2 = r0;
    0x00008dfc mov r0, r5                                        |         r0 = r5;
    0x00008dfe bl 0x8b3c                                         |         fcn_00008b3c ();
    0x00008e02 add.w r7, r7, 0x264                               |         r7 += 0x264;
    0x00008e06 mov sp, r7                                        |         
    0x00008e08 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_11:
    0x00008e0c ldr r3, [pc, 0x240]                               |         
    0x00008e0e ldr r5, [pc, 0x244]                               |         
    0x00008e10 add r3, pc                                        |         r3 = 0x11e64;
    0x00008e12 ldr r4, [r3]                                      |         r4 = *(0x11e64);
    0x00008e14 add r5, pc                                        |         r5 = 0x11e6e;
    0x00008e16 b 0x8dea                                          |         
                                                                 |     } while (1);
                                                                 | label_14:
    0x00008e18 mov r0, r6                                        |     r0 = r6;
    0x00008e1a bl 0x14c44                                        |     fcn_00014c44 ();
                                                                 | label_19:
    0x00008e1e ldr r3, [pc, 0x238]                               |     
    0x00008e20 mov r1, sl                                        |     r1 = sl;
    0x00008e22 ldr r0, [pc, 0x238]                               |     
    0x00008e24 add r3, pc                                        |     r3 = 0x11e82;
    0x00008e26 ldr.w r2, [r3, 0x170]                             |     r2 = *(0x11ff2);
    0x00008e2a add r0, pc                                        |     r0 = 0x11e8c;
    0x00008e2c bl 0x8b3c                                         |     fcn_00008b3c ();
    0x00008e30 add.w r7, r7, 0x264                               |     r7 += 0x264;
    0x00008e34 mov sp, r7                                        |     
    0x00008e36 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_16:
    0x00008e3a ldr.w ip, [r7, 0x20]                              |     ip = *((r7 + 0x20));
    0x00008e3e mov.w lr, 1                                       |     lr = 1;
    0x00008e42 str.w sb, [r5, 0x14]                              |     __asm ("str.w sb, [r5, 0x14]");
    0x00008e46 ldm.w ip!, {r0, r1, r2, r3}                       |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
                                                                 |     r2 = *((ip! + 8));
                                                                 |     r3 = *((ip! + 12));
    0x00008e4a str r0, [r5]                                      |     *(r5) = r0;
    0x00008e4c ldr.w r0, [ip]                                    |     r0 = *(ip);
    0x00008e50 str r1, [r5, 4]                                   |     *((r5 + 4)) = r1;
    0x00008e52 str r2, [r5, 8]                                   |     *((r5 + 8)) = r2;
    0x00008e54 str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x00008e56 str r0, [r5, 0x10]                                |     *((r5 + 0x10)) = r0;
    0x00008e58 ldm r4!, {r0, r1, r2, r3}                         |     r0 = *(r4!);
                                                                 |     r1 = *((r4! + 4));
                                                                 |     r2 = *((r4! + 8));
                                                                 |     r3 = *((r4! + 12));
    0x00008e5a str r0, [r5, 0x18]                                |     *((r5 + 0x18)) = r0;
    0x00008e5c str r1, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r1;
    0x00008e5e str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x00008e60 str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
    0x00008e62 ldm r4!, {r0, r1, r2, r3}                         |     r0 = *(r4!);
                                                                 |     r1 = *((r4! + 4));
                                                                 |     r2 = *((r4! + 8));
                                                                 |     r3 = *((r4! + 12));
    0x00008e64 str r0, [r5, 0x28]                                |     *((r5 + 0x28)) = r0;
    0x00008e66 str r1, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r1;
    0x00008e68 str r2, [r5, 0x30]                                |     *((r5 + 0x30)) = r2;
    0x00008e6a str r3, [r5, 0x34]                                |     *((r5 + 0x34)) = r3;
    0x00008e6c str lr, [r6, -0x4]                                |     
                                                                 | label_18:
    0x00008e70 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x00008e72 movs r1, 1                                        |     r1 = 1;
    0x00008e74 ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x00008e76 add r0, r3                                        |     r0 += r3;
    0x00008e78 ldr r3, [pc, 0x1e4]                               |     
    0x00008e7a add r3, pc                                        |     
    0x00008e7c ldr r3, [r3]                                      |     r3 = *(0x11ede);
    0x00008e7e blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00008e80 ldr r2, [pc, 0x1e0]                               |     
    0x00008e82 add r2, pc                                        |     r2 = 0x11eea;
    0x00008e84 str r0, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r0;
    0x00008e86 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00008e88 beq.w 0x8ff8                                      |         goto label_20;
                                                                 |     }
    0x00008e8c ldr r4, [r7, 0x14]                                |     r4 = *((r7 + 0x14));
    0x00008e8e movs r3, 0                                        |     r3 = 0;
    0x00008e90 ldr r1, [r2, 0x14]                                |     r1 = *((r2 + 0x14));
    0x00008e92 str r3, [r2, 0x24]                                |     *((r2 + 0x24)) = r3;
    0x00008e94 adds r6, r0, r4                                   |     r6 = r0 + r4;
    0x00008e96 ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x00008e98 str r6, [r2, 0x20]                                |     *((r2 + 0x20)) = r6;
    0x00008e9a ldr r2, [r1]                                      |     r2 = *(r1);
    0x00008e9c ldr r5, [pc, 0x1c8]                               |     
    0x00008e9e cmp r2, r3                                        |     
    0x00008ea0 it lo                                             |     
                                                                 |     if (r2 >= r3) {
    0x00008ea2 ldrlo r3, [r1]                                    |         r3 = *(r1);
                                                                 |     }
    0x00008ea4 add r5, pc                                        |     r5 = 0x11f10;
    0x00008ea6 str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
                                                                 |     if (r3 == 0) {
    0x00008ea8 cbz r3, 0x8ee6                                    |         goto label_21;
                                                                 |     }
    0x00008eaa ldr.w lr, [r5, 0x18]                              |     
    0x00008eae add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00008eb2 add.w r2, lr, r3, lsl 2                           |     r2 = lr + (r3 << 2);
    0x00008eb6 subs r2, 0xc                                      |     r2 -= 0xc;
                                                                 |     do {
    0x00008eb8 ldr r1, [r2, 4]                                   |         r1 = *((r2 + 4));
    0x00008eba cmp r2, lr                                        |         
    0x00008ebc ldr r3, [r5, 0x24]                                |         r3 = *((r5 + 0x24));
    0x00008ebe lsr.w r1, r1, 2                                   |         r1 >>= 2;
    0x00008ec2 add.w ip, r3, 1                                   |         
    0x00008ec6 str.w ip, [r5, 0x24]                              |         __asm ("str.w ip, [r5, 0x24]");
    0x00008eca add.w ip, r6, r3, lsl 3                           |         
    0x00008ece ldrh.w sb, [r0, r1, lsl 1]                        |         offset_0 = r1 << 1;
                                                                 |         sb = *((r0 + offset_0));
    0x00008ed2 str.w r2, [r6, r3, lsl 3]                         |         __asm ("str.w r2, [r6, r3, lsl 3]");
    0x00008ed6 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00008ed8 sub.w r2, r2, 0xc                                 |         r2 -= 0xc;
    0x00008edc strh.w sb, [ip, 4]                                |         *((ip + 4)) = sb;
    0x00008ee0 strh.w r3, [r0, r1, lsl 1]                        |         offset_1 = r1 << 1;
                                                                 |         *((r0 + offset_1)) = r3;
    0x00008ee4 bne 0x8eb8                                        |         
                                                                 |     } while (r2 != lr);
                                                                 | label_21:
    0x00008ee6 ldr r3, [pc, 0x184]                               |     
    0x00008ee8 add r3, pc                                        |     r3 = 0x11f5a;
    0x00008eea ldr r5, [r3, 4]                                   |     r5 = *(0x11f5e);
    0x00008eec ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x00008eee subs r4, r3, r5                                   |     r4 = r3 - r5;
    0x00008ef0 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x00008ef2 cmp r4, r3                                        |     
    0x00008ef4 it ls                                             |     
                                                                 |     if (r4 > r3) {
    0x00008ef6 movls r3, 0x10000                                 |         r3 = 0x10000;
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x00008efa bls 0x8f1e                                        |         
    0x00008efc ldr r1, [r7, 0x14]                                |         r1 = *((r7 + 0x14));
    0x00008efe mov r0, r4                                        |         r0 = r4;
    0x00008f00 bl 0x16b60                                        |         r0 = fcn_00016b60 (r0, r1, r2);
    0x00008f04 cmp.w r0, 0x10000                                 |         
    0x00008f08 it hs                                             |         
                                                                 |         if (r0 < 0x10000) {
    0x00008f0a movhs r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r0 >= 0x10000) {
    0x00008f0c bhs 0x8f1e                                        |             goto label_5;
                                                                 |         }
    0x00008f0e cmp r0, 0xff                                      |         
                                                                 |         if (r0 < 0xff) {
    0x00008f10 bls 0x8fd6                                        |             goto label_22;
                                                                 |         }
    0x00008f12 mov r1, r0                                        |         r1 = r0;
    0x00008f14 mov.w r0, 0x10000                                 |         r0 = 0x10000;
    0x00008f18 bl 0x16b60                                        |         r0 = fcn_00016b60 (r0, r1, r2);
    0x00008f1c mov r3, r0                                        |         r3 = r0;
                                                                 |     }
                                                                 | label_5:
    0x00008f1e ldrd r0, r1, [r7, 0x10]                           |     __asm ("ldrd r0, r1, [r7, 0x10]");
    0x00008f22 mov r2, r5                                        |     r2 = r5;
    0x00008f24 bl 0x148c8                                        |     fcn_000148c8 (r0, r1, r2, r3);
    0x00008f28 ldr r3, [pc, 0x144]                               |     
    0x00008f2a movs r2, 1                                        |     r2 = 1;
    0x00008f2c add.w r7, r7, 0x264                               |     r7 += 0x264;
    0x00008f30 add r3, pc                                        |     r3 = 0x11fa4;
    0x00008f32 str r2, [r3]                                      |     *(r3) = r2;
    0x00008f34 mov sp, r7                                        |     
    0x00008f36 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_13:
    0x00008f3a ldr.w r2, [sb, 0xc]                               |     r2 = *((sb + 0xc));
    0x00008f3e mov r1, r5                                        |     r1 = r5;
    0x00008f40 str.w sp, [r7, 0xc]                               |     __asm ("str.w sp, [r7, 0xc]");
    0x00008f44 adds r3, r2, 7                                    |     r3 = r2 + 7;
    0x00008f46 str r2, [r7, 0x10]                                |     *((r7 + 0x10)) = r2;
    0x00008f48 bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x00008f4c sub.w sp, sp, r3                                  |     
    0x00008f50 add r3, sp, 8                                     |     r3 += var_8h;
    0x00008f52 mov r0, r3                                        |     r0 = r3;
    0x00008f54 str r3, [r7, 8]                                   |     *((r7 + 8)) = r3;
    0x00008f56 blx 0x159e0                                       |     fcn_000159e0 (r0, r1);
    0x00008f5a ldr r2, [r7, 0x10]                                |     r2 = *((r7 + 0x10));
    0x00008f5c mov r0, r6                                        |     r0 = r6;
    0x00008f5e ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x00008f60 rsbs r1, r2, 0                                    |     r1 = r2 - ;
    0x00008f62 mov r2, r5                                        |     r2 = r5;
    0x00008f64 ands r1, r3                                       |     r1 &= r3;
    0x00008f66 bl 0x14bd8                                        |     fcn_00014bd8 (r0, r1);
    0x00008f68 cdp2 p0, 3, c3, c7, c1, 0                         |     __asm ("cdp2 p0, 3, c3, c7, c1, 0");
                                                                 |     if (r1 == r3) {
    0x00008f6c beq 0x8fc6                                        |         goto label_23;
                                                                 |     }
    0x00008f6e ldr r5, [pc, 0x104]                               |     
    0x00008f70 str.w r8, [r7, 0x10]                              |     __asm ("str.w r8, [r7, 0x10]");
    0x00008f74 str r4, [r7, 4]                                   |     *((r7 + 4)) = r4;
    0x00008f76 add r5, pc                                        |     r5 = 0x11ff0;
    0x00008f78 ldr.w r8, [r7, 0x24]                              |     r8 = *((r7 + 0x24));
    0x00008f7c mov r4, r5                                        |     r4 = r5;
    0x00008f7e ldr r5, [r7, 8]                                   |     r5 = *((r7 + 8));
    0x00008f80 b 0x8f88                                          |     
                                                                 |     while (r2 == r0) {
    0x00008f82 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00008f84 cmp r2, 4                                         |         
                                                                 |         if (r2 != 4) {
    0x00008f86 bne 0x8fc6                                        |             goto label_23;
                                                                 |         }
    0x00008f88 ldr.w r2, [sb, 0xc]                               |         r2 = *((sb + 0xc));
    0x00008f8c mov r1, r5                                        |         r1 = r5;
    0x00008f8e mov r0, r6                                        |         r0 = r6;
    0x00008f90 subs r2, 1                                        |         r2--;
    0x00008f92 and.w r2, r2, r8                                  |         r2 &= r8;
    0x00008f96 bl 0x14e64                                        |         r0 = fcn_00014e64 ();
    0x00008f9a adds r2, r0, 1                                    |         r2 = r0 + 1;
    0x00008f9c beq 0x8f82                                        |         
                                                                 |     }
    0x00008f9e cmp r0, 0                                         |     
    0x00008fa0 ldr.w r8, [r7, 0x10]                              |     r8 = *((r7 + 0x10));
    0x00008fa4 ldr r4, [r7, 4]                                   |     r4 = *((r7 + 4));
                                                                 |     if (r0 >= 0) {
    0x00008fa6 blt 0x8fc6                                        |         
    0x00008fa8 ldr.w sp, [r7, 0xc]                               |         sp = *((r7 + 0xc));
    0x00008fac b 0x8d58                                          |         goto label_2;
                                                                 | label_7:
    0x00008fae movs r2, 0                                        |         r2 = 0;
    0x00008fb0 mov.w r1, -1                                      |         r1 = -1;
    0x00008fb4 mov r4, r2                                        |         r4 = r2;
    0x00008fb6 mov r0, r1                                        |         r0 = r1;
    0x00008fb8 b 0x8bfe                                          |         goto label_3;
                                                                 | label_15:
    0x00008fba ldr r3, [pc, 0xbc]                                |         
    0x00008fbc ldr r5, [pc, 0xbc]                                |         
    0x00008fbe add r3, pc                                        |         r3 = 0x1203c;
    0x00008fc0 ldr r4, [r3]                                      |         r4 = *(0x1203c);
    0x00008fc2 add r5, pc                                        |         r5 = 0x12042;
    0x00008fc4 b 0x8de4                                          |         goto label_4;
                                                                 |     }
                                                                 | label_23:
    0x00008fc6 ldr r3, [pc, 0xb8]                                |     
    0x00008fc8 ldr r5, [pc, 0xb8]                                |     
    0x00008fca ldr.w sp, [r7, 0xc]                               |     sp = *((r7 + 0xc));
    0x00008fce add r3, pc                                        |     r3 = 0x12054;
    0x00008fd0 ldr r4, [r3]                                      |     r4 = *(0x12054);
    0x00008fd2 add r5, pc                                        |     r5 = 0x1205a;
    0x00008fd4 b 0x8de4                                          |     goto label_4;
                                                                 | label_22:
    0x00008fd6 cmp.w r4, 0x1000000                               |     
    0x00008fda itete lo                                          |     
                                                                 |     if (r4 >= 0x1000000) {
    0x00008fdc ldrlo r1, [r7, 0x14]                              |         r1 = *((r7 + 0x14));
                                                                 |     }
                                                                 |     if (r4 < 0x1000000) {
    0x00008fde lsrhs r1, r8, 9                                   |         r1 = r8 >> 9;
                                                                 |     }
                                                                 |     if (r4 < 0x1000000) {
    0x00008fe2 lslhs r0, r4, 8                                   |         r0 = r4 << 8;
                                                                 |     }
                                                                 |     if (r4 >= 0x1000000) {
    0x00008fe4 mov r0, r4                                        |         r0 = r4;
                                                                 |     }
    0x00008fe6 bl 0x16b60                                        |     r0 = fcn_00016b60 (r0, r1, r2);
    0x00008fea mov r1, r0                                        |     r1 = r0;
    0x00008fec mov.w r0, 0x1000000                               |     r0 = 0x1000000;
    0x00008ff0 bl 0x16b60                                        |     r0 = fcn_00016b60 (r0, r1, r2);
    0x00008ff4 mov r3, r0                                        |     r3 = r0;
    0x00008ff6 b 0x8f1e                                          |     goto label_5;
                                                                 | label_20:
    0x00008ff8 ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
    0x00008ffa mov r0, r5                                        |     r0 = r5;
    0x00008ffc bl 0x15010                                        |     fcn_00015010 (r0);
    0x00009000 ldr r0, [pc, 0x84]                                |     
    0x00009002 add r0, pc                                        |     r0 = 0x1208e;
    0x00009004 bl 0x8b5c                                         |     dl_fatal_printf ()
                                                                 | label_10:
    0x00009008 movw r4, 0x851f                                   |     
                                                                 |     /* if there is a right shift of 5, then it's a division by 1/100 */
    0x0000900c movt r4, 0x51eb                                   |     r4 = 0x51eb851f;
    0x00009010 umull r3, r4, r3, r4                              |     r3:r4 = r3 * r4;
    0x00009014 movs r3, 0x60                                     |     r3 = 0x60;
    0x00009016 lsrs r4, r4, 5                                    |     r4 >>= 5;
    0x00009018 mul r3, r4, r3                                    |     r3 = r4 * r3;
    0x0000901c adds r3, 0x40                                     |     r3 += 0x40;
    0x0000901e str r3, [r7, 0x24]                                |     *((r7 + 0x24)) = r3;
    0x00009020 lsls r3, r4, 3                                    |     r3 = r4 << 3;
    0x00009022 str r3, [r7, 0x1c]                                |     *((r7 + 0x1c)) = r3;
    0x00009024 b 0x8c4a                                          |     goto label_6;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x960c).
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/ld-linux-armhf.so.3 @ 0xbec8 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0000bec8 ()                                  | void fcn_0000bec8 (uint32_t arg1, int16_t arg2) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0000bec8 ldr r2, [pc, 0x64]                            |     
    0x0000beca push {r3, r4, r5, r6, r7, lr}                 |     
    0x0000becc mov r4, r1                                    |     r4 = r1;
    0x0000bece adds r1, 0x10                                 |     r1 += 0x10;
    0x0000bed0 ldr r6, [r0, -0x8]                            |     r6 = *((r0 - 0x8));
    0x0000bed4 add r2, pc                                    |     r2 = 0x17e08;
    0x0000bed6 lsls r1, r1, 3                                |     r1 <<= 3;
    0x0000bed8 ldr.w r7, [r2, 0x8fc]                         |     r7 = *(0x18704);
    0x0000bedc add.w r5, r4, 0xe                             |     r5 = r4 + 0xe;
    0x0000bee0 cmp r7, r0                                    |     
                                                             |     if (r7 == r0) {
    0x0000bee2 beq 0xbf0a                                    |         goto label_3;
                                                             |     }
    0x0000bee4 ldr r2, [pc, 0x4c]                            |     
    0x0000bee6 subs r0, 8                                    |     r0 -= 8;
    0x0000bee8 add r2, pc                                    |     r2 = 0x17e20;
    0x0000beea ldr r3, [r2]                                  |     r3 = *(0x17e20);
    0x0000beec blx r3                                        |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0000beee mov r4, r0                                    |     r4 = r0;
                                                             |     if (r0 == 0) {
    0x0000bef0 cbz r0, 0xbf28                                |         goto label_4;
                                                             |     }
    0x0000bef2 adds r7, r6, 2                                |     r7 = r6 + 2;
    0x0000bef4 lsls r7, r7, 3                                |     r7 <<= 3;
                                                             |     do {
    0x0000bef6 subs r2, r5, r6                               |         r2 = r5 - r6;
    0x0000bef8 str r5, [r4]                                  |         *(r4) = r5;
    0x0000befa lsls r2, r2, 3                                |         r2 <<= 3;
    0x0000befc movs r1, 0                                    |         r1 = 0;
    0x0000befe adds r0, r4, r7                               |         r0 = r4 + r7;
    0x0000bf00 blx 0x159e0                                   |         fcn_000159e0 (r0, r1);
    0x0000bf04 add.w r0, r4, 8                               |         r0 = r4 + 8;
    0x0000bf08 pop {r3, r4, r5, r6, r7, pc}                  |         
                                                             | label_3:
    0x0000bf0a ldr r3, [pc, 0x2c]                            |         
    0x0000bf0c mov r0, r1                                    |         r0 = r1;
    0x0000bf0e add r3, pc                                    |         
    0x0000bf10 ldr r3, [r3]                                  |         r3 = *(0x17e4c);
    0x0000bf12 blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000bf14 mov r4, r0                                    |         r4 = r0;
                                                             |         if (r0 == 0) {
    0x0000bf16 cbz r0, 0xbf28                                |             goto label_4;
                                                             |         }
    0x0000bf18 sub.w r1, r7, 8                               |         r1 = r7 - 8;
    0x0000bf1c adds r7, r6, 2                                |         r7 = r6 + 2;
    0x0000bf1e lsls r7, r7, 3                                |         r7 <<= 3;
    0x0000bf20 mov r2, r7                                    |         r2 = r7;
    0x0000bf22 blx 0x16400                                   |         fcn_00016400 (r0, r1);
    0x0000bf26 b 0xbef6                                      |         
                                                             |     } while (1);
                                                             | label_4:
    0x0000bf28 ldr r0, [pc, 0x10]                            |     
    0x0000bf2a add r0, pc                                    |     r0 = 0x17e6a;
    0x0000bf2c bl 0x8b5c                                     |     dl_fatal_printf ()
    0x0000bf30 movs r1, 0x28                                 |     r1 = 0x28;
    0x0000bf32 movs r1, r0                                   |     r1 = r0;
    0x0000bf34 subs r0, r2, 0                                |     r0 = r2 - 0;
    0x0000bf36 movs r1, r0                                   |     r1 = r0;
    0x0000bf38 adds r6, r4, 7                                |     r6 = r4 + 7;
    0x0000bf3a movs r1, r0                                   |     r1 = r0;
    0x0000bf3c b 0xc00c                                      |     goto label_5;
                                                             | label_2:
    0x0000bfbe ldr r2, [pc, 0x84]                            |     
    0x0000bfc0 add r2, pc                                    |     r2 = 0x1800a;
    0x0000bfc2 str.w r3, [r2, 0x8e8]                         |     __asm ("str.w r3, [r2, 0x8e8]");
                                                             | label_1:
    0x0000bfc6 str.w r3, [r0, 0x258]                         |     __asm ("str.w r3, [r0, 0x258]");
    0x0000bfca pop {r4, r5, r6, pc}                          |     
                                                             |     do {
                                                             | label_0:
    0x0000bfe4 sub.w r2, r3, ip                              |         r2 = r3 - ip;
    0x0000bfe8 cmp r2, r4                                    |         
                                                             |         if (r2 >= r4) {
    0x0000bfea bhs 0xc00c                                    |             goto label_5;
                                                             |         }
    0x0000bfec add.w r2, r1, r2, lsl 3                       |         r2 = r1 + (r2 << 3);
    0x0000bff0 ldr r6, [r2, 0xc]                             |         r6 = *((r2 + 0xc));
                                                             |         if (r6 == 0) {
    0x0000bff2 cbz r6, 0xc016                                |             goto label_6;
                                                             |         }
    0x0000bff4 adds r3, 1                                    |         r3++;
    0x0000bff6 cmp lr, r3                                    |         
    0x0000bff8 bhs 0xbfe4                                    |         
                                                             |     } while (lr >= r3);
    0x0000bffa ldr r3, [pc, 0x4c]                            |     
    0x0000bffc movs r2, 0x9c                                 |     r2 = 0x9c;
    0x0000bffe ldr r1, [pc, 0x4c]                            |     
    0x0000c000 ldr r0, [pc, 0x4c]                            |     
    0x0000c002 add r3, pc                                    |     r3 = 0x18050;
    0x0000c004 add r1, pc                                    |     r1 = 0x18056;
    0x0000c006 add r0, pc                                    |     r0 = 0x1805a;
    0x0000c008 bl 0xfba4                                     |     fcn_0000fba4 (r0);
                                                             | label_5:
    0x0000c00c ldr r1, [r1, 4]                               |     r1 = *((r1 + 4));
    0x0000c00e add ip, r4                                    |     
                                                             |     if (r1 != 0) {
    0x0000c010 cbz r1, 0xc018                                |         
    0x0000c012 ldr r4, [r1]                                  |         r4 = *(r1);
    0x0000c014 b 0xbfe4                                      |         goto label_0;
                                                             | label_6:
    0x0000c016 str r0, [r2, 0xc]                             |         *((r2 + 0xc)) = r0;
                                                             |     }
    0x0000c018 cmp r3, r5                                    |     
                                                             |     if (r3 < r5) {
    0x0000c01a bls 0xbfc6                                    |         goto label_1;
                                                             |     }
    0x0000c01c adds r5, 1                                    |     r5++;
    0x0000c01e cmp r3, r5                                    |     
                                                             |     if (r3 == r5) {
    0x0000c020 bne 0xc02e                                    |         
    0x0000c022 ldr r2, [pc, 0x30]                            |         
    0x0000c024 movs r1, 0                                    |         r1 = 0;
    0x0000c026 add r2, pc                                    |         r2 = "ECONNRESET";
    0x0000c028 strb.w r1, [r2, 0x8e4]                        |         *((r2 + 0x8e4)) = r1;
    0x0000c02c b 0xbfbe                                      |         goto label_2;
                                                             |     }
    0x0000c02e ldr r3, [pc, 0x28]                            |     
    0x0000c030 movs r2, 0xae                                 |     r2 = 0xae;
    0x0000c032 ldr r1, [pc, 0x28]                            |     
    0x0000c034 ldr r0, [pc, 0x28]                            |     
    0x0000c036 add r3, pc                                    |     r3 = 0x18094;
    0x0000c038 add r1, pc                                    |     r1 = 0x1809a;
    0x0000c03a add r0, pc                                    |     r0 = 0x1809e;
    0x0000c03c bl 0xfba4                                     |     fcn_0000fba4 (r0);
    0x0000c040 movs r0, 0x4c                                 |     r0 = 0x4c;
    0x0000c042 movs r1, r0                                   |     r1 = r0;
    0x0000c044 movs r0, 0x3c                                 |     r0 = 0x3c;
    0x0000c046 movs r1, r0                                   |     r1 = r0;
    0x0000c048 b 0xc4f8                                      |     
    0x0000c4f8 adds r7, r5, 4                                |     r7 = r5 + 4;
    0x0000c4fa add r6, pc                                    |     r6 += pc;
                                                             |     do {
    0x0000c4fc adds r4, 1                                    |         r4++;
    0x0000c4fe ldr r3, [r6]                                  |         r3 = *(r6);
    0x0000c500 ldr.w r0, [r7, r4, lsl 3]                     |         offset_0 = r4 << 3;
                                                             |         r0 = *((r7 + offset_0));
    0x0000c504 blx r3                                        |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000c506 ldr r3, [r5, -0x8]                            |         r3 = *((r5 - 0x8));
    0x0000c50a cmp r4, r3                                    |         
    0x0000c50c blo 0xc4fc                                    |         
                                                             |     } while (r4 <= r3);
    0x0000c50e ldr r3, [pc, 0x38]                            |     
    0x0000c510 add r3, pc                                    |     
    0x0000c512 ldr.w r3, [r3, 0x8fc]                         |     r3 = *(0x1935a);
    0x0000c516 cmp r3, r5                                    |     
                                                             |     if (r3 != r5) {
    0x0000c518 beq 0xc526                                    |         
    0x0000c51a ldr r3, [pc, 0x30]                            |         
    0x0000c51c sub.w r0, r5, 8                               |         r0 = r5 - 8;
    0x0000c520 add r3, pc                                    |         
    0x0000c522 ldr r3, [r3]                                  |         r3 = *(0x18a72);
    0x0000c524 blx r3                                        |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                             |     }
    0x0000c526 cmp.w sb, 0                                   |     
                                                             |     if (sb != 0) {
    0x0000c52a beq 0xc540                                    |         
    0x0000c52c ldr r3, [pc, 0x20]                            |         
    0x0000c52e subw r8, r8, 0x504                            |         __asm ("subw r8, r8, 0x504");
    0x0000c532 ldr.w r0, [r8]                                |         r0 = *(r8);
    0x0000c536 pop.w {r4, r5, r6, r7, r8, sb, sl, lr}        |         
    0x0000c53a add r3, pc                                    |         
    0x0000c53c ldr r3, [r3]                                  |         r3 = *(0x18a8e);
    0x0000c53e bx r3                                         |         return uint32_t (*r3)() ();
                                                             |     }
    0x0000c540 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |     
                                                             | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xbf40 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0000bf40 ()                      | void fcn_0000bf40 (int16_t arg1) {
                                                 |     int16_t var_4h;
                                                 |     r0 = arg1;
    0x0000bf40 push {r4, r5, r6, lr}             |     
    0x0000bf42 sub sp, 8                         |     
    0x0000bf44 movs r2, 0                        |     r2 = 0;
    0x0000bf46 add r6, sp, 4                     |     r6 += var_4h;
    0x0000bf48 mov r5, r0                        |     r5 = r0;
    0x0000bf4a mov r1, r6                        |     r1 = r6;
    0x0000bf4c mov r0, r2                        |     r0 = r2;
    0x0000bf4e bl 0xdf8c                         |     tunable_get_val ();
    0x0000bf52 ldr r4, [sp, 4]                   |     r4 = var_4h;
    0x0000bf54 movs r2, 0                        |     r2 = 0;
    0x0000bf56 mov r1, r6                        |     r1 = r6;
    0x0000bf58 movs r0, 0x18                     |     r0 = 0x18;
    0x0000bf5a bl 0xdf8c                         |     tunable_get_val ();
    0x0000bf5e cmp r4, 0x10                      |     
    0x0000bf60 mov r3, r4                        |     r3 = r4;
    0x0000bf62 it hs                             |     
                                                 |     if (r4 < 0x10) {
    0x0000bf64 movhs r3, 0x10                    |         r3 = 0x10;
                                                 |     }
    0x0000bf66 ldr r1, [sp, 4]                   |     r1 = var_4h;
    0x0000bf68 rsb.w r2, r3, 0x10                |     r2 = 0x10 - r3;
    0x0000bf6c cmp r2, r5                        |     
                                                 |     if (r2 > r5) {
    0x0000bf6e blo 0xbf94                        |         
    0x0000bf70 add r3, r5                        |         r3 += r5;
    0x0000bf72 ldr r0, [pc, 0x2c]                |         
    0x0000bf74 subs r2, r3, 1                    |         r2 = r3 - 1;
    0x0000bf76 ldr r4, [pc, 0x2c]                |         
    0x0000bf78 add r3, r2                        |         r3 += r2;
    0x0000bf7a add.w r3, r3, r3, lsl 3           |         r3 += (r3 << 3);
    0x0000bf7e add r0, pc                        |         r0 = 0x17f24;
    0x0000bf80 str.w r1, [r0, 0x8f8]             |         __asm ("str.w r1, [r0, 0x8f8]");
    0x0000bf84 add r4, pc                        |         r4 = 0x17f2e;
    0x0000bf86 add.w r1, r1, r3, lsl 4           |         r1 += (r3 << 4);
    0x0000bf8a adds r1, 0x90                     |         r1 += 0x90;
    0x0000bf8c str.w r1, [r4, 0x16c]             |         __asm ("str.w r1, [r4, 0x16c]");
    0x0000bf90 add sp, 8                         |         
    0x0000bf92 pop {r4, r5, r6, pc}              |         
                                                 |     }
    0x0000bf94 ldr r0, [pc, 0x10]                |     
    0x0000bf96 mov r1, r5                        |     r1 = r5;
    0x0000bf98 add r0, pc                        |     r0 = "ENODEV";
    0x0000bf9a bl 0x8b5c                         |     dl_fatal_printf ()
    0x0000bf9e nop                               |     
    0x0000bfa0 movs r0, 0x7e                     |     r0 = 0x7e;
    0x0000bfa2 movs r1, r0                       |     r1 = r0;
    0x0000bfa4 adds r0, r4, 6                    |     r0 = r4 + 6;
    0x0000bfa6 movs r1, r0                       |     r1 = r0;
    0x0000bfa8 b 0xc054                          |     
    0x0000c054 subs r6, r2, 7                    |     r6 = r2 - 7;
    0x0000c056 movs r1, r0                       |     r1 = r0;
    0x0000c058 b 0xc4a0                          |     return void (*0xc4a0)() ();
                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xda94 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0000da94 ()                                          | void fcn_0000da94 (int16_t arg1) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int32_t var_20h_2;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     int16_t var_38h;
                                                                     |     int32_t var_38h_2;
                                                                     |     r0 = arg1;
    0x0000da94 ldr.w r3, [pc, 0x414]                                 |     
    0x0000da98 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0000da9c mov sb, r0                                            |     sb = r0;
    0x0000da9e sub sp, 0x44                                          |     
    0x0000daa0 add r3, pc                                            |     
    0x0000daa2 ldr r3, [r3]                                          |     r3 = *(0x1b950);
    0x0000daa4 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0000daa6 bne.w 0xde68                                          |         goto label_19;
                                                                     |     }
                                                                     | label_14:
    0x0000daaa ldr.w r3, [pc, 0x404]                                 |     r3 = *(0x0000deb0);
    0x0000daae ldr.w fp, [pc, 0x404]                                 |     fp = *(0x0000deb4);
    0x0000dab2 add r3, pc                                            |     r3 += pc;
    0x0000dab4 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0000dab6 add fp, pc                                            |     
    0x0000dab8 ldr r3, [pc, 0x3fc]                                   |     
    0x0000daba add r3, pc                                            |     r3 = 0x1b976;
    0x0000dabc strd r3, fp, [sp, 0x10]                               |     __asm ("strd r3, fp, [var_0hx10]");
                                                                     | label_1:
    0x0000dac0 mov r6, sb                                            |     r6 = sb;
                                                                     | label_0:
    0x0000dac2 mov r5, r6                                            |     r5 = r6;
    0x0000dac4 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0000dac6 beq.w 0xdcd2                                          |         goto label_20;
                                                                     |     }
    0x0000daca ldr r0, [r6], 4                                       |     r0 = *(r6);
                                                                     |     r6 += 4;
    0x0000dace cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0000dad0 beq.w 0xdcd2                                          |         goto label_20;
                                                                     |     }
    0x0000dad4 ldrb r3, [r0]                                         |     r3 = *(r0);
    0x0000dad6 cmp r3, 0                                             |     
    0x0000dad8 it ne                                                 |     
                                                                     |     if (r3 != 0) {
    0x0000dada cmpne r3, 0x3d                                        |         __asm ("cmpne r3, 0x3d");
                                                                     |     }
    0x0000dadc ite ne                                                |     
                                                                     |     if (r3 == 0) {
    0x0000dade movne r4, 1                                           |         r4 = 1;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0000dae0 moveq r4, 0                                           |         r4 = 0;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0000dae2 beq 0xdafa                                            |         goto label_21;
                                                                     |     }
    0x0000dae4 mov r2, r0                                            |     r2 = r0;
                                                                     |     do {
    0x0000dae6 mov r1, r2                                            |         r1 = r2;
    0x0000dae8 ldrb r3, [r2, 1]!                                     |         r3 = *((r2 += 1));
    0x0000daec cmp r3, 0                                             |         
    0x0000daee it ne                                                 |         
                                                                     |         if (r3 != 0) {
    0x0000daf0 cmpne r3, 0x3d                                        |             __asm ("cmpne r3, 0x3d");
                                                                     |         }
    0x0000daf2 bne 0xdae6                                            |         
                                                                     |     } while (r3 != 0);
    0x0000daf4 rsb.w r4, r0, 1                                       |     r4 = 1 - r0;
    0x0000daf8 add r4, r1                                            |     r4 += r1;
                                                                     | label_21:
    0x0000dafa cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0000dafc beq 0xdac2                                            |         goto label_0;
                                                                     |     }
    0x0000dafe mov r8, r0                                            |     r8 = r0;
    0x0000db00 ldr r0, [pc, 0x3b8]                                   |     
    0x0000db02 adds r4, 1                                            |     r4++;
    0x0000db04 mov sb, r6                                            |     sb = r6;
    0x0000db06 add.w fp, r8, r4                                      |     
    0x0000db0a mov r1, r8                                            |     r1 = r8;
    0x0000db0c add r0, pc                                            |     r0 = 0x1b9cc;
    0x0000db0e movs r3, 0x47                                         |     r3 = 0x47;
    0x0000db10 b 0xdb1a                                              |     
                                                                     |     while (r3 == 0) {
    0x0000db12 ldrb r3, [r0, 1]!                                     |         r3 = *((r0 += 1));
    0x0000db16 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0000db18 beq 0xdbca                                            |             goto label_22;
                                                                     |         }
    0x0000db1a ldrb r2, [r1], 1                                      |         r2 = *(r1);
                                                                     |         r1++;
    0x0000db1e subs r3, r2, r3                                       |         r3 = r2 - r3;
    0x0000db20 it ne                                                 |         
                                                                     |         if (r3 == r2) {
    0x0000db22 movne r3, 1                                           |             r3 = 1;
                                                                     |         }
    0x0000db24 cmp r2, 0                                             |         
    0x0000db26 it eq                                                 |         
                                                                     |         if (r2 != 0) {
    0x0000db28 orreq r3, r3, 1                                       |             r3 |= 1;
                                                                     |         }
    0x0000db2c cmp r3, 0                                             |         
    0x0000db2e beq 0xdb12                                            |         
                                                                     |     }
                                                                     | label_4:
    0x0000db30 ldr r7, [pc, 0x38c]                                   |     
    0x0000db32 movs r4, 0                                            |     r4 = 0;
    0x0000db34 mov ip, r4                                            |     
    0x0000db36 add r7, pc                                            |     r7 = 0x1b9fa;
    0x0000db38 b 0xdb4a                                              |     goto label_23;
                                                                     | label_2:
    0x0000db3a add.w ip, ip, 1                                       |     
    0x0000db3e adds r7, 0x70                                         |     r7 += 0x70;
    0x0000db40 cmp.w ip, 0x1b                                        |     
    0x0000db44 add.w r4, r4, 0x70                                    |     r4 += 0x70;
                                                                     |     if (ip == 0x1b) {
    0x0000db48 beq 0xdac0                                            |         goto label_1;
                                                                     |     }
                                                                     | label_23:
    0x0000db4a ldrb.w r3, [r7, 0x50]                                 |     r3 = *((r7 + 0x50));
    0x0000db4e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0000db50 bne 0xdb3a                                            |         goto label_2;
                                                                     |     }
    0x0000db52 ldrb.w r6, [r7, 0x58]                                 |     r6 = *((r7 + 0x58));
    0x0000db56 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0000db58 beq 0xdb3a                                            |         goto label_2;
                                                                     |     }
    0x0000db5a add.w lr, r7, 0x58                                    |     lr = r7 + 0x58;
    0x0000db5e mov r0, r8                                            |     r0 = r8;
    0x0000db60 mov sl, lr                                            |     sl = lr;
    0x0000db62 mov r1, r6                                            |     r1 = r6;
                                                                     | label_3:
    0x0000db64 ldrb r2, [r0], 1                                      |     r2 = *(r0);
                                                                     |     r0++;
    0x0000db68 clz r3, r2                                            |     r3 &= r2;
    0x0000db6c lsrs r3, r3, 5                                        |     r3 >>= 5;
    0x0000db6e cmp r2, r1                                            |     
    0x0000db70 it ne                                                 |     
                                                                     |     if (r2 == r1) {
    0x0000db72 orrne r3, r3, 1                                       |         r3 |= 1;
                                                                     |     }
    0x0000db76 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0000db78 bne 0xdb3a                                            |         goto label_2;
                                                                     |     }
    0x0000db7a ldrb r1, [sl, 1]!                                     |     r1 = *((sl += 1));
    0x0000db7e cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0000db80 bne 0xdb64                                            |         goto label_3;
                                                                     |     }
    0x0000db82 ldrb r3, [r0]                                         |     r3 = *(r0);
    0x0000db84 cmp r3, 0x3d                                          |     
                                                                     |     if (r3 != 0x3d) {
    0x0000db86 bne 0xdb3a                                            |         goto label_2;
                                                                     |     }
    0x0000db88 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0000db8a ldr r3, [r3]                                          |     r3 = *(r3);
                                                                     |     if (r3 == 0) {
    0x0000db8c cbz r3, 0xdb98                                        |         goto label_24;
                                                                     |     }
    0x0000db8e ldr r3, [r7, 0x54]                                    |     r3 = *((r7 + 0x54));
    0x0000db90 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0000db92 beq 0xdc76                                            |         goto label_25;
                                                                     |     }
                                                                     | label_8:
    0x0000db94 cmp r3, 2                                             |     
                                                                     |     if (r3 != 2) {
    0x0000db96 bne 0xdb3a                                            |         goto label_2;
                                                                     |     }
                                                                     | label_24:
    0x0000db98 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0000db9a rsb ip, ip, ip, lsl 3                                 |     
    0x0000db9e add.w r3, r3, ip, lsl 4                               |     r3 += (ip << 4);
    0x0000dba2 ldr r3, [r3, 0x30]                                    |     r3 = *((r3 + 0x30));
    0x0000dba4 cmp r3, 3                                             |     
    0x0000dba6 it eq                                                 |     
                                                                     |     if (r3 != 3) {
    0x0000dba8 streq fp, [sp, 0x38]                                  |         var_38h = fp;
                                                                     |     }
                                                                     |     if (r3 != 3) {
    0x0000dbac beq 0xdbba                                            |         
    0x0000dbae movs r1, 0                                            |         r1 = 0;
    0x0000dbb0 mov r0, fp                                            |         r0 = fp;
    0x0000dbb2 bl 0x74e4                                             |         fcn_000074e4 (r0, r1);
    0x0000dbb6 strd r0, r1, [sp, 0x38]                               |         __asm ("strd r0, r1, [var_38h]");
                                                                     |     }
    0x0000dbba ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0000dbbc movs r3, 0                                            |     r3 = 0;
    0x0000dbbe add r1, sp, 0x38                                      |     r1 += var_38h;
    0x0000dbc0 mov r2, r3                                            |     r2 = r3;
    0x0000dbc2 add r0, r4                                            |     r0 += r4;
    0x0000dbc4 bl 0xd954                                             |     fcn_0000d954 (r0, r1, r2, r3);
    0x0000dbc8 b 0xdac0                                              |     goto label_1;
                                                                     | label_22:
    0x0000dbca ldrb r3, [r1]                                         |     r3 = *(r1);
    0x0000dbcc cmp r3, 0x3d                                          |     
                                                                     |     if (r3 != 0x3d) {
    0x0000dbce bne 0xdb30                                            |         goto label_4;
                                                                     |     }
    0x0000dbd0 add.w r3, r8, -1                                      |     r3 = r8 + -1;
                                                                     |     do {
    0x0000dbd4 mov r1, r3                                            |         r1 = r3;
    0x0000dbd6 ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0000dbda cmp r2, 0                                             |         
    0x0000dbdc bne 0xdbd4                                            |         
                                                                     |     } while (r2 != 0);
    0x0000dbde rsb.w r7, r8, 1                                       |     r7 = 1 - r8;
    0x0000dbe2 add r7, r1                                            |     r7 += r1;
    0x0000dbe4 adds r0, r7, 2                                        |     r0 = r7 + 2;
    0x0000dbe6 bl 0x7290                                             |     r0 = fcn_00007290 (r0);
    0x0000dbea mov r6, r0                                            |     r6 = r0;
    0x0000dbec cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0000dbee beq.w 0xde9c                                          |         goto label_26;
                                                                     |     }
    0x0000dbf2 adds r2, r7, 1                                        |     r2 = r7 + 1;
    0x0000dbf4 add.w r3, r8, r2                                      |     r3 = r8 + r2;
    0x0000dbf8 add r2, r0                                            |     r2 += r0;
                                                                     |     do {
    0x0000dbfa ldrb r1, [r3, -0x1]!                                  |         r1 = *((r3 -= 0x1));
    0x0000dbfe cmp r3, r8                                            |         
    0x0000dc00 strb r1, [r2, -0x1]!                                  |         *((r2 -= 0x1)) = r1;
    0x0000dc04 bne 0xdbfa                                            |         
                                                                     |     } while (r3 != r8);
    0x0000dc06 ldrb.w sl, [r6, r4]                                   |     sl = *((r6 + r4));
    0x0000dc0a adds r2, r6, r4                                       |     r2 = r6 + r4;
    0x0000dc0c str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0000dc0e cmp.w sl, 0                                           |     
                                                                     |     if (sl == 0) {
    0x0000dc12 beq 0xdc72                                            |         goto label_27;
                                                                     |     }
    0x0000dc14 ldr r3, [pc, 0x2ac]                                   |     
    0x0000dc16 cmp.w sl, 0x3d                                        |     
    0x0000dc1a it ne                                                 |     
                                                                     |     if (sl != 0x3d) {
    0x0000dc1c cmpne sl, 0x3a                                        |         __asm ("cmpne sl, 0x3a");
                                                                     |     }
    0x0000dc20 strd r5, sb, [sp, 0x24]                               |     __asm ("strd r5, sb, [var_28h]");
    0x0000dc24 mov ip, r2                                            |     
    0x0000dc26 mov sb, fp                                            |     sb = fp;
    0x0000dc28 add r3, pc                                            |     r3 = 0x1baf0;
    0x0000dc2a ldr r0, [r3]                                          |     r0 = *(0x1baf0);
    0x0000dc2c ldr r3, [pc, 0x298]                                   |     
    0x0000dc2e add r3, pc                                            |     r3 = 0x1bafa;
    0x0000dc30 str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x0000dc32 ldr r3, [pc, 0x298]                                   |     
    0x0000dc34 add r3, pc                                            |     r3 = 0x1bb06;
    0x0000dc36 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0000dc38 ldr r3, [pc, 0x294]                                   |     
    0x0000dc3a add r3, pc                                            |     r3 = 0x1bb0e;
    0x0000dc3c str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0000dc3e mov.w r3, 0                                           |     r3 = 0;
    0x0000dc42 strd r3, r6, [sp, 0x1c]                               |     __asm ("strd r3, r6, [var_20h]");
                                                                     |     if (sl == 0x3d) {
    0x0000dc46 beq.w 0xdd82                                          |         goto label_28;
                                                                     |     }
                                                                     | label_10:
    0x0000dc4a mov r3, sl                                            |     r3 = sl;
    0x0000dc4c mov r2, ip                                            |     r2 = ip;
                                                                     |     if (r3 == 0) {
    0x0000dc4e cbz r3, 0xdc62                                        |         goto label_29;
                                                                     |     }
                                                                     |     do {
    0x0000dc50 ldrb r3, [r2, 1]                                      |         r3 = *((r2 + 1));
    0x0000dc52 adds r1, r2, 1                                        |         r1 = r2 + 1;
    0x0000dc54 cmp r3, 0x3d                                          |         
    0x0000dc56 it ne                                                 |         
                                                                     |         if (r3 != 0x3d) {
    0x0000dc58 cmpne r3, 0x3a                                        |             __asm ("cmpne r3, 0x3a");
                                                                     |         }
                                                                     |         if (r3 == 0x3d) {
    0x0000dc5a beq 0xdcd8                                            |             goto label_30;
                                                                     |         }
    0x0000dc5c mov r2, r1                                            |         r2 = r1;
    0x0000dc5e cmp r3, 0                                             |         
    0x0000dc60 bne 0xdc50                                            |         
                                                                     |     } while (r3 != 0);
                                                                     | label_29:
    0x0000dc62 ldrd r6, r5, [sp, 0x20]                               |     __asm ("ldrd r6, r5, [var_20h]");
    0x0000dc66 ldr.w sb, [sp, 0x28]                                  |     sb = var_28h;
                                                                     |     if (r0 != 0) {
    0x0000dc6a cbz r0, 0xdc72                                        |         
    0x0000dc6c ldr r2, [sp, 0xc]                                     |         r2 = var_ch;
    0x0000dc6e ldr r1, [sp, 0x1c]                                    |         r1 = var_1ch;
    0x0000dc70 strb r3, [r2, r1]                                     |         *((r2 + r1)) = r3;
                                                                     |     }
                                                                     | label_27:
    0x0000dc72 str r6, [r5]                                          |     *(r5) = r6;
    0x0000dc74 b 0xdac0                                              |     goto label_1;
                                                                     | label_25:
    0x0000dc76 ldr r1, [r5]                                          |     r1 = *(r5);
    0x0000dc78 mov sb, r5                                            |     sb = r5;
    0x0000dc7a cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0000dc7c beq.w 0xdb3a                                          |         goto label_2;
                                                                     |     }
    0x0000dc80 mov r2, r5                                            |     r2 = r5;
    0x0000dc82 mov r0, r1                                            |     r0 = r1;
                                                                     |     if (r6 == 0) {
    0x0000dc84 cbz r6, 0xdcb4                                        |         goto label_31;
                                                                     |     }
                                                                     | label_5:
    0x0000dc86 mov sb, lr                                            |     sb = lr;
    0x0000dc88 b 0xdc90                                              |     
                                                                     |     while (r3 == 0) {
    0x0000dc8a ldrb r6, [sb, 1]!                                     |         r6 = *((sb += 1));
                                                                     |         if (r6 == 0) {
    0x0000dc8e cbz r6, 0xdcb4                                        |             goto label_31;
                                                                     |         }
    0x0000dc90 ldrb r1, [r0], 1                                      |         r1 = *(r0);
                                                                     |         r0++;
    0x0000dc94 clz r3, r1                                            |         r3 &= r1;
    0x0000dc98 lsrs r3, r3, 5                                        |         r3 >>= 5;
    0x0000dc9a cmp r1, r6                                            |         
    0x0000dc9c it ne                                                 |         
                                                                     |         if (r1 == r6) {
    0x0000dc9e orrne r3, r3, 1                                       |             r3 |= 1;
                                                                     |         }
    0x0000dca2 cmp r3, 0                                             |         
    0x0000dca4 beq 0xdc8a                                            |         
                                                                     |     }
                                                                     | label_6:
    0x0000dca6 ldr r0, [r2, 4]                                       |     r0 = *((r2 + 4));
    0x0000dca8 adds r2, 4                                            |     r2 += 4;
                                                                     |     if (r0 == 0) {
    0x0000dcaa cbz r0, 0xdccc                                        |         goto label_32;
                                                                     |     }
                                                                     | label_7:
    0x0000dcac ldrb.w r6, [r7, 0x58]                                 |     r6 = *((r7 + 0x58));
    0x0000dcb0 cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0000dcb2 bne 0xdc86                                            |         goto label_5;
                                                                     |     }
                                                                     | label_31:
    0x0000dcb4 ldrb r3, [r0]                                         |     r3 = *(r0);
    0x0000dcb6 cmp r3, 0x3d                                          |     
                                                                     |     if (r3 != 0x3d) {
    0x0000dcb8 bne 0xdca6                                            |         goto label_6;
                                                                     |     }
    0x0000dcba mov r3, r2                                            |     r3 = r2;
                                                                     |     do {
    0x0000dcbc ldr r1, [r3, 4]                                       |         r1 = *((r3 + 4));
    0x0000dcbe str r1, [r3], 4                                       |         *(r3) = r1;
                                                                     |         r3 += 4;
    0x0000dcc2 cmp r1, 0                                             |         
    0x0000dcc4 bne 0xdcbc                                            |         
                                                                     |     } while (r1 != 0);
    0x0000dcc6 ldr r0, [r2]                                          |     r0 = *(r2);
    0x0000dcc8 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0000dcca bne 0xdcac                                            |         goto label_7;
                                                                     |     }
                                                                     | label_32:
    0x0000dccc ldr r3, [r7, 0x54]                                    |     r3 = *((r7 + 0x54));
    0x0000dcce mov sb, r5                                            |     sb = r5;
    0x0000dcd0 b 0xdb94                                              |     goto label_8;
                                                                     | label_20:
    0x0000dcd2 add sp, 0x44                                          |     
    0x0000dcd4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_30:
    0x0000dcd8 rsb.w r1, ip, 2                                       |     r1 = 2 - ip;
    0x0000dcdc add r2, r1                                            |     r2 += r1;
                                                                     | label_11:
    0x0000dcde cmp r3, 0x3a                                          |     
    0x0000dce0 add.w r6, ip, r2                                      |     r6 = ip + r2;
                                                                     |     if (r3 == 0x3a) {
    0x0000dce4 beq 0xdd6e                                            |         goto label_33;
                                                                     |     }
    0x0000dce6 ldrb.w r4, [ip, r2]                                   |     r4 = *((ip + r2));
    0x0000dcea ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0000dcec cmp r4, 0                                             |     
    0x0000dcee it ne                                                 |     
                                                                     |     if (r4 != 0) {
    0x0000dcf0 cmpne r4, 0x3a                                        |         __asm ("cmpne r4, 0x3a");
                                                                     |     }
    0x0000dcf2 sub.w r3, r6, r3                                      |     r3 = r6 - r3;
    0x0000dcf6 it ne                                                 |     
                                                                     |     if (r4 == 0) {
    0x0000dcf8 movne r4, 1                                           |         r4 = 1;
                                                                     |     }
    0x0000dcfa add r3, sb                                            |     r3 += sb;
    0x0000dcfc it eq                                                 |     
                                                                     |     if (r4 != 0) {
    0x0000dcfe moveq r4, 0                                           |         r4 = 0;
                                                                     |     }
    0x0000dd00 str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     |     if (r4 == 0) {
    0x0000dd02 beq.w 0xde8e                                          |         goto label_34;
                                                                     |     }
    0x0000dd06 adds r3, r6, 1                                        |     r3 = r6 + 1;
    0x0000dd08 movs r4, 0                                            |     r4 = 0;
                                                                     |     do {
    0x0000dd0a mov r5, r3                                            |         r5 = r3;
    0x0000dd0c ldrb r2, [r3], 1                                      |         r2 = *(r3);
                                                                     |         r3++;
    0x0000dd10 adds r4, 1                                            |         r4++;
    0x0000dd12 cmp r2, 0x3a                                          |         
    0x0000dd14 it ne                                                 |         
                                                                     |         if (r2 != 0x3a) {
    0x0000dd16 cmpne r2, 0                                           |             __asm ("cmpne r2, 0");
                                                                     |         }
    0x0000dd18 bne 0xdd0a                                            |         
                                                                     |     } while (r2 != 0x3a);
                                                                     | label_16:
    0x0000dd1a ldr r7, [pc, 0x1b8]                                   |     
    0x0000dd1c mov.w fp, 0                                           |     
    0x0000dd20 mov r2, sl                                            |     r2 = sl;
    0x0000dd22 mov lr, r0                                            |     lr = r0;
    0x0000dd24 add r7, pc                                            |     r7 = 0x1bbfe;
                                                                     | label_9:
    0x0000dd26 ldrb r0, [r7]                                         |     r0 = *(r7);
    0x0000dd28 str r7, [sp, 4]                                       |     var_4h = r7;
    0x0000dd2a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0000dd2c beq.w 0xde8a                                          |         goto label_35;
                                                                     |     }
    0x0000dd30 mov r1, ip                                            |     r1 = ip;
    0x0000dd32 mov sl, r7                                            |     sl = r7;
    0x0000dd34 mov r3, r0                                            |     r3 = r0;
    0x0000dd36 b 0xdd3e                                              |     
                                                                     |     while (r3 == 0) {
    0x0000dd38 ldrb r3, [sl, 1]!                                     |         r3 = *((sl += 1));
                                                                     |         if (r3 == 0) {
    0x0000dd3c cbz r3, 0xdd88                                        |             goto label_36;
                                                                     |         }
    0x0000dd3e ldrb r8, [r1], 1                                      |         r8 = *(r1);
                                                                     |         r1++;
    0x0000dd42 subs.w r3, r8, r3                                     |         r3 = r8 - r3;
    0x0000dd46 it ne                                                 |         
                                                                     |         if (r3 == r8) {
    0x0000dd48 movne r3, 1                                           |             r3 = 1;
                                                                     |         }
    0x0000dd4a cmp.w r8, 0                                           |         
    0x0000dd4e it eq                                                 |         
                                                                     |         if (r8 != 0) {
    0x0000dd50 orreq r3, r3, 1                                       |             r3 |= 1;
                                                                     |         }
    0x0000dd54 cmp r3, 0                                             |         
    0x0000dd56 beq 0xdd38                                            |         
                                                                     |     }
                                                                     | label_12:
    0x0000dd58 add.w fp, fp, 1                                       |     
    0x0000dd5c adds r7, 0x70                                         |     r7 += 0x70;
    0x0000dd5e cmp.w fp, 0x1b                                        |     
                                                                     |     if (fp != 0x1b) {
    0x0000dd62 bne 0xdd26                                            |         goto label_9;
                                                                     |     }
    0x0000dd64 mov r0, lr                                            |     r0 = lr;
                                                                     | label_13:
    0x0000dd66 ldrb r3, [r5]                                         |     r3 = *(r5);
                                                                     |     if (r3 != 0) {
    0x0000dd68 cbz r3, 0xdd6e                                        |         
    0x0000dd6a adds r4, 1                                            |         r4++;
    0x0000dd6c add r6, r4                                            |         r6 += r4;
                                                                     |     }
                                                                     | label_33:
    0x0000dd6e ldrb.w sl, [r6]                                       |     sl = *(r6);
    0x0000dd72 mov ip, r6                                            |     
    0x0000dd74 cmp.w sl, 0x3d                                        |     
    0x0000dd78 it ne                                                 |     
                                                                     |     if (sl == 0x3d) {
    0x0000dd7a cmpne sl, 0x3a                                        |         __asm ("cmpne sl, 0x3a");
                                                                     |         goto label_37;
                                                                     |     }
                                                                     |     if (sl != 0x3d) {
                                                                     | label_37:
    0x0000dd7e bne.w 0xdc4a                                          |         goto label_10;
                                                                     |     }
                                                                     | label_28:
    0x0000dd82 mov r3, sl                                            |     r3 = sl;
    0x0000dd84 movs r2, 1                                            |     r2 = 1;
    0x0000dd86 b 0xdcde                                              |     goto label_11;
                                                                     | label_36:
    0x0000dd88 ldrb r3, [r1]                                         |     r3 = *(r1);
                                                                     | label_15:
    0x0000dd8a cmp r3, 0x3d                                          |     
                                                                     |     if (r3 != 0x3d) {
    0x0000dd8c bne 0xdd58                                            |         goto label_12;
                                                                     |     }
    0x0000dd8e mov r3, lr                                            |     r3 = lr;
    0x0000dd90 mov lr, r0                                            |     lr = r0;
    0x0000dd92 mov r0, r3                                            |     r0 = r3;
    0x0000dd94 ldr.w r8, [sp, 4]                                     |     r8 = var_4h;
    0x0000dd98 lsl.w r3, fp, 3                                       |     r3 = fp << 3;
    0x0000dd9c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0000dd9e beq 0xde32                                            |         goto label_38;
                                                                     |     }
    0x0000dda0 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0000dda2 sub.w r2, r3, fp                                      |     r2 = r3 - fp;
    0x0000dda6 add.w r2, r1, r2, lsl 4                               |     r2 = r1 + (r2 << 4);
    0x0000ddaa ldr r2, [r2, 0x54]                                    |     r2 = *((r2 + 0x54));
    0x0000ddac cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0000ddae beq 0xdd66                                            |         goto label_13;
                                                                     |     }
    0x0000ddb0 ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0000ddb2 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0000ddb4 beq 0xde92                                            |         goto label_39;
                                                                     |     }
    0x0000ddb6 ldr r0, [sp, 0xc]                                     |     r0 = var_ch;
    0x0000ddb8 movs r2, 0x3a                                         |     r2 = 0x3a;
    0x0000ddba add.w ip, r1, 1                                       |     
    0x0000ddbe str.w ip, [sp, 0x1c]                                  |     __asm ("str.w ip, [var_1ch]");
    0x0000ddc2 strb r2, [r0, r1]                                     |     *((r0 + r1)) = r2;
    0x0000ddc4 adds r1, 2                                            |     r1 += 2;
    0x0000ddc6 ldrb.w lr, [r7]                                       |     
    0x0000ddca add.w r2, r0, ip                                      |     r2 = r0 + ip;
                                                                     | label_17:
    0x0000ddce cmp.w lr, 0                                           |     
                                                                     |     if (lr == 0) {
    0x0000ddd2 beq 0xde98                                            |         goto label_40;
                                                                     |     }
    0x0000ddd4 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0000ddd6 mov r0, lr                                            |     r0 = lr;
    0x0000ddd8 ldr r1, [sp, 0xc]                                     |     r1 = var_ch;
    0x0000ddda subs r2, 1                                            |     r2--;
    0x0000dddc add r2, r1                                            |     r2 += r1;
                                                                     |     do {
    0x0000ddde mov r1, r2                                            |         r1 = r2;
    0x0000dde0 strb r0, [r2, 1]!                                     |         *((r2 += 1)) = r0;
    0x0000dde4 ldrb r0, [r7, 1]!                                     |         r0 = *((r7 += 1));
    0x0000dde8 cmp r0, 0                                             |         
    0x0000ddea bne 0xddde                                            |         
                                                                     |     } while (r0 != 0);
    0x0000ddec ldr r0, [sp, 0xc]                                     |     r0 = var_ch;
    0x0000ddee rsb.w r2, r0, 2                                       |     r2 = 2 - r0;
    0x0000ddf0 lsls r2, r0, 8                                        |     r2 = r0 << 8;
    0x0000ddf2 add r2, r1                                            |     r2 += r1;
    0x0000ddf4 adds r1, r2, 1                                        |     r1 = r2 + 1;
    0x0000ddf6 add r2, r0                                            |     r2 += r0;
    0x0000ddf8 str r1, [sp, 0x1c]                                    |     var_1ch = r1;
                                                                     | label_18:
    0x0000ddfa movs r1, 0x3d                                         |     r1 = 0x3d;
    0x0000ddfc strb r1, [r2]                                         |     *(r2) = r1;
                                                                     |     if (r4 == 0) {
    0x0000ddfe cbz r4, 0xde20                                        |         goto label_41;
                                                                     |     }
    0x0000de00 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0000de02 ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0000de04 ldr r0, [sp, 0xc]                                     |     r0 = var_ch;
    0x0000de06 subs r2, 1                                            |     r2--;
    0x0000de08 subs r1, 1                                            |     r1--;
    0x0000de0a adds r7, r2, r4                                       |     r7 = r2 + r4;
    0x0000de0c add r1, r0                                            |     r1 += r0;
                                                                     |     do {
    0x0000de0e ldrb r0, [r2, 1]!                                     |         r0 = *((r2 += 1));
    0x0000de12 cmp r2, r7                                            |         
    0x0000de14 strb r0, [r1, 1]!                                     |         *((r1 += 1)) = r0;
    0x0000de18 bne 0xde0e                                            |         
                                                                     |     } while (r2 != r7);
    0x0000de1a ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0000de1c add r2, r4                                            |     r2 += r4;
    0x0000de1e str r2, [sp, 0x1c]                                    |     var_1ch = r2;
                                                                     | label_41:
    0x0000de20 ldr r2, [pc, 0xb4]                                    |     
    0x0000de22 sub.w r1, r3, fp                                      |     r1 = r3 - fp;
    0x0000de26 add r2, pc                                            |     r2 = 0x1bd02;
    0x0000de28 add.w r2, r2, r1, lsl 4                               |     r2 += (r1 << 4);
    0x0000de2c ldr r2, [r2, 0x54]                                    |     r2 = *((r2 + 0x54));
    0x0000de2e cmp r2, 2                                             |     
                                                                     |     if (r2 != 2) {
    0x0000de30 bne 0xdea4                                            |         goto label_42;
                                                                     |     }
                                                                     | label_38:
    0x0000de32 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0000de34 sub.w r3, r3, fp                                      |     r3 -= fp;
    0x0000de38 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0000de3a movs r1, 0                                            |     r1 = 0;
    0x0000de3c add.w r3, r2, r3, lsl 4                               |     r3 = r2 + (r3 << 4);
    0x0000de40 strb r1, [r0, r4]                                     |     *((r0 + r4)) = r1;
    0x0000de42 ldr r3, [r3, 0x30]                                    |     r3 = *((r3 + 0x30));
    0x0000de44 cmp r3, 3                                             |     
                                                                     |     if (r3 == 3) {
    0x0000de46 beq 0xde62                                            |         goto label_43;
                                                                     |     }
    0x0000de48 bl 0x74e4                                             |     fcn_000074e4 (r0, r1);
    0x0000de4c strd r0, r1, [sp, 0x38]                               |     __asm ("strd r0, r1, [var_38h]");
                                                                     |     do {
    0x0000de50 movs r3, 0                                            |         r3 = 0;
    0x0000de52 mov r0, r8                                            |         r0 = r8;
    0x0000de54 mov r2, r3                                            |         r2 = r3;
    0x0000de56 add r1, sp, 0x38                                      |         r1 += var_38h;
    0x0000de58 bl 0xd954                                             |         fcn_0000d954 (r0, r1, r2, r3);
    0x0000de5c ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
    0x0000de5e ldr r0, [r3]                                          |         r0 = *(r3);
    0x0000de60 b 0xdd66                                              |         goto label_13;
                                                                     | label_43:
    0x0000de62 ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0000de64 str r3, [sp, 0x38]                                    |         var_38h = r3;
    0x0000de66 b 0xde50                                              |         
                                                                     |     } while (1);
                                                                     | label_19:
    0x0000de68 ldr r0, [pc, 0x70]                                    |     
    0x0000de6a movs r1, 0                                            |     r1 = 0;
    0x0000de6c mov.w ip, 0x21                                        |     
    0x0000de70 add r0, pc                                            |     r0 = 0x1bd50;
    0x0000de72 bl 0x13fd0                                            |     r0 = fcn_00013fd0 ();
    0x0000de76 cmn.w r0, 0x1000                                      |     
                                                                     |     if (r0 > 0x1000) {
    0x0000de7a bhi.w 0xdaaa                                          |         goto label_14;
                                                                     |     }
    0x0000de7e ldr r3, [pc, 0x60]                                    |     
    0x0000de80 movs r2, 2                                            |     r2 = 2;
    0x0000de82 add r3, pc                                            |     r3 = 0x1bd68;
    0x0000de84 str.w r2, [r3, 0xbb4]                                 |     __asm ("str.w r2, [r3, 0xbb4]");
    0x0000de88 b 0xdaaa                                              |     goto label_14;
                                                                     | label_35:
    0x0000de8a mov r3, r2                                            |     r3 = r2;
    0x0000de8c b 0xdd8a                                              |     goto label_15;
                                                                     | label_34:
    0x0000de8e mov r5, r6                                            |     r5 = r6;
    0x0000de90 b 0xdd1a                                              |     goto label_16;
                                                                     | label_39:
    0x0000de92 ldr r2, [sp, 0xc]                                     |     r2 = var_ch;
    0x0000de94 movs r1, 1                                            |     r1 = 1;
    0x0000de96 b 0xddce                                              |     goto label_17;
                                                                     | label_40:
    0x0000de98 str r1, [sp, 0x1c]                                    |     var_1ch = r1;
    0x0000de9a b 0xddfa                                              |     goto label_18;
                                                                     | label_26:
    0x0000de9c ldr r0, [pc, 0x44]                                    |     
    0x0000de9e add r0, pc                                            |     r0 = 0x1bd86;
    0x0000dea0 bl 0x8b5c                                             |     dl_fatal_printf ()
                                                                     | label_42:
    0x0000dea4 ldr r3, [pc, 0x40]                                    |     
    0x0000dea6 add r3, pc                                            |     r3 = 0x1bd92;
    0x0000dea8 ldr r0, [r3]                                          |     r0 = *(0x1bd92);
    0x0000deaa b 0xdd66                                              |     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/ld-linux-armhf.so.3 @ 0xf01c */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000f01c ()                  | void fcn_0000f01c (uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             |     int32_t var_8h;
                                             |     int32_t var_8h_2;
                                             |     int16_t var_10h;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
                                             |     r3 = arg4;
    0x0000f01c ldr.w ip, [pc, 0x6c]          |     
    0x0000f020 mov r5, r1                    |     r5 = r1;
    0x0000f022 push {r7, lr}                 |     
    0x0000f024 mov r4, r2                    |     r4 = r2;
    0x0000f026 sub.w sp, sp, 0x410           |     
    0x0000f02a mov r6, r3                    |     r6 = r3;
    0x0000f02c add ip, pc                    |     ip = 0x1e0bc;
    0x0000f02e ldr.w r7, [ip]                |     
    0x0000f032 ldr r7, [r7]                  |     r7 = GLIBC_PRIVATE;
                                             |     if (r7 == 0) {
    0x0000f034 cbz r7, 0xf07c                |         goto label_2;
                                             |     }
                                             |     if (r4 == 0) {
    0x0000f036 cbz r4, 0xf084                |         goto label_3;
                                             |     }
                                             | label_1:
    0x0000f038 ldrb r3, [r5]                 |     r3 = *(r5);
                                             |     if (r3 == 0) {
    0x0000f03a cbz r3, 0xf062                |         goto label_4;
                                             |     }
    0x0000f03c ldr.w r8, [pc, 0x50]          |     
    0x0000f040 add r8, pc                    |     r8 = 0x1e0d4;
                                             |     if (r0 != 0) {
    0x0000f042 cbnz r0, 0xf06c               |         goto label_5;
                                             |     }
                                             |     do {
    0x0000f044 ldr r3, [pc, 0x4c]            |         
    0x0000f046 add r3, pc                    |         r3 = 0x1e0de;
    0x0000f048 mov r0, r3                    |         r0 = r3;
                                             | label_0:
    0x0000f04a strd r3, r0, [sp, 8]          |         __asm ("strd r3, r0, [var_8h]");
    0x0000f04e mov r2, r4                    |         r2 = r4;
    0x0000f050 ldr r0, [pc, 0x44]            |         
    0x0000f052 mov r3, r5                    |         r3 = r5;
    0x0000f054 mov r1, r7                    |         r1 = r7;
    0x0000f056 str r6, [sp, 4]               |         var_4h = r6;
    0x0000f058 str.w r8, [sp]                |         __asm ("str.w r8, [sp]");
    0x0000f05c add r0, pc                    |         r0 = 0x1e0f8;
    0x0000f05e bl 0x8b5c                     |         dl_fatal_printf ()
                                             | label_4:
    0x0000f062 ldr.w r8, [pc, 0x38]          |         r8 = *(0x0000f09c);
    0x0000f066 add r8, pc                    |         r8 += pc;
    0x0000f068 cmp r0, 0                     |         
    0x0000f06a beq 0xf044                    |         
                                             |     } while (r0 == 0);
                                             | label_5:
    0x0000f06c mov.w r2, 0x400               |     r2 = 0x400;
    0x0000f070 add r1, sp, 0x10              |     r1 += var_10h;
    0x0000f072 bl 0xfa88                     |     fcn_0000fa88 (r0, r1);
    0x0000f076 ldr r3, [pc, 0x28]            |     
    0x0000f078 add r3, pc                    |     r3 = 0x1e11e;
    0x0000f07a b 0xf04a                      |     goto label_0;
                                             | label_2:
    0x0000f07c ldr r7, [pc, 0x24]            |     
    0x0000f07e add r7, pc                    |     r7 = 0x1e126;
    0x0000f080 cmp r4, 0                     |     
                                             |     if (r4 != 0) {
    0x0000f082 bne 0xf038                    |         goto label_1;
                                             |     }
                                             | label_3:
    0x0000f084 ldr r4, [pc, 0x20]            |     
    0x0000f086 add r4, pc                    |     r4 = 0x1e132;
    0x0000f088 b 0xf038                      |     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/ld-linux-armhf.so.3 @ 0xfb8c */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000fb8c ()                  | void fcn_0000fb8c (int16_t arg_338h, int16_t arg1) {
                                             |     r0 = arg1;
    0x0000fb8c mov r1, r0                    |     r1 = r0;
    0x0000fb8e ldr r0, [pc, 8]               |     r0 = *(0x0000fb98);
    0x0000fb90 push {r3, lr}                 |     
    0x0000fb92 add r0, pc                    |     r0 += pc;
    0x0000fb94 bl 0x8b5c                     |     dl_fatal_printf ()
    0x0000fb98 str r0, [sp, 0x338]           |     *(arg_338h) = r0;
    0x0000fb9a movs r0, r0                   |     
    0x0000fb9c movs r0, 0x7f                 |     r0 = 0x7f;
    0x0000fb9e push {r3, lr}                 |     
    0x0000fba0 bl 0x151e8                    |     fcn_000151e8 (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/ld-linux-armhf.so.3 @ 0xfba4 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.0000fba4 ()              | void fcn_0000fba4 (int16_t arg1) {
                                         |     int16_t var_0h;
                                         |     int16_t var_4h;
                                         |     r0 = arg1;
    0x0000fba4 push {lr}                 |     
    0x0000fba6 sub sp, 0xc               |     
                                         |     if (r3 == 0) {
    0x0000fba8 cbz r3, 0xfbba            |         goto label_0;
                                         |     }
    0x0000fbaa ldr r4, [pc, 0x18]        |     
    0x0000fbac add r4, pc                |     r4 = 0x1f776;
                                         |     do {
    0x0000fbae str r0, [sp, 4]           |         var_4h = r0;
    0x0000fbb0 ldr r0, [pc, 0x14]        |         
    0x0000fbb2 str r4, [sp]              |         *(sp) = r4;
    0x0000fbb4 add r0, pc                |         r0 = 0x1f780;
    0x0000fbb6 bl 0x8b5c                 |         dl_fatal_printf ()
                                         | label_0:
    0x0000fbba ldr r3, [pc, 0x10]        |         
    0x0000fbbc add r3, pc                |         r3 = 0x1f78e;
    0x0000fbbe mov r4, r3                |         r4 = r3;
    0x0000fbc0 b 0xfbae                  |         
                                         |     } 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/ld-linux-armhf.so.3 @ 0x10b30 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.00010b30 ()                          | void fcn_00010b30 (int16_t arg1) {
                                                     |     r0 = arg1;
    0x00010b30 push {r3, r4, r5, r6, r7, lr}         |     
    0x00010b32 ldr r4, [pc, 0xdc]                    |     
    0x00010b34 add r4, pc                            |     r4 = 0x2174a;
    0x00010b36 ldr.w r7, [r4, 0x8fc]                 |     r7 = *(0x22046);
    0x00010b3a ldr.w r6, [r4, 0x8e8]                 |     r6 = *(0x22032);
    0x00010b3e str.w r6, [r4, 0x8f0]                 |     __asm ("str.w r6, [r4, 0x8f0]");
    0x00010b42 cmp r7, 0                             |     
                                                     |     if (r7 != 0) {
    0x00010b44 bne 0x10bd6                           |         goto label_2;
                                                     |     }
    0x00010b46 ldr r3, [pc, 0xcc]                    |     r3 = *(0x10c16);
                                                     | label_1:
    0x00010b48 mov r5, r0                            |     r5 = r0;
    0x00010b4a add.w r0, r6, 0x40                    |     r0 = r6 + 0x40;
    0x00010b4e movs r1, 1                            |     r1 = 1;
    0x00010b50 lsls r0, r0, 3                        |     r0 <<= 3;
    0x00010b52 adds r6, 0x3f                         |     r6 += 0x3f;
    0x00010b54 add r3, pc                            |     r3 += pc;
    0x00010b56 ldr r3, [r3]                          |     r3 = *(r3);
    0x00010b58 blx r3                                |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00010b5a ldr r2, [r4, 0x58]                    |     r2 = *((r4 + 0x58));
    0x00010b5c mov ip, r0                            |     
    0x00010b5e str.w r0, [r4, 0x8ec]                 |     __asm ("str.w r0, [r4, 0x8ec]");
    0x00010b62 str r6, [ip], 8                       |     *(ip) = r6;
                                                     |     ip += 8;
    0x00010b66 str r7, [r0, 4]                       |     *((r0 + 4)) = r7;
    0x00010b68 cmp r2, 0                             |     
                                                     |     if (r2 != 0) {
    0x00010b6a bne 0x10be0                           |         goto label_3;
                                                     |     }
    0x00010b6c ldr r3, [r4]                          |     r3 = *(r4);
                                                     |     if (r3 == 0) {
    0x00010b6e cbz r3, 0x10bdc                       |         goto label_4;
                                                     |     }
                                                     |     do {
    0x00010b70 ldr.w r1, [r3, 0x248]                 |         r1 = *((r3 + 0x248));
                                                     |         if (r1 != 0) {
    0x00010b74 cbz r1, 0x10b7e                       |             
    0x00010b76 add.w r1, ip, r2, lsl 3               |             r1 = ip + (r2 << 3);
    0x00010b7a adds r2, 1                            |             r2++;
    0x00010b7c str r3, [r1, 4]                       |             *((r1 + 4)) = r3;
                                                     |         }
    0x00010b7e ldr r3, [r3, 0xc]                     |         r3 = *((r3 + 0xc));
    0x00010b80 cmp r3, 0                             |         
    0x00010b82 bne 0x10b70                           |         
                                                     |     } while (r3 != 0);
                                                     |     do {
    0x00010b84 ldr r6, [pc, 0x90]                    |         
    0x00010b86 add r6, pc                            |         r6 = 0x217a2;
    0x00010b88 ldr.w r3, [r6, 0x8e8]                 |         r3 = *(0x2208a);
    0x00010b8c cmp r3, r2                            |         
                                                     |         if (r3 != r2) {
    0x00010b8e bne 0x10bf4                           |             goto label_5;
                                                     |         }
    0x00010b90 mov r0, r5                            |         r0 = r5;
    0x00010b92 bl 0xbf40                             |         r0 = fcn_0000bf40 (r0);
    0x00010b96 bl 0xc0a8                             |         fcn_0000c0a8 ();
    0x00010b9a bl 0xc230                             |         r0 = fcn_0000c230 ();
    0x00010b9e mov r4, r0                            |         r4 = r0;
                                                     |         if (r0 == 0) {
    0x00010ba0 cbz r0, 0x10c08                       |             goto label_6;
                                                     |         }
    0x00010ba2 ldr r3, [r0]                          |         r3 = *(r0);
                                                     | label_0:
    0x00010ba4 mov.w ip, 5                           |         
    0x00010ba8 movt ip, 0xf                          |         
    0x00010bac str.w r3, [r6, 0x8fc]                 |         __asm ("str.w r3, [r6, 0x8fc]");
    0x00010bb0 bl 0x13fd0                            |         r0 = fcn_00013fd0 ();
    0x00010bb4 cmn.w r0, 0x1000                      |         
                                                     |         if (r0 <= 0x1000) {
    0x00010bb8 bhi 0x10bca                           |             
    0x00010bba bl 0xc974                             |             fcn_0000c974 ();
    0x00010bbe ldr r3, [pc, 0x5c]                    |             
    0x00010bc0 movs r2, 1                            |             r2 = 1;
    0x00010bc2 mov r0, r4                            |             r0 = r4;
    0x00010bc4 add r3, pc                            |             r3 = 0x217e6;
    0x00010bc6 strb r2, [r3]                         |             *(r3) = r2;
    0x00010bc8 pop {r3, r4, r5, r6, r7, pc}          |             
                                                     |         }
    0x00010bca ldr r1, [pc, 0x54]                    |         
    0x00010bcc ldr r0, [pc, 0x54]                    |         
    0x00010bce add r1, pc                            |         r1 = 0x217f4;
    0x00010bd0 add r0, pc                            |         r0 = 0x217f8;
    0x00010bd2 bl 0x8b5c                             |         dl_fatal_printf ()
                                                     | label_2:
    0x00010bd6 movs r4, 0                            |         r4 = 0;
    0x00010bd8 mov r0, r4                            |         r0 = r4;
    0x00010bda pop {r3, r4, r5, r6, r7, pc}          |         
                                                     | label_4:
    0x00010bdc mov r2, r3                            |         r2 = r3;
    0x00010bde b 0x10b84                             |         
                                                     |     } while (1);
                                                     | label_3:
    0x00010be0 ldr r3, [pc, 0x44]                    |     
    0x00010be2 mov.w r2, 0x2fc                       |     r2 = 0x2fc;
    0x00010be6 ldr r1, [pc, 0x44]                    |     
    0x00010be8 ldr r0, [pc, 0x44]                    |     
    0x00010bea add r3, pc                            |     r3 = 0x21816;
    0x00010bec add r1, pc                            |     r1 = 0x2181e;
    0x00010bee add r0, pc                            |     r0 = 0x21822;
    0x00010bf0 bl 0xfba4                             |     fcn_0000fba4 (r0);
                                                     | label_5:
    0x00010bf4 ldr r3, [pc, 0x3c]                    |     
    0x00010bf6 mov.w r2, 0x308                       |     r2 = 0x308;
    0x00010bfa ldr r1, [pc, 0x3c]                    |     
    0x00010bfc ldr r0, [pc, 0x3c]                    |     
    0x00010bfe add r3, pc                            |     r3 = 0x21836;
    0x00010c00 add r1, pc                            |     r1 = 0x2183e;
    0x00010c02 add r0, pc                            |     r0 = 0x21842;
    0x00010c04 bl 0xfba4                             |     fcn_0000fba4 (r0);
                                                     | label_6:
    0x00010c08 ldr r0, [pc, 0x34]                    |     
    0x00010c0a add r0, pc                            |     r0 = 0x2184e;
    0x00010c0c bl 0x8b5c                             |     dl_fatal_printf ()
                                                     |     if (r4 < 0) {
    0x00010c10 bmi 0x10ba4                           |         goto label_0;
                                                     |     }
    0x00010c12 movs r0, r0                           |     
                                                     |     if (r0 != r0) {
    0x00010c14 bne 0x10b48                           |         goto label_1;
                                                     |     }
    0x00010c16 movs r0, r0                           |     
                                                     |     if (r0 < r0) {
    0x00010c18 bmi 0x10d08                           |         void (*0x10d08)() ();
                                                     |     }
    0x00010c1a movs r0, r0                           |     
    0x00010c1c udf 0xc                               |     __asm ("udf 0xc");
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x125d8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000125d8 ()                                      | void fcn_000125d8 (int16_t arg_0h, uint32_t arg_4h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_17h, uint32_t arg1, int16_t arg3, uint32_t arg4) {
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
                                                                 |     do {
                                                                 | label_0:
    0x00011612 invalid                                           |         
    0x00011614 bl 0xef8c                                         |         r0 = fcn_0000ef8c (r0);
    0x00011618 mov r5, r0                                        |         r5 = r0;
    0x0001161a cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0001161c beq 0x11694                                       |             goto label_65;
                                                                 |         }
    0x0001161e ldrb r3, [r0]                                     |         r3 = *(r0);
    0x00011620 cmp r3, 0                                         |         
    0x00011622 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x00011624 cmpne r3, 0x3d                                    |             __asm ("cmpne r3, 0x3d");
                                                                 |         }
    0x00011626 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x00011628 movne r2, r0                                      |             r2 = r0;
                                                                 |         }
    0x0001162a beq 0x11612                                       |         
                                                                 |     } while (r3 == 0);
                                                                 |     do {
    0x0001162c mov r1, r2                                        |         r1 = r2;
    0x0001162e ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x00011632 cmp r3, 0                                         |         
    0x00011634 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x00011636 cmpne r3, 0x3d                                    |             __asm ("cmpne r3, 0x3d");
                                                                 |         }
    0x00011638 bne 0x1162c                                       |         
                                                                 |     } while (r3 != 0);
    0x0001163a cmp r3, 0x3d                                      |     
                                                                 |     if (r3 != 0x3d) {
    0x0001163c bne 0x11612                                       |         goto label_0;
                                                                 |     }
    0x0001163e subs r1, r1, r5                                   |     r1 -= r5;
    0x00011640 subs r1, 3                                        |     r1 -= 3;
    0x00011642 cmp r1, 0x10                                      |     
                                                                 |     if (r1 > 0x10) {
    0x00011644 bhi 0x11612                                       |         goto label_0;
                                                                 |     }
    0x00011646 adr r3, 8                                         |     r3 = 8;
    0x00011648 ldr.w r1, [r3, r1, lsl 2]                         |     offset_0 = r1 << 2;
                                                                 |     r1 = *((r3 + offset_0));
    0x0001164c add r3, r1                                        |     r3 += r1;
                                                                 |     /* switch table (17 cases) at 0x11650 */
    0x0001164e bx r3                                             |     return uint32_t (*r3)() ();
                                                                 | label_65:
    0x00011694 ldr.w r3, [pc, 0x644]                             |     r3 = *(0x00011cdc);
    0x00011698 mov sb, r0                                        |     sb = r0;
    0x0001169a add r3, pc                                        |     r3 += pc;
    0x0001169c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001169e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000116a0 bne.w 0x131b4                                     |         goto label_66;
                                                                 |     }
    0x000116a4 ldrb.w r3, [sl, 0x169]                            |     r3 = *((sl + 0x169));
    0x000116a8 cmp r4, 0                                         |     
    0x000116aa ite eq                                            |     
                                                                 |     if (r4 != 0) {
    0x000116ac moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x000116ae andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x000116b2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000116b4 bne.w 0x12ad6                                     |         goto label_67;
                                                                 |     }
                                                                 | label_10:
    0x000116b8 ldr.w r2, [pc, 0x624]                             |     r2 = *(0x00011ce0);
    0x000116bc ldr r1, [r7, 0x38]                                |     r1 = *((r7 + 0x38));
    0x000116be ldr.w r3, [pc, 0x624]                             |     r3 = *(0x00011ce4);
    0x000116c2 add r2, pc                                        |     r2 += pc;
    0x000116c4 ldr r4, [r2]                                      |     r4 = *(r2);
    0x000116c6 ldr r1, [r1]                                      |     r1 = *(r1);
    0x000116c8 add r3, pc                                        |     r3 += pc;
    0x000116ca ldr r0, [r4]                                      |     r0 = *(r4);
    0x000116cc cmp r1, r3                                        |     
    0x000116ce str r4, [r7, 0x14]                                |     *((r7 + 0x14)) = r4;
    0x000116d0 str r0, [r7, 0x1c]                                |     *((r7 + 0x1c)) = r0;
                                                                 |     if (r1 != r3) {
    0x000116d2 bne.w 0x11b50                                     |         goto label_68;
                                                                 |     }
    0x000116d6 ldr r6, [r2, 4]                                   |     r6 = *((r2 + 4));
    0x000116d8 ldr.w r2, [pc, 0x60c]                             |     r2 = *(0x00011ce8);
    0x000116dc cmp r6, 1                                         |     
    0x000116de add r2, pc                                        |     r2 += pc;
    0x000116e0 str.w r0, [r2, 0x5f4]                             |     __asm ("str.w r0, [r2, 0x5f4]");
                                                                 |     if (r6 <= 1) {
    0x000116e4 ble.w 0x135a8                                     |         goto label_69;
                                                                 |     }
    0x000116e8 ldr.w r1, [pc, 0x600]                             |     
    0x000116ec ldr.w r3, [pc, 0x600]                             |     
    0x000116f0 ldr.w r2, [pc, 0x600]                             |     r2 = *(0x00011cf4);
    0x000116f4 add r1, pc                                        |     r1 = 0x233e4;
    0x000116f6 ldr.w r8, [pc, 0x600]                             |     
    0x000116fa str r1, [r7, 0x34]                                |     *((r7 + 0x34)) = r1;
    0x000116fc add r3, pc                                        |     r3 = 0x233f0;
    0x000116fe ldr.w r1, [pc, 0x5fc]                             |     
    0x00011702 add r2, pc                                        |     r2 += pc;
    0x00011704 str.w sb, [r7, 0xc]                               |     __asm ("str.w sb, [r7, 0xc]");
    0x00011708 add r8, pc                                        |     r8 = 0x23406;
    0x0001170a str.w fp, [r7, 8]                                 |     __asm ("str.w fp, [r7, 8]");
    0x0001170e mov sb, r3                                        |     sb = r3;
    0x00011710 add r1, pc                                        |     
    0x00011712 mov fp, r2                                        |     
    0x00011714 str r1, [r7, 0x30]                                |     *((r7 + 0x30)) = r1;
    0x00011716 ldr.w r1, [pc, 0x5e8]                             |     r1 = *(0x00011d00);
    0x0001171a add r1, pc                                        |     
    0x0001171c str r1, [r7, 0x10]                                |     *((r7 + 0x10)) = r1;
    0x0001171e ldr.w r1, [pc, 0x5e4]                             |     r1 = *(0x00011d04);
    0x00011722 add r1, pc                                        |     
    0x00011724 str r1, [r7, 0x20]                                |     *((r7 + 0x20)) = r1;
    0x00011726 ldr.w r1, [pc, 0x5e0]                             |     r1 = *(0x00011d08);
    0x0001172a add r1, pc                                        |     r1 = 0x57984;
    0x0001172c str r1, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r1;
    0x0001172e movs r1, 0                                        |     r1 = 0;
    0x00011730 str r1, [r7, 4]                                   |     *((r7 + 4)) = r1;
    0x00011732 b 0x11758                                         |     
                                                                 |     while (r0 == 0) {
    0x00011734 ldr.w r3, [sl, 0x164]                             |         r3 = *((sl + 0x164));
    0x00011738 cmp r3, 6                                         |         
                                                                 |         if (r3 != 6) {
    0x0001173a beq 0x1174a                                       |             
    0x0001173c ldr r2, [r7, 0x3c]                                |             r2 = *((r7 + 0x3c));
    0x0001173e movs r3, 1                                        |             r3 = 1;
    0x00011740 str.w r3, [sl, 0x164]                             |             __asm ("str.w r3, [sl, 0x164]");
    0x00011744 mov.w r3, -1                                      |             r3 = -1;
    0x00011748 str r3, [r2, 0x2c]                                |             *((r2 + 0x2c)) = r3;
                                                                 |         }
                                                                 | label_1:
    0x0001174a subs r6, 1                                        |         r6--;
    0x0001174c adds r4, 4                                        |         r4 += 4;
                                                                 | label_3:
    0x0001174e cmp r6, 1                                         |         
    0x00011750 strd r4, r6, [r8]                                 |         __asm ("strd r4, r6, [r8]");
                                                                 |         if (r6 == 1) {
    0x00011754 beq.w 0x1199e                                     |             goto label_70;
                                                                 |         }
                                                                 | label_2:
    0x00011758 ldr r5, [r4, 4]                                   |         r5 = *((r4 + 4));
    0x0001175a mov r1, sb                                        |         r1 = sb;
    0x0001175c mov r0, r5                                        |         r0 = r5;
    0x0001175e bl 0x15bb0                                        |         r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00011762 cmp r0, 0                                         |         
    0x00011764 beq 0x11734                                       |         
                                                                 |     }
    0x00011766 mov r1, fp                                        |     r1 = fp;
    0x00011768 mov r0, r5                                        |     r0 = r5;
    0x0001176a bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x0001176e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00011770 bne.w 0x11978                                     |         
    0x00011774 ldr.w r3, [sl, 0x164]                             |         r3 = *((sl + 0x164));
    0x00011778 cmp r3, 6                                         |         
    0x0001177a itt ne                                            |         
                                                                 |         if (r3 == 6) {
    0x0001177c movne r3, 2                                       |             r3 = 2;
                                                                 |         }
                                                                 |         if (r3 == 6) {
    0x0001177e strne r3, [sl, 0x164]                             |             *((sl + 0x164)) = r3;
                                                                 |         }
    0x00011780 adds r1, 0x64                                     |         r1 += 0x64;
    0x00011782 b 0x1174a                                         |         goto label_1;
                                                                 |     }
    0x00011978 ldr r1, [r7, 0x34]                                |     r1 = *((r7 + 0x34));
    0x0001197a mov r0, r5                                        |     r0 = r5;
    0x0001197c bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00011980 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00011982 bne.w 0x11b0a                                     |         goto label_71;
                                                                 |     }
    0x00011986 subs r6, 1                                        |     r6--;
    0x00011988 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0001198a cmp r6, 1                                         |     
    0x0001198c add.w r4, r4, 4                                   |     r4 += 4;
    0x00011990 mov.w r2, 1                                       |     r2 = 1;
    0x00011994 strd r4, r6, [r8]                                 |     __asm ("strd r4, r6, [r8]");
    0x00011998 str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
                                                                 |     if (r6 != 1) {
    0x0001199a bne.w 0x11758                                     |         goto label_2;
                                                                 |     }
                                                                 | label_70:
    0x0001199e ldrd fp, sb, [r7, 8]                              |     __asm ("ldrd fp, sb, [r7, 8]");
                                                                 | label_34:
    0x000119a2 ldr.w r0, [sl, 0x164]                             |     r0 = *((sl + 0x164));
    0x000119a6 cmp r0, 4                                         |     
                                                                 |     if (r0 == 4) {
    0x000119a8 beq.w 0x13578                                     |         goto label_72;
                                                                 |     }
                                                                 | label_32:
    0x000119ac cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x000119ae beq.w 0x13d3e                                     |         goto label_73;
                                                                 |     }
    0x000119b2 ldr r3, [pc, 0x3ac]                               |     
    0x000119b4 add r3, pc                                        |     r3 = 0x2371a;
    0x000119b6 ldr r2, [r3, 4]                                   |     r2 = *(0x2371e);
    0x000119b8 cmp r2, 1                                         |     
                                                                 |     if (r2 <= 1) {
    0x000119ba ble.w 0x12d48                                     |         goto label_74;
                                                                 |     }
    0x000119bc strh r5, [r0, 0xe]                                |     *((r0 + 0xe)) = r5;
    0x000119be ldrd r1, r5, [r7, 0x28]                           |     __asm ("ldrd r1, r5, [r7, 0x28]");
    0x000119c2 subs r2, 1                                        |     r2--;
    0x000119c4 ldr r4, [r3]                                      |     r4 = *(r3);
    0x000119c6 str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x000119c8 add.w r1, r5, r1, lsl 5                           |     r1 = r5 + (r1 << 5);
    0x000119cc adds r2, r4, 4                                    |     r2 = r4 + 4;
    0x000119ce str r2, [r3]                                      |     *(r3) = r2;
    0x000119d0 mov r2, r5                                        |     r2 = r5;
    0x000119d2 cmp r5, r1                                        |     
                                                                 |     if (r5 >= r1) {
    0x000119d4 bhs 0x119f6                                       |         goto label_75;
                                                                 |     }
    0x000119d6 movw r3, 0xe551                                   |     
    0x000119da movt r3, 0x6474                                   |     r3 = 0x6474e551;
    0x000119de b 0x119e6                                         |     
                                                                 |     while (r5 != r3) {
    0x000119e0 adds r2, 0x20                                     |         r2 += 0x20;
    0x000119e2 cmp r2, r1                                        |         
                                                                 |         if (r2 >= r1) {
    0x000119e4 bhs 0x119f6                                       |             goto label_75;
                                                                 |         }
    0x000119e6 ldr r5, [r2]                                      |         r5 = *(r2);
    0x000119e8 cmp r5, r3                                        |         
    0x000119ea bne 0x119e0                                       |         
                                                                 |     }
    0x000119ec ldr r3, [pc, 0x374]                               |     
    0x000119ee ldr r2, [r2, 0x18]                                |     r2 = *((r2 + 0x18));
    0x000119f0 add r3, pc                                        |     r3 = 0x23758;
    0x000119f2 str.w r2, [r3, 0x8e0]                             |     __asm ("str.w r2, [r3, 0x8e0]");
                                                                 | label_75:
    0x000119f6 bic r3, r0, 4                                     |     r3 = BIT_MASK (r0, 4);
    0x000119fa ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000119fc cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x000119fe beq.w 0x13a20                                     |         goto label_76;
                                                                 |     }
    0x00011a02 movs r3, 0                                        |     r3 = 0;
    0x00011a04 mov.w r2, 0x20000000                              |     r2 = 0x20000000;
    0x00011a08 strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x00011a0c mov r0, r3                                        |     r0 = r3;
    0x00011a0e mov r2, r3                                        |     r2 = r3;
    0x00011a10 bl 0x5834                                         |     fcn_00005834 (r0, r1, r2, r3, r4, r5);
                                                                 | label_49:
    0x00011a14 ldr r3, [pc, 0x350]                               |     
    0x00011a16 ldr.w r8, [sl, 0x164]                             |     r8 = *((sl + 0x164));
    0x00011a1a add r3, pc                                        |     r3 = 0x23786;
    0x00011a1c ldr r4, [r3]                                      |     r4 = *(0x23786);
    0x00011a1e cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00011a22 bne.w 0x13a0c                                     |         goto label_77;
                                                                 |     }
    0x00011a24 strh r3, [r6, 0x3e]                               |     *((r6 + 0x3e)) = r3;
    0x00011a26 ldr.w r2, [r3, 0x648]                             |     r2 = *((r3 + 0x648));
    0x00011a2a ldrb.w r1, [r3, 0x796]                            |     r1 = *((r3 + 0x796));
    0x00011a2e ldr r5, [r2, 4]                                   |     r5 = *((r2 + 4));
    0x00011a30 ldr.w r2, [r3, 0x624]                             |     r2 = *((r3 + 0x624));
    0x00011a34 lsls r1, r1, 0x1a                                 |     r1 <<= 0x1a;
    0x00011a36 ite mi                                            |     
                                                                 |     if (r1 >= r1) {
    0x00011a38 ldrmi r3, [r3, 0x5f0]                             |         r3 = *((r3 + 0x5f0));
                                                                 |     }
                                                                 |     if (r1 >= r1) {
    0x00011a3c mov r3, r8                                        |         r3 = r8;
                                                                 |     }
    0x00011a3e ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00011a40 add r5, r2                                        |     r5 += r2;
    0x00011a42 add r5, r3                                        |     r5 += r3;
    0x00011a44 ldr r3, [r4, 0x58]                                |     r3 = *((r4 + 0x58));
                                                                 |     if (r3 != 0) {
    0x00011a46 cbz r3, 0x11a6a                                   |         
    0x00011a48 ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x00011a4a mov r0, r5                                        |         r0 = r5;
    0x00011a4c ldr r3, [r4, 0x34]                                |         r3 = *((r4 + 0x34));
    0x00011a4e ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x00011a50 ldrb.w r3, [r4, 0x1a6]                            |         r3 = *((r4 + 0x1a6));
    0x00011a54 add r1, r2                                        |         r1 += r2;
    0x00011a56 ands r3, r3, 0x20                                 |         r3 &= 0x20;
    0x00011a5a it ne                                             |         
                                                                 |         if (r3 == r3) {
    0x00011a5c ldrne r3, [r4]                                    |             r3 = *(r4);
                                                                 |         }
    0x00011a5e add r1, r3                                        |         r1 += r3;
    0x00011a60 bl 0x15bb0                                        |         r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00011a64 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00011a66 beq.w 0x13b76                                     |             goto label_78;
                                                                 |         }
    0x00011a68 strh r6, [r0, 4]                                  |         *((r0 + 4)) = r6;
                                                                 |     }
    0x00011a6a ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x00011a6c ldrh.w r3, [r4, 0x168]                            |     r3 = *((r4 + 0x168));
    0x00011a70 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00011a72 bne.w 0x13a18                                     |         goto label_79;
                                                                 |     }
    0x00011a74 strh r1, [r2, 0x3e]                               |     *((r2 + 0x3e)) = r1;
    0x00011a76 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00011a78 beq.w 0x13124                                     |         goto label_80;
                                                                 |     }
    0x00011a7c ldr.w r6, [r4, 0x160]                             |     r6 = *((r4 + 0x160));
    0x00011a80 b 0x11a8c                                         |     
                                                                 |     while (r2 != 3) {
    0x00011a82 add.w r8, r8, 1                                   |         r8++;
    0x00011a86 cmp r8, r3                                        |         
                                                                 |         if (r8 == r3) {
    0x00011a88 beq.w 0x13124                                     |             goto label_80;
                                                                 |         }
    0x00011a8c lsl.w r2, r8, 5                                   |         r2 = r8 << 5;
    0x00011a90 ldr r2, [r6, r2]                                  |         r2 = *((r6 + r2));
    0x00011a92 cmp r2, 3                                         |         
    0x00011a94 bne 0x11a82                                       |         
                                                                 |     }
                                                                 | label_48:
    0x00011a96 ldr r2, [pc, 0x2d4]                               |     
    0x00011a98 ldr r1, [r7, 0x38]                                |     r1 = *((r7 + 0x38));
    0x00011a9a add r2, pc                                        |     r2 = 0x2380c;
    0x00011a9c str r2, [r4, 4]                                   |     *((r4 + 4)) = r2;
    0x00011a9e ldr.w r2, [r4, 0x164]                             |     r2 = *((r4 + 0x164));
    0x00011aa2 str r2, [r1]                                      |     *(r1) = r2;
    0x00011aa4 ldrb.w r2, [r4, 0x1a5]                            |     r2 = *((r4 + 0x1a5));
    0x00011aa8 orr r2, r2, 1                                     |     r2 |= 1;
    0x00011aac strb.w r2, [r4, 0x1a5]                            |     *((r4 + 0x1a5)) = r2;
    0x00011ab0 ldr r2, [r7, 0x18]                                |     r2 = *((r7 + 0x18));
    0x00011ab2 ldr r1, [r2]                                      |     r1 = *(0x2380c);
    0x00011ab4 ldr r2, [pc, 0x2b8]                               |     
    0x00011ab6 add r2, pc                                        |     r2 = 0x2382a;
    0x00011ab8 ldr r0, [r2]                                      |     r0 = *(0x2382a);
    0x00011aba cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00011abc beq.w 0x12ebc                                     |         goto label_81;
                                                                 |     }
    0x00011ac0 ldr r2, [r7, 0x18]                                |     r2 = *((r7 + 0x18));
    0x00011ac2 ldr r5, [r7, 0x38]                                |     r5 = *((r7 + 0x38));
                                                                 | label_15:
    0x00011ac4 subs r1, 3                                        |     r1 -= 3;
    0x00011ac6 cmp r1, 0x1c                                      |     
                                                                 |     if (r1 > 0x1c) {
    0x00011ac8 bhi.w 0x12eb2                                     |         goto label_18;
                                                                 |     }
                                                                 |     /* switch table (30 cases) at 0x11ad0 */
    0x00011acc tbh [pc, r1, lsl 1]                               |     __asm ("tbh [pc, r1, lsl 1]");
                                                                 | label_71:
    0x00011b0a ldr r1, [r7, 0x30]                                |     r1 = *((r7 + 0x30));
    0x00011b0c mov r0, r5                                        |     r0 = r5;
    0x00011b0e bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
                                                                 |     if (r0 == 0) {
    0x00011b12 cbnz r0, 0x11b2c                                  |         
    0x00011b14 cmp r6, 2                                         |         
                                                                 |         if (r6 == 2) {
    0x00011b16 beq.w 0x1308c                                     |             goto label_82;
                                                                 |         }
    0x00011b1a ldr r3, [r4, 8]!                                  |         r3 = *((r4 += 8));
    0x00011b1e subs r6, 2                                        |         r6 -= 2;
    0x00011b20 str.w r3, [sl, 0x14c]                             |         __asm ("str.w r3, [sl, 0x14c]");
    0x00011b24 ldr r3, [r7, 0x30]                                |         r3 = *((r7 + 0x30));
    0x00011b26 str.w r3, [sl, 0x150]                             |         __asm ("str.w r3, [sl, 0x150]");
    0x00011b2a b 0x1174e                                         |         goto label_3;
                                                                 |     }
    0x00011b2c ldr r1, [r7, 0x10]                                |     r1 = *((r7 + 0x10));
    0x00011b2e mov r0, r5                                        |     r0 = r5;
    0x00011b30 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00011b34 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00011b36 bne.w 0x12a74                                     |         goto label_83;
                                                                 |     }
    0x00011b3a cmp r6, 2                                         |     
                                                                 |     if (r6 == 2) {
    0x00011b3c beq.w 0x12e68                                     |         goto label_20;
                                                                 |     }
    0x00011b40 ldr r3, [pc, 0x230]                               |     
    0x00011b42 subs r6, 2                                        |     r6 -= 2;
    0x00011b44 ldr r2, [r4, 8]!                                  |     r2 = *((r4 += 8));
    0x00011b48 add r3, pc                                        |     r3 = 0x238c0;
    0x00011b4a str.w r2, [r3, 0x15c]                             |     __asm ("str.w r2, [r3, 0x15c]");
    0x00011b4e b 0x1174e                                         |     goto label_3;
                                                                 | label_68:
    0x00011b50 ldr r1, [pc, 0x224]                               |     
    0x00011b52 movs r5, 0                                        |     r5 = 0;
    0x00011b54 mov.w r3, 0x20000000                              |     r3 = 0x20000000;
    0x00011b58 mov r2, r5                                        |     r2 = r5;
    0x00011b5a strd r3, r5, [sp]                                 |     __asm ("strd r3, r5, [sp]");
    0x00011b5e mov r3, r5                                        |     r3 = r5;
    0x00011b60 add r1, pc                                        |     r1 = 0x238dc;
    0x00011b62 mov r0, r1                                        |     r0 = r1;
    0x00011b64 bl 0x7698                                         |     r0 = fcn_00007698 (r0, r1, r2, r3, r4, r5, r6);
    0x00011b68 mov r4, r0                                        |     r4 = r0;
    0x00011b6a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00011b6c beq.w 0x13d22                                     |         void (*0x13d22)() ();
                                                                 |     }
    0x00011b70 ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x00011b72 mov r1, r5                                        |     r1 = r5;
    0x00011b74 str.w r3, [r0, 0x160]                             |     __asm ("str.w r3, [r0, 0x160]");
    0x00011b78 ldr r3, [r7, 0x28]                                |     r3 = *((r7 + 0x28));
    0x00011b7a strh.w r3, [r0, 0x168]                            |     *((r0 + 0x168)) = r3;
    0x00011b7e ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x00011b80 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00011b82 str.w r3, [r0, 0x164]                             |     __asm ("str.w r3, [r0, 0x164]");
    0x00011b86 bl 0x7618                                         |     fcn_00007618 (r0, r1);
    0x00011b8a ldr r3, [pc, 0x1f0]                               |     
    0x00011b8c add r3, pc                                        |     
    0x00011b8e ldr r3, [r3]                                      |     r3 = *(0x2390e);
    0x00011b90 cmp r3, r4                                        |     
                                                                 |     if (r3 != r4) {
    0x00011b92 bne.w 0x13d98                                     |         goto label_84;
                                                                 |     }
    0x00011b96 ldrh.w r3, [r4, 0x168]                            |     r3 = *((r4 + 0x168));
    0x00011b9a ldr.w r6, [r4, 0x160]                             |     r6 = *((r4 + 0x160));
    0x00011b9e str r5, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r5;
                                                                 | label_16:
    0x00011ba0 vmov.i64 d16, 0xffffffff                          |     __asm ("vmov.i64 d16, 0xffffffff");
    0x00011ba4 add.w r2, r4, 0x1c4                               |     r2 = r4 + 0x1c4;
    0x00011ba8 movs r1, 0                                        |     r1 = 0;
    0x00011baa lsls r3, r3, 5                                    |     r3 <<= 5;
    0x00011bac str.w r1, [r4, 0x1cc]                             |     __asm ("str.w r1, [r4, 0x1cc]");
    0x00011bb0 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00011bb4 adds r5, r6, r3                                   |     r5 = r6 + r3;
    0x00011bb6 ldr.w r2, [r4, 0x1a0]                             |     r2 = *((r4 + 0x1a0));
    0x00011bba cmp r5, r6                                        |     
    0x00011bbc add.w r2, r2, 1                                   |     r2++;
    0x00011bc0 str.w r2, [r4, 0x1a0]                             |     __asm ("str.w r2, [r4, 0x1a0]");
    0x00011bc4 ldrb.w r2, [r4, 0x1a6]                            |     r2 = *((r4 + 0x1a6));
    0x00011bc8 orr r2, r2, 8                                     |     r2 |= 8;
    0x00011bcc strb.w r2, [r4, 0x1a6]                            |     *((r4 + 0x1a6)) = r2;
                                                                 |     if (r5 < r6) {
    0x00011bd0 bls.w 0x132f6                                     |         goto label_85;
                                                                 |     }
    0x00011bd4 ldr r3, [pc, 0x1a8]                               |     
    0x00011bd6 mov ip, r1                                        |     
    0x00011bd8 ldr r0, [pc, 0x1a8]                               |     
    0x00011bda add.w r8, r5, 0x10                                |     r8 = r5 + 0x10;
    0x00011bde ldr r2, [pc, 0x1a8]                               |     
    0x00011be0 add r3, pc                                        |     
    0x00011be2 str r1, [r7, 0xc]                                 |     *((r7 + 0xc)) = r1;
    0x00011be4 ldr r3, [r3, 0xc]                                 |     r3 = *(0x23970);
    0x00011be6 add r0, pc                                        |     r0 = 0x2396e;
    0x00011be8 str r0, [r7, 0x20]                                |     *((r7 + 0x20)) = r0;
    0x00011bea add r2, pc                                        |     r2 = 0x23978;
    0x00011bec ldr r0, [pc, 0x19c]                               |     
    0x00011bee movw r1, 0xe551                                   |     
    0x00011bf2 str r2, [r7, 0x34]                                |     *((r7 + 0x34)) = r2;
    0x00011bf4 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00011bf6 str r2, [r7, 0x38]                                |     *((r7 + 0x38)) = r2;
    0x00011bf8 subs r3, 1                                        |     r3--;
    0x00011bfa add r0, pc                                        |     r0 = 0x2398a;
    0x00011bfc ldr r2, [r7, 0x34]                                |     r2 = *((r7 + 0x34));
    0x00011bfe str r0, [r7, 0x18]                                |     *((r7 + 0x18)) = r0;
    0x00011c00 movw r0, 0xe552                                   |     
    0x00011c04 str r3, [r7, 0x28]                                |     *((r7 + 0x28)) = r3;
    0x00011c06 movt r1, 0x6474                                   |     r1 = 0x6474e551;
    0x00011c0a vldr d18, [pc, 0xb4]                              |     __asm ("vldr d18, [0x00011cc4]");
    0x00011c0e movt r0, 0x6474                                   |     r0 = 0x6474e552;
    0x00011c12 add.w r3, r6, 0x10                                |     r3 = r6 + 0x10;
    0x00011c16 adds r2, 0xc                                      |     r2 += 0xc;
    0x00011c18 str.w ip, [r7, 0x30]                              |     __asm ("str.w ip, [r7, 0x30]");
    0x00011c1c strd r5, r2, [r7, 0x10]                           |     __asm ("strd r5, r2, [r7, 0x10]");
    0x00011c20 str r6, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r6;
                                                                 | label_12:
    0x000124ea bl 0xc064                                         |     fcn_0000c064 ();
    0x000124ee ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x000124f0 str r0, [r7, 0x1c]                                |     *((r7 + 0x1c)) = r0;
                                                                 |     if (r3 != 0) {
    0x000124f2 cbz r3, 0x124f8                                   |         
    0x000124f4 ldr r2, [r7, 0x20]                                |         r2 = *((r7 + 0x20));
    0x000124f6 str r2, [r3, 4]                                   |         *((r3 + 4)) = r2;
                                                                 |     }
    0x000124f8 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x000124fa movs r5, 1                                        |     r5 = 1;
    0x000124fc str r5, [r3, 0xc]                                 |     *((r3 + 0xc)) = r5;
    0x000124fe bl 0x16d8                                         |     dl_debug_state ();
    0x00012502 mov r1, r5                                        |     r1 = r5;
    0x00012504 mov r0, r4                                        |     r0 = r4;
    0x00012506 bl 0xe298                                         |     fcn_0000e298 (r0, r1, r2, r3);
    0x0001250a ldr r3, [r7, 0x28]                                |     r3 = *((r7 + 0x28));
    0x0001250c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001250e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00012510 bne.w 0x13c44                                     |         goto label_86;
                                                                 |     }
    0x00012514 ldr.w r5, [sl, 0x154]                             |     r5 = *((sl + 0x154));
    0x00012518 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0001251a bne.w 0x134a6                                     |         goto label_87;
                                                                 |     }
                                                                 | label_28:
    0x0001251e ldr.w r0, [sl, 0x158]                             |     r0 = *((sl + 0x158));
    0x00012522 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00012524 bne.w 0x13496                                     |         goto label_88;
                                                                 |     }
                                                                 | label_27:
    0x00012528 ldr.w r6, [pc, 0x4d8]                             |     r6 = *(0x00012a04);
    0x0001252c movs r1, 4                                        |     r1 = 4;
    0x0001252e add r6, pc                                        |     r6 += pc;
    0x00012530 mov r0, r6                                        |     r0 = r6;
    0x00012532 bl 0x14c1c                                        |     r0 = fcn_00014c1c ();
    0x00012536 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00012538 beq.w 0x1337a                                     |         goto label_89;
                                                                 |     }
                                                                 | label_26:
    0x0001253c ldr r3, [r7, 0x28]                                |     r3 = *((r7 + 0x28));
    0x0001253e ldr r6, [r3]                                      |     r6 = *(r3);
    0x00012540 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00012542 bne.w 0x13338                                     |         goto label_90;
                                                                 |     }
                                                                 | label_25:
    0x00012546 ldr.w r3, [pc, 0x4c0]                             |     r3 = *(0x00012a08);
    0x0001254a add r3, pc                                        |     r3 += pc;
    0x0001254c ldr.w r0, [r3, 0x180]                             |     r0 = *((r3 + 0x180));
                                                                 |     if (r0 != 0) {
    0x00012550 cbz r0, 0x12558                                   |         
    0x00012552 movs r1, 0                                        |         r1 = 0;
    0x00012554 bl 0xe3a8                                         |         fcn_0000e3a8 (r0, r1, r2, r3);
                                                                 |     }
    0x00012558 ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
    0x0001255c movs r0, 0                                        |     r0 = 0;
    0x0001255e str r0, [sp]                                      |     *(sp) = r0;
    0x00012560 mov r2, r5                                        |     r2 = r5;
    0x00012562 mov r0, r4                                        |     r0 = r4;
    0x00012564 mov r1, r6                                        |     r1 = r6;
    0x00012566 sub.w r3, r3, 3                                   |     r3 -= 3;
    0x00012568 lsls r3, r0, 0xc                                  |     r3 = r0 << 0xc;
    0x0001256a clz r3, r3                                        |     r3 &= r3;
    0x0001256e lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00012570 bl 0x1860                                         |     fcn_00001860 (r0, r1, r2, r3, r4, r5);
    0x00012574 ldr.w r0, [r4, 0x170]                             |     r0 = *((r4 + 0x170));
    0x00012578 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001257a beq.w 0x13300                                     |         goto label_91;
                                                                 |     }
    0x0001257e ldr.w r5, [r4, 0x16c]                             |     r5 = *((r4 + 0x16c));
    0x00012582 add.w r3, r5, r0, lsl 2                           |     r3 = r5 + (r0 << 2);
                                                                 |     do {
    0x00012586 ldr r1, [r3, -0x4]!                               |         r1 = *((r3 -= 0x4));
    0x0001258a ldrb.w r2, [r1, 0x1a4]                            |         r2 = *((r1 + 0x1a4));
    0x0001258e cmp r5, r3                                        |         
    0x00012590 orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x00012594 strb.w r2, [r1, 0x1a4]                            |         *((r1 + 0x1a4)) = r2;
    0x00012598 bne 0x12586                                       |         
                                                                 |     } while (r5 != r3);
    0x0001259a ldr.w r1, [pc, 0x470]                             |     r1 = *(0x00012a0c);
    0x0001259e add r1, pc                                        |     r1 += pc;
    0x000125a0 ldr.w r2, [r1, 0x5fc]                             |     r2 = *((r1 + 0x5fc));
    0x000125a4 ldr.w r1, [r1, 0x600]                             |     r1 = *((r1 + 0x600));
    0x000125a8 str r2, [r1, 0xc]                                 |     *((r1 + 0xc)) = r2;
                                                                 |     if (r2 != 0) {
    0x000125aa cbz r2, 0x125ae                                   |         
    0x000125ac str r1, [r2, 0x10]                                |         *((r2 + 0x10)) = r1;
                                                                 |     }
    0x000125ae cmp r0, 1                                         |     
                                                                 |     if (r0 == 1) {
    0x000125b0 beq.w 0x13314                                     |         goto label_92;
                                                                 |     }
    0x000125b4 ldr.w ip, [pc, 0x458]                             |     ip = *(0x00012a10);
    0x000125b8 movs r2, 1                                        |     r2 = 1;
    0x000125ba add ip, pc                                        |     
    0x000125bc add.w r6, ip, 0x5f0                               |     r6 = ip + 0x5f0;
    0x000125c0 b 0x125ca                                         |     
                                                                 |     while (r1 != r6) {
    0x000125c2 adds r2, 1                                        |         r2++;
    0x000125c4 cmp r0, r2                                        |         
                                                                 |         if (r0 == r2) {
    0x000125c6 beq.w 0x13314                                     |             goto label_92;
                                                                 |         }
    0x000125ca ldr r1, [r3, 4]!                                  |         r1 = *((r3 += 4));
    0x000125ce cmp r1, r6                                        |         
    0x000125d0 bne 0x125c2                                       |         
                                                                 |     }
    0x000125d2 cmp r0, r2                                        |     
    0x000125d4 ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
                                                                 |     if (r0 < r2) {
    0x000125d8 bls.w 0x13d36                                     |         void (*0x13d36)() ();
                                                                 |     }
    0x000125dc add.w r1, r2, 0x40000000                          |     r1 = r2 + 0x40000000;
    0x000125e0 subs r1, 1                                        |     r1--;
    0x000125e2 ldr.w r6, [r5, r1, lsl 2]                         |     offset_1 = r1 << 2;
                                                                 |     r6 = *((r5 + offset_1));
    0x000125e6 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x000125e8 str.w r6, [ip, 0x600]                             |     __asm ("str.w r6, [ip, 0x600]");
    0x000125ec cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000125ee bne.w 0x1358a                                     |         goto label_93;
                                                                 |     }
    0x000125f2 adds r2, 1                                        |     r2++;
    0x000125f4 cmp r2, r0                                        |     
    0x000125f6 ldr.w r2, [pc, 0x41c]                             |     r2 = *(0x00012a14);
    0x000125fa itet lo                                           |     
                                                                 |     if (r2 >= r0) {
    0x000125fc addlo r5, r5, r1                                  |         r5 += r1;
                                                                 |     }
                                                                 |     if (r2 < r0) {
    0x000125fe movhs r1, r3                                      |         r1 = r3;
                                                                 |     }
                                                                 |     if (r2 >= r0) {
    0x00012600 ldrlo r1, [r5, 8]                                 |         r1 = *((r5 + 8));
                                                                 |     }
    0x00012602 add r2, pc                                        |     r2 += pc;
    0x00012604 ldr.w r5, [pc, 0x410]                             |     
    0x00012608 ldr.w r2, [r2, 0x180]                             |     r2 = *((r2 + 0x180));
    0x0001260c add r5, pc                                        |     r5 = 0x25028;
    0x0001260e str.w r1, [r5, 0x5fc]                             |     __asm ("str.w r1, [r5, 0x5fc]");
    0x00012612 ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
                                                                 |     if (r2 != 0) {
    0x00012614 cbz r2, 0x12630                                   |         
    0x00012616 subs.w ip, r2, r1                                 |         
    0x0001261a it ne                                             |         
                                                                 |         if (ip == r2) {
    0x0001261c movne ip, 1                                       |             
                                                                 |         }
    0x00012620 cmp r2, r0                                        |         
    0x00012622 it ne                                             |         
                                                                 |         if (r2 == r0) {
    0x00012624 movne ip, 0                                       |             
                                                                 |         }
    0x00012628 cmp.w ip, 0                                       |         
                                                                 |         if (ip != 0) {
    0x0001262c bne.w 0x132ea                                     |             goto label_94;
                                                                 |         }
                                                                 |     }
                                                                 | label_24:
    0x00012630 cmp r1, r0                                        |     
                                                                 |     if (r1 != r0) {
    0x00012632 bne.w 0x13dac                                     |         goto label_95;
                                                                 |     }
                                                                 | label_33:
    0x00012636 ldr r2, [pc, 0x3e4]                               |     
    0x00012638 add r2, pc                                        |     
    0x0001263a add.w r0, r2, 0x5f0                               |     r0 = r2 + 0x5f0;
    0x0001263e str r0, [r6, 0xc]                                 |     *((r6 + 0xc)) = r0;
    0x00012640 ldr.w r2, [r2, 0x5fc]                             |     r2 = *(0x25656);
                                                                 |     if (r2 != 0) {
    0x00012644 cbz r2, 0x12652                                   |         
    0x00012646 ldr r1, [r2, 0x10]                                |         r1 = *((r2 + 0x10));
    0x00012648 cmp r6, r1                                        |         
    0x0001264a it eq                                             |         
                                                                 |         if (r6 != r1) {
    0x0001264c streq r0, [r2, 0x10]                              |             *((r2 + 0x10)) = r0;
                                                                 |         }
                                                                 |         if (r6 != r1) {
    0x0001264e bne.w 0x13df8                                     |             goto label_96;
                                                                 |         }
                                                                 |     }
    0x00012652 movs r2, 1                                        |     r2 = 1;
    0x00012654 str r2, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r2;
                                                                 | label_21:
    0x0001268c ldr r3, [r7, 0x3c]                                |     r3 = *((r7 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x0001268e cbz r3, 0x126b0                                   |         
    0x00012690 ldr r3, [pc, 0x398]                               |         
    0x00012692 movs r6, 0                                        |         r6 = 0;
    0x00012694 ldr r1, [r7, 0x24]                                |         r1 = *((r7 + 0x24));
    0x00012696 ldr r2, [pc, 0x398]                               |         r2 = *(0x12a32);
    0x00012698 add r3, pc                                        |         r3 = 0x250c8;
    0x0001269a ldr r5, [pc, 0x398]                               |         
    0x0001269c ldr r2, [r1, r2]                                  |         r2 = *((r1 + r2));
    0x0001269e ldr r1, [r3]                                      |         r1 = *(0x250c8);
    0x000126a0 add r5, pc                                        |         r5 = 0x250da;
    0x000126a2 ldr r0, [r1]                                      |         r0 = *(0x250c8);
    0x000126a4 str r6, [r3]                                      |         *(r3) = r6;
    0x000126a6 ldr r3, [r1, 4]                                   |         r3 = *(0x250cc);
    0x000126a8 bic r0, r0, 0xff                                  |         r0 = BIT_MASK (r0, 0xff);
    0x000126ac str r0, [r2]                                      |         *(r2) = r0;
    0x000126ae str r3, [r5, 8]                                   |         *((r5 + 8)) = r3;
                                                                 |     }
    0x000126b0 ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
    0x000126b4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000126b6 bne.w 0x134dc                                     |         goto label_97;
                                                                 |     }
                                                                 | label_44:
    0x000126ba ldr r2, [pc, 0x37c]                               |     
    0x000126bc add.w r1, r4, 0x16c                               |     r1 = r4 + 0x16c;
    0x000126c0 ldr r3, [pc, 0x378]                               |     
    0x000126c2 add r2, pc                                        |     
    0x000126c4 str r1, [r2, 8]                                   |     *((r2 + 8)) = r1;
    0x000126c6 add r3, pc                                        |     r3 = 0x25106;
    0x000126c8 ldr.w r2, [r2, 0x5e8]                             |     r2 = *(0x256e8);
    0x000126cc adds r3, 0x18                                     |     r3 += 0x18;
    0x000126ce ldm r1, {r0, r1}                                  |     r0 = *(r1);
                                                                 |     r1 = *((r1 + 4));
    0x000126d0 str.w r2, [r3, 0x160]                             |     __asm ("str.w r2, [r3, 0x160]");
    0x000126d4 ldr r2, [r3, -0x18]                               |     r2 = *(0x250ee);
    0x000126d8 stm.w r3, {r0, r1}                                |     *(r3) = r0;
                                                                 |     *((r3 + 4)) = r1;
    0x000126dc lsls r5, r2, 0x16                                 |     r5 = r2 << 0x16;
                                                                 |     if (r5 < r2) {
    0x000126de bmi.w 0x134c0                                     |         goto label_98;
                                                                 |     }
                                                                 | label_30:
    0x000126e2 ldr r2, [pc, 0x35c]                               |     
    0x000126e4 ldr.w r0, [r4, 0x170]                             |     r0 = *((r4 + 0x170));
    0x000126e8 add r2, pc                                        |     r2 = 0x2512e;
    0x000126ea ldr.w r3, [r2, 0x170]                             |     r3 = *(0x2529e);
    0x000126ec adds r1, 0x70                                     |     r1 += 0x70;
    0x000126ee subs r5, r0, 1                                    |     r5 = r0 - 1;
    0x000126f0 ldr r1, [r2, 0x2c]                                |     r1 = *(0x2515a);
    0x000126f2 subs r3, 0                                        |     
    0x000126f4 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x000126f6 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000126f8 orrs r1, r3                                       |     r1 |= r3;
    0x000126fa str r1, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r1;
    0x000126fc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000126fe beq 0x1277c                                       |         goto label_99;
                                                                 |     }
    0x00012700 ldr r6, [pc, 0x340]                               |     
    0x00012702 mov fp, r3                                        |     
    0x00012704 ldr.w r8, [pc, 0x340]                             |     r8 = *(0x00012a48);
    0x00012708 ldr.w sl, [pc, 0x340]                             |     
    0x0001270c add r6, pc                                        |     
    0x0001270e str.w sb, [r7, 0x3c]                              |     __asm ("str.w sb, [r7, 0x3c]");
    0x00012712 add.w r6, r6, 0x5f0                               |     r6 = 0x25744;
    0x00012716 add r8, pc                                        |     r8 += pc;
    0x00012718 add sl, pc                                        |     sl = 0x25168;
    0x0001271a b 0x12720                                         |     
                                                                 |     while (r3 == 0) {
                                                                 | label_4:
    0x0001271c subs r5, 1                                        |         r5--;
                                                                 |         if (r5 <= 1) {
    0x0001271e blo 0x12778                                       |             goto label_100;
                                                                 |         }
                                                                 | label_5:
    0x00012720 ldr.w r3, [r4, 0x208]                             |         r3 = *((r4 + 0x208));
    0x00012724 movs r2, 1                                        |         r2 = 1;
    0x00012726 ldr.w sb, [r3, r5, lsl 2]                         |         offset_2 = r5 << 2;
                                                                 |         sb = *((r3 + offset_2));
    0x0001272a ldr.w r3, [sb, 0x1c]                              |         r3 = *((sb + 0x1c));
    0x0001272e ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00012730 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00012732 bne.w 0x1294a                                     |             goto label_7;
                                                                 |         }
                                                                 | label_6:
    0x00012736 ldrb.w r3, [sb, 0x1a6]                            |         r3 = *((sb + 0x1a6));
    0x0001273a cmp sb, r6                                        |         
    0x0001273c bfc r3, 4, 1                                      |         value_3 = BIT_MASK (1, );
                                                                 |         value_3 = ~value_3;
                                                                 |         r3 &= value_3;
    0x00012740 strb.w r3, [sb, 0x1a6]                            |         *((sb + 0x1a6)) = r3;
                                                                 |         if (sb != r6) {
    0x00012744 beq 0x1275c                                       |             
    0x00012746 ldr.w r2, [r8, 0x2c]                              |             r2 = *((r8 + 0x2c));
    0x0001274a mov r3, fp                                        |             r3 = fp;
    0x0001274c ldr.w r1, [sb, 0x1e4]                             |             r1 = *((sb + 0x1e4));
    0x00012750 mov r0, sb                                        |             r0 = sb;
    0x00012752 subs r2, 0                                        |             
    0x00012754 it ne                                             |             
                                                                 |             if (r2 == 0) {
    0x00012756 movne r2, 1                                       |                 r2 = 1;
                                                                 |             }
    0x00012758 bl 0x960c                                         |             fcn_0000960c (r0, r1, r2, r3, r4, r5, r6);
                                                                 |         }
    0x0001275c ldr.w r3, [sb, 0x248]                             |         r3 = *((sb + 0x248));
    0x00012760 cmp r3, 0                                         |         
    0x00012762 beq 0x1271c                                       |         
                                                                 |     }
    0x00012764 ldrb.w r3, [sl]                                   |     r3 = *(sl);
    0x00012768 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001276a beq 0x1271c                                       |         goto label_4;
                                                                 |     }
    0x0001276c mov r0, sb                                        |     r0 = sb;
    0x0001276e movs r1, 1                                        |     r1 = 1;
    0x00012770 bl 0xc794                                         |     fcn_0000c794 (r0, r1);
    0x00012774 subs r5, 1                                        |     r5--;
                                                                 |     if (r5 >= 1) {
    0x00012776 bhs 0x12720                                       |         goto label_5;
                                                                 |     }
                                                                 | label_100:
    0x00012778 ldr.w sb, [r7, 0x3c]                              |     sb = *((r7 + 0x3c));
                                                                 | label_99:
    0x0001277c ldr r3, [pc, 0x2d0]                               |     
    0x0001277e add r3, pc                                        |     
    0x00012780 ldr.w r3, [r3, 0x5dc]                             |     r3 = *(0x257ae);
    0x00012784 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00012786 bne.w 0x134b8                                     |         goto label_101;
                                                                 |     }
                                                                 | label_29:
    0x0001278a ldr r3, [r7, 0x30]                                |     r3 = *((r7 + 0x30));
    0x0001278c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001278e bne.w 0x12956                                     |         goto label_102;
                                                                 |     }
    0x00012792 ldr r3, [pc, 0x2c0]                               |     
    0x00012794 add r3, pc                                        |     
    0x00012796 ldr.w r3, [r3, 0x8e8]                             |     r3 = *(0x25ad6);
    0x0001279a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001279c beq.w 0x12956                                     |         goto label_102;
                                                                 |     }
                                                                 | label_8:
    0x000127a0 ldr r2, [pc, 0x2b4]                               |     
    0x000127a2 add r2, pc                                        |     r2 = 0x251fe;
    0x000127a4 ldr.w r3, [r2, 0x900]                             |     r3 = *(0x25afe);
    0x000127a8 adds r3, 1                                        |     r3++;
    0x000127aa str.w r3, [r2, 0x900]                             |     __asm ("str.w r3, [r2, 0x900]");
                                                                 | label_9:
    0x000127ae movs r1, 0                                        |     r1 = 0;
    0x000127b0 mov r0, sb                                        |     r0 = sb;
    0x000127b2 bl 0xc2bc                                         |     dl_allocate_tls_init ();
    0x000127b6 ldr r3, [pc, 0x2a4]                               |     
    0x000127b8 add r3, pc                                        |     r3 = 0x2521a;
    0x000127ba ldrb r3, [r3]                                     |     r3 = *(r3);
                                                                 |     if (r3 == 0) {
    0x000127bc cbnz r3, 0x127d8                                  |         
    0x000127be mov.w ip, 5                                       |         
    0x000127c2 mov r0, sb                                        |         r0 = sb;
    0x000127c4 movt ip, 0xf                                      |         
    0x000127c8 bl 0x13fd0                                        |         r0 = fcn_00013fd0 ();
    0x000127cc cmn.w r0, 0x1000                                  |         
                                                                 |         if (r0 > 0x1000) {
    0x000127d0 bhi.w 0x12e58                                     |             goto label_103;
                                                                 |         }
    0x000127d4 bl 0xc974                                         |         fcn_0000c974 ();
                                                                 |     }
    0x000127d8 ldr r3, [pc, 0x284]                               |     
    0x000127da ldr r5, [pc, 0x288]                               |     
    0x000127dc add r3, pc                                        |     r3 = 0x25240;
    0x000127de add r5, pc                                        |     r5 = 0x25248;
    0x000127e0 ldr.w r2, [r3, 0x178]                             |     r2 = *(0x253b8);
    0x000127e4 ldr.w r3, [r5, 0x5e8]                             |     r3 = *(0x25830);
    0x000127e8 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000127ea bne.w 0x13d0e                                     |         void (*0x13d0e)() ();
                                                                 |     }
    0x000127ee ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x000127f0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000127f2 bne.w 0x1305e                                     |         goto label_104;
                                                                 |     }
                                                                 | label_19:
    0x000127f6 ldr r3, [pc, 0x270]                               |     
    0x000127f8 movs r1, 1                                        |     r1 = 1;
    0x000127fa add r3, pc                                        |     r3 = 0x25268;
    0x000127fc ldr r0, [r3, 0x14]                                |     r0 = *(0x2527c);
    0x000127fe bl 0xa40                                          |     _text ();
    0x00012802 bl 0x100c0                                        |     fcn_000100c0 ();
    0x00012804 mrrc2 p1, 0, r2, sp, c0                           |     __asm ("mrrc2 p1, 0, r2, sp, c0");
    0x00012808 mov r0, r1                                        |     r0 = r1;
    0x0001280a bl 0xe2f4                                         |     fcn_0000e2f4 (r0);
    0x0001280e movs r0, 0                                        |     r0 = 0;
    0x00012810 bl 0x16dc                                         |     fcn_000016dc (r0);
    0x00012814 movs r3, 0                                        |     r3 = 0;
    0x00012816 str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x00012818 bl 0x16d8                                         |     dl_debug_state ();
    0x0001281c bl 0xd928                                         |     fcn_0000d928 ();
    0x00012820 add.w r7, r7, 0x1dc                               |     r7 += 0x1dc;
    0x00012824 mov sp, r7                                        |     
    0x00012826 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_7:
    0x0001294a str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0001294c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0001294e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00012950 beq.w 0x12736                                     |         goto label_6;
                                                                 |     }
    0x00012954 b 0x1294a                                         |     goto label_7;
                                                                 | label_102:
    0x00012956 bl 0xc064                                         |     fcn_0000c064 ();
    0x0001295a ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x0001295c cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x0001295e bne.w 0x127a0                                     |         goto label_8;
                                                                 |     }
    0x00012962 b 0x127ae                                         |     goto label_9;
                                                                 | label_83:
    0x00012a74 ldr.w r1, [pc, 0xc44]                             |     r1 = *(0x000136bc);
    0x00012a78 mov r0, r5                                        |     r0 = r5;
    0x00012a7a add r1, pc                                        |     r1 += pc;
    0x00012a7c bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00012a80 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00012a82 bne.w 0x12e7a                                     |         goto label_105;
                                                                 |     }
    0x00012a86 cmp r6, 2                                         |     
                                                                 |     if (r6 == 2) {
    0x00012a88 beq.w 0x130b0                                     |         goto label_106;
                                                                 |     }
    0x00012a8c ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x00012a8e ldrb r3, [r2]                                     |     r3 = *(r2);
                                                                 |     if (r3 != 0) {
    0x00012a90 cbz r3, 0x12aae                                   |         
    0x00012a92 ldr.w r3, [sl, 0x40]                              |         r3 = *((sl + 0x40));
    0x00012a96 cmp r3, 0x10                                      |         
                                                                 |         if (r3 == 0x10) {
    0x00012a98 beq.w 0x13c58                                     |             goto label_107;
                                                                 |         }
    0x00012a9c str.w r2, [sl, r3, lsl 2]                         |         __asm ("str.w r2, [sl, r3, lsl 2]");
    0x00012aa0 adds r3, 1                                        |         r3++;
    0x00012aa2 cmp r3, 1                                         |         
    0x00012aa4 str.w r3, [sl, 0x40]                              |         __asm ("str.w r3, [sl, 0x40]");
    0x00012aa8 it eq                                             |         
                                                                 |         if (r3 == 1) {
    0x00012aaa streq r2, [sl, 0x48]                              |             *((sl + 0x48)) = r2;
                                                                 |             goto label_108;
                                                                 |         }
                                                                 |     }
                                                                 | label_108:
    0x00012aae subs r6, 2                                        |     r6 -= 2;
    0x00012ab0 adds r4, 8                                        |     r4 += 8;
    0x00012ab2 b.w 0x1174e                                       |     goto label_3;
                                                                 | label_67:
    0x00012ad6 mov r0, r4                                        |     r0 = r4;
    0x00012ad8 bl 0x161c0                                        |     r0 = fcn_000161c0 (r0, r1);
    0x00012adc add.w r3, r0, 0x13                                |     r3 = r0 + 0x13;
    0x00012ae0 str.w sp, [r7, 0x3c]                              |     __asm ("str.w sp, [r7, 0x3c]");
    0x00012ae4 bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x00012ae8 add.w r6, r0, 0xb                                 |     r6 = r0 + 0xb;
    0x00012aec sub.w sp, sp, r3                                  |     
    0x00012af0 mov r5, r0                                        |     r5 = r0;
    0x00012af2 add.w r8, sp, 0x10                                |     r8 += arg_10h;
    0x00012af6 strb.w sb, [r8, r6]                               |     *((r8 + r6)) = sb;
    0x00012afa bl 0x15230                                        |     fcn_00015230 ();
    0x00012afe add.w r2, r8, r6                                  |     r2 = r8 + r6;
    0x00012b02 asrs r1, r0, 0x1f                                 |     r1 = r0 >> 0x1f;
    0x00012b04 movs r3, 0xa                                      |     r3 = 0xa;
    0x00012b06 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00012b0a bl 0xfd84                                         |     fcn_0000fd84 (r0, r1, r2, r3, r4, r5, r6);
    0x00012b0e movs r3, 0x2e                                     |     r3 = 0x2e;
    0x00012b10 mov r1, r4                                        |     r1 = r4;
    0x00012b12 strb r3, [r0, -0x1]                               |     *((r0 - 0x1)) = r3;
    0x00012b16 mvns r3, r5                                       |     r3 = ~r5;
    0x00012b18 add r0, r3                                        |     r0 += r3;
    0x00012b1a mov r2, r5                                        |     r2 = r5;
    0x00012b1c blx 0x16400                                       |     fcn_00016400 (r0, r1);
    0x00012b20 mov.w r2, 0x1b6                                   |     r2 = 0x1b6;
    0x00012b24 movw r1, 0x8441                                   |     r1 = 0x8441;
    0x00012b28 bl 0x14db0                                        |     fcn_00014db0 (r0);
    0x00012b2c ldr.w r3, [pc, 0xb98]                             |     r3 = *(0x000136c8);
    0x00012b30 adds r4, r0, 1                                    |     r4 = r0 + 1;
    0x00012b32 it eq                                             |     
                                                                 |     if (r4 != r0) {
    0x00012b34 moveq r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x00012b36 add r3, pc                                        |     r3 += pc;
    0x00012b38 str r0, [r3, 0x28]                                |     *((r3 + 0x28)) = r0;
    0x00012b3a ldr.w sp, [r7, 0x3c]                              |     sp = *((r7 + 0x3c));
    0x00012b3e b.w 0x116b8                                       |     goto label_10;
                                                                 |     do {
                                                                 | label_13:
    0x00012bb6 ldr r0, [r7, 0x3c]                                |         r0 = *((r7 + 0x3c));
    0x00012bb8 bl 0x10a7c                                        |         r0 = fcn_00010a7c (r0);
    0x00012bbc mov r5, r0                                        |         r5 = r0;
    0x00012bbe cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00012bc0 beq 0x12c54                                       |             goto label_109;
                                                                 |         }
                                                                 | label_11:
    0x00012bc2 add.w r4, r7, 0x4c                                |         r4 = r7 + 0x4c;
    0x00012bc6 movs r3, 0                                        |         r3 = 0;
    0x00012bc8 str r3, [r4]                                      |         *(r4) = r3;
    0x00012bca add.w r6, r7, 0x50                                |         r6 = r7 + 0x50;
    0x00012bce str r3, [r6, 4]                                   |         *((r6 + 4)) = r3;
    0x00012bd0 add.w r8, r7, 0x47                                |         r8 = r7 + 0x47;
    0x00012bd4 ldr r3, [r7, 0x34]                                |         r3 = *((r7 + 0x34));
    0x00012bd6 add.w sb, r7, 0x48                                |         sb = r7 + 0x48;
    0x00012bda str r0, [r6]                                      |         *(r6) = r0;
    0x00012bdc mov r2, r8                                        |         r2 = r8;
    0x00012bde mov r1, r4                                        |         r1 = r4;
    0x00012be0 mov r0, sb                                        |         r0 = sb;
    0x00012be2 ldr.w sl, [r3, 0x8e8]                             |         sl = *((r3 + 0x8e8));
    0x00012be6 str r6, [sp]                                      |         *(sp) = r6;
    0x00012be8 ldr r3, [r7, 0x30]                                |         r3 = *((r7 + 0x30));
    0x00012bea blx 0xa04                                         |         fcn_00000a04 ();
    0x00012bee ldr r2, [r4]                                      |         r2 = *(r4);
    0x00012bf0 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00012bf2 bne 0x12c76                                       |             goto label_110;
                                                                 |         }
    0x00012bf4 ldr r3, [r7, 0x2c]                                |         r3 = *((r7 + 0x2c));
    0x00012bf6 mov r2, r8                                        |         r2 = r8;
    0x00012bf8 mov r1, r4                                        |         r1 = r4;
    0x00012bfa mov r0, sb                                        |         r0 = sb;
    0x00012bfc str.w r3, [fp]                                    |         __asm ("str.w r3, [fp]");
    0x00012c00 ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x00012c02 str.w r3, [fp, 4]                                 |         __asm ("str.w r3, [arg_4h]");
    0x00012c06 ldr.w r3, [pc, 0xadc]                             |         r3 = *(0x000136e4);
    0x00012c0a str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
    0x00012c0e add r3, pc                                        |         r3 += pc;
    0x00012c10 str r3, [r7, 0x38]                                |         *((r7 + 0x38)) = r3;
    0x00012c12 blx 0xa04                                         |         fcn_00000a04 ();
    0x00012c14 cdp p8, 0xf, c6, c8, c3, 1                        |         __asm ("cdp p8, 0xf, c6, c8, c3, 1");
    0x00012c18 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00012c1a beq 0x12ca8                                       |             goto label_111;
                                                                 |         }
    0x00012c1c ldr r0, [r6, 4]                                   |         r0 = *((r6 + 4));
    0x00012c1e mov r1, sl                                        |         r1 = sl;
    0x00012c20 bl 0x10c44                                        |         fcn_00010c44 (r0, r1, r2, r3, r4, r5);
    0x00012c24 ldr r6, [r4]                                      |         r6 = *(r4);
    0x00012c26 mov r1, r5                                        |         r1 = r5;
    0x00012c28 ldrb.w r4, [r8]                                   |         r4 = *(r8);
    0x00012c2c ldr.w r0, [pc, 0xab8]                             |         r0 = *(0x000136e8);
    0x00012c30 mov r2, r6                                        |         r2 = r6;
    0x00012c32 add r0, pc                                        |         r0 += pc;
    0x00012c34 bl 0x8b3c                                         |         fcn_00008b3c ();
    0x00012c38 cmp r4, 0                                         |         
    0x00012c3a beq 0x12bb6                                       |         
                                                                 |     } while (r4 == 0);
    0x00012c3c ldr.w r3, [pc, 0xaac]                             |     r3 = *(0x000136ec);
    0x00012c40 mov r0, r6                                        |     r0 = r6;
    0x00012c42 add r3, pc                                        |     r3 += pc;
    0x00012c44 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00012c46 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00012c48 ldr r0, [r7, 0x3c]                                |     r0 = *((r7 + 0x3c));
    0x00012c4a bl 0x10a7c                                        |     r0 = fcn_00010a7c (r0);
    0x00012c4e mov r5, r0                                        |     r5 = r0;
    0x00012c50 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00012c52 bne 0x12bc2                                       |         goto label_11;
                                                                 |     }
                                                                 | label_109:
    0x00012c54 ldr.w r5, [pc, 0xa98]                             |     
    0x00012c58 mov r8, r0                                        |     r8 = r0;
    0x00012c5a ldrd sb, r4, [r7, 0x18]                           |     __asm ("ldrd sb, r4, [r7, 0x18]");
    0x00012c5e ldr r6, [r7, 0x14]                                |     r6 = *((r7 + 0x14));
    0x00012c60 add r5, pc                                        |     r5 = 0x26354;
    0x00012c62 ldr.w sl, [r7, 0x3c]                              |     sl = *((r7 + 0x3c));
    0x00012c66 ldr.w r3, [r5, 0x1cc]                             |     r3 = *(0x26520);
    0x00012c6a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00012c6c bne.w 0x12faa                                     |         goto label_112;
                                                                 |     }
                                                                 | label_17:
    0x00012c70 movs r3, 0                                        |     r3 = 0;
    0x00012c72 str r3, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r3;
    0x00012c74 b 0x124ea                                         |     goto label_12;
                                                                 | label_110:
    0x00012c76 ldrb.w r4, [r8]                                   |     r4 = *(r8);
    0x00012c7a mov r1, r5                                        |     r1 = r5;
    0x00012c7c ldr.w r0, [pc, 0xa74]                             |     r0 = *(0x000136f4);
    0x00012c80 str r2, [r7, 0x38]                                |     *((r7 + 0x38)) = r2;
    0x00012c82 add r0, pc                                        |     r0 += pc;
    0x00012c84 bl 0x8b3c                                         |     fcn_00008b3c ();
    0x00012c88 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00012c8a beq 0x12bb6                                       |         goto label_13;
                                                                 |     }
    0x00012c8c ldr.w r3, [pc, 0xa68]                             |     r3 = *(0x000136f8);
    0x00012c90 ldr r2, [r7, 0x38]                                |     r2 = *((r7 + 0x38));
    0x00012c92 add r3, pc                                        |     r3 += pc;
    0x00012c94 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00012c96 mov r0, r2                                        |     r0 = r2;
    0x00012c98 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00012c9a b 0x12bb6                                         |     goto label_13;
                                                                 | label_111:
    0x00012ca8 ldr.w r2, [fp, 8]                                 |     r2 = *(arg_8h);
    0x00012cac cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00012cae beq.w 0x13d5c                                     |         goto label_113;
                                                                 |     }
    0x00012cb2 movs r0, 2                                        |     r0 = 2;
    0x00012cb4 str r3, [r7, 0xc]                                 |     *((r7 + 0xc)) = r3;
    0x00012cb6 blx r2                                            |     uint32_t (*r2)(uint32_t, uint32_t) (r0, r3);
    0x00012cb8 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00012cba mov r2, r0                                        |     r2 = r0;
    0x00012cbc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00012cbe beq.w 0x13006                                     |         goto label_114;
                                                                 |     }
    0x00012cc2 cmp r0, 2                                         |     
                                                                 |     if (r0 > 2) {
    0x00012cc4 bhi.w 0x139f2                                     |         goto label_115;
                                                                 |     }
    0x00012cc8 ldr.w r2, [pc, 0xa30]                             |     
    0x00012ccc movs r0, 0x24                                     |     r0 = 0x24;
    0x00012cce str r3, [r7, 0xc]                                 |     *((r7 + 0xc)) = r3;
    0x00012cd0 add r2, pc                                        |     
    0x00012cd2 ldr r2, [r2]                                      |     r2 = *(0x263d0);
    0x00012cd4 blx r2                                            |     uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00012cd6 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00012cd8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00012cda beq.w 0x13c18                                     |         goto label_116;
                                                                 |     }
    0x00012cde ldr.w r5, [pc, 0xa20]                             |     r5 = *(0x00013700);
    0x00012ce2 mov sl, r3                                        |     sl = r3;
    0x00012ce4 subs r3, r0, 4                                    |     r3 = r0 - 4;
    0x00012ce6 strd r6, r0, [r7, 8]                              |     __asm ("strd r6, r0, [r7, 8]");
    0x00012cea mov r6, fp                                        |     r6 = fp;
    0x00012cec mov fp, r3                                        |     
    0x00012cee add r5, pc                                        |     r5 += pc;
    0x00012cf0 add.w r5, r5, 0x370                               |     r5 += 0x370;
    0x00012cf4 b 0x12d12                                         |     
                                                                 |     while (r3 != 0) {
    0x00012cf6 movs r3, 0                                        |         r3 = 0;
                                                                 | label_14:
    0x00012cf8 mov r0, r5                                        |         r0 = r5;
    0x00012cfa movs r1, 0                                        |         r1 = 0;
    0x00012cfc str r3, [fp, 4]!                                  |         *(arg_4h) = r3;
    0x00012d00 add.w sl, sl, 1                                   |         sl++;
    0x00012d04 bl 0x15a60                                        |         void (*0x15a60)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00012d08 ldrb r2, [r0, 1]                                  |         r2 = *((r0 + 1));
    0x00012d0a adds r5, r0, 1                                    |         r5 = r0 + 1;
    0x00012d0c cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00012d0e beq.w 0x13164                                     |             goto label_117;
                                                                 |         }
    0x00012d12 str r5, [r6]                                      |         *(r6) = r5;
    0x00012d14 mov r2, r8                                        |         r2 = r8;
    0x00012d16 str r6, [sp]                                      |         *(sp) = r6;
    0x00012d18 mov r1, r4                                        |         r1 = r4;
    0x00012d1a ldr r3, [r7, 0x38]                                |         r3 = *((r7 + 0x38));
    0x00012d1c mov r0, sb                                        |         r0 = sb;
    0x00012d1e blx 0xa04                                         |         fcn_00000a04 ();
    0x00012d22 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00012d24 cmp r3, 0                                         |         
    0x00012d26 bne 0x12cf6                                       |         
                                                                 |     }
    0x00012d28 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x00012d2a b 0x12cf8                                         |     goto label_14;
                                                                 | label_74:
    0x00012d48 cmp r0, 6                                         |     
                                                                 |     if (r0 == 6) {
    0x00012d4a beq.w 0x12ffe                                     |         goto label_50;
                                                                 |     }
    0x00012d4e ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x00012d50 movs r1, 0                                        |     r1 = 0;
    0x00012d52 bl 0x102c0                                        |     fcn_000102c0 (r0, r1);
    0x00012d56 ldr.w r1, [pc, 0x9b0]                             |     r1 = *(0x00013708);
    0x00012d5a movs r2, 7                                        |     r2 = 7;
    0x00012d5c mov r0, r5                                        |     r0 = r5;
    0x00012d5e add r1, pc                                        |     r1 += pc;
    0x00012d60 bl 0x15418                                        |     r0 = fcn_00015418 (r0, r1, r2);
    0x00012d64 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00012d66 beq.w 0x12fa0                                     |         goto label_118;
                                                                 |     }
    0x00012d6a ldr.w r1, [pc, 0x9a0]                             |     r1 = *(0x0001370c);
    0x00012d6e movs r2, 7                                        |     r2 = 7;
    0x00012d70 mov r0, r5                                        |     r0 = r5;
    0x00012d72 add r1, pc                                        |     r1 += pc;
    0x00012d74 bl 0x15418                                        |     r0 = fcn_00015418 (r0, r1, r2);
    0x00012d78 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00012d7a bne.w 0x11612                                     |         goto label_0;
                                                                 |     }
    0x00012d7e ldrb r3, [r5, 8]                                  |     r3 = *((r5 + 8));
    0x00012d80 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00012d82 beq.w 0x11612                                     |         goto label_0;
                                                                 |     }
    0x00012d86 ldr.w r3, [pc, 0x988]                             |     
    0x00012d8a adds r5, 8                                        |     r5 += 8;
    0x00012d8c add r3, pc                                        |     r3 = 0x264a2;
    0x00012d8e str.w r5, [r3, 0x170]                             |     __asm ("str.w r5, [r3, 0x170]");
    0x00012d92 b.w 0x11612                                       |     goto label_0;
                                                                 | label_103:
    0x00012e58 ldr.w r1, [pc, 0x8c0]                             |     
    0x00012e5c ldr.w r0, [pc, 0x8c0]                             |     r0 = *(0x00013720);
    0x00012e60 add r1, pc                                        |     r1 = 0x26580;
    0x00012e62 add r0, pc                                        |     r0 += pc;
    0x00012e64 bl 0x8b5c                                         |     dl_fatal_printf ()
                                                                 | label_20:
    0x00012e68 ldr.w r1, [pc, 0x8b8]                             |     r1 = *(0x00013724);
    0x00012e6c mov r0, r5                                        |     r0 = r5;
    0x00012e6e add r1, pc                                        |     r1 += pc;
    0x00012e70 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00012e74 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00012e76 beq.w 0x130b0                                     |         goto label_106;
                                                                 |     }
                                                                 | label_105:
    0x00012e7a ldr.w r1, [pc, 0x8ac]                             |     
    0x00012e7e mov r0, r5                                        |     r0 = r5;
    0x00012e80 add r1, pc                                        |     r1 = 0x265ae;
    0x00012e82 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00012e86 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00012e88 bne.w 0x130f6                                     |         goto label_119;
                                                                 |     }
    0x00012e8c cmp r6, 2                                         |     
                                                                 |     if (r6 == 2) {
    0x00012e8e beq.w 0x130be                                     |         goto label_22;
                                                                 |     }
    0x00012e92 ldr r3, [r4, 8]!                                  |     r3 = *((r4 += 8));
    0x00012e96 subs r6, 2                                        |     r6 -= 2;
    0x00012e98 str.w r3, [sl, 0x158]                             |     __asm ("str.w r3, [sl, 0x158]");
    0x00012e9c b.w 0x1174e                                       |     goto label_3;
    0x00012eae ldr r1, [r5]                                      |     r1 = *(r5);
    0x00012eb0 str r1, [r2, 4]                                   |     *((r2 + 4)) = r1;
                                                                 | label_18:
    0x00012eb2 ldr r1, [r2, 8]!                                  |     r1 = *((r2 += 8));
    0x00012eb6 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00012eb8 bne.w 0x11ac4                                     |         goto label_15;
                                                                 |     }
                                                                 | label_81:
    0x00012ebc ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
                                                                 |     if (r2 != 0) {
    0x00012ebe cbz r2, 0x12ec4                                   |         
    0x00012ec0 ldr r2, [r7, 4]                                   |         r2 = *((r7 + 4));
    0x00012ec2 str r2, [r0]                                      |         *(r0) = r2;
                                                                 |     }
    0x00012ec4 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00012ec6 subs r1, r0, r2                                   |     r1 = r0 - r2;
                                                                 |     if (r1 == r0) {
    0x00012ec8 beq 0x12f78                                       |         goto label_120;
                                                                 |     }
    0x00012eca asrs r2, r1, 2                                    |     r2 = r1 >> 2;
    0x00012ecc ldr.w r6, [pc, 0x85c]                             |     
    0x00012ed0 mvn r5, 0xc0000000                                |     r5 = ~0xc0000000;
    0x00012ed4 sub.w ip, r5, r2                                  |     
    0x00012ed8 ldr.w r3, [r0, ip, lsl 2]                         |     offset_4 = ip << 2;
                                                                 |     r3 = *((r0 + offset_4));
    0x00012edc add r6, pc                                        |     r6 = 0x2660c;
    0x00012ede ldr r5, [r6, 4]                                   |     r5 = *(0x26610);
    0x00012ee0 subs r2, r3, r2                                   |     r2 = r3 - r2;
    0x00012ee2 add.w r3, r0, ip, lsl 2                           |     r3 = r0 + (ip << 2);
    0x00012ee6 cmp r2, r5                                        |     
                                                                 |     if (r2 != r5) {
    0x00012ee8 bne.w 0x13c60                                     |         goto label_121;
                                                                 |     }
    0x00012eec str.w r2, [r0, ip, lsl 2]                         |     __asm ("str.w r2, [r0, ip, lsl 2]");
    0x00012ef0 ldr.w r0, [pc, 0x83c]                             |     r0 = *(0x00013730);
    0x00012ef4 ldr r2, [r6]                                      |     r2 = *(r6);
    0x00012ef6 add r0, pc                                        |     r0 += pc;
    0x00012ef8 subs r2, r2, r1                                   |     r2 -= r1;
    0x00012efa str r2, [r6]                                      |     *(r6) = r2;
    0x00012efc ldr r2, [r0]                                      |     r2 = *(r0);
    0x00012efe subs r2, r2, r1                                   |     r2 -= r1;
    0x00012f00 str r2, [r0]                                      |     *(r0) = r2;
    0x00012f02 adds r2, r1, 4                                    |     r2 = r1 + 4;
    0x00012f04 rsbs r0, r1, 0                                    |     r0 = r1 - ;
    0x00012f06 add r2, r3                                        |     r2 += r3;
                                                                 |     do {
    0x00012f08 mov r1, r2                                        |         r1 = r2;
    0x00012f0a ldr r5, [r2], 4                                   |         r5 = *(r2);
                                                                 |         r2 += 4;
    0x00012f0e mov r6, r3                                        |         r6 = r3;
    0x00012f10 str r5, [r3, 4]!                                  |         *((r3 += 4)) = r5;
    0x00012f14 cmp r5, 0                                         |         
    0x00012f16 bne 0x12f08                                       |         
                                                                 |     } while (r5 != 0);
    0x00012f18 ldr.w r2, [pc, 0x818]                             |     r2 = *(0x00013734);
    0x00012f1c adds r6, 8                                        |     r6 += 8;
    0x00012f1e add r2, pc                                        |     r2 += pc;
    0x00012f20 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00012f22 cmp r2, r6                                        |     
                                                                 |     if (r2 != r6) {
    0x00012f24 bne.w 0x13c9c                                     |         goto label_122;
                                                                 |     }
                                                                 |     do {
    0x00012f28 mov r2, r1                                        |         r2 = r1;
    0x00012f2a ldr r5, [r1, 4]!                                  |         r5 = *((r1 += 4));
    0x00012f2e mov r6, r3                                        |         r6 = r3;
    0x00012f30 str r5, [r3, 4]!                                  |         *((r3 += 4)) = r5;
    0x00012f34 cmp r5, 0                                         |         
    0x00012f36 bne 0x12f28                                       |         
                                                                 |     } while (r5 != 0);
    0x00012f38 ldr.w r5, [pc, 0x7fc]                             |     r5 = *(0x00013738);
    0x00012f3c adds r6, 8                                        |     r6 += 8;
    0x00012f3e add r5, pc                                        |     r5 += pc;
    0x00012f40 ldr r1, [r5, 0x48]                                |     r1 = *((r5 + 0x48));
    0x00012f42 add r1, r0                                        |     r1 += r0;
    0x00012f44 cmp r1, r6                                        |     
    0x00012f46 str r1, [r5, 0x48]                                |     *((r5 + 0x48)) = r1;
    0x00012f48 it eq                                             |     
                                                                 |     if (r1 != r6) {
    0x00012f4a addeq r2, 8                                       |         r2 += 8;
                                                                 |     }
                                                                 |     if (r1 != r6) {
    0x00012f4c bne.w 0x13c88                                     |         goto label_123;
                                                                 |     }
                                                                 |     do {
    0x00012f50 ldr r0, [r2]                                      |         r0 = *(r2);
    0x00012f52 mov r3, fp                                        |         r3 = fp;
    0x00012f54 ldr r1, [r2, 4]                                   |         r1 = *((r2 + 4));
    0x00012f56 adds r6, 8                                        |         r6 += 8;
    0x00012f58 adds r2, 8                                        |         r2 += 8;
    0x00012f5a stm r3!, {r0, r1}                                 |         *(r3!) = r0;
                                                                 |         *((r3! + 4)) = r1;
    0x00012f5c mov r3, fp                                        |         r3 = fp;
    0x00012f5e ldm r3!, {r0, r1}                                 |         r0 = *(r3!);
                                                                 |         r1 = *((r3! + 4));
    0x00012f60 str r0, [r6, -0x8]                                |         *((r6 - 0x8)) = r0;
    0x00012f64 str r1, [r6, -0x4]                                |         *((r6 - 0x4)) = r1;
    0x00012f68 ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x00012f6c cmp r3, 0                                         |         
    0x00012f6e bne 0x12f50                                       |         
                                                                 |     } while (r3 != 0);
    0x00012f70 ldrh.w r3, [r4, 0x168]                            |     r3 = *((r4 + 0x168));
    0x00012f74 ldr.w r6, [r4, 0x160]                             |     r6 = *((r4 + 0x160));
                                                                 | label_120:
    0x00012f78 movs r2, 1                                        |     r2 = 1;
    0x00012f7a str r2, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r2;
    0x00012f7c b.w 0x11ba0                                       |     goto label_16;
                                                                 | label_118:
    0x00012fa0 adds r5, 8                                        |     r5 += 8;
    0x00012fa2 str.w r5, [sl, 0x154]                             |     __asm ("str.w r5, [sl, 0x154]");
    0x00012fa6 b.w 0x11612                                       |     goto label_0;
                                                                 | label_112:
    0x00012faa mov r1, r0                                        |     r1 = r0;
    0x00012fac mov r0, r4                                        |     r0 = r4;
    0x00012fae bl 0xe3a8                                         |     fcn_0000e3a8 (r0, r1, r2, r3);
    0x00012fb2 ldr.w r0, [pc, 0x790]                             |     
    0x00012fb6 mov r1, r8                                        |     r1 = r8;
    0x00012fb8 add r0, pc                                        |     
    0x00012fba add.w r0, r0, 0x5f0                               |     r0 = 0x26cf2;
    0x00012fbe bl 0xe3a8                                         |     fcn_0000e3a8 (r0, r1, r2, r3);
    0x00012fc2 ldr.w r3, [r5, 0x1cc]                             |     r3 = *((r5 + 0x1cc));
    0x00012fc6 cmp r3, r6                                        |     
                                                                 |     if (r3 < r6) {
    0x00012fc8 bls.w 0x12c70                                     |         goto label_17;
                                                                 |     }
    0x00012fcc ldr.w r3, [pc, 0x778]                             |     
    0x00012fd0 movw r2, 0x723                                    |     r2 = 0x723;
    0x00012fd4 ldr.w r1, [pc, 0x774]                             |     r1 = *(0x0001374c);
    0x00012fd8 ldr.w r0, [pc, 0x774]                             |     
    0x00012fdc add r3, pc                                        |     r3 = 0x26728;
    0x00012fde add r1, pc                                        |     r1 += pc;
    0x00012fe0 add r0, pc                                        |     r0 = 0x26734;
    0x00012fe2 bl 0xfba4                                         |     r0 = fcn_0000fba4 (r0);
    0x00012fe6 ldr r1, [r0]                                      |     r1 = *(r0);
    0x00012fe8 str r1, [r2, 4]                                   |     *((r2 + 4)) = r1;
    0x00012fea b 0x12eb2                                         |     goto label_18;
    0x00012fec str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x00012fee b 0x12eb2                                         |     goto label_18;
    0x00012ff0 str r6, [r2, 4]                                   |     *((r2 + 4)) = r6;
    0x00012ff2 b 0x12eb2                                         |     goto label_18;
                                                                 | label_50:
    0x00012ffe ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x00013000 mov r1, sl                                        |     r1 = sl;
    0x00013002 bl 0x10310                                        |     fcn_00010310 (r0, r1);
                                                                 | label_114:
    0x00013006 ldr.w r3, [pc, 0x74c]                             |     r3 = *(0x00013754);
    0x0001300a add r3, pc                                        |     r3 += pc;
    0x0001300c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001300e lsls r2, r3, 0x19                                 |     r2 = r3 << 0x19;
                                                                 |     if (r2 < r3) {
    0x00013010 bmi.w 0x13620                                     |         goto label_124;
                                                                 |     }
                                                                 | label_36:
    0x00013014 ldr r0, [r6, 4]                                   |     r0 = *((r6 + 4));
    0x00013016 mov r1, sl                                        |     r1 = sl;
    0x00013018 bl 0x10c44                                        |     fcn_00010c44 (r0, r1, r2, r3, r4, r5);
    0x0001301c b 0x12bb6                                         |     goto label_13;
                                                                 | label_104:
    0x0001305e bl 0x2b90                                         |     fcn_00002b90 ();
    0x00013062 mov r0, r4                                        |     r0 = r4;
    0x00013064 bl 0xfca8                                         |     r0 = fcn_0000fca8 (r0);
    0x00013068 bl 0xfe44                                         |     fcn_0000fe44 (r0, r1);
    0x0001306c ldrb.w r1, [r5, 0x794]                            |     r1 = *((r5 + 0x794));
    0x00013070 movs r3, 0                                        |     r3 = 0;
    0x00013072 mov r2, r3                                        |     r2 = r3;
    0x00013074 add.w r0, r5, 0x5f0                               |     r0 = r5 + 0x5f0;
    0x00013078 bfc r1, 3, 1                                      |     value_5 = BIT_MASK (1, );
                                                                 |     value_5 = ~value_5;
                                                                 |     r1 &= value_5;
    0x0001307c strb.w r1, [r5, 0x794]                            |     *((r5 + 0x794)) = r1;
    0x00013080 ldr.w r1, [r4, 0x1e4]                             |     r1 = *((r4 + 0x1e4));
    0x00013084 bl 0x960c                                         |     fcn_0000960c (r0, r1, r2, r3, r4, r5, r6);
    0x00013088 b.w 0x127f6                                       |     goto label_19;
                                                                 | label_82:
    0x0001308c ldr.w r1, [pc, 0x6d0]                             |     r1 = *(0x00013760);
    0x00013090 mov r0, r5                                        |     r0 = r5;
    0x00013092 add r1, pc                                        |     r1 += pc;
    0x00013094 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00013098 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001309a beq.w 0x12e68                                     |         goto label_20;
                                                                 |     }
    0x0001309e ldr.w r1, [pc, 0x6c4]                             |     
    0x000130a2 mov r0, r5                                        |     r0 = r5;
    0x000130a4 add r1, pc                                        |     r1 = 0x2680e;
    0x000130a6 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x000130aa cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000130ac bne.w 0x13294                                     |         goto label_125;
                                                                 |     }
                                                                 | label_106:
    0x000130b0 ldr.w r1, [pc, 0x6b4]                             |     r1 = *(0x00013768);
    0x000130b4 mov r0, r5                                        |     r0 = r5;
    0x000130b6 add r1, pc                                        |     r1 += pc;
    0x000130b8 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
                                                                 |     if (r0 != 0) {
    0x000130bc cbnz r0, 0x130f6                                  |         goto label_119;
                                                                 |     }
                                                                 | label_22:
    0x000130be ldr.w r1, [pc, 0x6ac]                             |     
    0x000130c2 mov r0, r5                                        |     r0 = r5;
    0x000130c4 add r1, pc                                        |     r1 = 0x26836;
    0x000130c6 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x000130ca cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000130cc beq.w 0x1325e                                     |         goto label_126;
                                                                 |     }
                                                                 |     do {
                                                                 | label_23:
    0x000130d0 ldr.w r1, [pc, 0x69c]                             |         r1 = *(0x00013770);
    0x000130d4 mov r0, r5                                        |         r0 = r5;
    0x000130d6 add r1, pc                                        |         r1 += pc;
    0x000130d8 bl 0x15bb0                                        |         r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x000130dc cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000130de bne.w 0x1326c                                     |             goto label_127;
                                                                 |         }
    0x000130e2 cmp r6, 2                                         |         
                                                                 |         if (r6 == 2) {
    0x000130e4 beq.w 0x132b8                                     |             goto label_128;
                                                                 |         }
    0x000130e8 ldr r3, [r4, 8]!                                  |         r3 = *((r4 += 8));
    0x000130ec subs r6, 2                                        |         r6 -= 2;
    0x000130ee str.w r3, [sl, 0x15c]                             |         __asm ("str.w r3, [sl, 0x15c]");
    0x000130f2 b.w 0x1174e                                       |         goto label_3;
                                                                 | label_119:
    0x000130f6 ldr.w r1, [pc, 0x67c]                             |         
    0x000130fa mov r0, r5                                        |         r0 = r5;
    0x000130fc add r1, pc                                        |         r1 = 0x26876;
    0x000130fe bl 0x15bb0                                        |         r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00013102 cmp r0, 0                                         |         
    0x00013104 bne 0x130d0                                       |         
                                                                 |     } while (r0 != 0);
    0x00013106 cmp r6, 2                                         |     
                                                                 |     if (r6 == 2) {
    0x00013108 beq.w 0x132b8                                     |         goto label_128;
                                                                 |     }
    0x0001310c ldr r3, [r4, 8]!                                  |     r3 = *((r4 += 8));
    0x00013110 subs r6, 2                                        |     r6 -= 2;
    0x00013112 str r3, [r7, 4]                                   |     *((r7 + 4)) = r3;
    0x00013114 b.w 0x1174e                                       |     goto label_3;
                                                                 | label_80:
    0x00013124 ldr.w r3, [pc, 0x650]                             |     
    0x00013128 add r3, pc                                        |     r3 = 0x268a4;
    0x0001312a ldr r1, [r3]                                      |     r1 = *(0x268a4);
    0x0001312c ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x0001312e ldr r6, [r1]                                      |     r6 = *(0x268a4);
                                                                 |     if (r3 != 0) {
    0x00013130 cbz r3, 0x13134                                   |         
    0x00013132 str r3, [r1]                                      |         *(r1) = r3;
                                                                 |     }
    0x00013134 ldr.w r3, [pc, 0x644]                             |     r3 = *(0x0001377c);
    0x00013138 mov r0, r6                                        |     r0 = r6;
    0x0001313a mov.w ip, 0xb                                     |     
    0x0001313e add r3, pc                                        |     r3 += pc;
    0x00013140 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00013142 bl 0x13fd0                                        |     r0 = fcn_00013fd0 ();
    0x00013146 rsbs r4, r0, 0                                    |     r4 = r0 - ;
    0x00013148 mov r0, r4                                        |     r0 = r4;
    0x0001314a bl 0x16190                                        |     r0 = fcn_00016190 (r0);
    0x0001314e mov r3, r0                                        |     r3 = r0;
    0x00013150 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00013152 beq.w 0x139d2                                     |         goto label_129;
                                                                 |     }
    0x00013156 ldr.w r0, [pc, 0x628]                             |     r0 = *(0x00013780);
    0x0001315a mov r2, r6                                        |     r2 = r6;
    0x0001315c mov r1, r5                                        |     r1 = r5;
    0x0001315e add r0, pc                                        |     r0 += pc;
    0x00013160 bl 0x8b5c                                         |     dl_fatal_printf ()
                                                                 | label_117:
    0x00013164 cmp.w sl, 8                                       |     
    0x00013168 mov fp, r6                                        |     
    0x0001316a ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x0001316c ldr r6, [r7, 8]                                   |     r6 = *((r7 + 8));
                                                                 |     if (sl != 8) {
    0x0001316e bne.w 0x13c74                                     |         goto label_130;
                                                                 |     }
    0x00013172 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x00013174 str r2, [r1, 0x20]                                |     *((r1 + 0x20)) = r2;
    0x00013176 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00013178 beq.w 0x139e2                                     |         goto label_131;
                                                                 |     }
    0x0001317c ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x0001317e str r1, [r7, 0x10]                                |     *((r7 + 0x10)) = r1;
    0x00013180 str r1, [r3, 0x20]                                |     *((r3 + 0x20)) = r1;
                                                                 | label_47:
    0x00013182 ldr.w r0, [pc, 0x600]                             |     
    0x00013186 ldr.w r2, [pc, 0x600]                             |     r2 = *(0x00013788);
    0x0001318a ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x0001318c add r0, pc                                        |     r0 = 0x26916;
    0x0001318e ldr.w r3, [r0, 0x1cc]                             |     r3 = *(0x26ae2);
    0x00013192 add r2, pc                                        |     r2 += pc;
    0x00013194 add.w r5, r2, 0x5f0                               |     r5 = r2 + 0x5f0;
    0x00013198 add.w r4, r3, 0x10c                               |     r4 = r3 + 0x10c;
    0x0001319c adds r3, 1                                        |     r3++;
    0x0001319e str.w r5, [r2, r4, lsl 3]                         |     __asm ("str.w r5, [r2, r4, lsl 3]");
    0x000131a2 str.w r3, [r0, 0x1cc]                             |     __asm ("str.w r3, [r0, 0x1cc]");
    0x000131a6 ldrb.w r3, [r1, 0x1a6]                            |     r3 = *((r1 + 0x1a6));
    0x000131aa orr r3, r3, 1                                     |     r3 |= 1;
    0x000131ac lsls r1, r0, 0xc                                  |     r1 = r0 << 0xc;
    0x000131ae strb.w r3, [r1, 0x1a6]                            |     *((r1 + 0x1a6)) = r3;
    0x000131b2 b 0x12bb6                                         |     goto label_13;
                                                                 | label_66:
    0x000131b4 ldr.w r4, [pc, 0x5d4]                             |     
    0x000131b8 add r4, pc                                        |     
    0x000131ba add.w r4, r4, 0x26c                               |     r4 = 0x26bb4;
                                                                 |     do {
    0x000131be mov r0, r4                                        |         r0 = r4;
    0x000131c0 bl 0xefb8                                         |         fcn_0000efb8 (r0);
    0x000131c4 mov r0, r4                                        |         r0 = r4;
    0x000131c6 bl 0x161c0                                        |         r0 = fcn_000161c0 (r0, r1);
    0x000131ca add r4, r0                                        |         r4 += r0;
    0x000131cc ldrb r5, [r4, 1]                                  |         r5 = *((r4 + 1));
    0x000131ce adds r4, 1                                        |         r4++;
    0x000131d0 cmp r5, 0                                         |         
    0x000131d2 bne 0x131be                                       |         
                                                                 |     } while (r5 != 0);
    0x000131d4 ldr.w r0, [pc, 0x5b8]                             |     r0 = *(0x00013790);
    0x000131d8 mov r1, r5                                        |     r1 = r5;
    0x000131da add r0, pc                                        |     r0 += pc;
    0x000131dc bl 0x14c1c                                        |     r0 = fcn_00014c1c ();
                                                                 |     if (r0 != 0) {
    0x000131e0 cbz r0, 0x131ea                                   |         
    0x000131e2 ldr.w r3, [pc, 0x5b0]                             |         r3 = *(0x00013794);
    0x000131e6 add r3, pc                                        |         r3 += pc;
    0x000131e8 str r5, [r3]                                      |         *(r3) = r5;
                                                                 |     }
    0x000131ea ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
    0x000131ee cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000131f0 beq.w 0x116b8                                     |         goto label_10;
                                                                 |     }
    0x000131f4 movs r0, 5                                        |     r0 = 5;
    0x000131f6 bl 0x151e8                                        |     fcn_000151e8 (r0);
    0x000131fa b.w 0x116b8                                       |     goto label_10;
    0x000131fe mov r0, sb                                        |     r0 = sb;
    0x00013200 bl 0x10b30                                        |     r0 = fcn_00010b30 (r0);
    0x00013204 mov sb, r0                                        |     sb = r0;
    0x00013206 b.w 0x1268c                                       |     goto label_21;
                                                                 | label_126:
    0x0001325e ldr.w r1, [pc, 0x53c]                             |     
    0x00013262 mov r0, r5                                        |     r0 = r5;
    0x00013264 add r1, pc                                        |     r1 = 0x26a06;
    0x00013266 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
                                                                 |     if (r0 == 0) {
    0x0001326a cbz r0, 0x132b8                                   |         goto label_128;
                                                                 |     }
                                                                 | label_127:
    0x0001326c ldr.w r1, [pc, 0x530]                             |     r1 = *(0x000137a0);
    0x00013270 mov r0, r5                                        |     r0 = r5;
    0x00013272 add r1, pc                                        |     r1 += pc;
    0x00013274 bl 0x15bb0                                        |     fcn_00015bb0 (r0, r1, r2, r3);
    0x00013278 subs r3, r6, 2                                    |     r3 = r6 - 2;
    0x0001327a it ne                                             |     
                                                                 |     if (r3 == r6) {
    0x0001327c movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0001327e cmp r0, 0                                         |     
    0x00013280 it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x00013282 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00013284 cbz r3, 0x132b8                                   |         goto label_128;
                                                                 |     }
    0x00013286 ldr r3, [r4, 8]!                                  |     r3 = *((r4 += 8));
    0x0001328a subs r6, 2                                        |     r6 -= 2;
    0x0001328c str.w r3, [sl, 0x160]                             |     __asm ("str.w r3, [sl, 0x160]");
    0x00013290 b.w 0x1174e                                       |     goto label_3;
                                                                 | label_125:
    0x00013294 ldr.w r1, [pc, 0x50c]                             |     r1 = *(0x000137a4);
    0x00013298 mov r0, r5                                        |     r0 = r5;
    0x0001329a add r1, pc                                        |     r1 += pc;
    0x0001329c bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x000132a0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000132a2 beq.w 0x130be                                     |         goto label_22;
                                                                 |     }
    0x000132a6 ldr.w r1, [pc, 0x500]                             |     
    0x000132aa mov r0, r5                                        |     r0 = r5;
    0x000132ac add r1, pc                                        |     r1 = 0x26a5a;
    0x000132ae bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x000132b2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000132b4 bne.w 0x130d0                                     |         goto label_23;
                                                                 |     }
                                                                 | label_128:
    0x000132b8 ldr.w r1, [pc, 0x4f0]                             |     r1 = *(0x000137ac);
    0x000132bc mov r0, r5                                        |     r0 = r5;
    0x000132be add r1, pc                                        |     r1 += pc;
    0x000132c0 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x000132c4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000132c6 beq.w 0x13594                                     |         goto label_132;
                                                                 |     }
    0x000132ca ldr.w r1, [pc, 0x4e4]                             |     
    0x000132ce mov r0, r5                                        |     r0 = r5;
    0x000132d0 add r1, pc                                        |     r1 = 0x26a86;
    0x000132d2 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x000132d6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000132d8 bne.w 0x13a8a                                     |         goto label_133;
                                                                 |     }
    0x000132dc movs r3, 5                                        |     r3 = 5;
    0x000132de subs r6, 1                                        |     r6--;
    0x000132e0 adds r4, 4                                        |     r4 += 4;
    0x000132e2 str.w r3, [sl, 0x164]                             |     __asm ("str.w r3, [sl, 0x164]");
    0x000132e6 b.w 0x1174e                                       |     goto label_3;
                                                                 | label_94:
    0x000132ea ldr r0, [r2, 0xc]                                 |     r0 = *((r2 + 0xc));
    0x000132ec mov r6, r2                                        |     r6 = r2;
    0x000132ee str.w r2, [r5, 0x600]                             |     __asm ("str.w r2, [r5, 0x600]");
    0x000132f0 movs r6, 0                                        |     r6 = 0;
    0x000132f2 b.w 0x12630                                       |     goto label_24;
                                                                 | label_85:
    0x000132f6 str r1, [r7, 0xc]                                 |     *((r7 + 0xc)) = r1;
                                                                 |     if (r6 == 0) {
    0x000132f8 beq.w 0x11dac                                     |         void (*0x11dac)() ();
                                                                 |     }
    0x000132fc b.w 0x11cb6                                       |     void (*0x11cb6)() ();
                                                                 | label_91:
    0x00013300 ldr.w r2, [pc, 0x4b0]                             |     
    0x00013304 add r2, pc                                        |     
    0x00013306 ldr.w r3, [r2, 0x5fc]                             |     r3 = *(0x270b8);
    0x0001330a ldr.w r2, [r2, 0x600]                             |     r2 = *(0x270bc);
    0x0001330e str r3, [r2, 0xc]                                 |     *((r2 + 0xc)) = r3;
                                                                 |     if (r3 != 0) {
    0x00013310 cbz r3, 0x13314                                   |         
    0x00013312 str r2, [r3, 0x10]                                |         *((r3 + 0x10)) = r2;
                                                                 |     }
                                                                 | label_92:
    0x00013314 movs r2, 0                                        |     r2 = 0;
    0x00013316 ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
    0x0001331a str r2, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r2;
    0x0001331c b.w 0x12656                                       |     void (*0x12656)() ();
                                                                 | label_90:
    0x00013338 lsls r3, r5, 2                                    |     r3 = r5 << 2;
    0x0001333a adds r3, 7                                        |     r3 += 7;
    0x0001333c bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x00013340 sub.w sp, sp, r3                                  |     
    0x00013344 movs r3, 0                                        |     r3 = 0;
    0x00013346 add r1, sp, 0x10                                  |     r1 += arg_10h;
    0x00013348 add r2, sp, 0xc                                   |     r2 += arg_ch;
                                                                 |     do {
    0x0001334a str r6, [r2, 4]!                                  |         *((r2 += 4)) = r6;
    0x0001334e adds r3, 1                                        |         r3++;
    0x00013350 ldr r6, [r6, 0xc]                                 |         r6 = *((r6 + 0xc));
    0x00013352 cmp r6, 0                                         |         
    0x00013354 bne 0x1334a                                       |         
                                                                 |     } while (r6 != 0);
    0x00013356 cmp r5, r3                                        |     
    0x00013358 it eq                                             |     
                                                                 |     if (r5 == r3) {
    0x0001335a moveq r6, r1                                      |         r6 = r1;
                                                                 |         goto label_134;
                                                                 |     }
                                                                 |     if (r5 == r3) {
                                                                 | label_134:
    0x0001335c beq.w 0x12546                                     |         goto label_25;
                                                                 |     }
    0x00013360 ldr.w r3, [pc, 0x454]                             |     
    0x00013364 movw r2, 0x7ad                                    |     r2 = 0x7ad;
    0x00013368 ldr.w r1, [pc, 0x450]                             |     r1 = *(0x000137bc);
    0x0001336c ldr.w r0, [pc, 0x450]                             |     
    0x00013370 add r3, pc                                        |     r3 = 0x26b2c;
    0x00013372 add r1, pc                                        |     r1 += pc;
    0x00013374 add r0, pc                                        |     r0 = 0x26b38;
    0x00013376 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_89:
    0x0001337a add.w r8, r7, 0x50                                |     r8 = r7 + 0x50;
    0x0001337e mov r0, r6                                        |     r0 = r6;
    0x00013380 movs r2, 3                                        |     r2 = 3;
    0x00013382 mov r1, r8                                        |     r1 = r8;
    0x00013384 bl 0x7418                                         |     r0 = fcn_00007418 (r0, r1, r2);
    0x00013388 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0001338a mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 == r0) {
    0x0001338c beq.w 0x1253c                                     |         goto label_26;
                                                                 |     }
    0x00013390 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00013394 str.w r0, [fp]                                    |     __asm ("str.w r0, [fp]");
    0x00013398 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001339a beq.w 0x13b80                                     |         goto label_135;
                                                                 |     }
    0x0001339e mov r6, r5                                        |     r6 = r5;
    0x000133a0 strd sl, r0, [r7, 0x34]                           |     __asm ("strd sl, r0, [r7, 0x34]");
    0x000133a4 mov r5, r4                                        |     r5 = r4;
    0x000133a6 mov sl, r8                                        |     sl = r8;
    0x000133a8 mov r4, r3                                        |     r4 = r3;
    0x000133aa mov r8, r0                                        |     r8 = r0;
                                                                 | label_46:
    0x000133ac mov r2, r4                                        |     r2 = r4;
    0x000133ae ldr r0, [r7, 0x38]                                |     r0 = *((r7 + 0x38));
    0x000133b0 movs r1, 0x23                                     |     r1 = 0x23;
    0x000133b2 bl 0x168e0                                        |     r0 = fcn_000168e0 (r0, r1, r2);
    0x000133b6 mov r2, r0                                        |     r2 = r0;
                                                                 |     if (r0 == 0) {
    0x000133b8 cbz r0, 0x133e0                                   |         goto label_136;
                                                                 |     }
    0x000133ba ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x000133bc subs r0, r0, r3                                   |     r0 -= r3;
    0x000133be mov r3, r2                                        |     r3 = r2;
    0x000133c0 subs r0, r4, r0                                   |     r0 = r4 - r0;
    0x000133c2 subs r4, r0, 1                                    |     r4 = r0 - 1;
    0x000133c4 add r4, r2                                        |     r4 += r2;
    0x000133c6 b 0x133d6                                         |     
                                                                 |     while (r3 != r4) {
    0x000133c8 ldrb r1, [r3, 1]                                  |         r1 = *((r3 + 1));
    0x000133ca add.w ip, r3, 1                                   |         
    0x000133ce cmp r1, 0xa                                       |         
                                                                 |         if (r1 == 0xa) {
    0x000133d0 beq.w 0x139c4                                     |             goto label_137;
                                                                 |         }
    0x000133d4 mov r3, ip                                        |         r3 = ip;
    0x000133d6 cmp r3, r4                                        |         
    0x000133d8 mov.w r1, 0x20                                    |         r1 = 0x20;
    0x000133dc strb r1, [r3]                                     |         *(r3) = r1;
    0x000133de bne 0x133c8                                       |         
                                                                 |     }
                                                                 | label_136:
    0x000133e0 mov r4, r5                                        |     r4 = r5;
    0x000133e2 mov r5, r6                                        |     r5 = r6;
    0x000133e4 mov r6, r8                                        |     r6 = r8;
    0x000133e6 mov r8, sl                                        |     r8 = sl;
    0x000133e8 ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x000133ec ldr.w sl, [r7, 0x34]                              |     sl = *((r7 + 0x34));
    0x000133f0 subs r2, r0, 1                                    |     r2 = r0 - 1;
    0x000133f2 ldrb r3, [r6, r2]                                 |     r3 = *((r6 + r2));
    0x000133f4 add r2, r6                                        |     r2 += r6;
    0x000133f6 cmp r3, 0x20                                      |     
    0x000133f8 it ne                                             |     
                                                                 |     if (r3 != 0x20) {
    0x000133fa cmpne r3, 0x3a                                    |         __asm ("cmpne r3, 0x3a");
                                                                 |     }
    0x000133fc sub.w r3, r3, 9                                   |     r3 -= 9;
    0x00013400 ite ne                                            |     
                                                                 |     if (r3 == 0x20) {
    0x00013402 movne r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0x20) {
    0x00013404 moveq r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x00013406 cmp r3, 1                                         |     
    0x00013408 ite ls                                            |     
                                                                 |     if (r3 > 1) {
    0x0001340a movls r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x0001340c andhi r1, r1, 1                                   |         r1 &= 1;
                                                                 |     }
    0x00013410 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00013412 bne.w 0x13bca                                     |         goto label_138;
                                                                 |     }
                                                                 | label_59:
    0x00013416 movs r3, 0                                        |     r3 = 0;
    0x00013418 strb r3, [r2]                                     |     *(r2) = r3;
                                                                 |     if (r6 == 0) {
    0x0001341a cbz r6, 0x13488                                   |         goto label_139;
                                                                 |     }
                                                                 | label_60:
    0x0001341c ldr r2, [pc, 0x3a4]                               |     
    0x0001341e str.w r6, [fp]                                    |     __asm ("str.w r6, [fp]");
    0x00013420 str r0, [r0]                                      |     *(r0) = r0;
    0x00013422 add r2, pc                                        |     r2 = 0x26bea;
    0x00013424 strd r3, r2, [r7, 0x34]                           |     __asm ("strd r3, r2, [r7, 0x34]");
    0x00013428 b 0x13432                                         |     
                                                                 |     while (r0 != 0) {
    0x0001342a ldrb r2, [r2]                                     |         r2 = *(r2);
    0x0001342c cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0001342e bne.w 0x13b68                                     |             goto label_140;
                                                                 |         }
                                                                 | label_58:
    0x00013432 ldr r1, [r7, 0x38]                                |         r1 = *((r7 + 0x38));
    0x00013434 mov r0, fp                                        |         r0 = fp;
    0x00013436 bl 0xfde8                                         |         r0 = fcn_0000fde8 (r0, r1);
    0x0001343a mov r2, r0                                        |         r2 = r0;
    0x0001343c cmp r0, 0                                         |         
    0x0001343e bne 0x1342a                                       |         
                                                                 |     }
    0x00013440 ldr r3, [r7, 0x34]                                |     r3 = *((r7 + 0x34));
                                                                 |     if (r3 != 0) {
                                                                 | label_61:
    0x00013442 cbz r3, 0x13488                                   |         
                                                                 | label_63:
    0x00013444 ldr.w r1, [r8]                                    |         r1 = *(r8);
    0x00013448 subs r2, r3, r6                                   |         r2 = r3 - r6;
    0x0001344a mov r0, r3                                        |         r0 = r3;
    0x0001344c str r3, [r7, 0x38]                                |         *((r7 + 0x38)) = r3;
    0x0001344e subs r1, r1, r2                                   |         r1 -= r2;
    0x00013450 bl 0x1635c                                        |         fcn_0001635c (r0, r1);
    0x00013454 ldr r3, [r7, 0x38]                                |         r3 = *((r7 + 0x38));
    0x00013456 mov r2, r0                                        |         r2 = r0;
    0x00013458 mov.w ip, 0                                       |         
    0x0001345c mov r1, r3                                        |         r1 = r3;
    0x0001345e add.w r3, r0, 8                                   |         r3 = r0 + 8;
    0x00013462 bic r3, r3, 7                                     |         r3 = BIT_MASK (r3, 7);
    0x00013466 sub.w sp, sp, r3                                  |         
    0x0001346a add.w r0, sp, 0x17                                |         r0 += arg_17h;
    0x0001346e lsrs r3, r0, 3                                    |         r3 = r0 >> 3;
    0x00013470 bic r0, r0, 7                                     |         r0 = BIT_MASK (r0, 7);
    0x00013474 strb.w ip, [r2, r3, lsl 3]                        |         offset_6 = r3 << 3;
                                                                 |         *((r2 + offset_6)) = ip;
    0x00013478 blx 0x16400                                       |         fcn_00016400 (r0, r1);
    0x0001347c ldr r2, [pc, 0x348]                               |         
    0x0001347e mov r1, r4                                        |         r1 = r4;
    0x00013480 add r2, pc                                        |         r2 = 0x26c4c;
    0x00013482 bl 0x10838                                        |         r0 = fcn_00010838 (r0, r1, r2);
    0x00013486 add r5, r0                                        |         r5 += r0;
                                                                 |     }
                                                                 | label_139:
    0x00013488 ldr.w r1, [r8]                                    |     r1 = *(r8);
    0x0001348c mov r0, r6                                        |     r0 = r6;
    0x0001348e bl 0x15010                                        |     fcn_00015010 (r0);
    0x00013492 b.w 0x1253c                                       |     goto label_26;
                                                                 | label_88:
    0x00013496 ldr r2, [pc, 0x334]                               |     
    0x00013498 mov r1, r4                                        |     r1 = r4;
    0x0001349a add r2, pc                                        |     r2 = 0x26c6c;
    0x0001349c bl 0x114f0                                        |     r0 = fcn_000114f0 (r0, r1, r2);
    0x000134a0 add r5, r0                                        |     r5 += r0;
    0x000134a2 b.w 0x12528                                       |     goto label_27;
                                                                 | label_87:
    0x000134a6 ldr r2, [pc, 0x328]                               |     
    0x000134a8 mov r0, r5                                        |     r0 = r5;
    0x000134aa mov r1, r4                                        |     r1 = r4;
    0x000134ac add r2, pc                                        |     r2 = 0x26c82;
    0x000134ae bl 0x114f0                                        |     r0 = fcn_000114f0 (r0, r1, r2);
    0x000134b2 mov r5, r0                                        |     r5 = r0;
    0x000134b4 b.w 0x1251e                                       |     goto label_28;
                                                                 | label_101:
    0x000134b8 bl 0x8b78                                         |     fcn_00008b78 (r0, r1);
    0x000134bc b.w 0x1278a                                       |     goto label_29;
                                                                 | label_98:
    0x000134c0 ldr r0, [pc, 0x310]                               |     
    0x000134c2 mov r5, r4                                        |     r5 = r4;
    0x000134c4 add r0, pc                                        |     r0 = 0x26c9c;
    0x000134c6 bl 0x8aa8                                         |     fcn_00008aa8 ();
                                                                 |     do {
    0x000134ca mov r0, r5                                        |         r0 = r5;
    0x000134cc movs r1, 0                                        |         r1 = 0;
    0x000134ce bl 0x7ec4                                         |         fcn_00007ec4 (r0, r1, r2, r3);
    0x000134d2 ldr r5, [r5, 0xc]                                 |         r5 = *((r5 + 0xc));
    0x000134d4 cmp r5, 0                                         |         
    0x000134d6 bne 0x134ca                                       |         
                                                                 |     } while (r5 != 0);
    0x000134d8 b.w 0x126e2                                       |     goto label_30;
                                                                 | label_97:
    0x000134dc ldr r2, [pc, 0x2f8]                               |     
    0x000134de add r2, pc                                        |     r2 = 0x26cba;
    0x000134e0 ldr r1, [r2]                                      |     r1 = *(0x26cba);
    0x000134e2 lsls r0, r1, 0x17                                 |     r0 = r1 << 0x17;
                                                                 |     if (r0 < r1) {
    0x000134e4 bmi 0x135b0                                       |         goto label_141;
                                                                 |     }
    0x000134e6 ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x000134e8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000134ea beq.w 0x13afc                                     |         goto label_142;
                                                                 |     }
    0x000134ee ldrb.w r2, [sl, 0x168]                            |     r2 = *((sl + 0x168));
    0x000134f2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000134f4 bne.w 0x13af0                                     |         goto label_143;
                                                                 |     }
    0x000134f8 ldr r5, [r4, 0xc]                                 |     r5 = *((r4 + 0xc));
    0x000134fa cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000134fc beq.w 0x1363c                                     |         goto label_51;
                                                                 |     }
                                                                 | label_56:
    0x00013500 ldr r3, [pc, 0x2d8]                               |     
    0x00013502 ldr.w r8, [pc, 0x2dc]                             |     r8 = *(0x000137e0);
    0x00013506 add r3, pc                                        |     r3 = 0x26ce6;
    0x00013508 str r3, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r3;
    0x0001350a add r8, pc                                        |     r8 += pc;
    0x0001350c ldr r3, [pc, 0x2d4]                               |     
    0x0001350e add r3, pc                                        |     r3 = 0x26cf6;
    0x00013510 str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x00013512 b 0x13560                                         |     
                                                                 |     while (r1 >= r3) {
    0x00013514 ldr r2, [r5, 4]                                   |         r2 = *((r5 + 4));
    0x00013516 mov r0, r6                                        |         r0 = r6;
    0x00013518 mov r1, r2                                        |         r1 = r2;
    0x0001351a str r2, [r7, 0x34]                                |         *((r7 + 0x34)) = r2;
    0x0001351c bl 0x15bb0                                        |         fcn_00015bb0 (r0, r1, r2, r3);
    0x00013520 ldr.w r3, [r5, 0x1c4]                             |         r3 = *((r5 + 0x1c4));
    0x00013524 ldr r2, [r7, 0x34]                                |         r2 = *((r7 + 0x34));
    0x00013526 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00013528 beq.w 0x139b4                                     |             goto label_144;
                                                                 |         }
    0x0001352c ldrb r1, [r6]                                     |         r1 = *(r6);
                                                                 |         if (r1 == 0) {
    0x0001352e cbnz r1, 0x1353c                                  |             
    0x00013530 ldr r1, [r7, 0x38]                                |             r1 = *((r7 + 0x38));
    0x00013532 ldr r1, [r1]                                      |             r1 = *(r1);
    0x00013534 ldr r6, [r1]                                      |             r6 = *(r1);
    0x00013536 cmp r6, 0                                         |             
                                                                 |             if (r6 == 0) {
    0x00013538 beq.w 0x13aea                                     |                 goto label_145;
                                                                 |             }
                                                                 |         }
                                                                 | label_55:
    0x0001353c ldrb r1, [r2]                                     |         r1 = *(r2);
                                                                 |         if (r1 == 0) {
    0x0001353e cbnz r1, 0x1354c                                  |             
    0x00013540 ldr.w r2, [r8]                                    |             r2 = *(r8);
    0x00013544 ldr r2, [r2]                                      |             r2 = *(r2);
    0x00013546 cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x00013548 beq.w 0x13ad2                                     |                 goto label_146;
                                                                 |             }
                                                                 |         }
                                                                 | label_53:
    0x0001354c str r3, [sp]                                      |         *(sp) = r3;
    0x0001354e mov r1, r6                                        |         r1 = r6;
    0x00013550 ldr r0, [r7, 0x3c]                                |         r0 = *((r7 + 0x3c));
    0x00013552 movs r3, 8                                        |         r3 = 8;
    0x00013554 bl 0x8b1c                                         |         fcn_00008b1c ();
                                                                 | label_31:
    0x00013558 ldr r5, [r5, 0xc]                                 |         r5 = *((r5 + 0xc));
    0x0001355a cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0001355c beq.w 0x13aa8                                     |             goto label_147;
                                                                 |         }
    0x00013560 ldr r3, [r5, 0x1c]                                |         r3 = *((r5 + 0x1c));
    0x00013562 ldr r6, [r3]                                      |         r6 = *(r3);
    0x00013564 ldrb.w r3, [r5, 0x1a5]                            |         r3 = *((r5 + 0x1a5));
    0x00013568 lsls r1, r3, 0x19                                 |         r1 = r3 << 0x19;
    0x0001356a bpl 0x13514                                       |         
                                                                 |     }
    0x0001356c ldr r0, [pc, 0x278]                               |     
    0x0001356e mov r1, r6                                        |     r1 = r6;
    0x00013570 add r0, pc                                        |     r0 = 0x26d5c;
    0x00013572 bl 0x8b1c                                         |     fcn_00008b1c ();
    0x00013576 b 0x13558                                         |     goto label_31;
                                                                 | label_72:
    0x00013578 bl 0xdeec                                         |     fcn_0000deec ();
    0x0001357c movs r0, 0                                        |     r0 = 0;
    0x0001357e bl 0x151e8                                        |     fcn_000151e8 (r0);
    0x00013582 ldr.w r0, [sl, 0x164]                             |     r0 = *((sl + 0x164));
    0x00013586 b.w 0x119ac                                       |     goto label_32;
                                                                 | label_93:
    0x0001358a ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x0001358c str.w r2, [ip, 0x5fc]                             |     __asm ("str.w r2, [ip, 0x5fc]");
    0x00013590 b.w 0x12636                                       |     goto label_33;
                                                                 | label_132:
    0x00013594 movs r3, 4                                        |     r3 = 4;
    0x00013596 subs r6, 1                                        |     r6--;
    0x00013598 adds r4, 4                                        |     r4 += 4;
    0x0001359a str.w r3, [sl, 0x164]                             |     __asm ("str.w r3, [sl, 0x164]");
    0x0001359e b.w 0x1174e                                       |     goto label_3;
                                                                 | label_69:
    0x000135a8 movs r3, 0                                        |     r3 = 0;
    0x000135aa str r3, [r7, 4]                                   |     *((r7 + 4)) = r3;
    0x000135ac b.w 0x119a2                                       |     goto label_34;
                                                                 | label_141:
    0x000135b0 ldr r3, [r2, 0x2c]                                |     r3 = *((r2 + 0x2c));
    0x000135b2 mov r2, fp                                        |     r2 = fp;
    0x000135b4 ldr r1, [pc, 0x234]                               |     
    0x000135b6 ldr r0, [pc, 0x238]                               |     
    0x000135b8 cmp r3, 0                                         |     
    0x000135ba mov.w r3, 1                                       |     
    0x000135be movt r3, 0x200                                    |     r3 = 0x2000001;
    0x000135c2 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x000135c4 moveq r3, 0x2000000                               |         r3 = 0x2000000;
                                                                 |     }
    0x000135c8 add r0, pc                                        |     r0 = 0x26dbe;
    0x000135ca str.w r3, [fp, 4]                                 |     __asm ("str.w r3, [arg_4h]");
    0x000135ce add r1, pc                                        |     r1 = 0x26dbe;
    0x000135d0 str.w r4, [fp]                                    |     __asm ("str.w r4, [fp]");
    0x000135d4 bl 0xf298                                         |     fcn_0000f298 (r0, r1);
    0x000135d8 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000135da ldr r0, [r3]                                      |     r0 = *(r3);
                                                                 |     if (r0 == 0) {
    0x000135dc cbz r0, 0x13634                                   |         goto label_148;
                                                                 |     }
    0x000135de mov r8, r3                                        |     r8 = r3;
    0x000135e0 ldr r3, [pc, 0x210]                               |     
    0x000135e2 ldr r6, [pc, 0x214]                               |     
    0x000135e4 mov r5, r4                                        |     r5 = r4;
    0x000135e6 add r3, pc                                        |     r3 = 0x26dde;
    0x000135e8 str r3, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r3;
    0x000135ea add r6, pc                                        |     r6 = 0x26de8;
    0x000135ec movs r3, 1                                        |     r3 = 1;
    0x000135ee b 0x135f6                                         |     
                                                                 |     while (r0 != 1) {
                                                                 | label_35:
    0x000135f0 ldr r0, [r8, 8]!                                  |         r0 = *((r8 += 8));
                                                                 |         if (r0 == 0) {
    0x000135f4 cbz r0, 0x13630                                   |             goto label_149;
                                                                 |         }
    0x000135f6 cmp r0, 1                                         |         
    0x000135f8 bne 0x135f0                                       |         
                                                                 |     }
    0x000135fa ldr r5, [r5, 0xc]                                 |     r5 = *((r5 + 0xc));
    0x000135fc ldr.w r2, [r6, 0x180]                             |     r2 = *((r6 + 0x180));
    0x00013600 cmp r2, r5                                        |     
    0x00013602 it eq                                             |     
                                                                 |     if (r2 != r5) {
    0x00013604 ldreq r5, [r5, 0xc]                               |         r5 = *((r5 + 0xc));
                                                                 |     }
    0x00013606 ldr.w r2, [r5, 0x214]                             |     r2 = *((r5 + 0x214));
    0x0001360a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0001360c bne 0x135f0                                       |         goto label_35;
                                                                 |     }
    0x0001360e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00013610 bne.w 0x13ae0                                     |         goto label_150;
                                                                 |     }
                                                                 | label_54:
    0x00013614 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x00013616 ldr r0, [r7, 0x3c]                                |     r0 = *((r7 + 0x3c));
    0x00013618 bl 0x8b1c                                         |     fcn_00008b1c ();
    0x0001361c movs r3, 0                                        |     r3 = 0;
    0x0001361e b 0x135f0                                         |     goto label_35;
                                                                 | label_124:
    0x00013620 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00013622 ldr r0, [pc, 0x1d8]                               |     
    0x00013624 ldr r2, [r3, 0x18]                                |     r2 = *((r3 + 0x18));
    0x00013626 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x00013628 add r0, pc                                        |     r0 = 0x26e2a;
    0x0001362a bl 0x8aa8                                         |     fcn_00008aa8 ();
    0x0001362e b 0x13014                                         |     goto label_36;
                                                                 | label_149:
    0x00013630 eor r0, r3, 1                                     |     r0 = r3 ^ 1;
                                                                 | label_148:
    0x00013634 bl 0x151e8                                        |     fcn_000151e8 (r0);
    0x00013638 ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
                                                                 | label_51:
    0x0001363c cmp r3, 3                                         |     
                                                                 |     if (r3 != 3) {
    0x0001363e bne.w 0x13b0a                                     |         goto label_151;
                                                                 |     }
    0x00013642 ldr r2, [pc, 0x1bc]                               |     
    0x00013644 add r2, pc                                        |     r2 = 0x26e4a;
    0x00013646 ldr r3, [r2, 0x2c]                                |     r3 = *(0x26e76);
    0x00013648 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0001364a blt.w 0x13810                                     |         goto label_152;
                                                                 |     }
    0x0001364e ldr r2, [r2, 0x24]                                |     r2 = *((r2 + 0x24));
    0x00013650 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00013652 beq.w 0x13810                                     |         goto label_152;
                                                                 |     }
    0x00013656 ldr.w r2, [r4, 0x170]                             |     r2 = *((r4 + 0x170));
    0x0001365a cmp r3, 0                                         |     
    0x0001365c mov.w r3, 1                                       |     
    0x00013660 movt r3, 0x200                                    |     r3 = 0x2000001;
    0x00013664 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00013666 moveq r3, 0x2000000                               |         r3 = 0x2000000;
                                                                 |     }
    0x0001366a subs r5, r2, 1                                    |     r5 = r2 - 1;
    0x0001366c str.w r3, [fp, 4]                                 |     __asm ("str.w r3, [arg_4h]");
    0x00013670 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00013672 beq.w 0x13810                                     |         goto label_152;
                                                                 |     }
    0x00013676 ldr r6, [pc, 0x18c]                               |     
    0x00013678 ldr r1, [pc, 0x18c]                               |     
    0x0001367a ldr.w r8, [pc, 0x190]                             |     r8 = *(0x0001380c);
    0x0001367e add r6, pc                                        |     
    0x00013680 add r1, pc                                        |     r1 = 0x26e8c;
    0x00013682 add.w r6, r6, 0x5f0                               |     r6 = 0x27478;
    0x00013686 add r8, pc                                        |     r8 += pc;
    0x00013688 mov r0, r8                                        |     r0 = r8;
    0x0001368a mov r8, r1                                        |     r8 = r1;
    0x0001368c b 0x13694                                         |     
                                                                 |     while (r3 == r6) {
                                                                 | label_37:
    0x0001368e subs r5, 1                                        |         r5--;
                                                                 |         if (r5 <= 1) {
    0x00013690 blo.w 0x13810                                     |             goto label_152;
                                                                 |         }
    0x00013694 ldr.w r3, [r4, 0x208]                             |         r3 = *((r4 + 0x208));
    0x00013698 ldr.w r3, [r3, r5, lsl 2]                         |         offset_7 = r5 << 2;
                                                                 |         r3 = *((r3 + offset_7));
    0x0001369c cmp r3, r6                                        |         
    0x0001369e beq 0x1368e                                       |         
                                                                 |     }
    0x000136a0 ldrb.w r2, [r3, 0x1a5]                            |     r2 = *((r3 + 0x1a5));
    0x000136a4 lsls r2, r2, 0x19                                 |     r2 <<= 0x19;
                                                                 |     if (r2 < r2) {
    0x000136a6 bmi 0x1368e                                       |         goto label_37;
                                                                 |     }
    0x000136a8 mov r2, fp                                        |     r2 = fp;
    0x000136aa mov r1, r8                                        |     r1 = r8;
    0x000136ac str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x000136b0 str r0, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r0;
    0x000136b2 bl 0xf298                                         |     fcn_0000f298 (r0, r1);
    0x000136b6 ldr r0, [r7, 0x3c]                                |     r0 = *((r7 + 0x3c));
    0x000136b8 b 0x1368e                                         |     goto label_37;
                                                                 | label_152:
    0x00013810 ldrb.w r3, [sl, 0x16a]                            |     r3 = *((sl + 0x16a));
    0x00013814 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00013816 beq.w 0x1399e                                     |         goto label_57;
                                                                 |     }
    0x0001381a ldr.w r3, [pc, 0x5f0]                             |     
    0x0001381e mov r6, r4                                        |     r6 = r4;
    0x00013820 strd sb, r4, [r7, 0x24]                           |     __asm ("strd sb, r4, [r7, 0x24]");
    0x00013824 add r3, pc                                        |     r3 = 0x27636;
    0x00013826 str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x00013828 ldr.w r3, [pc, 0x5e4]                             |     
    0x0001382c add r3, pc                                        |     r3 = 0x27640;
    0x0001382e str r3, [r7, 0x34]                                |     *((r7 + 0x34)) = r3;
    0x00013830 movs r3, 1                                        |     r3 = 1;
                                                                 | label_43:
    0x00013832 ldr.w r2, [r6, 0xbc]                              |     r2 = *((r6 + 0xbc));
    0x00013836 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00013838 beq.w 0x13992                                     |         goto label_153;
                                                                 |     }
    0x0001383c ldr r1, [r6, 0x34]                                |     r1 = *((r6 + 0x34));
    0x0001383e ldrb.w r0, [r6, 0x1a6]                            |     r0 = *((r6 + 0x1a6));
    0x00013842 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00013844 ldr r5, [r1, 4]                                   |     r5 = *((r1 + 4));
    0x00013846 ldr r1, [r6]                                      |     r1 = *(r6);
    0x00013848 lsls r0, r0, 0x1a                                 |     r0 <<= 0x1a;
    0x0001384a it mi                                             |     
                                                                 |     if (r0 >= r0) {
    0x0001384c addmi r5, r5, r1                                  |         r5 += r1;
                                                                 |     }
    0x0001384e add.w r8, r1, r2                                  |     r8 = r1 + r2;
    0x00013852 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00013854 bne.w 0x139a8                                     |         goto label_154;
                                                                 |     }
                                                                 | label_45:
    0x00013858 ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x0001385a ldrb r3, [r1]                                     |     r3 = *(r1);
                                                                 |     if (r3 == 0) {
    0x0001385c cbnz r3, 0x1386e                                  |         
    0x0001385e ldr.w r3, [pc, 0x5b4]                             |         r3 = *(0x00013e14);
    0x00013862 add r3, pc                                        |         r3 += pc;
    0x00013864 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00013866 ldr r1, [r3]                                      |         r1 = *(r3);
    0x00013868 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x0001386a beq.w 0x13aae                                     |             goto label_155;
                                                                 |         }
                                                                 |     }
                                                                 | label_52:
    0x0001386e ldr.w r3, [pc, 0x5a8]                             |     r3 = *(0x00013e18);
    0x00013872 ldr.w r0, [pc, 0x5a8]                             |     
    0x00013876 add r3, pc                                        |     r3 += pc;
    0x00013878 add r0, pc                                        |     r0 = 0x2769a;
    0x0001387a str r3, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r3;
    0x0001387c bl 0x8b1c                                         |     fcn_00008b1c ();
    0x00013880 str r6, [r7, 0x20]                                |     *((r7 + 0x20)) = r6;
                                                                 | label_40:
    0x00013882 ldr.w r3, [pc, 0x59c]                             |     r3 = *(0x00013e20);
    0x00013886 ldr.w r4, [r8, 4]                                 |     r4 = *((r8 + 4));
    0x0001388a add r3, pc                                        |     r3 += pc;
    0x0001388c ldr.w sl, [r3]                                    |     sl = *(r3);
    0x00013890 add r4, r5                                        |     r4 += r5;
    0x00013892 ldr.w r6, [sl, 0x170]                             |     r6 = *((sl + 0x170));
    0x00013896 subs r6, 1                                        |     r6--;
    0x00013898 b 0x138b0                                         |     
                                                                 |     while (r2 != r6) {
    0x0001389a ldr.w r3, [sl, 0x16c]                             |         r3 = *((sl + 0x16c));
    0x0001389e mov r0, r4                                        |         r0 = r4;
    0x000138a0 ldr.w r1, [r3, r6, lsl 2]                         |         offset_8 = r6 << 2;
                                                                 |         r1 = *((r3 + offset_8));
    0x000138a4 bl 0x746c                                         |         fcn_0000746c (r0, r1);
    0x000138a8 lsls r2, r6, 2                                    |         r2 = r6 << 2;
    0x000138aa subs r6, 1                                        |         r6--;
    0x000138ac cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000138ae bne 0x13988                                       |             goto label_156;
                                                                 |         }
    0x000138b0 adds r2, r6, 1                                    |         r2 = r6 + 1;
    0x000138b2 bne 0x1389a                                       |         
                                                                 |     }
    0x000138b4 movs r6, 0                                        |     r6 = 0;
                                                                 | label_42:
    0x000138b6 ldr.w r4, [r8, 8]                                 |     r4 = *((r8 + 8));
    0x000138ba add r4, r8                                        |     r4 += r8;
    0x000138bc ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x000138be add.w sl, r5, r2                                  |     sl = r5 + r2;
    0x000138c2 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000138c4 beq 0x13938                                       |         goto label_157;
                                                                 |     }
                                                                 | label_38:
    0x000138c6 ldr r3, [r6, 0x34]                                |     r3 = *((r6 + 0x34));
    0x000138c8 ldr.w sb, [r3, 4]                                 |     sb = *((r3 + 4));
    0x000138cc ldrb.w r3, [r6, 0x1a6]                            |     r3 = *((r6 + 0x1a6));
    0x000138d0 lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
    0x000138d2 itt mi                                            |     
                                                                 |     if (r3 >= r3) {
    0x000138d4 ldrmi r3, [r6]                                    |         r3 = *(r6);
                                                                 |     }
                                                                 |     if (r3 >= r3) {
    0x000138d6 addmi sb, r3                                      |         sb += r3;
                                                                 |     }
    0x000138d8 ldr.w r3, [r6, 0xc4]                              |     r3 = *((r6 + 0xc4));
                                                                 |     if (r3 == 0) {
    0x000138dc cbz r3, 0x13938                                   |         goto label_157;
                                                                 |     }
    0x000138de ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000138e0 ldr r1, [r6]                                      |     r1 = *(r6);
    0x000138e2 add.w fp, r3, r1                                  |     
    0x000138e6 b 0x138f0                                         |     
                                                                 |     while (r0 != 0) {
    0x000138e8 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
                                                                 |         if (r3 == 0) {
    0x000138ec cbz r3, 0x13954                                   |             goto label_158;
                                                                 |         }
    0x000138ee add fp, r3                                        |         
    0x000138f0 ldr.w r3, [fp, 0xc]                               |         r3 = *(arg_ch);
    0x000138f4 mov r0, sl                                        |         r0 = sl;
    0x000138f6 ldr.w r1, [fp, r3]                                |         r1 = *((fp + r3));
    0x000138fa add r1, sb                                        |         r1 += sb;
    0x000138fc bl 0x15bb0                                        |         r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00013900 cmp r0, 0                                         |         
    0x00013902 bne 0x138e8                                       |         
                                                                 |     }
    0x00013904 ldrh r3, [r4, 4]                                  |     r3 = *((r4 + 4));
    0x00013906 ldr.w r1, [r8, 4]                                 |     r1 = *((r8 + 4));
    0x0001390a ldr r0, [r6, 4]                                   |     r0 = *((r6 + 4));
    0x0001390c lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
    0x0001390e add r1, r5                                        |     r1 += r5;
                                                                 |     if (r3 < r3) {
    0x00013910 bmi 0x13972                                       |         goto label_159;
                                                                 |     }
    0x00013912 ldr.w r3, [pc, 0x510]                             |     r3 = *(0x00013e24);
    0x00013916 add r3, pc                                        |     r3 += pc;
                                                                 |     if (r0 == 0) {
                                                                 | label_41:
    0x00013918 cbz r0, 0x1394c                                   |         goto label_160;
                                                                 |     }
                                                                 | label_39:
    0x0001391a str r0, [sp]                                      |     *(sp) = r0;
    0x0001391c mov r2, sl                                        |     r2 = sl;
    0x0001391e ldr.w r0, [pc, 0x508]                             |     r0 = *(0x00013e28);
    0x00013922 add r0, pc                                        |     r0 += pc;
    0x00013924 bl 0x8b1c                                         |     fcn_00008b1c ();
    0x00013928 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
                                                                 |     if (r3 == 0) {
    0x0001392a cbz r3, 0x13968                                   |         goto label_161;
                                                                 |     }
    0x0001392c add r4, r3                                        |     r4 += r3;
    0x0001392e ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x00013930 add.w sl, r5, r2                                  |     sl = r5 + r2;
    0x00013934 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00013936 bne 0x138c6                                       |         goto label_38;
                                                                 |     }
                                                                 | label_157:
    0x00013938 ldrh r3, [r4, 4]                                  |     r3 = *((r4 + 4));
    0x0001393a ldr.w r1, [r8, 4]                                 |     r1 = *((r8 + 4));
    0x0001393e lsls r0, r3, 0x1e                                 |     r0 = r3 << 0x1e;
    0x00013940 it pl                                             |     
                                                                 |     if (r0 >= r3) {
    0x00013942 ldrdpl r0, r3, [r7, 0x34]                         |         __asm ("ldrdpl r0, r3, [r7, 0x34]");
                                                                 |     }
    0x00013946 add r1, r5                                        |     r1 += r5;
                                                                 |     if (r0 >= r3) {
    0x00013948 bpl 0x1391a                                       |         goto label_39;
                                                                 |     }
    0x0001394a ldr r3, [r7, 0x3c]                                |     r3 = *((r7 + 0x3c));
                                                                 |     do {
                                                                 | label_160:
    0x0001394c ldr.w r0, [pc, 0x4dc]                             |         
    0x00013950 add r0, pc                                        |         r0 = 0x27780;
    0x00013952 b 0x1391a                                         |         goto label_39;
                                                                 | label_158:
    0x00013954 ldrh r3, [r4, 4]                                  |         r3 = *((r4 + 4));
    0x00013956 ldr.w r1, [r8, 4]                                 |         r1 = *((r8 + 4));
    0x0001395a lsls r2, r3, 0x1e                                 |         r2 = r3 << 0x1e;
    0x0001395c add r1, r5                                        |         r1 += r5;
                                                                 |         if (r2 < r3) {
    0x0001395e bmi 0x1397a                                       |             goto label_162;
                                                                 |         }
    0x00013960 ldr.w r3, [pc, 0x4cc]                             |         
    0x00013964 add r3, pc                                        |         r3 = 0x27798;
    0x00013966 b 0x1394c                                         |         
                                                                 |     } while (1);
                                                                 | label_161:
    0x00013968 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
                                                                 |     if (r3 != 0) {
    0x0001396c cbz r3, 0x13990                                   |         
    0x0001396e add r8, r3                                        |         r8 += r3;
    0x00013970 b 0x13882                                         |         goto label_40;
                                                                 | label_159:
    0x00013972 ldr.w r3, [pc, 0x4c0]                             |         r3 = *(0x00013e34);
    0x00013976 add r3, pc                                        |         r3 += pc;
    0x00013978 b 0x13918                                         |         goto label_41;
                                                                 | label_162:
    0x0001397a ldr.w r3, [pc, 0x4bc]                             |         r3 = *(0x00013e38);
    0x0001397e ldr.w r0, [pc, 0x4bc]                             |         
    0x00013980 lsls r4, r7, 0x12                                 |         r4 = r7 << 0x12;
    0x00013982 add r3, pc                                        |         r3 += pc;
    0x00013984 add r0, pc                                        |         r0 = 0x277c6;
    0x00013986 b 0x1391a                                         |         goto label_39;
                                                                 | label_156:
    0x00013988 ldr.w r3, [sl, 0x16c]                             |         r3 = *((sl + 0x16c));
    0x0001398c ldr r6, [r3, r2]                                  |         r6 = *((r3 + r2));
    0x0001398e b 0x138b6                                         |         goto label_42;
                                                                 |     }
    0x00013990 ldr r6, [r7, 0x20]                                |     r6 = *((r7 + 0x20));
                                                                 | label_153:
    0x00013992 ldr r6, [r6, 0xc]                                 |     r6 = *((r6 + 0xc));
    0x00013994 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00013996 bne.w 0x13832                                     |         goto label_43;
                                                                 |     }
    0x0001399a ldrd sb, r4, [r7, 0x24]                           |     __asm ("ldrd sb, r4, [r7, 0x24]");
                                                                 | label_57:
    0x0001399e movs r0, 0                                        |     r0 = 0;
    0x000139a0 bl 0x151e8                                        |     fcn_000151e8 (r0);
    0x000139a4 b.w 0x126ba                                       |     goto label_44;
                                                                 | label_154:
    0x000139a8 ldr.w r0, [pc, 0x494]                             |     
    0x000139ac add r0, pc                                        |     r0 = 0x277f0;
    0x000139ae bl 0x8b1c                                         |     fcn_00008b1c ();
    0x000139b2 b 0x13858                                         |     goto label_45;
                                                                 | label_144:
    0x000139b4 ldr.w r0, [pc, 0x48c]                             |     
    0x000139b8 mov r1, r6                                        |     r1 = r6;
    0x000139ba movs r2, 8                                        |     r2 = 8;
    0x000139bc add r0, pc                                        |     r0 = 0x27804;
    0x000139be bl 0x8b1c                                         |     fcn_00008b1c ();
    0x000139c2 b 0x13558                                         |     goto label_31;
                                                                 | label_137:
    0x000139c4 subs r2, 1                                        |     r2--;
    0x000139c6 add r2, r0                                        |     r2 += r0;
    0x000139c8 subs r4, r2, r3                                   |     r4 = r2 - r3;
    0x000139ca ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x000139ce str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x000139d0 b 0x133ac                                         |     goto label_46;
                                                                 | label_129:
    0x000139d2 ldr.w r0, [pc, 0x474]                             |     
    0x000139d6 mov r3, r4                                        |     r3 = r4;
    0x000139d8 mov r2, r6                                        |     r2 = r6;
    0x000139da mov r1, r5                                        |     r1 = r5;
    0x000139dc add r0, pc                                        |     r0 = 0x2782a;
    0x000139de bl 0x8b5c                                         |     dl_fatal_printf ()
                                                                 | label_131:
    0x000139e2 ldr.w r3, [pc, 0x468]                             |     r3 = switch.0x0000a33c;
    0x000139e6 str r1, [r7, 0x10]                                |     *((r7 + 0x10)) = r1;
    0x000139e8 add r3, pc                                        |     r3 += pc;
    0x000139ea str.w r1, [r3, 0x1c8]                             |     __asm ("str.w r1, [r3, 0x1c8]");
    0x000139ee b.w 0x13182                                       |     goto label_47;
                                                                 | label_115:
    0x000139f2 ldr.w r0, [pc, 0x45c]                             |     r0 = *(0x00013e50);
    0x000139f6 mov r1, r5                                        |     r1 = r5;
    0x000139f8 movs r3, 2                                        |     r3 = 2;
    0x000139fa add r0, pc                                        |     r0 += pc;
    0x000139fc bl 0x8aa8                                         |     fcn_00008aa8 ();
    0x00013a00 ldr r0, [r6, 4]                                   |     r0 = *((r6 + 4));
    0x00013a02 mov r1, sl                                        |     r1 = sl;
    0x00013a04 bl 0x10c44                                        |     fcn_00010c44 (r0, r1, r2, r3, r4, r5);
    0x00013a08 b.w 0x12bb6                                       |     goto label_13;
                                                                 | label_77:
    0x00013a0c ldr.w r6, [r4, 0x160]                             |     r6 = *((r4 + 0x160));
    0x00013a10 ldrh.w r3, [r4, 0x168]                            |     r3 = *((r4 + 0x168));
    0x00013a14 b.w 0x11a96                                       |     goto label_48;
                                                                 | label_79:
    0x00013a18 ldr.w r6, [r4, 0x160]                             |     r6 = *((r4 + 0x160));
    0x00013a1c b.w 0x11a96                                       |     goto label_48;
                                                                 | label_76:
    0x00013a20 movs r3, 0                                        |     r3 = 0;
    0x00013a22 add.w r4, r7, 0x50                                |     r4 = r7 + 0x50;
    0x00013a26 str.w r3, [fp, 4]                                 |     __asm ("str.w r3, [arg_4h]");
    0x00013a2a add.w r2, r7, 0x48                                |     r2 = r7 + 0x48;
    0x00013a2e str r3, [r4]                                      |     *(r4) = r3;
    0x00013a30 mov.w r3, 0x20000000                              |     r3 = 0x20000000;
    0x00013a34 str.w r3, [fp, 8]                                 |     __asm ("str.w r3, [arg_8h]");
    0x00013a38 add.w r0, r7, 0x4c                                |     r0 = r7 + 0x4c;
    0x00013a3c ldr.w r3, [pc, 0x414]                             |     r3 = *(0x00013e54);
    0x00013a40 str.w r1, [fp]                                    |     __asm ("str.w r1, [fp]");
    0x00013a44 mov r1, r4                                        |     r1 = r4;
    0x00013a46 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00013a4a add r3, pc                                        |     r3 += pc;
    0x00013a4c blx 0xa04                                         |     fcn_00000a04 ();
    0x00013a50 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00013a52 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00013a54 beq.w 0x11a14                                     |         goto label_49;
                                                                 |     }
    0x00013a58 ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
    0x00013a5c cmp r3, 6                                         |     
                                                                 |     if (r3 == 6) {
    0x00013a5e beq.w 0x12ffe                                     |         goto label_50;
                                                                 |     }
    0x00013a62 movs r0, 1                                        |     r0 = 1;
    0x00013a64 bl 0x151e8                                        |     fcn_000151e8 (r0);
    0x00013a68 b.w 0x11a14                                       |     goto label_49;
                                                                 | label_133:
    0x00013a8a ldr r1, [pc, 0x3d0]                               |     
    0x00013a8c mov r0, r5                                        |     r0 = r5;
    0x00013a8e add r1, pc                                        |     r1 = 0x278f0;
    0x00013a90 bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
    0x00013a94 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00013a96 bne.w 0x13ba2                                     |         goto label_163;
                                                                 |     }
    0x00013a9a movs r3, 6                                        |     r3 = 6;
    0x00013a9c subs r6, 1                                        |     r6--;
    0x00013a9e adds r4, 4                                        |     r4 += 4;
    0x00013aa0 str.w r3, [sl, 0x164]                             |     __asm ("str.w r3, [sl, 0x164]");
    0x00013aa4 b.w 0x1174e                                       |     goto label_3;
                                                                 | label_147:
    0x00013aa8 ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
    0x00013aac b 0x1363c                                         |     goto label_51;
                                                                 | label_155:
    0x00013aae ldr r1, [pc, 0x3b0]                               |     
    0x00013ab0 add r1, pc                                        |     r1 = 0x27916;
    0x00013ab2 b 0x1386e                                         |     goto label_52;
                                                                 | label_146:
    0x00013ad2 ldr r2, [pc, 0x394]                               |     
    0x00013ad4 add r2, pc                                        |     r2 = 0x27942;
    0x00013ad6 b 0x1354c                                         |     goto label_53;
                                                                 | label_150:
    0x00013ae0 ldr r0, [pc, 0x388]                               |     
    0x00013ae2 add r0, pc                                        |     r0 = 0x27952;
    0x00013ae4 bl 0x8b1c                                         |     fcn_00008b1c ();
    0x00013ae8 b 0x13614                                         |     goto label_54;
                                                                 | label_145:
    0x00013aea ldr r6, [pc, 0x384]                               |     
    0x00013aec add r6, pc                                        |     r6 = 0x27962;
    0x00013aee b 0x1353c                                         |     goto label_55;
                                                                 | label_143:
    0x00013af0 mov r5, r4                                        |     r5 = r4;
    0x00013af2 b 0x13500                                         |     goto label_56;
                                                                 | label_142:
    0x00013afc ldr r0, [pc, 0x374]                               |     
    0x00013afe add r0, pc                                        |     r0 = 0x27976;
    0x00013b00 bl 0x8b1c                                         |     fcn_00008b1c ();
    0x00013b04 ldr.w r3, [sl, 0x164]                             |     r3 = *((sl + 0x164));
    0x00013b08 b 0x1363c                                         |     goto label_51;
                                                                 | label_151:
    0x00013b0a ldr r6, [pc, 0x36c]                               |     
    0x00013b0c add r6, pc                                        |     r6 = 0x2798a;
    0x00013b0e ldr r3, [r6, 4]                                   |     r3 = *(0x2798e);
    0x00013b10 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00013b12 bls.w 0x1399e                                     |         goto label_57;
                                                                 |     }
    0x00013b16 ldr.w r8, [pc, 0x364]                             |     
    0x00013b1a movs r5, 1                                        |     r5 = 1;
    0x00013b1c add r8, pc                                        |     r8 = 0x2799e;
                                                                 |     do {
    0x00013b1e ldr r3, [r6]                                      |         r3 = *(r6);
    0x00013b20 movs r2, 0                                        |         r2 = 0;
    0x00013b22 mov r1, r4                                        |         r1 = r4;
    0x00013b24 ldr.w r0, [r3, r5, lsl 2]                         |         offset_9 = r5 << 2;
                                                                 |         r0 = *((r3 + offset_9));
    0x00013b28 ldr.w r3, [r4, 0x1e4]                             |         r3 = *((r4 + 0x1e4));
    0x00013b2c str.w r2, [fp]                                    |         __asm ("str.w r2, [fp]");
    0x00013b30 str r2, [sp, 0xc]                                 |         *(arg_ch) = r2;
    0x00013b32 str r2, [sp]                                      |         *(sp) = r2;
    0x00013b34 movs r2, 1                                        |         r2 = 1;
    0x00013b36 strd r2, r2, [sp, 4]                              |         __asm ("strd r2, r2, [sp, 4]");
    0x00013b3a mov r2, fp                                        |         r2 = fp;
    0x00013b3c bl 0x69c0                                         |         fcn_000069c0 (r0, r1, r2, r3, r4, r5, r6);
    0x00013b40 lsls r1, r5, 2                                    |         r1 = r5 << 2;
    0x00013b42 mov r2, r0                                        |         r2 = r0;
                                                                 |         if (r0 != 0) {
    0x00013b44 cbz r0, 0x13b48                                   |             
    0x00013b46 ldr r2, [r0]                                      |             r2 = *(r0);
                                                                 |         }
    0x00013b48 ldr r0, [r6]                                      |         r0 = *(r6);
    0x00013b4a adds r5, 1                                        |         r5++;
    0x00013b4c ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x00013b50 ldr r1, [r0, r1]                                  |         r1 = *((r0 + r1));
    0x00013b52 mov r0, r8                                        |         r0 = r8;
    0x00013b54 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00013b56 str r2, [sp, 4]                                   |         *(arg_4h) = r2;
    0x00013b58 movs r2, 8                                        |         r2 = 8;
    0x00013b5a str r2, [sp]                                      |         *(sp) = r2;
    0x00013b5c bl 0x8b1c                                         |         fcn_00008b1c ();
    0x00013b60 ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x00013b62 cmp r3, r5                                        |         
    0x00013b64 bhi 0x13b1e                                       |         
                                                                 |     } while (r3 > r5);
    0x00013b66 b 0x1399e                                         |     goto label_57;
                                                                 | label_140:
    0x00013b68 ldr r2, [pc, 0x314]                               |     
    0x00013b6a mov r1, r4                                        |     r1 = r4;
    0x00013b6c add r2, pc                                        |     r2 = 0x279f0;
    0x00013b6e bl 0x10838                                        |     r0 = fcn_00010838 (r0, r1, r2);
    0x00013b72 add r5, r0                                        |     r5 += r0;
    0x00013b74 b 0x13432                                         |     goto label_58;
                                                                 | label_78:
    0x00013b76 ldr r0, [pc, 0x30c]                               |     
    0x00013b78 mov r1, r5                                        |     r1 = r5;
    0x00013b7a add r0, pc                                        |     r0 = 0x27a04;
    0x00013b7c bl 0x8b5c                                         |     dl_fatal_printf ()
                                                                 | label_135:
    0x00013b80 ldrb r3, [r0, -0x1]                               |     r3 = *((r0 - 0x1));
    0x00013b84 subs r2, r0, 1                                    |     r2 = r0 - 1;
    0x00013b86 cmp r3, 0x3a                                      |     
    0x00013b88 it ne                                             |     
                                                                 |     if (r3 == 0x3a) {
    0x00013b8a cmpne r3, 0x20                                    |         __asm ("cmpne r3, 0x20");
                                                                 |         goto label_164;
                                                                 |     }
                                                                 |     if (r3 == 0x3a) {
                                                                 | label_164:
    0x00013b8c beq.w 0x13416                                     |         goto label_59;
                                                                 |     }
    0x00013b90 subs r3, 9                                        |     r3 -= 9;
    0x00013b92 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00013b94 bls.w 0x13416                                     |         goto label_59;
                                                                 |     }
    0x00013b98 mov r3, r6                                        |     r3 = r6;
                                                                 | label_62:
    0x00013b9a cmp r3, r6                                        |     
                                                                 |     if (r3 != r6) {
    0x00013b9c bne.w 0x1341c                                     |         goto label_60;
                                                                 |     }
    0x00013ba0 b 0x13442                                         |     goto label_61;
                                                                 | label_163:
    0x00013ba2 ldr r1, [pc, 0x2e4]                               |     
    0x00013ba4 mov r0, r5                                        |     r0 = r5;
    0x00013ba6 ldrd fp, sb, [r7, 8]                              |     __asm ("ldrd fp, sb, [r7, 8]");
    0x00013baa add r1, pc                                        |     r1 = 0x27a38;
    0x00013bac bl 0x15bb0                                        |     r0 = fcn_00015bb0 (r0, r1, r2, r3);
                                                                 |     if (r0 == 0) {
    0x00013bb0 cbz r0, 0x13c14                                   |         goto label_165;
                                                                 |     }
    0x00013bb2 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00013bb4 cmp r3, 0x2d                                      |     
                                                                 |     if (r3 != 0x2d) {
    0x00013bb6 bne.w 0x119a2                                     |         goto label_34;
                                                                 |     }
    0x00013bba ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00013bbc cmp r3, 0x2d                                      |     
                                                                 |     if (r3 != 0x2d) {
    0x00013bbe bne.w 0x119a2                                     |         goto label_34;
                                                                 |     }
    0x00013bc2 ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x00013bc4 mov r1, r5                                        |     r1 = r5;
    0x00013bc6 bl 0x102c0                                        |     r0 = fcn_000102c0 (r0, r1);
                                                                 | label_138:
    0x00013bca adds r3, r6, r0                                   |     r3 = r6 + r0;
    0x00013bcc cmp r6, r3                                        |     
                                                                 |     if (r6 >= r3) {
    0x00013bce bhs 0x13b9a                                       |         goto label_62;
                                                                 |     }
    0x00013bd0 mov ip, r3                                        |     
    0x00013bd2 b 0x13bda                                         |     goto label_166;
                                                                 | label_64:
    0x00013bd4 cmp r6, r3                                        |     
                                                                 |     if (r6 == r3) {
    0x00013bd6 beq.w 0x13444                                     |         goto label_63;
                                                                 |     }
                                                                 | label_166:
    0x00013bda mov r0, ip                                        |     r0 = ip;
    0x00013bdc add.w ip, ip, -1                                  |     
    0x00013be0 ldrb.w r2, [ip]                                   |     r2 = *(ip);
    0x00013be4 mov r3, ip                                        |     r3 = ip;
    0x00013be6 cmp r2, 0x20                                      |     
    0x00013be8 it ne                                             |     
                                                                 |     if (r2 != 0x20) {
    0x00013bea cmpne r2, 0x3a                                    |         __asm ("cmpne r2, 0x3a");
                                                                 |     }
    0x00013bec sub.w r2, r2, 9                                   |     r2 -= 9;
    0x00013bf0 ite ne                                            |     
                                                                 |     if (r2 == 0x20) {
    0x00013bf2 movne r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r2 != 0x20) {
    0x00013bf4 moveq r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x00013bf6 cmp r2, 1                                         |     
    0x00013bf8 ite ls                                            |     
                                                                 |     if (r2 > 1) {
    0x00013bfa movls r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r2 <= 1) {
    0x00013bfc andhi r1, r1, 1                                   |         r1 &= 1;
                                                                 |     }
    0x00013c00 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00013c02 bne 0x13bd4                                       |         goto label_64;
                                                                 |     }
    0x00013c04 cmp r6, r0                                        |     
    0x00013c06 mov r3, r0                                        |     r3 = r0;
    0x00013c08 it lo                                             |     
                                                                 |     if (r6 < r0) {
    0x00013c0a strblo r1, [r0, -0x1]                             |         *((r0 - 0x1)) = r1;
                                                                 |         goto label_167;
                                                                 |     }
                                                                 |     if (r6 <= r0) {
                                                                 | label_167:
    0x00013c0e blo.w 0x1341c                                     |         goto label_60;
                                                                 |     }
    0x00013c12 b 0x13b9a                                         |     goto label_62;
                                                                 | label_165:
    0x00013c14 bl 0x102fc                                        |     fcn_000102fc (r0);
                                                                 | label_116:
    0x00013c18 ldr r0, [pc, 0x270]                               |     
    0x00013c1a add r0, pc                                        |     r0 = 0x27aaa;
    0x00013c1c bl 0x8b5c                                         |     dl_fatal_printf ()
    0x00013c20 ldr r3, [pc, 0x26c]                               |     
    0x00013c22 movs r2, 0x7f                                     |     r2 = 0x7f;
    0x00013c24 ldr r1, [pc, 0x26c]                               |     
    0x00013c26 ldr r0, [pc, 0x270]                               |     
    0x00013c28 add r3, pc                                        |     r3 = 0x27abc;
    0x00013c2a add r1, pc                                        |     r1 = 0x27ac2;
    0x00013c2c add r0, pc                                        |     r0 = 0x27aca;
    0x00013c2e bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013c32 ldr r3, [pc, 0x268]                               |     
    0x00013c34 movs r2, 0x82                                     |     r2 = 0x82;
    0x00013c36 ldr r1, [pc, 0x268]                               |     
    0x00013c38 ldr r0, [pc, 0x268]                               |     
    0x00013c3a add r3, pc                                        |     r3 = 0x27adc;
    0x00013c3c add r1, pc                                        |     r1 = 0x27ae2;
    0x00013c3e add r0, pc                                        |     r0 = 0x27ae6;
    0x00013c40 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_86:
    0x00013c44 ldr r3, [pc, 0x260]                               |     
    0x00013c46 movw r2, 0x739                                    |     r2 = 0x739;
    0x00013c4a ldr r1, [pc, 0x260]                               |     
    0x00013c4c ldr r0, [pc, 0x260]                               |     
    0x00013c4e add r3, pc                                        |     r3 = 0x27afa;
    0x00013c50 add r1, pc                                        |     r1 = 0x27b02;
    0x00013c52 add r0, pc                                        |     r0 = 0x27b06;
    0x00013c54 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_107:
    0x00013c58 ldr r0, [pc, 0x258]                               |     
    0x00013c5a add r0, pc                                        |     r0 = 0x27b12;
    0x00013c5c bl 0x8b5c                                         |     dl_fatal_printf ()
                                                                 | label_121:
    0x00013c60 ldr r3, [pc, 0x254]                               |     
    0x00013c62 movw r2, 0x51f                                    |     r2 = 0x51f;
    0x00013c64 strh r7, [r3, r0]                                 |     *((r3 + r0)) = r7;
    0x00013c66 ldr r1, [pc, 0x254]                               |     
    0x00013c68 ldr r0, [pc, 0x254]                               |     
    0x00013c6a add r3, pc                                        |     r3 = 0x27b26;
    0x00013c6c add r1, pc                                        |     r1 = 0x27b2e;
    0x00013c6e add r0, pc                                        |     r0 = 0x27b32;
    0x00013c70 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_130:
    0x00013c74 ldr r3, [pc, 0x24c]                               |     
    0x00013c76 mov.w r2, 0x408                                   |     r2 = 0x408;
    0x00013c7a ldr r1, [pc, 0x24c]                               |     
    0x00013c7c ldr r0, [pc, 0x24c]                               |     
    0x00013c7e add r3, pc                                        |     r3 = 0x27b46;
    0x00013c80 add r1, pc                                        |     r1 = 0x27b4e;
    0x00013c82 add r0, pc                                        |     r0 = 0x27b52;
    0x00013c84 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_123:
    0x00013c88 ldr r3, [pc, 0x244]                               |     
    0x00013c8a movw r2, 0x537                                    |     r2 = 0x537;
    0x00013c8e ldr r1, [pc, 0x244]                               |     
    0x00013c90 ldr r0, [pc, 0x244]                               |     
    0x00013c92 add r3, pc                                        |     r3 = 0x27b66;
    0x00013c94 add r1, pc                                        |     r1 = 0x27b6e;
    0x00013c96 add r0, pc                                        |     r0 = 0x27b72;
    0x00013c98 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_122:
    0x00013c9c ldr r3, [pc, 0x23c]                               |     
    0x00013c9e movw r2, 0x52d                                    |     r2 = 0x52d;
    0x00013ca2 ldr r1, [pc, 0x23c]                               |     
    0x00013ca4 ldr r0, [pc, 0x23c]                               |     
    0x00013ca6 add r3, pc                                        |     r3 = 0x27b86;
    0x00013ca8 add r1, pc                                        |     r1 = 0x27b8e;
    0x00013caa add r0, pc                                        |     r0 = 0x27b92;
    0x00013cac bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013cb0 ldr r3, [pc, 0x234]                               |     
    0x00013cb2 movs r2, 0x61                                     |     r2 = 0x61;
    0x00013cb4 ldr r1, [pc, 0x234]                               |     
    0x00013cb6 ldr r0, [pc, 0x238]                               |     
    0x00013cb8 add r3, pc                                        |     r3 = 0x27ba4;
    0x00013cba add r1, pc                                        |     r1 = 0x27baa;
    0x00013cbc add r0, pc                                        |     r0 = 0x27bb2;
    0x00013cbe bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013cc2 ldr r3, [pc, 0x230]                               |     
    0x00013cc4 movs r2, 0x75                                     |     r2 = 0x75;
    0x00013cc6 ldr r1, [pc, 0x230]                               |     
    0x00013cc8 ldr r0, [pc, 0x230]                               |     
    0x00013cca add r3, pc                                        |     r3 = 0x27bc4;
    0x00013ccc add r1, pc                                        |     r1 = 0x27bca;
    0x00013cce add r0, pc                                        |     r0 = 0x27bce;
    0x00013cd0 bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013cd4 ldr r3, [pc, 0x228]                               |     
    0x00013cd6 movs r2, 0x7b                                     |     r2 = 0x7b;
    0x00013cd8 ldr r1, [pc, 0x228]                               |     
    0x00013cda ldr r0, [pc, 0x22c]                               |     
    0x00013cdc add r3, pc                                        |     r3 = 0x27be0;
    0x00013cde add r1, pc                                        |     r1 = 0x27be6;
    0x00013ce0 add r0, pc                                        |     r0 = 0x27bee;
    0x00013ce2 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_73:
    0x00013d3e ldr r3, [pc, 0x1fc]                               |     
    0x00013d40 add r3, pc                                        |     r3 = 0x27c82;
    0x00013d42 ldr r0, [r3]                                      |     r0 = *(0x27c82);
    0x00013d44 bl 0xeb78                                         |     fcn_0000eb78 (r0);
    0x00013d48 ldr r3, [pc, 0x1f4]                               |     
    0x00013d4a movw r2, 0x6a7                                    |     r2 = 0x6a7;
    0x00013d4e ldr r1, [pc, 0x1f4]                               |     
    0x00013d50 ldr r0, [pc, 0x1f4]                               |     
    0x00013d52 add r3, pc                                        |     r3 = 0x27c96;
    0x00013d54 add r1, pc                                        |     r1 = 0x27c9e;
    0x00013d56 add r0, pc                                        |     r0 = 0x27ca2;
    0x00013d58 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_113:
    0x00013d5c ldr r3, [pc, 0x1ec]                               |     
    0x00013d5e movw r2, 0x3ca                                    |     r2 = 0x3ca;
    0x00013d62 ldr r1, [pc, 0x1ec]                               |     
    0x00013d64 ldr r0, [pc, 0x1ec]                               |     
    0x00013d66 add r3, pc                                        |     r3 = 0x27cb6;
    0x00013d68 add r1, pc                                        |     r1 = 0x27cbe;
    0x00013d6a add r0, pc                                        |     r0 = 0x27cc2;
    0x00013d6c bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013d70 ldr r3, [pc, 0x1e4]                               |     
    0x00013d72 movw r2, 0x6ee                                    |     r2 = 0x6ee;
    0x00013d76 ldr r1, [pc, 0x1e4]                               |     
    0x00013d78 ldr r0, [pc, 0x1e4]                               |     
    0x00013d7a add r3, pc                                        |     r3 = 0x27cd6;
    0x00013d7c add r1, pc                                        |     r1 = 0x27cde;
    0x00013d7e add r0, pc                                        |     r0 = 0x27ce2;
    0x00013d80 bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013d84 ldr r3, [pc, 0x1dc]                               |     
    0x00013d86 movw r2, 0x6ef                                    |     r2 = 0x6ef;
    0x00013d8a ldr r1, [pc, 0x1dc]                               |     
    0x00013d8c ldr r0, [pc, 0x1dc]                               |     
    0x00013d8e add r3, pc                                        |     r3 = 0x27cf6;
    0x00013d90 add r1, pc                                        |     r1 = 0x27cfe;
    0x00013d92 add r0, pc                                        |     r0 = 0x27d02;
    0x00013d94 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_84:
    0x00013d98 ldr r3, [pc, 0x1d4]                               |     
    0x00013d9a movw r2, 0x67e                                    |     r2 = 0x67e;
    0x00013d9c str r6, [r7, 0x24]                                |     *((r7 + 0x24)) = r6;
    0x00013d9e ldr r1, [pc, 0x1d4]                               |     
    0x00013da0 ldr r0, [pc, 0x1d4]                               |     
    0x00013da2 add r3, pc                                        |     r3 = 0x27d16;
    0x00013da4 add r1, pc                                        |     r1 = 0x27d1e;
    0x00013da6 add r0, pc                                        |     r0 = 0x27d22;
    0x00013da8 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_95:
    0x00013dac ldr r3, [pc, 0x1cc]                               |     
    0x00013dae movw r2, 0x7ec                                    |     r2 = 0x7ec;
    0x00013db0 strb r4, [r5, 0xb]                                |     *((r5 + 0xb)) = r4;
    0x00013db2 ldr r1, [pc, 0x1cc]                               |     
    0x00013db4 ldr r0, [pc, 0x1cc]                               |     
    0x00013db6 add r3, pc                                        |     r3 = 0x27d36;
    0x00013db8 add r1, pc                                        |     r1 = 0x27d3e;
    0x00013dba add r0, pc                                        |     r0 = 0x27d42;
    0x00013dbc bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013dc0 ldr r3, [pc, 0x1c4]                               |     
    0x00013dc2 movw r2, 0x11b                                    |     r2 = 0x11b;
    0x00013dc6 ldr r1, [pc, 0x1c4]                               |     
    0x00013dc8 ldr r0, [pc, 0x1c4]                               |     
    0x00013dca add r3, pc                                        |     r3 = 0x27d56;
    0x00013dcc add r1, pc                                        |     r1 = 0x27d5e;
    0x00013dce add r0, pc                                        |     r0 = 0x27d62;
    0x00013dd0 bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013dd4 ldr r3, [pc, 0x1bc]                               |     
    0x00013dd6 movs r2, 0x3c                                     |     r2 = 0x3c;
    0x00013dd8 ldr r1, [pc, 0x1bc]                               |     
    0x00013dda ldr r0, [pc, 0x1c0]                               |     
    0x00013ddc add r3, pc                                        |     r3 = 0x27d74;
    0x00013dde add r1, pc                                        |     r1 = 0x27d7a;
    0x00013de0 add r0, pc                                        |     r0 = 0x27d82;
    0x00013de2 bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013de6 ldr r3, [pc, 0x1b8]                               |     
    0x00013de8 movs r2, 0x60                                     |     r2 = 0x60;
    0x00013dea ldr r1, [pc, 0x1b8]                               |     
    0x00013dec ldr r0, [pc, 0x1b8]                               |     
    0x00013dee add r3, pc                                        |     r3 = 0x27d94;
    0x00013df0 add r1, pc                                        |     r1 = 0x27d9a;
    0x00013df2 add r0, pc                                        |     r0 = 0x27d9e;
    0x00013df4 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_96:
    0x00013df8 ldr r3, [pc, 0x1b0]                               |     
    0x00013dfa mov.w r2, 0x7f0                                   |     r2 = 0x7f0;
    0x00013dfe ldr r1, [pc, 0x1b0]                               |     
    0x00013e00 ldr r0, [pc, 0x1b0]                               |     
    0x00013e02 add r3, pc                                        |     r3 = 0x27db2;
    0x00013e04 add r1, pc                                        |     r1 = 0x27dba;
    0x00013e06 add r0, pc                                        |     r0 = 0x27dbe;
    0x00013e08 bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x00013e0c ldrh r4, [r0, r5]                                 |     r4 = *((r0 + r5));
    0x00013e0e movs r0, r0                                       |     
    0x00013e10 strh r0, [r3, 0x14]                               |     *((r3 + 0x14)) = r0;
    0x00013e12 movs r0, r0                                       |     
    0x00013e14 adr r4, 0x2c8                                     |     r4 = 0x2c8;
    0x00013e16 movs r0, r0                                       |     
    0x00013e18 strh r6, [r0, 0x12]                               |     *((r0 + 0x12)) = r6;
    0x00013e1a movs r0, r0                                       |     
    0x00013e1c ldrh r4, [r6, 0xa]                                |     r4 = *((r6 + 0xa));
    0x00013e1e movs r0, r0                                       |     
    0x00013e20 adr r7, 0x1c8                                     |     r7 = 0x1c8;
    0x00013e22 movs r0, r0                                       |     
    0x00013e24 ldrh r2, [r2, r1]                                 |     r2 = *((r2 + r1));
    0x00013e26 movs r0, r0                                       |     
    0x00013e28 ldrh r2, [r2, 6]                                  |     r2 = *((r2 + 6));
    0x00013e2a movs r0, r0                                       |     
    0x00013e2c strh r4, [r6, 0xa]                                |     *((r6 + 0xa)) = r4;
    0x00013e2e movs r0, r0                                       |     
    0x00013e30 ldrh r4, [r0, r0]                                 |     r4 = *((r0 + r0));
    0x00013e32 movs r0, r0                                       |     
    0x00013e34 strh r6, [r0, 0xa]                                |     *((r0 + 0xa)) = r6;
    0x00013e36 movs r0, r0                                       |     
    0x00013e38 strh r2, [r7, 8]                                  |     *((r7 + 8)) = r2;
    0x00013e3a movs r0, r0                                       |     
    0x00013e3c strh r0, [r0, 0xa]                                |     *((r0 + 0xa)) = r0;
    0x00013e3e movs r0, r0                                       |     
    0x00013e40 ldrh r0, [r5]                                     |     r0 = *(r5);
    0x00013e42 movs r0, r0                                       |     
    0x00013e44 strh r4, [r0, 0x3e]                               |     *((r0 + 0x3e)) = r4;
    0x00013e46 movs r0, r0                                       |     
    0x00013e48 strh r4, [r6, 0x16]                               |     *((r6 + 0x16)) = r4;
    0x00013e4a movs r0, r0                                       |     
    0x00013e4c adr r3, 0xf0                                      |     r3 = 0xf0;
    0x00013e4e movs r0, r0                                       |     
    0x00013e50 strh r6, [r0, 0x2e]                               |     *((r0 + 0x2e)) = r6;
    0x00013e52 movs r0, r0                                       |     
    0x00013e54 ldm r6, {r0, r1, r4, r6}                          |     r0 = *(r6);
                                                                 |     r1 = *((r6 + 4));
                                                                 |     r4 = *((r6 + 8));
                                                                 |     r6 = *((r6 + 12));
    0x00013e56 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/ld-linux-armhf.so.3 @ 0xc6f8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.__tls_get_addr ()                                | uint32_t tls_get_addr (int16_t arg_8e8h, int16_t arg_900h, int16_t arg1, int16_t arg3) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_0h;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
                                                                 | label_5:
    0x0000bd74 push.w {r3, r4, r5, r6, r7, r8, sb, lr}           |     
    0x0000bd78 mov r7, r0                                        |     r7 = r0;
    0x0000bd7a mov r6, r1                                        |     r6 = r1;
    0x0000bd7c mov r4, r2                                        |     r4 = r2;
    0x0000bd7e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0000bd80 beq 0xbdfa                                        |         
    0x0000bd82 ldr.w r3, [r4, 0x254]                             |         r3 = *((r4 + 0x254));
    0x0000bd86 adds r3, 1                                        |         r3++;
                                                                 |         if (r3 != 1) {
    0x0000bd88 bne 0xbe22                                        |             goto label_6;
                                                                 |         }
                                                                 | label_0:
    0x0000bd8a ldrd r0, r5, [r4, 0x248]                          |         __asm ("ldrd r0, r5, [r4, 0x248]");
    0x0000bd8e add.w r8, r5, -1                                  |         r8 = r5 + -1;
    0x0000bd92 and.w r3, r5, r8                                  |         r3 = r5 & r8;
    0x0000bd96 cmp r5, 8                                         |         
    0x0000bd98 it ls                                             |         
                                                                 |         if (r5 <= 8) {
    0x0000bd9a cmpls r3, 0                                       |             __asm ("cmpls r3, 0");
                                                                 |         }
                                                                 |         if (r5 == 8) {
    0x0000bd9c beq 0xbe4e                                        |             goto label_7;
                                                                 |         }
    0x0000bd9e adds r0, r5, r0                                   |         r0 = r5 + r0;
                                                                 |         if (r0 < r5) {
    0x0000bda0 bhs 0xbdf2                                        |             
    0x0000bda2 ldr r3, [pc, 0xf8]                                |             
    0x0000bda4 add r3, pc                                        |             
    0x0000bda6 ldr r3, [r3]                                      |             r3 = *(0x17c46);
    0x0000bda8 blx r3                                            |             r0 = uint32_t (*r3)(uint32_t) (r3);
    0x0000bdaa mov sb, r0                                        |             sb = r0;
                                                                 |             if (r0 == 0) {
    0x0000bdac cbz r0, 0xbdf2                                    |                 goto label_8;
                                                                 |             }
    0x0000bdae add r8, r0                                        |             r8 += r0;
    0x0000bdb0 mov r1, r5                                        |             r1 = r5;
    0x0000bdb2 mov r0, r8                                        |             r0 = r8;
    0x0000bdb4 bl 0x16dbc                                        |             fcn_00016dbc (r0, r1, r2);
    0x0000bdb8 sub.w r5, r8, r1                                  |             r5 = r8 - r1;
                                                                 |             if (r5 == 0) {
                                                                 | label_1:
    0x0000bdbc cbz r5, 0xbdf2                                    |                 goto label_8;
                                                                 |             }
    0x0000bdbe ldrd r1, r2, [r4, 0x240]                          |             __asm ("ldrd r1, r2, [r4, 0x240]");
    0x0000bdc2 mov r0, r5                                        |             r0 = r5;
    0x0000bdc4 blx 0x16400                                       |             fcn_00016400 (r0, r1);
    0x0000bdc8 ldrd r3, r2, [r4, 0x244]                          |             __asm ("ldrd r3, r2, [r4, 0x244]");
    0x0000bdcc movs r1, 0                                        |             r1 = 0;
    0x0000bdce add r0, r3                                        |             r0 += r3;
    0x0000bdd0 subs r2, r2, r3                                   |             r2 -= r3;
    0x0000bdd2 blx 0x159e0                                       |             fcn_000159e0 (r0, r1);
    0x0000bdd6 ldr r3, [r7]                                      |             r3 = *(r7);
    0x0000bdd8 str.w r5, [r6, r3, lsl 3]                         |             __asm ("str.w r5, [r6, r3, lsl 3]");
    0x0000bddc add.w r6, r6, r3, lsl 3                           |             r6 += (r3 << 3);
    0x0000bde0 str.w sb, [r6, 4]                                 |             __asm ("str.w sb, [r6, 4]");
    0x0000bde4 cmp.w sb, 0                                       |             
                                                                 |             if (sb == 0) {
    0x0000bde8 beq 0xbe88                                        |                 goto label_9;
                                                                 |             }
    0x0000bdea ldr r0, [r7, 4]                                   |             r0 = *((r7 + 4));
    0x0000bdec add r0, r5                                        |             r0 += r5;
                                                                 | label_2:
    0x0000bdee pop.w {r3, r4, r5, r6, r7, r8, sb, pc}            |             
                                                                 |         }
                                                                 | label_8:
    0x0000bdf2 ldr r0, [pc, 0xac]                                |         
    0x0000bdf4 add r0, pc                                        |         r0 = 0x17c9a;
    0x0000bdf6 bl 0x8b5c                                         |         dl_fatal_printf ()
                                                                 |     }
    0x0000bdfa ldr r3, [pc, 0xa8]                                |     
    0x0000bdfc ldr r2, [r0]                                      |     r2 = *(r0);
    0x0000bdfe add r3, pc                                        |     
    0x0000be00 ldr.w r3, [r3, 0x8ec]                             |     r3 = *(0x18594);
    0x0000be04 ldr r4, [r3]                                      |     r4 = *(0x18594);
    0x0000be06 cmp r4, r2                                        |     
                                                                 |     if (r4 > r2) {
    0x0000be08 bhi 0xbe14                                        |         goto label_10;
                                                                 |     }
                                                                 |     do {
    0x0000be0a ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0000be0c subs r2, r2, r4                                   |         r2 -= r4;
    0x0000be0e ldr r4, [r3]                                      |         r4 = *(r3);
    0x0000be10 cmp r4, r2                                        |         
    0x0000be12 bls 0xbe0a                                        |         
                                                                 |     } while (r4 < r2);
                                                                 | label_10:
    0x0000be14 add.w r3, r3, r2, lsl 3                           |     r3 += (r2 << 3);
    0x0000be18 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x0000be1a ldr.w r3, [r4, 0x254]                             |     r3 = *((r4 + 0x254));
    0x0000be1e adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x0000be20 beq 0xbd8a                                        |         goto label_0;
                                                                 |     }
                                                                 | label_6:
    0x0000be22 ldr r5, [pc, 0x84]                                |     
    0x0000be24 ldr r3, [pc, 0x84]                                |     
    0x0000be26 add r5, pc                                        |     r5 = 0x17cd4;
    0x0000be28 add r3, pc                                        |     
    0x0000be2a addw r5, r5, 0x5b4                                |     __asm ("addw r5, r5, 0x5b4");
    0x0000be2e ldr r3, [r3]                                      |     r3 = *(0x17cd8);
    0x0000be30 mov r0, r5                                        |     r0 = r5;
    0x0000be32 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000be34 ldr.w r3, [r4, 0x254]                             |     r3 = *((r4 + 0x254));
                                                                 |     if (r3 == 0) {
    0x0000be38 cbnz r3, 0xbe5c                                   |         
    0x0000be3a mov.w r3, -1                                      |         r3 = -1;
    0x0000be3e mov r0, r5                                        |         r0 = r5;
    0x0000be40 str.w r3, [r4, 0x254]                             |         __asm ("str.w r3, [r4, 0x254]");
    0x0000be44 ldr r3, [pc, 0x68]                                |         
    0x0000be46 add r3, pc                                        |         
    0x0000be48 ldr r3, [r3]                                      |         r3 = *(0x17cfa);
    0x0000be4a blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000be4c b 0xbd8a                                          |         goto label_0;
                                                                 | label_7:
    0x0000be4e ldr r3, [pc, 0x64]                                |         
    0x0000be50 add r3, pc                                        |         
    0x0000be52 ldr r3, [r3]                                      |         r3 = *(0x17d0a);
    0x0000be54 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t) (r3);
    0x0000be56 mov r5, r0                                        |         r5 = r0;
    0x0000be58 mov sb, r0                                        |         sb = r0;
    0x0000be5a b 0xbdbc                                          |         goto label_1;
                                                                 |     }
    0x0000be5c ldr r2, [pc, 0x58]                                |     
    0x0000be5e adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x0000be60 mov r0, r5                                        |     r0 = r5;
    0x0000be62 add r2, pc                                        |     
    0x0000be64 ldr r2, [r2]                                      |     r2 = *(0x17d1e);
                                                                 |     if (r1 != r3) {
    0x0000be66 beq 0xbe84                                        |         
    0x0000be68 mrc p15, 0, r4, c13, c0, 3                        |         __asm ("mrc p15, 0, r4, c13, c0, 3");
    0x0000be6c add r4, r3                                        |         r4 += r3;
    0x0000be6e blx r2                                            |         r0 = uint32_t (*r2)() ();
    0x0000be70 ldrd r3, r0, [r7]                                 |         __asm ("ldrd r3, r0, [r7]");
    0x0000be74 movs r1, 0                                        |         r1 = 0;
    0x0000be76 add r0, r4                                        |         r0 += r4;
    0x0000be78 add.w r2, r6, r3, lsl 3                           |         r2 = r6 + (r3 << 3);
    0x0000be7c str r1, [r2, 4]                                   |         *((r2 + 4)) = r1;
    0x0000be7e str.w r4, [r6, r3, lsl 3]                         |         __asm ("str.w r4, [r6, r3, lsl 3]");
    0x0000be82 b 0xbdee                                          |         goto label_2;
                                                                 |     }
    0x0000be84 blx r2                                            |     uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r2, r1, r0);
    0x0000be86 b 0xbd8a                                          |     goto label_0;
                                                                 | label_9:
    0x0000be88 ldr r3, [pc, 0x30]                                |     
    0x0000be8a movw r2, 0x38d                                    |     r2 = 0x38d;
    0x0000be8e ldr r1, [pc, 0x30]                                |     
    0x0000be90 ldr r0, [pc, 0x30]                                |     
    0x0000be92 add r3, pc                                        |     r3 = 0x17d52;
    0x0000be94 add r1, pc                                        |     r1 = 0x17d5a;
    0x0000be96 add r0, pc                                        |     r0 = 0x17d5e;
    0x0000be98 bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x0000be9c subs r0, r2, 5                                    |     r0 = r2 - 5;
    0x0000be9e movs r1, r0                                       |     r1 = r0;
    0x0000bea0 b 0xc1dc                                          |     
    0x0000c1dc add r3, pc                                        |     r3 += pc;
    0x0000c1de add r1, pc                                        |     r1 += pc;
    0x0000c1e0 add r0, pc                                        |     r0 += pc;
    0x0000c1e2 bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x0000c1e6 nop                                               |     
    0x0000c1e8 subs r4, r1, 5                                    |     r4 = r1 - 5;
    0x0000c1ea movs r1, r0                                       |     r1 = r0;
    0x0000c1ec subs r6, r3, r6                                   |     r6 = r3 - r6;
    0x0000c1ee movs r1, r0                                       |     r1 = r0;
    0x0000c1f0 subs r0, r6, 1                                    |     r0 = r6 - 1;
    0x0000c1f2 movs r1, r0                                       |     r1 = r0;
    0x0000c1f4 b 0xc308                                          |     goto label_11;
                                                                 | label_4:
    0x0000c2f0 ldr r3, [pc, 0x158]                               |     
    0x0000c2f2 mov.w r8, 0                                       |     r8 = 0;
    0x0000c2f6 ldr.w fp, [pc, 0x158]                             |     fp = *(0xc452);
    0x0000c2fa vmov.i64 d8, 0xffffffff                           |     __asm ("vmov.i64 d8, 0xffffffff");
    0x0000c2fe add r3, pc                                        |     r3 = 0x1874e;
    0x0000c300 ldr.w r3, [r3, 0x8ec]                             |     r3 = *((r3 + 0x8ec));
    0x0000c304 add fp, pc                                        |     
    0x0000c306 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 | label_11:
    0x0000c308 mov r3, r8                                        |     r3 = r8;
                                                                 | label_3:
    0x0000c30a ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0000c30c clz r7, r3                                        |     r7 &= r3;
    0x0000c310 lsrs r7, r7, 5                                    |     r7 >>= 5;
    0x0000c312 ldr r1, [r2]                                      |     r1 = *(r2);
    0x0000c314 cmp r7, r1                                        |     
                                                                 |     if (r7 >= r1) {
    0x0000c316 bhs 0xc3ce                                        |         goto label_12;
                                                                 |     }
    0x0000c318 adds r6, r3, r7                                   |     r6 = r3 + r7;
    0x0000c31a str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0000c31c mov r3, r1                                        |     r3 = r1;
    0x0000c31e add.w r5, r2, r7, lsl 3                           |     r5 = r2 + (r7 << 3);
    0x0000c322 mov r1, ip                                        |     r1 = ip;
    0x0000c324 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0000c328 mov ip, r3                                        |     
    0x0000c32a b 0xc3a2                                          |     
                                                                 |     while (r6 < r1) {
    0x0000c32c ldr r4, [r5, 0xc]                                 |         r4 = *((r5 + 0xc));
                                                                 |         if (r4 != 0) {
    0x0000c32e cbz r4, 0xc396                                    |             
    0x0000c330 ldr r2, [r5, 8]                                   |             r2 = *((r5 + 8));
    0x0000c332 ldr.w r3, [fp, 0x900]                             |             r3 = *(arg_900h);
    0x0000c336 cmp r2, r3                                        |             
                                                                 |             if (r2 > r3) {
    0x0000c338 bhi 0xc406                                        |                 goto label_13;
                                                                 |             }
    0x0000c33a ldrd r0, r3, [r4, 0x254]                          |             __asm ("ldrd r0, r3, [r4, 0x254]");
    0x0000c33e cmp r8, r2                                        |             
    0x0000c340 it lo                                             |             
                                                                 |             if (r8 >= r2) {
    0x0000c342 movlo r8, r2                                      |                 r8 = r2;
                                                                 |             }
    0x0000c344 adds r2, r0, 1                                    |             r2 = r0 + 1;
    0x0000c346 add.w lr, sb, r3, lsl 3                           |             lr = sb + (r3 << 3);
    0x0000c34a cmp r2, 1                                         |             
    0x0000c34c vst1.32 {d8}, [lr]                                |             __asm ("vst1.32 {d8}, [lr]");
                                                                 |             if (r2 < 1) {
    0x0000c350 bls 0xc396                                        |                 goto label_14;
                                                                 |             }
    0x0000c352 cmp r3, r6                                        |             
                                                                 |             if (r3 != r6) {
    0x0000c354 bne 0xc42e                                        |                 goto label_15;
                                                                 |             }
    0x0000c356 ldrd sl, r3, [r4, 0x244]                          |             __asm ("ldrd sl, r3, [r4, 0x244]");
    0x0000c35a cmp r3, sl                                        |             
                                                                 |             if (r3 <= sl) {
    0x0000c35c blo 0xc41a                                        |                 goto label_16;
                                                                 |             }
    0x0000c35e ldr r3, [sp, 4]                                   |             r3 = var_4h;
    0x0000c360 ldr r2, [r4, 0x18]                                |             r2 = *((r4 + 0x18));
    0x0000c362 add r0, r3                                        |             r0 += r3;
    0x0000c364 ldr r3, [sp]                                      |             r3 = *(sp);
    0x0000c366 str.w r0, [lr]                                    |             __asm ("str.w r0, [lr]");
    0x0000c36a cmp r2, 0                                         |             
    0x0000c36c it eq                                             |             
                                                                 |             if (r2 != 0) {
    0x0000c36e orreq r3, r3, 1                                   |                 r3 |= 1;
                                                                 |             }
                                                                 |             if (r3 == 0) {
    0x0000c372 cbz r3, 0xc396                                    |                 goto label_14;
                                                                 |             }
    0x0000c374 ldr.w r1, [r4, 0x240]                             |             r1 = *((r4 + 0x240));
    0x0000c378 mov r2, sl                                        |             r2 = sl;
    0x0000c37a blx 0x16400                                       |             fcn_00016400 (r0, r1);
    0x0000c37e ldrd r3, r2, [r4, 0x244]                          |             __asm ("ldrd r3, r2, [r4, 0x244]");
    0x0000c382 movs r1, 0                                        |             r1 = 0;
    0x0000c384 add r0, sl                                        |             r0 += sl;
    0x0000c386 subs r2, r2, r3                                   |             r2 -= r3;
    0x0000c388 blx 0x159e0                                       |             fcn_000159e0 (r0, r1);
    0x0000c38c ldr r3, [sp, 8]                                   |             r3 = var_8h;
    0x0000c38e ldr.w r1, [fp, 0x8e8]                             |             r1 = *(arg_8e8h);
    0x0000c392 ldr.w ip, [r3]                                    |             ip = *(r3);
                                                                 |         }
                                                                 | label_14:
    0x0000c396 adds r7, 1                                        |         r7++;
    0x0000c398 adds r6, 1                                        |         r6++;
    0x0000c39a cmp ip, r7                                        |         
    0x0000c39c add.w r5, r5, 8                                   |         r5 += 8;
                                                                 |         if (ip < r7) {
    0x0000c3a0 bls 0xc3c6                                        |             goto label_17;
                                                                 |         }
    0x0000c3a2 cmp r6, r1                                        |         
    0x0000c3a4 bls 0xc32c                                        |         
                                                                 |     }
                                                                 |     do {
    0x0000c3a6 ldr r0, [pc, 0xac]                                |         
    0x0000c3a8 ldr r3, [pc, 0xac]                                |         
    0x0000c3aa add r0, pc                                        |         r0 = 0x18804;
    0x0000c3ac add r3, pc                                        |         
    0x0000c3ae addw r0, r0, 0x5b4                                |         __asm ("addw r0, r0, 0x5b4");
    0x0000c3b2 ldr r3, [r3]                                      |         r3 = *(0x18808);
    0x0000c3b4 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000c3b6 str.w r8, [sb]                                    |         __asm ("str.w r8, [sb]");
    0x0000c3ba ldr r0, [sp, 4]                                   |         r0 = var_4h;
    0x0000c3bc add sp, 0x14                                      |         
    0x0000c3be vpop {d8}                                         |         __asm ("vpop {d8}");
    0x0000c3c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_17:
    0x0000c3c6 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0000c3c8 mov ip, r1                                        |         
    0x0000c3ca ldr.w sl, [sp]                                    |         sl = *(sp);
                                                                 | label_12:
    0x0000c3ce add r3, r7                                        |         r3 += r7;
    0x0000c3d0 cmp r3, ip                                        |         
    0x0000c3d2 bhi 0xc3a6                                        |         
                                                                 |     } while (r3 > ip);
    0x0000c3d4 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0000c3d6 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0000c3d8 str r2, [sp, 8]                                   |     var_8h = r2;
    0x0000c3da cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0000c3dc bne 0xc30a                                        |         goto label_3;
                                                                 |     }
    0x0000c3de ldr r3, [pc, 0x7c]                                |     
    0x0000c3e0 movw r2, 0x26a                                    |     r2 = 0x26a;
    0x0000c3e4 ldr r1, [pc, 0x78]                                |     
    0x0000c3e6 ldr r0, [pc, 0x7c]                                |     
    0x0000c3e8 add r3, pc                                        |     r3 = 0x1884a;
    0x0000c3ea add r1, pc                                        |     r1 = 0x1884e;
    0x0000c3ec add r0, pc                                        |     r0 = 0x18856;
    0x0000c3ee bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x0000c3f2 mov r1, ip                                        |     r1 = ip;
    0x0000c3f4 mov r0, sb                                        |     r0 = sb;
    0x0000c3f6 bl 0xbec8                                         |     fcn_0000bec8 (r0, r1);
    0x0000c3fa ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0000c3fc mov sb, r0                                        |     sb = r0;
    0x0000c3fe ldr.w ip, [r4, 0x8e8]                             |     ip = *((r4 + 0x8e8));
    0x0000c402 str r0, [r3]                                      |     *(r3) = r0;
    0x0000c404 b 0xc2f0                                          |     goto label_4;
                                                                 | label_13:
    0x0000c406 ldr r3, [pc, 0x60]                                |     
    0x0000c408 movw r2, 0x23f                                    |     r2 = 0x23f;
    0x0000c40c ldr r1, [pc, 0x5c]                                |     
    0x0000c40e ldr r0, [pc, 0x60]                                |     
    0x0000c410 add r3, pc                                        |     r3 = 0x1887e;
    0x0000c412 add r1, pc                                        |     r1 = 0x18882;
    0x0000c414 add r0, pc                                        |     r0 = 0x1888a;
    0x0000c416 bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_16:
    0x0000c41a ldr r3, [pc, 0x58]                                |     
    0x0000c41c movw r2, 0x24a                                    |     r2 = 0x24a;
    0x0000c420 ldr r1, [pc, 0x54]                                |     
    0x0000c422 ldr r0, [pc, 0x58]                                |     
    0x0000c424 add r3, pc                                        |     r3 = 0x1889e;
    0x0000c426 add r1, pc                                        |     r1 = 0x188a2;
    0x0000c428 add r0, pc                                        |     r0 = 0x188aa;
    0x0000c42a bl 0xfba4                                         |     fcn_0000fba4 (r0);
                                                                 | label_15:
    0x0000c42e ldr r3, [pc, 0x50]                                |     
    0x0000c430 movw r2, 0x249                                    |     r2 = 0x249;
    0x0000c434 ldr r1, [pc, 0x4c]                                |     
    0x0000c436 ldr r0, [pc, 0x50]                                |     
    0x0000c438 add r3, pc                                        |     r3 = 0x188be;
    0x0000c43a add r1, pc                                        |     r1 = 0x188c2;
    0x0000c43c add r0, pc                                        |     r0 = 0x188ca;
    0x0000c43e bl 0xfba4                                         |     fcn_0000fba4 (r0);
    0x0000c442 nop                                               |     
    0x0000c444 adds r6, r4, 4                                    |     r6 = r4 + 4;
    0x0000c446 movs r1, r0                                       |     r1 = r0;
    0x0000c448 subs r4, r4, r0                                   |     r4 -= r0;
    0x0000c44a movs r1, r0                                       |     r1 = r0;
    0x0000c44c adds r6, r7, 3                                    |     r6 = r7 + 3;
    0x0000c44e movs r1, r0                                       |     r1 = r0;
    0x0000c450 adds r0, r7, 3                                    |     r0 = r7 + 3;
    0x0000c452 movs r1, r0                                       |     r1 = r0;
    0x0000c454 adds r2, r2, 1                                    |     r2++;
    0x0000c456 movs r1, r0                                       |     r1 = r0;
    0x0000c458 adds r4, r2, r5                                   |     r4 = r2 + r5;
    0x0000c45a movs r1, r0                                       |     r1 = r0;
    0x0000c45c udf 0x40                                          |     __asm ("udf 0x40");
                                                                 |     do {
    0x0000c6cc push {r4, lr}                                     |         
    0x0000c6ce mov r4, r0                                        |         r4 = r0;
    0x0000c6d0 ldr r0, [r0]                                      |         r0 = *(r0);
    0x0000c6d2 bl 0xc554                                         |         fcn_0000c554 (r0, r1);
    0x0000c6d6 mrc p15, 0, r3, c13, c0, 3                        |         __asm ("mrc p15, 0, r3, c13, c0, 3");
    0x0000c6da ldr r2, [r4]                                      |         r2 = *(r4);
    0x0000c6dc ldr r1, [r3]                                      |         r1 = *(r3);
    0x0000c6de ldr.w r3, [r1, r2, lsl 3]                         |         offset_0 = r2 << 3;
                                                                 |         r3 = *((r1 + offset_0));
    0x0000c6e2 adds r2, r3, 1                                    |         r2 = r3 + 1;
                                                                 |         if (r2 != r3) {
    0x0000c6e4 beq 0xc6ec                                        |             
    0x0000c6e6 ldr r0, [r4, 4]                                   |             r0 = *((r4 + 4));
    0x0000c6e8 add r0, r3                                        |             r0 += r3;
    0x0000c6ea pop {r4, pc}                                      |             
                                                                 |         }
    0x0000c6ec mov r2, r0                                        |         r2 = r0;
    0x0000c6ee mov r0, r4                                        |         r0 = r4;
    0x0000c6f0 pop.w {r4, lr}                                    |         
    0x0000c6f4 b.w 0xbd74                                        |         goto label_5;
    0x0000c6f8 mrc p15, 0, r2, c13, c0, 3                        |         __asm ("mrc p15, 0, r2, c13, c0, 3");
    0x0000c6fc ldr r3, [pc, 0x34]                                |         
    0x0000c6fe ldr r1, [r2]                                      |         r1 = *(r2);
    0x0000c700 push {r4}                                         |         
    0x0000c702 add r3, pc                                        |         
    0x0000c704 ldr r4, [r1]                                      |         r4 = *(r1);
    0x0000c706 ldr.w r3, [r3, 0x900]                             |         r3 = *(0x1973a);
    0x0000c70a cmp r4, r3                                        |         
                                                                 |         if (r4 == r3) {
    0x0000c70c bne 0xc722                                        |             
    0x0000c70e ldr r3, [r0]                                      |             r3 = *(r0);
    0x0000c710 ldr.w r3, [r1, r3, lsl 3]                         |             offset_1 = r3 << 3;
                                                                 |             r3 = *((r1 + offset_1));
    0x0000c714 adds r4, r3, 1                                    |             r4 = r3 + 1;
                                                                 |             if (r4 == r3) {
    0x0000c716 beq 0xc728                                        |                 goto label_18;
                                                                 |             }
    0x0000c718 ldr r0, [r0, 4]                                   |             r0 = *((r0 + 4));
    0x0000c71a invalid                                           |             
    0x0000c71c ldr r3, [pc, 0x10]                                |             r3 = *(0xc730);
    0x0000c71e add r0, r3                                        |             r0 += r3;
    0x0000c720 bx lr                                             |             return r0;
                                                                 |         }
    0x0000c722 ldr r4, [sp], 4                                   |         r4 = *(sp);
                                                                 |         sp += 4;
    0x0000c726 b 0xc6cc                                          |         
                                                                 |     } while (1);
                                                                 | label_18:
    0x0000c728 ldr r4, [sp], 4                                   |     r4 = *(sp);
                                                                 |     sp += 4;
    0x0000c72c movs r2, 0                                        |     r2 = 0;
    0x0000c72e b.w 0xbd74                                        |     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/ld-linux-armhf.so.3 @ 0x22a4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym._dl_exception_create_format ()                   | void dl_exception_create_format (int16_t arg1, uint32_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x000022a4 push {r2, r3}                                     |     
    0x000022a6 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000022aa sub sp, 0x1c                                      |     
    0x000022ac mov sb, r0                                        |     sb = r0;
    0x000022ae ldr r6, [sp, 0x40]                                |     r6 = var_40h;
    0x000022b0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000022b2 beq.w 0x2492                                      |         goto label_12;
                                                                 |     }
    0x000022b6 mov r0, r1                                        |     r0 = r1;
    0x000022b8 mov sl, r1                                        |     sl = r1;
    0x000022ba bl 0x161c0                                        |     r0 = fcn_000161c0 (r0, r1);
    0x000022be adds r7, r0, 2                                    |     r7 = r0 + 2;
    0x000022c0 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x000022c2 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 | label_5:
    0x000022c4 ldrb r2, [r6]                                     |     r2 = *(r6);
    0x000022c6 add r5, sp, 0x44                                  |     r5 += var_44h;
    0x000022c8 str r5, [sp, 0x14]                                |     var_14h = r5;
                                                                 |     if (r2 == 0) {
    0x000022ca cbz r2, 0x2312                                    |         goto label_13;
                                                                 |     }
    0x000022cc mov r3, r6                                        |     r3 = r6;
    0x000022ce b 0x22d6                                          |     
                                                                 |     while (r2 != 0x25) {
                                                                 | label_1:
    0x000022d0 ldrb r2, [r4, 1]                                  |         r2 = *((r4 + 1));
    0x000022d2 adds r3, r4, 1                                    |         r3 = r4 + 1;
                                                                 |         if (r2 == 0) {
    0x000022d4 cbz r2, 0x230c                                    |             goto label_14;
                                                                 |         }
                                                                 | label_0:
    0x000022d6 cmp r2, 0x25                                      |         
    0x000022d8 add.w r4, r3, 1                                   |         r4 = r3 + 1;
    0x000022dc itt ne                                            |         
                                                                 |         if (r2 == 0x25) {
    0x000022de addne r7, 1                                       |             r7++;
                                                                 |         }
                                                                 |         if (r2 == 0x25) {
    0x000022e0 movne r4, r3                                      |             r4 = r3;
                                                                 |         }
    0x000022e2 bne 0x22d0                                        |         
                                                                 |     }
    0x000022e4 ldrb r2, [r3, 1]                                  |     r2 = *((r3 + 1));
    0x000022e6 ldrb r1, [r3, 2]                                  |     r1 = *((r3 + 2));
    0x000022e8 subs r2, 0x6c                                     |     r2 -= 0x6c;
    0x000022ea cmp r2, 0xe                                       |     
                                                                 |     if (r2 <= 0xe) {
    0x000022ec bhi 0x2302                                        |         
                                                                 |         /* switch table (15 cases) at 0x22f2 */
    0x000022ee tbb [pc, r2]                                      |         __asm ("tbb [0x000022f4]");
                                                                 |     }
    0x00002302 ldrb r2, [r4, 1]                                  |     r2 = *((r4 + 1));
    0x00002304 adds r7, 1                                        |     r7++;
    0x00002306 adds r3, r4, 1                                    |     r3 = r4 + 1;
    0x00002308 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0000230a bne 0x22d6                                        |         goto label_0;
                                                                 |     }
                                                                 | label_14:
    0x0000230c cmp r7, 0                                         |     
                                                                 |     if (r7 < 0) {
    0x0000230e blt.w 0x2476                                      |         goto label_15;
                                                                 |     }
                                                                 | label_13:
    0x00002312 ldr r3, [pc, 0x194]                               |     
    0x00002314 mov r0, r7                                        |     r0 = r7;
    0x00002316 add r3, pc                                        |     
    0x00002318 ldr r3, [r3]                                      |     r3 = *(0x47c4);
    0x0000231a blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000231c mov r4, r0                                        |     r4 = r0;
    0x0000231e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00002320 beq.w 0x2476                                      |         goto label_15;
                                                                 |     }
    0x00002324 ldr r3, [pc, 0x184]                               |     
    0x00002326 str.w r0, [sb, 4]                                 |     __asm ("str.w r0, [sb, 4]");
    0x0000232a add r3, pc                                        |     
    0x0000232c ldr r3, [r3]                                      |     r3 = *(0x47da);
                                                                 |     if (r3 != 0) {
    0x0000232e cbz r3, 0x233e                                    |         
    0x00002330 ldrb.w r3, [r3, 0x1a4]                            |         r3 = *((r3 + 0x1a4));
    0x00002334 tst.w r3, 8                                       |         
    0x00002338 ite ne                                            |         
                                                                 |         if ((r3 & 8) == 0) {
    0x0000233a movne r3, r0                                      |             r3 = r0;
                                                                 |         }
                                                                 |         if ((r3 & 8) == 0) {
    0x0000233c moveq r3, 0                                       |             r3 = 0;
                                                                 |             goto label_16;
                                                                 |         }
                                                                 |     }
                                                                 | label_16:
    0x0000233e str.w r3, [sb, 8]                                 |     __asm ("str.w r3, [sb, 8]");
    0x00002342 add r7, r4                                        |     r7 += r4;
    0x00002344 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x00002346 str r5, [sp, 0x14]                                |     var_14h = r5;
    0x00002348 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000234a beq 0x23f0                                        |         goto label_17;
                                                                 |     }
    0x0000234c mov.w fp, 0                                       |     
    0x00002350 b 0x2366                                          |     
                                                                 |     while (r3 != 0x25) {
    0x00002352 cmp r7, r4                                        |         
                                                                 |         if (r7 == r4) {
    0x00002354 beq.w 0x2472                                      |             goto label_18;
                                                                 |         }
    0x00002358 mov r5, r6                                        |         r5 = r6;
                                                                 | label_4:
    0x0000235a strb r3, [r4], 1                                  |         *(r4) = r3;
                                                                 |         r4++;
                                                                 | label_3:
    0x0000235e ldrb r3, [r5, 1]                                  |         r3 = *((r5 + 1));
    0x00002360 adds r6, r5, 1                                    |         r6 = r5 + 1;
    0x00002362 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00002364 beq 0x23f0                                        |             goto label_17;
                                                                 |         }
                                                                 | label_2:
    0x00002366 cmp r3, 0x25                                      |         
    0x00002368 bne 0x2352                                        |         
                                                                 |     }
    0x0000236a ldrb r2, [r6, 1]                                  |     r2 = *((r6 + 1));
    0x0000236c adds r5, r6, 1                                    |     r5 = r6 + 1;
    0x0000236e cmp r2, 0x25                                      |     
                                                                 |     if (r2 == 0x25) {
    0x00002370 beq 0x246c                                        |         goto label_19;
                                                                 |     }
    0x00002372 sub.w r3, r2, 0x6c                                |     r3 = r2 - 0x6c;
    0x00002376 uxtb r2, r3                                       |     r2 = (int8_t) r3;
    0x00002378 cmp r2, 0xe                                       |     
                                                                 |     if (r2 > 0xe) {
    0x0000237a bhi.w 0x24a0                                      |         goto label_20;
                                                                 |     }
    0x0000237e cmp r3, 0xe                                       |     
                                                                 |     if (r3 > 0xe) {
    0x00002380 bhi.w 0x24a0                                      |         goto label_20;
                                                                 |     }
                                                                 |     /* switch table (15 cases) at 0x2388 */
    0x00002384 tbb [pc, r3]                                      |     __asm ("tbb [0x0000238c]");
    0x00002398 cmp r1, 0x78                                      |     
    0x0000239a itt eq                                            |     
                                                                 |     if (r1 != 0x78) {
    0x0000239c addeq r7, 8                                       |         r7 += 8;
                                                                 |     }
                                                                 |     if (r1 == 0x78) {
    0x0000239e addeq r4, r3, 2                                   |         r4 = r3 + 2;
                                                                 |         goto label_21;
                                                                 |     }
                                                                 |     if (r1 == 0x78) {
                                                                 | label_21:
    0x000023a0 beq 0x22d0                                        |         goto label_1;
                                                                 |     }
    0x000023a2 adds r7, 8                                        |     r7 += 8;
    0x000023a4 b 0x22d0                                          |     goto label_1;
    0x000023a6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000023a8 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x000023aa ldr r0, [r3]                                      |     r0 = *(r3);
    0x000023ac str r2, [sp, 0x14]                                |     var_14h = r2;
    0x000023ae bl 0x161c0                                        |     r0 = fcn_000161c0 (r0, r1);
    0x000023b2 add r7, r0                                        |     r7 += r0;
    0x000023b4 b 0x22d0                                          |     goto label_1;
    0x000023b6 ldrb r3, [r6, 2]                                  |     r3 = *((r6 + 2));
    0x000023b8 cmp r3, 0x78                                      |     
                                                                 |     if (r3 != 0x78) {
    0x000023ba bne 0x24a0                                        |         goto label_20;
                                                                 |     }
    0x000023bc ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000023be add.w r8, r4, 8                                   |     r8 = r4 + 8;
    0x000023c2 mov r2, r8                                        |     r2 = r8;
    0x000023c4 movs r1, 0                                        |     r1 = 0;
    0x000023c6 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000023c8 adds r3, 4                                        |     r3 += 4;
    0x000023ca str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000023cc movs r3, 0x10                                     |     r3 = 0x10;
    0x000023ce str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x000023d2 bl 0xfd84                                         |     r0 = fcn_0000fd84 (r0, r1, r2, r3, r4, r5, r6);
    0x000023d6 cmp r0, r4                                        |     
                                                                 |     if (r0 != r4) {
    0x000023d8 beq 0x23e4                                        |         
    0x000023da subs r2, r0, r4                                   |         r2 = r0 - r4;
    0x000023dc movs r1, 0x30                                     |         r1 = 0x30;
    0x000023de mov r0, r4                                        |         r0 = r4;
    0x000023e0 blx 0x159e0                                       |         fcn_000159e0 (r0, r1);
                                                                 |     }
    0x000023e4 ldrb r3, [r6, 3]                                  |     r3 = *((r6 + 3));
    0x000023e6 adds r5, r6, 2                                    |     r5 = r6 + 2;
    0x000023e8 mov r4, r8                                        |     r4 = r8;
    0x000023ea adds r6, r5, 1                                    |     r6 = r5 + 1;
    0x000023ec cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000023ee bne 0x2366                                        |         goto label_2;
                                                                 |     }
                                                                 | label_17:
    0x000023f0 cmp r7, r4                                        |     
                                                                 |     if (r7 == r4) {
    0x000023f2 beq 0x2472                                        |         goto label_18;
                                                                 |     }
    0x000023f4 mov r0, r4                                        |     r0 = r4;
    0x000023f6 movs r3, 0                                        |     r3 = 0;
    0x000023f8 strb r3, [r0], 1                                  |     *(r0) = r3;
                                                                 |     r0++;
    0x000023fc subs r7, r7, r0                                   |     r7 -= r0;
    0x000023fe ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00002400 cmp r7, r3                                        |     
                                                                 |     if (r7 != r3) {
    0x00002402 bne 0x2472                                        |         goto label_18;
                                                                 |     }
    0x00002404 mov r2, r3                                        |     r2 = r3;
    0x00002406 mov r1, sl                                        |     r1 = sl;
    0x00002408 blx 0x16400                                       |     fcn_00016400 (r0, r1);
    0x0000240c str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00002410 add sp, 0x1c                                      |     
    0x00002412 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00002416 add sp, 8                                         |     
    0x00002418 bx lr                                             |     return;
    0x0000241a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0000241c add.w r6, r4, 8                                   |     r6 = r4 + 8;
    0x00002420 mov r2, r6                                        |     r2 = r6;
    0x00002422 movs r1, 0                                        |     r1 = 0;
    0x00002424 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00002426 adds r3, 4                                        |     r3 += 4;
    0x00002428 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0000242a movs r3, 0x10                                     |     r3 = 0x10;
    0x0000242c str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00002430 bl 0xfd84                                         |     r0 = fcn_0000fd84 (r0, r1, r2, r3, r4, r5, r6);
    0x00002434 cmp r0, r4                                        |     
                                                                 |     if (r0 != r4) {
    0x00002436 beq 0x2442                                        |         
    0x00002438 subs r2, r0, r4                                   |         r2 = r0 - r4;
    0x0000243a movs r1, 0x30                                     |         r1 = 0x30;
    0x0000243c mov r0, r4                                        |         r0 = r4;
    0x0000243e blx 0x159e0                                       |         fcn_000159e0 (r0, r1);
                                                                 |     }
    0x00002442 mov r4, r6                                        |     r4 = r6;
    0x00002444 b 0x235e                                          |     goto label_3;
    0x00002446 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00002448 ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x0000244c adds r3, 4                                        |     r3 += 4;
    0x0000244e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00002450 mov r0, r8                                        |     r0 = r8;
    0x00002452 bl 0x161c0                                        |     fcn_000161c0 (r0, r1);
    0x00002456 subs r3, r7, r4                                   |     r3 = r7 - r4;
    0x00002458 mov r6, r0                                        |     r6 = r0;
    0x0000245a cmp r3, r0                                        |     
                                                                 |     if (r3 <= r0) {
    0x0000245c blo 0x2472                                        |         goto label_18;
                                                                 |     }
    0x0000245e mov r0, r4                                        |     r0 = r4;
    0x00002460 mov r2, r6                                        |     r2 = r6;
    0x00002462 mov r1, r8                                        |     r1 = r8;
    0x00002464 blx 0x16400                                       |     r0 = fcn_00016400 (r0, r1);
    0x00002468 adds r4, r0, r6                                   |     r4 = r0 + r6;
    0x0000246a b 0x235e                                          |     goto label_3;
                                                                 | label_19:
    0x0000246c cmp r7, r4                                        |     
                                                                 |     if (r7 != r4) {
    0x0000246e bne.w 0x235a                                      |         goto label_4;
                                                                 |     }
                                                                 | label_18:
    0x00002472 bl 0x21ec                                         |     fcn_000021ec ();
                                                                 | label_15:
    0x00002476 ldr r2, [pc, 0x38]                                |     
    0x00002478 movs r1, 0                                        |     r1 = 0;
    0x0000247a ldr r3, [pc, 0x38]                                |     
    0x0000247c str.w r1, [sb, 8]                                 |     __asm ("str.w r1, [sb, 8]");
    0x00002480 add r2, pc                                        |     r2 = 0x4936;
    0x00002482 add r3, pc                                        |     r3 = 0x493c;
    0x00002484 strd r2, r3, [sb]                                 |     __asm ("strd r2, r3, [sb]");
    0x00002488 add sp, 0x1c                                      |     
    0x0000248a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0000248e add sp, 8                                         |     
    0x00002490 bx lr                                             |     return;
                                                                 | label_12:
    0x00002492 ldr.w sl, [pc, 0x24]                              |     
    0x00002496 movs r3, 1                                        |     r3 = 1;
    0x00002498 movs r7, 2                                        |     r7 = 2;
    0x0000249a str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0000249c add sl, pc                                        |     sl = 0x495a;
    0x0000249e b 0x22c4                                          |     goto label_5;
                                                                 | label_20:
    0x000024a0 ldr r0, [pc, 0x18]                                |     
    0x000024a2 add r0, pc                                        |     r0 = 0x4962;
    0x000024a4 bl 0x8b5c                                         |     dl_fatal_printf ()
                                                                 |     if (r6 == 0) {
    0x000024a8 cbnz r6, 0x24e2                                   |         
    0x000024aa movs r1, r0                                       |         r1 = r0;
    0x000024ac pop {r1, r4, r6, r7}                              |         
    0x000024ae movs r1, r0                                       |         r1 = r0;
    0x000024b0 ldr r0, [r5, 0x6c]                                |         r0 = *((r5 + 0x6c));
    0x000024b2 movs r1, r0                                       |         r1 = r0;
    0x000024b4 str r6, [r3, 0x38]                                |         *((r3 + 0x38)) = r6;
    0x000024b6 movs r1, r0                                       |         r1 = r0;
    0x000024b8 ldr r4, [r1, 0x6c]                                |         r4 = *((r1 + 0x6c));
    0x000024ba movs r1, r0                                       |         r1 = r0;
    0x000024bc str r2, [r1, 0x34]                                |         *((r1 + 0x34)) = r2;
    0x000024be movs r1, r0                                       |         r1 = r0;
                                                                 |     }
    0x000024e2 push {r3, r4, r5, r6, r7, lr}                     |     
    0x000024e4 mov r4, r0                                        |     r4 = r0;
    0x000024e6 ldr r3, [pc, 0x110]                               |     
    0x000024e8 add r2, pc                                        |     r2 += pc;
    0x000024ea ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x000024ec ldr r0, [r0]                                      |     r0 = *(r0);
    0x000024ee add r3, pc                                        |     r3 = 0x4aec;
    0x000024f0 ldr r2, [r3]                                      |     r2 = *(0x4aec);
    0x000024f2 rsbs r3, r1, 0                                    |     r3 = r1 - ;
    0x000024f4 ands r0, r3                                       |     r0 &= r3;
    0x000024f6 bl 0x15040                                        |     r0 = fcn_00015040 (r0);
    0x000024fa cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000024fc bne 0x25dc                                        |         goto label_22;
                                                                 |     }
    0x000024fe ldr r2, [pc, 0xfc]                                |     
    0x00002500 str r0, [r4]                                      |     *(r4) = r0;
    0x00002502 add r2, pc                                        |     r2 = 0x4b04;
    0x00002504 ldr.w r3, [r2, 0x8e0]                             |     r3 = *(0x53e4);
    0x00002508 orr r3, r3, 1                                     |     r3 |= 1;
    0x0000250c str.w r3, [r2, 0x8e0]                             |     __asm ("str.w r3, [r2, 0x8e0]");
                                                                 | label_10:
    0x00002510 ldr r0, [pc, 0xec]                                |     
    0x00002512 movs r3, 1                                        |     r3 = 1;
    0x00002514 add r0, pc                                        |     r0 = 0x4b18;
    0x00002516 addw r0, r0, 0x928                                |     __asm ("addw r0, r0, 0x928");
                                                                 |     do {
    0x0000251a ldrex r2, [r0]                                    |         __asm ("ldrex r2, [r0]");
    0x0000251e cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00002520 bne 0x252e                                        |             goto label_23;
                                                                 |         }
    0x00002522 strex r1, r3, [r0]                                |         __asm ("strex r1, r3, [r0]");
    0x00002526 cmp r1, 0                                         |         
    0x00002528 bne 0x251a                                        |         
                                                                 |     } while (r1 != 0);
    0x0000252a dmb ish                                           |     __asm ("dmb ish");
                                                                 |     if (r1 != 0) {
                                                                 | label_23:
    0x0000252e bne 0x25ee                                        |         goto label_24;
                                                                 |     }
                                                                 | label_11:
    0x00002530 ldr r3, [pc, 0xd0]                                |     
    0x00002532 add r3, pc                                        |     r3 = 0x4b3a;
    0x00002534 ldr.w r4, [r3, 0x908]                             |     r4 = *(0x5442);
    0x00002538 addw r3, r3, 0x908                                |     __asm ("addw r3, r3, 0x908");
    0x0000253c cmp r4, r3                                        |     
                                                                 |     if (r4 == r3) {
    0x0000253e beq 0x2592                                        |         goto label_25;
                                                                 |     }
    0x00002540 ldr r5, [pc, 0xc4]                                |     
    0x00002542 ldr r6, [pc, 0xc8]                                |     
    0x00002544 add r5, pc                                        |     r5 = 0x4b50;
    0x00002546 add r6, pc                                        |     r6 = 0x4b58;
    0x00002548 addw r5, r5, 0x908                                |     __asm ("addw r5, r5, 0x908");
    0x0000254c b 0x2554                                          |     
                                                                 |     while (r0 == 0) {
                                                                 | label_6:
    0x0000254e ldr r4, [r4]                                      |         r4 = *(r4);
    0x00002550 cmp r4, r5                                        |         
                                                                 |         if (r4 == r5) {
    0x00002552 beq 0x2592                                        |             goto label_25;
                                                                 |         }
    0x00002554 ldrd r1, r3, [r4, 0x244]                          |         __asm ("ldrd r1, r3, [r4, 0x244]");
    0x00002558 movs r2, 7                                        |         r2 = 7;
    0x0000255a ldr.w r0, [r4, 0x240]                             |         r0 = *((r4 + 0x240));
    0x0000255e subs r1, r1, r3                                   |         r1 -= r3;
    0x00002560 add r0, r3                                        |         r0 += r3;
    0x00002562 bl 0x15040                                        |         r0 = fcn_00015040 (r0);
    0x00002566 cmp r0, 0                                         |         
    0x00002568 beq 0x254e                                        |         
                                                                 |     }
    0x0000256a ldr r7, [r6]                                      |     r7 = *(r6);
    0x0000256c cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0000256e beq 0x254e                                        |         goto label_6;
                                                                 |     }
                                                                 | label_7:
    0x00002570 ldr r0, [pc, 0x9c]                                |     
    0x00002572 movs r2, 0                                        |     r2 = 0;
    0x00002574 dmb ish                                           |     __asm ("dmb ish");
    0x00002578 add r0, pc                                        |     r0 = 0x4b8c;
    0x0000257a addw r0, r0, 0x928                                |     __asm ("addw r0, r0, 0x928");
                                                                 |     do {
    0x0000257e ldrex r3, [r0]                                    |         __asm ("ldrex r3, [r0]");
    0x00002582 strex r1, r2, [r0]                                |         __asm ("strex r1, r2, [r0]");
    0x00002586 cmp r1, 0                                         |         
    0x00002588 bne 0x257e                                        |         
                                                                 |     } while (r1 != 0);
    0x0000258a cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x0000258c bgt 0x25e8                                        |         goto label_26;
                                                                 |     }
                                                                 | label_9:
    0x0000258e mov r0, r7                                        |     r0 = r7;
    0x00002590 pop {r3, r4, r5, r6, r7, pc}                      |     
                                                                 | label_25:
    0x00002592 ldr r3, [pc, 0x80]                                |     
    0x00002594 add r3, pc                                        |     r3 = 0x4bae;
    0x00002596 ldr.w r4, [r3, 0x918]                             |     r4 = *(0x54c6);
    0x0000259a addw r3, r3, 0x918                                |     __asm ("addw r3, r3, 0x918");
    0x0000259e cmp r4, r3                                        |     
                                                                 |     if (r4 == r3) {
    0x000025a0 beq 0x25d8                                        |         goto label_27;
                                                                 |     }
    0x000025a2 ldr r5, [pc, 0x74]                                |     
    0x000025a4 ldr r6, [pc, 0x74]                                |     
    0x000025a6 add r5, pc                                        |     r5 = 0x4bc4;
    0x000025a8 add r6, pc                                        |     r6 = 0x4bc8;
    0x000025aa addw r5, r5, 0x918                                |     __asm ("addw r5, r5, 0x918");
    0x000025ae b 0x25b6                                          |     
                                                                 |     while (r0 == 0) {
    0x000025b0 ldr r4, [r4]                                      |         r4 = *(r4);
    0x000025b2 cmp r4, r5                                        |         
                                                                 |         if (r4 == r5) {
    0x000025b4 beq 0x25d8                                        |             goto label_27;
                                                                 |         }
                                                                 | label_8:
    0x000025b6 ldrd r1, r3, [r4, 0x244]                          |         __asm ("ldrd r1, r3, [r4, 0x244]");
    0x000025ba movs r2, 7                                        |         r2 = 7;
    0x000025bc ldr.w r0, [r4, 0x240]                             |         r0 = *((r4 + 0x240));
    0x000025c0 subs r1, r1, r3                                   |         r1 -= r3;
    0x000025c2 add r0, r3                                        |         r0 += r3;
    0x000025c4 bl 0x15040                                        |         r0 = fcn_00015040 (r0);
    0x000025c8 cmp r0, 0                                         |         
    0x000025ca beq 0x25b0                                        |         
                                                                 |     }
    0x000025cc ldr r7, [r6]                                      |     r7 = *(r6);
    0x000025ce cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000025d0 bne 0x2570                                        |         goto label_7;
                                                                 |     }
    0x000025d2 ldr r4, [r4]                                      |     r4 = *(r4);
    0x000025d4 cmp r4, r5                                        |     
                                                                 |     if (r4 != r5) {
    0x000025d6 bne 0x25b6                                        |         goto label_8;
                                                                 |     }
                                                                 | label_27:
    0x000025d8 movs r7, 0                                        |     r7 = 0;
    0x000025da b 0x2570                                          |     goto label_7;
                                                                 | label_22:
    0x000025dc ldr r3, [pc, 0x40]                                |     
    0x000025de add r3, pc                                        |     r3 = 0x4c02;
    0x000025e0 ldr r7, [r3]                                      |     r7 = *(0x4c02);
    0x000025e2 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000025e4 bne 0x258e                                        |         goto label_9;
                                                                 |     }
    0x000025e6 b 0x2510                                          |     goto label_10;
                                                                 | label_26:
    0x000025e8 bl 0x1518c                                        |     fcn_0001518c ();
    0x000025ec b 0x258e                                          |     goto label_9;
                                                                 | label_24:
    0x000025ee bl 0x150f0                                        |     fcn_000150f0 (r0);
    0x000025f2 b 0x2530                                          |     goto label_11;
                                                                 | }

[*] Function printf used 20 times ld-linux-armhf.so.3