[*] Binary protection state of featureflag.cgi

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


[*] Function system tear down of featureflag.cgi

    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/html/axis-cgi/featureflag.cgi @ 0x1ad0 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00001ad0 ()                                  | void fcn_00001ad0 (int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     int16_t var_3h;
                                                             |     int16_t var_4h_2;
                                                             |     int16_t var_8h;
                                                             |     int16_t var_ch;
                                                             |     int16_t var_14h;
                                                             |     int16_t var_2ch;
                                                             |     int16_t var_30h;
                                                             |     int16_t var_34h;
                                                             |     int16_t var_44h;
                                                             |     int16_t var_68h;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x00001ad0 push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x00001ad4 mov r7, r2                                    |     r7 = r2;
    0x00001ad6 ldr r2, [pc, 0x3c0]                           |     
    0x00001ad8 mov r8, r3                                    |     r8 = r3;
    0x00001ada sub sp, 0x48                                  |     
    0x00001adc mov r4, r1                                    |     r4 = r1;
    0x00001ade ldr r3, [pc, 0x3bc]                           |     r3 = *(0x1e9e);
    0x00001ae0 add r2, pc                                    |     r2 = 0x397e;
    0x00001ae2 ldr r0, [r1]                                  |     r0 = *(r1);
    0x00001ae4 ldr r6, [pc, 0x3b8]                           |     
    0x00001ae6 movs r1, 0x65                                 |     r1 = 0x65;
    0x00001ae8 ldr r3, [r2, r3]                              |     
    0x00001aea ldr r2, [pc, 0x3b8]                           |     
    0x00001aec ldr.w sb, [sp, 0x68]                          |     sb = var_68h;
    0x00001af0 add r6, pc                                    |     r6 = 0x3994;
    0x00001af2 ldr r3, [r3]                                  |     r3 = *(0x397e);
    0x00001af4 str r3, [sp, 0x44]                            |     var_44h = r3;
    0x00001af6 mov.w r3, 0                                   |     r3 = 0;
    0x00001afa add r2, pc                                    |     r2 = 0x39a4;
    0x00001afc blx 0x17f8                                    |     r0 = sym ();
    0x00001b00 subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 < r0) {
    0x00001b02 blt.w 0x1db6                                  |         goto label_6;
                                                             |     }
    0x00001b06 ldr r1, [pc, 0x3a0]                           |     
    0x00001b08 add r2, sp, 4                                 |     r2 += var_4h_2;
    0x00001b0a ldr r0, [r4]                                  |     r0 = *(r4);
    0x00001b0c add r1, pc                                    |     r1 = 0x39ba;
    0x00001b0e blx 0x16d4                                    |     r0 = fcn_000016d4 ();
    0x00001b12 subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 < r0) {
    0x00001b14 blt.w 0x1d36                                  |         goto label_7;
                                                             |     }
    0x00001b16 strh r7, [r1, 8]                              |     *((r1 + 8)) = r7;
    0x00001b18 movs r3, 0                                    |     r3 = 0;
    0x00001b1a ldr r0, [r4]                                  |     r0 = *(r4);
    0x00001b1c add r2, sp, 8                                 |     r2 += var_8h;
    0x00001b1e add.w r1, sp, 3                               |     r1 += var_3h;
    0x00001b22 str r3, [sp, 8]                               |     var_8h = r3;
    0x00001b24 blx 0x16e0                                    |     r0 = fcn_000016e0 ();
    0x00001b28 subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 < r0) {
    0x00001b2a blt.w 0x1d64                                  |         goto label_8;
                                                             |     }
    0x00001b2e ldrb.w r1, [sp, 3]                            |     r1 = var_3h;
    0x00001b32 cmp r1, 0x76                                  |     
                                                             |     if (r1 != 0x76) {
    0x00001b34 bne.w 0x1e6a                                  |         goto label_9;
                                                             |     }
    0x00001b38 ldr r2, [sp, 8]                               |     r2 = var_8h;
    0x00001b3a cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x00001b3c beq.w 0x1e6a                                  |         goto label_9;
                                                             |     }
    0x00001b40 ldr r0, [r4]                                  |     r0 = *(r4);
    0x00001b42 blx 0x17f8                                    |     r0 = sym ();
    0x00001b46 subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 < r0) {
    0x00001b48 blt.w 0x1d86                                  |         goto label_10;
                                                             |     }
    0x00001b4c ldr r5, [sp, 4]                               |     r5 = var_4h_2;
    0x00001b4e movs r2, 5                                    |     r2 = 5;
    0x00001b50 ldr r1, [pc, 0x358]                           |     
    0x00001b52 mov r0, r5                                    |     r0 = r5;
    0x00001b54 add r1, pc                                    |     r1 = 0x3a04;
    0x00001b56 blx 0x165c                                    |     r0 = fcn_0000165c ();
    0x00001b5a cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00001b5c beq.w 0x1c80                                  |         goto label_11;
                                                             |     }
                                                             | label_2:
    0x00001b60 ldr r1, [pc, 0x34c]                           |     
    0x00001b62 movs r2, 0xc                                  |     r2 = 0xc;
    0x00001b64 mov r0, r5                                    |     r0 = r5;
    0x00001b66 add r1, pc                                    |     r1 = 0x3a1a;
    0x00001b68 blx 0x165c                                    |     r0 = fcn_0000165c ();
    0x00001b6c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00001b6e beq 0x1bf6                                    |         
                                                             | label_3:
    0x00001b70 ldr r1, [pc, 0x340]                           |         
    0x00001b72 movs r2, 0xb                                  |         r2 = 0xb;
    0x00001b74 mov r0, r5                                    |         r0 = r5;
    0x00001b76 add r1, pc                                    |         r1 = 0x3a2e;
    0x00001b78 blx 0x165c                                    |         r0 = fcn_0000165c ();
    0x00001b7c cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00001b7e beq.w 0x1cd4                                  |             goto label_12;
                                                             |         }
                                                             | label_0:
    0x00001b82 movs r0, 8                                    |         r0 = 8;
    0x00001b84 add.w sb, sp, 0x14                            |         sb += var_14h;
    0x00001b88 blx 0x1698                                    |         fcn_00001698 ();
    0x00001b8c ldr r1, [pc, 0x328]                           |         
    0x00001b8e mov r8, r0                                    |         r8 = r0;
    0x00001b90 add r2, sp, 0xc                               |         r2 += var_ch;
    0x00001b92 mov r0, sb                                    |         r0 = sb;
    0x00001b94 add r1, pc                                    |         r1 = 0x3a50;
    0x00001b96 blx 0x1804                                    |         sd_bus_flush_close_unref ();
    0x00001b9a ldr r1, [sp, 8]                               |         r1 = var_8h;
    0x00001b9c mov r0, sb                                    |         r0 = sb;
    0x00001b9e blx 0x18dc                                    |         cxa_finalize ();
    0x00001ba2 add r5, sp, 0x34                              |         r5 += var_34h;
    0x00001ba4 mov r7, r0                                    |         r7 = r0;
    0x00001ba6 str r5, [sp, 0x2c]                            |         var_2ch = r5;
    0x00001ba8 mov r4, r0                                    |         r4 = r0;
    0x00001baa ldr r3, [r7], 8                               |         r3 = *(r7);
                                                             |         r7 += 8;
    0x00001bae cmp r3, r7                                    |         
    0x00001bb0 itttt eq                                      |         
                                                             |         if (r3 != r7) {
    0x00001bb2 ldreq r0, [r0, 8]                             |             r0 = *((r0 + 8));
                                                             |         }
                                                             |         if (r3 != r7) {
    0x00001bb4 ldreq r1, [r7, 4]                             |             r1 = *((r7 + 4));
                                                             |         }
                                                             |         if (r3 != r7) {
    0x00001bb6 ldreq r3, [r7, 0xc]                           |             r3 = *((r7 + 0xc));
                                                             |         }
                                                             |         if (r3 != r7) {
    0x00001bb8 ldreq r2, [r7, 8]                             |             r2 = *((r7 + 8));
                                                             |         }
    0x00001bba itte ne                                       |         
                                                             |         if (r3 == r7) {
    0x00001bbc strne r3, [sp, 0x2c]                          |             var_2ch = r3;
                                                             |         }
                                                             |         if (r3 == r7) {
    0x00001bbe ldrne r3, [r4, 8]                             |             r3 = *((r4 + 8));
                                                             |         }
                                                             |         if (r3 != r7) {
    0x00001bc0 stmeq r5!, {r0, r1, r2, r3}                   |             *(r5!) = r0;
                                                             |             *((r5! + 4)) = r1;
                                                             |             *((r5! + 8)) = r2;
                                                             |             *((r5! + 12)) = r3;
                                                             |         }
    0x00001bc2 mov r0, r8                                    |         r0 = r8;
    0x00001bc4 it ne                                         |         
                                                             |         if (r3 == r7) {
    0x00001bc6 strne r3, [sp, 0x34]                          |             var_34h = r3;
                                                             |         }
    0x00001bc8 ldr r3, [r4, 4]                               |         r3 = *((r4 + 4));
    0x00001bca str r3, [sp, 0x30]                            |         var_30h = r3;
    0x00001bcc movs r3, 0                                    |         r3 = 0;
    0x00001bce str r7, [r4]                                  |         *(r4) = r7;
    0x00001bd0 str r3, [r4, 4]                               |         *((r4 + 4)) = r3;
    0x00001bd2 strb r3, [r4, 8]                              |         *((r4 + 8)) = r3;
    0x00001bd4 add r4, sp, 0x2c                              |         r4 += var_2ch;
    0x00001bd6 mov r1, r4                                    |         r1 = r4;
    0x00001bd8 blx 0x1864                                    |         cxa_end_catch ();
    0x00001bdc mov r0, r4                                    |         r0 = r4;
    0x00001bde blx 0x17d4                                    |         sym ();
    0x00001be2 mov r0, sb                                    |         r0 = sb;
    0x00001be4 blx 0x17d4                                    |         sym ();
    0x00001be8 ldr r2, [pc, 0x2d0]                           |         r2 = *(0x1ebc);
    0x00001bea mov r0, r8                                    |         r0 = r8;
    0x00001bec ldr r3, [pc, 0x2d0]                           |         r3 = *(0x1ec0);
    0x00001bee ldr r2, [r6, r2]                              |         r2 = *((r6 + r2));
    0x00001bf0 ldr r1, [r6, r3]                              |         r1 = *((r6 + r3));
    0x00001bf2 blx 0x1888                                    |         sym ();
                                                             |     }
    0x00001bf6 ldr.w r8, [sp, 8]                             |     r8 = var_8h;
    0x00001bfa add r5, sp, 0x34                              |     r5 += var_34h;
    0x00001bfc movs r2, 1                                    |     r2 = 1;
    0x00001bfe str r5, [sp, 0x2c]                            |     var_2ch = r5;
    0x00001c00 cmp.w r8, 0                                   |     
    0x00001c02 lsrs r0, r0, 0x1c                             |     r0 >>= 0x1c;
                                                             |     if (r0 != r0) {
    0x00001c04 beq 0x1c10                                    |         
    0x00001c06 mov r0, r8                                    |         r0 = r8;
    0x00001c08 blx 0x1840                                    |         r0 = sym ();
    0x00001c0c add.w r2, r8, r0                              |         r2 = r8 + r0;
                                                             |     }
    0x00001c10 mov r1, r8                                    |     r1 = r8;
    0x00001c12 add.w r8, sp, 0x2c                            |     r8 += var_2ch;
    0x00001c16 mov r0, r8                                    |     r0 = r8;
    0x00001c18 bl 0x1a38                                     |     fcn_00001a38 (r0, r1, r2);
    0x00001c1c ldr r1, [pc, 0x2a4]                           |     
    0x00001c1e mov r0, r8                                    |     r0 = r8;
    0x00001c20 add r1, pc                                    |     r1 = 0x3ae8;
    0x00001c22 blx 0x1638                                    |     r0 = fcn_00001638 ();
    0x00001c26 mov r8, r0                                    |     r8 = r0;
    0x00001c28 ldr r0, [sp, 0x2c]                            |     r0 = var_2ch;
    0x00001c2a cmp r0, r5                                    |     
                                                             |     if (r0 != r5) {
    0x00001c2c beq 0x1c36                                    |         
    0x00001c2e ldr r1, [sp, 0x34]                            |         r1 = var_34h;
    0x00001c30 adds r1, 1                                    |         r1++;
    0x00001c32 blx 0x16fc                                    |         sym ();
                                                             |     }
    0x00001c36 cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x00001c3a bne 0x1d32                                    |         goto label_13;
                                                             |     }
    0x00001c3c ldr r1, [sp, 8]                               |     r1 = var_8h;
    0x00001c3e mov r2, sb                                    |     r2 = sb;
    0x00001c40 ldr r0, [r4]                                  |     r0 = *(r4);
    0x00001c42 blx 0x16d4                                    |     r0 = fcn_000016d4 ();
    0x00001c46 mov r5, r0                                    |     r5 = r0;
                                                             |     do {
                                                             | label_1:
    0x00001c48 cmp r5, 0                                     |         
                                                             |         if (r5 < 0) {
    0x00001c4a blt.w 0x1e44                                  |             goto label_14;
                                                             |         }
    0x00001c4e ldr r0, [r4]                                  |         r0 = *(r4);
    0x00001c50 blx 0x18b8                                    |         r0 = sym ();
    0x00001c54 subs r5, r0, 0                                |         r5 = r0 - 0;
                                                             |         if (r5 < r0) {
    0x00001c56 blt.w 0x1df2                                  |             goto label_15;
                                                             |         }
    0x00001c5a ldr r0, [r4]                                  |         r0 = *(r4);
    0x00001c5c blx 0x18b8                                    |         r0 = sym ();
    0x00001c60 subs r4, r0, 0                                |         r4 = r0 - 0;
                                                             |         if (r4 < r0) {
    0x00001c62 blt.w 0x1e14                                  |             goto label_16;
                                                             |         }
    0x00001c66 ldr r2, [pc, 0x260]                           |         
    0x00001c68 ldr r3, [pc, 0x230]                           |         r3 = *(0x1e9c);
    0x00001c6a add r2, pc                                    |         r2 = 0x3b38;
    0x00001c6c ldr r3, [r2, r3]                              |         r3 = *(0x3b38);
    0x00001c6e ldr r2, [r3]                                  |         r2 = *(0x3b38);
    0x00001c70 ldr r3, [sp, 0x44]                            |         r3 = var_44h;
    0x00001c72 eors r2, r3                                   |         r2 ^= r3;
    0x00001c74 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x00001c78 bne 0x1d2a                                    |             goto label_17;
                                                             |         }
    0x00001c7a add sp, 0x48                                  |         
    0x00001c7c pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_11:
    0x00001c80 ldr.w sl, [sp, 8]                             |         sl = var_8h;
    0x00001c84 add r5, sp, 0x34                              |         r5 += var_34h;
    0x00001c86 movs r2, 1                                    |         r2 = 1;
    0x00001c88 str r5, [sp, 0x2c]                            |         var_2ch = r5;
    0x00001c8a cmp.w sl, 0                                   |         
                                                             |         if (sl != 0) {
    0x00001c8e beq 0x1c9a                                    |             
    0x00001c90 mov r0, sl                                    |             r0 = sl;
    0x00001c92 blx 0x1840                                    |             r0 = sym ();
    0x00001c96 add.w r2, sl, r0                              |             r2 = sl + r0;
                                                             |         }
    0x00001c9a mov r1, sl                                    |         r1 = sl;
    0x00001c9c add.w sl, sp, 0x2c                            |         sl += var_2ch;
    0x00001ca0 mov r0, sl                                    |         r0 = sl;
    0x00001ca2 bl 0x1a38                                     |         fcn_00001a38 (r0, r1, r2);
    0x00001ca6 ldr r1, [pc, 0x224]                           |         
    0x00001ca8 mov r0, sl                                    |         r0 = sl;
    0x00001caa add r1, pc                                    |         r1 = 0x3b7c;
    0x00001cac blx 0x1638                                    |         r0 = fcn_00001638 ();
    0x00001cb0 mov sl, r0                                    |         sl = r0;
    0x00001cb2 ldr r0, [sp, 0x2c]                            |         r0 = var_2ch;
    0x00001cb4 cmp r0, r5                                    |         
                                                             |         if (r0 != r5) {
    0x00001cb6 beq 0x1cc0                                    |             
    0x00001cb8 ldr r1, [sp, 0x34]                            |             r1 = var_34h;
    0x00001cba adds r1, 1                                    |             r1++;
    0x00001cbc blx 0x16fc                                    |             sym ();
                                                             |         }
    0x00001cc0 cmp.w sl, 0                                   |         
                                                             |         if (sl != 0) {
    0x00001cc4 bne 0x1d2e                                    |             goto label_18;
                                                             |         }
    0x00001cc6 ldr r1, [sp, 8]                               |         r1 = var_8h;
    0x00001cc8 mov r2, r8                                    |         r2 = r8;
    0x00001cca ldr r0, [r4]                                  |         r0 = *(r4);
    0x00001ccc blx 0x16d4                                    |         r0 = fcn_000016d4 ();
    0x00001cd0 mov r5, r0                                    |         r5 = r0;
    0x00001cd2 b 0x1c48                                      |         
                                                             |     } while (1);
                                                             | label_12:
    0x00001cd4 ldr.w r8, [sp, 8]                             |     r8 = var_8h;
    0x00001cd8 add r5, sp, 0x34                              |     r5 += var_34h;
    0x00001cda movs r2, 1                                    |     r2 = 1;
    0x00001cdc str r5, [sp, 0x2c]                            |     var_2ch = r5;
    0x00001cde cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x00001ce2 beq 0x1cee                                    |         
    0x00001ce4 mov r0, r8                                    |         r0 = r8;
    0x00001ce6 blx 0x1840                                    |         r0 = sym ();
    0x00001cea add.w r2, r8, r0                              |         r2 = r8 + r0;
                                                             |     }
    0x00001cee mov r1, r8                                    |     r1 = r8;
    0x00001cf0 add.w r8, sp, 0x2c                            |     r8 += var_2ch;
    0x00001cf4 mov r0, r8                                    |     r0 = r8;
    0x00001cf6 bl 0x1a38                                     |     fcn_00001a38 (r0, r1, r2);
    0x00001cfa ldr r1, [pc, 0x1d4]                           |     
    0x00001cfc mov r0, r8                                    |     r0 = r8;
    0x00001cfe add r1, pc                                    |     r1 = 0x3bd4;
    0x00001d00 blx 0x1638                                    |     r0 = fcn_00001638 ();
    0x00001d04 mov r8, r0                                    |     r8 = r0;
    0x00001d06 ldr r0, [sp, 0x2c]                            |     r0 = var_2ch;
    0x00001d08 cmp r0, r5                                    |     
                                                             |     if (r0 != r5) {
    0x00001d0a beq 0x1d14                                    |         
    0x00001d0c ldr r1, [sp, 0x34]                            |         r1 = var_34h;
    0x00001d0e adds r1, 1                                    |         r1++;
    0x00001d10 blx 0x16fc                                    |         sym ();
    0x00001d12 invalid                                       |         
                                                             |     }
    0x00001d14 cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x00001d18 bne.w 0x1b82                                  |         goto label_0;
                                                             |     }
    0x00001d1c ldr r1, [sp, 8]                               |     r1 = var_8h;
    0x00001d1e mov r2, r7                                    |     r2 = r7;
    0x00001d20 ldr r0, [r4]                                  |     r0 = *(r4);
    0x00001d22 blx 0x16d4                                    |     r0 = fcn_000016d4 ();
    0x00001d26 mov r5, r0                                    |     r5 = r0;
    0x00001d28 b 0x1c48                                      |     goto label_1;
                                                             | label_17:
    0x00001d2a blx 0x17a4                                    |     cxa_end_cleanup ();
                                                             | label_18:
    0x00001d2e ldr r5, [sp, 4]                               |     r5 = var_4h_2;
    0x00001d30 b 0x1b60                                      |     goto label_2;
                                                             | label_13:
    0x00001d32 ldr r5, [sp, 4]                               |     r5 = var_4h_2;
    0x00001d34 b 0x1b70                                      |     goto label_3;
                                                             | label_7:
    0x00001d36 movs r0, 0x10                                 |     r0 = 0x10;
    0x00001d38 rsbs r5, r5, 0                                |     r5 -= ;
    0x00001d3a blx 0x1698                                    |     r0 = fcn_00001698 ();
    0x00001d3e mov r4, r0                                    |     r4 = r0;
    0x00001d40 blx 0x16a4                                    |     fcn_000016a4 ();
    0x00001d44 ldr r3, [pc, 0x18c]                           |     
    0x00001d46 mov r2, r0                                    |     r2 = r0;
    0x00001d48 strd r5, r0, [sp, 0xc]                        |     __asm ("strd r5, r0, [sp, 0xc]");
    0x00001d4c mov r1, r5                                    |     r1 = r5;
    0x00001d4e mov r0, r4                                    |     r0 = r4;
    0x00001d50 add r3, pc                                    |     r3 = 0x3c28;
    0x00001d52 bl 0x3334                                     |     fcn_00003334 (r0, r1, r2);
                                                             |     do {
                                                             | label_4:
    0x00001d56 ldr r2, [pc, 0x180]                           |         r2 = *(0x1eda);
    0x00001d58 mov r0, r4                                    |         r0 = r4;
    0x00001d5a ldr r3, [pc, 0x180]                           |         r3 = *(0x1ede);
    0x00001d5c ldr r2, [r6, r2]                              |         r2 = *((r6 + r2));
    0x00001d5e ldr r1, [r6, r3]                              |         r1 = *((r6 + r3));
    0x00001d60 blx 0x1888                                    |         sym ();
                                                             | label_8:
    0x00001d64 movs r0, 0x10                                 |         r0 = 0x10;
    0x00001d66 rsbs r5, r5, 0                                |         r5 -= ;
    0x00001d68 blx 0x1698                                    |         r0 = fcn_00001698 ();
    0x00001d6c mov r4, r0                                    |         r4 = r0;
    0x00001d6e blx 0x16a4                                    |         fcn_000016a4 ();
    0x00001d72 ldr r3, [pc, 0x16c]                           |         
    0x00001d74 mov r2, r0                                    |         r2 = r0;
    0x00001d76 strd r5, r0, [sp, 0xc]                        |         __asm ("strd r5, r0, [sp, 0xc]");
    0x00001d7a mov r1, r5                                    |         r1 = r5;
    0x00001d7c mov r0, r4                                    |         r0 = r4;
    0x00001d7e add r3, pc                                    |         r3 = 0x3c64;
    0x00001d80 bl 0x3334                                     |         fcn_00003334 (r0, r1, r2);
    0x00001d84 b 0x1d56                                      |         
                                                             |     } while (1);
                                                             | label_10:
    0x00001d86 movs r0, 0x10                                 |     r0 = 0x10;
    0x00001d88 rsbs r5, r5, 0                                |     r5 -= ;
    0x00001d8a blx 0x1698                                    |     r0 = fcn_00001698 ();
    0x00001d8e mov r4, r0                                    |     r4 = r0;
    0x00001d90 blx 0x16a4                                    |     fcn_000016a4 ();
    0x00001d94 ldr r3, [pc, 0x14c]                           |     
    0x00001d96 mov r2, r0                                    |     r2 = r0;
    0x00001d98 strd r5, r0, [sp, 0xc]                        |     __asm ("strd r5, r0, [sp, 0xc]");
    0x00001d9c mov r1, r5                                    |     r1 = r5;
    0x00001d9e mov r0, r4                                    |     r0 = r4;
    0x00001da0 add r3, pc                                    |     r3 = 0x3c88;
    0x00001da2 bl 0x3334                                     |     fcn_00003334 (r0, r1, r2);
    0x00001da6 b 0x1d56                                      |     goto label_4;
                                                             |     do {
                                                             | label_5:
    0x00001da8 mov r0, r4                                    |         r0 = r4;
    0x00001daa blx 0x1714                                    |         sym ();
    0x00001dae blx 0x17b0                                    |         g_free ();
    0x00001db2 b 0x1da8                                      |         
                                                             |     } while (1);
                                                             | label_6:
    0x00001db6 movs r0, 0x10                                 |     r0 = 0x10;
    0x00001db8 rsbs r5, r5, 0                                |     r5 -= ;
    0x00001dba blx 0x1698                                    |     r0 = fcn_00001698 ();
    0x00001dbe mov r4, r0                                    |     r4 = r0;
    0x00001dc0 blx 0x16a4                                    |     fcn_000016a4 ();
    0x00001dc4 ldr r3, [pc, 0x120]                           |     
    0x00001dc6 mov r2, r0                                    |     r2 = r0;
    0x00001dc8 strd r5, r0, [sp, 0xc]                        |     __asm ("strd r5, r0, [sp, 0xc]");
    0x00001dcc mov r1, r5                                    |     r1 = r5;
    0x00001dce mov r0, r4                                    |     r0 = r4;
    0x00001dd0 add r3, pc                                    |     r3 = 0x3cbc;
    0x00001dd2 bl 0x3334                                     |     fcn_00003334 (r0, r1, r2);
    0x00001dd6 b 0x1d56                                      |     goto label_4;
                                                             |     do {
    0x00001dde mov r0, r8                                    |         r0 = r8;
    0x00001de0 blx 0x1714                                    |         sym ();
    0x00001de4 blx 0x17b0                                    |         g_free ();
    0x00001de8 b 0x1da8                                      |         goto label_5;
                                                             | label_15:
    0x00001df2 movs r0, 0x10                                 |         r0 = 0x10;
    0x00001df4 rsbs r5, r5, 0                                |         r5 -= ;
    0x00001df6 blx 0x1698                                    |         r0 = fcn_00001698 ();
    0x00001dfa mov r4, r0                                    |         r4 = r0;
    0x00001dfc blx 0x16a4                                    |         fcn_000016a4 ();
    0x00001e00 ldr r3, [pc, 0xe8]                            |         
    0x00001e02 mov r2, r0                                    |         r2 = r0;
    0x00001e04 strd r5, r0, [sp, 0xc]                        |         __asm ("strd r5, r0, [sp, 0xc]");
    0x00001e08 mov r1, r5                                    |         r1 = r5;
    0x00001e0a mov r0, r4                                    |         r0 = r4;
    0x00001e0c add r3, pc                                    |         r3 = 0x3cfc;
    0x00001e0e bl 0x3334                                     |         fcn_00003334 (r0, r1, r2);
    0x00001e10 invalid                                       |         
                                                             | label_16:
    0x00001e14 movs r0, 0x10                                 |         r0 = 0x10;
    0x00001e16 rsbs r4, r4, 0                                |         r4 -= ;
    0x00001e18 blx 0x1698                                    |         r0 = fcn_00001698 ();
    0x00001e1c mov r5, r0                                    |         r5 = r0;
    0x00001e1e blx 0x16a4                                    |         fcn_000016a4 ();
    0x00001e22 ldr r3, [pc, 0xcc]                            |         
    0x00001e24 mov r2, r0                                    |         r2 = r0;
    0x00001e26 strd r4, r0, [sp, 0xc]                        |         __asm ("strd r4, r0, [sp, 0xc]");
    0x00001e28 ands r3, r0                                   |         r3 &= r0;
    0x00001e2a mov r1, r4                                    |         r1 = r4;
    0x00001e2c mov r0, r5                                    |         r0 = r5;
    0x00001e2e add r3, pc                                    |         r3 = 0x3d24;
    0x00001e30 bl 0x3334                                     |         fcn_00003334 (r0, r1, r2);
    0x00001e34 ldr r2, [pc, 0xa0]                            |         r2 = *(0x1ed8);
    0x00001e36 mov r0, r5                                    |         r0 = r5;
    0x00001e38 ldr r3, [pc, 0xa0]                            |         r3 = *(0x1edc);
    0x00001e3a ldr r2, [r6, r2]                              |         r2 = *((r6 + r2));
    0x00001e3c ldr r1, [r6, r3]                              |         r1 = *((r6 + r3));
    0x00001e3e blx 0x1888                                    |         sym ();
    0x00001e42 b 0x1dde                                      |         
                                                             |     } while (1);
                                                             | label_14:
    0x00001e44 movs r0, 0x10                                 |     r0 = 0x10;
    0x00001e46 rsbs r5, r5, 0                                |     r5 -= ;
    0x00001e48 blx 0x1698                                    |     r0 = fcn_00001698 ();
    0x00001e4c mov r4, r0                                    |     r4 = r0;
    0x00001e4e blx 0x16a4                                    |     fcn_000016a4 ();
    0x00001e52 ldr r3, [pc, 0xa0]                            |     
    0x00001e54 mov r2, r0                                    |     r2 = r0;
    0x00001e56 strd r5, r0, [sp, 0xc]                        |     __asm ("strd r5, r0, [sp, 0xc]");
    0x00001e5a mov r1, r5                                    |     r1 = r5;
    0x00001e5c mov r0, r4                                    |     r0 = r4;
    0x00001e5e add r3, pc                                    |     r3 = 0x3d58;
    0x00001e60 bl 0x3334                                     |     fcn_00003334 (r0, r1, r2);
    0x00001e64 b 0x1d56                                      |     goto label_4;
                                                             | label_9:
    0x00001e6a movs r0, 0x10                                 |     r0 = 0x10;
    0x00001e6c blx 0x1698                                    |     r0 = fcn_00001698 ();
    0x00001e70 mov r4, r0                                    |     r4 = r0;
    0x00001e72 blx 0x16a4                                    |     fcn_000016a4 ();
    0x00001e76 movs r3, 0x16                                 |     r3 = 0x16;
    0x00001e78 mov r2, r0                                    |     r2 = r0;
    0x00001e7a strd r3, r0, [sp, 0xc]                        |     __asm ("strd r3, r0, [sp, 0xc]");
    0x00001e7e movs r1, 0x16                                 |     r1 = 0x16;
    0x00001e80 ldr r3, [pc, 0x74]                            |     
    0x00001e82 mov r0, r4                                    |     r0 = r4;
    0x00001e84 add r3, pc                                    |     r3 = 0x3d80;
    0x00001e86 bl 0x3334                                     |     fcn_00003334 (r0, r1, r2);
    0x00001e8a b 0x1d56                                      |     goto label_4;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/html/axis-cgi/featureflag.cgi @ 0x22e4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000022e4 ()                                      | void fcn_000022e4 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     void * s2;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_84h;
                                                                 |     int32_t var_84h_2;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_9ch;
                                                                 |     int32_t var_9ch_2;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b5h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     void * var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_d8h;
                                                                 |     void * s1;
                                                                 |     int16_t var_ech;
                                                                 |     int16_t var_f0h;
                                                                 |     int16_t var_100h;
                                                                 |     int16_t var_104h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000022e4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000022e8 mov r4, r0                                        |     r4 = r0;
    0x000022ea ldr.w r0, [pc, 0x628]                             |     r0 = *(0x00002914);
    0x000022ee sub sp, 0x10c                                     |     
    0x000022f0 mov r5, r1                                        |     r5 = r1;
    0x000022f2 mov sl, r2                                        |     sl = r2;
    0x000022f4 ldr.w r3, [pc, 0x620]                             |     
    0x000022f8 add r2, sp, 0x48                                  |     r2 += var_48h;
    0x000022fa add r0, pc                                        |     r0 += pc;
    0x000022fc str r1, [sp, 0x44]                                |     var_44h = r1;
    0x000022fe ldr.w r1, [pc, 0x61c]                             |     
    0x00002302 ldr r3, [r0, r3]                                  |     r3 = *((r0 + r3));
    0x00002304 mov r0, r5                                        |     r0 = r5;
    0x00002306 add r1, pc                                        |     r1 = 0x4c28;
    0x00002308 ldr r3, [r3]                                      |     r3 = *(0x2918);
    0x0000230a str r3, [sp, 0x104]                               |     var_104h = r3;
    0x0000230c mov.w r3, 0                                       |     r3 = 0;
    0x00002310 ldr.w r3, [pc, 0x60c]                             |     r3 = *(0x00002920);
    0x00002314 add r3, pc                                        |     r3 += pc;
    0x00002316 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00002318 blx 0x16d4                                        |     r0 = fcn_000016d4 ();
    0x0000231c subs r6, r0, 0                                    |     r6 = r0 - 0;
                                                                 |     if (r6 < r0) {
    0x0000231e blt.w 0x28ea                                      |         goto label_10;
                                                                 |     }
    0x00002322 ldr.w r2, [pc, 0x600]                             |     
    0x00002326 mov r0, r5                                        |     r0 = r5;
    0x00002328 movs r1, 0x61                                     |     r1 = 0x61;
    0x0000232a add r2, pc                                        |     r2 = 0x4c54;
    0x0000232c blx 0x17f8                                        |     r0 = sym ();
    0x00002330 subs r5, r0, 0                                    |     r5 = r0 - 0;
                                                                 |     if (r5 < r0) {
    0x00002332 blt.w 0x287a                                      |         goto label_11;
                                                                 |     }
    0x00002336 mov.w r3, -1                                      |     r3 = -1;
    0x0000233a add.w r8, sp, 0x54                                |     r8 += var_54h;
    0x0000233e add r7, sp, 0x50                                  |     r7 += var_50h;
    0x00002340 add r6, sp, 0x4c                                  |     r6 += var_4ch;
    0x00002342 add r5, sp, 0x44                                  |     r5 += var_44h;
    0x00002344 movs r2, 0                                        |     r2 = 0;
    0x00002346 strd r2, r3, [sp, 0x4c]                           |     __asm ("strd r2, r3, [var_50h]");
    0x0000234a mov r1, r5                                        |     r1 = r5;
    0x0000234c mov r2, r6                                        |     r2 = r6;
    0x0000234e mov r0, r4                                        |     r0 = r4;
    0x00002350 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00002352 mov r3, r7                                        |     r3 = r7;
    0x00002354 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00002358 bl 0x1ad0                                         |     fcn_00001ad0 (r0, r1, r2);
    0x0000235c mov r3, r7                                        |     r3 = r7;
    0x0000235e mov r2, r6                                        |     r2 = r6;
    0x00002360 mov r1, r5                                        |     r1 = r5;
    0x00002362 mov r0, r4                                        |     r0 = r4;
    0x00002364 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00002368 bl 0x1ad0                                         |     fcn_00001ad0 (r0, r1, r2);
    0x0000236c mov r3, r7                                        |     r3 = r7;
    0x0000236e mov r2, r6                                        |     r2 = r6;
    0x00002370 mov r1, r5                                        |     r1 = r5;
    0x00002372 mov r0, r4                                        |     r0 = r4;
    0x00002374 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00002378 bl 0x1ad0                                         |     fcn_00001ad0 (r0, r1, r2);
    0x0000237c ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0000237e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00002380 beq.w 0x27ec                                      |         goto label_12;
                                                                 |     }
    0x00002384 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00002386 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00002388 beq.w 0x27ec                                      |         goto label_12;
                                                                 |     }
    0x0000238c ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0000238e adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00002390 beq.w 0x27ec                                      |         goto label_12;
                                                                 |     }
    0x00002394 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x00002396 add r3, sp, 0x74                                  |     r3 += var_74h;
    0x00002398 movs r2, 1                                        |     r2 = 1;
    0x0000239a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0000239c str r3, [sp, 0x6c]                                |     var_6ch = r3;
                                                                 |     if (r4 != 0) {
    0x0000239e cbz r4, 0x23a8                                    |         
    0x000023a0 mov r0, r4                                        |         r0 = r4;
    0x000023a2 blx 0x1840                                        |         r0 = sym ();
    0x000023a6 adds r2, r4, r0                                   |         r2 = r4 + r0;
                                                                 |     }
    0x000023a8 add r3, sp, 0x8c                                  |     r3 += var_8ch;
    0x000023aa mov r1, r4                                        |     r1 = r4;
    0x000023ac add r0, sp, 0x6c                                  |     r0 += var_6ch;
    0x000023ae mov r4, r3                                        |     r4 = r3;
    0x000023b0 str r0, [sp, 0x38]                                |     var_38h = r0;
    0x000023b2 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000023b4 bl 0x1a38                                         |     fcn_00001a38 (r0, r1, r2);
    0x000023b8 str r4, [sp, 0x84]                                |     var_84h = r4;
    0x000023ba movs r2, 1                                        |     r2 = 1;
    0x000023bc ldr r4, [sp, 0x48]                                |     r4 = var_48h;
                                                                 |     if (r4 != 0) {
    0x000023be cbz r4, 0x23c8                                    |         
    0x000023c0 mov r0, r4                                        |         r0 = r4;
    0x000023c2 blx 0x1840                                        |         r0 = sym ();
    0x000023c6 adds r2, r4, r0                                   |         r2 = r4 + r0;
                                                                 |     }
    0x000023c8 add r3, sp, 0x84                                  |     r3 += var_84h;
    0x000023ca mov r1, r4                                        |     r1 = r4;
    0x000023cc mov r0, r3                                        |     r0 = r3;
    0x000023ce str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x000023d0 bl 0x1a38                                         |     fcn_00001a38 (r0, r1, r2);
    0x000023d4 ldr r4, [sp, 0x4c]                                |     r4 = var_4ch;
    0x000023d6 add r3, sp, 0xa4                                  |     r3 += var_a4h;
    0x000023d8 movs r2, 1                                        |     r2 = 1;
    0x000023da str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000023dc str r3, [sp, 0x9c]                                |     var_9ch = r3;
                                                                 |     if (r4 != 0) {
    0x000023de cbz r4, 0x23e8                                    |         
    0x000023e0 mov r0, r4                                        |         r0 = r4;
    0x000023e2 blx 0x1840                                        |         r0 = sym ();
    0x000023e6 adds r2, r4, r0                                   |         r2 = r4 + r0;
                                                                 |     }
    0x000023e8 add r3, sp, 0x9c                                  |     r3 += var_9ch;
    0x000023ea mov r1, r4                                        |     r1 = r4;
    0x000023ec mov r0, r3                                        |     r0 = r3;
    0x000023ee str r3, [sp, 0x40]                                |     var_40h = r3;
    0x000023f0 bl 0x1a38                                         |     fcn_00001a38 (r0, r1, r2);
    0x000023f4 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000023f6 add r2, sp, 0xc0                                  |     r2 += var_c0h;
    0x000023f8 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x000023fa str r2, [sp, 0xb8]                                |     var_b8h = r2;
    0x000023fc subs r3, 0                                        |     
    0x000023fe ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00002400 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00002402 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00002404 strb.w r3, [sp, 0xb4]                             |     var_b4h = r3;
    0x00002408 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0000240a subs r3, 0                                        |     
    0x0000240c it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0000240e movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00002410 strb.w r3, [sp, 0xb5]                             |     var_b5h = r3;
    0x00002414 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00002416 cmp r3, r2                                        |     
    0x00002418 ittte eq                                          |     
                                                                 |     if (r3 != r2) {
    0x0000241a moveq r3, r2                                      |         r3 = r2;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0000241c ldreq r4, [sp, 0x1c]                              |         r4 = var_1ch;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0000241e ldmeq r3, {r0, r1, r2, r3}                        |         r0 = *(r3);
                                                                 |         r1 = *((r3 + 4));
                                                                 |         r2 = *((r3 + 8));
                                                                 |         r3 = *((r3 + 12));
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x00002420 strne r3, [sp, 0xb8]                              |         var_b8h = r3;
                                                                 |     }
    0x00002422 ite ne                                            |     
                                                                 |     if (r3 == r2) {
    0x00002424 ldrne r3, [sp, 0x74]                              |         r3 = var_74h;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00002426 stmeq r4, {r0, r1, r2, r3}                        |         *(r4) = r0;
                                                                 |         *((r4 + 4)) = r1;
                                                                 |         *((r4 + 8)) = r2;
                                                                 |         *((r4 + 12)) = r3;
                                                                 |     }
    0x0000242a ldrd r5, r4, [sp, 0x84]                           |     __asm ("ldrd r5, r4, [var_84h]");
    0x0000242e it ne                                             |     
                                                                 |     if (r3 == r2) {
    0x00002430 strne r3, [sp, 0xc0]                              |         var_c0h = r3;
                                                                 |     }
    0x00002432 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00002434 clz r2, r5                                        |     r2 &= r5;
    0x00002438 lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x0000243a str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x0000243c ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0000243e str r3, [sp, 0xbc]                                |     var_bch = r3;
    0x00002440 rsbs r3, r4, 0                                    |     r3 = r4 - ;
    0x00002442 cmp r5, r3                                        |     
    0x00002444 mov.w r3, 0                                       |     r3 = 0;
    0x00002448 it eq                                             |     
                                                                 |     if (r5 != r3) {
    0x0000244a moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x0000244c str r3, [sp, 0x70]                                |     var_70h = r3;
    0x0000244e strb.w r3, [sp, 0x74]                             |     var_74h = r3;
    0x00002452 add r3, sp, 0xd8                                  |     r3 += var_d8h;
    0x00002454 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00002456 str r3, [sp, 0xd0]                                |     var_d0h = r3;
    0x00002458 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0000245a bne.w 0x27c6                                      |         goto label_13;
                                                                 |     }
    0x0000245e cmp r4, 0xf                                       |     
    0x00002460 str r4, [sp, 0x64]                                |     s2 = r4;
                                                                 |     if (r4 > 0xf) {
    0x00002462 bhi.w 0x2728                                      |         goto label_14;
                                                                 |     }
    0x00002466 cmp r4, 1                                         |     
                                                                 |     if (r4 != 1) {
    0x00002468 bne.w 0x26aa                                      |         goto label_15;
                                                                 |     }
    0x0000246c ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0000246e ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00002470 strb.w r3, [sp, 0xd8]                             |     var_d8h = r3;
                                                                 | label_1:
    0x00002474 movs r3, 0                                        |     r3 = 0;
    0x00002476 str r4, [sp, 0xd4]                                |     var_d4h = r4;
    0x00002478 strb r3, [r2, r4]                                 |     *((r2 + r4)) = r3;
    0x0000247a add r3, sp, 0xf0                                  |     r3 += var_f0h;
    0x0000247c ldrd r5, r4, [sp, 0x9c]                           |     __asm ("ldrd r5, r4, [var_9ch]");
    0x00002480 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00002482 str r3, [sp, 0xe8]                                |     s1 = r3;
    0x00002484 clz r2, r5                                        |     r2 &= r5;
    0x00002488 rsbs r3, r4, 0                                    |     r3 = r4 - ;
    0x0000248a lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x0000248c cmp r5, r3                                        |     
    0x0000248e it eq                                             |     
                                                                 |     if (r5 != r3) {
    0x00002490 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00002492 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00002494 bne.w 0x27ce                                      |         goto label_16;
                                                                 |     }
    0x00002498 cmp r4, 0xf                                       |     
    0x0000249a str r4, [sp, 0x64]                                |     s2 = r4;
                                                                 |     if (r4 > 0xf) {
    0x0000249c bhi.w 0x270c                                      |         goto label_17;
                                                                 |     }
    0x000024a0 cmp r4, 1                                         |     
                                                                 |     if (r4 != 1) {
    0x000024a2 bne.w 0x2700                                      |         goto label_18;
                                                                 |     }
    0x000024a6 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000024a8 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x000024aa strb.w r3, [sp, 0xf0]                             |     var_f0h = r3;
                                                                 | label_3:
    0x000024ae movs r3, 0                                        |     r3 = 0;
    0x000024b0 str r4, [sp, 0xec]                                |     var_ech = r4;
    0x000024b2 strb r3, [r2, r4]                                 |     *((r2 + r4)) = r3;
    0x000024b4 movs r0, 0x54                                     |     r0 = 0x54;
    0x000024b6 ldrh.w r3, [sp, 0xb4]                             |     r3 = var_b4h;
    0x000024ba str.w sl, [sp, 0x5c]                              |     __asm ("str.w sl, [var_5ch]");
    0x000024be strh.w r3, [sp, 0x100]                            |     var_100h = r3;
    0x000024c2 blx 0x15f8                                        |     fcn_000015f8 ();
    0x000024c6 ldrd r6, r4, [sp, 0xb8]                           |     __asm ("ldrd r6, r4, [var_b8h]");
    0x000024ca movs r3, 0                                        |     r3 = 0;
    0x000024cc mov r5, r0                                        |     r5 = r0;
    0x000024ce str r3, [r0], 4                                   |     *(r0) = r3;
                                                                 |     r0 += 4;
    0x000024d2 clz r2, r6                                        |     r2 &= r6;
    0x000024d6 rsbs r3, r4, 0                                    |     r3 = r4 - ;
    0x000024d8 cmp r6, r3                                        |     
    0x000024da lsr.w r2, r2, 5                                   |     r2 >>= 5;
    0x000024de it eq                                             |     
                                                                 |     if (r6 != r3) {
    0x000024e0 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000024e2 add.w r3, r5, 0xc                                 |     r3 = r5 + 0xc;
    0x000024e6 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000024e8 str r3, [r5, 4]                                   |     *((r5 + 4)) = r3;
    0x000024ea cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000024ec bne.w 0x27d6                                      |         goto label_19;
                                                                 |     }
    0x000024f0 cmp r4, 0xf                                       |     
    0x000024f2 str r4, [sp, 0x64]                                |     s2 = r4;
                                                                 |     if (r4 > 0xf) {
    0x000024f4 bhi.w 0x2750                                      |         goto label_20;
                                                                 |     }
    0x000024f8 cmp r4, 1                                         |     
                                                                 |     if (r4 != 1) {
    0x000024fa bne.w 0x2744                                      |         goto label_21;
                                                                 |     }
    0x000024fe ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00002500 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x00002502 strb r3, [r5, 0xc]                                |     *((r5 + 0xc)) = r3;
                                                                 | label_4:
    0x00002504 movs r3, 0                                        |     r3 = 0;
    0x00002506 str r4, [r5, 8]                                   |     *((r5 + 8)) = r4;
    0x00002508 strb r3, [r2, r4]                                 |     *((r2 + r4)) = r3;
    0x0000250a add.w r3, r5, 0x24                                |     r3 = r5 + 0x24;
    0x0000250e ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00002510 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00002512 str r3, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r3;
    0x00002514 ldr r3, [sp, 0xd0]                                |     r3 = var_d0h;
    0x00002516 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00002518 beq.w 0x276a                                      |         goto label_22;
                                                                 |     }
    0x0000251c str r3, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r3;
    0x0000251e ldr r3, [sp, 0xd8]                                |     r3 = var_d8h;
    0x00002520 str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
                                                                 | label_5:
    0x00002522 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00002524 ldr r2, [sp, 0xe8]                                |     r2 = s1;
    0x00002526 str r3, [sp, 0xd0]                                |     var_d0h = r3;
    0x00002528 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x0000252a str r3, [r5, 0x20]                                |     *((r5 + 0x20)) = r3;
    0x0000252c movs r3, 0                                        |     r3 = 0;
    0x0000252e str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x00002530 strb.w r3, [sp, 0xd8]                             |     var_d8h = r3;
    0x00002534 add.w r3, r5, 0x3c                                |     r3 = r5 + 0x3c;
    0x00002538 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0000253a str r3, [r5, 0x34]                                |     *((r5 + 0x34)) = r3;
    0x0000253c ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0000253e cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00002540 beq.w 0x277a                                      |         goto label_23;
                                                                 |     }
    0x00002544 ldr r3, [sp, 0xf0]                                |     r3 = var_f0h;
    0x00002546 str r2, [r5, 0x34]                                |     *((r5 + 0x34)) = r2;
    0x00002548 str r3, [r5, 0x3c]                                |     *((r5 + 0x3c)) = r3;
                                                                 | label_6:
    0x0000254a ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0000254c movw r2, 0x6907                                   |     
    0x00002550 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x00002552 movt r2, 0xc70f                                   |     r2 = 0xc70f6907;
    0x00002556 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x00002558 str r3, [sp, 0xe8]                                |     s1 = r3;
    0x0000255a ldr r3, [sp, 0xec]                                |     r3 = var_ech;
    0x0000255c str r5, [sp, 0x60]                                |     var_60h = r5;
    0x0000255e str r3, [r5, 0x38]                                |     *((r5 + 0x38)) = r3;
    0x00002560 ldrh.w r3, [sp, 0x100]                            |     r3 = var_100h;
    0x00002564 strh.w r3, [r5, 0x4c]                             |     *((r5 + 0x4c)) = r3;
    0x00002568 movs r3, 0                                        |     r3 = 0;
    0x0000256a str r3, [sp, 0xec]                                |     var_ech = r3;
    0x0000256c strb.w r3, [sp, 0xf0]                             |     var_f0h = r3;
    0x00002570 blx 0x1720                                        |     libc_start_main (r0, r1, r2, r3, r4, r5, r6);
    0x00002574 ldr.w sb, [sl, 4]                                 |     sb = *((sl + 4));
    0x00002578 mov r7, r0                                        |     r7 = r0;
    0x0000257a mov r1, sb                                        |     r1 = sb;
    0x0000257c blx 0x1680                                        |     fcn_00001680 ();
    0x00002580 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00002584 ldr.w r8, [r3, r1, lsl 2]                         |     offset_0 = r1 << 2;
                                                                 |     r8 = *((r3 + offset_0));
    0x00002588 lsls r3, r1, 2                                    |     r3 = r1 << 2;
    0x0000258a str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0000258c cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00002590 beq.w 0x26ba                                      |         goto label_24;
                                                                 |     }
    0x00002592 strh r3, [r2, 4]                                  |     *((r2 + 4)) = r3;
    0x00002594 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00002598 str.w sl, [sp, 0x14]                              |     __asm ("str.w sl, [var_14h]");
    0x0000259c ldr.w fp, [r3, 0x50]                              |     fp = *((r3 + 0x50));
    0x000025a0 mov r6, r3                                        |     r6 = r3;
    0x000025a2 mov sl, fp                                        |     sl = fp;
    0x000025a4 mov fp, r1                                        |     
    0x000025a6 b 0x25c4                                          |     
                                                                 |     while (r7 != sl) {
                                                                 | label_0:
    0x000025a8 ldr r4, [r6]                                      |         r4 = *(r6);
    0x000025aa cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x000025ac beq.w 0x26b6                                      |             goto label_25;
                                                                 |         }
    0x000025b0 ldr.w sl, [r4, 0x50]                              |         sl = *((r4 + 0x50));
    0x000025b4 mov r1, sb                                        |         r1 = sb;
    0x000025b6 mov r8, r6                                        |         r8 = r6;
    0x000025b8 mov r0, sl                                        |         r0 = sl;
    0x000025ba blx 0x1680                                        |         fcn_00001680 ();
    0x000025be cmp fp, r1                                        |         
                                                                 |         if (fp != r1) {
    0x000025c0 bne 0x26b6                                        |             goto label_25;
                                                                 |         }
    0x000025c2 mov r6, r4                                        |         r6 = r4;
    0x000025c4 cmp r7, sl                                        |         
    0x000025c6 bne 0x25a8                                        |         
                                                                 |     }
    0x000025c8 ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x000025ca ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x000025cc cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000025ce bne 0x25a8                                        |         goto label_0;
                                                                 |     }
    0x000025d0 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x000025d2 ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
                                                                 |     if (r2 == 0) {
    0x000025d4 cbz r2, 0x25de                                    |         goto label_26;
                                                                 |     }
    0x000025d6 blx 0x18a0                                        |     r0 = jc_specific_error ();
    0x000025da cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000025dc bne 0x25a8                                        |         goto label_0;
                                                                 |     }
                                                                 | label_26:
    0x000025de ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x000025e2 ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x000025e6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000025e8 beq 0x26ba                                        |         goto label_24;
                                                                 |     }
    0x000025ea ldr r0, [r5, 0x34]                                |     r0 = *((r5 + 0x34));
    0x000025ec ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000025ee cmp r3, r0                                        |     
                                                                 |     if (r3 != r0) {
    0x000025f0 beq 0x25fa                                        |         
    0x000025f2 ldr r1, [r5, 0x3c]                                |         r1 = *((r5 + 0x3c));
    0x000025f4 adds r1, 1                                        |         r1++;
    0x000025f6 blx 0x16fc                                        |         sym ();
                                                                 |     }
    0x000025fa ldr r0, [r5, 0x1c]                                |     r0 = *((r5 + 0x1c));
    0x000025fc ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000025fe cmp r3, r0                                        |     
                                                                 |     if (r3 != r0) {
    0x00002600 beq 0x260a                                        |         
    0x00002602 ldr r1, [r5, 0x24]                                |         r1 = *((r5 + 0x24));
    0x00002604 adds r1, 1                                        |         r1++;
    0x00002606 blx 0x16fc                                        |         sym ();
                                                                 |     }
    0x0000260a ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x0000260c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0000260e cmp r3, r0                                        |     
                                                                 |     if (r3 != r0) {
    0x00002610 beq 0x261a                                        |         
    0x00002612 ldr r1, [r5, 0xc]                                 |         r1 = *((r5 + 0xc));
    0x00002614 adds r1, 1                                        |         r1++;
    0x00002616 blx 0x16fc                                        |         sym ();
                                                                 |     }
    0x0000261a mov r0, r5                                        |     r0 = r5;
    0x0000261c movs r1, 0x54                                     |     r1 = 0x54;
    0x0000261e blx 0x16fc                                        |     sym ();
                                                                 | label_2:
    0x00002622 ldr r0, [sp, 0xe8]                                |     r0 = s1;
    0x00002624 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00002626 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x00002628 beq 0x2632                                        |         
    0x0000262a ldr r1, [sp, 0xf0]                                |         r1 = var_f0h;
    0x0000262c adds r1, 1                                        |         r1++;
    0x0000262e blx 0x16fc                                        |         sym ();
                                                                 |     }
    0x00002632 ldr r0, [sp, 0xd0]                                |     r0 = var_d0h;
    0x00002634 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00002636 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x00002638 beq 0x2642                                        |         
    0x0000263a ldr r1, [sp, 0xd8]                                |         r1 = var_d8h;
    0x0000263c adds r1, 1                                        |         r1++;
    0x0000263e blx 0x16fc                                        |         sym ();
    0x00002640 invalid                                           |         
                                                                 |     }
    0x00002642 ldr r0, [sp, 0xb8]                                |     r0 = var_b8h;
    0x00002644 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00002646 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x00002648 beq 0x2652                                        |         
    0x0000264a ldr r1, [sp, 0xc0]                                |         r1 = var_c0h;
    0x0000264c adds r1, 1                                        |         r1++;
    0x0000264e blx 0x16fc                                        |         sym ();
                                                                 |     }
    0x00002652 ldr r0, [sp, 0x9c]                                |     r0 = var_9ch;
    0x00002654 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00002656 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x00002658 beq 0x2662                                        |         
    0x0000265a ldr r1, [sp, 0xa4]                                |         r1 = var_a4h;
    0x0000265c adds r1, 1                                        |         r1++;
    0x0000265e blx 0x16fc                                        |         sym ();
                                                                 |     }
    0x00002662 ldr r0, [sp, 0x84]                                |     r0 = var_84h;
    0x00002664 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00002666 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x00002668 beq 0x2672                                        |         
    0x0000266a ldr r1, [sp, 0x8c]                                |         r1 = var_8ch;
    0x0000266c adds r1, 1                                        |         r1++;
    0x0000266e blx 0x16fc                                        |         sym ();
                                                                 |     }
    0x00002672 ldr r0, [sp, 0x6c]                                |     r0 = var_6ch;
    0x00002674 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00002676 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x00002678 beq 0x2682                                        |         
    0x0000267a ldr r1, [sp, 0x74]                                |         r1 = var_74h;
    0x0000267c adds r1, 1                                        |         r1++;
    0x0000267e blx 0x16fc                                        |         sym ();
                                                                 |     }
    0x00002682 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00002684 blx 0x18b8                                        |     r0 = sym ();
    0x00002688 subs r4, r0, 0                                    |     r4 = r0 - 0;
                                                                 |     if (r4 < r0) {
    0x0000268a blt.w 0x28a0                                      |         goto label_27;
                                                                 |     }
    0x0000268e ldr r2, [pc, 0x298]                               |     
    0x00002690 ldr r3, [pc, 0x284]                               |     r3 = *(0x2918);
    0x00002692 add r2, pc                                        |     r2 = 0x4fc0;
    0x00002694 ldr r3, [r2, r3]                                  |     r3 = *(0x4fc0);
    0x00002696 ldr r2, [r3]                                      |     r2 = *(0x4fc0);
    0x00002698 ldr r3, [sp, 0x104]                               |     r3 = var_104h;
    0x0000269a eors r2, r3                                       |     r2 ^= r3;
    0x0000269c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000026a0 bne.w 0x27de                                      |         goto label_28;
                                                                 |     }
    0x000026a4 add sp, 0x10c                                     |     
    0x000026a6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_15:
    0x000026aa ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x000026ac cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000026ae beq.w 0x2474                                      |         goto label_1;
                                                                 |     }
    0x000026b2 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x000026b4 b 0x2736                                          |     goto label_29;
                                                                 | label_25:
    0x000026b6 ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
                                                                 | label_24:
    0x000026ba ldr.w r3, [sl, 0x14]                              |     r3 = *((sl + 0x14));
    0x000026be mov r2, sb                                        |     r2 = sb;
    0x000026c0 add.w r1, sl, 0x10                                |     r1 = sl + 0x10;
    0x000026c4 add r0, sp, 0x64                                  |     r0 += s2;
    0x000026c6 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x000026c8 movs r3, 1                                        |     r3 = 1;
    0x000026ca str r3, [sp]                                      |     *(sp) = r3;
    0x000026cc ldr.w r3, [sl, 0xc]                               |     r3 = *((sl + 0xc));
    0x000026d0 blx 0x17e0                                        |     fcn_000017e0 ();
    0x000026d4 ldrb.w r3, [sp, 0x64]                             |     r3 = s2;
    0x000026d8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000026da bne 0x278a                                        |         goto label_30;
                                                                 |     }
                                                                 | label_7:
    0x000026dc ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x000026e0 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x000026e2 str r7, [r5, 0x50]                                |     *((r5 + 0x50)) = r7;
    0x000026e4 ldr r3, [r4, r2]                                  |     r3 = *((r4 + r2));
    0x000026e6 adds r6, r4, r2                                   |     r6 = r4 + r2;
    0x000026e8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000026ea beq 0x27a4                                        |         goto label_31;
                                                                 |     }
    0x000026ec ldr r3, [r3]                                      |     r3 = *(r3);
    0x000026ee str r3, [r5]                                      |     *(r5) = r3;
    0x000026f0 ldr r3, [r4, r2]                                  |     r3 = *((r4 + r2));
    0x000026f2 str r5, [r3]                                      |     *(r3) = r5;
                                                                 | label_8:
    0x000026f4 ldr.w r3, [sl, 0xc]                               |     r3 = *((sl + 0xc));
    0x000026f8 adds r3, 1                                        |     r3++;
    0x000026fa str.w r3, [sl, 0xc]                               |     __asm ("str.w r3, [sl, 0xc]");
    0x000026fe b 0x2622                                          |     goto label_2;
                                                                 | label_18:
    0x00002700 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00002702 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00002704 beq.w 0x24ae                                      |         goto label_3;
                                                                 |     }
    0x00002708 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0000270a b 0x271a                                          |     goto label_32;
                                                                 | label_17:
    0x0000270c add r1, sp, 0x64                                  |     r1 += s2;
    0x0000270e add r0, sp, 0xe8                                  |     r0 += s1;
    0x00002710 blx 0x1894                                        |     memcmp (r0, r1, r2);
    0x00002714 ldr r3, [sp, 0x64]                                |     r3 = s2;
    0x00002716 str r0, [sp, 0xe8]                                |     s1 = r0;
    0x00002718 str r3, [sp, 0xf0]                                |     var_f0h = r3;
                                                                 | label_32:
    0x0000271a mov r2, r4                                        |     r2 = r4;
    0x0000271c mov r1, r5                                        |     r1 = r5;
    0x0000271e blx 0x1828                                        |     jc_get_string_array ();
    0x00002722 ldr r4, [sp, 0x64]                                |     r4 = s2;
    0x00002724 ldr r2, [sp, 0xe8]                                |     r2 = s1;
    0x00002726 b 0x24ae                                          |     goto label_3;
                                                                 | label_14:
    0x00002728 add r1, sp, 0x64                                  |     r1 += s2;
    0x0000272a add r0, sp, 0xd0                                  |     r0 += var_d0h;
    0x0000272c blx 0x1894                                        |     memcmp (r0, r1, r2);
    0x00002730 ldr r3, [sp, 0x64]                                |     r3 = s2;
    0x00002732 str r0, [sp, 0xd0]                                |     var_d0h = r0;
    0x00002734 str r3, [sp, 0xd8]                                |     var_d8h = r3;
                                                                 | label_29:
    0x00002736 mov r2, r4                                        |     r2 = r4;
    0x00002738 mov r1, r5                                        |     r1 = r5;
    0x0000273a blx 0x1828                                        |     jc_get_string_array ();
    0x0000273e ldr r4, [sp, 0x64]                                |     r4 = s2;
    0x00002740 ldr r2, [sp, 0xd0]                                |     r2 = var_d0h;
    0x00002742 b 0x2474                                          |     goto label_1;
                                                                 | label_21:
    0x00002744 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00002746 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00002748 beq.w 0x2504                                      |         goto label_4;
                                                                 |     }
    0x0000274c ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0000274e b 0x275c                                          |     goto label_33;
                                                                 | label_20:
    0x00002750 add r1, sp, 0x64                                  |     r1 += s2;
    0x00002752 blx 0x1894                                        |     memcmp (r0, r1, r2);
    0x00002756 ldr r3, [sp, 0x64]                                |     r3 = s2;
    0x00002758 str r0, [r5, 4]                                   |     *((r5 + 4)) = r0;
    0x0000275a str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
                                                                 | label_33:
    0x0000275c mov r2, r4                                        |     r2 = r4;
    0x0000275e mov r1, r6                                        |     r1 = r6;
    0x00002760 blx 0x1828                                        |     jc_get_string_array ();
    0x00002764 ldr r4, [sp, 0x64]                                |     r4 = s2;
    0x00002766 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00002768 b 0x2504                                          |     goto label_4;
                                                                 | label_22:
    0x0000276a mov r4, r2                                        |     r4 = r2;
    0x0000276c ldm r4!, {r0, r1, r2, r3}                         |     r0 = *(r4!);
                                                                 |     r1 = *((r4! + 4));
                                                                 |     r2 = *((r4! + 8));
                                                                 |     r3 = *((r4! + 12));
    0x0000276e str r0, [r5, 0x24]                                |     *((r5 + 0x24)) = r0;
    0x00002770 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00002772 str r1, [r0, 4]                                   |     *((r0 + 4)) = r1;
    0x00002774 str r2, [r0, 8]                                   |     *((r0 + 8)) = r2;
    0x00002776 str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x00002778 b 0x2522                                          |     goto label_5;
                                                                 | label_23:
    0x0000277a mov r4, r3                                        |     r4 = r3;
    0x0000277c ldm r4!, {r0, r1, r2, r3}                         |     r0 = *(r4!);
                                                                 |     r1 = *((r4! + 4));
                                                                 |     r2 = *((r4! + 8));
                                                                 |     r3 = *((r4! + 12));
    0x0000277e str r0, [r5, 0x3c]                                |     *((r5 + 0x3c)) = r0;
    0x00002780 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00002782 str r1, [r0, 4]                                   |     *((r0 + 4)) = r1;
    0x00002784 str r2, [r0, 8]                                   |     *((r0 + 8)) = r2;
    0x00002786 str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x00002788 b 0x254a                                          |     goto label_6;
                                                                 | label_30:
    0x0000278a ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x0000278c add r2, sp, 0x58                                  |     r2 += var_58h;
    0x0000278e mov r0, sl                                        |     r0 = sl;
    0x00002790 bl 0x3798                                         |     fcn_00003798 (r0, r1, r2, r3, r4);
    0x00002794 ldr.w r1, [sl, 4]                                 |     r1 = *((sl + 4));
    0x00002798 mov r0, r7                                        |     r0 = r7;
    0x0000279a blx 0x1680                                        |     fcn_00001680 ();
    0x0000279e lsls r3, r1, 2                                    |     r3 = r1 << 2;
    0x000027a0 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000027a2 b 0x26dc                                          |     goto label_7;
                                                                 | label_31:
    0x000027a4 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x000027a8 str.w r5, [sl, 8]                                 |     __asm ("str.w r5, [sl, 8]");
    0x000027aa str r0, [r1, r0]                                  |     *((r1 + r0)) = r0;
    0x000027ac str r3, [r5]                                      |     *(r5) = r3;
                                                                 |     if (r3 != 0) {
    0x000027ae cbz r3, 0x27be                                    |         
    0x000027b0 ldr r0, [r3, 0x50]                                |         r0 = *((r3 + 0x50));
    0x000027b2 ldr.w r1, [sl, 4]                                 |         r1 = *((sl + 4));
    0x000027b6 blx 0x1680                                        |         fcn_00001680 ();
    0x000027ba str.w r5, [r4, r1, lsl 2]                         |         __asm ("str.w r5, [r4, r1, lsl 2]");
                                                                 |     }
    0x000027be add.w r3, sl, 8                                   |     r3 = sl + 8;
    0x000027c2 str r3, [r6]                                      |     *(r6) = r3;
    0x000027c4 b 0x26f4                                          |     goto label_8;
                                                                 | label_13:
    0x000027c6 ldr r0, [pc, 0x164]                               |     
    0x000027c8 add r0, pc                                        |     r0 = 0x50fa;
    0x000027ca blx 0x1708                                        |     cxa_free_exception ();
                                                                 | label_16:
    0x000027ce ldr r0, [pc, 0x160]                               |     
    0x000027d0 add r0, pc                                        |     r0 = 0x5106;
    0x000027d2 blx 0x1708                                        |     cxa_free_exception ();
                                                                 | label_19:
    0x000027d6 ldr r0, [pc, 0x15c]                               |     
    0x000027d8 add r0, pc                                        |     r0 = 0x5112;
    0x000027da blx 0x1708                                        |     cxa_free_exception ();
                                                                 | label_28:
    0x000027de blx 0x17a4                                        |     cxa_end_cleanup ();
                                                                 |     do {
    0x000027e2 ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x000027e4 blx 0x17d4                                        |         sym ();
    0x000027e8 blx 0x17b0                                        |         g_free ();
                                                                 | label_12:
    0x000027ec movs r0, 0x10                                     |         r0 = 0x10;
    0x000027ee blx 0x1698                                        |         r0 = fcn_00001698 ();
    0x000027f2 mov r4, r0                                        |         r4 = r0;
    0x000027f4 blx 0x16a4                                        |         fcn_000016a4 ();
    0x000027f8 movs r3, 1                                        |         r3 = 1;
    0x000027fa mov r2, r0                                        |         r2 = r0;
    0x000027fc strd r3, r0, [sp, 0x64]                           |         __asm ("strd r3, r0, [s2]");
    0x00002800 movs r1, 1                                        |         r1 = 1;
    0x00002802 ldr r3, [pc, 0x134]                               |         
    0x00002804 mov r0, r4                                        |         r0 = r4;
    0x00002806 add r3, pc                                        |         r3 = 0x5144;
    0x00002808 bl 0x3334                                         |         fcn_00003334 (r0, r1, r2);
                                                                 | label_9:
    0x0000280c ldr r1, [sp, 0x34]                                |         r1 = var_34h;
    0x0000280e mov r0, r4                                        |         r0 = r4;
    0x00002810 ldr r2, [pc, 0x128]                               |         r2 = *(0x293c);
    0x00002812 ldr r3, [pc, 0x12c]                               |         r3 = *(0x2942);
    0x00002814 ldr r2, [r1, r2]                                  |         r2 = *((r1 + r2));
    0x00002816 ldr r1, [r1, r3]                                  |         r1 = *((r1 + r3));
    0x00002818 blx 0x1888                                        |         sym ();
    0x0000281c mov r0, r4                                        |         r0 = r4;
    0x0000281e blx 0x1714                                        |         sym ();
    0x00002822 blx 0x17b0                                        |         g_free ();
    0x00002826 add r0, sp, 0x5c                                  |         r0 += var_5ch;
    0x00002828 bl 0x374c                                         |         fcn_0000374c (r0);
    0x0000282c ldr r0, [sp, 0xe8]                                |         r0 = s1;
    0x0000282e ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00002830 cmp r0, r3                                        |         
                                                                 |         if (r0 != r3) {
    0x00002832 beq 0x283c                                        |             
    0x00002834 ldr r1, [sp, 0xf0]                                |             r1 = var_f0h;
    0x00002836 adds r1, 1                                        |             r1++;
    0x00002838 blx 0x16fc                                        |             sym ();
                                                                 |         }
    0x0000283c ldr r0, [sp, 0xd0]                                |         r0 = var_d0h;
    0x0000283e ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00002840 cmp r0, r3                                        |         
                                                                 |         if (r0 != r3) {
    0x00002842 beq 0x284c                                        |             
    0x00002844 ldr r1, [sp, 0xd8]                                |             r1 = var_d8h;
    0x00002846 adds r1, 1                                        |             r1++;
    0x00002848 blx 0x16fc                                        |             sym ();
                                                                 |         }
    0x0000284c ldr r0, [sp, 0xb8]                                |         r0 = var_b8h;
    0x0000284e ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00002850 cmp r0, r3                                        |         
                                                                 |         if (r0 != r3) {
    0x00002852 beq 0x286a                                        |             
    0x00002854 ldr r1, [sp, 0xc0]                                |             r1 = var_c0h;
    0x00002856 adds r1, 1                                        |             r1++;
    0x00002858 blx 0x16fc                                        |             sym ();
    0x0000285c b 0x286a                                          |             
                                                                 |         }
    0x0000286a ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x0000286c blx 0x17d4                                        |         sym ();
    0x00002870 ldr r0, [sp, 0x3c]                                |         r0 = var_3ch;
    0x00002872 blx 0x17d4                                        |         sym ();
    0x00002876 b 0x27e2                                          |         
                                                                 |     } while (1);
                                                                 | label_11:
    0x0000287a movs r0, 0x10                                     |     r0 = 0x10;
    0x0000287c rsbs r5, r5, 0                                    |     r5 -= ;
    0x0000287e blx 0x1698                                        |     r0 = fcn_00001698 ();
    0x00002882 mov r4, r0                                        |     r4 = r0;
    0x00002884 blx 0x16a4                                        |     fcn_000016a4 ();
    0x00002888 ldr r3, [pc, 0xb8]                                |     
    0x0000288a mov r2, r0                                        |     r2 = r0;
    0x0000288c strd r5, r0, [sp, 0x64]                           |     __asm ("strd r5, r0, [s2]");
    0x00002890 mov r1, r5                                        |     r1 = r5;
    0x00002892 mov r0, r4                                        |     r0 = r4;
    0x00002894 add r3, pc                                        |     r3 = 0x51dc;
    0x00002896 bl 0x3334                                         |     fcn_00003334 (r0, r1, r2);
    0x0000289a b 0x280c                                          |     goto label_9;
                                                                 | label_27:
    0x000028a0 movs r0, 0x10                                     |     r0 = 0x10;
    0x000028a2 rsbs r4, r4, 0                                    |     r4 -= ;
    0x000028a4 blx 0x1698                                        |     r0 = fcn_00001698 ();
    0x000028a8 mov r5, r0                                        |     r5 = r0;
    0x000028aa blx 0x16a4                                        |     fcn_000016a4 ();
    0x000028ae ldr r3, [pc, 0x98]                                |     
    0x000028b0 mov r2, r0                                        |     r2 = r0;
    0x000028b2 strd r4, r0, [sp, 0x64]                           |     __asm ("strd r4, r0, [s2]");
    0x000028b6 mov r1, r4                                        |     r1 = r4;
    0x000028b8 mov r0, r5                                        |     r0 = r5;
    0x000028ba add r3, pc                                        |     r3 = 0x5208;
    0x000028bc bl 0x3334                                         |     fcn_00003334 (r0, r1, r2);
    0x000028c0 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x000028c2 mov r0, r5                                        |     r0 = r5;
    0x000028c4 ldr r2, [pc, 0x74]                                |     r2 = *(0x293c);
    0x000028c6 ldr r3, [pc, 0x78]                                |     r3 = *(0x2942);
    0x000028c8 ldr r2, [r1, r2]                                  |     r2 = *((r1 + r2));
    0x000028ca ldr r1, [r1, r3]                                  |     r1 = *((r1 + r3));
    0x000028cc blx 0x1888                                        |     sym ();
    0x000028d0 mov r0, r5                                        |     r0 = r5;
    0x000028d2 blx 0x1714                                        |     sym ();
    0x000028d6 blx 0x17b0                                        |     g_free ();
    0x000028da blx 0x1674                                        |     fcn_00001674 ();
    0x000028de mov r0, r5                                        |     r0 = r5;
    0x000028e0 movs r1, 0x54                                     |     r1 = 0x54;
    0x000028e2 blx 0x16fc                                        |     sym ();
    0x000028e6 blx 0x181c                                        |     memcpy (r0, r1, r2);
                                                                 | label_10:
    0x000028ea movs r0, 0x10                                     |     r0 = 0x10;
    0x000028ec rsbs r6, r6, 0                                    |     r6 -= ;
    0x000028ee blx 0x1698                                        |     r0 = fcn_00001698 ();
    0x000028f2 mov r4, r0                                        |     r4 = r0;
    0x000028f4 blx 0x16a4                                        |     fcn_000016a4 ();
    0x000028f8 ldr r3, [pc, 0x50]                                |     
    0x000028fa mov r2, r0                                        |     r2 = r0;
    0x000028fc strd r6, r0, [sp, 0x64]                           |     __asm ("strd r6, r0, [s2]");
    0x00002900 mov r1, r6                                        |     r1 = r6;
    0x00002902 mov r0, r4                                        |     r0 = r4;
    0x00002904 add r3, pc                                        |     r3 = 0x5254;
    0x00002906 bl 0x3334                                         |     fcn_00003334 (r0, r1, r2);
    0x0000290a b 0x280c                                          |     goto label_9;
                                                                 | }
    ; assembly                                                           | /* r2dec pseudo code output */
                                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/html/axis-cgi/featureflag.cgi @ 0x2c20 */
                                                                         | #include <stdint.h>
                                                                         |  
    ; (fcn) fcn.00002c20 ()                                              | void fcn_00002c20 (int16_t arg1, int16_t arg3) {
                                                                         |     int16_t var_0h;
                                                                         |     int16_t var_8h;
                                                                         |     int16_t var_ch;
                                                                         |     int16_t var_10h;
                                                                         |     int16_t var_14h;
                                                                         |     int16_t var_18h;
                                                                         |     int16_t var_1ch;
                                                                         |     int16_t var_20h;
                                                                         |     int16_t var_24h;
                                                                         |     int16_t var_28h;
                                                                         |     int16_t var_2ch;
                                                                         |     int16_t var_30h;
                                                                         |     int16_t var_34h;
                                                                         |     int16_t var_38h;
                                                                         |     int16_t var_3ch;
                                                                         |     int16_t var_40h;
                                                                         |     int16_t var_44h;
                                                                         |     int16_t var_48h;
                                                                         |     int16_t var_4ch;
                                                                         |     int16_t var_50h;
                                                                         |     int16_t var_54h;
                                                                         |     void * s2;
                                                                         |     int16_t var_5ch;
                                                                         |     int16_t var_60h;
                                                                         |     int16_t var_64h;
                                                                         |     int16_t var_68h;
                                                                         |     int16_t var_78h;
                                                                         |     int16_t var_7ch;
                                                                         |     int16_t var_80h;
                                                                         |     int16_t var_90h;
                                                                         |     int16_t var_94h;
                                                                         |     r0 = arg1;
                                                                         |     r2 = arg3;
    0x00002c20 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}               |     
    0x00002c24 sub sp, 0x9c                                              |     
    0x00002c26 ldr.w r4, [pc, 0x478]                                     |     r4 = *(0x000030a0);
    0x00002c2a mov sl, r0                                                |     sl = r0;
    0x00002c2c mov r0, r2                                                |     r0 = r2;
    0x00002c2e movs r1, 0x61                                             |     r1 = 0x61;
    0x00002c30 ldr.w r3, [pc, 0x470]                                     |     
    0x00002c34 str r2, [sp, 0xc]                                         |     var_ch = r2;
    0x00002c36 add r4, pc                                                |     r4 += pc;
    0x00002c38 ldr.w r2, [pc, 0x46c]                                     |     
    0x00002c3c ldr r3, [r4, r3]                                          |     r3 = *((r4 + r3));
    0x00002c3e add r2, pc                                                |     r2 = 0x5cea;
    0x00002c40 ldr r3, [r3]                                              |     r3 = *(0x30a4);
    0x00002c42 str r3, [sp, 0x94]                                        |     var_94h = r3;
    0x00002c44 mov.w r3, 0                                               |     r3 = 0;
    0x00002c48 blx 0x17f8                                                |     sym ();
    0x00002c4c ldr.w r3, [pc, 0x45c]                                     |     r3 = *(0x000030ac);
    0x00002c50 subs r4, r0, 0                                            |     r4 = r0 - 0;
    0x00002c52 add r3, pc                                                |     r3 += pc;
    0x00002c54 str r3, [sp, 0x30]                                        |     var_30h = r3;
                                                                         |     if (r4 < r0) {
    0x00002c56 blt.w 0x2f90                                              |         goto label_8;
                                                                         |     }
    0x00002c5a add.w r3, sl, 0x18                                        |     r3 = sl + 0x18;
    0x00002c5e mov r2, r3                                                |     r2 = r3;
    0x00002c60 str r3, [sp, 0x34]                                        |     var_34h = r3;
    0x00002c62 movs r3, 1                                                |     r3 = 1;
    0x00002c64 strd r2, r3, [sl]                                         |     __asm ("strd r2, r3, [sl]");
    0x00002c68 movs r3, 0                                                |     r3 = 0;
    0x00002c6a strd r3, r3, [sl, 8]                                      |     __asm ("strd r3, r3, [sl, 8]");
    0x00002c6e strd r3, r3, [sl, 0x14]                                   |     __asm ("strd r3, r3, [sl, 0x14]");
    0x00002c72 ldr.w r3, [pc, 0x43c]                                     |     
    0x00002c76 add r3, pc                                                |     r3 = 0x5d2c;
    0x00002c78 str r3, [sp, 0x20]                                        |     var_20h = r3;
    0x00002c7a ldr.w r3, [pc, 0x438]                                     |     
    0x00002c7e add r3, pc                                                |     r3 = 0x5d38;
    0x00002c80 str r3, [sp, 0x24]                                        |     var_24h = r3;
    0x00002c82 movw r3, 0x6907                                           |     
    0x00002c86 movt r3, 0xc70f                                           |     r3 = 0xc70f6907;
    0x00002c8a str r3, [sp, 0x28]                                        |     var_28h = r3;
    0x00002c8c mov.w r3, 0x3f800000                                      |     r3 = 0x3f800000;
    0x00002c90 str.w r3, [sl, 0x10]                                      |     __asm ("str.w r3, [sl, 0x10]");
                                                                         | label_1:
    0x00002c94 ldr r2, [sp, 0x20]                                        |     r2 = var_20h;
    0x00002c96 movs r1, 0x65                                             |     r1 = 0x65;
    0x00002c98 ldr r0, [sp, 0xc]                                         |     r0 = var_ch;
    0x00002c9a blx 0x17f8                                                |     r0 = sym ();
    0x00002c9e subs r4, r0, 0                                            |     r4 = r0 - 0;
                                                                         |     if (r4 < r0) {
    0x00002ca0 blt.w 0x3056                                              |         goto label_9;
                                                                         |     }
                                                                         |     if (r4 == r0) {
    0x00002ca4 beq.w 0x2f02                                              |         goto label_10;
                                                                         |     }
    0x00002ca8 movs r4, 0                                                |     r4 = 0;
    0x00002caa ldr r1, [sp, 0x24]                                        |     r1 = var_24h;
    0x00002cac ldr r0, [sp, 0xc]                                         |     r0 = var_ch;
    0x00002cae add r3, sp, 0x40                                          |     r3 += var_40h;
    0x00002cb0 add r2, sp, 0x38                                          |     r2 += var_38h;
    0x00002cb2 str r4, [sp, 0x40]                                        |     var_40h = r4;
    0x00002cb4 blx 0x16d4                                                |     r0 = fcn_000016d4 ();
    0x00002cb8 subs r4, r0, 0                                            |     r4 = r0 - 0;
                                                                         |     if (r4 < r0) {
    0x00002cba blt.w 0x2f46                                              |         goto label_11;
                                                                         |     }
    0x00002cbe ldr r4, [sp, 0x38]                                        |     r4 = var_38h;
    0x00002cc0 add r3, sp, 0x68                                          |     r3 += var_68h;
    0x00002cc2 movs r2, 1                                                |     r2 = 1;
    0x00002cc4 str r3, [sp, 8]                                           |     var_8h = r3;
    0x00002cc6 str r3, [sp, 0x60]                                        |     var_60h = r3;
                                                                         |     if (r4 != 0) {
    0x00002cc8 cbz r4, 0x2cd2                                            |         
    0x00002cca mov r0, r4                                                |         r0 = r4;
    0x00002ccc blx 0x1840                                                |         r0 = sym ();
    0x00002cd0 adds r2, r4, r0                                           |         r2 = r4 + r0;
                                                                         |     }
    0x00002cd2 add r3, sp, 0x60                                          |     r3 += var_60h;
    0x00002cd4 mov r1, r4                                                |     r1 = r4;
    0x00002cd6 mov r0, r3                                                |     r0 = r3;
    0x00002cd8 str r3, [sp, 0x2c]                                        |     var_2ch = r3;
    0x00002cda bl 0x1a38                                                 |     fcn_00001a38 (r0, r1, r2);
    0x00002cde add r2, sp, 0x80                                          |     r2 += var_80h;
    0x00002ce0 ldr r3, [sp, 0x60]                                        |     r3 = var_60h;
    0x00002ce2 str r2, [sp, 0x18]                                        |     var_18h = r2;
    0x00002ce4 str r2, [sp, 0x78]                                        |     var_78h = r2;
    0x00002ce6 ldr r2, [sp, 8]                                           |     r2 = var_8h;
    0x00002ce8 cmp r3, r2                                                |     
    0x00002cea itete eq                                                  |     
                                                                         |     if (r3 != r2) {
    0x00002cec moveq r3, r2                                              |         r3 = r2;
                                                                         |     }
                                                                         |     if (r3 == r2) {
    0x00002cee strne r3, [sp, 0x78]                                      |         var_78h = r3;
                                                                         |     }
                                                                         |     if (r3 != r2) {
    0x00002cf0 ldmeq r3, {r0, r1, r2, r3}                                |         r0 = *(r3);
                                                                         |         r1 = *((r3 + 4));
                                                                         |         r2 = *((r3 + 8));
                                                                         |         r3 = *((r3 + 12));
                                                                         |     }
                                                                         |     if (r3 == r2) {
    0x00002cf2 ldrne r3, [sp, 0x68]                                      |         r3 = var_68h;
                                                                         |     }
    0x00002cf4 itet eq                                                   |     
                                                                         |     if (r3 != r2) {
    0x00002cf6 ldreq r4, [sp, 0x18]                                      |         r4 = var_18h;
                                                                         |     }
                                                                         |     if (r3 == r2) {
    0x00002cf8 strne r3, [sp, 0x80]                                      |         var_80h = r3;
                                                                         |     }
                                                                         |     if (r3 != r2) {
    0x00002cfa stmeq r4, {r0, r1, r2, r3}                                |         *(r4) = r0;
                                                                         |         *((r4 + 4)) = r1;
                                                                         |         *((r4 + 8)) = r2;
                                                                         |         *((r4 + 12)) = r3;
                                                                         |     }
    0x00002cfe movs r0, 0x24                                             |     r0 = 0x24;
    0x00002d00 ldr r3, [sp, 0x40]                                        |     r3 = var_40h;
    0x00002d02 ldr r2, [sp, 0x64]                                        |     r2 = var_64h;
    0x00002d04 ldr r1, [sp, 8]                                           |     r1 = var_8h;
    0x00002d06 subs r3, 0                                                |     
    0x00002d08 it ne                                                     |     
                                                                         |     if (r3 == 0) {
    0x00002d0a movne r3, 1                                               |         r3 = 1;
                                                                         |     }
    0x00002d0c str r2, [sp, 0x7c]                                        |     var_7ch = r2;
    0x00002d0e movs r2, 0                                                |     r2 = 0;
    0x00002d10 str r1, [sp, 0x60]                                        |     var_60h = r1;
    0x00002d12 strb.w r3, [sp, 0x90]                                     |     var_90h = r3;
    0x00002d16 str r2, [sp, 0x64]                                        |     var_64h = r2;
    0x00002d18 strb.w r2, [sp, 0x68]                                     |     var_68h = r2;
    0x00002d1c blx 0x15f8                                                |     fcn_000015f8 ();
    0x00002d20 ldrd r6, r4, [sp, 0x78]                                   |     __asm ("ldrd r6, r4, [var_78h]");
    0x00002d24 mov r5, r0                                                |     r5 = r0;
    0x00002d26 movs r3, 0                                                |     r3 = 0;
    0x00002d28 str r3, [r0], 4                                           |     *(r0) = r3;
                                                                         |     r0 += 4;
    0x00002d2c add.w r3, r5, 0xc                                         |     r3 = r5 + 0xc;
    0x00002d30 clz r2, r6                                                |     r2 &= r6;
    0x00002d34 str r3, [sp, 0x14]                                        |     var_14h = r3;
    0x00002d36 str r3, [r5, 4]                                           |     *((r5 + 4)) = r3;
    0x00002d38 rsbs r3, r4, 0                                            |     r3 = r4 - ;
    0x00002d3a lsrs r2, r2, 5                                            |     r2 >>= 5;
    0x00002d3c cmp r6, r3                                                |     
    0x00002d3e it eq                                                     |     
                                                                         |     if (r6 != r3) {
    0x00002d40 moveq r2, 0                                               |         r2 = 0;
                                                                         |     }
    0x00002d42 cmp r2, 0                                                 |     
                                                                         |     if (r2 != 0) {
    0x00002d44 bne.w 0x2f28                                              |         goto label_12;
                                                                         |     }
    0x00002d48 cmp r4, 0xf                                               |     
    0x00002d4a str r4, [sp, 0x58]                                        |     s2 = r4;
                                                                         |     if (r4 > 0xf) {
    0x00002d4c bhi.w 0x2eac                                              |         goto label_13;
                                                                         |     }
    0x00002d50 cmp r4, 1                                                 |     
                                                                         |     if (r4 != 1) {
    0x00002d52 bne.w 0x2ea0                                              |         goto label_14;
                                                                         |     }
    0x00002d56 ldr r2, [sp, 0x14]                                        |     r2 = var_14h;
    0x00002d58 ldrb r3, [r6]                                             |     r3 = *(r6);
    0x00002d5a strb r3, [r5, 0xc]                                        |     *((r5 + 0xc)) = r3;
                                                                         | label_3:
    0x00002d5c movs r3, 0                                                |     r3 = 0;
    0x00002d5e str r4, [r5, 8]                                           |     *((r5 + 8)) = r4;
    0x00002d60 strb r3, [r2, r4]                                         |     *((r2 + r4)) = r3;
    0x00002d62 ldrb.w r3, [sp, 0x90]                                     |     r3 = var_90h;
    0x00002d66 ldr r1, [r5, 8]                                           |     r1 = *((r5 + 8));
    0x00002d68 ldr r2, [sp, 0x28]                                        |     r2 = var_28h;
    0x00002d6a strb r3, [r5, 0x1c]                                       |     *((r5 + 0x1c)) = r3;
    0x00002d6c ldr r0, [r5, 4]                                           |     r0 = *((r5 + 4));
    0x00002d6e blx 0x1720                                                |     libc_start_main (r0, r1, r2, r3, r4, r5, r6);
    0x00002d72 ldr.w sb, [sl, 4]                                         |     sb = *((sl + 4));
    0x00002d76 mov r7, r0                                                |     r7 = r0;
    0x00002d78 mov r1, sb                                                |     r1 = sb;
    0x00002d7a blx 0x1680                                                |     fcn_00001680 ();
    0x00002d7e ldr.w r3, [sl]                                            |     r3 = *(sl);
    0x00002d82 ldr.w r8, [r3, r1, lsl 2]                                 |     offset_0 = r1 << 2;
                                                                         |     r8 = *((r3 + offset_0));
    0x00002d86 lsls r3, r1, 2                                            |     r3 = r1 << 2;
    0x00002d88 str r3, [sp, 0x1c]                                        |     var_1ch = r3;
    0x00002d8a cmp.w r8, 0                                               |     
                                                                         |     if (r8 == 0) {
    0x00002d8e beq 0x2e5e                                                |         goto label_15;
                                                                         |     }
    0x00002d90 ldr.w r3, [r8]                                            |     r3 = *(r8);
    0x00002d94 str.w sl, [sp, 0x10]                                      |     __asm ("str.w sl, [var_10h]");
    0x00002d98 ldr.w fp, [r3, 0x20]                                      |     fp = *((r3 + 0x20));
    0x00002d9c mov r6, r3                                                |     r6 = r3;
    0x00002d9e mov sl, fp                                                |     sl = fp;
    0x00002da0 mov fp, r1                                                |     
    0x00002da2 b 0x2dbe                                                  |     
                                                                         |     while (r7 != sl) {
                                                                         | label_0:
    0x00002da4 ldr r4, [r6]                                              |         r4 = *(r6);
    0x00002da6 cmp r4, 0                                                 |         
                                                                         |         if (r4 == 0) {
    0x00002da8 beq 0x2e5a                                                |             goto label_16;
                                                                         |         }
    0x00002daa ldr.w sl, [r4, 0x20]                                      |         sl = *((r4 + 0x20));
    0x00002dae mov r1, sb                                                |         r1 = sb;
    0x00002db0 mov r8, r6                                                |         r8 = r6;
    0x00002db2 mov r0, sl                                                |         r0 = sl;
    0x00002db4 blx 0x1680                                                |         fcn_00001680 ();
    0x00002db8 cmp fp, r1                                                |         
                                                                         |         if (fp != r1) {
    0x00002dba bne 0x2e5a                                                |             goto label_16;
                                                                         |         }
    0x00002dbc mov r6, r4                                                |         r6 = r4;
    0x00002dbe cmp r7, sl                                                |         
    0x00002dc0 bne 0x2da4                                                |         
                                                                         |     }
    0x00002dc2 ldr r2, [r5, 8]                                           |     r2 = *((r5 + 8));
    0x00002dc4 ldr r3, [r6, 8]                                           |     r3 = *((r6 + 8));
    0x00002dc6 cmp r2, r3                                                |     
                                                                         |     if (r2 != r3) {
    0x00002dc8 bne 0x2da4                                                |         goto label_0;
                                                                         |     }
    0x00002dca ldr r4, [r5, 4]                                           |     r4 = *((r5 + 4));
    0x00002dcc ldr r1, [r6, 4]                                           |     r1 = *((r6 + 4));
                                                                         |     if (r2 == 0) {
    0x00002dce cbz r2, 0x2dda                                            |         goto label_17;
                                                                         |     }
    0x00002dd0 mov r0, r4                                                |     r0 = r4;
    0x00002dd2 blx 0x18a0                                                |     r0 = jc_specific_error ();
    0x00002dd6 cmp r0, 0                                                 |     
                                                                         |     if (r0 != 0) {
    0x00002dd8 bne 0x2da4                                                |         goto label_0;
                                                                         |     }
                                                                         | label_17:
    0x00002dda ldr.w r3, [r8]                                            |     r3 = *(r8);
    0x00002dde ldr.w sl, [sp, 0x10]                                      |     sl = var_10h;
    0x00002de2 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x00002de4 beq 0x2e5e                                                |         goto label_15;
                                                                         |     }
    0x00002de6 ldr r3, [sp, 0x14]                                        |     r3 = var_14h;
    0x00002de8 cmp r3, r4                                                |     
                                                                         |     if (r3 != r4) {
    0x00002dea beq 0x2df6                                                |         
    0x00002dec ldr r1, [r5, 0xc]                                         |         r1 = *((r5 + 0xc));
    0x00002dee mov r0, r4                                                |         r0 = r4;
    0x00002df0 adds r1, 1                                                |         r1++;
    0x00002df2 blx 0x16fc                                                |         sym ();
                                                                         |     }
    0x00002df6 mov r0, r5                                                |     r0 = r5;
    0x00002df8 movs r1, 0x24                                             |     r1 = 0x24;
    0x00002dfa blx 0x16fc                                                |     sym ();
                                                                         | label_2:
    0x00002dfe ldr r0, [sp, 0x78]                                        |     r0 = var_78h;
    0x00002e00 ldr r3, [sp, 0x18]                                        |     r3 = var_18h;
    0x00002e02 cmp r0, r3                                                |     
                                                                         |     if (r0 != r3) {
    0x00002e04 beq 0x2e0e                                                |         
    0x00002e06 ldr r1, [sp, 0x80]                                        |         r1 = var_80h;
    0x00002e08 adds r1, 1                                                |         r1++;
    0x00002e0a blx 0x16fc                                                |         sym ();
                                                                         |     }
    0x00002e0e ldr r0, [sp, 0x60]                                        |     r0 = var_60h;
    0x00002e10 ldr r3, [sp, 8]                                           |     r3 = var_8h;
    0x00002e12 cmp r0, r3                                                |     
                                                                         |     if (r0 != r3) {
    0x00002e14 beq 0x2e1e                                                |         
    0x00002e16 ldr r1, [sp, 0x68]                                        |         r1 = var_68h;
    0x00002e18 adds r1, 1                                                |         r1++;
    0x00002e1a blx 0x16fc                                                |         sym ();
                                                                         |     }
    0x00002e1e ldr r0, [sp, 0xc]                                         |     r0 = var_ch;
    0x00002e20 blx 0x18b8                                                |     r0 = sym ();
    0x00002e24 subs r4, r0, 0                                            |     r4 = r0 - 0;
                                                                         |     if (r4 >= r0) {
    0x00002e26 bge.w 0x2c94                                              |         goto label_1;
                                                                         |     }
    0x00002e2a movs r0, 0x10                                             |     r0 = 0x10;
    0x00002e2c rsbs r4, r4, 0                                            |     r4 -= ;
    0x00002e2e blx 0x1698                                                |     r0 = fcn_00001698 ();
    0x00002e32 mov r5, r0                                                |     r5 = r0;
    0x00002e34 blx 0x16a4                                                |     fcn_000016a4 ();
    0x00002e38 ldr r3, [pc, 0x27c]                                       |     
    0x00002e3a mov r2, r0                                                |     r2 = r0;
    0x00002e3c str r0, [sp, 0x54]                                        |     var_54h = r0;
    0x00002e3e mov r1, r4                                                |     r1 = r4;
    0x00002e40 mov r0, r5                                                |     r0 = r5;
    0x00002e42 str r4, [sp, 0x50]                                        |     var_50h = r4;
    0x00002e44 add r3, pc                                                |     r3 = 0x5f00;
    0x00002e46 bl 0x3334                                                 |     fcn_00003334 (r0, r1, r2);
    0x00002e4a ldr r3, [pc, 0x270]                                       |     r3 = *(0x30be);
    0x00002e4c mov r0, r5                                                |     r0 = r5;
    0x00002e4e ldr r1, [sp, 0x30]                                        |     r1 = var_30h;
    0x00002e50 ldr r2, [r1, r3]                                          |     r2 = *((r1 + r3));
    0x00002e52 ldr r3, [pc, 0x26c]                                       |     r3 = *(0x30c2);
    0x00002e54 ldr r1, [r1, r3]                                          |     r1 = *((r1 + r3));
    0x00002e56 blx 0x1888                                                |     sym ();
                                                                         | label_16:
    0x00002e5a ldr.w sl, [sp, 0x10]                                      |     sl = var_10h;
                                                                         | label_15:
    0x00002e5e ldr.w r3, [sl, 0x14]                                      |     r3 = *((sl + 0x14));
    0x00002e62 mov r2, sb                                                |     r2 = sb;
    0x00002e64 add.w r1, sl, 0x10                                        |     r1 = sl + 0x10;
    0x00002e68 add r0, sp, 0x58                                          |     r0 += s2;
    0x00002e6a str r3, [sp, 0x3c]                                        |     var_3ch = r3;
    0x00002e6c movs r3, 1                                                |     r3 = 1;
    0x00002e6e str r3, [sp]                                              |     *(sp) = r3;
    0x00002e70 ldr.w r3, [sl, 0xc]                                       |     r3 = *((sl + 0xc));
    0x00002e74 blx 0x17e0                                                |     fcn_000017e0 ();
    0x00002e78 ldrb.w r3, [sp, 0x58]                                     |     r3 = s2;
                                                                         |     if (r3 != 0) {
    0x00002e7c cbnz r3, 0x2ec6                                           |         goto label_18;
                                                                         |     }
                                                                         | label_4:
    0x00002e7e ldr.w r4, [sl]                                            |     r4 = *(sl);
    0x00002e82 ldr r2, [sp, 0x1c]                                        |     r2 = var_1ch;
    0x00002e84 str r7, [r5, 0x20]                                        |     *((r5 + 0x20)) = r7;
    0x00002e86 ldr r3, [r4, r2]                                          |     r3 = *((r4 + r2));
    0x00002e88 adds r6, r4, r2                                           |     r6 = r4 + r2;
                                                                         |     if (r3 == 0) {
    0x00002e8a cbz r3, 0x2ee0                                            |         goto label_19;
                                                                         |     }
    0x00002e8c ldr r3, [r3]                                              |     r3 = *(r3);
    0x00002e8e str r3, [r5]                                              |     *(r5) = r3;
    0x00002e90 ldr r3, [r4, r2]                                          |     r3 = *((r4 + r2));
    0x00002e92 str r5, [r3]                                              |     *(r3) = r5;
                                                                         | label_5:
    0x00002e94 ldr.w r3, [sl, 0xc]                                       |     r3 = *((sl + 0xc));
    0x00002e98 adds r3, 1                                                |     r3++;
    0x00002e9a str.w r3, [sl, 0xc]                                       |     __asm ("str.w r3, [sl, 0xc]");
    0x00002e9e b 0x2dfe                                                  |     goto label_2;
                                                                         | label_14:
    0x00002ea0 ldr r2, [sp, 0x14]                                        |     r2 = var_14h;
    0x00002ea2 cmp r4, 0                                                 |     
                                                                         |     if (r4 == 0) {
    0x00002ea4 beq.w 0x2d5c                                              |         goto label_3;
                                                                         |     }
    0x00002ea8 ldr r0, [sp, 0x14]                                        |     r0 = var_14h;
    0x00002eaa b 0x2eb8                                                  |     goto label_20;
                                                                         | label_13:
    0x00002eac add r1, sp, 0x58                                          |     r1 += s2;
    0x00002eae blx 0x1894                                                |     memcmp (r0, r1, r2);
    0x00002eb2 ldr r3, [sp, 0x58]                                        |     r3 = s2;
    0x00002eb4 str r0, [r5, 4]                                           |     *((r5 + 4)) = r0;
    0x00002eb6 str r3, [r5, 0xc]                                         |     *((r5 + 0xc)) = r3;
                                                                         | label_20:
    0x00002eb8 mov r2, r4                                                |     r2 = r4;
    0x00002eba mov r1, r6                                                |     r1 = r6;
    0x00002ebc blx 0x1828                                                |     jc_get_string_array ();
    0x00002ec0 ldr r4, [sp, 0x58]                                        |     r4 = s2;
    0x00002ec2 ldr r2, [r5, 4]                                           |     r2 = *((r5 + 4));
    0x00002ec4 b 0x2d5c                                                  |     goto label_3;
                                                                         | label_18:
    0x00002ec6 ldr r1, [sp, 0x5c]                                        |     r1 = var_5ch;
    0x00002ec8 add r2, sp, 0x3c                                          |     r2 += var_3ch;
    0x00002eca mov r0, sl                                                |     r0 = sl;
    0x00002ecc bl 0x3868                                                 |     fcn_00003868 (r0, r1, r2, r3, r4);
    0x00002ed0 ldr.w r1, [sl, 4]                                         |     r1 = *((sl + 4));
    0x00002ed4 mov r0, r7                                                |     r0 = r7;
    0x00002ed6 blx 0x1680                                                |     fcn_00001680 ();
    0x00002eda lsls r3, r1, 2                                            |     r3 = r1 << 2;
    0x00002edc str r3, [sp, 0x1c]                                        |     var_1ch = r3;
    0x00002ede b 0x2e7e                                                  |     goto label_4;
                                                                         | label_19:
    0x00002ee0 ldr.w r3, [sl, 8]                                         |     r3 = *((sl + 8));
    0x00002ee4 str.w r5, [sl, 8]                                         |     __asm ("str.w r5, [sl, 8]");
    0x00002ee8 str r3, [r5]                                              |     *(r5) = r3;
                                                                         |     if (r3 != 0) {
    0x00002eea cbz r3, 0x2efa                                            |         
    0x00002eec ldr r0, [r3, 0x20]                                        |         r0 = *((r3 + 0x20));
    0x00002eee ldr.w r1, [sl, 4]                                         |         r1 = *((sl + 4));
    0x00002ef2 blx 0x1680                                                |         fcn_00001680 ();
    0x00002ef6 str.w r5, [r4, r1, lsl 2]                                 |         __asm ("str.w r5, [r4, r1, lsl 2]");
                                                                         |     }
    0x00002efa add.w r3, sl, 8                                           |     r3 = sl + 8;
    0x00002efe str r3, [r6]                                              |     *(r6) = r3;
    0x00002f00 b 0x2e94                                                  |     goto label_5;
                                                                         | label_10:
    0x00002f02 ldr r0, [sp, 0xc]                                         |     r0 = var_ch;
    0x00002f04 blx 0x18b8                                                |     r0 = sym ();
    0x00002f08 subs r4, r0, 0                                            |     r4 = r0 - 0;
                                                                         |     if (r4 < r0) {
    0x00002f0a blt 0x2ff8                                                |         goto label_21;
                                                                         |     }
    0x00002f0c ldr r2, [pc, 0x1b4]                                       |     
    0x00002f0e ldr r3, [pc, 0x194]                                       |     r3 = *(0x30a6);
    0x00002f10 add r2, pc                                                |     r2 = 0x5fd8;
    0x00002f12 ldr r3, [r2, r3]                                          |     r3 = *(0x5fd8);
    0x00002f14 ldr r2, [r3]                                              |     r2 = *(0x5fd8);
    0x00002f16 ldr r3, [sp, 0x94]                                        |     r3 = var_94h;
    0x00002f18 eors r2, r3                                               |     r2 ^= r3;
    0x00002f1a mov.w r3, 0                                               |     r3 = 0;
                                                                         |     if (r2 == r3) {
    0x00002f1e bne 0x2f30                                                |         
    0x00002f20 mov r0, sl                                                |         r0 = sl;
    0x00002f22 add sp, 0x9c                                              |         
    0x00002f24 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}                |         
                                                                         | label_12:
    0x00002f28 ldr r0, [pc, 0x19c]                                       |         
    0x00002f2a add r0, pc                                                |         r0 = 0x5ff6;
    0x00002f2c blx 0x1708                                                |         cxa_free_exception ();
                                                                         |     }
    0x00002f30 blx 0x17a4                                                |     cxa_end_cleanup ();
    0x00002f34 b 0x2fc6                                                  |     goto label_7;
                                                                         | label_11:
    0x00002f46 movs r0, 0x10                                             |     r0 = 0x10;
    0x00002f48 rsbs r4, r4, 0                                            |     r4 -= ;
    0x00002f4a blx 0x1698                                                |     r0 = fcn_00001698 ();
    0x00002f4e mov r5, r0                                                |     r5 = r0;
    0x00002f50 blx 0x16a4                                                |     fcn_000016a4 ();
    0x00002f54 ldr r3, [pc, 0x174]                                       |     
    0x00002f56 mov r2, r0                                                |     r2 = r0;
    0x00002f58 str r0, [sp, 0x4c]                                        |     var_4ch = r0;
    0x00002f5a mov r1, r4                                                |     r1 = r4;
    0x00002f5c mov r0, r5                                                |     r0 = r5;
    0x00002f5e str r4, [sp, 0x48]                                        |     var_48h = r4;
    0x00002f60 add r3, pc                                                |     r3 = 0x6030;
    0x00002f62 bl 0x3334                                                 |     fcn_00003334 (r0, r1, r2);
    0x00002f66 ldr r3, [pc, 0x154]                                       |     r3 = *(0x30be);
    0x00002f68 mov r0, r5                                                |     r0 = r5;
    0x00002f6a ldr r1, [sp, 0x30]                                        |     r1 = var_30h;
    0x00002f6c ldr r2, [r1, r3]                                          |     r2 = *((r1 + r3));
    0x00002f6e ldr r3, [pc, 0x150]                                       |     r3 = *(0x30c2);
    0x00002f70 ldr r1, [r1, r3]                                          |     r1 = *((r1 + r3));
    0x00002f72 blx 0x1888                                                |     sym ();
    0x00002f74 stc p8, c6, [sl], {0x68}                                  |     __asm ("stc p8, c6, [sl], {0x68}");
    0x00002f78 ldr r3, [sp, 0x14]                                        |     r3 = var_14h;
    0x00002f7a cmp r3, r0                                                |     
                                                                         |     if (r3 != r0) {
    0x00002f7c beq 0x2f86                                                |         
    0x00002f7e ldr r1, [r5, 0xc]                                         |         r1 = *((r5 + 0xc));
    0x00002f80 adds r1, 1                                                |         r1++;
    0x00002f82 blx 0x16fc                                                |         sym ();
                                                                         |     }
    0x00002f86 movs r1, 0x24                                             |     r1 = 0x24;
    0x00002f88 mov r0, r5                                                |     r0 = r5;
    0x00002f8a blx 0x16fc                                                |     sym ();
    0x00002f8e b 0x308a                                                  |     goto label_22;
                                                                         | label_8:
    0x00002f90 movs r0, 0x10                                             |     r0 = 0x10;
    0x00002f92 rsbs r4, r4, 0                                            |     r4 -= ;
    0x00002f94 blx 0x1698                                                |     r0 = fcn_00001698 ();
    0x00002f98 mov r5, r0                                                |     r5 = r0;
    0x00002f9a blx 0x16a4                                                |     fcn_000016a4 ();
    0x00002f9e ldr r3, [pc, 0x130]                                       |     
    0x00002fa0 mov r2, r0                                                |     r2 = r0;
    0x00002fa2 strd r4, r0, [sp, 0x58]                                   |     __asm ("strd r4, r0, [var_5ch]");
    0x00002fa6 mov r1, r4                                                |     r1 = r4;
    0x00002fa8 mov r0, r5                                                |     r0 = r5;
    0x00002faa add r3, pc                                                |     r3 = 0x6080;
    0x00002fac bl 0x3334                                                 |     fcn_00003334 (r0, r1, r2);
    0x00002fb0 ldr r1, [sp, 0x30]                                        |     r1 = var_30h;
    0x00002fb2 mov r0, r5                                                |     r0 = r5;
    0x00002fb4 ldr r2, [pc, 0x104]                                       |     r2 = *(0x30bc);
    0x00002fb6 ldr r3, [pc, 0x108]                                       |     r3 = *(0x30c2);
    0x00002fb8 ldr r2, [r1, r2]                                          |     r2 = *((r1 + r2));
    0x00002fba ldr r1, [r1, r3]                                          |     r1 = *((r1 + r3));
    0x00002fbc blx 0x1888                                                |     sym ();
                                                                         | label_6:
    0x00002fc0 mov r0, r5                                                |     r0 = r5;
    0x00002fc2 blx 0x1714                                                |     sym ();
                                                                         | label_7:
    0x00002fc6 ldr.w r4, [sl, 8]                                         |     r4 = *((sl + 8));
                                                                         |     if (r4 == 0) {
    0x00002fca cbz r4, 0x302a                                            |         goto label_23;
                                                                         |     }
                                                                         |     do {
    0x00002fcc ldr r0, [r4, 4]                                           |         r0 = *((r4 + 4));
    0x00002fce add.w r3, r4, 0xc                                         |         r3 = r4 + 0xc;
    0x00002fd2 ldr r5, [r4]                                              |         r5 = *(r4);
    0x00002fd4 cmp r0, r3                                                |         
                                                                         |         if (r0 != r3) {
    0x00002fd6 beq 0x2fe0                                                |             
    0x00002fd8 ldr r1, [r4, 0xc]                                         |             r1 = *((r4 + 0xc));
    0x00002fda adds r1, 1                                                |             r1++;
    0x00002fdc blx 0x16fc                                                |             sym ();
                                                                         |         }
    0x00002fe0 mov r0, r4                                                |         r0 = r4;
    0x00002fe2 mov r4, r5                                                |         r4 = r5;
    0x00002fe4 movs r1, 0x24                                             |         r1 = 0x24;
    0x00002fe6 blx 0x16fc                                                |         sym ();
                                                                         |         if (r4 == 0) {
    0x00002fea cbz r4, 0x302a                                            |             goto label_23;
                                                                         |         }
    0x00002fec b 0x2fcc                                                  |         
                                                                         |     } while (1);
                                                                         | label_21:
    0x00002ff8 movs r0, 0x10                                             |     r0 = 0x10;
    0x00002ffa rsbs r4, r4, 0                                            |     r4 -= ;
    0x00002ffc blx 0x1698                                                |     r0 = fcn_00001698 ();
    0x00003000 mov r5, r0                                                |     r5 = r0;
    0x00003002 blx 0x16a4                                                |     fcn_000016a4 ();
    0x00003006 ldr r3, [pc, 0xcc]                                        |     
    0x00003008 mov r2, r0                                                |     r2 = r0;
    0x0000300a str r0, [sp, 0x5c]                                        |     var_5ch = r0;
    0x0000300c mov r1, r4                                                |     r1 = r4;
    0x0000300e mov r0, r5                                                |     r0 = r5;
    0x00003010 str r4, [sp, 0x58]                                        |     s2 = r4;
    0x00003012 add r3, pc                                                |     r3 = 0x60ec;
    0x00003014 bl 0x3334                                                 |     fcn_00003334 (r0, r1, r2);
    0x00003016 vst4.32 {d4[0], d5[0], d6[0], d7[0]}, [lr:0x80], r8       |     __asm ("vst4.32 {d4[0], d5[0], d6[0], d7[0]}, [lr:0x80], r8");
    0x0000301a mov r0, r5                                                |     r0 = r5;
    0x0000301c ldr r1, [sp, 0x30]                                        |     r1 = var_30h;
    0x0000301e ldr r2, [r1, r3]                                          |     r2 = *((r1 + r3));
    0x00003020 ldr r3, [pc, 0x9c]                                        |     r3 = *(0x30c0);
    0x00003022 ldr r1, [r1, r3]                                          |     r1 = *((r1 + r3));
    0x00003024 blx 0x1888                                                |     sym ();
    0x00003028 b 0x2fc0                                                  |     goto label_6;
                                                                         | label_23:
    0x0000302a ldr.w r2, [sl, 4]                                         |     r2 = *((sl + 4));
    0x0000302e mov r1, r4                                                |     r1 = r4;
    0x00003030 ldr.w r0, [sl]                                            |     r0 = *(sl);
    0x00003034 lsls r2, r2, 2                                            |     r2 <<= 2;
    0x00003036 blx 0x16ec                                                |     fcn_000016ec ();
    0x0000303a ldr.w r0, [sl]                                            |     r0 = *(sl);
    0x0000303e ldr r3, [sp, 0x34]                                        |     r3 = var_34h;
    0x00003040 ldr.w r1, [sl, 4]                                         |     r1 = *((sl + 4));
    0x00003044 strd r4, r4, [sl, 8]                                      |     __asm ("strd r4, r4, [sl, 8]");
    0x00003048 cmp r3, r0                                                |     
                                                                         |     if (r3 != r0) {
    0x0000304a beq 0x3052                                                |         
    0x0000304c lsls r1, r1, 2                                            |         r1 <<= 2;
    0x0000304e blx 0x16fc                                                |         sym ();
                                                                         |     }
    0x00003052 blx 0x17b0                                                |     g_free ();
                                                                         | label_9:
    0x00003056 movs r0, 0x10                                             |     r0 = 0x10;
    0x00003058 rsbs r4, r4, 0                                            |     r4 -= ;
    0x0000305a blx 0x1698                                                |     r0 = fcn_00001698 ();
    0x0000305e mov r5, r0                                                |     r5 = r0;
    0x00003060 blx 0x16a4                                                |     fcn_000016a4 ();
    0x00003064 ldr r3, [pc, 0x70]                                        |     
    0x00003066 mov r2, r0                                                |     r2 = r0;
    0x00003068 str r0, [sp, 0x44]                                        |     var_44h = r0;
    0x0000306a mov r1, r4                                                |     r1 = r4;
    0x0000306c mov r0, r5                                                |     r0 = r5;
    0x0000306e str r4, [sp, 0x40]                                        |     var_40h = r4;
    0x00003070 add r3, pc                                                |     r3 = 0x614c;
    0x00003072 bl 0x3334                                                 |     fcn_00003334 (r0, r1, r2);
    0x00003076 ldr r3, [pc, 0x44]                                        |     r3 = *(0x30be);
    0x00003078 mov r0, r5                                                |     r0 = r5;
    0x0000307a ldr r1, [sp, 0x30]                                        |     r1 = var_30h;
    0x0000307c ldr r2, [r1, r3]                                          |     r2 = *((r1 + r3));
    0x0000307e ldr r3, [pc, 0x40]                                        |     r3 = *(0x30c2);
    0x00003080 ldr r1, [r1, r3]                                          |     r1 = *((r1 + r3));
    0x00003082 blx 0x1888                                                |     sym ();
    0x00003086 blx 0x1870                                                |     gxx_personality_v0 ();
                                                                         | label_22:
    0x0000308a add r0, sp, 0x78                                          |     r0 += var_78h;
    0x0000308c blx 0x17d4                                                |     sym ();
    0x00003090 ldr r0, [sp, 0x2c]                                        |     r0 = var_2ch;
    0x00003092 blx 0x17d4                                                |     sym ();
    0x00003096 b 0x2fc6                                                  |     goto label_7;
                                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/html/axis-cgi/featureflag.cgi @ 0x34b0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000034b0 ()                                      | void fcn_000034b0 (int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_bp_ch;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     void * s2;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     void * s1;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int32_t var_ch_2;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int32_t var_4h_2;
                                                                 |     int32_t var_8h_3;
                                                                 |     int32_t var_ch_3;
                                                                 |     int16_t var_5ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000034b0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000034b4 mov r7, r3                                        |     r7 = r3;
    0x000034b6 ldr r3, [pc, 0x210]                               |     
    0x000034b8 sub sp, 0x64                                      |     
    0x000034ba mov r5, r2                                        |     r5 = r2;
    0x000034bc mov r6, r1                                        |     r6 = r1;
    0x000034be ldr r2, [pc, 0x20c]                               |     
    0x000034c0 add r3, pc                                        |     r3 = 0x6b8e;
    0x000034c2 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000034c4 ldr r3, [pc, 0x208]                               |     r3 = *(0x36d0);
    0x000034c6 add r2, pc                                        |     r2 = 0x6b98;
    0x000034c8 ldr r3, [r2, r3]                                  |     
    0x000034ca ldr r3, [r3]                                      |     r3 = *(0x6b98);
    0x000034cc str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x000034ce mov.w r3, 0                                       |     r3 = 0;
    0x000034d2 ldrd r8, r3, [r7]                                 |     __asm ("ldrd r8, r3, [r7]");
    0x000034d6 add r7, sp, 0x34                                  |     r7 += var_34h;
    0x000034d8 str r7, [sp, 0x2c]                                |     s1 = r7;
    0x000034da rsbs r1, r3, 0                                    |     r1 = r3 - ;
    0x000034dc clz r2, r8                                        |     r2 &= r8;
    0x000034e0 lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x000034e2 cmp r8, r1                                        |     
    0x000034e4 it eq                                             |     
                                                                 |     if (r8 != r1) {
    0x000034e6 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000034e8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000034ea bne.w 0x36a4                                      |         goto label_3;
                                                                 |     }
    0x000034ee cmp r3, 0xf                                       |     
    0x000034f0 mov r4, r0                                        |     r4 = r0;
    0x000034f2 add.w sb, sp, 0x2c                                |     sb += s1;
    0x000034f6 str r3, [sp, 0x10]                                |     s2 = r3;
                                                                 |     if (r3 > 0xf) {
    0x000034f8 bhi.w 0x360e                                      |         goto label_4;
                                                                 |     }
    0x000034fc cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000034fe bne.w 0x3604                                      |         goto label_5;
                                                                 |     }
    0x00003502 ldrb.w r2, [r8]                                   |     r2 = *(r8);
    0x00003506 strb.w r2, [sp, 0x34]                             |     var_34h = r2;
    0x0000350a mov r2, r7                                        |     r2 = r7;
                                                                 |     do {
                                                                 | label_0:
    0x0000350c movs r1, 0                                        |         r1 = 0;
    0x0000350e str r3, [sp, 0x30]                                |         var_30h = r3;
    0x00003510 strb r1, [r2, r3]                                 |         *((r2 + r3)) = r1;
    0x00003512 mvn r3, 0xc0000000                                |         r3 = ~0xc0000000;
    0x00003516 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00003518 subs r3, r3, r2                                   |         r3 -= r2;
    0x0000351a cmp r3, 1                                         |         
                                                                 |         if (r3 < 1) {
    0x0000351c bls.w 0x3698                                      |             goto label_6;
                                                                 |         }
    0x00003520 ldr r1, [pc, 0x1b0]                               |         
    0x00003522 movs r2, 2                                        |         r2 = 2;
    0x00003524 mov r0, sb                                        |         r0 = sb;
    0x00003526 add r1, pc                                        |         r1 = 0x6bfe;
    0x00003528 blx 0x178c                                        |         sym ();
    0x0000352c ldr r3, [r5]                                      |         r3 = *(r5);
    0x0000352e add.w sl, sp, 0x44                                |         sl += var_44h;
    0x00003532 mov r2, r6                                        |         r2 = r6;
    0x00003534 mov r1, r5                                        |         r1 = r5;
    0x00003536 mov r0, sl                                        |         r0 = sl;
    0x00003538 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x0000353a blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000353c ldr r3, [sp, 0x2c]                                |         r3 = s1;
    0x0000353e ldr.w ip, [sp, 0x30]                              |         ip = var_30h;
    0x00003542 ldr r2, [sp, 0x48]                                |         r2 = var_48h;
    0x00003544 cmp r3, r7                                        |         
    0x00003546 ldr r1, [sp, 0x44]                                |         r1 = var_44h;
    0x00003548 ite ne                                            |         
                                                                 |         if (r3 == r7) {
    0x0000354a ldrne lr, [sp, 0x34]                              |             lr = var_34h;
                                                                 |         }
                                                                 |         if (r3 == r7) {
    0x0000354e mov.w lr, 0xf                                     |             lr = 0xf;
                                                                 |         }
    0x00003552 add.w r0, ip, r2                                  |         r0 = ip + r2;
    0x00003556 cmp r0, lr                                        |         
                                                                 |         if (r0 >= lr) {
    0x00003558 bls 0x356e                                        |             
    0x0000355a add.w lr, sp, 0x4c                                |             lr += var_4ch;
    0x0000355e cmp r1, lr                                        |             
    0x00003560 ite ne                                            |             
                                                                 |             if (r1 == lr) {
    0x00003562 ldrne lr, [sp, 0x4c]                              |                 lr = var_4ch;
                                                                 |             }
                                                                 |             if (r1 == lr) {
    0x00003566 mov.w lr, 0xf                                     |                 lr = 0xf;
                                                                 |             }
    0x0000356a cmp r0, lr                                        |             
                                                                 |             if (r0 < lr) {
    0x0000356c bls 0x362e                                        |                 goto label_7;
                                                                 |             }
                                                                 |         }
    0x0000356e mov r0, sb                                        |         r0 = sb;
    0x00003570 blx 0x178c                                        |         r0 = sym ();
    0x00003574 mov lr, r0                                        |         lr = r0;
    0x00003576 add.w r8, sp, 0x1c                                |         r8 += var_1ch;
    0x0000357a str.w r8, [sp, 0x14]                              |         __asm ("str.w r8, [var_14h]");
    0x0000357e mov ip, r0                                        |         
    0x00003580 ldr r3, [lr], 8                                   |         r3 = *(lr);
                                                                 |         lr += 8;
    0x00003584 cmp r3, lr                                        |         
                                                                 |         if (r3 == lr) {
    0x00003586 beq 0x366c                                        |             goto label_8;
                                                                 |         }
    0x00003588 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x0000358a ldr r3, [r0, 8]                                   |         r3 = var_34h;
    0x0000358c str r3, [sp, 0x1c]                                |         var_1ch = r3;
                                                                 | label_2:
    0x0000358e ldr.w r3, [ip, 4]                                 |         r3 = var_30h;
    0x00003592 str r3, [sp, 0x18]                                |         var_18h = r3;
    0x00003594 movs r3, 0                                        |         r3 = 0;
    0x00003596 str.w lr, [ip]                                    |         __asm ("str.w lr, [ip]");
    0x0000359a str.w r3, [ip, 4]                                 |         __asm ("str.w r3, [var_30h]");
    0x0000359e strb.w r3, [ip, 8]                                |         var_34h = r3;
                                                                 | label_1:
    0x000035a2 add.w fp, sp, 0x14                                |         
    0x000035a6 mov r0, r4                                        |         r0 = r4;
    0x000035a8 mov r1, fp                                        |         r1 = fp;
    0x000035aa blx 0x17ec                                        |         sd_bus_message_enter_container ();
    0x000035ae ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x000035b0 cmp r0, r8                                        |         
                                                                 |         if (r0 != r8) {
    0x000035b2 beq 0x35bc                                        |             
    0x000035b4 ldr r1, [sp, 0x1c]                                |             r1 = var_1ch;
    0x000035b6 adds r1, 1                                        |             r1++;
    0x000035b8 blx 0x16fc                                        |             sym ();
                                                                 |         }
    0x000035bc ldr r0, [sp, 0x44]                                |         r0 = var_44h;
    0x000035be add r3, sp, 0x4c                                  |         r3 += var_4ch;
    0x000035c0 cmp r0, r3                                        |         
                                                                 |         if (r0 != r3) {
    0x000035c2 beq 0x35cc                                        |             
    0x000035c4 ldr r1, [sp, 0x4c]                                |             r1 = var_4ch;
    0x000035c6 adds r1, 1                                        |             r1++;
    0x000035c8 blx 0x16fc                                        |             sym ();
                                                                 |         }
    0x000035cc ldr r0, [sp, 0x2c]                                |         r0 = s1;
    0x000035ce cmp r0, r7                                        |         
                                                                 |         if (r0 != r7) {
    0x000035d0 beq 0x35da                                        |             
    0x000035d2 ldr r1, [sp, 0x34]                                |             r1 = var_34h;
    0x000035d4 adds r1, 1                                        |             r1++;
    0x000035d6 blx 0x16fc                                        |             sym ();
                                                                 |         }
    0x000035da ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x000035dc ldr r3, [pc, 0xf8]                                |         r3 = *(0x36d8);
    0x000035de ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x000035e0 ldr r2, [pc, 0xf8]                                |         
    0x000035e2 strd r6, r5, [r4, 8]                              |         __asm ("strd r6, r5, [r4, 8]");
    0x000035e6 adds r3, 8                                        |         r3 += 8;
    0x000035e8 str r3, [r4]                                      |         *(r4) = r3;
    0x000035ea add r2, pc                                        |         r2 = 0x6cca;
    0x000035ec ldr r3, [pc, 0xe0]                                |         r3 = *(0x36d0);
    0x000035ee ldr r3, [r2, r3]                                  |         r3 = *(0x6cca);
    0x000035f0 ldr r2, [r3]                                      |         r2 = *(0x6cca);
    0x000035f2 ldr r3, [sp, 0x5c]                                |         r3 = var_5ch;
    0x000035f4 eors r2, r3                                       |         r2 ^= r3;
    0x000035f6 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000035fa bne 0x36a0                                        |             goto label_9;
                                                                 |         }
    0x000035fc mov r0, r4                                        |         r0 = r4;
    0x000035fe add sp, 0x64                                      |         
    0x00003600 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00003602 ldrh r0, [r6, 0x3e]                               |         r0 = *((r6 + 0x3e));
                                                                 | label_5:
    0x00003604 mov r2, r7                                        |         r2 = r7;
    0x00003606 cmp r3, 0                                         |         
    0x00003608 beq 0x350c                                        |         
                                                                 |     } while (r3 == 0);
    0x0000360a mov r0, r7                                        |     r0 = r7;
    0x0000360c b 0x3620                                          |     goto label_10;
                                                                 | label_4:
    0x0000360e add r1, sp, 0x10                                  |     r1 += s2;
    0x00003610 mov r0, sb                                        |     r0 = sb;
    0x00003612 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00003614 blx 0x1894                                        |     memcmp (r0, r1, r2);
    0x00003618 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0000361a ldr r2, [sp, 0x10]                                |     r2 = s2;
    0x0000361c str r0, [sp, 0x2c]                                |     s1 = r0;
    0x0000361e str r2, [sp, 0x34]                                |     var_34h = r2;
                                                                 | label_10:
    0x00003620 mov r2, r3                                        |     r2 = r3;
    0x00003622 mov r1, r8                                        |     r1 = r8;
    0x00003624 blx 0x1828                                        |     jc_get_string_array ();
    0x00003628 ldr r3, [sp, 0x10]                                |     r3 = s2;
    0x0000362a ldr r2, [sp, 0x2c]                                |     r2 = s1;
    0x0000362c b 0x350c                                          |     goto label_0;
                                                                 | label_7:
    0x0000362e movs r2, 0                                        |     r2 = 0;
    0x00003630 mov r0, sl                                        |     r0 = sl;
    0x00003632 mov r1, r2                                        |     r1 = r2;
    0x00003634 str.w ip, [sp]                                    |     __asm ("str.w ip, [sp]");
    0x00003638 blx 0x1668                                        |     r0 = fcn_00001668 ();
    0x0000363c mov fp, r0                                        |     
    0x0000363e add.w r8, sp, 0x1c                                |     r8 += var_1ch;
    0x00003642 str.w r8, [sp, 0x14]                              |     __asm ("str.w r8, [var_14h]");
    0x00003646 mov ip, r0                                        |     
    0x00003648 ldr r3, [fp], 8                                   |     r3 = *(fp);
                                                                 |     fp += 8;
    0x0000364c cmp r3, fp                                        |     
                                                                 |     if (r3 == fp) {
    0x0000364e beq 0x3682                                        |         goto label_11;
                                                                 |     }
    0x00003650 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00003652 ldr r3, [r0, 8]                                   |     r3 = var_4ch;
    0x00003654 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 |     do {
    0x00003656 ldr.w r3, [ip, 4]                                 |         r3 = var_48h;
    0x0000365a str r3, [sp, 0x18]                                |         var_18h = r3;
    0x0000365c movs r3, 0                                        |         r3 = 0;
    0x0000365e str.w fp, [ip]                                    |         __asm ("str.w fp, [ip]");
    0x00003662 str.w r3, [ip, 4]                                 |         __asm ("str.w r3, [var_48h]");
    0x00003666 strb.w r3, [ip, 8]                                |         var_4ch = r3;
    0x0000366a b 0x35a2                                          |         goto label_1;
                                                                 | label_8:
    0x0000366c ldr r0, [r0, 8]                                   |         r0 = var_34h;
    0x0000366e mov fp, r8                                        |         
    0x00003670 ldr.w r1, [lr, 4]                                 |         r1 = var_4h;
    0x00003674 ldr.w r2, [lr, 8]                                 |         r2 = var_8h_2;
    0x00003678 ldr.w r3, [lr, 0xc]                               |         r3 = var_ch_2;
    0x0000367c stm.w fp!, {r0, r1, r2, r3}                       |         *(fp!) = r0;
                                                                 |         *((fp! + 4)) = r1;
                                                                 |         *((fp! + 8)) = r2;
                                                                 |         *((fp! + 12)) = r3;
    0x00003680 b 0x358e                                          |         goto label_2;
                                                                 | label_11:
    0x00003682 ldr r0, [r0, 8]                                   |         r0 = var_4ch;
    0x00003684 mov lr, r8                                        |         lr = r8;
    0x00003686 ldr.w r1, [fp, 4]                                 |         r1 = var_18h;
    0x0000368a ldr.w r2, [fp, 8]                                 |         r2 = var_1ch;
    0x0000368e ldr.w r3, [fp, 0xc]                               |         r3 = var_bp_ch;
    0x00003692 stm.w lr!, {r0, r1, r2, r3}                       |         *(lr!) = r0;
                                                                 |         *((lr! + 4)) = r1;
                                                                 |         *((lr! + 8)) = r2;
                                                                 |         *((lr! + 12)) = r3;
    0x00003696 b 0x3656                                          |         
                                                                 |     } while (1);
                                                                 | label_6:
    0x00003698 ldr r0, [pc, 0x44]                                |     
    0x0000369a add r0, pc                                        |     r0 = 0x6d7e;
    0x0000369c blx 0x16c8                                        |     fcn_000016c8 ();
                                                                 | label_9:
    0x000036a0 blx 0x17a4                                        |     cxa_end_cleanup ();
                                                                 | label_3:
    0x000036a4 ldr r0, [pc, 0x3c]                                |     
    0x000036a6 add r0, pc                                        |     r0 = 0x6d8e;
    0x000036a8 blx 0x1708                                        |     cxa_free_exception ();
                                                                 |     do {
    0x000036ac mov r0, sb                                        |         r0 = sb;
    0x000036ae blx 0x17d4                                        |         sym ();
    0x000036b2 blx 0x17b0                                        |         g_free ();
    0x000036b6 b 0x36ac                                          |         
                                                                 |     } while (1);
                                                                 | }

[*] Function system used 1 times featureflag.cgi