[*] Binary protection state of sqlcipher

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


[*] Function strcat tear down of sqlcipher

    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x32524 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00032524 ()                      | void fcn_00032524 (int16_t arg1) {
                                                 |     int16_t var_0h;
                                                 |     r0 = arg1;
                                                 |     if (? != ?) {
    0x00032524 ldreq r8, [fp], r3, lsl 23        |         r8 = *(fp);
                                                 |         fp += 23;
                                                 |     }
                                                 |     if (? < ?) {
    0x00032528 bpl 0x3256c                       |         
    0x0003252a push {r4, r5, lr}                 |         
    0x0003252c mov r1, r0                        |         r1 = r0;
    0x0003252e ldrd r4, r3, [r0, 0x14]           |         __asm ("ldrd r4, r3, [r0, 0x14]");
    0x00032532 sub sp, 0xc                       |         
    0x00032534 ldr.w r2, [r4, 0xa8]              |         r2 = *((r4 + 0xa8));
    0x00032538 add.w ip, r3, -1                  |         
    0x0003253c ldr.w r3, [r4, 0x80]              |         r3 = *((r4 + 0x80));
    0x00032540 ldr.w r5, [r4, 0xac]              |         r5 = *((r4 + 0xac));
    0x00032544 ldr r0, [r4, 0x40]                |         r0 = *((r4 + 0x40));
    0x00032546 subs r3, 1                        |         r3--;
    0x00032548 str.w r3, [r4, 0x80]              |         __asm ("str.w r3, [r4, 0x80]");
    0x0003254c umull r2, r3, r2, ip              |         r2:r3 = r2 * ip;
    0x00032550 mla r3, ip, r5, r3                |         __asm ("mla r3, ip, r5, r3");
    0x00032554 ldr.w r5, [r4, 0x90]              |         r5 = *((r4 + 0x90));
    0x00032558 str r5, [r1, 0x10]                |         *((r1 + 0x10)) = r5;
    0x0003255a str.w r1, [r4, 0x90]              |         __asm ("str.w r1, [r4, 0x90]");
    0x0003255e ldr r4, [r1, 4]                   |         r4 = *((r1 + 4));
    0x00032560 ldr r1, [r0]                      |         r1 = *(r0);
    0x00032562 str r4, [sp]                      |         *(sp) = r4;
    0x00032564 ldr r1, [r1, 0x48]                |         r1 = *((r1 + 0x48));
    0x00032566 blx r1                            |         uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00032568 add sp, 0xc                       |         
    0x0003256a pop {r4, r5, pc}                  |         
                                                 |     }
    0x0003256c b.w 0x2a55c                       |     return void (*0x2a55c)() ();
                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0x7ba2c */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0007ba2c ()                                          | void fcn_0007ba2c (int16_t arg_c8h, arithmetic arg_cch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_1h;
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     char * s1;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     int16_t var_30h;
                                                                     |     arithmetic x;
                                                                     |     int16_t var_38h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_49h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_6ch;
                                                                     |     int16_t var_78h;
                                                                     |     int16_t var_9ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0007ba2c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0007ba30 mov r8, r2                                            |     r8 = r2;
    0x0007ba32 sub sp, 0xa4                                          |     
    0x0007ba34 ldr.w r2, [pc, 0x5d8]                                 |     
    0x0007ba38 mov sb, r0                                            |     sb = r0;
    0x0007ba3a mov r7, r1                                            |     r7 = r1;
    0x0007ba3c str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0007ba3e ldr.w r3, [pc, 0x5d4]                                 |     r3 = *(0x7c016);
    0x0007ba42 add r2, pc                                            |     r2 = 0xf7a56;
    0x0007ba44 ldr r3, [r2, r3]                                      |     
    0x0007ba46 ldr r3, [r3]                                          |     r3 = *(0xf7a56);
    0x0007ba48 str r3, [sp, 0x9c]                                    |     var_9ch = r3;
    0x0007ba4a mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r1 != 0) {
    0x0007ba4e cbz r1, 0x7ba68                                       |         
    0x0007ba50 ldr.w r1, [pc, 0x5c4]                                 |         
    0x0007ba54 mov r0, r7                                            |         r0 = r7;
    0x0007ba56 add r1, pc                                            |         r1 = 0xf7a72;
    0x0007ba58 blx 0x6634                                            |         fcn_00006634 ();
    0x0007ba5c ldrb r3, [r7]                                         |         r3 = *(r7);
    0x0007ba5e mov r6, r0                                            |         r6 = r0;
                                                                     |         if (r3 != 0) {
    0x0007ba60 cbnz r3, 0x7ba8a                                      |             goto label_33;
                                                                     |         }
    0x0007ba62 cmp r0, 0                                             |         
                                                                     |         if (r0 == 0) {
    0x0007ba64 beq.w 0x7bbc6                                         |             goto label_34;
                                                                     |         }
                                                                     |     }
    0x0007ba68 ldrb.w r3, [r8, 0x56]                                 |     r3 = *((r8 + 0x56));
    0x0007ba6c cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0007ba6e beq.w 0x7bbc6                                         |         goto label_34;
                                                                     |     }
    0x0007ba72 ldr r3, [sp, 0xcc]                                    |     r3 = *(arg_cch);
    0x0007ba74 ands r3, r3, 0x80                                     |     r3 &= 0x80;
    0x0007ba76 lsls r0, r0, 0xe                                      |     r0 <<= 0xe;
    0x0007ba78 str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     |     if (r0 != r0) {
    0x0007ba7a bne.w 0x7bbc6                                         |         goto label_34;
                                                                     |     }
    0x0007ba7e ldr r3, [sp, 0xcc]                                    |     r3 = *(arg_cch);
    0x0007ba80 lsls r6, r3, 0x17                                     |     r6 = r3 << 0x17;
                                                                     |     if (r6 >= r3) {
    0x0007ba82 bpl.w 0x7beb0                                         |         goto label_35;
                                                                     |     }
    0x0007ba86 movs r6, 1                                            |     r6 = 1;
    0x0007ba88 b 0x7baa6                                             |     goto label_36;
                                                                     | label_33:
    0x0007ba8a cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0007ba8c bne.w 0x7be34                                         |         goto label_37;
                                                                     |     }
                                                                     | label_0:
    0x0007ba90 ldr r3, [sp, 0xc8]                                    |     r3 = *(arg_c8h);
    0x0007ba92 orr r3, r3, 2                                         |     r3 |= 2;
    0x0007ba96 str r3, [sp, 0xc8]                                    |     *(arg_c8h) = r3;
    0x0007ba98 ldr r3, [sp, 0xcc]                                    |     r3 = *(arg_cch);
    0x0007ba9a tst.w r3, 0x100                                       |     
    0x0007ba9e mov.w r3, 1                                           |     r3 = 1;
    0x0007baa2 str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     |     if ((r3 & 0x100) != 0) {
    0x0007baa4 beq 0x7bab2                                           |         
                                                                     | label_36:
    0x0007baa6 ldr r3, [sp, 0xcc]                                    |         r3 = *(arg_cch);
    0x0007baa8 bic r3, r3, 0x300                                     |         r3 = BIT_MASK (r3, 0x300);
    0x0007baac orr r3, r3, 0x200                                     |         r3 |= 0x200;
    0x0007bab0 str r3, [sp, 0xcc]                                    |         *(arg_cch) = r3;
                                                                     |     }
    0x0007bab2 movs r0, 0x30                                         |     r0 = 0x30;
    0x0007bab4 movs r1, 0                                            |     r1 = 0;
    0x0007bab6 bl 0x28c3c                                            |     r0 = fcn_00028c3c (r0);
    0x0007baba mov r4, r0                                            |     r4 = r0;
    0x0007babc cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007babe beq.w 0x7bf08                                         |         goto label_38;
                                                                     |     }
    0x0007bac2 movs r2, 0x2c                                         |     r2 = 0x2c;
    0x0007bac4 movs r1, 0                                            |     r1 = 0;
    0x0007bac6 adds r0, 4                                            |     r0 += 4;
    0x0007bac8 blx 0x62ec                                            |     fcn_000062ec ();
    0x0007bacc movs r3, 1                                            |     r3 = 1;
    0x0007bace str.w r8, [r4]                                        |     __asm ("str.w r8, [r4]");
    0x0007bad2 str r4, [r4, 0x20]                                    |     *((r4 + 0x20)) = r4;
    0x0007bad4 str r3, [r4, 0x24]                                    |     *((r4 + 0x24)) = r3;
    0x0007bad6 cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0007bad8 bne 0x7bbca                                           |         goto label_39;
                                                                     |     }
    0x0007bada ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
                                                                     |     if (r3 != 0) {
    0x0007badc cbz r3, 0x7bae4                                       |         
    0x0007bade ldr r3, [sp, 0xcc]                                    |         r3 = *(arg_cch);
    0x0007bae0 lsls r5, r3, 0x19                                     |         r5 = r3 << 0x19;
                                                                     |         if (r5 >= r3) {
    0x0007bae2 bpl 0x7bbcc                                           |             goto label_2;
                                                                     |         }
                                                                     |     }
    0x0007bae4 ldr r3, [sp, 0xcc]                                    |     r3 = *(arg_cch);
    0x0007bae6 ands r6, r3, 0x20000                                  |     r6 = r3 & 0x20000;
                                                                     |     if (r6 == r3) {
    0x0007baea beq 0x7bbcc                                           |         goto label_2;
                                                                     |     }
    0x0007baec movs r5, 1                                            |     r5 = 1;
                                                                     |     if (r7 != 0) {
    0x0007baee cbz r7, 0x7bafc                                       |         
                                                                     | label_1:
    0x0007baf0 mov r0, r7                                            |         r0 = r7;
    0x0007baf2 blx 0x65dc                                            |         r0 = strcmp (r0, r1);
    0x0007baf6 bic r5, r0, 0xc0000000                                |         r5 = BIT_MASK (r0, 0xc0000000);
    0x0007bafa adds r5, 1                                            |         r5++;
                                                                     |     }
    0x0007bafc ldr.w r6, [sb, 8]                                     |     r6 = *((sb + 8));
    0x0007bb00 adds r6, 1                                            |     r6++;
    0x0007bb02 cmp r6, r5                                            |     
    0x0007bb04 mov r0, r6                                            |     r0 = r6;
    0x0007bb06 it lt                                                 |     
                                                                     |     if (r6 >= r5) {
    0x0007bb08 movlt r0, r5                                          |         r0 = r5;
                                                                     |     }
    0x0007bb0a asrs r1, r0, 0x1f                                     |     r1 = r0 >> 0x1f;
    0x0007bb0c bl 0x28c3c                                            |     fcn_00028c3c (r0);
    0x0007bb10 movs r3, 1                                            |     r3 = 1;
    0x0007bb12 mov sl, r0                                            |     sl = r0;
    0x0007bb14 strb r3, [r4, 9]                                      |     *((r4 + 9)) = r3;
    0x0007bb16 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007bb18 beq.w 0x7bf02                                         |         goto label_40;
                                                                     |     }
    0x0007bb1c ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0007bb1e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007bb20 bne.w 0x7bed4                                         |         goto label_41;
                                                                     |     }
    0x0007bb24 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0007bb26 mov r2, r6                                            |     r2 = r6;
    0x0007bb28 mov r1, r7                                            |     r1 = r7;
    0x0007bb2a strb r3, [r0]                                         |     *(r0) = r3;
    0x0007bb2c mov r3, r0                                            |     r3 = r0;
    0x0007bb2e ldr.w r5, [sb, 0x24]                                  |     r5 = *((sb + 0x24));
    0x0007bb30 str r4, [r4, r0]                                      |     *((r4 + r0)) = r4;
    0x0007bb32 mov r0, sb                                            |     r0 = sb;
    0x0007bb34 blx r5                                                |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0007bb36 bics r3, r0, 0x200                                    |     __asm ("bics r3, r0, 0x200");
    0x0007bb3a mov fp, r0                                            |     
                                                                     |     if (r3 != 0) {
    0x0007bb3c bne.w 0x7c40e                                         |         goto label_42;
                                                                     |     }
                                                                     | label_3:
    0x0007bb40 ldr.w r5, [pc, 0x4d8]                                 |     
    0x0007bb44 add r5, pc                                            |     r5 = 0xf7b64;
    0x0007bb46 ldrb r6, [r5, 4]                                      |     r6 = *((r5 + 4));
    0x0007bb48 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0007bb4a beq.w 0x7c322                                         |         goto label_43;
                                                                     |     }
    0x0007bb4e ldr r3, [r5, 0x48]                                    |     r3 = *((r5 + 0x48));
    0x0007bb50 movs r0, 4                                            |     r0 = 4;
    0x0007bb52 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0007bb54 mov r6, r0                                            |     r6 = r0;
                                                                     |     if (r0 != 0) {
    0x0007bb56 cbz r0, 0x7bb5c                                       |         
    0x0007bb58 ldr r3, [r5, 0x50]                                    |         r3 = *((r5 + 0x50));
    0x0007bb5a blx r3                                                |         uint32_t (*r3)(uint32_t) (r3);
                                                                     |     }
    0x0007bb5c ldr.w r5, [pc, 0x4c0]                                 |     
    0x0007bb60 add r5, pc                                            |     r5 = 0xf7b84;
    0x0007bb62 ldrb r3, [r5, 4]                                      |     r3 = *((r5 + 4));
    0x0007bb64 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007bb66 beq.w 0x7c322                                         |         goto label_43;
                                                                     |     }
    0x0007bb6a ldr r3, [r5, 0x48]                                    |     r3 = *((r5 + 0x48));
    0x0007bb6c movs r0, 2                                            |     r0 = 2;
    0x0007bb6e blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0007bb70 mov fp, r0                                            |     
    0x0007bb72 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007bb74 beq.w 0x7c182                                         |         goto label_44;
                                                                     |     }
    0x0007bb78 ldr r2, [r5, 0x50]                                    |     r2 = *((r5 + 0x50));
    0x0007bb7a blx r2                                                |     uint32_t (*r2)(uint32_t) (r2);
    0x0007bb7c ldr.w r2, [pc, 0x4a4]                                 |     
    0x0007bb80 add r2, pc                                            |     r2 = 0xf7ba8;
    0x0007bb82 ldr.w r3, [r2, 0x520]                                 |     r3 = *(0xf80c8);
    0x0007bb84 adds r5, 0x20                                         |     r5 += 0x20;
    0x0007bb86 str r3, [sp, 8]                                       |     var_8h = r3;
                                                                     |     if (r3 == 0) {
    0x0007bb88 cbz r3, 0x7bbb2                                       |         goto label_45;
                                                                     |     }
                                                                     | label_10:
    0x0007bb8a ldr r5, [sp, 8]                                       |     r5 = var_8h;
    0x0007bb8c str r7, [sp, 8]                                       |     var_8h = r7;
                                                                     |     do {
                                                                     | label_18:
    0x0007bb8e ldr r7, [r5]                                          |         r7 = *(r5);
    0x0007bb90 mov r0, sl                                            |         r0 = sl;
    0x0007bb92 ldr.w r1, [r7, 0xb8]                                  |         r1 = *((r7 + 0xb8));
    0x0007bb96 blx 0x6634                                            |         r0 = fcn_00006634 ();
                                                                     |         if (r0 == 0) {
    0x0007bb9a cbnz r0, 0x7bba4                                      |             
    0x0007bb9c ldr r3, [r7]                                          |             r3 = *(r7);
    0x0007bb9e cmp sb, r3                                            |             
                                                                     |             if (sb == r3) {
    0x0007bba0 beq.w 0x7c064                                         |                 goto label_46;
                                                                     |             }
                                                                     |         }
    0x0007bba4 ldr r5, [r5, 0x48]                                    |         r5 = *((r5 + 0x48));
    0x0007bba6 cmp r5, 0                                             |         
    0x0007bba8 bne 0x7bb8e                                           |         
                                                                     |     } while (r5 != 0);
    0x0007bbaa ldr r7, [sp, 8]                                       |     r7 = var_8h;
    0x0007bbac cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0007bbb0 beq 0x7bbbe                                           |         
                                                                     | label_45:
    0x0007bbb2 ldr.w r3, [pc, 0x474]                                 |         
    0x0007bbb6 mov r0, fp                                            |         r0 = fp;
    0x0007bbb8 add r3, pc                                            |         
    0x0007bbba ldr r3, [r3, 0x58]                                    |         r3 = *(0xf7c3e);
    0x0007bbbc blx r3                                                |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                     |     }
                                                                     | label_11:
    0x0007bbbe mov r0, sl                                            |     r0 = sl;
    0x0007bbc0 bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007bbc4 b 0x7bbcc                                             |     goto label_2;
                                                                     | label_34:
    0x0007bbc6 movs r6, 1                                            |     r6 = 1;
    0x0007bbc8 b 0x7ba90                                             |     goto label_0;
                                                                     | label_39:
    0x0007bbca movs r6, 0                                            |     r6 = 0;
                                                                     | label_2:
    0x0007bbcc movs r0, 0x5c                                         |     r0 = 0x5c;
    0x0007bbce movs r1, 0                                            |     r1 = 0;
    0x0007bbd0 bl 0x28c3c                                            |     fcn_00028c3c (r0);
    0x0007bbd4 str r0, [sp, 8]                                       |     var_8h = r0;
    0x0007bbd6 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007bbd8 beq.w 0x7be6c                                         |         goto label_47;
                                                                     |     }
    0x0007bbdc movs r2, 0x5c                                         |     r2 = 0x5c;
    0x0007bbde movs r1, 0                                            |     r1 = 0;
    0x0007bbe0 blx 0x62ec                                            |     fcn_000062ec ();
    0x0007bbe4 ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0007bbe8 mov.w r2, 0x1000                                      |     r2 = 0x1000;
    0x0007bbec str r2, [sp, 0x30]                                    |     var_30h = r2;
    0x0007bbee cmp r3, 0x40                                          |     
    0x0007bbf0 mov r2, r3                                            |     r2 = r3;
    0x0007bbf2 it lt                                                 |     
                                                                     |     if (r3 >= 0x40) {
    0x0007bbf4 movlt r2, 0x40                                        |         r2 = 0x40;
                                                                     |     }
    0x0007bbf6 adds r2, 7                                            |     r2 += 7;
    0x0007bbf8 bic r2, r2, 7                                         |     r2 = BIT_MASK (r2, 7);
    0x0007bbfc str r2, [sp, 0x20]                                    |     var_20h = r2;
    0x0007bbfe ldr r2, [sp, 0xc8]                                    |     r2 = *(arg_c8h);
    0x0007bc00 ands fp, r2, 2                                        |     
                                                                     |     if (fp == r2) {
    0x0007bc04 beq.w 0x7bede                                         |         goto label_48;
                                                                     |     }
    0x0007bc08 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0007bc0a beq.w 0x7bfd0                                         |         goto label_49;
                                                                     |     }
    0x0007bc0e ldrb r2, [r7]                                         |     r2 = *(r7);
    0x0007bc10 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0007bc12 bne.w 0x7c41c                                         |         goto label_50;
                                                                     |     }
    0x0007bc16 mov r0, r2                                            |     r0 = r2;
    0x0007bc18 str r2, [sp, 0x14]                                    |     var_14h = r2;
    0x0007bc1a mov fp, r0                                            |     
    0x0007bc1c mov.w r2, 0x14a                                       |     r2 = 0x14a;
    0x0007bc20 movs r1, 1                                            |     r1 = 1;
    0x0007bc22 str r7, [sp, 0x24]                                    |     var_24h = r7;
    0x0007bc24 str r1, [sp, 0x1c]                                    |     var_1ch = r1;
    0x0007bc26 str r1, [sp, 0x28]                                    |     var_28h = r1;
    0x0007bc28 str r0, [sp, 0x2c]                                    |     var_2ch = r0;
    0x0007bc2a str r0, [sp, 0x18]                                    |     s1 = r0;
                                                                     | label_4:
    0x0007bc2c ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0007bc2e adds r3, 7                                            |     r3 += 7;
    0x0007bc30 ldr r5, [sp, 0x20]                                    |     r5 = var_20h;
    0x0007bc32 bic r3, r3, 7                                         |     r3 = BIT_MASK (r3, 7);
    0x0007bc36 add r2, r1                                            |     r2 += r1;
    0x0007bc38 movs r1, 0                                            |     r1 = 0;
    0x0007bc3a add.w r2, r2, r5, lsl 1                               |     r2 += (r5 << 1);
    0x0007bc3e add r2, r3                                            |     r2 += r3;
    0x0007bc40 mov r0, r2                                            |     r0 = r2;
    0x0007bc42 str r2, [sp, 0x20]                                    |     var_20h = r2;
    0x0007bc44 bl 0x28c3c                                            |     r0 = fcn_00028c3c (r0);
    0x0007bc48 mov sl, r0                                            |     sl = r0;
    0x0007bc4a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007bc4c beq.w 0x7c172                                         |         goto label_51;
                                                                     |     }
    0x0007bc50 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0007bc52 movs r1, 0                                            |     r1 = 0;
    0x0007bc54 blx 0x62ec                                            |     fcn_000062ec ();
    0x0007bc58 ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0007bc5c add.w r1, sl, 0x100                                   |     r1 = sl + 0x100;
    0x0007bc60 str.w r1, [sl, 0xf4]                                  |     __asm ("str.w r1, [sl, 0xf4]");
    0x0007bc64 adds r2, r3, 7                                        |     r2 = r3 + 7;
    0x0007bc66 add.w r3, sl, 0x130                                   |     r3 = sl + 0x130;
    0x0007bc6a bic r2, r2, 7                                         |     r2 = BIT_MASK (r2, 7);
    0x0007bc6e str.w r3, [sl, 0x40]                                  |     __asm ("str.w r3, [sl, 0x40]");
    0x0007bc72 add r2, r3                                            |     r2 += r3;
    0x0007bc74 str.w r2, [sl, 0x48]                                  |     __asm ("str.w r2, [sl, 0x48]");
    0x0007bc78 add r2, r5                                            |     r2 += r5;
    0x0007bc7a adds r3, r2, r5                                       |     r3 = r2 + r5;
    0x0007bc7c str.w r2, [sl, 0x44]                                  |     __asm ("str.w r2, [sl, 0x44]");
    0x0007bc80 adds r3, 8                                            |     r3 += 8;
    0x0007bc82 str.w sl, [r2, r5]                                    |     __asm ("str.w sl, [r2, r5]");
    0x0007bc86 str.w r3, [sl, 0xb8]                                  |     __asm ("str.w r3, [sl, 0xb8]");
    0x0007bc8a cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0007bc8e bne.w 0x7c33c                                         |         goto label_52;
                                                                     |     }
    0x0007bc92 str.w fp, [sl, 0xbc]                                  |     __asm ("str.w fp, [sl, 0xbc]");
    0x0007bc96 str.w fp, [sl, 0xfc]                                  |     __asm ("str.w fp, [sl, 0xfc]");
                                                                     | label_19:
    0x0007bc9a ldr r3, [sp, 0xcc]                                    |     r3 = *(arg_cch);
    0x0007bc9c str.w sb, [sl]                                        |     __asm ("str.w sb, [sl]");
    0x0007bca0 str.w r3, [sl, 0x98]                                  |     __asm ("str.w r3, [sl, 0x98]");
    0x0007bca4 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007bca6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007bca8 beq.w 0x7c3b0                                         |         goto label_53;
                                                                     |     }
    0x0007bcac ldrb r3, [r3]                                         |     r3 = *(r3);
    0x0007bcae cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007bcb0 bne.w 0x7c2ac                                         |         goto label_54;
                                                                     |     }
    0x0007bcb4 ldr r2, [sp, 0xcc]                                    |     r2 = *(arg_cch);
    0x0007bcb6 str r3, [sp, 0x18]                                    |     s1 = r3;
    0x0007bcb8 and r2, r2, 1                                         |     r2 &= 1;
    0x0007bcbc mov r5, r2                                            |     r5 = r2;
                                                                     | label_17:
    0x0007bcbe movs r3, 1                                            |     r3 = 1;
    0x0007bcc0 strb.w r3, [sl, 0xd]                                  |     *((sl + 0xd)) = r3;
    0x0007bcc4 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0007bcc6 movw r3, 0x401                                        |     r3 = 0x401;
    0x0007bcca strh.w r3, [sl, 0x11]                                 |     *((sl + 0x11)) = r3;
                                                                     | label_24:
    0x0007bcce mov.w r2, -1                                          |     r2 = -1;
    0x0007bcd2 add r1, sp, 0x30                                      |     r1 += var_30h;
    0x0007bcd4 mov r0, sl                                            |     r0 = sl;
    0x0007bcd6 bl 0x33fa0                                            |     r0 = fcn_00033fa0 (r0, r1, r2);
    0x0007bcda mov fp, r0                                            |     
    0x0007bcdc cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0007bcde bne.w 0x7c042                                         |         goto label_16;
                                                                     |     }
    0x0007bce2 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0007bce4 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0007bce6 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0007bce8 eor sb, r3, 1                                         |     sb = r3 ^ 1;
                                                                     |     if (r3 == 0) {
    0x0007bcec cbnz r3, 0x7bcf4                                      |         
    0x0007bcee ldr.w fp, [pc, 0x33c]                                 |         fp = *(0x0007c02c);
    0x0007bcf2 add fp, pc                                            |         
                                                                     |     }
    0x0007bcf4 ldr.w r3, [sl, 0xf4]                                  |     r3 = *((sl + 0xf4));
    0x0007bcf8 movs r2, 0x30                                         |     r2 = 0x30;
    0x0007bcfa movs r1, 0                                            |     r1 = 0;
    0x0007bcfc mov r0, r3                                            |     r0 = r3;
    0x0007bcfe blx 0x62ec                                            |     fcn_000062ec ();
    0x0007bd00 invalid                                               |     
    0x0007bd04 lsrs r7, r7, 0xe                                      |     r7 >>= 0xe;
    0x0007bd06 vldr d17, [pc, 0x300]                                 |     __asm ("vldr d17, [0x0007c00c]");
    0x0007bd0a add.w r2, r0, 0x10                                    |     r2 = r0 + 0x10;
    0x0007bd0e strb.w sb, [r0, 0x20]                                 |     *((r0 + 0x20)) = sb;
    0x0007bd12 mov r3, r0                                            |     r3 = r0;
    0x0007bd14 str.w fp, [r0, 0x24]                                  |     __asm ("str.w fp, [r0, 0x24]");
    0x0007bd18 str.w sl, [r0, 0x28]                                  |     __asm ("str.w sl, [r0, 0x28]");
    0x0007bd1c movs r0, 2                                            |     r0 = 2;
    0x0007bd1e strb.w r0, [r3, 0x21]                                 |     *((r3 + 0x21)) = r0;
    0x0007bd22 mov r0, r3                                            |     r0 = r3;
    0x0007bd24 ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0007bd26 vst1.32 {d16, d17}, [r2]                              |     __asm ("vst1.32 {d16, d17}, [r2]");
    0x0007bd2a bl 0x224cc                                            |     r0 = fcn_000224cc (r0, r1);
    0x0007bd2e mov sb, r0                                            |     sb = r0;
    0x0007bd30 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0007bd32 bne.w 0x7c040                                         |         goto label_55;
                                                                     |     }
    0x0007bd36 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0007bd38 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0007bd3a strb.w r5, [sl, 0xe]                                  |     *((sl + 0xe)) = r5;
    0x0007bd3e strb.w r3, [sl, 0xf]                                  |     *((sl + 0xf)) = r3;
    0x0007bd42 uxtb r3, r2                                           |     r3 = (int8_t) r2;
    0x0007bd44 strb.w r3, [sl, 0xc]                                  |     *((sl + 0xc)) = r3;
    0x0007bd48 strb.w r3, [sl, 4]                                    |     *((sl + 4)) = r3;
    0x0007bd4c strb.w r3, [sl, 0x13]                                 |     *((sl + 0x13)) = r3;
    0x0007bd50 strb.w r3, [sl, 7]                                    |     *((sl + 7)) = r3;
    0x0007bd54 ldr r3, [sp, 0xc8]                                    |     r3 = *(arg_c8h);
    0x0007bd56 and fp, r3, 1                                         |     
    0x0007bd5a mvn r3, 0xc0000000                                    |     r3 = ~0xc0000000;
    0x0007bd5e str.w r3, [sl, 0xa0]                                  |     __asm ("str.w r3, [sl, 0xa0]");
    0x0007bd62 eor r3, fp, 1                                         |     r3 = fp ^ 1;
    0x0007bd66 strb.w r3, [sl, 6]                                    |     *((sl + 6)) = r3;
                                                                     |     if (r2 == 0) {
    0x0007bd6a cbnz r2, 0x7bd76                                      |         
    0x0007bd6c movs r3, 1                                            |         
    0x0007bd6e movt r3, 0xa02                                        |         r3 = 0xa020001;
    0x0007bd72 str.w r3, [sl, 8]                                     |         __asm ("str.w r3, [sl, 8]");
                                                                     |     }
    0x0007bd76 vmov.i8 d16, 0xff                                     |     __asm ("vmov.i8 d16, 0xff");
    0x0007bd7a movs r3, 0x58                                         |     r3 = 0x58;
    0x0007bd7c mov r0, sl                                            |     r0 = sl;
    0x0007bd7e strh.w r3, [sl, 0x94]                                 |     *((sl + 0x94)) = r3;
    0x0007bd82 vstr d16, [sl, 0xb0]                                  |     __asm ("vstr d16, [sl, 0xb0]");
    0x0007bd86 bl 0x2b554                                            |     fcn_0002b554 (r0);
    0x0007bd8a cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0007bd8e beq.w 0x7c4a4                                         |         goto label_56;
                                                                     |     }
    0x0007bd92 movs r3, 2                                            |     r3 = 2;
    0x0007bd94 strb.w r3, [sl, 5]                                    |     *((sl + 5)) = r3;
                                                                     | label_23:
    0x0007bd98 ldr r2, [pc, 0x294]                                   |     
    0x0007bd9a ldr.w r3, [sl, 0x2c]                                  |     r3 = *((sl + 0x2c));
    0x0007bd9e add r2, pc                                            |     r2 = 0xf7dd2;
    0x0007bda0 str.w r2, [sl, 0xd8]                                  |     __asm ("str.w r2, [sl, 0xd8]");
    0x0007bda4 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007bda6 bne.w 0x7c49e                                         |         goto label_57;
                                                                     |     }
    0x0007bdaa ldrb.w r3, [sl, 0x17]                                 |     r3 = *((sl + 0x17));
    0x0007bdae cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007bdb0 beq.w 0x7c500                                         |         goto label_58;
                                                                     |     }
    0x0007bdb4 ldr.w r3, [sl, 0xe0]                                  |     r3 = *((sl + 0xe0));
    0x0007bdb8 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007bdba beq.w 0x7c532                                         |         goto label_59;
                                                                     |     }
    0x0007bdbe ldr r3, [pc, 0x274]                                   |     
    0x0007bdc0 add r3, pc                                            |     r3 = 0xf7dfa;
                                                                     | label_22:
    0x0007bdc2 str.w r3, [sl, 0xdc]                                  |     __asm ("str.w r3, [sl, 0xdc]");
    0x0007bdc6 ldr.w r3, [sl, 0x40]                                  |     r3 = *((sl + 0x40));
    0x0007bdca ldr r5, [sp, 8]                                       |     r5 = var_8h;
    0x0007bdcc ldrd r0, r1, [r8, 0x30]                               |     __asm ("ldrd r0, r1, [r8, 0x30]");
    0x0007bdd0 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0007bdd2 str.w sl, [r5]                                        |     __asm ("str.w sl, [r5]");
    0x0007bdd6 strd r0, r1, [sl, 0x88]                               |     __asm ("strd r0, r1, [sl, 0x88]");
                                                                     |     if (r3 != 0) {
    0x0007bdda cbz r3, 0x7bdec                                       |         
    0x0007bddc ldr r3, [r3]                                          |         r3 = *(r3);
    0x0007bdde cmp r3, 2                                             |         
                                                                     |         if (r3 <= 2) {
    0x0007bde0 ble 0x7bdec                                           |             goto label_60;
                                                                     |         }
    0x0007bde2 mov r0, sl                                            |         r0 = sl;
    0x0007bde4 bl 0x2b830                                            |         fcn_0002b830 (r0, r1);
    0x0007bde8 ldr.w sl, [r5]                                        |         sl = *(r5);
                                                                     |     }
                                                                     | label_60:
    0x0007bdec add r3, sp, 0x38                                      |     r3 += var_38h;
    0x0007bdee movs r2, 0x64                                         |     r2 = 0x64;
    0x0007bdf0 mov r0, r3                                            |     r0 = r3;
    0x0007bdf2 movs r1, 0                                            |     r1 = 0;
    0x0007bdf4 blx 0x62ec                                            |     r0 = fcn_000062ec ();
    0x0007bdf8 mov r3, r0                                            |     r3 = r0;
    0x0007bdfa ldr.w r0, [sl, 0x40]                                  |     r0 = *((sl + 0x40));
    0x0007bdfe ldr r2, [r0]                                          |     r2 = *(r0);
    0x0007be00 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0007be02 beq.w 0x7c19e                                         |         goto label_61;
                                                                     |     }
    0x0007be06 vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0007be0a mov r1, r3                                            |     r1 = r3;
    0x0007be0c vstr d16, [sp]                                        |     __asm ("vstr d16, [sp]");
    0x0007be10 ldr r3, [r2, 8]                                       |     r3 = *((r2 + 8));
    0x0007be12 movs r2, 0x64                                         |     r2 = 0x64;
    0x0007be14 blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x0007be16 movw r2, 0x20a                                        |     r2 = 0x20a;
    0x0007be1a mov fp, r0                                            |     
    0x0007be1c cmp r0, r2                                            |     
    0x0007be1e it ne                                                 |     
                                                                     |     if (r0 != r2) {
    0x0007be20 cmpne r0, 0                                           |         __asm ("cmpne r0, 0");
                                                                     |     }
                                                                     |     if (r0 == r2) {
    0x0007be22 beq.w 0x7c19e                                         |         goto label_61;
                                                                     |     }
                                                                     | label_5:
    0x0007be26 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0007be28 ldr r0, [r3]                                          |     r0 = *(r3);
                                                                     |     if (r0 == 0) {
    0x0007be2a cbz r0, 0x7be70                                       |         goto label_62;
                                                                     |     }
    0x0007be2c movs r1, 0                                            |     r1 = 0;
    0x0007be2e bl 0x78ad0                                            |     fcn_00078ad0 (r0, r1);
    0x0007be32 b 0x7be70                                             |     goto label_62;
                                                                     | label_37:
    0x0007be34 ldr r3, [sp, 0xcc]                                    |     r3 = *(arg_cch);
    0x0007be36 ands r3, r3, 0x80                                     |     r3 &= 0x80;
    0x0007be3a str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     |     if (r3 != r3) {
    0x0007be3c bne 0x7beac                                           |         goto label_63;
                                                                     |     }
    0x0007be3e movs r0, 0x30                                         |     r0 = 0x30;
    0x0007be40 movs r1, 0                                            |     r1 = 0;
    0x0007be42 bl 0x28c3c                                            |     r0 = fcn_00028c3c (r0);
    0x0007be46 mov r4, r0                                            |     r4 = r0;
    0x0007be48 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007be4a beq 0x7bf08                                           |         goto label_38;
                                                                     |     }
    0x0007be4c ldr r6, [sp, 0xc]                                     |     r6 = var_ch;
    0x0007be4e movs r2, 0x2c                                         |     r2 = 0x2c;
    0x0007be50 adds r0, 4                                            |     r0 += 4;
    0x0007be52 mov r1, r6                                            |     r1 = r6;
    0x0007be54 blx 0x62ec                                            |     fcn_000062ec ();
    0x0007be58 movs r3, 1                                            |     r3 = 1;
    0x0007be5a str.w r8, [r4]                                        |     __asm ("str.w r8, [r4]");
    0x0007be5e str r3, [r4, 0x24]                                    |     *((r4 + 0x24)) = r3;
    0x0007be60 ldr r3, [sp, 0xcc]                                    |     r3 = *(arg_cch);
    0x0007be62 str r4, [r4, 0x20]                                    |     *((r4 + 0x20)) = r4;
    0x0007be64 lsls r3, r3, 0xe                                      |     r3 <<= 0xe;
                                                                     |     if (r3 < r3) {
    0x0007be66 bmi.w 0x7baf0                                         |         goto label_1;
                                                                     |     }
    0x0007be6a b 0x7bbcc                                             |     goto label_2;
                                                                     | label_47:
    0x0007be6c mov.w fp, 7                                           |     
                                                                     | label_62:
    0x0007be70 ldr r0, [sp, 8]                                       |     r0 = var_8h;
    0x0007be72 bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007be76 mov r0, r4                                            |     r0 = r4;
    0x0007be78 bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007be7c ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0007be7e movs r2, 0                                            |     r2 = 0;
    0x0007be80 str r2, [r3]                                          |     *(r3) = r2;
                                                                     |     if (r6 == 0) {
                                                                     | label_6:
    0x0007be82 cbz r6, 0x7be8e                                       |         goto label_21;
                                                                     |     }
    0x0007be84 ldr r2, [pc, 0x1b0]                                   |     
    0x0007be86 mov r0, r6                                            |     r0 = r6;
    0x0007be88 add r2, pc                                            |     
    0x0007be8a ldr r2, [r2, 0x58]                                    |     r2 = *(0xf7f1c);
    0x0007be8c blx r2                                                |     uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
                                                                     |     do {
                                                                     | label_21:
    0x0007be8e ldr r1, [pc, 0x1ac]                                   |         
    0x0007be90 ldr r2, [pc, 0x180]                                   |         r2 = *(0x7c014);
    0x0007be92 add r1, pc                                            |         r1 = 0xf7ed4;
    0x0007be94 ldr r2, [r1, r2]                                      |         r2 = *(0xf7ed4);
    0x0007be96 ldr r1, [r2]                                          |         r1 = *(0xf7ed4);
    0x0007be98 ldr r2, [sp, 0x9c]                                    |         r2 = var_9ch;
    0x0007be9a eors r1, r2                                           |         r1 ^= r2;
    0x0007be9c mov.w r2, 0                                           |         r2 = 0;
                                                                     |         if (r1 != r2) {
    0x0007bea0 bne.w 0x7c538                                         |             goto label_64;
                                                                     |         }
    0x0007bea4 mov r0, fp                                            |         r0 = fp;
    0x0007bea6 add sp, 0xa4                                          |         
    0x0007bea8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_63:
    0x0007beac movs r6, 0                                            |         r6 = 0;
    0x0007beae b 0x7ba90                                             |         goto label_0;
                                                                     | label_35:
    0x0007beb0 movs r0, 0x30                                         |         r0 = 0x30;
    0x0007beb2 movs r1, 0                                            |         r1 = 0;
    0x0007beb4 bl 0x28c3c                                            |         r0 = fcn_00028c3c (r0);
    0x0007beb8 mov r4, r0                                            |         r4 = r0;
                                                                     |         if (r0 != 0) {
    0x0007beba cbz r0, 0x7bf08                                       |             
    0x0007bebc ldr r6, [sp, 0xc]                                     |             r6 = var_ch;
    0x0007bebe movs r2, 0x2c                                         |             r2 = 0x2c;
    0x0007bec0 adds r0, r4, 4                                        |             r0 = r4 + 4;
    0x0007bec2 mov r1, r6                                            |             r1 = r6;
    0x0007bec4 blx 0x62ec                                            |             fcn_000062ec ();
    0x0007bec8 movs r3, 1                                            |             r3 = 1;
    0x0007beca str.w r8, [r4]                                        |             __asm ("str.w r8, [r4]");
    0x0007bece str r4, [r4, 0x20]                                    |             *((r4 + 0x20)) = r4;
    0x0007bed0 str r3, [r4, 0x24]                                    |             *((r4 + 0x24)) = r3;
    0x0007bed2 b 0x7bbcc                                             |             goto label_2;
                                                                     | label_41:
    0x0007bed4 mov r2, r5                                            |             r2 = r5;
    0x0007bed6 mov r1, r7                                            |             r1 = r7;
    0x0007bed8 blx 0x65ac                                            |             EVP_CIPHER_CTX_free ();
    0x0007bedc b 0x7bb40                                             |             goto label_3;
                                                                     | label_48:
    0x0007bede cmp r7, 0                                             |             
                                                                     |             if (r7 == 0) {
    0x0007bee0 beq.w 0x7bfe8                                         |                 goto label_65;
                                                                     |             }
    0x0007bee4 ldrb r2, [r7]                                         |             r2 = *(r7);
                                                                     |             if (r2 != 0) {
    0x0007bee6 cbnz r2, 0x7bf0e                                      |                 goto label_66;
                                                                     |             }
    0x0007bee8 movs r1, 1                                            |             r1 = 1;
    0x0007beea mov.w r2, 0x14a                                       |             r2 = 0x14a;
    0x0007beee strd r7, fp, [sp, 0x24]                               |             __asm ("strd r7, fp, [var_24h]");
    0x0007bef2 str r1, [sp, 0x1c]                                    |             var_1ch = r1;
    0x0007bef4 str.w fp, [sp, 0x14]                                  |             __asm ("str.w fp, [var_14h]");
    0x0007bef8 str.w fp, [sp, 0x2c]                                  |             __asm ("str.w fp, [var_2ch]");
    0x0007befc str.w fp, [sp, 0x18]                                  |             __asm ("str.w fp, [s1]");
    0x0007bf00 b 0x7bc2c                                             |             goto label_4;
                                                                     | label_40:
    0x0007bf02 mov r0, r4                                            |             r0 = r4;
    0x0007bf04 bl 0x26dbc                                            |             fcn_00026dbc (r0);
                                                                     |         }
                                                                     | label_38:
    0x0007bf08 mov.w fp, 7                                           |         
    0x0007bf0c b 0x7be8e                                             |         
                                                                     |     } while (1);
                                                                     | label_66:
    0x0007bf0e ldr.w r3, [sb, 8]                                     |     r3 = *((sb + 8));
    0x0007bf12 add.w sl, r3, 1                                       |     sl = r3 + 1;
    0x0007bf16 lsl.w r0, sl, 1                                       |     r0 = sl << 1;
    0x0007bf1a asrs r1, r0, 0x1f                                     |     r1 = r0 >> 0x1f;
    0x0007bf1c bl 0x28c3c                                            |     r0 = fcn_00028c3c (r0);
    0x0007bf20 mov r3, r0                                            |     r3 = r0;
    0x0007bf22 str r0, [sp, 0x18]                                    |     s1 = r0;
    0x0007bf24 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007bf26 beq.w 0x7c17c                                         |         goto label_14;
                                                                     |     }
    0x0007bf2a strb.w fp, [r0]                                       |     *(r0) = fp;
    0x0007bf2e mov r2, sl                                            |     r2 = sl;
    0x0007bf30 ldr.w r5, [sb, 0x24]                                  |     r5 = *((sb + 0x24));
    0x0007bf34 mov r1, r7                                            |     r1 = r7;
    0x0007bf36 mov r0, sb                                            |     r0 = sb;
    0x0007bf38 blx r5                                                |     uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x0007bf3a str r0, [sp, 0x28]                                    |     var_28h = r0;
                                                                     |     if (r0 != 0) {
    0x0007bf3c cbz r0, 0x7bf54                                       |         
    0x0007bf3e cmp.w r0, 0x200                                       |         
                                                                     |         if (r0 != 0x200) {
    0x0007bf42 bne 0x7bf54                                           |             goto label_67;
                                                                     |         }
    0x0007bf44 ldr r2, [sp, 0xcc]                                    |         r2 = *(arg_cch);
    0x0007bf46 movw r3, 0x60e                                        |         r3 = 0x60e;
    0x0007bf4a ands r2, r2, 0x1000000                                |         r2 &= 0x1000000;
    0x0007bf4e it eq                                                 |         
                                                                     |         if (r2 != r2) {
    0x0007bf50 moveq r3, r2                                          |             r3 = r2;
                                                                     |         }
    0x0007bf52 str r3, [sp, 0x28]                                    |         var_28h = r3;
                                                                     |     }
                                                                     | label_67:
    0x0007bf54 ldr r0, [sp, 0x18]                                    |     r0 = s1;
    0x0007bf56 blx 0x65dc                                            |     r0 = strcmp (r0, r1);
    0x0007bf5a bic r3, r0, 0xc0000000                                |     r3 = BIT_MASK (r0, 0xc0000000);
    0x0007bf5e mov r0, r7                                            |     r0 = r7;
    0x0007bf60 mov r5, r3                                            |     r5 = r3;
    0x0007bf62 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0007bf64 blx 0x65dc                                            |     r0 = strcmp (r0, r1);
    0x0007bf68 bic r3, r0, 0xc0000000                                |     r3 = BIT_MASK (r0, 0xc0000000);
    0x0007bf6c mov fp, r5                                            |     
    0x0007bf6e adds r3, 1                                            |     r3++;
    0x0007bf70 ldrb r2, [r7, r3]                                     |     r2 = *((r7 + r3));
    0x0007bf72 adds r3, r7, r3                                       |     r3 = r7 + r3;
    0x0007bf74 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0007bf76 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0007bf78 beq.w 0x7c506                                         |         goto label_68;
                                                                     |     }
    0x0007bf7c ldr r5, [sp, 8]                                       |     r5 = var_8h;
    0x0007bf7e mov sl, r3                                            |     sl = r3;
                                                                     |     do {
    0x0007bf80 mov r0, sl                                            |         r0 = sl;
    0x0007bf82 blx 0x65dc                                            |         strcmp (r0, r1);
    0x0007bf86 adds r0, 1                                            |         r0++;
    0x0007bf88 add sl, r0                                            |         sl += r0;
    0x0007bf8a mov r0, sl                                            |         r0 = sl;
    0x0007bf8c blx 0x65dc                                            |         strcmp (r0, r1);
    0x0007bf90 adds r0, 1                                            |         r0++;
    0x0007bf92 ldrb.w r3, [sl, r0]                                   |         r3 = *((sl + r0));
    0x0007bf94 adds r0, 0                                            |         r0 += 0;
    0x0007bf96 add sl, r0                                            |         sl += r0;
    0x0007bf98 cmp r3, 0                                             |         
    0x0007bf9a bne 0x7bf80                                           |         
                                                                     |     } while (r3 != 0);
    0x0007bf9c str r5, [sp, 8]                                       |     var_8h = r5;
                                                                     | label_27:
    0x0007bf9e ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0007bfa0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007bfa2 bne.w 0x7c488                                         |         goto label_69;
                                                                     |     }
    0x0007bfa6 ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0007bfa8 ldr.w r3, [sb, 8]                                     |     r3 = *((sb + 8));
    0x0007bfac adds r2, r1, 7                                        |     r2 = r1 + 7;
    0x0007bfae cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0007bfb0 bge.w 0x7c46a                                         |         goto label_70;
                                                                     |     }
    0x0007bfb4 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0007bfb6 add.w r2, r1, r1, lsl 1                               |     r2 = r1 + (r1 << 1);
    0x0007bfba add.w sl, sl, 1                                       |     sl++;
    0x0007bfbe str r7, [sp, 0x24]                                    |     var_24h = r7;
    0x0007bfc0 add.w r2, r2, 0x14a                                   |     r2 += 0x14a;
    0x0007bfc4 sub.w r3, sl, r3                                      |     r3 = sl - r3;
    0x0007bfc8 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0007bfca ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0007bfcc adds r0, 4                                            |     r0 += 4;
    0x0007bfce b 0x7bc2c                                             |     goto label_4;
                                                                     | label_49:
    0x0007bfd0 movs r2, 1                                            |     r2 = 1;
    0x0007bfd2 mov fp, r7                                            |     
    0x0007bfd4 mov r1, r2                                            |     r1 = r2;
    0x0007bfd6 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0007bfd8 str r7, [sp, 0x24]                                    |     var_24h = r7;
    0x0007bfda mov.w r2, 0x14a                                       |     r2 = 0x14a;
    0x0007bfde str r7, [sp, 0x2c]                                    |     var_2ch = r7;
    0x0007bfe0 str r7, [sp, 0x18]                                    |     s1 = r7;
    0x0007bfe2 str r7, [sp, 0x14]                                    |     var_14h = r7;
    0x0007bfe4 str r1, [sp, 0x28]                                    |     var_28h = r1;
    0x0007bfe6 b 0x7bc2c                                             |     goto label_4;
                                                                     | label_65:
    0x0007bfe8 movs r1, 1                                            |     r1 = 1;
    0x0007bfea mov.w r2, 0x14a                                       |     r2 = 0x14a;
    0x0007bfee strd r7, r7, [sp, 0x24]                               |     __asm ("strd r7, r7, [var_24h]");
    0x0007bff2 str r7, [sp, 0x2c]                                    |     var_2ch = r7;
    0x0007bff4 str r7, [sp, 0x18]                                    |     s1 = r7;
    0x0007bff6 str r1, [sp, 0x1c]                                    |     var_1ch = r1;
    0x0007bff8 str r7, [sp, 0x14]                                    |     var_14h = r7;
    0x0007bffa b 0x7bc2c                                             |     goto label_4;
                                                                     | label_55:
    0x0007c040 mov fp, r0                                            |     
                                                                     | label_16:
    0x0007c042 ldr.w r7, [sl, 0x40]                                  |     r7 = *((sl + 0x40));
    0x0007c046 ldr r2, [r7]                                          |     r2 = *(r7);
                                                                     |     if (r2 != 0) {
    0x0007c048 cbz r2, 0x7c054                                       |         
    0x0007c04a ldr r2, [r2, 4]                                       |         r2 = *((r2 + 4));
    0x0007c04c mov r0, r7                                            |         r0 = r7;
    0x0007c04e blx r2                                                |         uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
    0x0007c050 movs r2, 0                                            |         r2 = 0;
    0x0007c052 str r2, [r7]                                          |         *(r7) = r2;
                                                                     |     }
    0x0007c054 ldr.w r0, [sl, 0xf0]                                  |     r0 = *((sl + 0xf0));
    0x0007c058 bl 0x26f64                                            |     fcn_00026f64 (r0);
    0x0007c05c mov r0, sl                                            |     r0 = sl;
    0x0007c05e bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c062 b 0x7be26                                             |     goto label_5;
                                                                     | label_46:
    0x0007c064 ldr.w r0, [r8, 0x14]                                  |     r0 = *((r8 + 0x14));
    0x0007c068 str r5, [sp, 8]                                       |     var_8h = r5;
    0x0007c06a subs r1, r0, 1                                        |     r1 = r0 - 1;
                                                                     |     if (r1 < r0) {
    0x0007c06c bmi 0x7c08e                                           |         goto label_71;
                                                                     |     }
    0x0007c06e ldr.w r2, [r8, 0x10]                                  |     r2 = *((r8 + 0x10));
    0x0007c072 add.w r2, r2, r0, lsl 4                               |     r2 += (r0 << 4);
                                                                     |     do {
    0x0007c076 ldr r3, [r2, -0xc]                                    |         r3 = *((r2 - 0xc));
                                                                     |         if (r3 != 0) {
    0x0007c07a cbz r3, 0x7c084                                       |             
    0x0007c07c ldr r3, [r3, 4]                                       |             r3 = *((r3 + 4));
    0x0007c07e cmp r3, r5                                            |             
                                                                     |             if (r3 == r5) {
    0x0007c080 beq.w 0x7c3e0                                         |                 goto label_72;
                                                                     |             }
                                                                     |         }
    0x0007c084 subs r1, 1                                            |         r1--;
    0x0007c086 subs r2, 0x10                                         |         r2 -= 0x10;
    0x0007c088 adds r0, r1, 1                                        |         r0 = r1 + 1;
    0x0007c08a bne 0x7c076                                           |         
                                                                     |     } while (r0 != r1);
    0x0007c08c str r5, [sp, 8]                                       |     var_8h = r5;
                                                                     | label_71:
    0x0007c08e ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0007c090 ldr r2, [r3, 0x44]                                    |     r2 = *((r3 + 0x44));
    0x0007c092 str r3, [r4, 4]                                       |     *((r4 + 4)) = r3;
    0x0007c094 adds r2, 1                                            |     r2++;
    0x0007c096 str r2, [r3, 0x44]                                    |     *((r3 + 0x44)) = r2;
    0x0007c098 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0007c09c beq.w 0x7c494                                         |         goto label_73;
                                                                     |     }
    0x0007c0a0 ldr.w r3, [pc, 0x498]                                 |     
    0x0007c0a4 mov r0, fp                                            |     r0 = fp;
    0x0007c0a6 add r3, pc                                            |     
    0x0007c0a8 ldr r3, [r3, 0x58]                                    |     r3 = *(0xf863e);
    0x0007c0aa blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0007c0ac mov r0, sl                                            |     r0 = sl;
    0x0007c0ae bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c0b2 ldrb r3, [r4, 9]                                      |     r3 = *((r4 + 9));
                                                                     | label_15:
    0x0007c0b4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007c0b6 beq 0x7c132                                           |         goto label_13;
                                                                     |     }
                                                                     | label_28:
    0x0007c0b8 ldr.w r7, [r8, 0x14]                                  |     r7 = *((r8 + 0x14));
    0x0007c0bc cmp r7, 0                                             |     
                                                                     |     if (r7 <= 0) {
    0x0007c0be ble 0x7c0da                                           |         goto label_74;
                                                                     |     }
    0x0007c0c0 ldr.w r2, [r8, 0x10]                                  |     r2 = *((r8 + 0x10));
    0x0007c0c4 movs r1, 0                                            |     r1 = 0;
    0x0007c0c6 ldr r5, [sp, 8]                                       |     r5 = var_8h;
                                                                     |     do {
    0x0007c0c8 ldr r3, [r2, 4]                                       |         r3 = *((r2 + 4));
                                                                     |         if (r3 != 0) {
    0x0007c0ca cbz r3, 0x7c0d0                                       |             
    0x0007c0cc ldrb r0, [r3, 9]                                      |             r0 = *((r3 + 9));
                                                                     |             if (r0 != 0) {
    0x0007c0ce cbnz r0, 0x7c118                                      |                 goto label_75;
                                                                     |             }
                                                                     |         }
    0x0007c0d0 adds r1, 1                                            |         r1++;
    0x0007c0d2 adds r2, 0x10                                         |         r2 += 0x10;
    0x0007c0d4 cmp r1, r7                                            |         
    0x0007c0d6 bne 0x7c0c8                                           |         
                                                                     |     } while (r1 != r7);
    0x0007c0d8 str r5, [sp, 8]                                       |     var_8h = r5;
                                                                     | label_74:
    0x0007c0da ldr r7, [r4, 4]                                       |     r7 = *((r4 + 4));
                                                                     | label_7:
    0x0007c0dc ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0007c0de str r4, [r3]                                          |     *(r3) = r4;
    0x0007c0e0 ldr r3, [r4, 0xc]                                     |     r3 = *((r4 + 0xc));
    0x0007c0e2 ldrb r2, [r4, 0xa]                                    |     r2 = *((r4 + 0xa));
    0x0007c0e4 adds r1, r3, 1                                        |     r1 = r3 + 1;
    0x0007c0e6 str r1, [r4, 0xc]                                     |     *((r4 + 0xc)) = r1;
                                                                     |     if (r2 == 0) {
    0x0007c0e8 cbnz r2, 0x7c0f8                                      |         
    0x0007c0ea mov r0, r4                                            |         r0 = r4;
    0x0007c0ec bl 0x2adac                                            |         fcn_0002adac (r0);
    0x0007c0f0 ldrb r3, [r4, 9]                                      |         r3 = *((r4 + 9));
                                                                     |         if (r3 == 0) {
    0x0007c0f2 cbz r3, 0x7c0fc                                       |             goto label_9;
                                                                     |         }
    0x0007c0f4 ldr r3, [r4, 0xc]                                     |         r3 = *((r4 + 0xc));
    0x0007c0f6 subs r3, 1                                            |         r3--;
                                                                     |     }
    0x0007c0f8 str r3, [r4, 0xc]                                     |     *((r4 + 0xc)) = r3;
                                                                     |     if (r3 == 0) {
    0x0007c0fa cbz r3, 0x7c14e                                       |         goto label_76;
                                                                     |     }
                                                                     | label_9:
    0x0007c0fc ldr r3, [r7, 0x34]                                    |     r3 = *((r7 + 0x34));
                                                                     |     if (r3 == 0) {
    0x0007c0fe cbz r3, 0x7c13e                                       |         goto label_77;
                                                                     |     }
                                                                     | label_8:
    0x0007c100 ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0007c102 ldr r3, [r2]                                          |     r3 = *(r2);
    0x0007c104 ldr r0, [r3, 0x40]                                    |     r0 = *((r3 + 0x40));
    0x0007c106 ldr r3, [r0]                                          |     r3 = *(r0);
                                                                     |     if (r3 != 0) {
    0x0007c108 cbz r3, 0x7c112                                       |         
    0x0007c10a ldr r3, [r3, 0x28]                                    |         r3 = *((r3 + 0x28));
    0x0007c10c adds r2, 4                                            |         r2 += 4;
    0x0007c10e movs r1, 0x1e                                         |         r1 = 0x1e;
    0x0007c110 blx r3                                                |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
                                                                     |     }
    0x0007c112 mov.w fp, 0                                           |     
    0x0007c116 b 0x7be82                                             |     goto label_6;
                                                                     |     do {
                                                                     | label_75:
    0x0007c118 mov r2, r3                                            |         r2 = r3;
    0x0007c11a ldr r3, [r3, 0x1c]                                    |         r3 = *((r3 + 0x1c));
    0x0007c11c cmp r3, 0                                             |         
    0x0007c11e bne 0x7c118                                           |         
                                                                     |     } while (r3 != 0);
    0x0007c120 ldr r7, [r4, 4]                                       |     r7 = *((r4 + 4));
    0x0007c122 ldr r1, [r2, 4]                                       |     r1 = *((r2 + 4));
    0x0007c124 str r5, [sp, 8]                                       |     var_8h = r5;
    0x0007c126 cmp r1, r7                                            |     
                                                                     |     if (r1 < r7) {
    0x0007c128 bls 0x7c156                                           |         goto label_78;
                                                                     |     }
    0x0007c12a strd r2, r3, [r4, 0x18]                               |     __asm ("strd r2, r3, [r4, 0x18]");
    0x0007c12e str r4, [r2, 0x1c]                                    |     *((r2 + 0x1c)) = r4;
    0x0007c130 b 0x7c0dc                                             |     goto label_7;
                                                                     | label_13:
    0x0007c132 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0007c134 ldr r7, [r4, 4]                                       |     r7 = *((r4 + 4));
    0x0007c136 str r4, [r3]                                          |     *(r3) = r4;
    0x0007c138 ldr r3, [r7, 0x34]                                    |     r3 = *((r7 + 0x34));
    0x0007c13a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007c13c bne 0x7c100                                           |         goto label_8;
                                                                     |     }
                                                                     | label_77:
    0x0007c13e movw r1, 0xf830                                       |     
    0x0007c142 mov r0, r4                                            |     r0 = r4;
    0x0007c144 movt r1, 0xffff                                       |     r1 = 0xfffff830;
    0x0007c148 bl 0x30538                                            |     fcn_00030538 (r0, r1);
    0x0007c14a invalid                                               |     
                                                                     | label_76:
    0x0007c14e mov r0, r4                                            |     r0 = r4;
    0x0007c150 bl 0x22944                                            |     fcn_00022944 (r0);
    0x0007c154 b 0x7c0fc                                             |     goto label_9;
                                                                     | label_78:
    0x0007c156 ldr r5, [sp, 8]                                       |     r5 = var_8h;
    0x0007c158 b 0x7c160                                             |     
                                                                     |     while (r2 != 0) {
    0x0007c15a ldr r3, [r2, 4]                                       |         r3 = *((r2 + 4));
    0x0007c15c cmp r3, r7                                            |         
                                                                     |         if (r3 >= r7) {
    0x0007c15e bhs 0x7c194                                           |             goto label_79;
                                                                     |         }
    0x0007c160 mov r1, r2                                            |         r1 = r2;
    0x0007c162 ldr r2, [r2, 0x18]                                    |         r2 = *((r2 + 0x18));
    0x0007c164 cmp r2, 0                                             |         
    0x0007c166 bne 0x7c15a                                           |         
                                                                     |     }
    0x0007c168 str r5, [sp, 8]                                       |     var_8h = r5;
    0x0007c16a strd r2, r1, [r4, 0x18]                               |     __asm ("strd r2, r1, [r4, 0x18]");
                                                                     | label_12:
    0x0007c16e str r4, [r1, 0x18]                                    |     *((r1 + 0x18)) = r4;
    0x0007c170 b 0x7c0dc                                             |     goto label_7;
                                                                     | label_51:
    0x0007c172 ldr r3, [sp, 0x18]                                    |     r3 = s1;
                                                                     |     if (r3 != 0) {
    0x0007c174 cbz r3, 0x7c17c                                       |         
    0x0007c176 mov r0, r3                                            |         r0 = r3;
    0x0007c178 bl 0x26dbc                                            |         fcn_00026dbc (r0);
                                                                     |     }
                                                                     | label_14:
    0x0007c17c mov.w fp, 7                                           |     
    0x0007c180 b 0x7be26                                             |     goto label_5;
                                                                     | label_44:
    0x0007c182 ldr r2, [pc, 0x3bc]                                   |     
    0x0007c184 add r2, pc                                            |     r2 = 0xf86ca;
    0x0007c186 ldr.w r3, [r2, 0x520]                                 |     r3 = *(0xf8bea);
    0x0007c18a str r3, [sp, 8]                                       |     var_8h = r3;
    0x0007c18c cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007c18e bne.w 0x7bb8a                                         |         goto label_10;
                                                                     |     }
    0x0007c192 b 0x7bbbe                                             |     goto label_11;
                                                                     | label_79:
    0x0007c194 strd r2, r1, [r4, 0x18]                               |     __asm ("strd r2, r1, [r4, 0x18]");
    0x0007c198 str r5, [sp, 8]                                       |     var_8h = r5;
    0x0007c19a str r4, [r2, 0x1c]                                    |     *((r2 + 0x1c)) = r4;
    0x0007c19c b 0x7c16e                                             |     goto label_12;
                                                                     | label_61:
    0x0007c19e ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0007c1a0 ldr r3, [sp, 0xc8]                                    |     r3 = *(arg_c8h);
    0x0007c1a2 ldr r0, [r2]                                          |     r0 = *(r2);
    0x0007c1a4 strb r3, [r2, 0x10]                                   |     *((r2 + 0x10)) = r3;
    0x0007c1a6 ldr r3, [pc, 0x39c]                                   |     
    0x0007c1a8 ldr r1, [r0, 0x40]                                    |     r1 = *((r0 + 0x40));
    0x0007c1aa str.w r8, [r2, 4]                                     |     __asm ("str.w r8, [r2, 4]");
    0x0007c1ae add r3, pc                                            |     r3 = 0xf86f8;
    0x0007c1b0 str.w r2, [r0, 0xc4]                                  |     __asm ("str.w r2, [r0, 0xc4]");
    0x0007c1b4 str.w r3, [r0, 0xc0]                                  |     __asm ("str.w r3, [r0, 0xc0]");
    0x0007c1b8 ldr r3, [r1]                                          |     r3 = *(r1);
                                                                     |     if (r3 != 0) {
    0x0007c1ba cbz r3, 0x7c1cc                                       |         
    0x0007c1bc ldr r3, [r3, 0x28]                                    |         r3 = *((r3 + 0x28));
    0x0007c1be add.w r2, r0, 0xc0                                    |         r2 = r0 + 0xc0;
    0x0007c1c2 mov r0, r1                                            |         r0 = r1;
    0x0007c1c4 movs r1, 0xf                                          |         r1 = 0xf;
    0x0007c1c6 blx r3                                                |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0007c1c8 ldr r3, [sp, 8]                                       |         r3 = var_8h;
    0x0007c1ca ldr r0, [r3]                                          |         r0 = *(r3);
                                                                     |     }
    0x0007c1cc ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0007c1ce vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0007c1d2 add.w r3, r2, 8                                       |     r3 = r2 + 8;
    0x0007c1d6 str r2, [r4, 4]                                       |     *((r4 + 4)) = r2;
    0x0007c1d8 vst1.32 {d16}, [r3]                                   |     __asm ("vst1.32 {d16}, [r3]");
    0x0007c1dc ldrb r3, [r0, 0xe]                                    |     r3 = *((r0 + 0xe));
                                                                     |     if (r3 != 0) {
    0x0007c1de cbz r3, 0x7c1e8                                       |         
    0x0007c1e0 ldrh r3, [r2, 0x18]                                   |         r3 = *((r2 + 0x18));
    0x0007c1e2 orr r3, r3, 1                                         |         r3 |= 1;
    0x0007c1e6 strh r3, [r2, 0x18]                                   |         *((r2 + 0x18)) = r3;
                                                                     |     }
    0x0007c1e8 ldrb.w r3, [sp, 0x49]                                 |     r3 = var_49h;
    0x0007c1ec ldrb.w r2, [sp, 0x48]                                 |     r2 = var_48h;
    0x0007c1f0 lsls r3, r3, 0x10                                     |     r3 <<= 0x10;
    0x0007c1f2 orr.w r3, r3, r2, lsl 8                               |     r3 |= (r2 << 8);
    0x0007c1f6 ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0007c1f8 str r3, [r2, 0x24]                                    |     *((r2 + 0x24)) = r3;
    0x0007c1fa sub.w r2, r3, 0x200                                   |     r2 = r3 - 0x200;
    0x0007c1fe cmp.w r2, 0xfe00                                      |     
                                                                     |     if (r2 > 0xfe00) {
    0x0007c202 bhi.w 0x7c3be                                         |         goto label_80;
                                                                     |     }
    0x0007c206 subs r2, r3, 1                                        |     r2 = r3 - 1;
    0x0007c208 tst r2, r3                                            |     
                                                                     |     if ((r2 & r3) != 0) {
    0x0007c20a bne.w 0x7c3be                                         |         goto label_80;
                                                                     |     }
    0x0007c20e ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0007c210 ldrb.w r7, [sp, 0x4c]                                 |     r7 = var_4ch;
    0x0007c214 ldrh r3, [r2, 0x18]                                   |     r3 = *((r2 + 0x18));
    0x0007c216 mov sb, r7                                            |     sb = r7;
    0x0007c218 orr r3, r3, 2                                         |     r3 |= 2;
    0x0007c21c strh r3, [r2, 0x18]                                   |     *((r2 + 0x18)) = r3;
    0x0007c21e ldr r3, [sp, 0x6c]                                    |     r3 = var_6ch;
    0x0007c220 subs r3, 0                                            |     
    0x0007c222 it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x0007c224 movne r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0007c226 strb r3, [r2, 0x11]                                   |     *((r2 + 0x11)) = r3;
    0x0007c228 ldr r3, [sp, 0x78]                                    |     r3 = var_78h;
    0x0007c22a subs r3, 0                                            |     
    0x0007c22c it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x0007c22e movne r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0007c230 strb r3, [r2, 0x12]                                   |     *((r2 + 0x12)) = r3;
                                                                     | label_20:
    0x0007c232 ldr r5, [sp, 8]                                       |     r5 = var_8h;
    0x0007c234 mov r2, sb                                            |     r2 = sb;
    0x0007c236 add.w r1, r5, 0x24                                    |     r1 = r5 + 0x24;
    0x0007c23a bl 0x33fa0                                            |     r0 = fcn_00033fa0 (r0, r1, r2);
    0x0007c23e mov fp, r0                                            |     
    0x0007c240 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0007c242 bne.w 0x7be26                                         |         goto label_5;
                                                                     |     }
    0x0007c246 ldr r2, [r5, 0x24]                                    |     r2 = *((r5 + 0x24));
    0x0007c248 subs r2, r2, r7                                       |     r2 -= r7;
    0x0007c24a str r2, [r5, 0x28]                                    |     *((r5 + 0x28)) = r2;
    0x0007c24c movs r2, 1                                            |     r2 = 1;
    0x0007c24e str r2, [r5, 0x44]                                    |     *((r5 + 0x44)) = r2;
    0x0007c250 ldrb r2, [r4, 9]                                      |     r2 = *((r4 + 9));
    0x0007c252 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0007c254 beq.w 0x7c132                                         |         goto label_13;
                                                                     |     }
    0x0007c258 ldr r7, [pc, 0x2ec]                                   |     
    0x0007c25a add r7, pc                                            |     r7 = 0xf87a6;
    0x0007c25c ldrb r2, [r7, 4]                                      |     r2 = *((r7 + 4));
    0x0007c25e cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0007c260 beq.w 0x7c50c                                         |         goto label_81;
                                                                     |     }
    0x0007c264 ldr r2, [r7, 0x48]                                    |     r2 = *((r7 + 0x48));
    0x0007c266 movs r0, 2                                            |     r0 = 2;
    0x0007c268 blx r2                                                |     uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
    0x0007c26a ldrb r2, [r7, 4]                                      |     r2 = *((r7 + 4));
    0x0007c26c mov sb, r0                                            |     sb = r0;
                                                                     |     if (r2 == 0) {
    0x0007c26e cbz r2, 0x7c280                                       |         goto label_82;
                                                                     |     }
    0x0007c270 ldr r2, [r7, 0x48]                                    |     r2 = *((r7 + 0x48));
    0x0007c272 mov r0, fp                                            |     r0 = fp;
    0x0007c274 blx r2                                                |     uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
    0x0007c276 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0007c278 str r0, [r3, 0x3c]                                    |     *((r3 + 0x3c)) = r0;
    0x0007c27a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007c27c beq.w 0x7c17c                                         |         goto label_14;
                                                                     |     }
                                                                     | label_82:
    0x0007c280 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0007c284 beq.w 0x7c51e                                         |         goto label_83;
                                                                     |     }
    0x0007c286 strh r3, [r1, 0xa]                                    |     *((r1 + 0xa)) = r3;
    0x0007c288 ldr r7, [pc, 0x2c0]                                   |     
    0x0007c28a mov r0, sb                                            |     r0 = sb;
    0x0007c28c add r7, pc                                            |     r7 = 0xf87dc;
    0x0007c28e ldr r3, [r7, 0x50]                                    |     r3 = *(0xf882c);
    0x0007c290 blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0007c292 ldr r3, [pc, 0x2bc]                                   |     
    0x0007c294 mov r0, sb                                            |     r0 = sb;
    0x0007c296 ldr r5, [sp, 8]                                       |     r5 = var_8h;
    0x0007c298 ldr r2, [r7, 0x58]                                    |     r2 = *(0xf8834);
    0x0007c29a add r3, pc                                            |     r3 = 0xf87f0;
    0x0007c29c ldr.w r1, [r3, 0x520]                                 |     r1 = *(0xf8d10);
    0x0007c2a0 str.w r5, [r3, 0x520]                                 |     __asm ("str.w r5, [r3, 0x520]");
    0x0007c2a4 str r1, [r5, 0x48]                                    |     *((r5 + 0x48)) = r1;
    0x0007c2a6 blx r2                                                |     uint32_t (*r2)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0007c2a8 ldrb r3, [r4, 9]                                      |     r3 = *((r4 + 9));
    0x0007c2aa b 0x7c0b4                                             |     goto label_15;
                                                                     | label_54:
    0x0007c2ac ldr r0, [sp, 0xcc]                                    |     r0 = *(arg_cch);
    0x0007c2ae movw r3, 0x7f7f                                       |     
    0x0007c2b2 movt r3, 0x108                                        |     r3 = 0x1087f7f;
    0x0007c2b6 ldr.w r2, [sl, 0x40]                                  |     r2 = *((sl + 0x40));
    0x0007c2ba ldr.w r1, [sl, 0xb8]                                  |     r1 = *((sl + 0xb8));
    0x0007c2be ands r3, r0                                           |     r3 &= r0;
    0x0007c2c0 movs r0, 0                                            |     r0 = 0;
    0x0007c2c2 str r0, [sp, 0x34]                                    |     x = r0;
    0x0007c2c4 add r0, sp, 0x34                                      |     r0 += x;
    0x0007c2c6 str r0, [sp]                                          |     *(sp) = r0;
    0x0007c2c8 mov r0, sb                                            |     r0 = sb;
    0x0007c2ca ldr.w fp, [sb, 0x18]                                  |     fp = *((sb + 0x18));
    0x0007c2ce blx fp                                                |     fp (r0, r1, r2, r3);
    0x0007c2d0 ldr r2, [sp, 0x34]                                    |     r2 = x;
    0x0007c2d2 mov fp, r0                                            |     
    0x0007c2d4 ubfx r1, r2, 7, 1                                     |     r1 = (r2 >> 7) & ((1 << 1) - 1);
    0x0007c2d8 strb.w r1, [sl, 0x10]                                 |     *((sl + 0x10)) = r1;
    0x0007c2dc cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0007c2de bne.w 0x7c042                                         |         goto label_16;
                                                                     |     }
    0x0007c2e2 ldr.w r0, [sl, 0x40]                                  |     r0 = *((sl + 0x40));
    0x0007c2e6 and r5, r2, 1                                         |     r5 = r2 & 1;
    0x0007c2ea str r1, [sp, 0x18]                                    |     s1 = r1;
    0x0007c2ec ldr r2, [r0]                                          |     r2 = *(r0);
    0x0007c2ee cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0007c2f0 beq.w 0x7c4b4                                         |         goto label_84;
                                                                     |     }
    0x0007c2f4 ldr r3, [r2, 0x30]                                    |     r3 = *((r2 + 0x30));
    0x0007c2f6 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t) (r3);
    0x0007c2f8 mov sb, r0                                            |     sb = r0;
    0x0007c2fa cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0007c2fc beq.w 0x7c4e0                                         |         goto label_85;
                                                                     |     }
                                                                     | label_26:
    0x0007c300 ldr.w fp, [sl, 0xb8]                                  |     fp = *((sl + 0xb8));
    0x0007c304 movs r2, 0                                            |     r2 = 0;
    0x0007c306 ldr r1, [pc, 0x24c]                                   |     
    0x0007c308 mov r0, fp                                            |     r0 = fp;
    0x0007c30a add r1, pc                                            |     r1 = 0xf8864;
    0x0007c30c bl 0x2c518                                            |     fcn_0002c518 (r0, r1, r2);
    0x0007c310 tst.w sb, 0x2000                                      |     
    0x0007c314 strb.w r0, [sl, 0xd]                                  |     *((sl + 0xd)) = r0;
    0x0007c316 movs r5, r1                                           |     r5 = r1;
                                                                     |     if (r5 == r1) {
    0x0007c318 beq.w 0x7c4c8                                         |         goto label_86;
                                                                     |     }
                                                                     | label_25:
    0x0007c31c movs r3, 1                                            |     r3 = 1;
    0x0007c31e mov r5, r3                                            |     r5 = r3;
    0x0007c320 b 0x7bcbe                                             |     goto label_17;
                                                                     | label_43:
    0x0007c322 ldr r3, [pc, 0x234]                                   |     
    0x0007c324 add r3, pc                                            |     
    0x0007c326 ldr.w r3, [r3, 0x520]                                 |     r3 = *(0xf8da2);
    0x0007c32a str r3, [sp, 8]                                       |     var_8h = r3;
    0x0007c32c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007c32e beq.w 0x7bbbe                                         |         goto label_11;
                                                                     |     }
    0x0007c332 ldr r5, [sp, 8]                                       |     r5 = var_8h;
    0x0007c334 mov.w fp, 0                                           |     
    0x0007c338 str r7, [sp, 8]                                       |     var_8h = r7;
    0x0007c33a b 0x7bb8e                                             |     goto label_18;
                                                                     | label_52:
    0x0007c33c ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0007c33e mov r0, r3                                            |     r0 = r3;
    0x0007c340 ldr r1, [sp, 0x18]                                    |     r1 = s1;
    0x0007c342 mov r2, r5                                            |     r2 = r5;
    0x0007c344 blx 0x65ac                                            |     EVP_CIPHER_CTX_free ();
    0x0007c348 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0007c34a mov r2, r5                                            |     r2 = r5;
    0x0007c34c adds r2, 1                                            |     r2++;
    0x0007c34e add r0, r2                                            |     r0 += r2;
    0x0007c350 add.w fp, r0, 1                                       |     
                                                                     |     if (r1 != 0) {
    0x0007c354 cbz r1, 0x7c360                                       |         
    0x0007c356 ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0007c358 add.w fp, r0, r2                                      |         
    0x0007c35c blx 0x65ac                                            |         EVP_CIPHER_CTX_free ();
                                                                     |     }
    0x0007c360 ldrd r2, r5, [sp, 0x14]                               |     __asm ("ldrd r2, r5, [s1]");
    0x0007c364 mov r0, fp                                            |     r0 = fp;
    0x0007c366 str.w fp, [sl, 0xbc]                                  |     __asm ("str.w fp, [sl, 0xbc]");
    0x0007c36a mov r1, r5                                            |     r1 = r5;
    0x0007c36c blx 0x65ac                                            |     EVP_CIPHER_CTX_free ();
    0x0007c370 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0007c372 ldr.w ip, [pc, 0x1e8]                                 |     
    0x0007c376 add.w lr, fp, r3                                      |     lr = fp + r3;
    0x0007c37a mov r2, r3                                            |     r2 = r3;
    0x0007c37c add.w r0, lr, 9                                       |     r0 = lr + 9;
    0x0007c380 add ip, pc                                            |     ip = 0xf88e2;
    0x0007c382 str r0, [sp, 0x18]                                    |     s1 = r0;
    0x0007c384 ldm.w ip!, {r0, r1}                                   |     r0 = *(ip!);
                                                                     |     r1 = *((ip! + 4));
    0x0007c388 str.w r0, [fp, r3]                                    |     __asm ("str.w r0, [fp, r3]");
    0x0007c38c ldr r0, [sp, 0x18]                                    |     r0 = s1;
    0x0007c38e str.w r1, [lr, 4]                                     |     __asm ("str.w r1, [lr, 4]");
    0x0007c392 mov r1, r5                                            |     r1 = r5;
    0x0007c394 str.w r0, [sl, 0xfc]                                  |     __asm ("str.w r0, [sl, 0xfc]");
    0x0007c398 blx 0x65ac                                            |     EVP_CIPHER_CTX_free ();
    0x0007c39c ldr r2, [pc, 0x1c0]                                   |     
    0x0007c39e mov r1, r0                                            |     r1 = r0;
    0x0007c3a0 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0007c3a2 add r2, pc                                            |     r2 = 0xf8906;
    0x0007c3a4 ldr r0, [r2]                                          |     r0 = *(0xf8906);
    0x0007c3a6 str r0, [r1, r3]                                      |     *((r1 + r3)) = r0;
    0x0007c3a8 mov r0, r5                                            |     r0 = r5;
    0x0007c3aa bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c3ae b 0x7bc9a                                             |     goto label_19;
                                                                     | label_53:
    0x0007c3b0 ldr r3, [sp, 0xcc]                                    |     r3 = *(arg_cch);
    0x0007c3b2 and r3, r3, 1                                         |     r3 &= 1;
    0x0007c3b6 mov r5, r3                                            |     r5 = r3;
    0x0007c3b8 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007c3ba str r3, [sp, 0x18]                                    |     s1 = r3;
    0x0007c3bc b 0x7bcbe                                             |     goto label_17;
                                                                     | label_80:
    0x0007c3be ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0007c3c0 movs r2, 0                                            |     r2 = 0;
    0x0007c3c2 ldr r1, [sp, 8]                                       |     r1 = var_8h;
    0x0007c3c4 eor r3, r3, 1                                         |     r3 ^= 1;
    0x0007c3c8 cmp r7, 0                                             |     
    0x0007c3ca ite eq                                                |     
                                                                     |     if (r7 != 0) {
    0x0007c3cc moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r7 == 0) {
    0x0007c3ce andne r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0007c3d2 str r2, [r1, 0x24]                                    |     *((r1 + 0x24)) = r2;
                                                                     |     if (r3 != 0) {
    0x0007c3d4 cbz r3, 0x7c3dc                                       |         
    0x0007c3d6 ldr r3, [sp, 8]                                       |         r3 = var_8h;
    0x0007c3d8 strh.w r2, [r3, 0x11]                                 |         *((r3 + 0x11)) = r2;
                                                                     |     }
    0x0007c3dc movs r7, 0                                            |     r7 = 0;
    0x0007c3de b 0x7c232                                             |     goto label_20;
                                                                     | label_72:
    0x0007c3e0 cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0007c3e4 beq 0x7c3f0                                           |         
    0x0007c3e6 ldr r2, [pc, 0x17c]                                   |         
    0x0007c3e8 mov r0, fp                                            |         r0 = fp;
    0x0007c3ea add r2, pc                                            |         r2 = 0xf8954;
    0x0007c3ec ldr r3, [r2, 0x58]                                    |         r3 = *(0xf89ac);
    0x0007c3ee blx r3                                                |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
                                                                     |     }
                                                                     |     if (r6 != 0) {
    0x0007c3f0 cbz r6, 0x7c3fc                                       |         
    0x0007c3f2 ldr r3, [pc, 0x174]                                   |         
    0x0007c3f4 mov r0, r6                                            |         r0 = r6;
    0x0007c3f6 add r3, pc                                            |         
    0x0007c3f8 ldr r3, [r3, 0x58]                                    |         r3 = *(0xf89bc);
    0x0007c3fa blx r3                                                |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                     |     }
    0x0007c3fc mov r0, sl                                            |     r0 = sl;
    0x0007c3fe mov.w fp, 0x13                                        |     
    0x0007c402 bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c406 mov r0, r4                                            |     r0 = r4;
    0x0007c408 bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c40c b 0x7be8e                                             |     goto label_21;
                                                                     | label_42:
    0x0007c40e mov r0, sl                                            |     r0 = sl;
    0x0007c410 bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c414 mov r0, r4                                            |     r0 = r4;
    0x0007c416 bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c41a b 0x7be8e                                             |     goto label_21;
                                                                     | label_50:
    0x0007c41c mov r0, r7                                            |     r0 = r7;
    0x0007c41e blx 0x65dc                                            |     r0 = strcmp (r0, r1);
    0x0007c422 add.w sl, r0, 1                                       |     sl = r0 + 1;
    0x0007c426 movs r1, 0                                            |     r1 = 0;
    0x0007c428 mov r0, sl                                            |     r0 = sl;
    0x0007c42a bl 0x28c3c                                            |     r0 = fcn_00028c3c (r0);
    0x0007c42e mov r5, r0                                            |     r5 = r0;
    0x0007c430 str r0, [sp, 0x18]                                    |     s1 = r0;
    0x0007c432 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007c434 beq.w 0x7c17c                                         |         goto label_14;
                                                                     |     }
    0x0007c438 mov r2, sl                                            |     r2 = sl;
    0x0007c43a mov r1, r7                                            |     r1 = r7;
    0x0007c43c blx 0x65ac                                            |     EVP_CIPHER_CTX_free ();
    0x0007c440 mov r0, r5                                            |     r0 = r5;
    0x0007c442 movs r5, 0                                            |     r5 = 0;
    0x0007c444 blx 0x65dc                                            |     r0 = strcmp (r0, r1);
    0x0007c448 bic r1, r0, 0xc0000000                                |     r1 = BIT_MASK (r0, 0xc0000000);
    0x0007c44c movs r0, 1                                            |     r0 = 1;
    0x0007c44e add.w r2, r1, r1, lsl 1                               |     r2 = r1 + (r1 << 1);
    0x0007c450 lsls r1, r0, 9                                        |     r1 = r0 << 9;
    0x0007c452 ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0007c456 mov fp, r1                                            |     
    0x0007c458 str r1, [sp, 0x14]                                    |     var_14h = r1;
    0x0007c45a add.w r2, r2, 0x14a                                   |     r2 += 0x14a;
    0x0007c45e str r0, [sp, 0x1c]                                    |     var_1ch = r0;
    0x0007c460 str r5, [sp, 0x24]                                    |     var_24h = r5;
    0x0007c462 strd r0, r5, [sp, 0x28]                               |     __asm ("strd r0, r5, [var_2ch]");
    0x0007c466 b.w 0x7bc2c                                           |     goto label_4;
                                                                     | label_70:
    0x0007c46a ldr r3, [pc, 0x100]                                   |     
    0x0007c46c movs r0, 0xe                                          |     r0 = 0xe;
    0x0007c46e ldr r2, [pc, 0x100]                                   |     
    0x0007c470 ldr r1, [pc, 0x100]                                   |     
    0x0007c472 add r3, pc                                            |     r3 = 0xf89e4;
    0x0007c474 adds r3, 0x14                                         |     r3 += 0x14;
    0x0007c476 add r2, pc                                            |     r2 = 0xf89ec;
    0x0007c478 str r3, [sp]                                          |     *(sp) = r3;
    0x0007c47a movs r3, 0xe                                          |     r3 = 0xe;
    0x0007c47c str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0007c47e add r1, pc                                            |     r1 = 0xf89f6;
    0x0007c480 movw r3, 0xe615                                       |     r3 = 0xe615;
    0x0007c484 bl 0x50814                                            |     fcn_00050814 (r0, r1, r2);
                                                                     | label_69:
    0x0007c488 ldr r0, [sp, 0x18]                                    |     r0 = s1;
    0x0007c48a bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c48e ldr.w fp, [sp, 0x28]                                  |     fp = var_28h;
    0x0007c492 b 0x7be26                                             |     goto label_5;
                                                                     | label_73:
    0x0007c494 mov r0, sl                                            |     r0 = sl;
    0x0007c496 bl 0x26dbc                                            |     fcn_00026dbc (r0);
    0x0007c49a ldrb r3, [r4, 9]                                      |     r3 = *((r4 + 9));
    0x0007c49c b 0x7c0b4                                             |     goto label_15;
                                                                     | label_57:
    0x0007c49e ldr r3, [pc, 0xd8]                                    |     
    0x0007c4a0 add r3, pc                                            |     r3 = 0xf8a1e;
    0x0007c4a2 b 0x7bdc2                                             |     goto label_22;
                                                                     | label_56:
    0x0007c4a4 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0007c4a6 ldr r2, [sp, 0x18]                                    |     r2 = s1;
    0x0007c4a8 orrs r3, r2                                           |     r3 |= r2;
    0x0007c4aa itt ne                                                |     
                                                                     |     if (r3 == r2) {
    0x0007c4ac movne r3, 4                                           |         r3 = 4;
                                                                     |     }
                                                                     |     if (r3 == r2) {
    0x0007c4ae strbne r3, [sl, 5]                                    |         *((sl + 5)) = r3;
                                                                     |     }
    0x0007c4b2 b 0x7bd98                                             |     goto label_23;
                                                                     |     if (r5 == 0) {
                                                                     | label_84:
    0x0007c4b4 cbz r5, 0x7c4de                                       |         goto label_87;
                                                                     |     }
    0x0007c4b6 ldr.w fp, [sl, 0xb8]                                  |     fp = *((sl + 0xb8));
    0x0007c4ba ldr r1, [pc, 0xc0]                                    |     
    0x0007c4bc mov r0, fp                                            |     r0 = fp;
    0x0007c4be add r1, pc                                            |     r1 = 0xf8a40;
    0x0007c4c0 bl 0x2c518                                            |     fcn_0002c518 (r0, r1, r2);
    0x0007c4c4 strb.w r0, [sl, 0xd]                                  |     *((sl + 0xd)) = r0;
    0x0007c4c6 movs r5, r1                                           |     r5 = r1;
                                                                     | label_86:
    0x0007c4c8 ldr r1, [pc, 0xb4]                                    |     
    0x0007c4ca mov r0, fp                                            |     r0 = fp;
    0x0007c4cc movs r2, 0                                            |     r2 = 0;
    0x0007c4ce add r1, pc                                            |     r1 = 0xf8a52;
    0x0007c4d0 bl 0x2c518                                            |     fcn_0002c518 (r0, r1, r2);
    0x0007c4d4 str r0, [sp, 0x14]                                    |     var_14h = r0;
    0x0007c4d6 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007c4d8 beq.w 0x7bcce                                         |         goto label_24;
                                                                     |     }
    0x0007c4dc b 0x7c31c                                             |     goto label_25;
                                                                     | label_87:
    0x0007c4de mov sb, r5                                            |     sb = r5;
                                                                     | label_85:
    0x0007c4e0 mov r0, sl                                            |     r0 = sl;
    0x0007c4e2 bl 0x2b554                                            |     fcn_0002b554 (r0);
    0x0007c4e6 ldr.w r3, [sl, 0x9c]                                  |     r3 = *((sl + 0x9c));
    0x0007c4ea cmp.w r3, 0x1000                                      |     
                                                                     |     if (r3 < 0x1000) {
    0x0007c4ee bls.w 0x7c300                                         |         goto label_26;
                                                                     |     }
    0x0007c4f2 cmp.w r3, 0x2000                                      |     
    0x0007c4f6 it hi                                                 |     
                                                                     |     if (r3 <= 0x2000) {
    0x0007c4f8 movhi r3, 0x2000                                      |         r3 = 0x2000;
                                                                     |     }
    0x0007c4fc str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x0007c4fe b 0x7c300                                             |     goto label_26;
                                                                     | label_58:
    0x0007c500 ldr r3, [pc, 0x80]                                    |     
    0x0007c502 add r3, pc                                            |     r3 = 0xf8a8a;
    0x0007c504 b 0x7bdc2                                             |     goto label_22;
                                                                     | label_68:
    0x0007c506 ldr.w sl, [sp, 0x2c]                                  |     sl = var_2ch;
    0x0007c50a b 0x7bf9e                                             |     goto label_27;
                                                                     | label_81:
    0x0007c50c ldr r3, [pc, 0x78]                                    |     
    0x0007c50e ldr r1, [sp, 8]                                       |     r1 = var_8h;
    0x0007c510 add r3, pc                                            |     r3 = 0xf8a9c;
    0x0007c512 ldr.w r2, [r3, 0x520]                                 |     r2 = *(0xf8fbc);
    0x0007c516 str.w r1, [r3, 0x520]                                 |     __asm ("str.w r1, [r3, 0x520]");
    0x0007c51a str r2, [r1, 0x48]                                    |     *((r1 + 0x48)) = r2;
    0x0007c51c b 0x7c0b8                                             |     goto label_28;
                                                                     | label_83:
    0x0007c51e ldr r2, [pc, 0x6c]                                    |     
    0x0007c520 ldr r0, [sp, 8]                                       |     r0 = var_8h;
    0x0007c522 ldrb r3, [r4, 9]                                      |     r3 = *((r4 + 9));
    0x0007c524 add r2, pc                                            |     r2 = 0xf8ab6;
    0x0007c526 ldr.w r1, [r2, 0x520]                                 |     r1 = *(0xf8fd6);
    0x0007c52a str.w r0, [r2, 0x520]                                 |     __asm ("str.w r0, [r2, 0x520]");
    0x0007c52e str r1, [r0, 0x48]                                    |     *((r0 + 0x48)) = r1;
    0x0007c530 b 0x7c0b4                                             |     goto label_15;
                                                                     | label_59:
    0x0007c532 ldr r3, [pc, 0x5c]                                    |     
    0x0007c534 add r3, pc                                            |     r3 = 0xf8aca;
    0x0007c536 b 0x7bdc2                                             |     goto label_22;
                                                                     | label_64:
    0x0007c538 blx 0x6430                                            |     fcn_00006430 ();
    0x0007c53c b 0x7c91c                                             |     goto label_88;
                                                                     | label_29:
    0x0007c900 ldr.w r2, [r8, 0x10]                                  |     r2 = *((r8 + 0x10));
    0x0007c904 lsls r3, r5, 4                                        |     r3 = r5 << 4;
    0x0007c906 adds r1, r2, r3                                       |     r1 = r2 + r3;
    0x0007c908 ldr r1, [r1, 4]                                       |     r1 = *((r1 + 4));
                                                                     |     if (r1 == 0) {
    0x0007c90a cbz r1, 0x7c936                                       |         goto label_31;
                                                                     |     }
                                                                     |     if (r7 == 0) {
    0x0007c90c cbz r7, 0x7c944                                       |         goto label_89;
                                                                     |     }
    0x0007c90e ldr r3, [r2, r3]                                      |     r3 = *((r2 + r3));
    0x0007c910 add.w lr, r7, -1                                      |     lr = r7 + -1;
    0x0007c914 add.w ip, r3, -1                                      |     
                                                                     |     do {
                                                                     | label_30:
    0x0007c918 ldrb r3, [lr, 1]!                                     |         r3 = *((lr += 1));
                                                                     | label_88:
    0x0007c91c ldrb r2, [ip, 1]!                                     |         r2 = *((ip += 1));
    0x0007c920 adds r0, r4, r3                                       |         r0 = r4 + r3;
    0x0007c922 cmp r3, r2                                            |         
    0x0007c924 add.w r1, r4, r2                                      |         r1 = r4 + r2;
                                                                     |         if (r3 == r2) {
    0x0007c928 beq 0x7c940                                           |             goto label_90;
                                                                     |         }
    0x0007c92a ldrb.w r2, [r0, 0x140]                                |         r2 = *((r0 + 0x140));
    0x0007c92e ldrb.w r3, [r1, 0x140]                                |         r3 = *((r1 + 0x140));
    0x0007c932 cmp r2, r3                                            |         
    0x0007c934 beq 0x7c918                                           |         
                                                                     |     } while (r2 == r3);
                                                                     | label_31:
    0x0007c936 adds r5, 1                                            |     r5++;
    0x0007c938 cmp sl, r5                                            |     
                                                                     |     if (sl > r5) {
    0x0007c93a bgt 0x7c900                                           |         goto label_29;
                                                                     |     }
                                                                     | label_32:
    0x0007c93c pop.w {r4, r5, r6, r7, r8, sb, sl, pc}                |     
                                                                     | label_90:
    0x0007c940 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007c942 bne 0x7c918                                           |         goto label_30;
                                                                     |     }
                                                                     | label_89:
    0x0007c944 ldr r0, [r6, 0x74]                                    |     r0 = *((r6 + 0x74));
    0x0007c946 lsl.w r2, sb, r5                                      |     r2 = sb << r5;
    0x0007c94a cmp r0, 0                                             |     
    0x0007c94c it eq                                                 |     
                                                                     |     if (r0 != 0) {
    0x0007c94e moveq r0, r6                                          |         r0 = r6;
                                                                     |     }
    0x0007c950 ldr r3, [r0, 0x54]                                    |     r3 = *((r0 + 0x54));
    0x0007c952 tst r3, r2                                            |     
                                                                     |     if ((r3 & r2) != 0) {
    0x0007c954 bne 0x7c936                                           |         goto label_31;
                                                                     |     }
    0x0007c956 cmp r5, 1                                             |     
    0x0007c958 orr.w r3, r3, r2                                      |     r3 |= r2;
    0x0007c95a lsls r2, r0, 0xc                                      |     r2 = r0 << 0xc;
    0x0007c95c str r3, [r0, 0x54]                                    |     *((r0 + 0x54)) = r3;
                                                                     |     if (r2 != r0) {
    0x0007c95e bne 0x7c936                                           |         goto label_31;
                                                                     |     }
    0x0007c960 bl 0x7c594                                            |     fcn_0007c594 (r0);
    0x0007c964 ldr.w sl, [r8, 0x14]                                  |     sl = *((r8 + 0x14));
    0x0007c968 adds r5, 1                                            |     r5++;
    0x0007c96a cmp sl, r5                                            |     
                                                                     |     if (sl > r5) {
    0x0007c96c bgt 0x7c900                                           |         goto label_29;
                                                                     |     }
    0x0007c96e b 0x7c93c                                             |     goto label_32;
                                                                     | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/sqlcipher @ 0xb4430 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.000b4430 ()                              | void fcn_000b4430 (int16_t arg1) {
                                                         |     r0 = arg1;
    0x000b4430 push.w {r4, r5, r6, r7, r8, lr}           |     
    0x000b4434 mov r5, r0                                |     r5 = r0;
    0x000b4436 ldrb.w ip, [r0, 5]                        |     ip = *((r0 + 5));
    0x000b443a rsb.w r4, ip, 1                           |     r4 = 1 - ip;
    0x000b443e add.w r4, r0, r4, lsl 2                   |     r4 = r0 + (r4 << 2);
    0x000b4442 ldr r1, [r4, 0x40]                        |     r1 = *((r4 + 0x40));
                                                         |     if (r1 != 0) {
    0x000b4444 cbz r1, 0xb445c                           |         
    0x000b4446 ldr r3, [r1, 0x10]                        |         r3 = *((r1 + 0x10));
    0x000b4448 ldr r0, [r0]                              |         r0 = *(r0);
    0x000b444a subs r3, 1                                |         r3--;
    0x000b444c str r3, [r1, 0x10]                        |         *((r1 + 0x10)) = r3;
                                                         |         if (r3 == 0) {
    0x000b444e cbnz r3, 0xb4458                          |             
    0x000b4450 bl 0xb4180                                |             fcn_000b4180 (r0, r1);
    0x000b4454 ldrb.w ip, [r5, 5]                        |             ip = *((r5 + 5));
                                                         |         }
    0x000b4458 movs r3, 0                                |         r3 = 0;
    0x000b445a str r3, [r4, 0x40]                        |         *((r4 + 0x40)) = r3;
                                                         |     }
    0x000b445c cmp.w ip, 0                               |     
                                                         |     if (ip == 0) {
    0x000b4460 beq 0xb4478                               |         goto label_5;
                                                         |     }
    0x000b4462 ldrb.w r3, [r5, 0x38]                     |     r3 = *((r5 + 0x38));
    0x000b4466 movs r1, 0                                |     r1 = 0;
    0x000b4468 add.w r3, r5, r3, lsl 2                   |     r3 = r5 + (r3 << 2);
    0x000b446c ldr r2, [r3, 0x54]                        |     r2 = *((r3 + 0x54));
    0x000b446e subs r2, 1                                |     r2--;
    0x000b4470 str r2, [r3, 0x54]                        |     *((r3 + 0x54)) = r2;
    0x000b4472 strb r1, [r5, 5]                          |     *((r5 + 5)) = r1;
                                                         |     do {
                                                         | label_0:
    0x000b4474 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_5:
    0x000b4478 ldr.w r8, [r5, 0x18]                      |         r8 = *((r5 + 0x18));
    0x000b447c cmp.w r8, 0                               |         
    0x000b4480 beq 0xb4474                               |         
                                                         |     } while (r8 == 0);
    0x000b4482 ldr r7, [r5, 0x20]                        |     r7 = *((r5 + 0x20));
    0x000b4484 add.w r6, r8, -1                          |     r6 = r8 + -1;
    0x000b4488 add.w r4, r6, r6, lsl 1                   |     r4 = r6 + (r6 << 1);
    0x000b448c cmp r6, 3                                 |     
    0x000b448e ldrb r3, [r7, 0x10]                       |     r3 = *((r7 + 0x10));
    0x000b4490 mov lr, r7                                |     lr = r7;
    0x000b4492 add.w r4, r7, r4, lsl 3                   |     r4 = r7 + (r4 << 3);
    0x000b4496 add.w r3, r5, r3, lsl 2                   |     r3 = r5 + (r3 << 2);
    0x000b449a ldr r2, [r3, 0x54]                        |     r2 = *((r3 + 0x54));
    0x000b449c add.w r2, r2, -1                          |     r2 += -1;
    0x000b44a0 str r2, [r3, 0x54]                        |     *((r3 + 0x54)) = r2;
    0x000b44a2 ldm r4!, {r0, r1, r2, r3}                 |     r0 = *(r4!);
                                                         |     r1 = *((r4! + 4));
                                                         |     r2 = *((r4! + 8));
                                                         |     r3 = *((r4! + 12));
    0x000b44a4 str r6, [r5, 0x18]                        |     *((r5 + 0x18)) = r6;
    0x000b44a6 stm.w lr!, {r0, r1, r2, r3}               |     *(lr!) = r0;
                                                         |     *((lr! + 4)) = r1;
                                                         |     *((lr! + 8)) = r2;
                                                         |     *((lr! + 12)) = r3;
    0x000b44aa ldm.w r4, {r0, r1}                        |     r0 = *(r4);
                                                         |     r1 = *((r4 + 4));
    0x000b44ae stm.w lr, {r0, r1}                        |     *(lr) = r0;
                                                         |     *((lr + 4)) = r1;
                                                         |     if (r6 <= 3) {
    0x000b44b2 ble 0xb4558                               |         goto label_6;
                                                         |     }
                                                         | label_4:
    0x000b44b4 movs r1, 0                                |     r1 = 0;
    0x000b44b6 movs r4, 1                                |     r4 = 1;
    0x000b44b8 mov r3, r1                                |     r3 = r1;
    0x000b44ba b 0xb44fe                                 |     goto label_7;
                                                         |     if (r4 >= 1) {
                                                         | label_2:
    0x000b44bc bmi 0xb44ca                               |         
    0x000b44be ldrb.w r0, [ip, 0x10]                     |         r0 = *((ip + 0x10));
    0x000b44c2 ldrb.w r2, [lr, 0x10]                     |         r2 = *((lr + 0x10));
    0x000b44c6 cmp r0, r2                                |         
                                                         |         if (r0 <= r2) {
    0x000b44c8 blo 0xb452c                               |             goto label_8;
                                                         |         }
                                                         |     }
                                                         | label_1:
    0x000b44ca add r3, r1                                |     r3 += r1;
    0x000b44cc add.w r3, r7, r3, lsl 3                   |     r3 = r7 + (r3 << 3);
    0x000b44d0 vldr d17, [r3]                            |     __asm ("vldr d17, [r3]");
    0x000b44d4 vcmpe.f64 d16, d17                        |     __asm ("vcmpe.f64 d16, d17");
    0x000b44d8 vmrs apsr_nzcv, fpscr                     |     __asm ("vmrs apsr_nzcv, fpscr");
                                                         |     if (r0 < r2) {
    0x000b44dc bmi 0xb44ea                               |         goto label_9;
                                                         |     }
                                                         |     if (r0 > r2) {
    0x000b44de bgt 0xb4474                               |         goto label_0;
                                                         |     }
    0x000b44e0 ldrb.w r2, [lr, 0x10]                     |     r2 = *((lr + 0x10));
    0x000b44e4 ldrb r3, [r3, 0x10]                       |     r3 = *((r3 + 0x10));
    0x000b44e6 cmp r2, r3                                |     
                                                         |     if (r2 >= r3) {
    0x000b44e8 bhs 0xb4474                               |         goto label_0;
                                                         |     }
                                                         | label_9:
    0x000b44ea mov r2, r4                                |     r2 = r4;
    0x000b44ec mov r0, r5                                |     r0 = r5;
    0x000b44ee bl 0xb42cc                                |     fcn_000b42cc (r0, r1, r2);
    0x000b44f2 mov r1, r4                                |     r1 = r4;
                                                         | label_3:
    0x000b44f4 lsls r3, r1, 1                            |     r3 = r1 << 1;
    0x000b44f6 adds r4, r3, 1                            |     r4 = r3 + 1;
    0x000b44f8 cmp r6, r4                                |     
                                                         |     if (r6 <= r4) {
    0x000b44fa ble 0xb4474                               |         goto label_0;
                                                         |     }
    0x000b44fc ldr r7, [r5, 0x20]                        |     r7 = *((r5 + 0x20));
                                                         | label_7:
    0x000b44fe add.w ip, r1, 1                           |     
    0x000b4502 add.w lr, r4, r4, lsl 1                   |     lr = r4 + (r4 << 1);
    0x000b4506 lsl.w r8, ip, 1                           |     r8 = ip << 1;
    0x000b450a add.w lr, r7, lr, lsl 3                   |     lr = r7 + (lr << 3);
    0x000b450e cmp r6, r8                                |     
    0x000b4510 vldr d16, [lr]                            |     __asm ("vldr d16, [lr]");
                                                         |     if (r6 <= r8) {
    0x000b4514 ble 0xb44ca                               |         goto label_1;
                                                         |     }
    0x000b4516 add.w ip, r8, ip, lsl 2                   |     
    0x000b451a add.w ip, r7, ip, lsl 3                   |     
    0x000b451e vldr d17, [ip]                            |     __asm ("vldr d17, [ip]");
    0x000b4522 vcmpe.f64 d16, d17                        |     __asm ("vcmpe.f64 d16, d17");
    0x000b4526 vmrs apsr_nzcv, fpscr                     |     __asm ("vmrs apsr_nzcv, fpscr");
                                                         |     if (r6 <= r8) {
    0x000b452a ble 0xb44bc                               |         goto label_2;
                                                         |     }
                                                         | label_8:
    0x000b452c add r3, r1                                |     r3 += r1;
    0x000b452e add.w r3, r7, r3, lsl 3                   |     r3 = r7 + (r3 << 3);
    0x000b4532 vldr d16, [r3]                            |     __asm ("vldr d16, [r3]");
    0x000b4536 vcmpe.f64 d17, d16                        |     __asm ("vcmpe.f64 d17, d16");
    0x000b453a vmrs apsr_nzcv, fpscr                     |     __asm ("vmrs apsr_nzcv, fpscr");
                                                         |     if (r6 < r8) {
    0x000b453e bmi 0xb454c                               |         goto label_10;
                                                         |     }
                                                         |     if (r6 > r8) {
    0x000b4540 bgt 0xb4474                               |         goto label_0;
                                                         |     }
    0x000b4542 ldrb.w r2, [ip, 0x10]                     |     r2 = *((ip + 0x10));
    0x000b4546 ldrb r3, [r3, 0x10]                       |     r3 = *((r3 + 0x10));
    0x000b4548 cmp r2, r3                                |     
                                                         |     if (r2 >= r3) {
    0x000b454a bhs 0xb4474                               |         goto label_0;
                                                         |     }
                                                         | label_10:
    0x000b454c mov r2, r8                                |     r2 = r8;
    0x000b454e mov r0, r5                                |     r0 = r5;
    0x000b4550 bl 0xb42cc                                |     fcn_000b42cc (r0, r1, r2);
    0x000b4554 mov r1, r8                                |     r1 = r8;
    0x000b4556 b 0xb44f4                                 |     goto label_3;
                                                         | label_6:
    0x000b4558 add.w r8, r5, r8, lsl 2                   |     r8 = r5 + (r8 << 2);
    0x000b455c cmp r6, 1                                 |     
    0x000b455e ldr.w r3, [r8, 0x40]                      |     r3 = *((r8 + 0x40));
    0x000b4562 str r3, [r5, 0x44]                        |     *((r5 + 0x44)) = r3;
    0x000b4564 str.w ip, [r8, 0x40]                      |     __asm ("str.w ip, [r8, 0x40]");
                                                         |     if (r6 > 1) {
    0x000b4568 bgt 0xb44b4                               |         goto label_4;
                                                         |     }
    0x000b456a b 0xb4474                                 |     goto label_0;
                                                         | }

[*] Function strcat used 1 times sqlcipher