[*] Binary protection state of libbrotlienc.so.1.0.9

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


[*] Function fprintf tear down of libbrotlienc.so.1.0.9

    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libbrotlienc.so.1.0.9 @ 0x26b98 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00026b98 ()                      | void fcn_00026b98 (int16_t arg_24h, int16_t arg_28h, void * arg_2ch, int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_40h, int16_t arg_50h, int16_t arg_60h, int16_t arg_45ch, void * arg_470h, int16_t arg_880h, int16_t arg_884h, int16_t arg1, int16_t arg2) {
                                                 |     void * s2;
                                                 |     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;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x00026b98 svcmi 0xf0e92d                    |     __asm ("svcmi aav.0x000000ff");
    0x00026b9c mov r5, r0                        |     r5 = r0;
    0x00026b9e ldr r7, [r0, 0x24]                |     r7 = *(arg_24hx24);
    0x00026ba0 mov r8, r1                        |     r8 = r1;
    0x00026ba2 ldr r3, [r0, 4]                   |     r3 = *((r0 + 4));
    0x00026ba4 ldr.w r2, [pc, 0x5f8]             |     
    0x00026ba8 vpush {d8, d9, d10, d11}          |     __asm ("vpush {d8, d9, d10, d11}");
    0x00026bac subw sp, sp, 0x88c                |     __asm ("subw sp, sp, aav.0x000000ff");
    0x00026bb0 cmp r7, r3                        |     
    0x00026bb2 ldrd sl, sb, [r0, 0x10]           |     __asm ("ldrd sl, sb, [arg_24hx10]");
    0x00026bb6 it lo                             |     
                                                 |     if (r7 >= r3) {
    0x00026bb8 movlo r7, r3                      |         r7 = r3;
                                                 |     }
    0x00026bba ldr.w r3, [pc, 0x5e8]             |     r3 = *(0x271a6);
    0x00026bbe add r2, pc                        |     r2 = 0x4dd62;
    0x00026bc0 ldr.w fp, [r0, 0x18]              |     fp = *(arg_24hx18);
    0x00026bc4 ldr r3, [r2, r3]                  |     
    0x00026bc6 ldr r3, [r3]                      |     r3 = *(0x4dd62);
    0x00026bc8 str.w r3, [sp, 0x884]             |     __asm ("str.w r3, [arg_884h]");
    0x00026bcc mov.w r3, 0                       |     r3 = 0;
    0x00026bd0 str r7, [r0, 0x24]                |     *(arg_24hx24) = r7;
    0x00026bd2 cmp.w sl, 0                       |     
                                                 |     if (sl != 0) {
    0x00026bd6 bne 0x26c2c                       |         goto label_16;
                                                 |     }
    0x00026bd8 ldr.w r3, [sb, 0xc]               |     r3 = *((sb + 0xc));
    0x00026bdc str r7, [r3]                      |     *(r3) = r7;
    0x00026bde ldr.w r3, [sb, 8]                 |     r3 = *((sb + 8));
    0x00026be2 strb.w sl, [r3]                   |     *(r3) = sl;
    0x00026be6 mov r3, fp                        |     r3 = fp;
    0x00026be8 ldr r6, [r0]                      |     r6 = *(r0);
    0x00026bea add.w r7, fp, r6, lsl 2           |     r7 = fp + (r6 << 2);
    0x00026bee ands r6, r6, 1                    |     r6 &= 1;
                                                 |     if (r6 != r6) {
    0x00026bf2 bne 0x26ce6                       |         goto label_17;
                                                 |     }
    0x00026bf4 cmp fp, r7                        |     
                                                 |     if (fp >= r7) {
    0x00026bf6 bhs.w 0x26db6                     |         void (*0x26db6)() ();
                                                 |     }
    0x00026bfa vmov.i64 d8, 0                    |     __asm ("vmov.i64 d8, 0");
                                                 | label_2:
    0x00026bfe mov r4, r3                        |     r4 = r3;
    0x00026c00 ldr r3, [r4], 4                   |     r3 = *(r4);
                                                 |     r4 += 4;
    0x00026c04 cmp r3, 0xff                      |     
    0x00026c06 add.w sl, r3, r6                  |     sl = r3 + r6;
    0x00026c0a vmov s15, r3                      |     __asm ("vmov s15, r3");
    0x00026c0e vcvt.f64.u32 d9, s15              |     __asm ("vcvt.f64.u32 d9, s15");
                                                 |     if (r3 > 0xff) {
    0x00026c12 bhi.w 0x26dc4                     |         goto label_18;
                                                 |     }
    0x00026c16 ldr.w r2, [pc, 0x590]             |     
    0x00026c1a add r2, pc                        |     r2 = 0x4ddc8;
    0x00026c1c add.w r3, r2, r3, lsl 3           |     r3 = r2 + (r3 << 3);
    0x00026c20 vldr d0, [r3]                     |     __asm ("vldr d0, [r3]");
                                                 | label_1:
    0x00026c24 vmls.f64 d8, d9, d0               |     __asm ("vmls.f64 d8, d9, d0");
    0x00026c28 mov r3, r4                        |     r3 = r4;
    0x00026c2a b 0x26cea                         |     goto label_19;
                                                 | label_16:
    0x00026c2c cmp r7, 0                         |     
                                                 |     if (r7 == 0) {
    0x00026c2e beq.w 0x26d78                     |         void (*0x26d78)() ();
                                                 |     }
    0x00026c32 ldr r3, [r0, 0x28]                |     r3 = *(arg_24hx28);
    0x00026c34 ldr r2, [r0]                      |     r2 = *(r0);
    0x00026c36 add.w r3, r3, r3, lsl 6           |     r3 += (r3 << 6);
    0x00026c3a ands r6, r2, 1                    |     r6 = r2 & 1;
    0x00026c3e lsl.w r1, r2, 2                   |     r1 = r2 << 2;
    0x00026c42 str r6, [sp, 4]                   |     var_4h = r6;
    0x00026c44 add.w r3, fp, r3, lsl 4           |     r3 = fp + (r3 << 4);
    0x00026c48 str r1, [sp, 0xc]                 |     var_ch = r1;
    0x00026c4a mov r0, r3                        |     r0 = r3;
    0x00026c4c mov r4, r3                        |     r4 = r3;
    0x00026c4e str r3, [sp]                      |     *(sp) = r3;
    0x00026c50 add r3, r1                        |     r3 += r1;
                                                 |     if (r6 != r2) {
    0x00026c52 bne.w 0x26dbc                     |         goto label_20;
                                                 |     }
    0x00026c56 cmp r0, r3                        |     
                                                 |     if (r0 >= r3) {
    0x00026c58 bhs.w 0x26dd2                     |         goto label_21;
                                                 |     }
    0x00026c5c vmov.i64 d8, 0                    |     __asm ("vmov.i64 d8, 0");
                                                 |     do {
    0x00026c60 ldr r2, [r4], 4                   |         r2 = *(r4);
                                                 |         r4 += 4;
    0x00026c64 cmp r2, 0xff                      |         
    0x00026c66 add r6, r2                        |         r6 += r2;
    0x00026c68 vmov s15, r2                      |         __asm ("vmov s15, r2");
    0x00026c6c vcvt.f64.u32 d9, s15              |         __asm ("vcvt.f64.u32 d9, s15");
                                                 |         if (r2 > 0xff) {
    0x00026c70 bhi.w 0x26f24                     |             goto label_22;
                                                 |         }
    0x00026c74 ldr.w r1, [pc, 0x534]             |         
    0x00026c78 add r1, pc                        |         r1 = 0x4de28;
    0x00026c7a add.w r2, r1, r2, lsl 3           |         r2 = r1 + (r2 << 3);
    0x00026c7e vldr d0, [r2]                     |         __asm ("vldr d0, [r2]");
                                                 | label_4:
    0x00026c82 vmls.f64 d8, d9, d0               |         __asm ("vmls.f64 d8, d9, d0");
                                                 | label_0:
    0x00026c86 ldr r2, [r4], 4                   |         r2 = *(r4);
                                                 |         r4 += 4;
    0x00026c8a cmp r2, 0xff                      |         
    0x00026c8c add r6, r2                        |         r6 += r2;
    0x00026c8e vmov s15, r2                      |         __asm ("vmov s15, r2");
    0x00026c92 vcvt.f64.u32 d9, s15              |         __asm ("vcvt.f64.u32 d9, s15");
                                                 |         if (r2 > 0xff) {
    0x00026c96 bhi.w 0x26fee                     |             goto label_23;
                                                 |         }
    0x00026c9a ldr.w r1, [pc, 0x514]             |         
    0x00026c9e add r1, pc                        |         r1 = 0x4de54;
    0x00026ca0 add.w r2, r1, r2, lsl 3           |         r2 = r1 + (r2 << 3);
    0x00026ca4 vldr d0, [r2]                     |         __asm ("vldr d0, [r2]");
                                                 | label_6:
    0x00026ca8 cmp r3, r4                        |         
    0x00026caa vmls.f64 d8, d9, d0               |         __asm ("vmls.f64 d8, d9, d0");
    0x00026cae bhi 0x26c60                       |         
                                                 |     } while (r3 > r4);
    0x00026cb0 cmp r6, 0                         |     
                                                 |     if (r6 == 0) {
    0x00026cb2 beq.w 0x27162                     |         goto label_24;
                                                 |     }
    0x00026cb6 cmp r6, 0xff                      |     
    0x00026cb8 vmov s15, r6                      |     __asm ("vmov s15, r6");
    0x00026cbc vcvt.f64.u32 d9, s15              |     __asm ("vcvt.f64.u32 d9, s15");
                                                 |     if (r6 > 0xff) {
    0x00026cc0 bhi.w 0x270a0                     |         goto label_25;
                                                 |     }
    0x00026cc4 ldr.w r3, [pc, 0x4ec]             |     
    0x00026cc8 add r3, pc                        |     r3 = 0x4de80;
    0x00026cca add.w r3, r3, r6, lsl 3           |     r3 += (r6 << 3);
    0x00026cce vldr d0, [r3]                     |     __asm ("vldr d0, [r3]");
                                                 | label_8:
    0x00026cd2 vmla.f64 d8, d9, d0               |     __asm ("vmla.f64 d8, d9, d0");
                                                 | label_13:
    0x00026cd6 vcmpe.f64 d8, d9                  |     __asm ("vcmpe.f64 d8, d9");
    0x00026cda vmrs apsr_nzcv, fpscr             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00026cde it pl                             |     
                                                 |     if (r6 >= 0xff) {
    0x00026ce0 vmovpl d9, d8                     |         __asm ("vmovpl d9, d8");
                                                 |     }
    0x00026ce4 b 0x26dd6                         |     goto label_26;
                                                 | label_17:
    0x00026ce6 vmov.i64 d8, 0                    |     __asm ("vmov.i64 d8, 0");
                                                 | label_19:
    0x00026cea mov r4, r3                        |     r4 = r3;
    0x00026cec ldr r3, [r4], 4                   |     r3 = *(r4);
                                                 |     r4 += 4;
    0x00026cf0 cmp r3, 0xff                      |     
    0x00026cf2 add.w r6, r3, sl                  |     r6 = r3 + sl;
    0x00026cf6 vmov s15, r3                      |     __asm ("vmov s15, r3");
    0x00026cfa vcvt.f64.u32 d9, s15              |     __asm ("vcvt.f64.u32 d9, s15");
                                                 |     if (r3 > 0xff) {
    0x00026cfe bhi.w 0x26ee4                     |         goto label_27;
                                                 |     }
    0x00026d02 ldr.w r2, [pc, 0x4b4]             |     
    0x00026d06 add r2, pc                        |     r2 = 0x4dec4;
    0x00026d08 add.w r3, r2, r3, lsl 3           |     r3 = r2 + (r3 << 3);
    0x00026d0c vldr d0, [r3]                     |     __asm ("vldr d0, [r3]");
                                                 | label_3:
    0x00026d10 cmp r7, r4                        |     
    0x00026d12 vmls.f64 d8, d9, d0               |     __asm ("vmls.f64 d8, d9, d0");
                                                 |     if (r7 <= r4) {
    0x00026d16 bhi 0x26dce                       |         
    0x00026d18 cmp r6, 0                         |         
                                                 |         if (r6 == 0) {
    0x00026d1a beq.w 0x27152                     |             goto label_28;
                                                 |         }
    0x00026d1e cmp r6, 0xff                      |         
    0x00026d20 vmov s15, r6                      |         __asm ("vmov s15, r6");
    0x00026d24 vcvt.f64.u32 d9, s15              |         __asm ("vcvt.f64.u32 d9, s15");
                                                 |         if (r6 > 0xff) {
    0x00026d28 bhi.w 0x26f1a                     |             goto label_29;
                                                 |         }
    0x00026d2c ldr.w r3, [pc, 0x48c]             |         
    0x00026d30 add r3, pc                        |         r3 = 0x4def0;
    0x00026d32 add.w r3, r3, r6, lsl 3           |         r3 += (r6 << 3);
    0x00026d36 vldr d0, [r3]                     |         __asm ("vldr d0, [r3]");
    0x00026d3a vmla.f64 d8, d9, d0               |         __asm ("vmla.f64 d8, d9, d0");
                                                 | label_11:
    0x00026d3e vcmpe.f64 d8, d9                  |         __asm ("vcmpe.f64 d8, d9");
    0x00026d42 vmrs apsr_nzcv, fpscr             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x00026d46 it pl                             |         
                                                 |         if (r6 >= 0xff) {
    0x00026d48 vmovpl d9, d8                     |             __asm ("vmovpl d9, d8");
                                                 |         }
                                                 | label_20:
    0x00026dbc vmov.i64 d8, 0                    |         __asm ("vmov.i64 d8, 0");
    0x00026dc0 movs r6, 0                        |         r6 = 0;
    0x00026dc2 b 0x26c86                         |         goto label_0;
                                                 | label_18:
    0x00026dc4 vmov.f64 d0, d9                   |         __asm ("vmov.f64 d0, d9");
    0x00026dc8 blx 0x830                         |         log2 (r0);
    0x00026dcc b 0x26c24                         |         goto label_1;
                                                 |     }
    0x00026dce mov r3, r4                        |     r3 = r4;
    0x00026dd0 b 0x26bfe                         |     goto label_2;
                                                 | label_21:
    0x00026dd2 vmov.i64 d9, 0                    |     __asm ("vmov.i64 d9, 0");
                                                 | label_26:
    0x00026dd6 ldr r3, [pc, 0x3ec]               |     
    0x00026dd8 add.w r1, r5, 0x2c                |     r1 = r5 + 0x2c;
    0x00026ddc vmov.i64 d11, 0                   |     __asm ("vmov.i64 d11, 0");
    0x00026de0 add r2, sp, 0x50                  |     r2 += arg_50h;
    0x00026de2 str r1, [sp, 8]                   |     var_8h = r1;
    0x00026de4 addw r6, sp, 0x45c                |     __asm ("addw r6, arg_45ch");
    0x00026de8 add r3, pc                        |     r3 = 0x4dfb2;
    0x00026dea add.w r1, r5, 0x38                |     r1 = r5 + 0x38;
    0x00026dee str r3, [sp, 0x30]                |     *(arg_30h) = r3;
    0x00026df0 add r0, sp, 0x40                  |     r0 += arg_40h;
    0x00026df2 ldr r3, [pc, 0x3d4]               |     
    0x00026df4 str r5, [sp, 0x24]                |     *(arg_24h) = r5;
    0x00026df6 str r2, [sp, 0x20]                |     var_20h = r2;
    0x00026df8 add r3, pc                        |     r3 = 0x4dfc6;
    0x00026dfa strd r2, r1, [sp, 0x10]           |     __asm ("strd r2, r1, [sp, 0x10]");
    0x00026dfe str r3, [sp, 0x34]                |     *(arg_34h) = r3;
    0x00026e00 lsrs r6, r7, 0x14                 |     r6 = r7 >> 0x14;
    0x00026e02 lsls r2, r2, 1                    |     r2 <<= 1;
    0x00026e04 add.w r2, sp, 0x880               |     r2 += arg_880h;
    0x00026e08 str r3, [sp, 0x2c]                |     *(arg_2ch) = r3;
    0x00026e0a str r0, [sp, 0x28]                |     *(arg_28h) = r0;
    0x00026e0c str r0, [sp, 0x18]                |     var_18h = r0;
    0x00026e0e str r2, [sp, 0x1c]                |     var_1ch = r2;
                                                 | label_5:
    0x00026e10 ldr r3, [sp, 8]                   |     r3 = var_8h;
    0x00026e12 mov.w r2, 0x410                   |     r2 = 0x410;
    0x00026e16 ldr r1, [sp]                      |     r1 = *(sp);
    0x00026e18 mov r0, r5                        |     r0 = r5;
    0x00026e1a ldr r4, [r3], 4                   |     r4 = *(r3);
                                                 |     r3 += 4;
    0x00026e1e str r3, [sp, 8]                   |     var_8h = r3;
    0x00026e20 lsrs r6, r7, 0x14                 |     r6 = r7 >> 0x14;
    0x00026e22 lsls r2, r2, 1                    |     r2 <<= 1;
    0x00026e24 blx 0x86c                         |     memcpy (r0, r1, r2);
    0x00026e28 add.w ip, fp, r4, lsl 4           |     
    0x00026e2c ldr.w r1, [r5, 0x400]             |     r1 = *((r5 + 0x400));
    0x00026e30 mov r4, r5                        |     r4 = r5;
    0x00026e32 ldr.w r0, [ip, 0x400]             |     r0 = *((ip + 0x400));
    0x00026e36 subs r2, r5, 4                    |     r2 = r5 - 4;
    0x00026e38 add r1, r0                        |     r1 += r0;
    0x00026e3a sub.w r0, ip, 4                   |     r0 = ip - 4;
    0x00026e3e str.w r1, [r5, 0x400]             |     __asm ("str.w r1, aav.0x000000ff");
                                                 |     do {
    0x00026e42 ldr r3, [r2, 4]!                  |         r3 = *((r2 += 4));
    0x00026e46 ldr r1, [r0, 4]!                  |         r1 = *((r0 += 4));
    0x00026e4a cmp r6, r2                        |         
    0x00026e4c add r3, r1                        |         r3 += r1;
    0x00026e4e str r3, [r2]                      |         *(r2) = r3;
    0x00026e50 bne 0x26e42                       |         
                                                 |     } while (r6 != r2);
    0x00026e52 ldr r2, [sp, 4]                   |     r2 = var_4h;
    0x00026e54 cmp r2, 0                         |     
                                                 |     if (r2 != 0) {
    0x00026e56 bne.w 0x27094                     |         goto label_30;
                                                 |     }
    0x00026e5a ldr r3, [sp, 0xc]                 |     r3 = var_ch;
    0x00026e5c adds r1, r3, r5                   |     r1 = r3 + r5;
    0x00026e5e cmp r5, r1                        |     
                                                 |     if (r5 >= r1) {
    0x00026e60 bhs 0x26f32                       |         goto label_31;
                                                 |     }
    0x00026e62 vmov.i64 d8, 0                    |     __asm ("vmov.i64 d8, 0");
                                                 |     do {
    0x00026e66 ldr r0, [r4], 4                   |         r0 = *(r4);
                                                 |         r4 += 4;
    0x00026e6a cmp r0, 0xff                      |         
    0x00026e6c add r2, r0                        |         r2 += r0;
    0x00026e6e vmov s15, r0                      |         __asm ("vmov s15, r0");
    0x00026e72 vcvt.f64.u32 d10, s15             |         __asm ("vcvt.f64.u32 d10, s15");
                                                 |         if (r0 > 0xff) {
    0x00026e76 bhi.w 0x270aa                     |             goto label_32;
                                                 |         }
    0x00026e7a ldr.w ip, [pc, 0x350]             |         
    0x00026e7e add ip, pc                        |         ip = 0x4e050;
    0x00026e80 add.w r0, ip, r0, lsl 3           |         r0 = ip + (r0 << 3);
    0x00026e84 vldr d0, [r0]                     |         __asm ("vldr d0, [r0]");
                                                 | label_9:
    0x00026e88 vmls.f64 d8, d10, d0              |         __asm ("vmls.f64 d8, d10, d0");
                                                 | label_7:
    0x00026e8c ldr r0, [r4], 4                   |         r0 = *(r4);
                                                 |         r4 += 4;
    0x00026e90 cmp r0, 0xff                      |         
    0x00026e92 add r2, r0                        |         r2 += r0;
    0x00026e94 vmov s15, r0                      |         __asm ("vmov s15, r0");
    0x00026e98 vcvt.f64.u32 d10, s15             |         __asm ("vcvt.f64.u32 d10, s15");
                                                 |         if (r0 > 0xff) {
    0x00026e9c bhi.w 0x270bc                     |             goto label_33;
                                                 |         }
    0x00026ea0 ldr r3, [sp, 0x34]                |         r3 = *(arg_34h);
    0x00026ea2 add.w r0, r3, r0, lsl 3           |         r0 = r3 + (r0 << 3);
    0x00026ea6 vldr d0, [r0]                     |         __asm ("vldr d0, [r0]");
                                                 | label_10:
    0x00026eaa cmp r4, r1                        |         
    0x00026eac vmls.f64 d8, d10, d0              |         __asm ("vmls.f64 d8, d10, d0");
    0x00026eb0 blo 0x26e66                       |         
                                                 |     } while (r4 <= r1);
    0x00026eb2 cmp r2, 0                         |     
                                                 |     if (r2 == 0) {
    0x00026eb4 beq.w 0x27168                     |         goto label_34;
                                                 |     }
    0x00026eb8 cmp r2, 0xff                      |     
    0x00026eba vmov s15, r2                      |     __asm ("vmov s15, r2");
    0x00026ebe vcvt.f64.u32 d10, s15             |     __asm ("vcvt.f64.u32 d10, s15");
                                                 |     if (r2 > 0xff) {
    0x00026ec2 bhi.w 0x27158                     |         goto label_35;
                                                 |     }
    0x00026ec6 ldr r3, [sp, 0x30]                |     r3 = *(arg_30h);
    0x00026ec8 add.w r2, r3, r2, lsl 3           |     r2 = r3 + (r2 << 3);
    0x00026ecc vldr d0, [r2]                     |     __asm ("vldr d0, [r2]");
                                                 | label_12:
    0x00026ed0 vmla.f64 d8, d10, d0              |     __asm ("vmla.f64 d8, d10, d0");
                                                 | label_14:
    0x00026ed4 vcmpe.f64 d10, d8                 |     __asm ("vcmpe.f64 d10, d8");
    0x00026ed8 vmrs apsr_nzcv, fpscr             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00026edc it le                             |     
                                                 |     if (r2 <= 0xff) {
    0x00026ede vmovle d10, d8                    |         __asm ("vmovle d10, d8");
                                                 |     }
    0x00026ee2 b 0x26f36                         |     goto label_36;
                                                 | label_27:
    0x00026ee4 vmov.f64 d0, d9                   |     __asm ("vmov.f64 d0, d9");
    0x00026ee8 blx 0x830                         |     log2 (r0);
    0x00026eec b 0x26d10                         |     goto label_3;
                                                 | label_29:
    0x00026f1a vmov.f64 d0, d9                   |     __asm ("vmov.f64 d0, d9");
    0x00026f1e invalid                           |     
    0x00026f22 lsls r2, r2, 1                    |     r2 <<= 1;
                                                 | label_22:
    0x00026f24 vmov.f64 d0, d9                   |     __asm ("vmov.f64 d0, d9");
    0x00026f28 str r3, [sp, 8]                   |     var_8h = r3;
    0x00026f2a blx 0x830                         |     log2 (r0);
    0x00026f2e ldr r3, [sp, 8]                   |     r3 = var_8h;
    0x00026f30 b 0x26c82                         |     goto label_4;
                                                 | label_31:
    0x00026f32 vmov.i64 d10, 0                   |     __asm ("vmov.i64 d10, 0");
                                                 | label_36:
    0x00026f36 ldr r3, [sp, 0x14]                |     r3 = var_14h;
    0x00026f38 add.w r5, r5, 0x410               |     r5 += 0x410;
    0x00026f3c vsub.f64 d16, d10, d9             |     __asm ("vsub.f64 d16, d10, d9");
    0x00026f40 add.w r6, r6, 0x410               |     r6 += 0x410;
    0x00026f44 vldmia r3!, {d17}                 |     __asm ("vldmia r3!, {d17}");
    0x00026f48 str r3, [sp, 0x14]                |     var_14h = r3;
    0x00026f4a ldr r3, [sp, 0x18]                |     r3 = var_18h;
    0x00026f4c vsub.f64 d16, d16, d17            |     __asm ("vsub.f64 d16, d16, d17");
    0x00026f50 vstmia r3!, {d10}                 |     __asm ("vstmia r3!, {d10}");
    0x00026f54 str r3, [sp, 0x18]                |     var_18h = r3;
    0x00026f56 ldr r3, [sp, 0x10]                |     r3 = var_10h;
    0x00026f58 vstmia r3!, {d16}                 |     __asm ("vstmia r3!, {d16}");
    0x00026f5c str r3, [sp, 0x10]                |     var_10h = r3;
    0x00026f5e ldr r3, [sp, 0x1c]                |     r3 = var_1ch;
    0x00026f60 cmp r3, r5                        |     
                                                 |     if (r3 != r5) {
    0x00026f62 bne.w 0x26e10                     |         goto label_5;
                                                 |     }
    0x00026f66 ldrd r3, r5, [sp, 0x20]           |     __asm ("ldrd r3, r5, [var_20h]");
    0x00026f6a ldr.w r0, [sb, 0xc]               |     r0 = *((sb + 0xc));
    0x00026f6e vldr d16, [r3]                    |     __asm ("vldr d16, [r3]");
    0x00026f72 vldr d17, [r3, 8]                 |     __asm ("vldr d17, [r3, 8]");
    0x00026f76 ldr.w r3, [sb]                    |     r3 = *(sb);
    0x00026f7a cmp r3, 0xff                      |     
                                                 |     if (r3 > 0xff) {
    0x00026f7c bhi 0x26ffc                       |         goto label_37;
                                                 |     }
    0x00026f7e vldr d18, [r5, 8]                 |     __asm ("vldr d18, [r5, 8]");
    0x00026f82 vcmpe.f64 d18, d16                |     __asm ("vcmpe.f64 d18, d16");
    0x00026f86 vmrs apsr_nzcv, fpscr             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                 |     if (r3 >= 0xff) {
    0x00026f8a bpl 0x26ffc                       |         goto label_37;
                                                 |     }
    0x00026f8c vcmpe.f64 d18, d17                |     __asm ("vcmpe.f64 d18, d17");
    0x00026f90 vmrs apsr_nzcv, fpscr             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                 |     if (r3 >= 0xff) {
    0x00026f94 bpl 0x26ffc                       |         goto label_37;
                                                 |     }
    0x00026f96 str.w r7, [r0, sl, lsl 2]         |     __asm ("str.w r7, [r0, sl, lsl 2]");
    0x00026f9a ldr.w r2, [sb, 8]                 |     r2 = *((sb + 8));
    0x00026f9e ldr.w r1, [sb]                    |     r1 = *(sb);
    0x00026fa2 ldr r3, [r5, 0x10]                |     r3 = *((r5 + 0x10));
    0x00026fa4 strb r1, [r2, r3]                 |     *((r2 + r3)) = r1;
    0x00026fa6 ldr r3, [r5, 0x2c]                |     r3 = *((r5 + 0x2c));
    0x00026fa8 ldr.w r2, [sb]                    |     r2 = *(sb);
    0x00026fac ldrd r6, r7, [r5, 0x38]           |     __asm ("ldrd r6, r7, [r5, 0x38]");
    0x00026fb0 str r3, [r5, 0x30]                |     *((r5 + 0x30)) = r3;
    0x00026fb2 ldr r3, [r5, 0x10]                |     r3 = *((r5 + 0x10));
    0x00026fb4 ldr r1, [r5, 0x1c]                |     r1 = *((r5 + 0x1c));
    0x00026fb6 uxtb r0, r2                       |     r0 = (int8_t) r2;
    0x00026fb8 adds r2, 1                        |     r2++;
    0x00026fba strd r6, r7, [r5, 0x40]           |     __asm ("strd r6, r7, [r5, 0x40]");
    0x00026fbe adds r3, 1                        |     r3++;
    0x00026fc0 str r0, [r5, 0x2c]                |     *((r5 + 0x2c)) = r0;
    0x00026fc2 str r3, [r5, 0x10]                |     *((r5 + 0x10)) = r3;
    0x00026fc4 ldr r3, [r5, 0x28]                |     r3 = *((r5 + 0x28));
    0x00026fc6 vstr d9, [r5, 0x38]               |     __asm ("vstr d9, [r5, 0x38]");
    0x00026fca str.w r2, [sb]                    |     __asm ("str.w r2, [sb]");
    0x00026fce adds r3, 1                        |     r3++;
    0x00026fd0 str r3, [r5, 0x28]                |     *((r5 + 0x28)) = r3;
    0x00026fd2 ldr r2, [r1]                      |     r2 = *(r1);
    0x00026fd4 cmp r3, r2                        |     
                                                 |     if (r3 <= r2) {
    0x00026fd6 blo.w 0x2716e                     |         goto label_38;
                                                 |     }
                                                 | label_15:
    0x00026fda ldr r2, [r5, 4]                   |     r2 = *((r5 + 4));
    0x00026fdc movs r3, 0                        |     r3 = 0;
    0x00026fde str r3, [r5, 0x24]                |     *((r5 + 0x24)) = r3;
    0x00026fe0 str r3, [r5, 0x48]                |     *((r5 + 0x48)) = r3;
    0x00026fe2 str r2, [r5, 0x20]                |     *((r5 + 0x20)) = r2;
    0x00026fe4 cmp.w r8, 0                       |     
                                                 |     if (r8 == 0) {
    0x00026fe8 beq.w 0x26d7e                     |         void (*0x26d7e)() ();
                                                 |     }
    0x00026fec b 0x26da6                         |     void (*0x26da6)() ();
                                                 | label_23:
    0x00026fee vmov.f64 d0, d9                   |     __asm ("vmov.f64 d0, d9");
    0x00026ff2 str r3, [sp, 8]                   |     var_8h = r3;
    0x00026ff4 blx 0x830                         |     log2 (r0);
    0x00026ff8 ldr r3, [sp, 8]                   |     r3 = var_8h;
    0x00026ffa b 0x26ca8                         |     goto label_6;
                                                 | label_37:
    0x00026ffc vmov.f64 d18, 2.000000e+01        |     __asm ("vmov.f64 d18, 2");
    0x00027000 vsub.f64 d16, d16, d18            |     __asm ("vsub.f64 d16, d16, d18");
    0x00027004 vcmpe.f64 d16, d17                |     __asm ("vcmpe.f64 d16, d17");
    0x00027008 vmrs apsr_nzcv, fpscr             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                 |     if (r8 > 0) {
    0x0002700c bgt 0x270ce                       |         goto label_39;
                                                 |     }
    0x0002700e add.w sl, sl, 0x40000000          |     sl += 0x40000000;
    0x00027012 ldr r1, [sp, 0x2c]                |     r1 = *(arg_2ch);
    0x00027014 add.w sl, sl, -1                  |     sl += -1;
    0x00027018 mov.w r2, 0x410                   |     r2 = 0x410;
    0x0002701c ldr.w r3, [r0, sl, lsl 2]         |     offset_0 = sl << 2;
                                                 |     r3 = *((r0 + offset_0));
    0x00027020 add r3, r7                        |     r3 += r7;
    0x00027022 str.w r3, [r0, sl, lsl 2]         |     __asm ("str.w r3, [r0, sl, lsl 2]");
    0x00027026 ldr r0, [r5, 0x2c]                |     r0 = *((r5 + 0x2c));
    0x00027028 add.w r0, r0, r0, lsl 6           |     r0 += (r0 << 6);
    0x0002702c add.w r0, fp, r0, lsl 4           |     r0 = fp + (r0 << 4);
    0x00027030 blx 0x86c                         |     memcpy (r0, r1, r2);
    0x00027034 ldr r3, [sp, 0x28]                |     r3 = *(arg_28h);
    0x00027036 ldr.w r1, [sb]                    |     r1 = *(sb);
    0x0002703a ldrd r2, r3, [r3]                 |     __asm ("ldrd r2, r3, [r3]");
    0x0002703e cmp r1, 1                         |     
    0x00027040 strd r2, r3, [r5, 0x38]           |     __asm ("strd r2, r3, [r5, 0x38]");
                                                 |     if (r1 == 1) {
    0x00027044 bne 0x2704a                       |         
    0x00027046 strd r2, r3, [r5, 0x40]           |         __asm ("strd r2, r3, [r5, 0x40]");
                                                 |     }
    0x0002704a ldr r3, [r5, 0x28]                |     r3 = *((r5 + 0x28));
    0x0002704c movs r4, 0                        |     r4 = 0;
    0x0002704e mov.w r2, 0x400                   |     r2 = 0x400;
    0x00027052 mov r1, r4                        |     r1 = r4;
    0x00027054 str r4, [r5, 0x24]                |     *((r5 + 0x24)) = r4;
    0x00027056 add.w r3, r3, r3, lsl 6           |     r3 += (r3 << 6);
    0x0002705a add.w fp, fp, r3, lsl 4           |     
    0x0002705e mov r0, fp                        |     r0 = fp;
    0x00027060 add.w fp, fp, 0x410               |     
    0x00027064 blx 0x8e8                         |     fcn_000008e8 ();
    0x00027068 ldr r3, [r5, 0x48]                |     r3 = *((r5 + 0x48));
    0x0002706a movs r1, 0                        |     r1 = 0;
    0x0002706c movs r0, 0                        |     r0 = 0;
    0x0002706e movt r1, 0x7ff0                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x00027072 str r4, [fp, -0x10]               |     var_14h = r4;
    0x00027076 adds r3, 1                        |     r3++;
    0x00027078 strd r0, r1, [fp, -0x8]           |     __asm ("strd r0, r1, [fp, -0x8]");
    0x0002707c cmp r3, 1                         |     
    0x0002707e str r3, [r5, 0x48]                |     *((r5 + 0x48)) = r3;
    0x00027080 itttt hi                          |     
                                                 |     if (r3 <= 1) {
    0x00027082 ldrhi r2, [r5, 4]                 |         r2 = *((r5 + 4));
                                                 |     }
                                                 |     if (r3 <= 1) {
    0x00027084 ldrhi r3, [r5, 0x20]              |         r3 = *((r5 + 0x20));
                                                 |     }
                                                 |     if (r3 <= 1) {
    0x00027086 addhi r3, r3, r2                  |         r3 += r2;
                                                 |     }
                                                 |     if (r3 <= 1) {
    0x00027088 strhi r3, [r5, 0x20]              |         *((r5 + 0x20)) = r3;
                                                 |     }
    0x0002708a cmp.w r8, 0                       |     
                                                 |     if (r8 == 0) {
    0x0002708e beq.w 0x26d7e                     |         void (*0x26d7e)() ();
                                                 |     }
    0x00027092 b 0x26da6                         |     void (*0x26da6)() ();
                                                 | label_30:
    0x00027094 ldr r3, [sp, 0xc]                 |     r3 = var_ch;
    0x00027096 movs r2, 0                        |     r2 = 0;
    0x00027098 vmov.f64 d8, d11                  |     __asm ("vmov.f64 d8, d11");
    0x0002709c adds r1, r3, r5                   |     r1 = r3 + r5;
    0x0002709e b 0x26e8c                         |     goto label_7;
                                                 | label_25:
    0x000270a0 vmov.f64 d0, d9                   |     __asm ("vmov.f64 d0, d9");
    0x000270a4 blx 0x830                         |     log2 (r0);
    0x000270a8 b 0x26cd2                         |     goto label_8;
                                                 | label_32:
    0x000270aa vmov.f64 d0, d10                  |     __asm ("vmov.f64 d0, d10");
    0x000270ae strd r2, r1, [sp, 0x38]           |     __asm ("strd r2, r1, [sp, 0x38]");
    0x000270b2 blx 0x830                         |     log2 (r0);
    0x000270b6 ldrd r2, r1, [sp, 0x38]           |     __asm ("ldrd r2, r1, [arg_38h]");
    0x000270ba b 0x26e88                         |     goto label_9;
                                                 | label_33:
    0x000270bc vmov.f64 d0, d10                  |     __asm ("vmov.f64 d0, d10");
    0x000270c0 strd r2, r1, [sp, 0x38]           |     __asm ("strd r2, r1, [sp, 0x38]");
    0x000270c4 blx 0x830                         |     log2 (r0);
    0x000270c8 ldrd r2, r1, [sp, 0x38]           |     __asm ("ldrd r2, r1, [arg_38h]");
    0x000270cc b 0x26eaa                         |     goto label_10;
                                                 | label_39:
    0x000270ce str.w r7, [r0, sl, lsl 2]         |     __asm ("str.w r7, [r0, sl, lsl 2]");
    0x000270d2 mov.w r2, 0x410                   |     r2 = 0x410;
    0x000270d6 ldr.w r0, [sb, 8]                 |     r0 = *((sb + 8));
    0x000270da add.w r1, sp, 0x470               |     r1 += arg_470h;
    0x000270de ldr r3, [r5, 0x10]                |     r3 = *((r5 + 0x10));
    0x000270e0 movs r4, 0                        |     r4 = 0;
    0x000270e2 adds r6, r0, r3                   |     r6 = r0 + r3;
    0x000270e4 ldrb r6, [r6, -0x2]               |     r6 = *((r6 - 0x2));
    0x000270e8 strb r6, [r0, r3]                 |     *((r0 + r3)) = r6;
    0x000270ea ldrd r3, r0, [r5, 0x2c]           |     __asm ("ldrd r3, r0, [r5, 0x2c]");
    0x000270ee strd r0, r3, [r5, 0x2c]           |     __asm ("strd r0, r3, [r5, 0x2c]");
    0x000270f2 add.w r0, r0, r0, lsl 6           |     r0 += (r0 << 6);
    0x000270f6 add.w r0, fp, r0, lsl 4           |     r0 = fp + (r0 << 4);
    0x000270fa blx 0x86c                         |     memcpy (r0, r1, r2);
    0x000270fe ldr r2, [r5, 0x10]                |     r2 = *((r5 + 0x10));
    0x00027100 mov r1, r4                        |     r1 = r4;
    0x00027102 ldr r3, [r5, 0x28]                |     r3 = *((r5 + 0x28));
    0x00027104 ldrd r6, r7, [r5, 0x38]           |     __asm ("ldrd r6, r7, [r5, 0x38]");
    0x00027108 adds r2, 1                        |     r2++;
    0x0002710a str r4, [r5, 0x24]                |     *((r5 + 0x24)) = r4;
    0x0002710c str r2, [r5, 0x10]                |     *((r5 + 0x10)) = r2;
    0x0002710e ldr r2, [sp, 0x28]                |     r2 = *(arg_28h);
    0x00027110 add.w r3, r3, r3, lsl 6           |     r3 += (r3 << 6);
    0x00027114 strd r6, r7, [r5, 0x40]           |     __asm ("strd r6, r7, [r5, 0x40]");
    0x00027118 add.w r3, fp, r3, lsl 4           |     r3 = fp + (r3 << 4);
    0x0002711c ldrd sl, fp, [r2, 8]              |     __asm ("ldrd sl, fp, [r2, 8]");
    0x00027120 mov.w r2, 0x400                   |     r2 = 0x400;
    0x00027124 mov r0, r3                        |     r0 = r3;
    0x00027126 strd sl, fp, [r5, 0x38]           |     __asm ("strd sl, fp, [r5, 0x38]");
    0x0002712a blx 0x8e8                         |     fcn_000008e8 ();
    0x0002712e ldr r2, [r5, 4]                   |     r2 = *((r5 + 4));
    0x00027130 movs r1, 0                        |     r1 = 0;
    0x00027132 str.w r4, [r0, 0x400]             |     __asm ("str.w r4, aav.0x000000ff");
    0x00027136 add.w r3, r0, 0x410               |     r3 = r0 + 0x410;
    0x0002713a movt r1, 0x7ff0                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x0002713e movs r0, 0                        |     r0 = 0;
    0x00027140 strd r0, r1, [r3, -0x8]           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x00027144 str r4, [r5, 0x48]                |     *((r5 + 0x48)) = r4;
    0x00027146 str r2, [r5, 0x20]                |     *((r5 + 0x20)) = r2;
    0x00027148 cmp.w r8, 0                       |     
                                                 |     if (r8 == 0) {
    0x0002714c beq.w 0x26d7e                     |         void (*0x26d7e)() ();
                                                 |     }
    0x00027150 b 0x26da6                         |     void (*0x26da6)() ();
                                                 | label_28:
    0x00027152 vmov.i64 d9, 0                    |     __asm ("vmov.i64 d9, 0");
    0x00027156 b 0x26d3e                         |     goto label_11;
                                                 | label_35:
    0x00027158 vmov.f64 d0, d10                  |     __asm ("vmov.f64 d0, d10");
    0x0002715c blx 0x830                         |     log2 (r0);
    0x00027160 b 0x26ed0                         |     goto label_12;
                                                 | label_24:
    0x00027162 vmov.i64 d9, 0                    |     __asm ("vmov.i64 d9, 0");
    0x00027166 b 0x26cd6                         |     goto label_13;
                                                 | label_34:
    0x00027168 vmov.i64 d10, 0                   |     __asm ("vmov.i64 d10, 0");
    0x0002716c b 0x26ed4                         |     goto label_14;
                                                 | label_38:
    0x0002716e add.w r3, r3, r3, lsl 6           |     r3 += (r3 << 6);
    0x00027172 mov.w r2, 0x400                   |     r2 = 0x400;
    0x00027176 movs r1, 0                        |     r1 = 0;
    0x00027178 add.w r3, fp, r3, lsl 4           |     r3 = fp + (r3 << 4);
    0x0002717c mov r0, r3                        |     r0 = r3;
    0x0002717e blx 0x8e8                         |     fcn_000008e8 ();
    0x00027182 movs r2, 0                        |     r2 = 0;
    0x00027184 movs r1, 0                        |     r1 = 0;
    0x00027186 add.w r3, r0, 0x410               |     r3 = r0 + 0x410;
    0x0002718a str.w r2, [r0, 0x400]             |     __asm ("str.w r2, aav.0x000000ff");
    0x0002718e movt r1, 0x7ff0                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x00027192 movs r0, 0                        |     r0 = 0;
    0x00027194 strd r0, r1, [r3, -0x8]           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x00027198 b 0x26fda                         |     goto label_15;
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libbrotlienc.so.1.0.9 @ 0x271d0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000271d0 ()                                      | void fcn_000271d0 (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_bp_10h;
                                                                 |     void * s2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h_2;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_30h_2;
                                                                 |     int16_t var_34h_2;
                                                                 |     int16_t var_38h_2;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_50h_2;
                                                                 |     int16_t var_60h_2;
                                                                 |     int16_t var_688h;
                                                                 |     int16_t var_b5ch;
                                                                 |     int16_t var_1680h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x000271d0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000271d4 mov r8, r1                                        |     r8 = r1;
    0x000271d6 ldr r7, [r0, 0x24]                                |     r7 = *((r0 + 0x24));
    0x000271d8 mov r5, r0                                        |     r5 = r0;
    0x000271da ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x000271dc ldr.w r2, [pc, 0x60c]                             |     
    0x000271e0 vpush {d8, d9, d10, d11}                          |     __asm ("vpush {d8, d9, d10, d11}");
    0x000271e4 sub.w sp, sp, 0x1680                              |     
    0x000271e8 cmp r7, r3                                        |     
    0x000271ea sub sp, 0xc                                       |     
    0x000271ec it lo                                             |     
                                                                 |     if (r7 >= r3) {
    0x000271ee movlo r7, r3                                      |         r7 = r3;
                                                                 |     }
    0x000271f0 ldr.w r3, [pc, 0x5fc]                             |     r3 = *(0x277f0);
    0x000271f4 add r2, pc                                        |     r2 = 0x4e9e4;
    0x000271f6 ldrd sl, sb, [r0, 0x10]                           |     __asm ("ldrd sl, sb, [r0, 0x10]");
    0x000271fa add.w r1, sp, 0x1680                              |     r1 += var_1680h;
    0x000271fe ldr.w fp, [r0, 0x18]                              |     fp = *((r0 + 0x18));
    0x00027202 ldr r3, [r2, r3]                                  |     
    0x00027204 adds r1, 4                                        |     r1 += 4;
    0x00027206 ldr r3, [r3]                                      |     r3 = *(0x4e9e4);
    0x00027208 str r3, [r1]                                      |     *(r1) = r3;
    0x0002720a mov.w r3, 0                                       |     r3 = 0;
    0x0002720e str r7, [r0, 0x24]                                |     *((r0 + 0x24)) = r7;
    0x00027210 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00027214 bne 0x2726a                                       |         
    0x00027216 ldr.w r3, [sb, 0xc]                               |         r3 = *((sb + 0xc));
    0x0002721a str r7, [r3]                                      |         *(r3) = r7;
    0x0002721c ldr.w r3, [sb, 8]                                 |         r3 = *((sb + 8));
    0x00027220 strb.w sl, [r3]                                   |         *(r3) = sl;
    0x00027224 mov r3, fp                                        |         r3 = fp;
    0x00027226 ldr r6, [r0]                                      |         r6 = *(r0);
    0x00027228 add.w r7, fp, r6, lsl 2                           |         r7 = fp + (r6 << 2);
    0x0002722c ands r6, r6, 1                                    |         r6 &= 1;
                                                                 |         if (r6 != r6) {
    0x00027230 bne 0x27324                                       |             goto label_21;
                                                                 |         }
    0x00027232 cmp fp, r7                                        |         
                                                                 |         if (fp >= r7) {
    0x00027234 bhs.w 0x273fa                                     |             goto label_22;
                                                                 |         }
    0x00027238 vmov.i64 d8, 0                                    |         __asm ("vmov.i64 d8, 0");
                                                                 | label_3:
    0x0002723c mov r4, r3                                        |         r4 = r3;
    0x0002723e ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
    0x00027242 cmp r3, 0xff                                      |         
    0x00027244 add.w sl, r3, r6                                  |         sl = r3 + r6;
    0x00027248 vmov s15, r3                                      |         __asm ("vmov s15, r3");
    0x0002724c vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (r3 > 0xff) {
    0x00027250 bhi.w 0x27408                                     |             goto label_23;
                                                                 |         }
    0x00027254 ldr.w r2, [pc, 0x59c]                             |         
    0x00027258 add r2, pc                                        |         r2 = 0x4ea50;
    0x0002725a add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x0002725e vldr d0, [r3]                                     |         __asm ("vldr d0, [r3]");
                                                                 | label_2:
    0x00027262 vmls.f64 d8, d9, d0                               |         __asm ("vmls.f64 d8, d9, d0");
    0x00027266 mov r3, r4                                        |         r3 = r4;
    0x00027268 b 0x27328                                         |         goto label_24;
                                                                 |     }
    0x0002726a cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0002726c beq.w 0x273b6                                     |         goto label_25;
                                                                 |     }
    0x00027270 ldr r3, [r0, 0x28]                                |     r3 = *((r0 + 0x28));
    0x00027272 mov.w r1, 0xb10                                   |     r1 = 0xb10;
    0x00027276 ldr r2, [r0]                                      |     r2 = *(r0);
    0x00027278 mla r3, r1, r3, fp                                |     __asm ("mla r3, r1, r3, fp");
    0x0002727c ands r6, r2, 1                                    |     r6 = r2 & 1;
    0x00027280 lsl.w r1, r2, 2                                   |     r1 = r2 << 2;
    0x00027284 str r6, [sp, 8]                                   |     var_8h_2 = r6;
    0x00027286 mov r0, r3                                        |     r0 = r3;
    0x00027288 mov r4, r3                                        |     r4 = r3;
    0x0002728a str r3, [sp, 4]                                   |     s2 = r3;
    0x0002728c add r3, r1                                        |     r3 += r1;
    0x0002728e str r1, [sp, 0x10]                                |     var_10h_2 = r1;
                                                                 |     if (r6 != r2) {
    0x00027290 bne.w 0x27400                                     |         goto label_26;
                                                                 |     }
    0x00027294 cmp r0, r3                                        |     
                                                                 |     if (r0 >= r3) {
    0x00027296 bhs.w 0x27416                                     |         goto label_27;
                                                                 |     }
    0x0002729a vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
                                                                 |     do {
    0x0002729e ldr r2, [r4], 4                                   |         r2 = *(r4);
                                                                 |         r4 += 4;
    0x000272a2 cmp r2, 0xff                                      |         
    0x000272a4 add r6, r2                                        |         r6 += r2;
    0x000272a6 vmov s15, r2                                      |         __asm ("vmov s15, r2");
    0x000272aa vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (r2 > 0xff) {
    0x000272ae bhi.w 0x27562                                     |             goto label_28;
                                                                 |         }
    0x000272b2 ldr.w r1, [pc, 0x544]                             |         
    0x000272b6 add r1, pc                                        |         r1 = 0x4eab4;
    0x000272b8 add.w r2, r1, r2, lsl 3                           |         r2 = r1 + (r2 << 3);
    0x000272bc vldr d0, [r2]                                     |         __asm ("vldr d0, [r2]");
                                                                 | label_7:
    0x000272c0 vmls.f64 d8, d9, d0                               |         __asm ("vmls.f64 d8, d9, d0");
                                                                 | label_1:
    0x000272c4 ldr r2, [r4], 4                                   |         r2 = *(r4);
                                                                 |         r4 += 4;
    0x000272c8 cmp r2, 0xff                                      |         
    0x000272ca add r6, r2                                        |         r6 += r2;
    0x000272cc vmov s15, r2                                      |         __asm ("vmov s15, r2");
    0x000272d0 vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (r2 > 0xff) {
    0x000272d4 bhi.w 0x27634                                     |             goto label_29;
                                                                 |         }
    0x000272d8 ldr.w r1, [pc, 0x520]                             |         
    0x000272dc add r1, pc                                        |         r1 = 0x4eadc;
    0x000272de add.w r2, r1, r2, lsl 3                           |         r2 = r1 + (r2 << 3);
    0x000272e2 vldr d0, [r2]                                     |         __asm ("vldr d0, [r2]");
                                                                 | label_11:
    0x000272e6 cmp r3, r4                                        |         
    0x000272e8 vmls.f64 d8, d9, d0                               |         __asm ("vmls.f64 d8, d9, d0");
    0x000272ec bhi 0x2729e                                       |         
                                                                 |     } while (r3 > r4);
    0x000272ee cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000272f0 beq.w 0x277b0                                     |         goto label_30;
                                                                 |     }
    0x000272f4 cmp r6, 0xff                                      |     
    0x000272f6 vmov s15, r6                                      |     __asm ("vmov s15, r6");
    0x000272fa vcvt.f64.u32 d9, s15                              |     __asm ("vcvt.f64.u32 d9, s15");
                                                                 |     if (r6 > 0xff) {
    0x000272fe bhi.w 0x276e6                                     |         goto label_31;
                                                                 |     }
    0x00027302 ldr.w r3, [pc, 0x4fc]                             |     
    0x00027306 add r3, pc                                        |     r3 = 0x4eb0c;
    0x00027308 add.w r3, r3, r6, lsl 3                           |     r3 += (r6 << 3);
    0x0002730c vldr d0, [r3]                                     |     __asm ("vldr d0, [r3]");
                                                                 | label_13:
    0x00027310 vmla.f64 d8, d9, d0                               |     __asm ("vmla.f64 d8, d9, d0");
                                                                 | label_18:
    0x00027314 vcmpe.f64 d8, d9                                  |     __asm ("vcmpe.f64 d8, d9");
    0x00027318 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0002731c it pl                                             |     
                                                                 |     if (r6 >= 0xff) {
    0x0002731e vmovpl d9, d8                                     |         __asm ("vmovpl d9, d8");
                                                                 |     }
    0x00027322 b 0x2741a                                         |     goto label_32;
                                                                 | label_21:
    0x00027324 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
                                                                 | label_24:
    0x00027328 mov r4, r3                                        |     r4 = r3;
    0x0002732a ldr r3, [r4], 4                                   |     r3 = *(r4);
                                                                 |     r4 += 4;
    0x0002732e cmp r3, 0xff                                      |     
    0x00027330 add.w r6, r3, sl                                  |     r6 = r3 + sl;
    0x00027334 vmov s15, r3                                      |     __asm ("vmov s15, r3");
    0x00027338 vcvt.f64.u32 d9, s15                              |     __asm ("vcvt.f64.u32 d9, s15");
                                                                 |     if (r3 > 0xff) {
    0x0002733c bhi.w 0x27522                                     |         goto label_33;
                                                                 |     }
    0x00027340 ldr.w r2, [pc, 0x4c0]                             |     
    0x00027344 add r2, pc                                        |     r2 = 0x4eb4c;
    0x00027346 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0002734a vldr d0, [r3]                                     |     __asm ("vldr d0, [r3]");
                                                                 | label_4:
    0x0002734e cmp r7, r4                                        |     
    0x00027350 vmls.f64 d8, d9, d0                               |     __asm ("vmls.f64 d8, d9, d0");
                                                                 |     if (r7 > r4) {
    0x00027354 bhi 0x27412                                       |         goto label_34;
                                                                 |     }
    0x00027356 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00027358 beq.w 0x277a0                                     |         goto label_35;
                                                                 |     }
    0x0002735c cmp r6, 0xff                                      |     
    0x0002735e vmov s15, r6                                      |     __asm ("vmov s15, r6");
    0x00027362 vcvt.f64.u32 d9, s15                              |     __asm ("vcvt.f64.u32 d9, s15");
                                                                 |     if (r6 > 0xff) {
    0x00027366 bhi.w 0x27558                                     |         goto label_36;
                                                                 |     }
    0x0002736a ldr.w r3, [pc, 0x49c]                             |     
    0x0002736e add r3, pc                                        |     r3 = 0x4eb7c;
    0x00027370 add.w r3, r3, r6, lsl 3                           |     r3 += (r6 << 3);
    0x00027374 vldr d0, [r3]                                     |     __asm ("vldr d0, [r3]");
                                                                 | label_6:
    0x00027378 vmla.f64 d8, d9, d0                               |     __asm ("vmla.f64 d8, d9, d0");
                                                                 | label_16:
    0x0002737c vcmpe.f64 d8, d9                                  |     __asm ("vcmpe.f64 d8, d9");
    0x00027380 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00027384 it pl                                             |     
                                                                 |     if (r6 >= 0xff) {
    0x00027386 vmovpl d9, d8                                     |         __asm ("vmovpl d9, d8");
                                                                 |     }
                                                                 | label_0:
    0x0002738a ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0002738c vstr d9, [r5, 0x38]                               |     __asm ("vstr d9, [r5, 0x38]");
    0x00027390 adds r3, 1                                        |     r3++;
    0x00027392 vstr d9, [r5, 0x40]                               |     __asm ("vstr d9, [r5, 0x40]");
    0x00027396 str r3, [r5, 0x10]                                |     *((r5 + 0x10)) = r3;
    0x00027398 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0002739c ldr r2, [r5, 0x1c]                                |     r2 = *((r5 + 0x1c));
    0x0002739e adds r3, 1                                        |     r3++;
    0x000273a0 str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x000273a4 ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x000273a6 adds r3, 1                                        |     r3++;
    0x000273a8 str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x000273aa ldr r2, [r2]                                      |     r2 = *(r2);
    0x000273ac cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x000273ae blo.w 0x2752c                                     |         goto label_37;
                                                                 |     }
                                                                 | label_5:
    0x000273b2 movs r3, 0                                        |     r3 = 0;
    0x000273b4 str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
                                                                 | label_25:
    0x000273b6 cmp.w r8, 0                                       |     
    0x000273ba bne 0x273ea                                       |     
                                                                 |     while (1) {
                                                                 | label_9:
    0x000273bc ldr.w r2, [pc, 0x44c]                             |         
    0x000273c0 add.w r1, sp, 0x1680                              |         r1 += var_1680h;
    0x000273c4 ldr.w r3, [pc, 0x428]                             |         r3 = *(0x277f0);
    0x000273c8 adds r1, 4                                        |         r1 += 4;
    0x000273ca add r2, pc                                        |         r2 = 0x4ebda;
    0x000273cc ldr r3, [r2, r3]                                  |         r3 = *(0x4ebda);
    0x000273ce ldr r2, [r3]                                      |         r2 = *(0x4ebda);
    0x000273d0 ldr r3, [r1]                                      |         r3 = *(r1);
    0x000273d2 eors r2, r3                                       |         r2 ^= r3;
    0x000273d4 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000273d8 bne.w 0x277e8                                     |             goto label_38;
                                                                 |         }
    0x000273dc add.w sp, sp, 0x1680                              |         
    0x000273e0 add sp, 0xc                                       |         
    0x000273e2 vpop {d8, d9, d10, d11}                           |         __asm ("vpop {d8, d9, d10, d11}");
    0x000273e6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_10:
    0x000273ea ldr r3, [r5, 0x1c]                                |         r3 = *((r5 + 0x1c));
    0x000273ec ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x000273f0 str r2, [r3]                                      |         *(r3) = r2;
    0x000273f2 ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x000273f4 str.w r3, [sb, 4]                                 |         __asm ("str.w r3, [sb, 4]");
    0x000273f8 b 0x273bc                                         |         
                                                                 |     }
                                                                 | label_22:
    0x000273fa vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
    0x000273fe b 0x2738a                                         |     goto label_0;
                                                                 | label_26:
    0x00027400 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
    0x00027404 movs r6, 0                                        |     r6 = 0;
    0x00027406 b 0x272c4                                         |     goto label_1;
                                                                 | label_23:
    0x00027408 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x0002740c blx 0x830                                         |     log2 (r0);
    0x00027410 b 0x27262                                         |     goto label_2;
                                                                 | label_34:
    0x00027412 mov r3, r4                                        |     r3 = r4;
    0x00027414 b 0x2723c                                         |     goto label_3;
                                                                 | label_27:
    0x00027416 vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
                                                                 | label_32:
    0x0002741a ldr r3, [pc, 0x3f4]                               |     
    0x0002741c add r2, sp, 0x50                                  |     r2 += var_50h_2;
    0x0002741e str r2, [sp, 0x14]                                |     var_14h_2 = r2;
    0x00027420 add.w r2, r5, 0x2c                                |     r2 = r5 + 0x2c;
    0x00027424 str r2, [sp, 0xc]                                 |     var_ch_2 = r2;
    0x00027426 add r2, sp, 0x40                                  |     r2 += var_40h;
    0x00027428 add r3, pc                                        |     r3 = 0x4ec3e;
    0x0002742a vmov.i64 d11, 0                                   |     __asm ("vmov.i64 d11, 0");
    0x0002742e str r3, [sp, 0x2c]                                |     var_2ch_2 = r3;
    0x00027430 addw r6, sp, 0xb5c                                |     __asm ("addw r6, var_b5ch");
    0x00027434 ldr r3, [pc, 0x3dc]                               |     
    0x00027436 str r2, [sp, 0x1c]                                |     var_1ch_2 = r2;
    0x00027438 add.w r2, r5, 0x38                                |     r2 = r5 + 0x38;
    0x0002743c str r2, [sp, 0x18]                                |     var_18h_2 = r2;
    0x0002743e add r3, pc                                        |     r3 = 0x4ec56;
    0x00027440 str r5, [sp, 0x28]                                |     var_28h_2 = r5;
    0x00027442 str r3, [sp, 0x30]                                |     var_30h_2 = r3;
    0x00027444 add r3, sp, 0x60                                  |     r3 += var_60h_2;
    0x00027446 mov r4, r3                                        |     r4 = r3;
    0x00027448 add.w r2, r3, 0x1620                              |     r2 = r3 + 0x1620;
    0x0002744c strd r2, r7, [sp, 0x20]                           |     __asm ("strd r2, r7, [sp, 0x20]");
                                                                 | label_8:
    0x00027450 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x00027452 mov.w r7, 0xb10                                   |     r7 = 0xb10;
    0x00027456 ldr r1, [sp, 4]                                   |     r1 = s2;
    0x00027458 mov r2, r7                                        |     r2 = r7;
    0x0002745a mov r0, r4                                        |     r0 = r4;
    0x0002745c ldr r5, [r3], 4                                   |     r5 = *(r3);
                                                                 |     r3 += 4;
    0x00027460 str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x00027462 blx 0x86c                                         |     memcpy (r0, r1, r2);
    0x00027466 mla ip, r7, r5, fp                                |     __asm ("mla ip, r7, r5, fp");
    0x0002746a ldr.w r1, [r4, 0xb00]                             |     r1 = *((r4 + 0xb00));
    0x0002746e mov r3, r4                                        |     r3 = r4;
    0x00027470 subs r2, r4, 4                                    |     r2 = r4 - 4;
    0x00027472 ldr.w r0, [ip, 0xb00]                             |     r0 = *((ip + 0xb00));
    0x00027476 add r1, r0                                        |     r1 += r0;
    0x00027478 sub.w r0, ip, 4                                   |     r0 = ip - 4;
    0x0002747c str.w r1, [r4, 0xb00]                             |     __asm ("str.w r1, aav.0x000000ff");
                                                                 |     do {
    0x00027480 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x00027484 ldr r5, [r0, 4]!                                  |         r5 = *((r0 += 4));
    0x00027488 cmp r6, r2                                        |         
    0x0002748a add r1, r5                                        |         r1 += r5;
    0x0002748c str r1, [r2]                                      |         *(r2) = r1;
    0x0002748e bne 0x27480                                       |         
                                                                 |     } while (r6 != r2);
    0x00027490 ldr r2, [sp, 8]                                   |     r2 = var_8h_2;
    0x00027492 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00027494 bne.w 0x276da                                     |         goto label_39;
                                                                 |     }
    0x00027498 ldr r1, [sp, 0x10]                                |     r1 = var_10h_2;
    0x0002749a add r1, r4                                        |     r1 += r4;
    0x0002749c cmp r4, r1                                        |     
                                                                 |     if (r4 >= r1) {
    0x0002749e bhs 0x27570                                       |         goto label_40;
                                                                 |     }
    0x000274a0 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
                                                                 |     do {
    0x000274a4 ldr r0, [r3], 4                                   |         r0 = *(r3);
                                                                 |         r3 += 4;
    0x000274a8 cmp r0, 0xff                                      |         
    0x000274aa add r2, r0                                        |         r2 += r0;
    0x000274ac vmov s15, r0                                      |         __asm ("vmov s15, r0");
    0x000274b0 vcvt.f64.u32 d10, s15                             |         __asm ("vcvt.f64.u32 d10, s15");
                                                                 |         if (r0 > 0xff) {
    0x000274b4 bhi.w 0x276f0                                     |             goto label_41;
                                                                 |         }
    0x000274b8 ldr.w ip, [pc, 0x35c]                             |         
    0x000274bc add ip, pc                                        |         ip = 0x4ecd8;
    0x000274be add.w r0, ip, r0, lsl 3                           |         r0 = ip + (r0 << 3);
    0x000274c2 vldr d0, [r0]                                     |         __asm ("vldr d0, [r0]");
                                                                 | label_14:
    0x000274c6 vmls.f64 d8, d10, d0                              |         __asm ("vmls.f64 d8, d10, d0");
                                                                 | label_12:
    0x000274ca ldr r0, [r3], 4                                   |         r0 = *(r3);
                                                                 |         r3 += 4;
    0x000274ce cmp r0, 0xff                                      |         
    0x000274d0 add r2, r0                                        |         r2 += r0;
    0x000274d2 vmov s15, r0                                      |         __asm ("vmov s15, r0");
    0x000274d6 vcvt.f64.u32 d10, s15                             |         __asm ("vcvt.f64.u32 d10, s15");
                                                                 |         if (r0 > 0xff) {
    0x000274da bhi.w 0x27706                                     |             goto label_42;
                                                                 |         }
    0x000274de ldr r5, [sp, 0x30]                                |         r5 = var_30h_2;
    0x000274e0 add.w r0, r5, r0, lsl 3                           |         r0 = r5 + (r0 << 3);
    0x000274e4 vldr d0, [r0]                                     |         __asm ("vldr d0, [r0]");
                                                                 | label_15:
    0x000274e8 cmp r3, r1                                        |         
    0x000274ea vmls.f64 d8, d10, d0                              |         __asm ("vmls.f64 d8, d10, d0");
    0x000274ee blo 0x274a4                                       |         
                                                                 |     } while (r3 <= r1);
    0x000274f0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000274f2 beq.w 0x277b6                                     |         goto label_43;
                                                                 |     }
    0x000274f6 cmp r2, 0xff                                      |     
    0x000274f8 vmov s15, r2                                      |     __asm ("vmov s15, r2");
    0x000274fc vcvt.f64.u32 d10, s15                             |     __asm ("vcvt.f64.u32 d10, s15");
                                                                 |     if (r2 > 0xff) {
    0x00027500 bhi.w 0x277a6                                     |         goto label_44;
                                                                 |     }
    0x00027504 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch_2;
    0x00027506 add.w r2, r3, r2, lsl 3                           |     r2 = r3 + (r2 << 3);
    0x0002750a vldr d0, [r2]                                     |     __asm ("vldr d0, [r2]");
                                                                 | label_17:
    0x0002750e vmla.f64 d8, d10, d0                              |     __asm ("vmla.f64 d8, d10, d0");
                                                                 | label_19:
    0x00027512 vcmpe.f64 d10, d8                                 |     __asm ("vcmpe.f64 d10, d8");
    0x00027516 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0002751a it le                                             |     
                                                                 |     if (r2 <= 0xff) {
    0x0002751c vmovle d10, d8                                    |         __asm ("vmovle d10, d8");
                                                                 |     }
    0x00027520 b 0x27574                                         |     goto label_45;
                                                                 | label_33:
    0x00027522 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027526 blx 0x830                                         |     log2 (r0);
    0x0002752a b 0x2734e                                         |     goto label_4;
                                                                 | label_37:
    0x0002752c mov.w r2, 0xb10                                   |     r2 = 0xb10;
    0x00027530 movs r1, 0                                        |     r1 = 0;
    0x00027532 mla r3, r2, r3, fp                                |     __asm ("mla r3, r2, r3, fp");
    0x00027536 mov.w r2, 0xb00                                   |     r2 = 0xb00;
    0x0002753a mov r0, r3                                        |     r0 = r3;
    0x0002753c blx 0x8e8                                         |     fcn_000008e8 ();
    0x00027540 movs r2, 0                                        |     r2 = 0;
    0x00027542 movs r1, 0                                        |     r1 = 0;
    0x00027544 add.w r3, r0, 0xb10                               |     r3 = r0 + 0xb10;
    0x00027548 str.w r2, [r0, 0xb00]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x0002754c movt r1, 0x7ff0                                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x00027550 movs r0, 0                                        |     r0 = 0;
    0x00027552 strd r0, r1, [r3, -0x8]                           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x00027556 b 0x273b2                                         |     goto label_5;
                                                                 | label_36:
    0x00027558 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x0002755c blx 0x830                                         |     log2 (r0);
    0x00027560 b 0x27378                                         |     goto label_6;
                                                                 | label_28:
    0x00027562 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027566 str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x00027568 blx 0x830                                         |     log2 (r0);
    0x0002756c ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x0002756e b 0x272c0                                         |     goto label_7;
                                                                 | label_40:
    0x00027570 vmov.i64 d10, 0                                   |     __asm ("vmov.i64 d10, 0");
                                                                 | label_45:
    0x00027574 ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x00027576 add.w r4, r4, 0xb10                               |     r4 += 0xb10;
    0x0002757a vsub.f64 d16, d10, d9                             |     __asm ("vsub.f64 d16, d10, d9");
    0x0002757e add.w r6, r6, 0xb10                               |     r6 += 0xb10;
    0x00027582 vldmia r3!, {d17}                                 |     __asm ("vldmia r3!, {d17}");
    0x00027586 str r3, [sp, 0x18]                                |     var_18h_2 = r3;
    0x00027588 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x0002758a vsub.f64 d16, d16, d17                            |     __asm ("vsub.f64 d16, d16, d17");
    0x0002758e vstmia r3!, {d10}                                 |     __asm ("vstmia r3!, {d10}");
    0x00027592 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
    0x00027594 ldr r3, [sp, 0x14]                                |     r3 = var_14h_2;
    0x00027596 vstmia r3!, {d16}                                 |     __asm ("vstmia r3!, {d16}");
    0x0002759a str r3, [sp, 0x14]                                |     var_14h_2 = r3;
    0x0002759c ldr r3, [sp, 0x20]                                |     r3 = var_20h_2;
    0x0002759e cmp r3, r4                                        |     
                                                                 |     if (r3 != r4) {
    0x000275a0 bne.w 0x27450                                     |         goto label_8;
                                                                 |     }
    0x000275a4 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x000275a8 add.w r4, sp, 0x688                               |     r4 += var_688h;
    0x000275ac sub.w r3, r4, 0x638                               |     r3 = r4 - 0x638;
    0x000275b0 ldrd r7, r5, [sp, 0x24]                           |     __asm ("ldrd r7, r5, [var_24h_2]");
    0x000275b4 vldr d16, [r3]                                    |     __asm ("vldr d16, [r3]");
    0x000275b8 cmp r2, 0xff                                      |     
    0x000275ba vldr d17, [r3, 8]                                 |     __asm ("vldr d17, [r3, 8]");
    0x000275be ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
                                                                 |     if (r2 > 0xff) {
    0x000275c2 bhi 0x27642                                       |         goto label_46;
                                                                 |     }
    0x000275c4 vldr d18, [r5, 8]                                 |     __asm ("vldr d18, [r5, 8]");
    0x000275c8 vcmpe.f64 d18, d16                                |     __asm ("vcmpe.f64 d18, d16");
    0x000275cc vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r2 >= 0xff) {
    0x000275d0 bpl 0x27642                                       |         goto label_46;
                                                                 |     }
    0x000275d2 vcmpe.f64 d18, d17                                |     __asm ("vcmpe.f64 d18, d17");
    0x000275d6 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r2 >= 0xff) {
    0x000275da bpl 0x27642                                       |         goto label_46;
                                                                 |     }
    0x000275dc str.w r7, [r3, sl, lsl 2]                         |     __asm ("str.w r7, [r3, sl, lsl 2]");
    0x000275e0 ldr.w r2, [sb, 8]                                 |     r2 = *((sb + 8));
    0x000275e4 ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x000275e8 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x000275ea strb r1, [r2, r3]                                 |     *((r2 + r3)) = r1;
    0x000275ec ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x000275ee ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x000275f2 ldrd r6, r7, [r5, 0x38]                           |     __asm ("ldrd r6, r7, [r5, 0x38]");
    0x000275f6 str r3, [r5, 0x30]                                |     *((r5 + 0x30)) = r3;
    0x000275f8 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x000275fa ldr r1, [r5, 0x1c]                                |     r1 = *((r5 + 0x1c));
    0x000275fc uxtb r0, r2                                       |     r0 = (int8_t) r2;
    0x000275fe adds r2, 1                                        |     r2++;
    0x00027600 strd r6, r7, [r5, 0x40]                           |     __asm ("strd r6, r7, [r5, 0x40]");
    0x00027604 adds r3, 1                                        |     r3++;
    0x00027606 str r0, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r0;
    0x00027608 str r3, [r5, 0x10]                                |     *((r5 + 0x10)) = r3;
    0x0002760a ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x0002760c vstr d9, [r5, 0x38]                               |     __asm ("vstr d9, [r5, 0x38]");
    0x00027610 str.w r2, [sb]                                    |     __asm ("str.w r2, [sb]");
    0x00027614 adds r3, 1                                        |     r3++;
    0x00027616 str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x00027618 ldr r2, [r1]                                      |     r2 = *(r1);
    0x0002761a cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x0002761c blo.w 0x277bc                                     |         goto label_47;
                                                                 |     }
                                                                 | label_20:
    0x00027620 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00027622 movs r3, 0                                        |     r3 = 0;
    0x00027624 str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
    0x00027626 str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x00027628 str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x0002762a cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0002762e beq.w 0x273bc                                     |         goto label_9;
                                                                 |     }
    0x00027632 b 0x273ea                                         |     goto label_10;
                                                                 | label_29:
    0x00027634 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027638 str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x0002763a blx 0x830                                         |     log2 (r0);
    0x0002763e ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x00027640 b 0x272e6                                         |     goto label_11;
                                                                 | label_46:
    0x00027642 vmov.f64 d18, 2.000000e+01                        |     __asm ("vmov.f64 d18, 2");
    0x00027646 vsub.f64 d16, d16, d18                            |     __asm ("vsub.f64 d16, d16, d18");
    0x0002764a vcmpe.f64 d16, d17                                |     __asm ("vcmpe.f64 d16, d17");
    0x0002764e vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r8 > 0) {
    0x00027652 bgt 0x2771c                                       |         goto label_48;
                                                                 |     }
    0x00027654 add.w sl, sl, 0x40000000                          |     sl += 0x40000000;
    0x00027658 mov.w r2, 0xb10                                   |     r2 = 0xb10;
    0x0002765c add.w sl, sl, -1                                  |     sl += -1;
    0x00027660 ldr.w r1, [r3, sl, lsl 2]                         |     offset_0 = sl << 2;
                                                                 |     r1 = *((r3 + offset_0));
    0x00027664 add r1, r7                                        |     r1 += r7;
    0x00027666 str.w r1, [r3, sl, lsl 2]                         |     __asm ("str.w r1, [r3, sl, lsl 2]");
    0x0002766a sub.w r1, r4, 0x628                               |     r1 = r4 - 0x628;
    0x0002766e ldr r0, [r5, 0x2c]                                |     r0 = *((r5 + 0x2c));
    0x00027670 sub.w r4, r4, 0x648                               |     r4 -= 0x648;
    0x00027674 mla r0, r2, r0, fp                                |     __asm ("mla r0, r2, r0, fp");
    0x00027678 blx 0x86c                                         |     memcpy (r0, r1, r2);
    0x0002767c ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x00027680 ldrd r2, r3, [r4]                                 |     __asm ("ldrd r2, r3, [r4]");
    0x00027684 cmp r1, 1                                         |     
    0x00027686 strd r2, r3, [r5, 0x38]                           |     __asm ("strd r2, r3, [r5, 0x38]");
                                                                 |     if (r1 == 1) {
    0x0002768a bne 0x27690                                       |         
    0x0002768c strd r2, r3, [r5, 0x40]                           |         __asm ("strd r2, r3, [r5, 0x40]");
                                                                 |     }
    0x00027690 ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x00027692 mov.w r2, 0xb10                                   |     r2 = 0xb10;
    0x00027696 movs r4, 0                                        |     r4 = 0;
    0x00027698 mov r1, r4                                        |     r1 = r4;
    0x0002769a str r4, [r5, 0x24]                                |     *((r5 + 0x24)) = r4;
    0x0002769c mla fp, r2, r3, fp                                |     __asm ("mla fp, r2, r3, fp");
    0x000276a0 mov.w r2, 0xb00                                   |     r2 = 0xb00;
    0x000276a4 mov r0, fp                                        |     r0 = fp;
    0x000276a6 add.w fp, fp, 0xb10                               |     
    0x000276aa blx 0x8e8                                         |     fcn_000008e8 ();
    0x000276ae ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x000276b0 movs r1, 0                                        |     r1 = 0;
    0x000276b2 movs r0, 0                                        |     r0 = 0;
    0x000276b4 movt r1, 0x7ff0                                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x000276b8 str r4, [fp, -0x10]                               |     var_bp_10h = r4;
    0x000276bc adds r3, 1                                        |     r3++;
    0x000276be strd r0, r1, [fp, -0x8]                           |     __asm ("strd r0, r1, [fp, -0x8]");
    0x000276c2 cmp r3, 1                                         |     
    0x000276c4 str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x000276c6 itttt hi                                          |     
                                                                 |     if (r3 <= 1) {
    0x000276c8 ldrhi r2, [r5, 4]                                 |         r2 = *((r5 + 4));
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x000276ca ldrhi r3, [r5, 0x20]                              |         r3 = *((r5 + 0x20));
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x000276cc addhi r3, r3, r2                                  |         r3 += r2;
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x000276ce strhi r3, [r5, 0x20]                              |         *((r5 + 0x20)) = r3;
                                                                 |     }
    0x000276d0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000276d4 beq.w 0x273bc                                     |         goto label_9;
                                                                 |     }
    0x000276d8 b 0x273ea                                         |     goto label_10;
                                                                 | label_39:
    0x000276da ldr r1, [sp, 0x10]                                |     r1 = var_10h_2;
    0x000276dc movs r2, 0                                        |     r2 = 0;
    0x000276de vmov.f64 d8, d11                                  |     __asm ("vmov.f64 d8, d11");
    0x000276e2 add r1, r4                                        |     r1 += r4;
    0x000276e4 b 0x274ca                                         |     goto label_12;
                                                                 | label_31:
    0x000276e6 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x000276ea blx 0x830                                         |     log2 (r0);
    0x000276ee b 0x27310                                         |     goto label_13;
                                                                 | label_41:
    0x000276f0 vmov.f64 d0, d10                                  |     __asm ("vmov.f64 d0, d10");
    0x000276f4 strd r2, r1, [sp, 0x38]                           |     __asm ("strd r2, r1, [sp, 0x38]");
    0x000276f8 str r3, [sp, 0x34]                                |     var_34h_2 = r3;
    0x000276fa blx 0x830                                         |     log2 (r0);
    0x000276fe ldrd r2, r1, [sp, 0x38]                           |     __asm ("ldrd r2, r1, [var_38h_2]");
    0x00027702 ldr r3, [sp, 0x34]                                |     r3 = var_34h_2;
    0x00027704 b 0x274c6                                         |     goto label_14;
                                                                 | label_42:
    0x00027706 vmov.f64 d0, d10                                  |     __asm ("vmov.f64 d0, d10");
    0x0002770a strd r2, r1, [sp, 0x38]                           |     __asm ("strd r2, r1, [sp, 0x38]");
    0x0002770e str r3, [sp, 0x34]                                |     var_34h_2 = r3;
    0x00027710 blx 0x830                                         |     log2 (r0);
    0x00027714 ldrd r2, r1, [sp, 0x38]                           |     __asm ("ldrd r2, r1, [var_38h_2]");
    0x00027718 ldr r3, [sp, 0x34]                                |     r3 = var_34h_2;
    0x0002771a b 0x274e8                                         |     goto label_15;
                                                                 | label_48:
    0x0002771c str.w r7, [r3, sl, lsl 2]                         |     __asm ("str.w r7, [r3, sl, lsl 2]");
    0x00027720 mov.w r7, 0xb10                                   |     r7 = 0xb10;
    0x00027724 ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x00027728 add.w r1, r4, 0x4e8                               |     r1 = r4 + 0x4e8;
    0x0002772c ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0002772e mov r2, r7                                        |     r2 = r7;
    0x00027730 sub.w r4, r4, 0x648                               |     r4 -= 0x648;
    0x00027734 movs r6, 0                                        |     r6 = 0;
    0x00027736 add.w ip, r0, r3                                  |     
    0x0002773a ldrb ip, [ip, -0x2]                               |     ip = *((ip - 0x2));
    0x0002773e strb.w ip, [r0, r3]                               |     *((r0 + r3)) = ip;
    0x00027742 ldrd r3, r0, [r5, 0x2c]                           |     __asm ("ldrd r3, r0, [r5, 0x2c]");
    0x00027746 strd r0, r3, [r5, 0x2c]                           |     __asm ("strd r0, r3, [r5, 0x2c]");
    0x0002774a mla r0, r7, r0, fp                                |     __asm ("mla r0, r7, r0, fp");
    0x0002774e blx 0x86c                                         |     memcpy (r0, r1, r2);
    0x00027752 ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x00027754 mov r1, r6                                        |     r1 = r6;
    0x00027756 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x00027758 vldr d16, [r4, 8]                                 |     __asm ("vldr d16, [r4, 8]");
    0x0002775c str r6, [r5, 0x24]                                |     *((r5 + 0x24)) = r6;
    0x0002775e mla r3, r7, r3, fp                                |     __asm ("mla r3, r7, r3, fp");
    0x00027762 ldrd sl, fp, [r5, 0x38]                           |     __asm ("ldrd sl, fp, [r5, 0x38]");
    0x00027766 vstr d16, [r5, 0x38]                              |     __asm ("vstr d16, [r5, 0x38]");
    0x0002776a adds r2, 1                                        |     r2++;
    0x0002776c str r2, [r5, 0x10]                                |     *((r5 + 0x10)) = r2;
    0x0002776e mov.w r2, 0xb00                                   |     r2 = 0xb00;
    0x00027772 mov r0, r3                                        |     r0 = r3;
    0x00027774 strd sl, fp, [r5, 0x40]                           |     __asm ("strd sl, fp, [r5, 0x40]");
    0x00027778 blx 0x8e8                                         |     fcn_000008e8 ();
    0x0002777c ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x0002777e mov r3, r0                                        |     r3 = r0;
    0x00027780 movs r1, 0                                        |     r1 = 0;
    0x00027782 str.w r6, [r0, 0xb00]                             |     __asm ("str.w r6, aav.0x000000ff");
    0x00027786 add r3, r7                                        |     r3 += r7;
    0x00027788 movs r0, 0                                        |     r0 = 0;
    0x0002778a movt r1, 0x7ff0                                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x0002778e strd r0, r1, [r3, -0x8]                           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x00027792 str r6, [r5, 0x48]                                |     *((r5 + 0x48)) = r6;
    0x00027794 str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x00027796 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0002779a beq.w 0x273bc                                     |         goto label_9;
                                                                 |     }
    0x0002779e b 0x273ea                                         |     goto label_10;
                                                                 | label_35:
    0x000277a0 vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
    0x000277a4 b 0x2737c                                         |     goto label_16;
                                                                 | label_44:
    0x000277a6 vmov.f64 d0, d10                                  |     __asm ("vmov.f64 d0, d10");
    0x000277aa blx 0x830                                         |     log2 (r0);
    0x000277ae b 0x2750e                                         |     goto label_17;
                                                                 | label_30:
    0x000277b0 vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
    0x000277b4 b 0x27314                                         |     goto label_18;
                                                                 | label_43:
    0x000277b6 vmov.i64 d10, 0                                   |     __asm ("vmov.i64 d10, 0");
    0x000277ba b 0x27512                                         |     goto label_19;
                                                                 | label_47:
    0x000277bc mov.w r2, 0xb10                                   |     r2 = 0xb10;
    0x000277c0 movs r1, 0                                        |     r1 = 0;
    0x000277c2 mla r3, r2, r3, fp                                |     __asm ("mla r3, r2, r3, fp");
    0x000277c6 mov.w r2, 0xb00                                   |     r2 = 0xb00;
    0x000277ca mov r0, r3                                        |     r0 = r3;
    0x000277cc blx 0x8e8                                         |     fcn_000008e8 ();
    0x000277d0 movs r2, 0                                        |     r2 = 0;
    0x000277d2 movs r1, 0                                        |     r1 = 0;
    0x000277d4 add.w r3, r0, 0xb10                               |     r3 = r0 + 0xb10;
    0x000277d8 str.w r2, [r0, 0xb00]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x000277dc movt r1, 0x7ff0                                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x000277e0 movs r0, 0                                        |     r0 = 0;
    0x000277e2 strd r0, r1, [r3, -0x8]                           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x000277e6 b 0x27620                                         |     goto label_20;
                                                                 | label_38:
    0x000277e8 blx 0x884                                         |     r0 = stack_chk_fail ();
    0x000277ec adds r0, r0, 6                                    |     r0 += 6;
    0x000277ee movs r6, r0                                       |     r6 = r0;
    0x000277f0 lsls r4, r5, 1                                    |     r4 = r5 << 1;
    0x000277f2 movs r0, r0                                       |     
    0x000277f4 lsrs r4, r6, 3                                    |     r4 = r6 >> 3;
    0x000277f6 movs r5, r0                                       |     r5 = r0;
    0x000277f8 lsrs r6, r2, 2                                    |     r6 = r2 >> 2;
    0x000277fa movs r5, r0                                       |     r5 = r0;
    0x000277fc lsrs r0, r6, 1                                    |     r0 = r6 >> 1;
    0x000277fe movs r5, r0                                       |     r5 = r0;
    0x00027800 lsrs r6, r0, 1                                    |     r6 = r0 >> 1;
    0x00027802 movs r5, r0                                       |     r5 = r0;
    0x00027804 lsrs r0, r1, 0x20                                 |     r0 = r1 >> 0x20;
    0x00027806 movs r5, r0                                       |     r5 = r0;
    0x00027808 lsls r6, r3, 0x1f                                 |     r6 = r3 << 0x1f;
    0x0002780a movs r5, r0                                       |     r5 = r0;
    0x0002780c subs r2, r5, r6                                   |     r2 = r5 - r6;
    0x0002780e movs r6, r0                                       |     r6 = r0;
    0x00027810 lsls r4, r4, 0x1c                                 |     r4 <<= 0x1c;
    0x00027812 movs r5, r0                                       |     r5 = r0;
    0x00027814 lsls r6, r1, 0x1c                                 |     r6 = r1 << 0x1c;
    0x00027816 movs r5, r0                                       |     r5 = r0;
    0x00027818 lsls r0, r2, 0x1a                                 |     r0 = r2 << 0x1a;
    0x0002781a movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libbrotlienc.so.1.0.9 @ 0x27858 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00027858 ()                                      | void fcn_00027858 (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_bp_10h;
                                                                 |     void * s2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int32_t var_38h_2;
                                                                 |     int16_t var_40h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_4h_2;
                                                                 |     void * s1;
                                                                 |     int16_t var_4h_3;
                                                                 |     int16_t var_188h;
                                                                 |     int16_t var_8dch;
                                                                 |     int32_t var_880h;
                                                                 |     void * var_890h;
                                                                 |     int16_t var_890h_2;
                                                                 |     int16_t var_1180h;
                                                                 |     int32_t var_0h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00027858 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0002785c mov r8, r1                                        |     r8 = r1;
    0x0002785e ldr r7, [r0, 0x24]                                |     r7 = *((r0 + 0x24));
    0x00027860 mov r5, r0                                        |     r5 = r0;
    0x00027862 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x00027864 ldr.w r2, [pc, 0x60c]                             |     
    0x00027868 vpush {d8, d9, d10, d11}                          |     __asm ("vpush {d8, d9, d10, d11}");
    0x0002786c sub.w sp, sp, 0x1180                              |     
    0x00027870 cmp r7, r3                                        |     
    0x00027872 sub sp, 0xc                                       |     
    0x00027874 it lo                                             |     
                                                                 |     if (r7 >= r3) {
    0x00027876 movlo r7, r3                                      |         r7 = r3;
                                                                 |     }
    0x00027878 ldr.w r3, [pc, 0x5fc]                             |     r3 = *(0x27e78);
    0x0002787c add r2, pc                                        |     r2 = 0x4f6f4;
    0x0002787e ldrd sl, sb, [r0, 0x10]                           |     __asm ("ldrd sl, sb, [r0, 0x10]");
    0x00027882 add.w r1, sp, 0x1180                              |     r1 += var_1180h;
    0x00027886 ldr.w fp, [r0, 0x18]                              |     fp = *((r0 + 0x18));
    0x0002788a ldr r3, [r2, r3]                                  |     
    0x0002788c adds r1, 4                                        |     r1 += 4;
    0x0002788e ldr r3, [r3]                                      |     r3 = *(0x4f6f4);
    0x00027890 str r3, [r1]                                      |     *(r1) = r3;
    0x00027892 mov.w r3, 0                                       |     r3 = 0;
    0x00027896 str r7, [r0, 0x24]                                |     *((r0 + 0x24)) = r7;
    0x00027898 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0002789c bne 0x278f2                                       |         
    0x0002789e ldr.w r3, [sb, 0xc]                               |         r3 = *((sb + 0xc));
    0x000278a2 str r7, [r3]                                      |         *(r3) = r7;
    0x000278a4 ldr.w r3, [sb, 8]                                 |         r3 = *((sb + 8));
    0x000278a8 strb.w sl, [r3]                                   |         *(r3) = sl;
    0x000278ac mov r3, fp                                        |         r3 = fp;
    0x000278ae ldr r6, [r0]                                      |         r6 = *(r0);
    0x000278b0 add.w r7, fp, r6, lsl 2                           |         r7 = fp + (r6 << 2);
    0x000278b4 ands r6, r6, 1                                    |         r6 &= 1;
                                                                 |         if (r6 != r6) {
    0x000278b8 bne 0x279ac                                       |             goto label_21;
                                                                 |         }
    0x000278ba cmp fp, r7                                        |         
                                                                 |         if (fp >= r7) {
    0x000278bc bhs.w 0x27a82                                     |             goto label_22;
                                                                 |         }
    0x000278c0 vmov.i64 d8, 0                                    |         __asm ("vmov.i64 d8, 0");
                                                                 | label_3:
    0x000278c4 mov r4, r3                                        |         r4 = r3;
    0x000278c6 ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
    0x000278ca cmp r3, 0xff                                      |         
    0x000278cc add.w sl, r3, r6                                  |         sl = r3 + r6;
    0x000278d0 vmov s15, r3                                      |         __asm ("vmov s15, r3");
    0x000278d4 vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (r3 > 0xff) {
    0x000278d8 bhi.w 0x27a90                                     |             goto label_23;
                                                                 |         }
    0x000278dc ldr.w r2, [pc, 0x59c]                             |         
    0x000278e0 add r2, pc                                        |         r2 = 0x4f760;
    0x000278e2 add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x000278e6 vldr d0, [r3]                                     |         __asm ("vldr d0, [r3]");
                                                                 | label_2:
    0x000278ea vmls.f64 d8, d9, d0                               |         __asm ("vmls.f64 d8, d9, d0");
    0x000278ee mov r3, r4                                        |         r3 = r4;
    0x000278f0 b 0x279b0                                         |         goto label_24;
                                                                 |     }
    0x000278f2 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000278f4 beq.w 0x27a3e                                     |         goto label_25;
                                                                 |     }
    0x000278f8 ldr r3, [r0, 0x28]                                |     r3 = *((r0 + 0x28));
    0x000278fa mov.w r1, 0x890                                   |     r1 = fcn.00000890;
    0x000278fe ldr r2, [r0]                                      |     r2 = *(r0);
    0x00027900 mla r3, r1, r3, fp                                |     __asm ("mla r3, r1, r3, fp");
    0x00027904 ands r6, r2, 1                                    |     r6 = r2 & 1;
    0x00027908 lsl.w r1, r2, 2                                   |     r1 = r2 << 2;
    0x0002790c str r6, [sp, 8]                                   |     var_8h = r6;
    0x0002790e mov r0, r3                                        |     r0 = r3;
    0x00027910 mov r4, r3                                        |     r4 = r3;
    0x00027912 str r3, [sp, 4]                                   |     s2 = r3;
    0x00027914 add r3, r1                                        |     r3 += r1;
    0x00027916 str r1, [sp, 0x10]                                |     var_10h = r1;
                                                                 |     if (r6 != r2) {
    0x00027918 bne.w 0x27a88                                     |         goto label_26;
                                                                 |     }
    0x0002791c cmp r0, r3                                        |     
                                                                 |     if (r0 >= r3) {
    0x0002791e bhs.w 0x27a9e                                     |         goto label_27;
                                                                 |     }
    0x00027922 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
                                                                 |     do {
    0x00027926 ldr r2, [r4], 4                                   |         r2 = *(r4);
                                                                 |         r4 += 4;
    0x0002792a cmp r2, 0xff                                      |         
    0x0002792c add r6, r2                                        |         r6 += r2;
    0x0002792e vmov s15, r2                                      |         __asm ("vmov s15, r2");
    0x00027932 vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (r2 > 0xff) {
    0x00027936 bhi.w 0x27bea                                     |             goto label_28;
                                                                 |         }
    0x0002793a ldr.w r1, [pc, 0x544]                             |         
    0x0002793e add r1, pc                                        |         r1 = 0x4f7c4;
    0x00027940 add.w r2, r1, r2, lsl 3                           |         r2 = r1 + (r2 << 3);
    0x00027944 vldr d0, [r2]                                     |         __asm ("vldr d0, [r2]");
                                                                 | label_7:
    0x00027948 vmls.f64 d8, d9, d0                               |         __asm ("vmls.f64 d8, d9, d0");
                                                                 | label_1:
    0x0002794c ldr r2, [r4], 4                                   |         r2 = *(r4);
                                                                 |         r4 += 4;
    0x00027950 cmp r2, 0xff                                      |         
    0x00027952 add r6, r2                                        |         r6 += r2;
    0x00027954 vmov s15, r2                                      |         __asm ("vmov s15, r2");
    0x00027958 vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (r2 > 0xff) {
    0x0002795c bhi.w 0x27cba                                     |             goto label_29;
                                                                 |         }
    0x00027960 ldr.w r1, [pc, 0x520]                             |         
    0x00027964 add r1, pc                                        |         r1 = 0x4f7ec;
    0x00027966 add.w r2, r1, r2, lsl 3                           |         r2 = r1 + (r2 << 3);
    0x0002796a vldr d0, [r2]                                     |         __asm ("vldr d0, [r2]");
                                                                 | label_11:
    0x0002796e cmp r3, r4                                        |         
    0x00027970 vmls.f64 d8, d9, d0                               |         __asm ("vmls.f64 d8, d9, d0");
    0x00027974 bhi 0x27926                                       |         
                                                                 |     } while (r3 > r4);
    0x00027976 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00027978 beq.w 0x27e36                                     |         goto label_30;
                                                                 |     }
    0x0002797c cmp r6, 0xff                                      |     
    0x0002797e vmov s15, r6                                      |     __asm ("vmov s15, r6");
    0x00027982 vcvt.f64.u32 d9, s15                              |     __asm ("vcvt.f64.u32 d9, s15");
                                                                 |     if (r6 > 0xff) {
    0x00027986 bhi.w 0x27d6c                                     |         goto label_31;
                                                                 |     }
    0x0002798a ldr.w r3, [pc, 0x4fc]                             |     
    0x0002798e add r3, pc                                        |     r3 = 0x4f81c;
    0x00027990 add.w r3, r3, r6, lsl 3                           |     r3 += (r6 << 3);
    0x00027994 vldr d0, [r3]                                     |     __asm ("vldr d0, [r3]");
                                                                 | label_13:
    0x00027998 vmla.f64 d8, d9, d0                               |     __asm ("vmla.f64 d8, d9, d0");
                                                                 | label_18:
    0x0002799c vcmpe.f64 d8, d9                                  |     __asm ("vcmpe.f64 d8, d9");
    0x000279a0 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x000279a4 it pl                                             |     
                                                                 |     if (r6 >= 0xff) {
    0x000279a6 vmovpl d9, d8                                     |         __asm ("vmovpl d9, d8");
                                                                 |     }
    0x000279aa b 0x27aa2                                         |     goto label_32;
                                                                 | label_21:
    0x000279ac vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
                                                                 | label_24:
    0x000279b0 mov r4, r3                                        |     r4 = r3;
    0x000279b2 ldr r3, [r4], 4                                   |     r3 = *(r4);
                                                                 |     r4 += 4;
    0x000279b6 cmp r3, 0xff                                      |     
    0x000279b8 add.w r6, r3, sl                                  |     r6 = r3 + sl;
    0x000279bc vmov s15, r3                                      |     __asm ("vmov s15, r3");
    0x000279c0 vcvt.f64.u32 d9, s15                              |     __asm ("vcvt.f64.u32 d9, s15");
                                                                 |     if (r3 > 0xff) {
    0x000279c4 bhi.w 0x27baa                                     |         goto label_33;
                                                                 |     }
    0x000279c8 ldr.w r2, [pc, 0x4c0]                             |     
    0x000279cc add r2, pc                                        |     r2 = 0x4f85c;
    0x000279ce add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x000279d2 vldr d0, [r3]                                     |     __asm ("vldr d0, [r3]");
                                                                 | label_4:
    0x000279d6 cmp r7, r4                                        |     
    0x000279d8 vmls.f64 d8, d9, d0                               |     __asm ("vmls.f64 d8, d9, d0");
                                                                 |     if (r7 > r4) {
    0x000279dc bhi 0x27a9a                                       |         goto label_34;
                                                                 |     }
    0x000279de cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000279e0 beq.w 0x27e26                                     |         goto label_35;
                                                                 |     }
    0x000279e4 cmp r6, 0xff                                      |     
    0x000279e6 vmov s15, r6                                      |     __asm ("vmov s15, r6");
    0x000279ea vcvt.f64.u32 d9, s15                              |     __asm ("vcvt.f64.u32 d9, s15");
                                                                 |     if (r6 > 0xff) {
    0x000279ee bhi.w 0x27be0                                     |         goto label_36;
                                                                 |     }
    0x000279f2 ldr.w r3, [pc, 0x49c]                             |     
    0x000279f6 add r3, pc                                        |     r3 = 0x4f88c;
    0x000279f8 add.w r3, r3, r6, lsl 3                           |     r3 += (r6 << 3);
    0x000279fc vldr d0, [r3]                                     |     __asm ("vldr d0, [r3]");
                                                                 | label_6:
    0x00027a00 vmla.f64 d8, d9, d0                               |     __asm ("vmla.f64 d8, d9, d0");
                                                                 | label_16:
    0x00027a04 vcmpe.f64 d8, d9                                  |     __asm ("vcmpe.f64 d8, d9");
    0x00027a08 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00027a0c it pl                                             |     
                                                                 |     if (r6 >= 0xff) {
    0x00027a0e vmovpl d9, d8                                     |         __asm ("vmovpl d9, d8");
                                                                 |     }
                                                                 | label_0:
    0x00027a12 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00027a14 vstr d9, [r5, 0x38]                               |     __asm ("vstr d9, [r5, 0x38]");
    0x00027a18 adds r3, 1                                        |     r3++;
    0x00027a1a vstr d9, [r5, 0x40]                               |     __asm ("vstr d9, [r5, 0x40]");
    0x00027a1e str r3, [r5, 0x10]                                |     *((r5 + 0x10)) = r3;
    0x00027a20 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00027a24 ldr r2, [r5, 0x1c]                                |     r2 = *((r5 + 0x1c));
    0x00027a26 adds r3, 1                                        |     r3++;
    0x00027a28 str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x00027a2c ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x00027a2e adds r3, 1                                        |     r3++;
    0x00027a30 str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x00027a32 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00027a34 cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x00027a36 blo.w 0x27bb4                                     |         goto label_37;
                                                                 |     }
                                                                 | label_5:
    0x00027a3a movs r3, 0                                        |     r3 = 0;
    0x00027a3c str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
                                                                 | label_25:
    0x00027a3e cmp.w r8, 0                                       |     
    0x00027a42 bne 0x27a72                                       |     
                                                                 |     while (1) {
                                                                 | label_9:
    0x00027a44 ldr.w r2, [pc, 0x44c]                             |         
    0x00027a48 add.w r1, sp, 0x1180                              |         r1 += var_1180h;
    0x00027a4c ldr.w r3, [pc, 0x428]                             |         r3 = *(0x27e78);
    0x00027a50 adds r1, 4                                        |         r1 += 4;
    0x00027a52 add r2, pc                                        |         r2 = 0x4f8ea;
    0x00027a54 ldr r3, [r2, r3]                                  |         r3 = *(0x4f8ea);
    0x00027a56 ldr r2, [r3]                                      |         r2 = *(0x4f8ea);
    0x00027a58 ldr r3, [r1]                                      |         r3 = *(r1);
    0x00027a5a eors r2, r3                                       |         r2 ^= r3;
    0x00027a5c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00027a60 bne.w 0x27e6e                                     |             goto label_38;
                                                                 |         }
    0x00027a64 add.w sp, sp, 0x1180                              |         
    0x00027a68 add sp, 0xc                                       |         
    0x00027a6a vpop {d8, d9, d10, d11}                           |         __asm ("vpop {d8, d9, d10, d11}");
    0x00027a6e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_10:
    0x00027a72 ldr r3, [r5, 0x1c]                                |         r3 = *((r5 + 0x1c));
    0x00027a74 ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x00027a78 str r2, [r3]                                      |         *(r3) = r2;
    0x00027a7a ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00027a7c str.w r3, [sb, 4]                                 |         __asm ("str.w r3, [sb, 4]");
    0x00027a80 b 0x27a44                                         |         
                                                                 |     }
                                                                 | label_22:
    0x00027a82 vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
    0x00027a86 b 0x27a12                                         |     goto label_0;
                                                                 | label_26:
    0x00027a88 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
    0x00027a8c movs r6, 0                                        |     r6 = 0;
    0x00027a8e b 0x2794c                                         |     goto label_1;
                                                                 | label_23:
    0x00027a90 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027a94 blx 0x830                                         |     log2 (r0);
    0x00027a98 b 0x278ea                                         |     goto label_2;
                                                                 | label_34:
    0x00027a9a mov r3, r4                                        |     r3 = r4;
    0x00027a9c b 0x278c4                                         |     goto label_3;
                                                                 | label_27:
    0x00027a9e vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
                                                                 | label_32:
    0x00027aa2 ldr r3, [pc, 0x3f4]                               |     
    0x00027aa4 add r2, sp, 0x50                                  |     r2 += var_50h;
    0x00027aa6 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00027aa8 add.w r2, r5, 0x2c                                |     r2 = r5 + 0x2c;
    0x00027aac str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00027aae add r2, sp, 0x40                                  |     r2 += var_40h;
    0x00027ab0 add r3, pc                                        |     r3 = 0x4f94e;
    0x00027ab2 vmov.i64 d11, 0                                   |     __asm ("vmov.i64 d11, 0");
    0x00027ab6 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00027ab8 addw r6, sp, 0x8dc                                |     __asm ("addw r6, var_8dch");
    0x00027abc ldr r3, [pc, 0x3dc]                               |     
    0x00027abe str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00027ac0 add.w r2, r5, 0x38                                |     r2 = r5 + 0x38;
    0x00027ac4 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00027ac6 add r3, pc                                        |     r3 = 0x4f966;
    0x00027ac8 str r5, [sp, 0x28]                                |     var_28h = r5;
    0x00027aca str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00027acc add r3, sp, 0x60                                  |     r3 += s1;
    0x00027ace mov r4, r3                                        |     r4 = r3;
    0x00027ad0 add.w r2, r3, 0x1120                              |     r2 += var_1180h;
    0x00027ad4 strd r2, r7, [sp, 0x20]                           |     __asm ("strd r2, r7, [var_20h]");
                                                                 | label_8:
    0x00027ad8 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00027ada mov.w r7, 0x890                                   |     r7 = fcn.00000890;
    0x00027ade ldr r1, [sp, 4]                                   |     r1 = s2;
    0x00027ae0 mov r2, r7                                        |     r2 = r7;
    0x00027ae2 mov r0, r4                                        |     r0 = r4;
    0x00027ae4 ldr r5, [r3], 4                                   |     r5 = *(r3);
                                                                 |     r3 += 4;
    0x00027ae8 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00027aea blx 0x86c                                         |     memcpy (r0, r1, r2);
    0x00027aee mla ip, r7, r5, fp                                |     __asm ("mla ip, r7, r5, fp");
    0x00027af2 ldr.w r1, [r4, 0x880]                             |     r1 = var_880h;
    0x00027af6 mov r3, r4                                        |     r3 = r4;
    0x00027af8 subs r2, r4, 4                                    |     r2 -= var_4h_2;
    0x00027afa ldr.w r0, [ip, 0x880]                             |     r0 = *((ip + 0x880));
    0x00027afe add r1, r0                                        |     r1 += r0;
    0x00027b00 sub.w r0, ip, 4                                   |     r0 = ip - 4;
    0x00027b04 str.w r1, [r4, 0x880]                             |     __asm ("str.w r1, [var_880h]");
                                                                 |     do {
    0x00027b08 ldr r1, [r2, 4]!                                  |         r1 = s1;
    0x00027b0c ldr r5, [r0, 4]!                                  |         r5 = *((r0 += 4));
    0x00027b10 cmp r6, r2                                        |         
    0x00027b12 add r1, r5                                        |         r1 += r5;
    0x00027b14 str r1, [r2]                                      |         *(r2) = r1;
    0x00027b16 bne 0x27b08                                       |         
                                                                 |     } while (r6 != r2);
    0x00027b18 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00027b1a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00027b1c bne.w 0x27d60                                     |         goto label_39;
                                                                 |     }
    0x00027b20 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00027b22 add r1, r4                                        |     r1 += r4;
    0x00027b24 cmp r4, r1                                        |     
                                                                 |     if (r4 >= r1) {
    0x00027b26 bhs 0x27bf8                                       |         goto label_40;
                                                                 |     }
    0x00027b28 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
                                                                 |     do {
    0x00027b2c ldr r0, [r3], 4                                   |         r0 = *(r3);
                                                                 |         r3 += 4;
    0x00027b30 cmp r0, 0xff                                      |         
    0x00027b32 add r2, r0                                        |         r2 += r0;
    0x00027b34 vmov s15, r0                                      |         __asm ("vmov s15, r0");
    0x00027b38 vcvt.f64.u32 d10, s15                             |         __asm ("vcvt.f64.u32 d10, s15");
                                                                 |         if (r0 > 0xff) {
    0x00027b3c bhi.w 0x27d76                                     |             goto label_41;
                                                                 |         }
    0x00027b40 ldr.w ip, [pc, 0x35c]                             |         
    0x00027b44 add ip, pc                                        |         ip = 0x4f9e8;
    0x00027b46 add.w r0, ip, r0, lsl 3                           |         r0 = ip + (r0 << 3);
    0x00027b4a vldr d0, [r0]                                     |         __asm ("vldr d0, [r0]");
                                                                 | label_14:
    0x00027b4e vmls.f64 d8, d10, d0                              |         __asm ("vmls.f64 d8, d10, d0");
                                                                 | label_12:
    0x00027b52 ldr r0, [r3], 4                                   |         r0 = *(r3);
                                                                 |         r3 += 4;
    0x00027b56 cmp r0, 0xff                                      |         
    0x00027b58 add r2, r0                                        |         r2 += r0;
    0x00027b5a vmov s15, r0                                      |         __asm ("vmov s15, r0");
    0x00027b5e vcvt.f64.u32 d10, s15                             |         __asm ("vcvt.f64.u32 d10, s15");
                                                                 |         if (r0 > 0xff) {
    0x00027b62 bhi.w 0x27d8c                                     |             goto label_42;
                                                                 |         }
    0x00027b66 ldr r5, [sp, 0x30]                                |         r5 = var_30h;
    0x00027b68 add.w r0, r5, r0, lsl 3                           |         r0 = r5 + (r0 << 3);
    0x00027b6c vldr d0, [r0]                                     |         __asm ("vldr d0, [r0]");
                                                                 | label_15:
    0x00027b70 cmp r3, r1                                        |         
    0x00027b72 vmls.f64 d8, d10, d0                              |         __asm ("vmls.f64 d8, d10, d0");
    0x00027b76 blo 0x27b2c                                       |         
                                                                 |     } while (r3 <= r1);
    0x00027b78 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00027b7a beq.w 0x27e3c                                     |         goto label_43;
                                                                 |     }
    0x00027b7e cmp r2, 0xff                                      |     
    0x00027b80 vmov s15, r2                                      |     __asm ("vmov s15, r2");
    0x00027b84 vcvt.f64.u32 d10, s15                             |     __asm ("vcvt.f64.u32 d10, s15");
                                                                 |     if (r2 > 0xff) {
    0x00027b88 bhi.w 0x27e2c                                     |         goto label_44;
                                                                 |     }
    0x00027b8c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00027b8e add.w r2, r3, r2, lsl 3                           |     r2 = r3 + (r2 << 3);
    0x00027b92 vldr d0, [r2]                                     |     __asm ("vldr d0, [r2]");
                                                                 | label_17:
    0x00027b96 vmla.f64 d8, d10, d0                              |     __asm ("vmla.f64 d8, d10, d0");
                                                                 | label_19:
    0x00027b9a vcmpe.f64 d10, d8                                 |     __asm ("vcmpe.f64 d10, d8");
    0x00027b9e vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00027ba2 it le                                             |     
                                                                 |     if (r2 <= 0xff) {
    0x00027ba4 vmovle d10, d8                                    |         __asm ("vmovle d10, d8");
                                                                 |     }
    0x00027ba8 b 0x27bfc                                         |     goto label_45;
                                                                 | label_33:
    0x00027baa vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027bae blx 0x830                                         |     log2 (r0);
    0x00027bb2 b 0x279d6                                         |     goto label_4;
                                                                 | label_37:
    0x00027bb4 mov.w r2, 0x890                                   |     r2 = fcn.00000890;
    0x00027bb8 movs r1, 0                                        |     r1 = 0;
    0x00027bba mla r3, r2, r3, fp                                |     __asm ("mla r3, r2, r3, fp");
    0x00027bbe mov.w r2, 0x880                                   |     r2 = 0x880;
    0x00027bc2 mov r0, r3                                        |     r0 = r3;
    0x00027bc4 blx 0x8e8                                         |     fcn_000008e8 ();
    0x00027bc8 movs r2, 0                                        |     r2 = 0;
    0x00027bca movs r1, 0                                        |     r1 = 0;
    0x00027bcc add.w r3, r0, 0x890                               |     r3 = r0 + fcn.00000890;
    0x00027bd0 str.w r2, [r0, 0x880]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x00027bd4 movt r1, 0x7ff0                                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x00027bd8 movs r0, 0                                        |     r0 = 0;
    0x00027bda strd r0, r1, [r3, -0x8]                           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x00027bde b 0x27a3a                                         |     goto label_5;
                                                                 | label_36:
    0x00027be0 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027be4 blx 0x830                                         |     log2 (r0);
    0x00027be8 b 0x27a00                                         |     goto label_6;
                                                                 | label_28:
    0x00027bea vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027bee str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00027bf0 blx 0x830                                         |     log2 (r0);
    0x00027bf4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00027bf6 b 0x27948                                         |     goto label_7;
                                                                 | label_40:
    0x00027bf8 vmov.i64 d10, 0                                   |     __asm ("vmov.i64 d10, 0");
                                                                 | label_45:
    0x00027bfc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00027bfe add.w r4, r4, 0x890                               |     r4 += var_890h;
    0x00027c02 vsub.f64 d16, d10, d9                             |     __asm ("vsub.f64 d16, d10, d9");
    0x00027c06 add.w r6, r6, 0x890                               |     r6 += var_890h_2;
    0x00027c0a vldmia r3!, {d17}                                 |     __asm ("vldmia r3!, {d17}");
    0x00027c0e str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00027c10 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00027c12 vsub.f64 d16, d16, d17                            |     __asm ("vsub.f64 d16, d16, d17");
    0x00027c16 vstmia r3!, {d10}                                 |     __asm ("vstmia r3!, {d10}");
    0x00027c1a str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00027c1c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00027c1e vstmia r3!, {d16}                                 |     __asm ("vstmia r3!, {d16}");
    0x00027c22 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00027c24 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00027c26 cmp r3, r4                                        |     
                                                                 |     if (r3 != r4) {
    0x00027c28 bne.w 0x27ad8                                     |         goto label_8;
                                                                 |     }
    0x00027c2c ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x00027c30 add r4, sp, 0x188                                 |     r4 += var_188h;
    0x00027c32 sub.w r3, r4, 0x138                               |     r3 -= var_50h;
    0x00027c36 ldrd r7, r5, [sp, 0x24]                           |     __asm ("ldrd r7, r5, [var_28h]");
    0x00027c3a vldr d16, [r3]                                    |     __asm ("vldr d16, [r3]");
    0x00027c3e cmp r2, 0xff                                      |     
    0x00027c40 vldr d17, [r3, 8]                                 |     __asm ("vldr d17, [r3, 8]");
    0x00027c44 ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
                                                                 |     if (r2 > 0xff) {
    0x00027c48 bhi 0x27cc8                                       |         goto label_46;
                                                                 |     }
    0x00027c4a vldr d18, [r5, 8]                                 |     __asm ("vldr d18, [r5, 8]");
    0x00027c4e vcmpe.f64 d18, d16                                |     __asm ("vcmpe.f64 d18, d16");
    0x00027c52 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r2 >= 0xff) {
    0x00027c56 bpl 0x27cc8                                       |         goto label_46;
                                                                 |     }
    0x00027c58 vcmpe.f64 d18, d17                                |     __asm ("vcmpe.f64 d18, d17");
    0x00027c5c vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r2 >= 0xff) {
    0x00027c60 bpl 0x27cc8                                       |         goto label_46;
                                                                 |     }
    0x00027c62 str.w r7, [r3, sl, lsl 2]                         |     __asm ("str.w r7, [r3, sl, lsl 2]");
    0x00027c66 ldr.w r2, [sb, 8]                                 |     r2 = *((sb + 8));
    0x00027c6a ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x00027c6e ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00027c70 strb r1, [r2, r3]                                 |     *((r2 + r3)) = r1;
    0x00027c72 ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x00027c74 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x00027c78 ldrd r6, r7, [r5, 0x38]                           |     __asm ("ldrd r6, r7, [r5, 0x38]");
    0x00027c7c str r3, [r5, 0x30]                                |     *((r5 + 0x30)) = r3;
    0x00027c7e ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00027c80 ldr r1, [r5, 0x1c]                                |     r1 = *((r5 + 0x1c));
    0x00027c82 uxtb r0, r2                                       |     r0 = (int8_t) r2;
    0x00027c84 adds r2, 1                                        |     r2++;
    0x00027c86 strd r6, r7, [r5, 0x40]                           |     __asm ("strd r6, r7, [r5, 0x40]");
    0x00027c8a adds r3, 1                                        |     r3++;
    0x00027c8c str r0, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r0;
    0x00027c8e str r3, [r5, 0x10]                                |     *((r5 + 0x10)) = r3;
    0x00027c90 ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x00027c92 vstr d9, [r5, 0x38]                               |     __asm ("vstr d9, [r5, 0x38]");
    0x00027c96 str.w r2, [sb]                                    |     __asm ("str.w r2, [sb]");
    0x00027c9a adds r3, 1                                        |     r3++;
    0x00027c9c str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x00027c9e ldr r2, [r1]                                      |     r2 = *(r1);
    0x00027ca0 cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x00027ca2 blo.w 0x27e42                                     |         goto label_47;
                                                                 |     }
                                                                 | label_20:
    0x00027ca6 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00027ca8 movs r3, 0                                        |     r3 = 0;
    0x00027caa str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
    0x00027cac str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x00027cae str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x00027cb0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00027cb4 beq.w 0x27a44                                     |         goto label_9;
                                                                 |     }
    0x00027cb8 b 0x27a72                                         |     goto label_10;
                                                                 | label_29:
    0x00027cba vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027cbe str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00027cc0 blx 0x830                                         |     log2 (r0);
    0x00027cc4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00027cc6 b 0x2796e                                         |     goto label_11;
                                                                 | label_46:
    0x00027cc8 vmov.f64 d18, 2.000000e+01                        |     __asm ("vmov.f64 d18, 2");
    0x00027ccc vsub.f64 d16, d16, d18                            |     __asm ("vsub.f64 d16, d16, d18");
    0x00027cd0 vcmpe.f64 d16, d17                                |     __asm ("vcmpe.f64 d16, d17");
    0x00027cd4 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r8 > 0) {
    0x00027cd8 bgt 0x27da2                                       |         goto label_48;
                                                                 |     }
    0x00027cda add.w sl, sl, 0x40000000                          |     sl += 0x40000000;
    0x00027cde mov.w r2, 0x890                                   |     r2 = fcn.00000890;
    0x00027ce2 add.w sl, sl, -1                                  |     sl += -1;
    0x00027ce6 ldr.w r1, [r3, sl, lsl 2]                         |     offset_0 = sl << 2;
                                                                 |     r1 = *((r3 + offset_0));
    0x00027cea add r1, r7                                        |     r1 += r7;
    0x00027cec str.w r1, [r3, sl, lsl 2]                         |     __asm ("str.w r1, [r3, sl, lsl 2]");
    0x00027cf0 sub.w r1, r4, 0x128                               |     r1 -= s1;
    0x00027cf4 ldr r0, [r5, 0x2c]                                |     r0 = *((r5 + 0x2c));
    0x00027cf6 sub.w r4, r4, 0x148                               |     r4 -= var_40h;
    0x00027cfa mla r0, r2, r0, fp                                |     __asm ("mla r0, r2, r0, fp");
    0x00027cfe blx 0x86c                                         |     memcpy (r0, r1, r2);
    0x00027d02 ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x00027d06 ldrd r2, r3, [r4]                                 |     __asm ("ldrd r2, r3, [r4]");
    0x00027d0a cmp r1, 1                                         |     
    0x00027d0c strd r2, r3, [r5, 0x38]                           |     __asm ("strd r2, r3, [r5, 0x38]");
                                                                 |     if (r1 == 1) {
    0x00027d10 bne 0x27d16                                       |         
    0x00027d12 strd r2, r3, [r5, 0x40]                           |         __asm ("strd r2, r3, [r5, 0x40]");
                                                                 |     }
    0x00027d16 ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x00027d18 mov.w r2, 0x890                                   |     r2 = fcn.00000890;
    0x00027d1c movs r4, 0                                        |     r4 = 0;
    0x00027d1e mov r1, r4                                        |     r1 = r4;
    0x00027d20 str r4, [r5, 0x24]                                |     *((r5 + 0x24)) = r4;
    0x00027d22 mla fp, r2, r3, fp                                |     __asm ("mla fp, r2, r3, fp");
    0x00027d26 mov.w r2, 0x880                                   |     r2 = 0x880;
    0x00027d2a mov r0, fp                                        |     r0 = fp;
    0x00027d2c add.w fp, fp, 0x890                               |     
    0x00027d30 blx 0x8e8                                         |     fcn_000008e8 ();
    0x00027d34 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x00027d36 movs r1, 0                                        |     r1 = 0;
    0x00027d38 movs r0, 0                                        |     r0 = 0;
    0x00027d3a movt r1, 0x7ff0                                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x00027d3e str r4, [fp, -0x10]                               |     var_bp_10h = r4;
    0x00027d42 adds r3, 1                                        |     r3++;
    0x00027d44 strd r0, r1, [fp, -0x8]                           |     __asm ("strd r0, r1, [fp, -0x8]");
    0x00027d48 cmp r3, 1                                         |     
    0x00027d4a str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x00027d4c itttt hi                                          |     
                                                                 |     if (r3 <= 1) {
    0x00027d4e ldrhi r2, [r5, 4]                                 |         r2 = *((r5 + 4));
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x00027d50 ldrhi r3, [r5, 0x20]                              |         r3 = *((r5 + 0x20));
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x00027d52 addhi r3, r3, r2                                  |         r3 += r2;
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x00027d54 strhi r3, [r5, 0x20]                              |         *((r5 + 0x20)) = r3;
                                                                 |     }
    0x00027d56 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00027d5a beq.w 0x27a44                                     |         goto label_9;
                                                                 |     }
    0x00027d5e b 0x27a72                                         |     goto label_10;
                                                                 | label_39:
    0x00027d60 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00027d62 movs r2, 0                                        |     r2 = 0;
    0x00027d64 vmov.f64 d8, d11                                  |     __asm ("vmov.f64 d8, d11");
    0x00027d68 add r1, r4                                        |     r1 += r4;
    0x00027d6a b 0x27b52                                         |     goto label_12;
                                                                 | label_31:
    0x00027d6c vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00027d70 blx 0x830                                         |     log2 (r0);
    0x00027d74 b 0x27998                                         |     goto label_13;
                                                                 | label_41:
    0x00027d76 vmov.f64 d0, d10                                  |     __asm ("vmov.f64 d0, d10");
    0x00027d7a strd r2, r1, [sp, 0x38]                           |     __asm ("strd r2, r1, [var_38h]");
    0x00027d7e str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00027d80 blx 0x830                                         |     log2 (r0);
    0x00027d84 ldrd r2, r1, [sp, 0x38]                           |     __asm ("ldrd r2, r1, [var_38h]");
    0x00027d88 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00027d8a b 0x27b4e                                         |     goto label_14;
                                                                 | label_42:
    0x00027d8c vmov.f64 d0, d10                                  |     __asm ("vmov.f64 d0, d10");
    0x00027d90 strd r2, r1, [sp, 0x38]                           |     __asm ("strd r2, r1, [var_38h]");
    0x00027d94 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00027d96 blx 0x830                                         |     r0 = log2 (r0);
    0x00027d9a ldrd r0, r0, [sp, 0x28]                           |     __asm ("ldrd r0, r0, [sp, 0x28]");
    0x00027d9e movs r0, r0                                       |     
    0x00027da0 b 0x27b70                                         |     goto label_15;
                                                                 | label_48:
    0x00027da2 str.w r7, [r3, sl, lsl 2]                         |     __asm ("str.w r7, [r3, sl, lsl 2]");
    0x00027da6 mov.w r7, 0x890                                   |     r7 = fcn.00000890;
    0x00027daa ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x00027dae add.w r1, r4, 0x768                               |     r1 += var_890h;
    0x00027db2 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00027db4 mov r2, r7                                        |     r2 = r7;
    0x00027db6 sub.w r4, r4, 0x148                               |     r4 -= var_40h;
    0x00027dba movs r6, 0                                        |     r6 = 0;
    0x00027dbc add.w ip, r0, r3                                  |     
    0x00027dc0 ldrb ip, [ip, -0x2]                               |     ip = *((ip - 0x2));
    0x00027dc4 strb.w ip, [r0, r3]                               |     *((r0 + r3)) = ip;
    0x00027dc8 ldrd r3, r0, [r5, 0x2c]                           |     __asm ("ldrd r3, r0, [r5, 0x2c]");
    0x00027dcc strd r0, r3, [r5, 0x2c]                           |     __asm ("strd r0, r3, [r5, 0x2c]");
    0x00027dd0 mla r0, r7, r0, fp                                |     __asm ("mla r0, r7, r0, fp");
    0x00027dd4 blx 0x86c                                         |     memcpy (r0, r1, r2);
    0x00027dd8 ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x00027dda mov r1, r6                                        |     r1 = r6;
    0x00027ddc ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x00027dde vldr d16, [r4, 8]                                 |     __asm ("vldr d16, [r4, 8]");
    0x00027de2 str r6, [r5, 0x24]                                |     *((r5 + 0x24)) = r6;
    0x00027de4 mla r3, r7, r3, fp                                |     __asm ("mla r3, r7, r3, fp");
    0x00027de8 ldrd sl, fp, [r5, 0x38]                           |     __asm ("ldrd sl, fp, [r5, 0x38]");
    0x00027dec vstr d16, [r5, 0x38]                              |     __asm ("vstr d16, [r5, 0x38]");
    0x00027df0 adds r2, 1                                        |     r2++;
    0x00027df2 str r2, [r5, 0x10]                                |     *((r5 + 0x10)) = r2;
    0x00027df4 mov.w r2, 0x880                                   |     r2 = 0x880;
    0x00027df8 mov r0, r3                                        |     r0 = r3;
    0x00027dfa strd sl, fp, [r5, 0x40]                           |     __asm ("strd sl, fp, [r5, 0x40]");
    0x00027dfe blx 0x8e8                                         |     fcn_000008e8 ();
    0x00027e02 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00027e04 mov r3, r0                                        |     r3 = r0;
    0x00027e06 movs r1, 0                                        |     r1 = 0;
    0x00027e08 str.w r6, [r0, 0x880]                             |     __asm ("str.w r6, aav.0x000000ff");
    0x00027e0c add r3, r7                                        |     r3 += r7;
    0x00027e0e movs r0, 0                                        |     r0 = 0;
    0x00027e10 movt r1, 0x7ff0                                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x00027e14 strd r0, r1, [r3, -0x8]                           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x00027e18 str r6, [r5, 0x48]                                |     *((r5 + 0x48)) = r6;
    0x00027e1a str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x00027e1c cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00027e20 beq.w 0x27a44                                     |         goto label_9;
                                                                 |     }
    0x00027e24 b 0x27a72                                         |     goto label_10;
                                                                 | label_35:
    0x00027e26 vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
    0x00027e2a b 0x27a04                                         |     goto label_16;
                                                                 | label_44:
    0x00027e2c vmov.f64 d0, d10                                  |     __asm ("vmov.f64 d0, d10");
    0x00027e30 blx 0x830                                         |     log2 (r0);
    0x00027e34 b 0x27b96                                         |     goto label_17;
                                                                 | label_30:
    0x00027e36 vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
    0x00027e3a b 0x2799c                                         |     goto label_18;
                                                                 | label_43:
    0x00027e3c vmov.i64 d10, 0                                   |     __asm ("vmov.i64 d10, 0");
    0x00027e40 b 0x27b9a                                         |     goto label_19;
                                                                 | label_47:
    0x00027e42 mov.w r2, 0x890                                   |     r2 = fcn.00000890;
    0x00027e46 movs r1, 0                                        |     r1 = 0;
    0x00027e48 mla r3, r2, r3, fp                                |     __asm ("mla r3, r2, r3, fp");
    0x00027e4c mov.w r2, 0x880                                   |     r2 = 0x880;
    0x00027e50 mov r0, r3                                        |     r0 = r3;
    0x00027e52 blx 0x8e8                                         |     fcn_000008e8 ();
    0x00027e56 movs r2, 0                                        |     r2 = 0;
    0x00027e58 movs r1, 0                                        |     r1 = 0;
    0x00027e5a add.w r3, r0, 0x890                               |     r3 = r0 + fcn.00000890;
    0x00027e5e str.w r2, [r0, 0x880]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x00027e62 movt r1, 0x7ff0                                   |     r1 = (r1 & 0xFFFF) | 0x7ff00000;
    0x00027e66 movs r0, 0                                        |     r0 = 0;
    0x00027e68 strd r0, r1, [r3, -0x8]                           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x00027e6c b 0x27ca6                                         |     goto label_20;
                                                                 | label_38:
    0x00027e6e blx 0x884                                         |     stack_chk_fail ();
    0x00027e72 nop                                               |     
    0x00027e74 asrs r0, r7, 0x1b                                 |     r0 = r7 >> 0x1b;
    0x00027e76 movs r6, r0                                       |     r6 = r0;
    0x00027e78 lsls r4, r5, 1                                    |     r4 = r5 << 1;
    0x00027e7a movs r0, r0                                       |     
    0x00027e7c lsls r4, r5, 9                                    |     r4 = r5 << 9;
    0x00027e7e movs r5, r0                                       |     r5 = r0;
    0x00027e80 lsls r6, r1, 8                                    |     r6 = r1 << 8;
    0x00027e82 movs r5, r0                                       |     r5 = r0;
    0x00027e84 lsls r0, r5, 7                                    |     r0 = r5 << 7;
    0x00027e86 movs r5, r0                                       |     r5 = r0;
    0x00027e88 lsls r6, r7, 6                                    |     r6 = r7 << 6;
    0x00027e8a movs r5, r0                                       |     r5 = r0;
    0x00027e8c lsls r0, r0, 6                                    |     r0 <<= 6;
    0x00027e8e movs r5, r0                                       |     r5 = r0;
    0x00027e90 lsls r6, r2, 5                                    |     r6 = r2 << 5;
    0x00027e92 movs r5, r0                                       |     r5 = r0;
    0x00027e94 asrs r2, r4, 0x14                                 |     r2 = r4 >> 0x14;
    0x00027e96 movs r6, r0                                       |     r6 = r0;
    0x00027e98 lsls r4, r3, 2                                    |     r4 = r3 << 2;
    0x00027e9a movs r5, r0                                       |     r5 = r0;
    0x00027e9c lsls r6, r0, 2                                    |     r6 = r0 << 2;
    0x00027e9e movs r5, r0                                       |     r5 = r0;
    0x00027ea0 movs r0, r1                                       |     r0 = r1;
    0x00027ea2 movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libbrotlienc.so.1.0.9 @ 0x27ee0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00027ee0 ()                                      | void fcn_00027ee0 (int16_t arg_0h, int16_t arg_410h, int16_t arg_40000000h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int32_t var_54h_2;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int32_t var_60h_2;
                                                                 |     int16_t var_68h;
                                                                 |     int32_t var_68h_2;
                                                                 |     int16_t var_70h;
                                                                 |     int32_t var_70h_2;
                                                                 |     int16_t var_78h;
                                                                 |     int32_t var_8h_4;
                                                                 |     int16_t var_8h_5;
                                                                 |     int16_t var_e0h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int16_t var_8h_3;
                                                                 |     int16_t var_1b4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00027ee0 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00027ee4 mov r6, r0                                        |     r6 = r0;
    0x00027ee6 ldr.w r0, [pc, 0x810]                             |     
    0x00027eea ldr.w r3, [pc, 0x810]                             |     r3 = *(0x286fe);
    0x00027eee add r0, pc                                        |     r0 = 0x505ec;
    0x00027ef0 vpush {d8, d9, d10, d11, d12, d13}                |     __asm ("vpush {d8, d9, d10, d11, d12, d13}");
    0x00027ef4 sub sp, 0x1bc                                     |     
    0x00027ef6 ldr r7, [r6, 0x2c]                                |     r7 = *((r6 + 0x2c));
    0x00027ef8 ldr r3, [r0, r3]                                  |     
    0x00027efa ldr.w fp, [r6, 0x18]                              |     fp = *((r6 + 0x18));
    0x00027efe ldr.w sl, [r6, 0x1c]                              |     sl = *((r6 + 0x1c));
    0x00027f02 ldr r3, [r3]                                      |     r3 = *(0x505ec);
    0x00027f04 str r3, [sp, 0x1b4]                               |     var_1b4h = r3;
    0x00027f06 mov.w r3, 0                                       |     r3 = 0;
    0x00027f0a ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00027f0c ldr.w sb, [r6, 0x20]                              |     sb = *((r6 + 0x20));
    0x00027f10 strd r2, r1, [sp, 4]                              |     __asm ("strd r2, r1, [var_4h]");
    0x00027f14 str r3, [sp]                                      |     *(sp) = r3;
    0x00027f16 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00027f18 cmp r7, r3                                        |     
    0x00027f1a itt lo                                            |     
                                                                 |     if (r7 >= r3) {
    0x00027f1c movlo r7, r3                                      |         r7 = r3;
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x00027f1e strlo r3, [r6, 0x2c]                              |         *((r6 + 0x2c)) = r3;
                                                                 |     }
    0x00027f20 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00027f24 bne 0x28024                                       |         
    0x00027f26 ldr.w r3, [sl, 0xc]                               |         r3 = *((sl + 0xc));
    0x00027f2a str r7, [r3]                                      |         *(r3) = r7;
    0x00027f2c ldr.w r3, [sl, 8]                                 |         r3 = *((sl + 8));
    0x00027f30 strb.w fp, [r3]                                   |         *(r3) = fp;
    0x00027f34 ldr r3, [sp]                                      |         r3 = *(sp);
    0x00027f36 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00027f38 beq.w 0x2816e                                     |             goto label_26;
                                                                 |         }
    0x00027f3c ldr.w r2, [pc, 0x7c0]                             |         
    0x00027f40 mov r8, r6                                        |         r8 = r6;
    0x00027f42 ldr r3, [sp]                                      |         r3 = *(sp);
    0x00027f44 mov r7, sb                                        |         r7 = sb;
    0x00027f46 vmov.i64 d10, 0                                   |         __asm ("vmov.i64 d10, 0");
    0x00027f4a add r2, pc                                        |         r2 = 0x5064e;
    0x00027f4c str.w sl, [sp, 0x14]                              |         __asm ("str.w sl, [var_14h]");
    0x00027f50 add.w r5, r3, 8                                   |         r5 = r3 + 8;
    0x00027f54 str r2, [sp, 0x10]                                |         var_10h = r2;
    0x00027f56 ldr r3, [r8], 0x40                                |         r3 = *(r8);
                                                                 |         r8 += 0x40;
    0x00027f5a lsls r5, r5, 3                                    |         r5 <<= 3;
    0x00027f5c ldr.w r2, [pc, 0x7a4]                             |         
    0x00027f60 sub.w fp, r5, 0x40                                |         
    0x00027f64 add r5, r6                                        |         r5 += r6;
    0x00027f66 str r6, [sp, 0x18]                                |         var_18h = r6;
    0x00027f68 mov r6, r5                                        |         r6 = r5;
    0x00027f6a add r2, pc                                        |         r2 = 0x50672;
    0x00027f6c str r2, [sp, 0xc]                                 |         var_ch = r2;
    0x00027f6e add.w r2, r8, fp                                  |         r2 = r8 + fp;
    0x00027f72 lsl.w fp, r3, 2                                   |         
    0x00027f76 str r2, [sp, 8]                                   |         var_8h = r2;
    0x00027f78 and r2, r3, 1                                     |         r2 = r3 & 1;
    0x00027f7c mov sl, fp                                        |         sl = fp;
    0x00027f7e mov fp, r2                                        |         
                                                                 | label_0:
    0x00027f80 mov r3, r7                                        |         r3 = r7;
    0x00027f82 cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x00027f86 bne.w 0x281bc                                     |             goto label_27;
                                                                 |         }
    0x00027f8a add.w r5, r7, sl                                  |         r5 = r7 + sl;
    0x00027f8e cmp r7, r5                                        |         
                                                                 |         if (r7 >= r5) {
    0x00027f90 bhs.w 0x28152                                     |             goto label_28;
                                                                 |         }
    0x00027f94 vmov.i64 d8, 0                                    |         __asm ("vmov.i64 d8, 0");
    0x00027f98 mov sb, fp                                        |         sb = fp;
                                                                 | label_3:
    0x00027f9a mov r4, r3                                        |         r4 = r3;
    0x00027f9c ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
    0x00027fa0 cmp r3, 0xff                                      |         
    0x00027fa2 add sb, r3                                        |         sb += r3;
    0x00027fa4 vmov s15, r3                                      |         __asm ("vmov s15, r3");
    0x00027fa8 vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (r3 > 0xff) {
    0x00027fac bhi.w 0x2821e                                     |             goto label_29;
                                                                 |         }
    0x00027fb0 ldr.w r0, [pc, 0x754]                             |         
    0x00027fb4 add r0, pc                                        |         r0 = 0x506c0;
    0x00027fb6 add.w r3, r0, r3, lsl 3                           |         r3 = r0 + (r3 << 3);
    0x00027fba vldr d0, [r3]                                     |         __asm ("vldr d0, [r3]");
                                                                 | label_6:
    0x00027fbe vmls.f64 d8, d9, d0                               |         __asm ("vmls.f64 d8, d9, d0");
    0x00027fc2 mov r3, r4                                        |         r3 = r4;
                                                                 | label_1:
    0x00027fc4 mov r4, r3                                        |         r4 = r3;
    0x00027fc6 ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
    0x00027fca cmp r3, 0xff                                      |         
    0x00027fcc add sb, r3                                        |         sb += r3;
    0x00027fce vmov s15, r3                                      |         __asm ("vmov s15, r3");
    0x00027fd2 vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (r3 > 0xff) {
    0x00027fd6 bhi.w 0x281e0                                     |             goto label_30;
                                                                 |         }
    0x00027fda ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x00027fdc cmp r4, r5                                        |         
    0x00027fde add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x00027fe2 vldr d0, [r3]                                     |         __asm ("vldr d0, [r3]");
    0x00027fe6 vmls.f64 d8, d9, d0                               |         __asm ("vmls.f64 d8, d9, d0");
                                                                 |         if (r4 <= r5) {
    0x00027fea blo.w 0x281f2                                     |             goto label_31;
                                                                 |         }
                                                                 | label_2:
    0x00027fee cmp.w sb, 0                                       |         
                                                                 |         if (sb == 0) {
    0x00027ff2 beq.w 0x2852e                                     |             goto label_32;
                                                                 |         }
    0x00027ff6 cmp.w sb, 0xff                                    |         
    0x00027ffa vmov s15, sb                                      |         __asm ("vmov s15, sb");
    0x00027ffe vcvt.f64.u32 d9, s15                              |         __asm ("vcvt.f64.u32 d9, s15");
                                                                 |         if (sb > 0xff) {
    0x00028002 bhi.w 0x28228                                     |             goto label_33;
                                                                 |         }
    0x00028006 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00028008 add.w sb, r3, sb, lsl 3                           |         sb = r3 + (sb << 3);
    0x0002800c vldr d0, [sb]                                     |         __asm ("vldr d0, [sb]");
                                                                 | label_7:
    0x00028010 vmla.f64 d8, d9, d0                               |         __asm ("vmla.f64 d8, d9, d0");
                                                                 | label_17:
    0x00028014 vcmpe.f64 d8, d9                                  |         __asm ("vcmpe.f64 d8, d9");
    0x00028018 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0002801c it pl                                             |         
                                                                 |         if (sb >= 0xff) {
    0x0002801e vmovpl d9, d8                                     |             __asm ("vmovpl d9, d8");
                                                                 |         }
    0x00028022 b 0x28156                                         |         goto label_34;
                                                                 |     }
    0x00028024 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00028026 beq.w 0x28194                                     |         goto label_12;
                                                                 |     }
    0x0002802a ldr r3, [sp]                                      |     r3 = *(sp);
    0x0002802c lsls r3, r3, 1                                    |     r3 <<= 1;
    0x0002802e it eq                                             |     
                                                                 |     if (r3 != r3) {
    0x00028030 streq r3, [sp, 0x18]                              |         var_18h = r3;
                                                                 |     }
                                                                 |     if (r3 != r3) {
    0x00028032 bne.w 0x28206                                     |         goto label_35;
                                                                 |     }
                                                                 | label_5:
    0x00028036 ldr r1, [sp]                                      |     r1 = *(sp);
    0x00028038 movs r3, 0                                        |     r3 = 0;
    0x0002803a add r2, sp, 0x68                                  |     r2 += var_68h;
    0x0002803c strd r3, r3, [sp, 0x68]                           |     __asm ("strd r3, r3, [var_68h]");
    0x00028040 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00028042 strd r3, r3, [sp, 0x70]                           |     __asm ("strd r3, r3, [var_70h]");
    0x00028046 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00028048 beq.w 0x28514                                     |         goto label_36;
                                                                 |     }
    0x0002804c add.w r2, r1, r1, lsl 6                           |     r2 = r1 + (r1 << 6);
    0x00028050 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00028052 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00028054 lsls r2, r2, 4                                    |     r2 <<= 4;
    0x00028056 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
    0x0002805a str.w sl, [sp, 0x5c]                              |     __asm ("str.w sl, [var_5ch]");
    0x0002805e str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x00028060 ldr.w r2, [pc, 0x6a8]                             |     
    0x00028064 add.w r3, r3, r3, lsl 6                           |     r3 += (r3 << 6);
    0x00028068 vmov.f64 d10, d8                                  |     __asm ("vmov.f64 d10, d8");
    0x0002806c add.w r0, sb, r3, lsl 4                           |     r0 = sb + (r3 << 4);
    0x00028070 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00028072 add r2, pc                                        |     r2 = 0x50782;
    0x00028074 vmov.f64 d11, d8                                  |     __asm ("vmov.f64 d11, d8");
    0x00028078 str r2, [sp, 0x48]                                |     var_48h = r2;
    0x0002807a mov sl, r0                                        |     sl = r0;
    0x0002807c ldr.w r2, [pc, 0x690]                             |     
    0x00028080 lsls r4, r3, 2                                    |     r4 = r3 << 2;
    0x00028082 and r3, r3, 1                                     |     r3 &= 1;
    0x00028086 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00028088 lsls r3, r1, 3                                    |     r3 = r1 << 3;
    0x0002808a add r2, pc                                        |     r2 = 0x5079e;
    0x0002808c str r4, [sp, 0x14]                                |     var_14h = r4;
    0x0002808e str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x00028090 ldr.w r2, [pc, 0x680]                             |     
    0x00028094 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00028096 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00028098 add r2, pc                                        |     r2 = 0x507b0;
    0x0002809a strd r7, fp, [sp, 0x54]                           |     __asm ("strd r7, fp, [var_0hx54]");
    0x0002809e str r2, [sp, 0x50]                                |     var_50h = r2;
    0x000280a0 add r2, sp, 0x78                                  |     r2 += var_78h;
    0x000280a2 strd r3, r2, [sp, 0x1c]                           |     __asm ("strd r3, r2, [var_1ch]");
    0x000280a6 add.w r3, r6, 0x34                                |     r3 = r6 + 0x34;
    0x000280aa str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000280ac add r3, sp, 0xe0                                  |     r3 += var_e0h;
    0x000280ae str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000280b0 add r3, sp, 0x70                                  |     r3 += var_70h;
    0x000280b2 str r2, [sp, 0x40]                                |     var_40h = r2;
    0x000280b4 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_11:
    0x000280b6 ldr r5, [sp, 0x10]                                |     r5 = var_10h;
    0x000280b8 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x000280ba bne.w 0x281f6                                     |         goto label_37;
                                                                 |     }
    0x000280be ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000280c0 add.w r7, r3, sl                                  |     r7 = r3 + sl;
    0x000280c4 cmp sl, r7                                        |     
                                                                 |     if (sl >= r7) {
    0x000280c6 bhs.w 0x28232                                     |         goto label_38;
                                                                 |     }
    0x000280ca vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
    0x000280ce mov r4, sl                                        |     r4 = sl;
                                                                 |     do {
    0x000280d0 ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
    0x000280d4 cmp r3, 0xff                                      |         
    0x000280d6 add r5, r3                                        |         r5 += r3;
    0x000280d8 vmov s15, r3                                      |         __asm ("vmov s15, r3");
    0x000280dc vcvt.f64.u32 d12, s15                             |         __asm ("vcvt.f64.u32 d12, s15");
                                                                 |         if (r3 > 0xff) {
    0x000280e0 bhi.w 0x28334                                     |             goto label_39;
                                                                 |         }
    0x000280e4 ldr.w r2, [pc, 0x630]                             |         
    0x000280e8 add r2, pc                                        |         r2 = 0x50804;
    0x000280ea add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x000280ee vldr d0, [r3]                                     |         __asm ("vldr d0, [r3]");
                                                                 | label_8:
    0x000280f2 vmls.f64 d9, d12, d0                              |         __asm ("vmls.f64 d9, d12, d0");
                                                                 | label_4:
    0x000280f6 ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
    0x000280fa cmp r3, 0xff                                      |         
    0x000280fc add r5, r3                                        |         r5 += r3;
    0x000280fe vmov s15, r3                                      |         __asm ("vmov s15, r3");
    0x00028102 vcvt.f64.u32 d12, s15                             |         __asm ("vcvt.f64.u32 d12, s15");
                                                                 |         if (r3 > 0xff) {
    0x00028106 bhi.w 0x2838e                                     |             goto label_40;
                                                                 |         }
    0x0002810a ldr.w r2, [pc, 0x610]                             |         
    0x0002810e add r2, pc                                        |         r2 = 0x50830;
    0x00028110 add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x00028114 vldr d0, [r3]                                     |         __asm ("vldr d0, [r3]");
                                                                 | label_10:
    0x00028118 cmp r4, r7                                        |         
    0x0002811a vmls.f64 d9, d12, d0                              |         __asm ("vmls.f64 d9, d12, d0");
    0x0002811e blo 0x280d0                                       |         
                                                                 |     } while (r4 <= r7);
    0x00028120 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00028122 beq.w 0x286d4                                     |         goto label_41;
                                                                 |     }
    0x00028126 cmp r5, 0xff                                      |     
    0x00028128 vmov s15, r5                                      |     __asm ("vmov s15, r5");
    0x0002812c vcvt.f64.u32 d12, s15                             |     __asm ("vcvt.f64.u32 d12, s15");
                                                                 |     if (r5 > 0xff) {
    0x00028130 bhi.w 0x2850a                                     |         goto label_42;
                                                                 |     }
    0x00028134 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00028136 add.w r5, r3, r5, lsl 3                           |     r5 = r3 + (r5 << 3);
    0x0002813a vldr d0, [r5]                                     |     __asm ("vldr d0, [r5]");
                                                                 | label_15:
    0x0002813e vmla.f64 d9, d12, d0                              |     __asm ("vmla.f64 d9, d12, d0");
                                                                 | label_23:
    0x00028142 vcmpe.f64 d9, d12                                 |     __asm ("vcmpe.f64 d9, d12");
    0x00028146 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0002814a it pl                                             |     
                                                                 |     if (r5 >= 0xff) {
    0x0002814c vmovpl d12, d9                                    |         __asm ("vmovpl d12, d9");
                                                                 |     }
    0x00028150 b 0x28236                                         |     goto label_43;
                                                                 | label_28:
    0x00028152 vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
                                                                 | label_34:
    0x00028156 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00028158 add.w r7, r7, 0x410                               |     r7 += 0x410;
    0x0002815c vstmia r8!, {d9}                                  |     __asm ("vstmia r8!, {d9}");
    0x00028160 vstmia r6!, {d9}                                  |     __asm ("vstmia r6!, {d9}");
    0x00028164 cmp r3, r8                                        |     
                                                                 |     if (r3 != r8) {
    0x00028166 bne.w 0x27f80                                     |         goto label_0;
                                                                 |     }
    0x0002816a ldrd sl, r6, [sp, 0x14]                           |     __asm ("ldrd sl, r6, [var_14h]");
                                                                 | label_26:
    0x0002816e ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x00028170 ldr r2, [sp]                                      |     r2 = *(sp);
    0x00028172 adds r3, 1                                        |     r3++;
    0x00028174 str r3, [r6, 0x18]                                |     *((r6 + 0x18)) = r3;
    0x00028176 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0002817a adds r3, 1                                        |     r3++;
    0x0002817c str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00028180 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00028182 add r3, r2                                        |     r3 += r2;
    0x00028184 ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
    0x00028186 str r3, [r6, 0x30]                                |     *((r6 + 0x30)) = r3;
    0x00028188 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0002818a cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x0002818c blo.w 0x2833e                                     |         goto label_44;
                                                                 |     }
                                                                 | label_9:
    0x00028190 movs r3, 0                                        |     r3 = 0;
    0x00028192 str r3, [r6, 0x2c]                                |     *((r6 + 0x2c)) = r3;
                                                                 | label_12:
    0x00028194 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00028196 cbnz r3, 0x281ca                                  |     
                                                                 |     while (1) {
    0x00028198 ldr.w r2, [pc, 0x584]                             |         
    0x0002819c ldr.w r3, [pc, 0x55c]                             |         r3 = *(0x286fc);
    0x000281a0 add r2, pc                                        |         r2 = 0x508c4;
    0x000281a2 ldr r3, [r2, r3]                                  |         r3 = *(0x508c4);
    0x000281a4 ldr r2, [r3]                                      |         r2 = *(0x508c4);
    0x000281a6 ldr r3, [sp, 0x1b4]                               |         r3 = var_1b4h;
    0x000281a8 eors r2, r3                                       |         r2 ^= r3;
    0x000281aa mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000281ae bne.w 0x286e0                                     |             goto label_45;
                                                                 |         }
    0x000281b2 add sp, 0x1bc                                     |         
    0x000281b4 vpop {d8, d9, d10, d11, d12, d13}                 |         __asm ("vpop {d8, d9, d10, d11, d12, d13}");
    0x000281b8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_27:
    0x000281bc vmov.f64 d8, d10                                  |         __asm ("vmov.f64 d8, d10");
    0x000281c0 mov.w sb, 0                                       |         sb = 0;
    0x000281c4 add.w r5, r7, sl                                  |         r5 = r7 + sl;
    0x000281c8 b 0x27fc4                                         |         goto label_1;
    0x000281ca ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x000281ce ldr r1, [sp]                                      |         r1 = *(sp);
    0x000281d0 ldr r2, [r6, 0x24]                                |         r2 = *((r6 + 0x24));
    0x000281d2 mul r3, r1, r3                                    |         r3 = r1 * r3;
    0x000281d6 str r3, [r2]                                      |         *(r2) = r3;
    0x000281d8 ldr r3, [r6, 0x18]                                |         r3 = *((r6 + 0x18));
    0x000281da str.w r3, [sl, 4]                                 |         __asm ("str.w r3, [sl, 4]");
    0x000281de b 0x28198                                         |         
                                                                 |     }
                                                                 | label_30:
    0x000281e0 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x000281e4 blx 0x830                                         |     log2 (r0);
    0x000281e8 cmp r4, r5                                        |     
    0x000281ea vmls.f64 d8, d9, d0                               |     __asm ("vmls.f64 d8, d9, d0");
                                                                 |     if (r4 >= r5) {
    0x000281ee bhs.w 0x27fee                                     |         goto label_2;
                                                                 |     }
                                                                 | label_31:
    0x000281f2 mov r3, r4                                        |     r3 = r4;
    0x000281f4 b 0x27f9a                                         |     goto label_3;
                                                                 | label_37:
    0x000281f6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000281f8 mov r4, sl                                        |     r4 = sl;
    0x000281fa vmov.f64 d9, d10                                  |     __asm ("vmov.f64 d9, d10");
    0x000281fe movs r5, 0                                        |     r5 = 0;
    0x00028200 add.w r7, r3, sl                                  |     r7 = r3 + sl;
    0x00028204 b 0x280f6                                         |     goto label_4;
                                                                 | label_35:
    0x00028206 ldr r3, [sp]                                      |     r3 = *(sp);
    0x00028208 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x0002820a add.w r1, r3, r3, lsl 6                           |     r1 = r3 + (r3 << 6);
    0x0002820e lsls r1, r1, 5                                    |     r1 <<= 5;
    0x00028210 bl 0x26b78                                        |     fcn_00026b78 (r0);
    0x00028214 ldr.w fp, [r6, 0x18]                              |     fp = *((r6 + 0x18));
    0x00028218 ldr r7, [r6, 0x2c]                                |     r7 = *((r6 + 0x2c));
    0x0002821a str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0002821c b 0x28036                                         |     goto label_5;
                                                                 | label_29:
    0x0002821e vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x00028222 blx 0x830                                         |     log2 (r0);
    0x00028226 b 0x27fbe                                         |     goto label_6;
                                                                 | label_33:
    0x00028228 vmov.f64 d0, d9                                   |     __asm ("vmov.f64 d0, d9");
    0x0002822c blx 0x830                                         |     log2 (r0);
    0x00028230 b 0x28010                                         |     goto label_7;
                                                                 | label_38:
    0x00028232 vmov.i64 d12, 0                                   |     __asm ("vmov.i64 d12, 0");
                                                                 | label_43:
    0x00028236 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00028238 ldr.w fp, [sp, 0x2c]                              |     fp = var_2ch;
    0x0002823c ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
    0x0002823e vstmia r3!, {d12}                                 |     __asm ("vstmia r3!, {d12}");
    0x00028242 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00028244 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00028246 add.w r5, r7, 0x3fc                               |     r5 = r7 + 0x3fc;
    0x0002824a lsl.w r8, r3, 3                                   |     r8 = r3 << 3;
    0x0002824e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00028250 add r3, r8                                        |     r3 += r8;
    0x00028252 add r8, r6                                        |     r8 += r6;
    0x00028254 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00028256 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00028258 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0002825a mov r3, sl                                        |     r3 = sl;
    0x0002825c mov sl, fp                                        |     sl = fp;
    0x0002825e mov fp, r3                                        |     
                                                                 | label_25:
    0x00028260 mov.w r2, 0x410                                   |     r2 = 0x410;
    0x00028264 mov r1, fp                                        |     r1 = fp;
    0x00028266 mov r0, r7                                        |     r0 = r7;
    0x00028268 ldr r4, [sl], 4                                   |     r4 = *(sl);
                                                                 |     sl += 4;
    0x0002826c blx 0x86c                                         |     memcpy (r0, r1, r2);
    0x00028270 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00028272 subs r0, r7, 4                                    |     r0 = r7 - 4;
    0x00028274 add r4, r3                                        |     r4 += r3;
    0x00028276 ldr.w r3, [r7, 0x400]                             |     r3 = *((r7 + 0x400));
    0x0002827a add.w r4, r4, r4, lsl 6                           |     r4 += (r4 << 6);
    0x0002827e add.w ip, sb, r4, lsl 4                           |     
    0x00028282 mov r4, r7                                        |     r4 = r7;
    0x00028284 ldr.w r2, [ip, 0x400]                             |     r2 = *((ip + 0x400));
    0x00028288 add r3, r2                                        |     r3 += r2;
    0x0002828a sub.w r2, ip, 4                                   |     r2 = ip - 4;
    0x0002828e str.w r3, [r7, 0x400]                             |     __asm ("str.w r3, aav.0x000000ff");
                                                                 |     do {
    0x00028292 ldr r3, [r0, 4]!                                  |         r3 = *((r0 += 4));
    0x00028296 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0002829a cmp r5, r0                                        |         
    0x0002829c add r3, r1                                        |         r3 += r1;
    0x0002829e str r3, [r0]                                      |         *(r0) = r3;
    0x000282a0 bne 0x28292                                       |         
                                                                 |     } while (r5 != r0);
    0x000282a2 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000282a4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000282a6 bne.w 0x284ec                                     |         goto label_46;
                                                                 |     }
    0x000282aa ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000282ac adds r2, r7, r2                                   |     r2 = r7 + r2;
    0x000282ae cmp r7, r2                                        |     
                                                                 |     if (r7 >= r2) {
    0x000282b0 bhs 0x28398                                       |         goto label_47;
                                                                 |     }
    0x000282b2 vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
                                                                 |     do {
    0x000282b6 ldr r0, [r4], 4                                   |         r0 = *(r4);
                                                                 |         r4 += 4;
    0x000282ba cmp r0, 0xff                                      |         
    0x000282bc add r3, r0                                        |         r3 += r0;
    0x000282be vmov s15, r0                                      |         __asm ("vmov s15, r0");
    0x000282c2 vcvt.f64.u32 d13, s15                             |         __asm ("vcvt.f64.u32 d13, s15");
    0x000282c6 blx 0xa28c60                                      |         void (*0xa28c60)(uint32_t, uint32_t) (r0, r3);
    0x000282ca ldr.w ip, [pc, 0x458]                             |         
    0x000282ce add ip, pc                                        |         ip = 0x509f8;
    0x000282d0 add.w r0, ip, r0, lsl 3                           |         r0 = ip + (r0 << 3);
    0x000282d4 vldr d0, [r0]                                     |         __asm ("vldr d0, [r0]");
                                                                 | label_14:
    0x000282d8 vmls.f64 d9, d13, d0                              |         __asm ("vmls.f64 d9, d13, d0");
                                                                 | label_13:
    0x000282dc ldr r0, [r4], 4                                   |         r0 = *(r4);
                                                                 |         r4 += 4;
    0x000282e0 cmp r0, 0xff                                      |         
    0x000282e2 add r3, r0                                        |         r3 += r0;
    0x000282e4 movs r3, r2                                       |         r3 = r2;
    0x000282e6 movs r0, r0                                       |         
    0x000282e8 vcvt.f64.u32 d13, s15                             |         __asm ("vcvt.f64.u32 d13, s15");
                                                                 |         if (r0 > r0) {
    0x000282ec bhi.w 0x28534                                     |             goto label_48;
                                                                 |         }
    0x000282f0 ldr r1, [sp, 0x50]                                |         r1 = var_50h;
    0x000282f2 add.w r0, r1, r0, lsl 3                           |         r0 = r1 + (r0 << 3);
    0x000282f6 vldr d0, [r0]                                     |         __asm ("vldr d0, [r0]");
                                                                 | label_18:
    0x000282fa cmp r4, r2                                        |         
    0x000282fc vmls.f64 d9, d13, d0                              |         __asm ("vmls.f64 d9, d13, d0");
    0x00028300 blo 0x282b6                                       |         
                                                                 |     } while (r4 <= r2);
    0x00028302 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00028304 beq.w 0x286da                                     |         goto label_49;
                                                                 |     }
    0x00028308 cmp r3, 0xff                                      |     
    0x0002830a vmov s15, r3                                      |     __asm ("vmov s15, r3");
    0x0002830e vcvt.f64.u32 d13, s15                             |     __asm ("vcvt.f64.u32 d13, s15");
                                                                 |     if (r3 > 0xff) {
    0x00028312 bhi.w 0x28546                                     |         goto label_50;
                                                                 |     }
    0x00028316 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x00028318 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0002831c vldr d0, [r3]                                     |     __asm ("vldr d0, [r3]");
                                                                 | label_19:
    0x00028320 vmla.f64 d9, d13, d0                              |     __asm ("vmla.f64 d9, d13, d0");
                                                                 | label_24:
    0x00028324 vcmpe.f64 d9, d13                                 |     __asm ("vcmpe.f64 d9, d13");
    0x00028328 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0002832c it pl                                             |     
                                                                 |     if (r3 >= 0xff) {
    0x0002832e vmovpl d13, d9                                    |         __asm ("vmovpl d13, d9");
                                                                 |     }
    0x00028332 b 0x2839c                                         |     goto label_51;
                                                                 | label_39:
    0x00028334 vmov.f64 d0, d12                                  |     __asm ("vmov.f64 d0, d12");
    0x00028338 blx 0x830                                         |     log2 (r0);
    0x0002833c b 0x280f2                                         |     goto label_8;
                                                                 | label_44:
    0x0002833e ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00028340 ldr r1, [r6, 0x20]                                |     r1 = *((r6 + 0x20));
    0x00028342 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00028344 beq.w 0x28190                                     |         goto label_9;
                                                                 |     }
    0x00028348 add r2, r3                                        |     r2 += r3;
    0x0002834a add.w r3, r3, r3, lsl 6                           |     r3 += (r3 << 6);
    0x0002834e add.w r2, r2, r2, lsl 6                           |     r2 += (r2 << 6);
    0x00028352 mov.w sb, 0                                       |     sb = 0;
    0x00028356 add.w r4, r1, r3, lsl 4                           |     r4 = r1 + (r3 << 4);
    0x0002835a add.w r1, r1, 0x400                               |     r1 += 0x400;
    0x0002835e add.w r5, r1, r2, lsl 4                           |     r5 = r1 + (r2 << 4);
    0x00028362 movs r7, 0                                        |     r7 = 0;
    0x00028364 add.w r4, r4, 0x400                               |     r4 += 0x400;
    0x00028368 mov.w r8, 0                                       |     r8 = 0;
    0x0002836c movt sb, 0x7ff0                                   |     sb = (sb & 0xFFFF) | 0x7ff00000;
                                                                 |     do {
    0x00028370 sub.w r0, r4, 0x400                               |         r0 = r4 - 0x400;
    0x00028374 mov.w r2, 0x400                                   |         r2 = 0x400;
    0x00028378 movs r1, 0                                        |         r1 = 0;
    0x0002837a blx 0x8e8                                         |         fcn_000008e8 ();
    0x0002837e str r7, [r4]                                      |         *(r4) = r7;
    0x00028380 strd r8, sb, [r4, 8]                              |         __asm ("strd r8, sb, [r4, 8]");
    0x00028384 add.w r4, r4, 0x410                               |         r4 += 0x410;
    0x00028388 cmp r4, r5                                        |         
    0x0002838a bne 0x28370                                       |         
                                                                 |     } while (r4 != r5);
    0x0002838c b 0x28190                                         |     goto label_9;
                                                                 | label_40:
    0x0002838e vmov.f64 d0, d12                                  |     __asm ("vmov.f64 d0, d12");
    0x00028392 blx 0x830                                         |     log2 (r0);
    0x00028396 b 0x28118                                         |     goto label_10;
                                                                 | label_47:
    0x00028398 vmov.i64 d13, 0                                   |     __asm ("vmov.i64 d13, 0");
                                                                 | label_51:
    0x0002839c vldr d17, [r8, 0x40]                              |     __asm ("vldr d17, [r8, 0x40]");
    0x000283a0 vsub.f64 d16, d13, d12                            |     __asm ("vsub.f64 d16, d13, d12");
    0x000283a4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000283a6 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x000283a8 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x000283aa vsub.f64 d16, d16, d17                            |     __asm ("vsub.f64 d16, d16, d17");
    0x000283ae vstr d13, [r3]                                    |     __asm ("vstr d13, [r3]");
    0x000283b2 add r3, r1                                        |     r3 += r1;
    0x000283b4 add r7, r2                                        |     r7 += r2;
    0x000283b6 add r5, r2                                        |     r5 += r2;
    0x000283b8 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000283ba add r8, r1                                        |     r8 += r1;
    0x000283bc ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000283be ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000283c0 vadd.f64 d8, d16, d8                              |     __asm ("vadd.f64 d8, d16, d8");
    0x000283c4 cmp r3, r2                                        |     
    0x000283c6 vstr d8, [r3, -8]                                 |     __asm ("vstr d8, [r3, -8]");
                                                                 |     if (r3 != r2) {
    0x000283ca bne.w 0x286e4                                     |         goto label_52;
                                                                 |     }
    0x000283ce ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x000283d0 add.w sl, fp, 0x410                               |     sl += arg_410h;
    0x000283d4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000283d6 vldr d8, [r2]                                     |     __asm ("vldr d8, [r2]");
    0x000283da ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000283dc adds r3, 1                                        |     r3++;
    0x000283de str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000283e0 add.w r2, r2, 0x410                               |     r2 += 0x410;
    0x000283e4 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x000283e6 ldr r2, [sp]                                      |     r2 = *(sp);
    0x000283e8 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000283ea bne.w 0x280b6                                     |         goto label_11;
                                                                 |     }
    0x000283ee ldr.w sl, [sp, 0x5c]                              |     sl = var_5ch;
    0x000283f2 ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x000283f4 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000283f6 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x000283fa ldrd r7, fp, [sp, 0x54]                           |     __asm ("ldrd r7, fp, [var_54h]");
    0x000283fe vldr d16, [r3, 8]                                 |     __asm ("vldr d16, [r3, 8]");
    0x00028402 cmp r1, r2                                        |     
    0x00028404 ldr.w r3, [sl, 0xc]                               |     r3 = *((sl + 0xc));
                                                                 |     if (r1 >= r2) {
    0x00028408 bhs.w 0x28550                                     |         goto label_53;
                                                                 |     }
                                                                 | label_16:
    0x0002840c vldr d17, [r6, 0x10]                              |     __asm ("vldr d17, [r6, 0x10]");
    0x00028410 vcmpe.f64 d17, d8                                 |     __asm ("vcmpe.f64 d17, d8");
    0x00028414 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r1 >= r2) {
    0x00028418 bpl.w 0x28550                                     |         goto label_53;
                                                                 |     }
    0x0002841c vcmpe.f64 d17, d16                                |     __asm ("vcmpe.f64 d17, d16");
    0x00028420 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r1 >= r2) {
    0x00028424 bpl.w 0x28550                                     |         goto label_53;
                                                                 |     }
    0x00028428 str.w r7, [r3, fp, lsl 2]                         |     __asm ("str.w r7, [r3, fp, lsl 2]");
    0x0002842c ldr.w r2, [sl, 8]                                 |     r2 = *((sl + 8));
    0x00028430 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00028434 ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x00028436 strb r1, [r2, r3]                                 |     *((r2 + r3)) = r1;
    0x00028438 ldr r2, [sp]                                      |     r2 = *(sp);
    0x0002843a ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x0002843e ldr r3, [r6, 0x34]                                |     r3 = *((r6 + 0x34));
    0x00028440 str r3, [r6, 0x38]                                |     *((r6 + 0x38)) = r3;
    0x00028442 mul r3, r2, r1                                    |     r3 = r2 * r1;
    0x00028446 str r3, [r6, 0x34]                                |     *((r6 + 0x34)) = r3;
                                                                 |     if (r2 == 0) {
    0x00028448 cbz r2, 0x28470                                   |         goto label_54;
                                                                 |     }
    0x0002844a ldr r3, [sp]                                      |     r3 = *(sp);
    0x0002844c add r4, sp, 0x78                                  |     r4 += var_78h;
    0x0002844e add.w r2, r3, 8                                   |     r2 = r3 + 8;
    0x00028452 add.w r3, r6, 0x40                                |     r3 = r6 + 0x40;
    0x00028456 lsls r2, r2, 3                                    |     r2 <<= 3;
    0x00028458 adds r0, r6, r2                                   |     r0 = r6 + r2;
    0x0002845a mov r2, r0                                        |     r2 = r0;
                                                                 |     do {
    0x0002845c ldrd r8, sb, [r3]                                 |         __asm ("ldrd r8, sb, [r3]");
    0x00028460 strd r8, sb, [r0], 8                              |         __asm ("strd r8, sb, [r0], 8");
    0x00028464 ldrd r8, sb, [r4], 8                              |         __asm ("ldrd r8, sb, [r4], 8");
    0x00028468 strd r8, sb, [r3], 8                              |         __asm ("strd r8, sb, [r3], 8");
    0x0002846c cmp r2, r3                                        |         
    0x0002846e bne 0x2845c                                       |         
                                                                 |     } while (r2 != r3);
                                                                 | label_54:
    0x00028470 ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x00028472 adds r1, 1                                        |     r1++;
    0x00028474 ldr r2, [sp]                                      |     r2 = *(sp);
    0x00028476 adds r3, 1                                        |     r3++;
    0x00028478 str r3, [r6, 0x18]                                |     *((r6 + 0x18)) = r3;
    0x0002847a ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x0002847c str.w r1, [sl]                                    |     __asm ("str.w r1, [sl]");
    0x00028480 add r3, r2                                        |     r3 += r2;
    0x00028482 ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
    0x00028484 str r3, [r6, 0x30]                                |     *((r6 + 0x30)) = r3;
    0x00028486 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00028488 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x0002848a bhs 0x284d6                                       |         goto label_20;
                                                                 |     }
    0x0002848c ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0002848e ldr r1, [r6, 0x20]                                |     r1 = *((r6 + 0x20));
                                                                 |     if (r2 == 0) {
    0x00028490 cbz r2, 0x284d6                                   |         goto label_20;
                                                                 |     }
    0x00028492 add r2, r3                                        |     r2 += r3;
    0x00028494 add.w r3, r3, r3, lsl 6                           |     r3 += (r3 << 6);
    0x00028498 add.w r2, r2, r2, lsl 6                           |     r2 += (r2 << 6);
    0x0002849c mov.w sb, 0                                       |     sb = 0;
    0x000284a0 add.w r4, r1, r3, lsl 4                           |     r4 = r1 + (r3 << 4);
    0x000284a4 add.w r1, r1, 0x400                               |     r1 += 0x400;
    0x000284a8 add.w r5, r1, r2, lsl 4                           |     r5 = r1 + (r2 << 4);
    0x000284ac movs r7, 0                                        |     r7 = 0;
    0x000284ae add.w r4, r4, 0x400                               |     r4 += 0x400;
    0x000284b2 mov.w r8, 0                                       |     r8 = 0;
    0x000284b6 movt sb, 0x7ff0                                   |     sb = (sb & 0xFFFF) | 0x7ff00000;
                                                                 |     do {
    0x000284ba sub.w r0, r4, 0x400                               |         r0 = r4 - 0x400;
    0x000284be mov.w r2, 0x400                                   |         r2 = 0x400;
    0x000284c2 movs r1, 0                                        |         r1 = 0;
    0x000284c4 blx 0x8e8                                         |         fcn_000008e8 ();
    0x000284c8 str r7, [r4]                                      |         *(r4) = r7;
    0x000284ca strd r8, sb, [r4, 8]                              |         __asm ("strd r8, sb, [r4, 8]");
    0x000284ce add.w r4, r4, 0x410                               |         r4 += 0x410;
    0x000284d2 cmp r5, r4                                        |         
    0x000284d4 bne 0x284ba                                       |         
                                                                 |     } while (r5 != r4);
                                                                 | label_20:
    0x000284d6 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x000284d8 str r3, [r6, 0x28]                                |     *((r6 + 0x28)) = r3;
    0x000284da movs r3, 0                                        |     r3 = 0;
    0x000284dc str r3, [r6, 0x2c]                                |     *((r6 + 0x2c)) = r3;
    0x000284de str.w r3, [r6, 0x110]                             |     __asm ("str.w r3, aav.0x000000ff");
                                                                 | label_21:
    0x000284e2 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x000284e4 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x000284e6 bl 0x26b8c                                        |     fcn_00026b8c (r0);
    0x000284ea b 0x28194                                         |     goto label_12;
                                                                 | label_46:
    0x000284ec ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000284ee movs r3, 0                                        |     r3 = 0;
    0x000284f0 vmov.f64 d9, d11                                  |     __asm ("vmov.f64 d9, d11");
    0x000284f4 adds r2, r7, r2                                   |     r2 = r7 + r2;
    0x000284f6 b 0x282dc                                         |     goto label_13;
    0x000284f8 vmov.f64 d0, d13                                  |     __asm ("vmov.f64 d0, d13");
    0x000284fc strd r3, r2, [sp, 0x60]                           |     __asm ("strd r3, r2, [var_60h]");
    0x00028500 blx 0x830                                         |     log2 (r0);
    0x00028504 ldrd r3, r2, [sp, 0x60]                           |     __asm ("ldrd r3, r2, [var_60h]");
    0x00028508 b 0x282d8                                         |     goto label_14;
                                                                 | label_42:
    0x0002850a vmov.f64 d0, d12                                  |     __asm ("vmov.f64 d0, d12");
    0x0002850e blx 0x830                                         |     log2 (r0);
    0x00028512 b 0x2813e                                         |     goto label_15;
                                                                 | label_36:
    0x00028514 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00028518 ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x0002851a ldr.w r3, [sl, 0xc]                               |     r3 = *((sl + 0xc));
    0x0002851e cmp r1, r2                                        |     
                                                                 |     if (r1 >= r2) {
    0x00028520 bhs.w 0x286c2                                     |         goto label_55;
                                                                 |     }
    0x00028524 vmov.i64 d16, 0                                   |     __asm ("vmov.i64 d16, 0");
    0x00028528 vmov.f64 d8, d16                                  |     __asm ("vmov.f64 d8, d16");
    0x0002852c b 0x2840c                                         |     goto label_16;
                                                                 | label_32:
    0x0002852e vmov.i64 d9, 0                                    |     __asm ("vmov.i64 d9, 0");
    0x00028532 b 0x28014                                         |     goto label_17;
                                                                 | label_48:
    0x00028534 vmov.f64 d0, d13                                  |     __asm ("vmov.f64 d0, d13");
    0x00028538 strd r3, r2, [sp, 0x60]                           |     __asm ("strd r3, r2, [var_60h]");
    0x0002853c blx 0x830                                         |     log2 (r0);
    0x00028540 ldrd r3, r2, [sp, 0x60]                           |     __asm ("ldrd r3, r2, [var_60h]");
    0x00028544 b 0x282fa                                         |     goto label_18;
                                                                 | label_50:
    0x00028546 vmov.f64 d0, d13                                  |     __asm ("vmov.f64 d0, d13");
    0x0002854a blx 0x830                                         |     log2 (r0);
    0x0002854e b 0x28320                                         |     goto label_19;
                                                                 | label_53:
    0x00028550 vmov.f64 d17, 2.000000e+01                        |     __asm ("vmov.f64 d17, 2");
    0x00028554 vsub.f64 d8, d8, d17                              |     __asm ("vsub.f64 d8, d8, d17");
    0x00028558 vcmpe.f64 d16, d8                                 |     __asm ("vcmpe.f64 d16, d8");
    0x0002855c vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r1 >= r2) {
    0x00028560 bpl 0x28614                                       |         goto label_56;
                                                                 |     }
    0x00028562 str.w r7, [r3, fp, lsl 2]                         |     __asm ("str.w r7, [r3, fp, lsl 2]");
    0x00028566 ldr.w r2, [sl, 8]                                 |     r2 = *((sl + 8));
    0x0002856a ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x0002856c adds r1, r2, r3                                   |     r1 = r2 + r3;
    0x0002856e ldrb r1, [r1, -0x2]                               |     r1 = *((r1 - 0x2));
    0x00028572 strb r1, [r2, r3]                                 |     *((r2 + r3)) = r1;
    0x00028574 ldr r2, [sp]                                      |     r2 = *(sp);
    0x00028576 ldrd r3, r0, [r6, 0x34]                           |     __asm ("ldrd r3, r0, [r6, 0x34]");
    0x0002857a strd r0, r3, [r6, 0x34]                           |     __asm ("strd r0, r3, [r6, 0x34]");
    0x0002857e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00028580 beq 0x2860c                                       |         goto label_57;
                                                                 |     }
    0x00028582 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00028584 add.w r7, r2, 8                                   |     r7 = r2 + 8;
    0x00028588 lsls r7, r7, 3                                    |     r7 <<= 3;
    0x0002858a add.w r5, r2, r2, lsl 6                           |     r5 = r2 + (r2 << 6);
    0x0002858e str.w sl, [sp, 0xc]                               |     __asm ("str.w sl, [var_ch]");
    0x00028592 vldr d8, [pc, 0x15c]                              |     __asm ("vldr d8, aav.0x000000ff");
    0x00028596 movs r4, 0                                        |     r4 = 0;
    0x00028598 add.w r5, r3, r5, lsl 4                           |     r5 = r3 + (r5 << 4);
    0x0002859c add.w r3, r7, 0x1b8                               |     r3 = r7 + 0x1b8;
    0x000285a0 add r3, sp, r3                                    |     r3 = sp + r3;
    0x000285a2 add r7, r6                                        |     r7 += r6;
    0x000285a4 sub.w fp, r3, 0x118                               |     
    0x000285a8 add.w r8, r6, 0x40                                |     r8 = r6 + 0x40;
    0x000285ac mov sl, r2                                        |     sl = r2;
    0x000285ae b 0x285b2                                         |     
                                                                 |     while (sl != r4) {
    0x000285b0 ldr r0, [r6, 0x34]                                |         r0 = *((r6 + 0x34));
    0x000285b2 add r0, r4                                        |         r0 += r4;
    0x000285b4 mov r1, r5                                        |         r1 = r5;
    0x000285b6 add.w r0, r0, r0, lsl 6                           |         r0 += (r0 << 6);
    0x000285ba mov.w r2, 0x410                                   |         r2 = 0x410;
    0x000285be add.w r5, r5, 0x410                               |         r5 += 0x410;
    0x000285c2 add.w r0, sb, r0, lsl 4                           |         r0 = sb + (r0 << 4);
    0x000285c6 blx 0x86c                                         |         memcpy (r0, r1, r2);
    0x000285ca vldr d16, [r8]                                    |         __asm ("vldr d16, [r8]");
    0x000285ce mov.w r2, 0x400                                   |         r2 = 0x400;
    0x000285d2 ldr r3, [r6, 0x30]                                |         r3 = *((r6 + 0x30));
    0x000285d4 movs r1, 0                                        |         r1 = 0;
    0x000285d6 vstmia r7!, {d16}                                 |         __asm ("vstmia r7!, {d16}");
    0x000285da add r3, r4                                        |         r3 += r4;
    0x000285dc adds r4, 1                                        |         r4++;
    0x000285de add.w r3, r3, r3, lsl 6                           |         r3 += (r3 << 6);
    0x000285e2 vldmia fp!, {d16}                                 |         __asm ("vldmia fp!, {d16}");
    0x000285e6 add.w r3, sb, r3, lsl 4                           |         r3 = sb + (r3 << 4);
    0x000285ea vstmia r8!, {d16}                                 |         __asm ("vstmia r8!, {d16}");
    0x000285ee mov r0, r3                                        |         r0 = r3;
    0x000285f0 blx 0x8e8                                         |         fcn_000008e8 ();
    0x000285f4 cmp sl, r4                                        |         
    0x000285f6 mov.w r2, 0                                       |         r2 = 0;
    0x000285fa add.w r3, r0, 0x410                               |         r3 = r0 + 0x410;
    0x000285fe str.w r2, [r0, 0x400]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x00028602 vstr d8, [r3, -8]                                 |         __asm ("vstr d8, [r3, -8]");
    0x00028606 bne 0x285b0                                       |         
                                                                 |     }
    0x00028608 ldr.w sl, [sp, 0xc]                               |     sl = var_ch;
                                                                 | label_57:
    0x0002860c ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x0002860e adds r3, 1                                        |     r3++;
    0x00028610 str r3, [r6, 0x18]                                |     *((r6 + 0x18)) = r3;
    0x00028612 b 0x284d6                                         |     goto label_20;
                                                                 | label_56:
    0x00028614 add.w r2, fp, 0x40000000                          |     r2 += arg_40000000h;
    0x00028618 subs r2, 1                                        |     r2--;
    0x0002861a ldr.w r1, [r3, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r1 = *((r3 + offset_0));
    0x0002861e add r1, r7                                        |     r1 += r7;
    0x00028620 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x00028624 ldr r3, [sp]                                      |     r3 = *(sp);
    0x00028626 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00028628 beq 0x286a4                                       |         goto label_22;
                                                                 |     }
    0x0002862a ldr r3, [sp]                                      |     r3 = *(sp);
    0x0002862c mov.w r8, 0                                       |     r8 = 0;
    0x00028630 ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x00028632 add r7, sp, 0xe0                                  |     r7 += var_e0h;
    0x00028634 vldr d8, [pc, 0xb8]                               |     __asm ("vldr d8, aav.0x000000ff");
    0x00028638 add.w fp, r6, 0x40                                |     
    0x0002863c add.w r5, r3, 8                                   |     r5 = r3 + 8;
    0x00028640 add.w r5, r6, r5, lsl 3                           |     r5 = r6 + (r5 << 3);
                                                                 |     do {
    0x00028644 ldr r0, [r6, 0x34]                                |         r0 = *((r6 + 0x34));
    0x00028646 mov.w r2, 0x410                                   |         r2 = 0x410;
    0x0002864a mov r1, r4                                        |         r1 = r4;
    0x0002864c add r0, r8                                        |         r0 += r8;
    0x0002864e add.w r0, r0, r0, lsl 6                           |         r0 += (r0 << 6);
    0x00028652 add.w r0, sb, r0, lsl 4                           |         r0 = sb + (r0 << 4);
    0x00028656 blx 0x86c                                         |         memcpy (r0, r1, r2);
    0x0002865a ldr.w r1, [sl]                                    |         r1 = *(sl);
    0x0002865e ldrd r2, r3, [r7], 8                              |         __asm ("ldrd r2, r3, [r7], 8");
    0x00028662 cmp r1, 1                                         |         
    0x00028664 strd r2, r3, [fp], 8                              |         __asm ("strd r2, r3, [fp], 8");
                                                                 |         if (r1 == 1) {
    0x00028668 bne 0x2866e                                       |             
    0x0002866a strd r2, r3, [r5]                                 |             __asm ("strd r2, r3, [r5]");
                                                                 |         }
    0x0002866e ldr r3, [r6, 0x30]                                |         r3 = *((r6 + 0x30));
    0x00028670 mov.w r2, 0x400                                   |         r2 = 0x400;
    0x00028674 movs r1, 0                                        |         r1 = 0;
    0x00028676 add.w r4, r4, 0x410                               |         r4 += 0x410;
    0x0002867a adds r5, 8                                        |         r5 += 8;
    0x0002867c add r3, r8                                        |         r3 += r8;
    0x0002867e add.w r8, r8, 1                                   |         r8++;
    0x00028682 add.w r3, r3, r3, lsl 6                           |         r3 += (r3 << 6);
    0x00028686 add.w r3, sb, r3, lsl 4                           |         r3 = sb + (r3 << 4);
    0x0002868a mov r0, r3                                        |         r0 = r3;
    0x0002868c blx 0x8e8                                         |         fcn_000008e8 ();
    0x00028690 movs r2, 0                                        |         r2 = 0;
    0x00028692 add.w r3, r0, 0x410                               |         r3 = r0 + 0x410;
    0x00028696 str.w r2, [r0, 0x400]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x0002869a vstr d8, [r3, -8]                                 |         __asm ("vstr d8, [r3, -8]");
    0x0002869e ldr r3, [sp]                                      |         r3 = *(sp);
    0x000286a0 cmp r3, r8                                        |         
    0x000286a2 bne 0x28644                                       |         
                                                                 |     } while (r3 != r8);
                                                                 | label_22:
    0x000286a4 ldr.w r3, [r6, 0x110]                             |     r3 = *((r6 + 0x110));
    0x000286a8 movs r2, 0                                        |     r2 = 0;
    0x000286aa str r2, [r6, 0x2c]                                |     *((r6 + 0x2c)) = r2;
    0x000286ac adds r3, 1                                        |     r3++;
    0x000286ae cmp r3, 1                                         |     
    0x000286b0 str.w r3, [r6, 0x110]                             |     __asm ("str.w r3, aav.0x000000ff");
                                                                 |     if (r3 < 1) {
    0x000286b4 bls.w 0x284e2                                     |         goto label_21;
                                                                 |     }
    0x000286b8 ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x000286ba ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x000286bc add r3, r2                                        |     r3 += r2;
    0x000286be str r3, [r6, 0x28]                                |     *((r6 + 0x28)) = r3;
    0x000286c0 b 0x284e2                                         |     goto label_21;
                                                                 | label_55:
    0x000286c2 add.w r2, fp, 0x40000000                          |     r2 += arg_40000000h;
    0x000286c6 subs r2, 1                                        |     r2--;
    0x000286c8 ldr.w r1, [r3, r2, lsl 2]                         |     offset_1 = r2 << 2;
                                                                 |     r1 = *((r3 + offset_1));
    0x000286cc add r1, r7                                        |     r1 += r7;
    0x000286ce str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x000286d2 b 0x286a4                                         |     goto label_22;
                                                                 | label_41:
    0x000286d4 vmov.i64 d12, 0                                   |     __asm ("vmov.i64 d12, 0");
    0x000286d8 b 0x28142                                         |     goto label_23;
                                                                 | label_49:
    0x000286da vmov.i64 d13, 0                                   |     __asm ("vmov.i64 d13, 0");
    0x000286de b 0x28324                                         |     goto label_24;
                                                                 | label_45:
    0x000286e0 blx 0x884                                         |     stack_chk_fail ();
                                                                 | label_52:
    0x000286e4 vldmia r3!, {d8}                                  |     __asm ("vldmia r3!, {d8}");
    0x000286e8 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x000286ea b 0x28260                                         |     goto label_25;
                                                                 | }

[*] Function fprintf used 1 times libbrotlienc.so.1.0.9