[*] Binary protection state of ld-uClibc-1.0.31.so

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


[*] Function printf tear down of ld-uClibc-1.0.31.so

    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x2148 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.00002148 ()                                  | void fcn_00002148 (int32_t arg_4h, int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_3ch;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_34h;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_28h;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00002148 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x0000214c ldr r8, [pc, 0x120]                           |     r8 = *(0x2270);
    0x00002150 mov r4, r2                                    |     r4 = r2;
    0x00002154 bic r3, r3, 7                                 |     r3 = BIT_MASK (r3, 7);
    0x00002158 add fp, sp, 0x20                              |     
    0x0000215c add r3, r3, r4                                |     r3 += r4;
    0x00002160 sub sp, sp, 0x24                              |     
    0x00002164 str r3, [fp, -0x2c]                           |     var_2ch = r3;
    0x00002168 ldr r3, [pc, 0x108]                           |     r3 = *(0x2274);
    0x0000216c ldr r2, [r0, 0x84]                            |     r2 = *(arg_4hx84);
    0x00002170 add r3, pc, r3                                |     r3 = pc + r3;
    0x00002174 str r3, [fp, -0x34]                           |     var_34h = r3;
    0x00002178 ldr r3, [pc, 0xfc]                            |     r3 = *(0x2278);
    0x0000217c ldr sl, [r0, 0x80]                            |     sl = *(arg_4hx80);
    0x00002180 add r3, pc, r3                                |     r3 = pc + r3;
    0x00002184 str r3, [fp, -0x38]                           |     var_38h = r3;
    0x00002188 ldr r3, [pc, 0xf0]                            |     r3 = *(0x227c);
    0x0000218c mov r7, r0                                    |     r7 = r0;
    0x00002190 add r3, pc, r3                                |     r3 = pc + r3;
    0x00002194 mov r6, 0                                     |     r6 = 0;
    0x00002198 add r8, pc, r8                                |     r8 = pc + r8;
    0x0000219c str r1, [fp, -0x30]                           |     var_30h = r1;
    0x000021a0 str r2, [fp, -0x28]                           |     var_28h = r2;
    0x000021a4 str r3, [fp, -0x3c]                           |     var_3ch = r3;
                                                             |     do {
    0x000021a8 ldr r3, [fp, -0x2c]                           |         r3 = var_2ch;
    0x000021ac cmp r3, r4                                    |         
                                                             |         if (r3 == r4) {
    0x000021b0 bne 0x21c0                                    |             
    0x000021b4 mov r0, r6                                    |             r0 = r6;
    0x000021b8 sub sp, fp, 0x20                              |             
    0x000021bc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |             
                                                             |         }
    0x000021c0 ldr r5, [r4, 4]                               |         r5 = *((r4 + 4));
    0x000021c4 ldr r3, [fp, -0x28]                           |         r3 = var_28h;
    0x000021c8 str sl, [sp]                                  |         *(sp) = sl;
    0x000021cc mov r2, r4                                    |         r2 = r4;
    0x000021d0 ldr r1, [fp, -0x30]                           |         r1 = var_30h;
    0x000021d4 mov r0, r7                                    |         r0 = r7;
    0x000021d8 ldr ip, [fp, 4]                               |         ip = *(arg_4h);
    0x000021dc blx ip                                        |         r0 = ip (r0, "_", r2, "_");
    0x000021e0 subs sb, r0, 0                                |         sb = r0 - 0;
                                                             |         if (sb != r0) {
    0x000021e4 beq 0x226c                                    |             
    0x000021e8 ldr r3, [pc, 0x94]                            |             r3 = *(0x2280);
    0x000021ec lsr r5, r5, 8                                 |             r5 >>= 8;
    0x000021f0 ldr r3, [r8, r3]                              |             r3 = *((r8 + r3));
    0x000021f4 ldr r1, [fp, -0x34]                           |             r1 = var_34h;
    0x000021f8 ldr r2, [r3]                                  |             r2 = *(0x2280);
    0x000021fc mov r0, 2                                     |             r0 = 2;
    0x00002200 bl 0x1bf4                                     |             dl_dprintf ()
    0x00002204 cmp r5, 0                                     |             
                                                             |             if (r5 != 0) {
    0x00002208 beq 0x2224                                    |                 
    0x0000220c ldr r3, [fp, -0x28]                           |                 r3 = var_28h;
    0x00002210 ldr r1, [fp, -0x3c]                           |                 r1 = var_3ch;
    0x00002214 ldr r2, [r3, r5, lsl 4]                       |                 offset_0 = r5 << 4;
                                                             |                 r2 = *((r3 + offset_0));
    0x00002218 mov r0, 2                                     |                 r0 = 2;
    0x0000221c add r2, sl, r2                                |                 r2 = sl + r2;
    0x00002220 bl 0x1bf4                                     |                 dl_dprintf ()
                                                             |             }
    0x00002224 cmp sb, 0                                     |             
                                                             |             if (sb < 0) {
    0x00002228 bge 0x225c                                    |                 
    0x0000222c ldr r1, [pc, 0x54]                            |                 r1 = *(0x2284);
    0x00002230 ldrb r2, [r4, 4]                              |                 r2 = *((r4 + 4));
    0x00002234 add r1, pc, r1                                |                 r1 = pc + r1;
    0x00002238 mov r0, 2                                     |                 r0 = 2;
    0x0000223c bl 0x1bf4                                     |                 dl_dprintf ()
    0x00002240 mov r7, 1                                     |                 r7 = 1;
    0x00002244 rsb r0, sb, 0                                 |                 r0 = sb - ;
    0x00002248 svc 0                                         |                 __asm ("svc 0");
    0x0000224c ldr r3, [pc, 0x38]                            |                 r3 = *(0x2288);
    0x00002250 rsb r0, r0, 0                                 |                 r0 -= ;
    0x00002254 ldr r3, [r8, r3]                              |                 r3 = *((r8 + r3));
    0x00002258 str r0, [r3]                                  |                 *(r3) = r0;
                                                             |             }
    0x0000225c ldr r1, [fp, -0x38]                           |             r1 = var_38h;
    0x00002260 mov r0, 2                                     |             r0 = 2;
    0x00002264 bl 0x1bf4                                     |             dl_dprintf ()
    0x00002268 add r6, r6, sb                                |             r6 += sb;
                                                             |         }
    0x0000226c add r4, r4, 8                                 |         r4 += 8;
    0x00002270 b 0x21a8                                      |         
                                                             |     } while (1);
                                                             | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x304c */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.__tls_get_addr ()                        | void tls_get_addr (int32_t arg1) {
                                                         |     int32_t var_1ch;
                                                         |     r0 = arg1;
    0x0000304c push {r4, r5, r6, r7, r8, sb, fp, lr}     |     
    0x00003050 ldr r6, [pc, 0x144]                       |     r6 = *(0x3198);
    0x00003054 ldr r3, [pc, 0x144]                       |     r3 = *(0x319c);
    0x00003058 add r6, pc, r6                            |     r6 = pc + r6;
    0x0000305c mov r7, r0                                |     r7 = r0;
    0x00003060 ldr r3, [r6, r3]                          |     
    0x00003064 bl 0x5a90                                 |     r0 = aeabi_read_tp ();
    0x00003068 ldr r5, [r0]                              |     r5 = *(r0);
    0x0000306c ldr r3, [r3]                              |     r3 = *(0x3198);
    0x00003070 ldr r2, [r5]                              |     r2 = *(r5);
    0x00003074 add fp, sp, 0x1c                          |     
    0x00003078 cmp r2, r3                                |     
                                                         |     if (r2 != r3) {
    0x0000307c moveq r4, 0                               |         r4 = 0;
                                                         |     }
                                                         |     if (r2 != r3) {
    0x00003080 beq 0x3098                                |         
    0x00003084 mov r8, r0                                |         r8 = r0;
    0x00003088 ldr r0, [r7]                              |         r0 = *(r7);
    0x0000308c bl 0x26ac                                 |         dl_update_slotinfo ();
    0x00003090 ldr r5, [r8]                              |         r5 = *(r8);
    0x00003094 mov r4, r0                                |         r4 = r0;
                                                         |     }
    0x00003098 ldr ip, [r7]                              |     ip = *(r7);
    0x0000309c ldr r0, [r5, ip, lsl 3]                   |     offset_0 = ip << 3;
                                                         |     r0 = *((r5 + offset_0));
    0x000030a0 add r8, r5, ip, lsl 3                     |     r8 = r5 + (ip << 3);
    0x000030a4 cmn r0, 1                                 |     
                                                         |     if (r0 != 1) {
    0x000030a8 bne 0x317c                                |         goto label_1;
                                                         |     }
    0x000030ac cmp r4, 0                                 |     
                                                         |     if (r4 != 0) {
    0x000030b0 bne 0x30d8                                |         goto label_2;
                                                         |     }
    0x000030b4 ldr r2, [pc, 0xe8]                        |     
    0x000030b8 ldr r2, [r6, r2]                          |     r2 = *((r6 + r2));
    0x000030bc ldr r2, [r2]                              |     r2 = *(0x31a0);
                                                         |     do {
    0x000030c0 ldr r1, [r2]                              |         r1 = *(r2);
    0x000030c4 cmp r1, ip                                |         
                                                         |         if (r1 >= ip) {
    0x000030c8 bls 0x3124                                |             
    0x000030cc mov r1, 0xc                               |             r1 = 0xc;
    0x000030d0 mla r3, r1, ip, r2                        |             __asm ("mla r3, r1, ip, r2");
    0x000030d4 ldr r4, [r3, 0x10]                        |             r4 = *((r3 + 0x10));
                                                         | label_2:
    0x000030d8 ldr r1, [r4, 0x1c]                        |             r1 = *((r4 + 0x1c));
    0x000030dc ldr r0, [r4, 0x20]                        |             r0 = *((r4 + 0x20));
    0x000030e0 bl 0x2a0c                                 |             r0 = dl_memalign ();
    0x000030e4 cmp r0, 0                                 |             
                                                         |             if (r0 != 0) {
    0x000030e8 bne 0x3130                                |                 goto label_3;
                                                         |             }
    0x000030ec ldr r2, [pc, 0xb4]                        |             r2 = *(0x31a4);
    0x000030f0 ldr r1, [pc, 0xb4]                        |             r1 = *(0x31a8);
    0x000030f4 ldr r3, [pc, 0xb4]                        |             r3 = *(0x31ac);
    0x000030f8 add r2, pc, r2                            |             r2 = pc + r2;
    0x000030fc add r1, pc, r1                            |             r1 = pc + r1;
    0x00003100 mov r0, 2                                 |             r0 = 2;
    0x00003104 bl 0x1bf4                                 |             dl_dprintf ()
    0x00003108 mov r0, 1                                 |             r0 = 1;
    0x0000310c mov r7, r0                                |             r7 = r0;
    0x00003110 svc 0                                     |             __asm ("svc 0");
    0x00003114 ldr r3, [pc, 0x98]                        |             r3 = *(0x31b0);
    0x00003118 rsb r0, r0, 0                             |             r0 -= ;
    0x0000311c ldr r3, [r6, r3]                          |             r3 = *((r6 + r3));
    0x00003120 str r0, [r3]                              |             *(r3) = r0;
                                                         |         }
    0x00003124 sub ip, ip, r1                            |         
    0x00003128 ldr r2, [r2, 4]                           |         r2 = *((r2 + 4));
    0x0000312c b 0x30c0                                  |         
                                                         |     } while (1);
                                                         | label_3:
    0x00003130 ldr r3, [r4, 0x14]                        |     r3 = *((r4 + 0x14));
    0x00003134 ldr r1, [r4, 0x18]                        |     r1 = *((r4 + 0x18));
    0x00003138 sub r3, r3, 1                             |     r3--;
    0x0000313c mov r2, r0                                |     r2 = r0;
    0x00003140 add r1, r0, r1                            |     r1 = r0 + r1;
                                                         |     do {
    0x00003144 cmp r1, r2                                |         
                                                         |         if (r1 == r2) {
    0x00003148 bne 0x3188                                |             
    0x0000314c ldr r3, [r4, 0x18]                        |             r3 = *((r4 + 0x18));
    0x00003150 ldr r2, [r4, 0x1c]                        |             r2 = *((r4 + 0x1c));
    0x00003154 add r3, r0, r3                            |             r3 = r0 + r3;
    0x00003158 add r2, r0, r2                            |             r2 = r0 + r2;
    0x0000315c mov r1, 0                                 |             r1 = 0;
                                                         | label_0:
    0x00003160 cmp r3, r2                                |             
                                                         |             if (r3 != r2) {
    0x00003164 bne 0x3194                                |                 goto label_4;
                                                         |             }
    0x00003168 ldr r3, [r7]                              |             r3 = *(r7);
    0x0000316c str r0, [r8]                              |             *(r8) = r0;
    0x00003170 add r5, r5, r3, lsl 3                     |             r5 += (r3 << 3);
    0x00003174 mov r3, 0                                 |             r3 = 0;
    0x00003178 strb r3, [r5, 4]                          |             *((r5 + 4)) = r3;
                                                         | label_1:
    0x0000317c ldr r3, [r7, 4]                           |             r3 = *((r7 + 4));
    0x00003180 add r0, r0, r3                            |             r0 += r3;
    0x00003184 pop {r4, r5, r6, r7, r8, sb, fp, pc}      |             
                                                         |         }
    0x00003188 ldrb ip, [r3, 1]!                         |         ip = *((r3 += 1));
    0x0000318c strb ip, [r2], 1                          |         *(r2) = ip;
                                                         |         r2++;
    0x00003190 b 0x3144                                  |         
                                                         |     } while (1);
                                                         | label_4:
    0x00003194 strb r1, [r3], 1                          |     *(r3) = r1;
                                                         |     r3++;
    0x00003198 b 0x3160                                  |     goto label_0;
                                                         | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x2f48 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym._dl_add_to_slotinfo ()                   | void dl_add_to_slotinfo (int32_t arg1) {
                                                         |     int32_t var_1ch;
                                                         |     r0 = arg1;
    0x00002f48 push {r4, r5, r6, r7, r8, sb, fp, lr}     |     
    0x00002f4c ldr r5, [pc, 0xe4]                        |     r5 = *(0x3034);
    0x00002f50 ldr r3, [pc, 0xe4]                        |     r3 = *(0x3038);
    0x00002f54 add r5, pc, r5                            |     r5 = pc + r5;
    0x00002f58 ldr r3, [r5, r3]                          |     r3 = *(0x3034);
    0x00002f5c ldr r7, [r0, 0x2c]                        |     r7 = *((r0 + 0x2c));
    0x00002f60 ldr r6, [r3]                              |     r6 = *(0x3034);
    0x00002f64 add fp, sp, 0x1c                          |     
    0x00002f68 mov r8, r0                                |     r8 = r0;
                                                         |     do {
    0x00002f6c ldr r3, [r6]                              |         r3 = *(r6);
    0x00002f70 cmp r3, r7                                |         
                                                         |         if (r3 > r7) {
    0x00002f74 bhi 0x3030                                |             goto label_1;
                                                         |         }
    0x00002f78 ldr r4, [r6, 4]                           |         r4 = *((r6 + 4));
    0x00002f7c sub r7, r7, r3                            |         r7 -= r3;
    0x00002f80 cmp r4, 0                                 |         
                                                         |         if (r4 == 0) {
    0x00002f84 bne 0x2fe0                                |             
    0x00002f88 mov r0, 0x2f0                             |             r0 = 0x2f0;
    0x00002f8c bl 0x243c                                 |             r0 = dl_malloc ();
    0x00002f90 cmp r0, 0                                 |             
    0x00002f94 mov r1, r0                                |             r1 = r0;
    0x00002f98 str r0, [r6, 4]                           |             *((r6 + 4)) = r0;
                                                         |             if (r0 != 0) {
    0x00002f9c bne 0x2fe8                                |                 goto label_2;
                                                         |             }
    0x00002fa0 ldr r3, [pc, 0x98]                        |             r3 = *(0x303c);
    0x00002fa4 ldr r1, [pc, 0x98]                        |             r1 = *(0x3040);
    0x00002fa8 ldr r2, [r5, r3]                          |             r2 = *((r5 + r3));
    0x00002fac add r1, pc, r1                            |             r1 = pc + r1;
    0x00002fb0 ldr r3, [r2]                              |             r3 = *(r2);
    0x00002fb4 mov r0, 2                                 |             r0 = 2;
    0x00002fb8 add r3, r3, 1                             |             r3++;
    0x00002fbc str r3, [r2]                              |             *(r2) = r3;
    0x00002fc0 mov r7, 1                                 |             r7 = 1;
    0x00002fc4 bl 0x1bf4                                 |             dl_dprintf ()
    0x00002fc8 mov r0, 0x7f                              |             r0 = 0x7f;
    0x00002fcc svc 0                                     |             __asm ("svc 0");
    0x00002fd0 ldr r3, [pc, 0x70]                        |             r3 = *(0x3044);
    0x00002fd4 rsb r0, r0, 0                             |             r0 -= ;
    0x00002fd8 ldr r3, [r5, r3]                          |             r3 = *((r5 + r3));
    0x00002fdc str r0, [r3]                              |             *(r3) = r0;
                                                         |         }
    0x00002fe0 mov r6, r4                                |         r6 = r4;
    0x00002fe4 b 0x2f6c                                  |         
                                                         |     } while (1);
                                                         | label_2:
    0x00002fe8 mov r3, 0x3e                              |     r3 = 0x3e;
    0x00002fec stm r1, {r3, r4}                          |     *(r1) = r3;
                                                         |     *((r1 + 4)) = r4;
    0x00002ff0 add r2, r1, 0x2f0                         |     r2 = r1 + 0x2f0;
    0x00002ff4 add r3, r1, 8                             |     r3 = r1 + 8;
                                                         |     do {
    0x00002ff8 cmp r2, r3                                |         
                                                         |         if (r2 == r3) {
    0x00002ffc bne 0x3028                                |             
                                                         | label_0:
    0x00003000 mov r3, 0xc                               |             r3 = 0xc;
    0x00003004 mla r0, r3, r7, r1                        |             __asm ("mla r0, r3, r7, r1");
    0x00003008 ldr r3, [pc, 0x30]                        |             r3 = *(0x303c);
    0x0000300c str r8, [r0, 0x10]                        |             *((r0 + 0x10)) = r8;
    0x00003010 ldr r2, [r5, r3]                          |             r2 = *((r5 + r3));
    0x00003014 ldr r3, [r2]                              |             r3 = *(r2);
    0x00003018 add r3, r3, 1                             |             r3++;
    0x0000301c str r3, [r0, 8]                           |             *((r0 + 8)) = r3;
    0x00003020 str r3, [r2]                              |             *(r2) = r3;
    0x00003024 pop {r4, r5, r6, r7, r8, sb, fp, pc}      |             
                                                         |         }
    0x00003028 strb r4, [r3], 1                          |         *(r3) = r4;
                                                         |         r3++;
    0x0000302c b 0x2ff8                                  |         
                                                         |     } while (1);
                                                         | label_1:
    0x00003030 mov r1, r6                                |     r1 = r6;
    0x00003034 b 0x3000                                  |     goto label_0;
                                                         | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x2cec */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym._dl_allocate_static_tls ()                   | void dl_allocate_static_tls (int32_t arg_4h, int32_t arg1) {
                                                             |     int32_t var_34h;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_28h;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_20h;
                                                             |     int32_t var_ch;
                                                             |     r0 = arg1;
    0x00002cec push {r4, r7, fp, lr}                         |     
    0x00002cf0 ldr r4, [pc, 0x3c]                            |     r4 = *(0x2d30);
    0x00002cf4 add fp, sp, 0xc                               |     
    0x00002cf8 bl 0x2924                                     |     dl_try_allocate_static_tls ();
    0x00002cfc add r4, pc, r4                                |     r4 = pc + r4;
    0x00002d00 cmp r0, 0                                     |     
    0x00002d04 popeq {r4, r7, fp, pc}                        |     
    0x00002d08 ldr r1, [pc, 0x28]                            |     r1 = *(0x2d34);
    0x00002d0c mov r0, 2                                     |     r0 = 2;
    0x00002d10 add r1, pc, r1                                |     r1 = pc + r1;
    0x00002d14 bl 0x1bf4                                     |     dl_dprintf ()
    0x00002d18 mov r7, 1                                     |     r7 = 1;
    0x00002d1c mov r0, 0x1e                                  |     r0 = 0x1e;
    0x00002d20 svc 0                                         |     __asm ("svc 0");
    0x00002d24 ldr r3, [pc, 0x10]                            |     r3 = *(0x2d38);
    0x00002d28 rsb r0, r0, 0                                 |     r0 -= ;
    0x00002d2c ldr r3, [r4, r3]                              |     r3 = *(0x2d30);
    0x00002d30 str r0, [r3]                                  |     *(r3) = r0;
                                                             |     if (r0 != 0) {
    0x00002d34 andeq r4, r1, r0, ror r2                      |         r4 = r1 & (r0 >>> r2);
                                                             |     }
                                                             |     if (r0 != 0) {
    0x00002d38 muleq r0, sb, lr                              |         r0 = sb * lr;
                                                             |     }
                                                             |     if (r0 != 0) {
    0x00002d3c andeq r0, r0, ip, lsr r0                      |         r0 &= (ip >> r0);
                                                             |     }
    0x00002d40 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00002d44 ldr sb, [pc, 0x1f0]                           |     sb = *(0x00002f3c);
    0x00002d48 add fp, sp, 0x20                              |     
    0x00002d4c sub sp, sp, 0x1c                              |     
    0x00002d50 ldr r6, [r2]                                  |     r6 = *(r2);
    0x00002d54 ldr r2, [r2, 4]                               |     r2 = *((r2 + 4));
    0x00002d58 ldr r5, [r0]                                  |     r5 = *(r0);
    0x00002d5c mov r8, r0                                    |     r8 = r0;
    0x00002d60 and r4, r2, 0xff                              |     r4 = r2 & 0xff;
    0x00002d64 mov r0, 0                                     |     r0 = 0;
    0x00002d68 lsr r2, r2, 8                                 |     r2 >>= 8;
    0x00002d6c add r7, r3, r2, lsl 4                         |     r7 = r3 + (r2 << 4);
    0x00002d70 cmp r2, r0                                    |     
    0x00002d74 add sb, pc, sb                                |     sb = pc + sb;
    0x00002d78 add sl, r5, r6                                |     sl = r5 + r6;
    0x00002d7c str r7, [fp, -0x2c]                           |     var_2ch = r7;
    0x00002d80 str r0, [fp, -0x28]                           |     var_28h = r0;
                                                             |     if (r2 == r0) {
    0x00002d84 beq 0x2e74                                    |         goto label_3;
                                                             |     }
    0x00002d88 ldrb r0, [r7, 0xc]                            |     r0 = *((r7 + 0xc));
    0x00002d8c lsrs r0, r0, 4                                |     r0 >>= 4;
                                                             |     if (r0 != r0) {
    0x00002d90 ldreq r3, [r7, 4]                             |         r3 = *((r7 + 4));
                                                             |     }
                                                             |     if (r0 != r0) {
    0x00002d94 addeq r3, r5, r3                              |         r3 = r5 + r3;
                                                             |     }
                                                             |     if (r0 == r0) {
    0x00002d98 beq 0x2e78                                    |         goto label_4;
                                                             |     }
    0x00002d9c sub ip, r4, 0x11                              |     
    0x00002da0 cmp r4, 0x16                                  |     
    0x00002da4 cmpne ip, 2                                   |     __asm ("cmpne ip, 2");
                                                             |     if (r4 > 0x16) {
    0x00002da8 movls ip, 1                                   |         
                                                             |     }
                                                             |     if (r4 <= 0x16) {
    0x00002dac movhi ip, 0                                   |         
                                                             |     }
    0x00002db0 cmp r4, 0x14                                  |     
    0x00002db4 ldr r0, [r3, r2, lsl 4]                       |     offset_0 = r2 << 4;
                                                             |     r0 = *((r3 + offset_0));
                                                             |     if (r4 != 0x14) {
    0x00002db8 moveq lr, 2                                   |         lr = 2;
                                                             |     }
                                                             |     if (r4 == 0x14) {
    0x00002dbc movne lr, 0                                   |         lr = 0;
                                                             |     }
    0x00002dc0 sub r3, fp, 0x2c                              |     r3 -= var_2ch;
    0x00002dc4 str r3, [sp]                                  |     *(sp) = r3;
    0x00002dc8 orr r3, ip, lr                                |     r3 = ip | lr;
    0x00002dcc ldr ip, [fp, 4]                               |     ip = *(arg_4h);
    0x00002dd0 mov r2, r8                                    |     r2 = r8;
    0x00002dd4 add r0, ip, r0                                |     r0 = ip + r0;
    0x00002dd8 bl 0x1988                                     |     r0 = dl_find_hash ();
    0x00002ddc subs r3, r0, 0                                |     r3 = r0 - 0;
                                                             |     if (r3 == r0) {
    0x00002de0 bne 0x2e04                                    |         
    0x00002de4 ldrb r2, [r7, 0xc]                            |         r2 = *((r7 + 0xc));
    0x00002de8 and r1, r2, 0xf                               |         r1 = r2 & 0xf;
    0x00002dec cmp r1, 6                                     |         
                                                             |         if (r1 == 6) {
    0x00002df0 beq 0x2e04                                    |             goto label_5;
                                                             |         }
    0x00002df4 lsr r2, r2, 4                                 |         r2 >>= 4;
    0x00002df8 cmp r2, 2                                     |         
                                                             |         if (r2 == 2) {
    0x00002dfc movne r4, 1                                   |             r4 = 1;
                                                             |         }
                                                             |         if (r2 != 2) {
    0x00002e00 bne 0x2ed0                                    |             goto label_2;
                                                             |         }
                                                             |     }
                                                             | label_5:
    0x00002e04 ldr r2, [fp, -0x28]                           |     r2 = var_28h;
                                                             |     do {
    0x00002e08 cmp r4, 0x17                                  |         
                                                             |         if (r4 > 0x17) {
                                                             |             /* switch table (24 cases) at 0x2e14 */
    0x00002e0c addls pc, pc, r4, lsl 2                       |             pc += (r4 << 2);
                                                             |         }
    0x00002e10 b 0x2f34                                      |         goto label_6;
    0x00002e14 b 0x2ed0                                      |         goto label_2;
    0x00002e18 b 0x2e80                                      |         goto label_7;
    0x00002e1c b 0x2ef8                                      |         goto label_8;
    0x00002e20 b 0x2f34                                      |         goto label_6;
    0x00002e24 b 0x2f34                                      |         goto label_6;
    0x00002e28 b 0x2f34                                      |         goto label_6;
    0x00002e2c b 0x2f34                                      |         goto label_6;
    0x00002e30 b 0x2f34                                      |         goto label_6;
    0x00002e34 b 0x2f34                                      |         goto label_6;
    0x00002e38 b 0x2f34                                      |         goto label_6;
    0x00002e3c b 0x2f34                                      |         goto label_6;
    0x00002e40 b 0x2f34                                      |         goto label_6;
    0x00002e44 b 0x2f34                                      |         goto label_6;
    0x00002e48 b 0x2f34                                      |         goto label_6;
    0x00002e4c b 0x2f34                                      |         goto label_6;
    0x00002e50 b 0x2f34                                      |         goto label_6;
    0x00002e54 b 0x2f34                                      |         goto label_6;
    0x00002e58 b 0x2eec                                      |         goto label_9;
    0x00002e5c b 0x2ef8                                      |         goto label_8;
    0x00002e60 b 0x2f00                                      |         goto label_10;
    0x00002e64 b 0x2ebc                                      |         goto label_11;
    0x00002e68 b 0x2ef0                                      |         goto label_12;
    0x00002e6c b 0x2ef0                                      |         goto label_12;
    0x00002e70 b 0x2eac                                      |         goto label_13;
                                                             | label_3:
    0x00002e74 ldr r3, [r7, 4]                               |         r3 = *((r7 + 4));
                                                             | label_4:
    0x00002e78 mov r2, r8                                    |         r2 = r8;
    0x00002e7c b 0x2e08                                      |         
                                                             |     } while (1);
                                                             | label_7:
    0x00002e80 ldr r1, [pc, 0xb8]                            |     r1 = *(0x2f3c);
    0x00002e84 mov r0, 2                                     |     r0 = 2;
    0x00002e88 add r1, pc, r1                                |     r1 = pc + r1;
    0x00002e8c bl 0x1bf4                                     |     dl_dprintf ()
    0x00002e90 mov r0, 1                                     |     r0 = 1;
    0x00002e94 mov r7, r0                                    |     r7 = r0;
    0x00002e98 svc 0                                         |     __asm ("svc 0");
    0x00002e9c ldr r3, [pc, 0xa0]                            |     r3 = *(0x2f40);
    0x00002ea0 rsb r0, r0, 0                                 |     r0 -= ;
    0x00002ea4 ldr r3, [sb, r3]                              |     r3 = *((sb + r3));
    0x00002ea8 str r0, [r3]                                  |     *(r3) = r0;
                                                             | label_13:
    0x00002eac ldr r3, [r5, r6]                              |     r3 = *((r5 + r6));
    0x00002eb0 ldr r2, [r8]                                  |     r2 = *(r8);
                                                             | label_1:
    0x00002eb4 add r3, r3, r2                                |     r3 += r2;
    0x00002eb8 b 0x2ef0                                      |     goto label_12;
                                                             | label_11:
    0x00002ebc ldr r1, [r7, 8]                               |     r1 = *((r7 + 8));
    0x00002ec0 mov r2, 0                                     |     r2 = 0;
                                                             |     do {
    0x00002ec4 cmp r1, r2                                    |         
                                                             |         if (r1 == r2) {
    0x00002ec8 bne 0x2edc                                    |             
                                                             | label_0:
    0x00002ecc mov r4, 0                                     |             r4 = 0;
                                                             | label_2:
    0x00002ed0 mov r0, r4                                    |             r0 = r4;
    0x00002ed4 sub sp, fp, 0x20                              |             
    0x00002ed8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |             
                                                             |         }
    0x00002edc ldrb r0, [r3, r2]                             |         r0 = *((r3 + r2));
    0x00002ee0 strb r0, [sl, r2]                             |         *((sl + r2)) = r0;
    0x00002ee4 add r2, r2, 1                                 |         r2++;
    0x00002ee8 b 0x2ec4                                      |         
                                                             |     } while (1);
                                                             | label_9:
    0x00002eec ldr r3, [r2, 0x2c]                            |     r3 = *((r2 + 0x2c));
                                                             | label_12:
    0x00002ef0 str r3, [r5, r6]                              |     *((r5 + r6)) = r3;
    0x00002ef4 b 0x2ecc                                      |     goto label_0;
                                                             | label_8:
    0x00002ef8 ldr r2, [r5, r6]                              |     r2 = *((r5 + r6));
    0x00002efc b 0x2eb4                                      |     goto label_1;
                                                             | label_10:
    0x00002f00 ldr r1, [r2, 0x28]                            |     r1 = *((r2 + 0x28));
    0x00002f04 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00002f08 bne 0x2f24                                    |         
    0x00002f0c mov r0, r2                                    |         r0 = r2;
    0x00002f10 str r3, [fp, -0x34]                           |         var_34h = r3;
    0x00002f14 str r2, [fp, -0x30]                           |         var_30h = r2;
    0x00002f18 bl 0x2cec                                     |         dl_allocate_static_tls ();
    0x00002f1c ldr r3, [fp, -0x34]                           |         r3 = var_34h;
    0x00002f20 ldr r2, [fp, -0x30]                           |         r2 = var_30h;
                                                             |     }
    0x00002f24 ldr r1, [r5, r6]                              |     r1 = *((r5 + r6));
    0x00002f28 ldr r2, [r2, 0x28]                            |     r2 = *((r2 + 0x28));
    0x00002f2c add r3, r3, r1                                |     r3 += r1;
    0x00002f30 b 0x2eb4                                      |     goto label_1;
                                                             | label_6:
    0x00002f34 mvn r4, 0                                     |     r4 = ~0;
    0x00002f38 b 0x2ed0                                      |     goto label_2;
                                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x471c */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) sym._dl_get_ready_to_run ()                      | void dl_get_ready_to_run (int32_t arg_4h, int32_t arg1) {
                                                             |     int32_t var_174h;
                                                             |     int32_t var_170h;
                                                             |     int32_t var_16ch;
                                                             |     int32_t var_168h;
                                                             |     int32_t var_164h;
                                                             |     int32_t var_160h;
                                                             |     int32_t var_15ch;
                                                             |     int32_t var_158h;
                                                             |     int32_t var_154h;
                                                             |     int32_t var_150h;
                                                             |     int32_t var_14ch;
                                                             |     int32_t var_148h;
                                                             |     int32_t var_140h;
                                                             |     int32_t var_13ch;
                                                             |     int32_t var_0h_2;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_18h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_20h_3;
                                                             |     int32_t var_24h;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_6ch;
                                                             |     int32_t var_c4h;
                                                             |     int32_t var_100h;
                                                             |     int32_t var_104h;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r0 = arg1;
    0x0000471c push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00004720 ldr r4, [pc, 0xf84]                           |     r4 = *(0x56a8);
    0x00004724 add fp, sp, 0x20                              |     
    0x00004728 sub sp, sp, 0x15c                             |     
    0x0000472c str r3, [fp, -0x14c]                          |     var_14ch = r3;
    0x00004730 mov r3, 0                                     |     r3 = 0;
    0x00004734 mov r5, r2                                    |     r5 = r2;
    0x00004738 sub r6, fp, 0x13c                             |     r6 -= var_13ch;
    0x0000473c mov r2, r3                                    |     r2 = r3;
    0x00004740 add r4, pc, r4                                |     r4 = pc + r4;
    0x00004744 str r0, [fp, -0x15c]                          |     var_15ch = r0;
                                                             |     do {
    0x00004748 strb r2, [r3, r6]                             |         *((r3 + r6)) = r2;
    0x0000474c add r3, r3, 1                                 |         r3++;
    0x00004750 cmp r3, 0x118                                 |         
    0x00004754 bne 0x4748                                    |         
                                                             |     } while (r3 != 0x118);
    0x00004758 ldr r2, [pc, 0xf50]                           |     r2 = *(0x56ac);
    0x0000475c ldr r3, [r5, 0x34]                            |     r3 = *((r5 + 0x34));
    0x00004760 ldr r2, [r4, r2]                              |     r2 = *((r4 + r2));
    0x00004764 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00004768 moveq r3, 0x1000                              |         r3 = 0x1000;
                                                             |     }
    0x0000476c str r3, [r2]                                  |     *(r2) = r3;
    0x00004770 str r2, [fp, -0x174]                          |     var_174h = r2;
    0x00004774 ldr r2, [pc, 0xf38]                           |     r2 = *(0x56b0);
    0x00004778 mov r7, 0                                     |     r7 = 0;
    0x0000477c add r2, pc, r2                                |     r2 = pc + r2;
    0x00004780 str r3, [r2, 0xc]                             |     *((r2 + 0xc)) = r3;
    0x00004784 ldr r3, [fp, 4]                               |     r3 = *(arg_4h);
    0x00004788 str r7, [r2, 0x10]                            |     *((r2 + 0x10)) = r7;
    0x0000478c ldr r0, [r3]                                  |     r0 = *(r3);
    0x00004790 bl 0x32b4                                     |     fcn_000032b4 (r0);
    0x00004794 ldr r3, [pc, 0xf1c]                           |     r3 = *(0x56b4);
    0x00004798 ldr r2, [r5, 0x4c]                            |     r2 = *((r5 + 0x4c));
    0x0000479c ldr r3, [r4, r3]                              |     r3 = *((r4 + r3));
    0x000047a0 cmp r2, r3                                    |     
                                                             |     if (r2 == r3) {
    0x000047a4 bne 0x47d4                                    |         
    0x000047a8 ldr r1, [pc, 0xf0c]                           |         r1 = *(0x56b8);
    0x000047ac mov r0, 2                                     |         r0 = 2;
    0x000047b0 add r1, pc, r1                                |         r1 = pc + r1;
    0x000047b4 bl 0x1bf4                                     |         dl_dprintf ()
    0x000047b8 mov r0, 1                                     |         r0 = 1;
    0x000047bc mov r7, r0                                    |         r7 = r0;
                                                             | label_17:
    0x000047c0 svc 0                                         |         __asm ("svc 0");
    0x000047c4 ldr r3, [pc, 0xef4]                           |         r3 = *(0x56bc);
    0x000047c8 rsb r0, r0, 0                                 |         r0 -= ;
    0x000047cc ldr r3, [r4, r3]                              |         r3 = *((r4 + r3));
    0x000047d0 str r0, [r3]                                  |         *(r3) = r0;
                                                             |     }
    0x000047d4 ldr r0, [pc, 0xee8]                           |     r0 = *(0x56c0);
    0x000047d8 ldr r1, [fp, -0x14c]                          |     r1 = var_14ch;
    0x000047dc add r0, pc, r0                                |     r0 = pc + r0;
    0x000047e0 str r7, [fp, -0x140]                          |     var_140h = r7;
    0x000047e4 bl 0x17c0                                     |     dl_getenv ();
    0x000047e8 ldr r2, [pc, 0xed8]                           |     r2 = *(0x56c4);
    0x000047ec cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000047f0 movne r3, 2                                   |         r3 = 2;
                                                             |     }
                                                             |     if (r0 != 0) {
    0x000047f4 moveq r3, 0                                   |         r3 = 0;
                                                             |     }
    0x000047f8 str r3, [fp, -0x154]                          |     var_154h = r3;
    0x000047fc ldr r2, [r4, r2]                              |     r2 = *((r4 + r2));
    0x00004800 ldr r3, [r5, 0x5c]                            |     r3 = *((r5 + 0x5c));
    0x00004804 str r2, [fp, -0x164]                          |     var_164h = r2;
    0x00004808 ldr r2, [pc, 0xebc]                           |     r2 = *(0x56c8);
    0x0000480c cmn r3, 1                                     |     
    0x00004810 ldr r2, [r4, r2]                              |     r2 = *((r4 + r2));
    0x00004814 str r2, [fp, -0x168]                          |     var_168h = r2;
                                                             |     if (r3 == 1) {
    0x00004818 beq 0x489c                                    |         goto label_31;
                                                             |     }
                                                             | label_0:
    0x0000481c ldr r3, [r5, 0x5c]                            |     r3 = *((r5 + 0x5c));
    0x00004820 cmn r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x00004824 bne 0x4c18                                    |         goto label_32;
                                                             |     }
                                                             | label_1:
    0x00004828 ldr r0, [pc, 0xea0]                           |     r0 = *(0x56cc);
    0x0000482c ldr r2, [fp, -0x164]                          |     r2 = var_164h;
    0x00004830 mov r3, 1                                     |     r3 = 1;
    0x00004834 ldr r1, [fp, -0x14c]                          |     r1 = var_14ch;
    0x00004838 add r0, pc, r0                                |     r0 = pc + r0;
    0x0000483c str r3, [r2]                                  |     *(r2) = r3;
    0x00004840 bl 0x17c0                                     |     dl_getenv ();
    0x00004844 ldr r7, [pc, 0xe88]                           |     r7 = *(0x56d0);
    0x00004848 ldr r3, [fp, -0x168]                          |     r3 = var_168h;
    0x0000484c add r7, pc, r7                                |     r7 = pc + r7;
    0x00004850 str r0, [r3]                                  |     *(r3) = r0;
                                                             |     do {
    0x00004854 mov r0, r7                                    |         r0 = r7;
    0x00004858 ldr r1, [fp, -0x14c]                          |         r1 = var_14ch;
    0x0000485c bl 0x1814                                     |         dl_unsetenv ();
    0x00004860 sub r0, r7, 1                                 |         r0 = r7 - 1;
                                                             | label_3:
    0x00004864 ldrb r2, [r0, 1]                              |         r2 = *((r0 + 1));
    0x00004868 add r3, r0, 1                                 |         r3 = r0 + 1;
    0x0000486c cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x00004870 bne 0x4c38                                    |             goto label_33;
                                                             |         }
    0x00004874 ldrb r3, [r3, 1]                              |         r3 = *((r3 + 1));
    0x00004878 add r7, r0, 2                                 |         r7 = r0 + 2;
    0x0000487c cmp r3, 0                                     |         
    0x00004880 bne 0x4854                                    |         
                                                             |     } while (r3 != 0);
    0x00004884 ldr r2, [pc, 0xe4c]                           |     r2 = *(0x56d4);
    0x00004888 ldr r2, [r4, r2]                              |     r2 = *((r4 + r2));
    0x0000488c str r3, [r2]                                  |     *(r2) = r3;
    0x00004890 mov r3, 2                                     |     r3 = 2;
    0x00004894 str r3, [fp, -0x154]                          |     var_154h = r3;
    0x00004898 b 0x4988                                      |     goto label_34;
                                                             | label_31:
    0x0000489c mov r7, 0x18                                  |     r7 = 0x18;
    0x000048a0 svc 0                                         |     __asm ("svc 0");
    0x000048a4 cmn r0, 0x1000                                |     
                                                             |     if (r0 <= 0x1000) {
    0x000048a8 ldrhi r2, [pc, 0xe10]                         |         r2 = *((pc + 0xe10));
                                                             |     }
    0x000048ac rsbhi r0, r0, 0                               |     __asm ("rsbhi r0, r0, 0");
                                                             |     if (r0 <= 0x1000) {
    0x000048b0 ldrhi r2, [r4, r2]                            |         r2 = *((r4 + r2));
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x000048b4 strhi r0, [r2]                                |         *(r2) = r0;
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x000048b8 movhi r0, r3                                  |         r0 = r3;
                                                             |     }
    0x000048bc lsl r1, r0, 0x10                              |     r1 = r0 << 0x10;
    0x000048c0 lsr r1, r1, 0x10                              |     r1 >>= 0x10;
    0x000048c4 mov r7, 0x31                                  |     r7 = 0x31;
    0x000048c8 svc 0                                         |     __asm ("svc 0");
    0x000048cc cmn r0, 0x1000                                |     
                                                             |     if (r0 <= 0x1000) {
    0x000048d0 ldrhi r3, [pc, 0xde8]                         |         r3 = *((pc + 0xde8));
                                                             |     }
    0x000048d4 rsbhi r0, r0, 0                               |     __asm ("rsbhi r0, r0, 0");
                                                             |     if (r0 <= 0x1000) {
    0x000048d8 ldrhi r3, [r4, r3]                            |         r3 = *((r4 + r3));
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x000048dc strhi r0, [r3]                                |         *(r3) = r0;
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x000048e0 mvnhi r0, 0                                   |         r0 = ~0;
                                                             |     }
    0x000048e4 lsl r2, r0, 0x10                              |     r2 = r0 << 0x10;
    0x000048e8 lsr r2, r2, 0x10                              |     r2 >>= 0x10;
    0x000048ec mov r7, 0x2f                                  |     r7 = 0x2f;
    0x000048f0 svc 0                                         |     __asm ("svc 0");
    0x000048f4 cmn r0, 0x1000                                |     
                                                             |     if (r0 <= 0x1000) {
    0x000048f8 ldrhi r3, [pc, 0xdc0]                         |         r3 = *((pc + 0xdc0));
                                                             |     }
    0x000048fc rsbhi r0, r0, 0                               |     __asm ("rsbhi r0, r0, 0");
                                                             |     if (r0 <= 0x1000) {
    0x00004900 ldrhi r3, [r4, r3]                            |         r3 = *((r4 + r3));
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x00004904 strhi r0, [r3]                                |         *(r3) = r0;
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x00004908 mvnhi r0, 0                                   |         r0 = ~0;
                                                             |     }
    0x0000490c lsl r3, r0, 0x10                              |     r3 = r0 << 0x10;
    0x00004910 lsr r3, r3, 0x10                              |     r3 >>= 0x10;
    0x00004914 mov r7, 0x32                                  |     r7 = 0x32;
    0x00004918 svc 0                                         |     __asm ("svc 0");
    0x0000491c cmn r0, 0x1000                                |     
                                                             |     if (r0 <= 0x1000) {
    0x00004920 ldrhi ip, [pc, 0xd98]                         |         ip = *((pc + 0xd98));
                                                             |     }
    0x00004924 rsbhi r0, r0, 0                               |     __asm ("rsbhi r0, r0, 0");
                                                             |     if (r0 <= 0x1000) {
    0x00004928 ldrhi ip, [r4, ip]                            |         ip = *((r4 + ip));
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x0000492c strhi r0, [ip]                                |         *(ip) = r0;
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x00004930 mvnhi r0, 0                                   |         r0 = ~0;
                                                             |     }
    0x00004934 lsl r0, r0, 0x10                              |     r0 <<= 0x10;
    0x00004938 lsr r0, r0, 0x10                              |     r0 >>= 0x10;
    0x0000493c cmp r1, r2                                    |     
    0x00004940 cmpeq r0, r3                                  |     __asm ("cmpeq r0, r3");
                                                             |     if (r1 != r2) {
    0x00004944 bne 0x481c                                    |         goto label_0;
                                                             |     }
                                                             | label_2:
    0x00004948 ldr r0, [pc, 0xd8c]                           |     r0 = *(0x56d8);
    0x0000494c ldr r2, [fp, -0x164]                          |     r2 = var_164h;
    0x00004950 mov r3, 0                                     |     r3 = 0;
    0x00004954 ldr r1, [fp, -0x14c]                          |     r1 = var_14ch;
    0x00004958 add r0, pc, r0                                |     r0 = pc + r0;
    0x0000495c str r3, [r2]                                  |     *(r2) = r3;
    0x00004960 bl 0x17c0                                     |     dl_getenv ();
    0x00004964 ldr r3, [fp, -0x168]                          |     r3 = var_168h;
    0x00004968 ldr r1, [fp, -0x14c]                          |     r1 = var_14ch;
    0x0000496c str r0, [r3]                                  |     *(r3) = r0;
    0x00004970 ldr r0, [pc, 0xd68]                           |     r0 = *(0x56dc);
    0x00004974 add r0, pc, r0                                |     r0 = pc + r0;
    0x00004978 bl 0x17c0                                     |     dl_getenv ();
    0x0000497c ldr r3, [pc, 0xd54]                           |     r3 = *(0x56d4);
    0x00004980 ldr r3, [r4, r3]                              |     r3 = *((r4 + r3));
    0x00004984 str r0, [r3]                                  |     *(r3) = r0;
                                                             | label_34:
    0x00004988 ldr r3, [pc, 0xd54]                           |     r3 = *(0x56e0);
    0x0000498c ldr r2, [pc, 0xd54]                           |     r2 = *(0x56e4);
    0x00004990 ldr r3, [r4, r3]                              |     r3 = *((r4 + r3));
    0x00004994 add r2, pc, r2                                |     r2 = pc + r2;
    0x00004998 str r2, [r3]                                  |     *(r3) = r2;
    0x0000499c ldr r3, [pc, 0xd48]                           |     r3 = *(0x56e8);
    0x000049a0 ldr r2, [pc, 0xd48]                           |     r2 = *(0x56ec);
    0x000049a4 ldr r3, [r4, r3]                              |     r3 = *((r4 + r3));
    0x000049a8 add r2, pc, r2                                |     r2 = pc + r2;
    0x000049ac str r2, [r3]                                  |     *(r3) = r2;
    0x000049b0 ldr r1, [r5, 0x2c]                            |     r1 = *((r5 + 0x2c));
    0x000049b4 ldr r2, [r5, 0x1c]                            |     r2 = *((r5 + 0x1c));
    0x000049b8 mov r3, 0                                     |     r3 = 0;
                                                             | label_4:
    0x000049bc cmp r1, r3                                    |     
    0x000049c0 add r0, r2, r3, lsl 5                         |     r0 = r2 + (r3 << 5);
                                                             |     if (r1 != r3) {
    0x000049c4 beq 0x49e0                                    |         
    0x000049c8 ldr ip, [r2, r3, lsl 5]                       |         offset_0 = r3 << 5;
                                                             |         ip = *((r2 + offset_0));
    0x000049cc cmp ip, 6                                     |         
                                                             |         if (ip != 6) {
    0x000049d0 bne 0x4c40                                    |             goto label_35;
                                                             |         }
    0x000049d4 ldr r3, [r0, 8]                               |         r3 = *((r0 + 8));
    0x000049d8 sub r2, r2, r3                                |         r2 -= r3;
    0x000049dc str r2, [fp, -0x13c]                          |         var_13ch = r2;
                                                             |     }
    0x000049e0 mov r0, 0x14                                  |     r0 = 0x14;
    0x000049e4 bl 0x2c8c                                     |     fcn_00002c8c (r0);
    0x000049e8 ldr r3, [r5, 0x1c]                            |     r3 = *((r5 + 0x1c));
    0x000049ec mov sl, 0                                     |     sl = 0;
    0x000049f0 str r3, [fp, -0x150]                          |     var_150h = r3;
    0x000049f4 str sl, [fp, -0x170]                          |     var_170h = sl;
    0x000049f8 str sl, [fp, -0x148]                          |     var_148h = sl;
    0x000049fc str sl, [fp, -0x158]                          |     var_158h = sl;
    0x00004a00 mov sb, r0                                    |     sb = r0;
                                                             | label_8:
    0x00004a04 ldr r3, [fp, -0x148]                          |     r3 = var_148h;
    0x00004a08 ldr r2, [fp, -0x150]                          |     r2 = var_150h;
    0x00004a0c lsl r3, r3, 5                                 |     r3 <<= 5;
    0x00004a10 add r8, r3, r2                                |     r8 = r3 + r2;
    0x00004a14 str r3, [fp, -0x160]                          |     var_160h = r3;
    0x00004a18 ldr r2, [fp, -0x148]                          |     r2 = var_148h;
    0x00004a1c ldr r3, [r5, 0x2c]                            |     r3 = *((r5 + 0x2c));
    0x00004a20 cmp r3, r2                                    |     
                                                             |     if (r3 >= r2) {
    0x00004a24 bls 0x4b24                                    |         
    0x00004a28 ldr r2, [fp, -0x148]                          |         r2 = var_148h;
    0x00004a2c ldr r3, [fp, -0x150]                          |         r3 = var_150h;
    0x00004a30 ldr r3, [r3, r2, lsl 5]                       |         offset_1 = r2 << 5;
                                                             |         r3 = *((r3 + offset_1));
    0x00004a34 ldr r2, [pc, 0xcb8]                           |         r2 = *(0x56f0);
    0x00004a38 cmp r3, r2                                    |         
                                                             |         if (r3 != r2) {
    0x00004a3c ldreq r2, [r8, 8]                             |             r2 = *((r8 + 8));
                                                             |         }
                                                             |         if (r3 != r2) {
    0x00004a40 ldreq sl, [r8, 0x14]                          |             sl = *((r8 + 0x14));
                                                             |         }
                                                             |         if (r3 != r2) {
    0x00004a44 streq r2, [fp, -0x170]                        |             var_170h = r2;
                                                             |         }
    0x00004a48 ldr r2, [fp, -0x158]                          |         r2 = var_158h;
    0x00004a4c cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x00004a50 bne 0x4c48                                    |             goto label_36;
                                                             |         }
    0x00004a54 cmp r3, 1                                     |         
                                                             |         if (r3 != 1) {
    0x00004a58 bne 0x4c48                                    |             goto label_36;
                                                             |         }
    0x00004a5c ldr r2, [r6]                                  |         r2 = *(r6);
    0x00004a60 ldr r3, [r8, 8]                               |         r3 = *((r8 + 8));
    0x00004a64 add r3, r2, r3                                |         r3 = r2 + r3;
    0x00004a68 str r3, [fp, -0x158]                          |         var_158h = r3;
                                                             | label_5:
    0x00004a6c ldr r3, [fp, -0x160]                          |         r3 = var_160h;
    0x00004a70 ldr r2, [fp, -0x150]                          |         r2 = var_150h;
    0x00004a74 ldr r3, [r3, r2]                              |         r3 = *((r3 + r2));
    0x00004a78 cmp r3, 3                                     |         
                                                             |         if (r3 == 3) {
    0x00004a7c bne 0x4ac4                                    |             
    0x00004a80 ldr r3, [r8, 8]                               |             r3 = *((r8 + 8));
    0x00004a84 ldr r0, [r6]                                  |             r0 = *(r6);
    0x00004a88 add r0, r0, r3                                |             r0 += r3;
    0x00004a8c ldr r3, [fp, -0x15c]                          |             r3 = var_15ch;
    0x00004a90 str r0, [r3, 4]                               |             *((r3 + 4)) = r0;
    0x00004a94 bl 0x3274                                     |             dl_strdup ();
    0x00004a98 mov r3, 0                                     |             r3 = 0;
    0x00004a9c sub r1, r0, 1                                 |             r1 = r0 - 1;
                                                             | label_7:
    0x00004aa0 ldrb r2, [r1, 1]!                             |             r2 = *((r1 += 1));
    0x00004aa4 cmp r2, 0                                     |             
                                                             |             if (r2 != 0) {
    0x00004aa8 bne 0x4dac                                    |                 goto label_37;
                                                             |             }
    0x00004aac cmp r3, 0                                     |             
                                                             |             if (r3 != 0) {
    0x00004ab0 moveq r3, r0                                  |                 r3 = r0;
                                                             |             }
    0x00004ab4 strb r2, [r3]                                 |             *(r3) = r2;
    0x00004ab8 ldr r3, [pc, 0xc38]                           |             r3 = *(0x56f4);
    0x00004abc ldr r3, [r4, r3]                              |             r3 = *((r4 + r3));
    0x00004ac0 str r0, [r3]                                  |             *(r3) = r0;
                                                             |         }
    0x00004ac4 ldr r3, [fp, -0x160]                          |         r3 = var_160h;
    0x00004ac8 ldr r2, [fp, -0x150]                          |         r2 = var_150h;
    0x00004acc ldr r3, [r3, r2]                              |         r3 = *((r3 + r2));
    0x00004ad0 cmp r3, 7                                     |         
                                                             |         if (r3 != 7) {
    0x00004ad4 bne 0x4db8                                    |             goto label_38;
                                                             |         }
    0x00004ad8 ldr r3, [r8, 0x14]                            |         r3 = *((r8 + 0x14));
    0x00004adc cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00004ae0 beq 0x4b24                                    |             goto label_39;
                                                             |         }
    0x00004ae4 str r3, [r6, 0x1c]                            |         var_1ch = r3;
    0x00004ae8 ldr r3, [r8, 0x1c]                            |         r3 = *((r8 + 0x1c));
    0x00004aec ldr r2, [r8, 8]                               |         r2 = *((r8 + 8));
    0x00004af0 cmp r3, 0                                     |         
    0x00004af4 str r3, [r6, 0x20]                            |         var_20h_3 = r3;
                                                             |         if (r3 == 0) {
    0x00004af8 subne r3, r3, 1                               |             r3--;
                                                             |         }
                                                             |         if (r3 == 0) {
    0x00004afc andne r3, r3, r2                              |             r3 &= r2;
                                                             |         }
    0x00004b00 str r3, [r6, 0x24]                            |         var_24h = r3;
    0x00004b04 ldr r3, [r8, 0x10]                            |         r3 = *((r8 + 0x10));
    0x00004b08 str r2, [r6, 0x14]                            |         var_14h = r2;
    0x00004b0c ldr r2, [pc, 0xbe8]                           |         r2 = *(0x56f8);
    0x00004b10 str r3, [r6, 0x18]                            |         var_18h = r3;
    0x00004b14 mov r3, 1                                     |         r3 = 1;
    0x00004b18 str r3, [r6, 0x2c]                            |         var_2ch = r3;
    0x00004b1c ldr r2, [r4, r2]                              |         r2 = *((r4 + r2));
    0x00004b20 str r3, [r2]                                  |         *(r2) = r3;
                                                             |     }
                                                             | label_39:
    0x00004b24 ldr r3, [fp, -0x170]                          |     r3 = var_170h;
    0x00004b28 ldr r0, [pc, 0xbd0]                           |     r0 = "_";
    0x00004b2c str r3, [r6, 0x100]                           |     var_100h = r3;
    0x00004b30 ldr r3, [r6, 0x14]                            |     r3 = var_14h;
    0x00004b34 str sl, [r6, 0x104]                           |     var_104h = sl;
    0x00004b38 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00004b3c ldrne r2, [r6]                                |         r2 = *(r6);
                                                             |     }
    0x00004b40 ldr r1, [fp, -0x14c]                          |     r1 = var_14ch;
                                                             |     if (r3 == 0) {
    0x00004b44 addne r3, r3, r2                              |         r3 += r2;
                                                             |     }
                                                             |     if (r3 == 0) {
    0x00004b48 strne r3, [r6, 0x14]                          |         *((r6 + 0x14)) = r3;
                                                             |     }
    0x00004b4c add r0, pc, r0                                |     r0 = pc + r0;
    0x00004b50 bl 0x17c0                                     |     r0 = dl_getenv ();
    0x00004b54 adds r3, r0, 0                                |     r3 = r0 + 0;
                                                             |     if (r3 == r0) {
    0x00004b58 movne r3, 1                                   |         r3 = 1;
                                                             |     }
    0x00004b5c str r3, [fp, -0x16c]                          |     var_16ch = r3;
    0x00004b60 ldr r3, [r5, 0x3c]                            |     r3 = *((r5 + 0x3c));
    0x00004b64 str r0, [fp, -0x150]                          |     var_150h = r0;
    0x00004b68 str r3, [fp, -0x158]                          |     var_158h = r3;
    0x00004b6c ldr r3, [pc, 0xb90]                           |     
    0x00004b70 ldr r3, [r4, r3]                              |     r3 = *((r4 + r3));
    0x00004b74 str r3, [fp, -0x148]                          |     var_148h = r3;
    0x00004b78 ldr r3, [r3]                                  |     r3 = *(0x5700);
    0x00004b7c str r3, [sb, 4]                               |     *((sb + 4)) = r3;
    0x00004b80 mov r3, 1                                     |     r3 = 1;
    0x00004b84 str r3, [sb]                                  |     *(sb) = r3;
    0x00004b88 ldr r3, [fp, -0x158]                          |     r3 = var_158h;
    0x00004b8c str r3, [sb, 0x10]                            |     *((sb + 0x10)) = r3;
    0x00004b90 ldr r3, [pc, 0xb70]                           |     r3 = *(0x5704);
    0x00004b94 add r3, pc, r3                                |     r3 = pc + r3;
    0x00004b98 str r3, [sb, 8]                               |     *((sb + 8)) = r3;
    0x00004b9c ldr r3, [pc, 0xb68]                           |     
    0x00004ba0 ldr r3, [r4, r3]                              |     r3 = *((r4 + r3));
    0x00004ba4 str sb, [r3]                                  |     *(r3) = sb;
    0x00004ba8 str r3, [fp, -0x160]                          |     var_160h = r3;
    0x00004bac ldr r3, [fp, -0x168]                          |     r3 = var_168h;
    0x00004bb0 ldr r3, [r3]                                  |     r3 = *(0x5708);
    0x00004bb4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00004bb8 beq 0x4f34                                    |         goto label_40;
                                                             |     }
                                                             |     do {
    0x00004bbc ldrb r1, [r3]                                 |         r1 = *(r3);
    0x00004bc0 mov r6, r3                                    |         r6 = r3;
    0x00004bc4 cmp r1, 0x20                                  |         
    0x00004bc8 cmpne r1, 0x3a                                |         __asm ("cmpne r1, 0x3a");
                                                             |         if (r1 != 0x20) {
    0x00004bcc moveq r2, 1                                   |             r2 = 1;
                                                             |         }
                                                             |         if (r1 == 0x20) {
    0x00004bd0 movne r2, 0                                   |             r2 = 0;
                                                             |         }
    0x00004bd4 cmp r1, 9                                     |         
                                                             |         if (r1 != 9) {
    0x00004bd8 orreq r2, r2, 1                               |             r2 |= 1;
                                                             |         }
    0x00004bdc cmp r2, 0                                     |         
    0x00004be0 add r3, r3, 1                                 |         r3++;
    0x00004be4 bne 0x4bbc                                    |         
                                                             |     } while (r2 != 0);
    0x00004be8 ldr r3, [pc, 0xb20]                           |     r3 = *(0x570c);
    0x00004bec ldr sl, [pc, 0xb20]                           |     sl = *(0x5710);
    0x00004bf0 ldr sb, [pc, 0xb20]                           |     sb = *(0x5714);
    0x00004bf4 add r3, pc, r3                                |     r3 = pc + r3;
    0x00004bf8 add sl, pc, sl                                |     sl = pc + sl;
    0x00004bfc add sb, pc, sb                                |     sb = pc + sb;
    0x00004c00 str r3, [fp, -0x168]                          |     var_168h = r3;
                                                             | label_9:
    0x00004c04 ldrb r3, [r6]                                 |     r3 = *(r6);
    0x00004c08 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00004c0c beq 0x4f34                                    |         goto label_40;
                                                             |     }
    0x00004c10 mov r7, r6                                    |     r7 = r6;
    0x00004c14 b 0x4dcc                                      |     goto label_41;
                                                             | label_32:
    0x00004c18 ldr r2, [r5, 0x64]                            |     r2 = *((r5 + 0x64));
    0x00004c1c cmp r3, r2                                    |     
                                                             |     if (r3 != r2) {
    0x00004c20 bne 0x4828                                    |         goto label_1;
                                                             |     }
    0x00004c24 ldr r2, [r5, 0x6c]                            |     r2 = *((r5 + 0x6c));
    0x00004c28 ldr r3, [r5, 0x74]                            |     r3 = *((r5 + 0x74));
    0x00004c2c cmp r2, r3                                    |     
                                                             |     if (r2 != r3) {
    0x00004c30 bne 0x4828                                    |         goto label_1;
                                                             |     }
    0x00004c34 b 0x4948                                      |     goto label_2;
                                                             | label_33:
    0x00004c38 mov r0, r3                                    |     r0 = r3;
    0x00004c3c b 0x4864                                      |     goto label_3;
                                                             | label_35:
    0x00004c40 add r3, r3, 1                                 |     r3++;
    0x00004c44 b 0x49bc                                      |     goto label_4;
                                                             | label_36:
    0x00004c48 cmp r3, 2                                     |     
                                                             |     if (r3 != 2) {
    0x00004c4c bne 0x4a6c                                    |         goto label_5;
                                                             |     }
    0x00004c50 mov r2, r6                                    |     r2 = r6;
    0x00004c54 ldr r3, [r2], 0x6c                            |     r3 = *(r2);
                                                             |     r2 += 0x6c;
    0x00004c58 ldr r0, [r8, 8]                               |     r0 = *((r8 + 8));
    0x00004c5c str r2, [fp, -0x16c]                          |     var_16ch = r2;
    0x00004c60 add r0, r3, r0                                |     r0 = r3 + r0;
    0x00004c64 mov r2, sb                                    |     r2 = sb;
    0x00004c68 ldr r1, [fp, -0x16c]                          |     r1 = var_16ch;
    0x00004c6c bl 0x3584                                     |     dl_parse_dynamic_info ();
    0x00004c70 ldr r3, [r6, 0xc4]                            |     r3 = var_c4h;
    0x00004c74 cmp r3, 0                                     |     
    0x00004c78 bne 0x4d28                                    |     
                                                             |     while (r2 < r3) {
    0x00004c7c ldr r2, [pc, 0xa98]                           |         r2 = *(0x5718);
    0x00004c80 ldr r1, [r6]                                  |         r1 = *(r6);
    0x00004c84 ldr r0, [r4, r2]                              |         r0 = *((r4 + r2));
    0x00004c88 ldr r3, [r8, 8]                               |         r3 = *((r8 + 8));
    0x00004c8c ldr r2, [r8, 0x10]                            |         r2 = *((r8 + 0x10));
    0x00004c90 add r3, r1, r3                                |         r3 = r1 + r3;
    0x00004c94 str r2, [sp]                                  |         *(sp) = r2;
    0x00004c98 ldr r2, [fp, -0x16c]                          |         r2 = var_16ch;
    0x00004c9c ldr r0, [r0]                                  |         r0 = *(r0);
    0x00004ca0 bl 0x3364                                     |         dl_add_elf_hash_table ();
    0x00004ca4 ldr r3, [pc, 0xa58]                           |         r3 = *(0x5700);
    0x00004ca8 mov r2, 1                                     |         r2 = 1;
    0x00004cac ldr r7, [r4, r3]                              |         r7 = *((r4 + r3));
    0x00004cb0 ldr r3, [r7]                                  |         r3 = *(r7);
    0x00004cb4 str r2, [r3, 0x3c]                            |         *((r3 + 0x3c)) = r2;
    0x00004cb8 ldr r2, [r5, 0x1c]                            |         r2 = *((r5 + 0x1c));
    0x00004cbc str r2, [r3, 0xfc]                            |         *((r3 + 0xfc)) = r2;
    0x00004cc0 ldr r2, [r5, 0x2c]                            |         r2 = *((r5 + 0x2c));
    0x00004cc4 str r2, [r3, 0xf8]                            |         *((r3 + 0xf8)) = r2;
    0x00004cc8 mov r6, r0                                    |         r6 = r0;
    0x00004ccc mov r0, 0x18                                  |         r0 = 0x18;
    0x00004cd0 bl 0x2c8c                                     |         fcn_00002c8c (r0);
    0x00004cd4 ldr r3, [pc, 0xa44]                           |         r3 = *(0x571c);
    0x00004cd8 ldr r2, [r7]                                  |         r2 = *(r7);
    0x00004cdc str r0, [fp, -0x140]                          |         var_140h = r0;
    0x00004ce0 ldr r3, [r4, r3]                              |         r3 = *((r4 + r3));
    0x00004ce4 str r0, [r3]                                  |         *(r3) = r0;
    0x00004ce8 ldr r3, [fp, -0x158]                          |         r3 = var_158h;
    0x00004cec str r2, [r0]                                  |         *(r0) = r2;
    0x00004cf0 str r3, [r6, 0x38]                            |         *((r6 + 0x38)) = r3;
    0x00004cf4 ldr r3, [fp, -0x154]                          |         r3 = var_154h;
    0x00004cf8 orr r3, r3, 0x100                             |         r3 |= 0x100;
    0x00004cfc str r3, [r6, 0x50]                            |         *((r6 + 0x50)) = r3;
    0x00004d00 ldrh r3, [r6, 0x4c]                           |         r3 = *((r6 + 0x4c));
    0x00004d04 add r3, r3, 1                                 |         r3++;
    0x00004d08 strh r3, [r6, 0x4c]                           |         *((r6 + 0x4c)) = r3;
    0x00004d0c ldr r3, [r6, 0x78]                            |         r3 = *((r6 + 0x78));
    0x00004d10 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00004d14 ldrne r1, [pc, 0xa08]                         |             r1 = *((pc + 0xa08));
                                                             |         }
                                                             |         if (r3 == 0) {
    0x00004d18 ldrne r1, [r4, r1]                            |             r1 = *((r4 + r1));
                                                             |         }
                                                             |         if (r3 == 0) {
    0x00004d1c strne r2, [r3, 4]                             |             *((r3 + 4)) = r2;
                                                             |         }
                                                             |         if (r3 == 0) {
    0x00004d20 strne r1, [r3, 8]                             |             *((r3 + 8)) = r1;
                                                             |         }
    0x00004d24 b 0x4a6c                                      |         goto label_5;
    0x00004d28 ldr ip, [r5, 0x1c]                            |         ip = *((r5 + 0x1c));
    0x00004d2c mov r3, 0                                     |         r3 = 0;
                                                             | label_6:
    0x00004d30 ldr r2, [r5, 0x2c]                            |         r2 = *((r5 + 0x2c));
    0x00004d34 add lr, ip, r3, lsl 5                         |         lr = ip + (r3 << 5);
    0x00004d38 cmp r2, r3                                    |         
    0x00004d3c bls 0x4c7c                                    |         
                                                             |     }
    0x00004d40 ldr r2, [ip, r3, lsl 5]                       |     offset_2 = r3 << 5;
                                                             |     r2 = *((ip + offset_2));
    0x00004d44 cmp r2, 1                                     |     
                                                             |     if (r2 == 1) {
    0x00004d48 bne 0x4da4                                    |         
    0x00004d4c ldr r2, [lr, 0x18]                            |         r2 = *((lr + 0x18));
    0x00004d50 tst r2, 2                                     |         
                                                             |         if ((r2 & 2) != 0) {
    0x00004d54 bne 0x4da4                                    |             goto label_42;
                                                             |         }
    0x00004d58 ldr r0, [lr, 8]                               |         r0 = *((lr + 8));
    0x00004d5c ldr r1, [fp, -0x174]                          |         r1 = var_174h;
    0x00004d60 ldr r2, [r6]                                  |         r2 = *(r6);
    0x00004d64 ldr lr, [lr, 0x10]                            |         
    0x00004d68 add r2, r2, r0                                |         r2 += r0;
    0x00004d6c ldr r0, [r1]                                  |         r0 = *(r1);
    0x00004d70 mov r7, 0x7d                                  |         r7 = 0x7d;
    0x00004d74 sub r1, r0, 1                                 |         r1 = r0 - 1;
    0x00004d78 and r1, r1, r2                                |         r1 &= r2;
    0x00004d7c rsb r0, r0, 0                                 |         r0 -= ;
    0x00004d80 and r0, r0, r2                                |         r0 &= r2;
    0x00004d84 add r1, r1, lr                                |         r1 += lr;
    0x00004d88 mov r2, 7                                     |         r2 = 7;
    0x00004d8c svc 0                                         |         __asm ("svc 0");
    0x00004d90 cmn r0, 0x1000                                |         
                                                             |         if (r0 <= 0x1000) {
    0x00004d94 ldrhi r2, [pc, 0x924]                         |             r2 = *((pc + 0x924));
                                                             |         }
    0x00004d98 rsbhi r0, r0, 0                               |         __asm ("rsbhi r0, r0, 0");
                                                             |         if (r0 <= 0x1000) {
    0x00004d9c ldrhi r2, [r4, r2]                            |             r2 = *((r4 + r2));
                                                             |         }
                                                             |         if (r0 > 0x1000) {
    0x00004da0 strhi r0, [r2]                                |             *(r2) = r0;
                                                             |             goto label_42;
                                                             |         }
                                                             |     }
                                                             | label_42:
    0x00004da4 add r3, r3, 1                                 |     r3++;
    0x00004da8 b 0x4d30                                      |     goto label_6;
                                                             | label_37:
    0x00004dac cmp r2, 0x2f                                  |     
                                                             |     if (r2 != 0x2f) {
    0x00004db0 moveq r3, r1                                  |         r3 = r1;
                                                             |     }
    0x00004db4 b 0x4aa0                                      |     goto label_7;
                                                             | label_38:
    0x00004db8 ldr r3, [fp, -0x148]                          |     r3 = var_148h;
    0x00004dbc add r3, r3, 1                                 |     r3++;
    0x00004dc0 str r3, [fp, -0x148]                          |     var_148h = r3;
    0x00004dc4 b 0x4a04                                      |     goto label_8;
                                                             |     do {
    0x00004dc8 mov r7, r3                                    |         r7 = r3;
                                                             | label_41:
    0x00004dcc mov r3, r7                                    |         r3 = r7;
    0x00004dd0 ldrb r8, [r3], 1                              |         r8 = *(r3);
                                                             |         r3++;
    0x00004dd4 cmp r8, 0                                     |         
    0x00004dd8 cmpne r8, 0x3a                                |         __asm ("cmpne r8, 0x3a");
                                                             |         if (r8 == 0) {
    0x00004ddc beq 0x4df0                                    |             goto label_43;
                                                             |         }
    0x00004de0 cmp r8, 0x20                                  |         
                                                             |         if (r8 == 0x20) {
    0x00004de4 beq 0x4df0                                    |             goto label_43;
                                                             |         }
    0x00004de8 cmp r8, 9                                     |         
    0x00004dec bne 0x4dc8                                    |         
                                                             |     } while (r8 != 9);
                                                             | label_43:
    0x00004df0 mov r3, 0                                     |     r3 = 0;
    0x00004df4 strb r3, [r7]                                 |     *(r7) = r3;
    0x00004df8 ldr r3, [fp, -0x164]                          |     r3 = var_164h;
    0x00004dfc ldr r0, [r3]                                  |     r0 = *(r3);
    0x00004e00 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00004e04 beq 0x4e24                                    |         goto label_44;
                                                             |     }
    0x00004e08 sub r2, r6, 1                                 |     r2 = r6 - 1;
                                                             |     do {
    0x00004e0c ldrb r3, [r2, 1]!                             |         r3 = *((r2 += 1));
    0x00004e10 cmp r3, 0x2f                                  |         
                                                             |         if (r3 == 0x2f) {
    0x00004e14 beq 0x4e60                                    |             goto label_10;
                                                             |         }
    0x00004e18 cmp r3, 0                                     |         
    0x00004e1c bne 0x4e0c                                    |         
                                                             |     } while (r3 != 0);
    0x00004e20 mov r0, 0x4000000                             |     r0 = 0x4000000;
                                                             | label_44:
    0x00004e24 ldr r3, [fp, -0x16c]                          |     r3 = var_16ch;
    0x00004e28 mov r2, 0                                     |     r2 = 0;
    0x00004e2c str r3, [sp]                                  |     *(sp) = r3;
    0x00004e30 sub r1, fp, 0x140                             |     r1 -= var_140h;
    0x00004e34 mov r3, r6                                    |     r3 = r6;
    0x00004e38 bl 0x4460                                     |     r0 = dl_load_shared_library ();
    0x00004e3c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00004e40 bne 0x4eb0                                    |         goto label_45;
                                                             |     }
    0x00004e44 ldr r3, [fp, -0x150]                          |     r3 = var_150h;
    0x00004e48 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00004e4c beq 0x4e90                                    |         goto label_46;
                                                             |     }
    0x00004e50 mov r2, r6                                    |     r2 = r6;
    0x00004e54 mov r1, sb                                    |     r1 = sb;
    0x00004e58 mov r0, 1                                     |     r0 = 1;
    0x00004e5c bl 0x1bf4                                     |     dl_dprintf ()
                                                             | label_10:
    0x00004e60 strb r8, [r7]                                 |     *(r7) = r8;
                                                             |     do {
    0x00004e64 mov r6, r7                                    |         r6 = r7;
    0x00004e68 ldrb r2, [r7], 1                              |         r2 = *(r7);
                                                             |         r7++;
    0x00004e6c cmp r2, 0x20                                  |         
    0x00004e70 cmpne r2, 0x3a                                |         __asm ("cmpne r2, 0x3a");
                                                             |         if (r2 != 0x20) {
    0x00004e74 moveq r3, 1                                   |             r3 = 1;
                                                             |         }
                                                             |         if (r2 == 0x20) {
    0x00004e78 movne r3, 0                                   |             r3 = 0;
                                                             |         }
    0x00004e7c cmp r2, 9                                     |         
                                                             |         if (r2 != 9) {
    0x00004e80 orreq r3, r3, 1                               |             r3 |= 1;
                                                             |         }
    0x00004e84 cmp r3, 0                                     |         
    0x00004e88 bne 0x4e64                                    |         
                                                             |     } while (r3 != 0);
    0x00004e8c b 0x4c04                                      |     goto label_9;
                                                             | label_46:
    0x00004e90 ldr r3, [pc, 0x884]                           |     r3 = *(0x5718);
    0x00004e94 mov r1, sl                                    |     r1 = sl;
    0x00004e98 ldr r2, [r4, r3]                              |     r2 = *((r4 + r3));
    0x00004e9c mov r0, 2                                     |     r0 = 2;
    0x00004ea0 mov r3, r6                                    |     r3 = r6;
    0x00004ea4 ldr r2, [r2]                                  |     r2 = *(r2);
    0x00004ea8 bl 0x1bf4                                     |     dl_dprintf ()
    0x00004eac b 0x4e60                                      |     goto label_10;
                                                             | label_45:
    0x00004eb0 ldr r3, [fp, -0x154]                          |     r3 = var_154h;
    0x00004eb4 orr r3, r3, 0x100                             |     r3 |= 0x100;
    0x00004eb8 str r3, [r0, 0x50]                            |     *((r0 + 0x50)) = r3;
    0x00004ebc ldr r3, [fp, -0x150]                          |     r3 = var_150h;
    0x00004ec0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00004ec4 beq 0x4e60                                    |         goto label_10;
                                                             |     }
    0x00004ec8 ldrh r3, [r0, 0x4e]                           |     r3 = *((r0 + 0x4e));
    0x00004ecc tst r3, 0x10                                  |     
                                                             |     if ((r3 & 0x10) != 0) {
    0x00004ed0 bne 0x4e60                                    |         goto label_10;
                                                             |     }
    0x00004ed4 ldr r3, [pc, 0x840]                           |     r3 = *(0x5718);
    0x00004ed8 sub ip, r6, 1                                 |     
    0x00004edc ldr r3, [r4, r3]                              |     r3 = *((r4 + r3));
    0x00004ee0 ldr r2, [r3]                                  |     r2 = *(0x5718);
    0x00004ee4 sub r2, r2, 1                                 |     r2--;
                                                             | label_11:
    0x00004ee8 ldrb r1, [r2, 1]!                             |     r1 = *((r2 += 1));
    0x00004eec ldrb r3, [ip, 1]!                             |     r3 = *((ip += 1));
    0x00004ef0 cmp r1, 0                                     |     
                                                             |     if (r1 != 0) {
    0x00004ef4 bne 0x4f24                                    |         goto label_47;
                                                             |     }
    0x00004ef8 rsb r3, r3, 0                                 |     r3 -= ;
                                                             | label_12:
    0x00004efc cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00004f00 beq 0x4e60                                    |         goto label_10;
                                                             |     }
    0x00004f04 ldr r3, [r0]                                  |     r3 = *(r0);
    0x00004f08 mov r2, r6                                    |     r2 = r6;
    0x00004f0c str r3, [sp]                                  |     *(sp) = r3;
    0x00004f10 ldr r1, [fp, -0x168]                          |     r1 = var_168h;
    0x00004f14 ldr r3, [r0, 4]                               |     r3 = *((r0 + 4));
    0x00004f18 mov r0, 1                                     |     r0 = 1;
    0x00004f1c bl 0x1bf4                                     |     dl_dprintf ()
    0x00004f20 b 0x4e60                                      |     goto label_10;
                                                             | label_47:
    0x00004f24 cmp r1, r3                                    |     
                                                             |     if (r1 == r3) {
    0x00004f28 beq 0x4ee8                                    |         goto label_11;
                                                             |     }
    0x00004f2c sub r3, r1, r3                                |     r3 = r1 - r3;
    0x00004f30 b 0x4efc                                      |     goto label_12;
                                                             | label_40:
    0x00004f34 ldr r3, [fp, -0x148]                          |     r3 = var_148h;
    0x00004f38 ldr sl, [pc, 0x7e8]                           |     sl = *(0x00005728);
    0x00004f3c ldr r8, [r3]                                  |     r8 = *(r3);
    0x00004f40 ldr r3, [pc, 0x7e4]                           |     r3 = *(0x5728);
    0x00004f44 add sl, pc, sl                                |     sl = pc + sl;
    0x00004f48 mov r6, 0                                     |     r6 = 0;
    0x00004f4c add r3, pc, r3                                |     r3 = pc + r3;
    0x00004f50 str r6, [sl, 8]                               |     *((sl + 8)) = r6;
    0x00004f54 str r3, [fp, -0x170]                          |     var_170h = r3;
                                                             |     do {
    0x00004f58 cmp r8, 0                                     |         
    0x00004f5c ldr r7, [sl, 8]                               |         r7 = *((sl + 8));
                                                             |         if (r8 == 0) {
    0x00004f60 bne 0x5144                                    |             
    0x00004f64 ldr r3, [fp, -0x148]                          |             r3 = var_148h;
    0x00004f68 ldr sb, [pc, 0x7c0]                           |             sb = *(0x00005730);
    0x00004f6c ldr r8, [r3]                                  |             r8 = *(r3);
    0x00004f70 add sb, pc, sb                                |             sb = pc + sb;
    0x00004f74 ldr r3, [r8, 0x3c]                            |             r3 = *((r8 + 0x3c));
    0x00004f78 cmp r3, 1                                     |             
                                                             |             if (r3 != 1) {
    0x00004f7c subeq r3, r7, 1                               |                 r3 = r7 - 1;
                                                             |             }
                                                             |             if (r3 != 1) {
    0x00004f80 streq r3, [sl, 8]                             |                 *((sl + 8)) = r3;
                                                             |             }
    0x00004f84 ldr r0, [sb, 8]                               |             r0 = *((sb + 8));
                                                             |             if (r3 != 1) {
    0x00004f88 ldreq r8, [r8, 0xc]                           |                 r8 = *((r8 + 0xc));
                                                             |             }
    0x00004f8c lsl r0, r0, 2                                 |             r0 <<= 2;
    0x00004f90 bl 0x243c                                     |             r0 = dl_malloc ();
    0x00004f94 sub r3, r0, 4                                 |             r3 = r0 - 4;
    0x00004f98 str r0, [sb, 4]                               |             *((sb + 4)) = r0;
                                                             | label_18:
    0x00004f9c cmp r8, 0                                     |             
                                                             |             if (r8 != 0) {
    0x00004fa0 bne 0x5334                                    |                 goto label_48;
                                                             |             }
    0x00004fa4 ldr r3, [fp, -0x148]                          |             r3 = var_148h;
    0x00004fa8 ldr r3, [r3]                                  |             r3 = *(r3);
    0x00004fac ldr r1, [r3, 0xc]                             |             r1 = *((r3 + 0xc));
    0x00004fb0 ldr r3, [pc, 0x77c]                           |             
    0x00004fb4 add r3, pc, r3                                |             r3 = pc + r3;
    0x00004fb8 ldr r3, [r3, 8]                               |             r3 = *(0x5738);
    0x00004fbc str r3, [fp, -0x164]                          |             var_164h = r3;
                                                             | label_19:
    0x00004fc0 cmp r1, 0                                     |             
                                                             |             if (r1 != 0) {
    0x00004fc4 bne 0x5368                                    |                 goto label_49;
                                                             |             }
    0x00004fc8 cmp r6, 0                                     |             
                                                             |             if (r6 == 0) {
    0x00004fcc bne 0x4ff8                                    |                 
    0x00004fd0 ldr r3, [fp, -0x140]                          |                 r3 = var_140h;
    0x00004fd4 mov r2, r5                                    |                 r2 = r5;
    0x00004fd8 ldr r1, [fp, -0x158]                          |                 r1 = var_158h;
    0x00004fdc ldr r0, [fp, -0x15c]                          |                 r0 = var_15ch;
    0x00004fe0 bl 0x345c                                     |                 fcn_0000345c (r0, r1);
    0x00004fe4 add r7, r7, 1                                 |                 r7++;
    0x00004fe8 ldrh r3, [r0, 0x4c]                           |                 r3 = *((r0 + 0x4c));
    0x00004fec mov r6, r0                                    |                 r6 = r0;
    0x00004ff0 add r3, r3, 1                                 |                 r3++;
    0x00004ff4 strh r3, [r0, 0x4c]                           |                 *((r0 + 0x4c)) = r3;
                                                             |             }
    0x00004ff8 mov r3, 3                                     |             r3 = 3;
    0x00004ffc lsl r8, r7, 2                                 |             r8 = r7 << 2;
    0x00005000 strh r3, [r6, 0x4e]                           |             *((r6 + 0x4e)) = r3;
    0x00005004 mov r0, r8                                    |             r0 = r8;
    0x00005008 bl 0x243c                                     |             dl_malloc ();
    0x0000500c ldr r3, [pc, 0x724]                           |             
    0x00005010 add r3, pc, r3                                |             r3 = pc + r3;
    0x00005014 str r0, [r3, 0x1c]                            |             *((r3 + 0x1c)) = r0;
    0x00005018 ldr r3, [fp, -0x148]                          |             r3 = var_148h;
    0x0000501c sub r2, r0, 4                                 |             r2 = r0 - 4;
    0x00005020 ldr r3, [r3]                                  |             r3 = *(0x5734);
                                                             | label_23:
    0x00005024 cmp r3, 0                                     |             
                                                             |             if (r3 != 0) {
    0x00005028 bne 0x53c4                                    |                 goto label_50;
                                                             |             }
    0x0000502c ldr r3, [fp, -0x148]                          |             r3 = var_148h;
    0x00005030 ldr r6, [r3]                                  |             r6 = *(r3);
    0x00005034 str r0, [r6, 0x40]                            |             *((r6 + 0x40)) = r0;
    0x00005038 str r7, [r6, 0x44]                            |             *((r6 + 0x44)) = r7;
    0x0000503c mov r0, r8                                    |             r0 = r8;
    0x00005040 bl 0x243c                                     |             dl_malloc ();
    0x00005044 ldr r3, [fp, -0x148]                          |             r3 = var_148h;
    0x00005048 ldr r2, [pc, 0x6ec]                           |             r2 = *(0x5738);
    0x0000504c ldr r3, [r3]                                  |             r3 = *(r3);
    0x00005050 ldr r1, [pc, 0x6e8]                           |             r1 = *(0x573c);
    0x00005054 ldr r8, [r3, 0xc]                             |             r8 = *((r3 + 0xc));
    0x00005058 add r1, pc, r1                                |             r1 = pc + r1;
    0x0000505c add r6, r6, 0x40                              |             r6 += 0x40;
    0x00005060 mov r3, 4                                     |             r3 = 4;
    0x00005064 add r2, pc, r2                                |             r2 = pc + r2;
    0x00005068 str r1, [fp, -0x158]                          |             var_158h = r1;
    0x0000506c mov sl, r0                                    |             sl = r0;
                                                             | label_24:
    0x00005070 cmp r8, 0                                     |             
                                                             |             if (r8 != 0) {
    0x00005074 bne 0x53d0                                    |                 goto label_51;
                                                             |             }
    0x00005078 mov r0, sl                                    |             r0 = sl;
    0x0000507c bl 0x1894                                     |             dl_free ();
    0x00005080 ldr r3, [fp, -0x150]                          |             r3 = var_150h;
    0x00005084 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00005088 movne r0, r8                                  |                 r0 = r8;
                                                             |             }
                                                             |             if (r3 != 0) {
    0x0000508c bne 0x532c                                    |                 goto label_52;
                                                             |             }
    0x00005090 ldr r3, [pc, 0x6ac]                           |             r3 = *(0x5740);
    0x00005094 add r3, pc, r3                                |             r3 = pc + r3;
    0x00005098 ldrb r8, [r3, 0x14]                           |             r8 = *((r3 + 0x14));
    0x0000509c bl 0x2b64                                     |             init_tls ();
    0x000050a0 ldr r3, [pc, 0x678]                           |             r3 = *(0x571c);
    0x000050a4 ldr r3, [r4, r3]                              |             r3 = *((r4 + r3));
    0x000050a8 mov r7, r0                                    |             r7 = r0;
    0x000050ac ldr r0, [r3]                                  |             r0 = *(0x571c);
    0x000050b0 cmp r0, 0                                     |             
                                                             |             if (r0 != 0) {
    0x000050b4 beq 0x50d0                                    |                 
    0x000050b8 ldr r2, [fp, -0x154]                          |                 r2 = var_154h;
    0x000050bc mov r1, r6                                    |                 r1 = r6;
    0x000050c0 bl 0x22f4                                     |                 r0 = dl_fixup ();
    0x000050c4 cmp r0, 0                                     |                 
                                                             |                 if (r0 == 0) {
    0x000050c8 mvnne r0, 0                                   |                     r0 = ~0;
                                                             |                 }
                                                             |                 if (r0 != 0) {
    0x000050cc bne 0x532c                                    |                     goto label_52;
                                                             |                 }
                                                             |             }
    0x000050d0 ldr r3, [fp, -0x148]                          |             r3 = var_148h;
    0x000050d4 ldr sb, [r3]                                  |             sb = *(r3);
                                                             | label_26:
    0x000050d8 cmp sb, 0                                     |             
                                                             |             if (sb != 0) {
    0x000050dc bne 0x5460                                    |                 goto label_53;
                                                             |             }
    0x000050e0 cmp r8, 0                                     |             
                                                             |             if (r8 == 0) {
    0x000050e4 bne 0x510c                                    |                 
    0x000050e8 ldr r3, [pc, 0x60c]                           |                 
    0x000050ec ldr r3, [r4, r3]                              |                 r3 = *((r4 + r3));
    0x000050f0 ldr r3, [r3]                                  |                 r3 = *(0x56f8);
    0x000050f4 cmp r3, 0                                     |                 
                                                             |                 if (r3 == 0) {
    0x000050f8 ldrne r3, [pc, 0x648]                         |                     r3 = *((pc + 0x648));
                                                             |                 }
                                                             |                 if (r3 == 0) {
    0x000050fc ldrne r2, [r4, r3]                            |                     r2 = *((r4 + r3));
                                                             |                 }
                                                             |                 if (r3 == 0) {
    0x00005100 ldrne r3, [r2]                                |                     r3 = *(r2);
                                                             |                 }
                                                             |                 if (r3 == 0) {
    0x00005104 addne r3, r3, 1                               |                     r3++;
                                                             |                 }
                                                             |                 if (r3 != 0) {
    0x00005108 strne r3, [r2]                                |                     *(r2) = r3;
                                                             |                     goto label_54;
                                                             |                 }
                                                             |             }
                                                             | label_54:
    0x0000510c mov r0, r7                                    |             r0 = r7;
    0x00005110 bl 0x15ac                                     |             dl_allocate_tls_init ();
    0x00005114 ldr r3, [pc, 0x630]                           |             r3 = *(0x5748);
    0x00005118 add r3, pc, r3                                |             r3 = pc + r3;
    0x0000511c ldrb r3, [r3, 0x14]                           |             r3 = *((r3 + 0x14));
    0x00005120 cmp r3, 0                                     |             
                                                             |             if (r3 != 0) {
    0x00005124 bne 0x547c                                    |                 goto label_55;
                                                             |             }
    0x00005128 mov r0, r7                                    |             r0 = r7;
    0x0000512c ldr r7, [pc, 0x61c]                           |             r7 = *(0x574c);
    0x00005130 svc 0                                         |             __asm ("svc 0");
    0x00005134 cmn r0, 0x1000                                |             
                                                             |             if (r0 < 0x1000) {
    0x00005138 bls 0x547c                                    |                 goto label_55;
                                                             |             }
    0x0000513c mov r0, 0x1e                                  |             r0 = 0x1e;
    0x00005140 b 0x532c                                      |             goto label_52;
                                                             |         }
    0x00005144 ldr r3, [pc, 0x608]                           |         r3 = *(0x5750);
    0x00005148 ldr sb, [r8, 8]                               |         sb = *((r8 + 8));
    0x0000514c add r3, pc, r3                                |         r3 = pc + r3;
    0x00005150 str r3, [fp, -0x164]                          |         var_164h = r3;
    0x00005154 ldr r3, [pc, 0x5fc]                           |         r3 = "_hash";
    0x00005158 add r7, r7, 1                                 |         r7++;
    0x0000515c add r3, pc, r3                                |         r3 = pc + r3;
    0x00005160 add sb, sb, 8                                 |         sb += 8;
    0x00005164 str r7, [sl, 8]                               |         *((sl + 8)) = r7;
    0x00005168 str r3, [fp, -0x168]                          |         var_168h = r3;
                                                             | label_16:
    0x0000516c ldr r3, [sb, -8]                              |         r3 = *((sb - 8));
    0x00005170 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x00005174 ldreq r8, [r8, 0xc]                           |             r8 = *((r8 + 0xc));
                                                             |         }
    0x00005178 beq 0x4f58                                    |         
                                                             |     } while (r3 == 0);
    0x0000517c cmp r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x00005180 bne 0x5300                                    |         goto label_56;
                                                             |     }
    0x00005184 ldr r7, [r8, 0x80]                            |     r7 = *((r8 + 0x80));
    0x00005188 ldr r3, [sb, -4]                              |     r3 = *((sb - 4));
    0x0000518c add r7, r7, r3                                |     r7 += r3;
    0x00005190 sub r2, r7, 1                                 |     r2 = r7 - 1;
                                                             |     do {
    0x00005194 ldrb r3, [r2, 1]!                             |         r3 = *((r2 += 1));
    0x00005198 cmp r3, 0                                     |         
    0x0000519c bne 0x5194                                    |         
                                                             |     } while (r3 != 0);
    0x000051a0 mov r0, r3                                    |     r0 = r3;
                                                             | label_13:
    0x000051a4 cmp r2, r7                                    |     
    0x000051a8 mov r3, r2                                    |     r3 = r2;
    0x000051ac sub r1, r2, 1                                 |     r1 = r2 - 1;
                                                             |     if (r2 == r7) {
    0x000051b0 beq 0x51e4                                    |         goto label_57;
                                                             |     }
    0x000051b4 ldrb r3, [r2, -1]                             |     r3 = *((r2 - 1));
    0x000051b8 cmp r3, 0x2f                                  |     
                                                             |     if (r3 == 0x2f) {
    0x000051bc beq 0x52a4                                    |         goto label_58;
                                                             |     }
                                                             |     do {
    0x000051c0 mov r3, r1                                    |         r3 = r1;
    0x000051c4 cmp r3, r7                                    |         
    0x000051c8 sub r1, r1, 1                                 |         r1--;
                                                             |         if (r3 == r7) {
    0x000051cc beq 0x51e4                                    |             goto label_57;
                                                             |         }
    0x000051d0 ldrb r2, [r3, -1]                             |         r2 = *((r3 - 1));
    0x000051d4 cmp r2, 0x2f                                  |         
    0x000051d8 bne 0x51c0                                    |         
                                                             |     } while (r2 != 0x2f);
    0x000051dc cmp r1, r7                                    |     
                                                             |     if (r1 != r7) {
    0x000051e0 moveq r3, r7                                  |         r3 = r7;
                                                             |     }
                                                             | label_57:
    0x000051e4 ldr r2, [fp, -0x170]                          |     r2 = var_170h;
    0x000051e8 sub r3, r3, 1                                 |     r3--;
    0x000051ec sub r0, r2, 1                                 |     r0 = r2 - 1;
                                                             |     do {
    0x000051f0 ldrb r1, [r3, 1]!                             |         r1 = *((r3 += 1));
    0x000051f4 ldrb r2, [r0, 1]!                             |         r2 = *((r0 += 1));
    0x000051f8 cmp r1, 0                                     |         
                                                             |         if (r1 == 0) {
    0x000051fc bne 0x52b0                                    |             
    0x00005200 rsb r2, r2, 0                                 |             r2 -= ;
                                                             | label_14:
    0x00005204 cmp r2, 0                                     |             
                                                             |             if (r2 != 0) {
    0x00005208 bne 0x52c0                                    |                 goto label_59;
                                                             |             }
    0x0000520c cmp r6, 0                                     |             
    0x00005210 ldrhne r3, [r6, 0x4e]                         |             __asm ("ldrhne r3, [r6, 0x4e]");
                                                             |             if (r6 == 0) {
    0x00005214 orrne r3, r3, 0x10                            |                 r3 |= 0x10;
                                                             |             }
    0x00005218 strhne r3, [r6, 0x4e]                         |             __asm ("strhne r3, [r6, 0x4e]");
                                                             |             if (r6 == 0) {
    0x0000521c bne 0x5238                                    |                 
    0x00005220 ldr r3, [fp, -0x140]                          |                 r3 = var_140h;
    0x00005224 mov r2, r5                                    |                 r2 = r5;
    0x00005228 ldr r1, [fp, -0x158]                          |                 r1 = var_158h;
    0x0000522c ldr r0, [fp, -0x15c]                          |                 r0 = var_15ch;
    0x00005230 bl 0x345c                                     |                 r0 = fcn_0000345c (r0, r1);
    0x00005234 mov r6, r0                                    |                 r6 = r0;
                                                             |             }
    0x00005238 ldrh r3, [r6, 0x4c]                           |             r3 = *((r6 + 0x4c));
    0x0000523c mov r0, r6                                    |             r0 = r6;
    0x00005240 add r3, r3, 1                                 |             r3++;
    0x00005244 strh r3, [r6, 0x4c]                           |             *((r6 + 0x4c)) = r3;
                                                             | label_15:
    0x00005248 ldr r2, [r8, 0x5c]                            |             r2 = *((r8 + 0x5c));
    0x0000524c sub sp, sp, 0x10                              |             
    0x00005250 add r3, sp, 8                                 |             r3 += var_8h;
    0x00005254 str r0, [sp, 0xc]                             |             var_ch = r0;
    0x00005258 str r2, [sp, 8]                               |             var_8h = r2;
    0x0000525c str r3, [r8, 0x5c]                            |             *((r8 + 0x5c)) = r3;
    0x00005260 ldr r3, [fp, -0x154]                          |             r3 = var_154h;
    0x00005264 orr r3, r3, 0x100                             |             r3 |= 0x100;
    0x00005268 str r3, [r0, 0x50]                            |             *((r0 + 0x50)) = r3;
    0x0000526c ldr r3, [fp, -0x150]                          |             r3 = var_150h;
    0x00005270 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00005274 beq 0x5300                                    |                 goto label_56;
                                                             |             }
    0x00005278 ldrh r3, [r0, 0x4e]                           |             r3 = *((r0 + 0x4e));
    0x0000527c tst r3, 0x10                                  |             
                                                             |             if ((r3 & 0x10) != 0) {
    0x00005280 bne 0x5300                                    |                 goto label_56;
                                                             |             }
    0x00005284 ldr r3, [r0]                                  |             r3 = *(r0);
    0x00005288 mov r2, r7                                    |             r2 = r7;
    0x0000528c str r3, [sp]                                  |             *(sp) = r3;
    0x00005290 ldr r1, [fp, -0x164]                          |             r1 = var_164h;
    0x00005294 ldr r3, [r0, 4]                               |             r3 = *((r0 + 4));
    0x00005298 mov r0, 1                                     |             r0 = 1;
    0x0000529c bl 0x1bf4                                     |             dl_dprintf ()
    0x000052a0 b 0x5300                                      |             goto label_56;
                                                             | label_58:
    0x000052a4 mov r2, r1                                    |             r2 = r1;
    0x000052a8 strb r0, [r1]                                 |             *(r1) = r0;
    0x000052ac b 0x51a4                                      |             goto label_13;
                                                             |         }
    0x000052b0 cmp r1, r2                                    |         
    0x000052b4 beq 0x51f0                                    |         
                                                             |     } while (r1 == r2);
    0x000052b8 sub r2, r1, r2                                |     r2 = r1 - r2;
    0x000052bc b 0x5204                                      |     goto label_14;
                                                             | label_59:
    0x000052c0 ldr r3, [fp, -0x16c]                          |     r3 = var_16ch;
    0x000052c4 mov r2, r8                                    |     r2 = r8;
    0x000052c8 str r3, [sp]                                  |     *(sp) = r3;
    0x000052cc sub r1, fp, 0x140                             |     r1 -= var_140h;
    0x000052d0 mov r3, r7                                    |     r3 = r7;
    0x000052d4 mov r0, 0                                     |     r0 = 0;
    0x000052d8 bl 0x4460                                     |     r0 = dl_load_shared_library ();
    0x000052dc cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000052e0 bne 0x5248                                    |         goto label_15;
                                                             |     }
    0x000052e4 ldr r3, [fp, -0x150]                          |     r3 = var_150h;
    0x000052e8 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000052ec beq 0x5308                                    |         
    0x000052f0 mov r2, r7                                    |         r2 = r7;
    0x000052f4 ldr r1, [fp, -0x168]                          |         r1 = var_168h;
    0x000052f8 mov r0, 1                                     |         r0 = 1;
    0x000052fc bl 0x1bf4                                     |         dl_dprintf ()
                                                             | label_56:
    0x00005300 add sb, sb, 8                                 |         sb += 8;
    0x00005304 b 0x516c                                      |         goto label_16;
                                                             |     }
    0x00005308 ldr r3, [pc, 0x40c]                           |     r3 = *(0x5718);
    0x0000530c ldr r1, [pc, 0x448]                           |     r1 = *(0x5758);
    0x00005310 ldr r2, [r4, r3]                              |     r2 = *((r4 + r3));
    0x00005314 mov r0, 2                                     |     r0 = 2;
    0x00005318 mov r3, r7                                    |     r3 = r7;
    0x0000531c ldr r2, [r2]                                  |     r2 = *(r2);
    0x00005320 add r1, pc, r1                                |     r1 = pc + r1;
    0x00005324 bl 0x1bf4                                     |     dl_dprintf ()
    0x00005328 mov r0, 0x10                                  |     r0 = 0x10;
                                                             | label_52:
    0x0000532c mov r7, 1                                     |     r7 = 1;
    0x00005330 b 0x47c0                                      |     goto label_17;
                                                             | label_48:
    0x00005334 str r8, [r3, 4]!                              |     *((r3 += 4)) = r8;
    0x00005338 ldr r8, [r8, 0xc]                             |     r8 = *((r8 + 0xc));
    0x0000533c b 0x4f9c                                      |     goto label_18;
                                                             |     do {
    0x00005340 mov r2, r3                                    |         r2 = r3;
                                                             | label_20:
    0x00005344 ldr ip, [r0, r2, lsl 2]                       |         offset_3 = r2 << 2;
                                                             |         ip = *((r0 + offset_3));
    0x00005348 add r3, r2, 1                                 |         r3 = r2 + 1;
    0x0000534c cmp ip, r1                                    |         
    0x00005350 bne 0x5340                                    |         
                                                             |     } while (ip != r1);
                                                             |     do {
    0x00005354 ldr ip, [fp, -0x164]                          |         ip = var_164h;
    0x00005358 cmp ip, r3                                    |         
                                                             |         if (ip <= r3) {
    0x0000535c bhi 0x5370                                    |             
    0x00005360 ldr r1, [r1, 0xc]                             |             r1 = *((r1 + 0xc));
    0x00005364 b 0x4fc0                                      |             goto label_19;
                                                             | label_49:
    0x00005368 mov r2, 0                                     |             r2 = 0;
    0x0000536c b 0x5344                                      |             goto label_20;
                                                             |         }
    0x00005370 ldr lr, [r0, r3, lsl 2]                       |         
    0x00005374 ldr ip, [lr, 0x5c]                            |         ip = *((lr + 0x5c));
                                                             | label_22:
    0x00005378 cmp ip, 0                                     |         
                                                             |         if (ip != 0) {
    0x0000537c beq 0x53a8                                    |             
    0x00005380 ldr r8, [ip, 4]                               |             r8 = *((ip + 4));
    0x00005384 cmp r8, r1                                    |             
                                                             |             if (r8 != r1) {
    0x00005388 bne 0x53bc                                    |                 goto label_60;
                                                             |             }
    0x0000538c lsl r8, r2, 2                                 |             r8 = r2 << 2;
    0x00005390 add ip, r0, r3, lsl 2                         |             
    0x00005394 add sl, r0, r8                                |             sl = r0 + r8;
                                                             | label_21:
    0x00005398 cmp sl, ip                                    |             
                                                             |             if (sl != ip) {
    0x0000539c bne 0x53b0                                    |                 goto label_61;
                                                             |             }
    0x000053a0 add r2, r2, 1                                 |             r2++;
    0x000053a4 str lr, [r0, r8]                              |             
                                                             |         }
    0x000053a8 add r3, r3, 1                                 |         r3++;
    0x000053ac b 0x5354                                      |         
                                                             |     } while (1);
                                                             | label_61:
    0x000053b0 ldr sb, [ip, -4]                              |     sb = *((ip - 4));
    0x000053b4 str sb, [ip], -4                              |     *(ip) = sb;
                                                             |     ip += -4;
    0x000053b8 b 0x5398                                      |     goto label_21;
                                                             | label_60:
    0x000053bc ldr ip, [ip]                                  |     ip = *(ip);
    0x000053c0 b 0x5378                                      |     goto label_22;
                                                             | label_50:
    0x000053c4 str r3, [r2, 4]!                              |     *((r2 += 4)) = r3;
    0x000053c8 ldr r3, [r3, 0xc]                             |     r3 = *((r3 + 0xc));
    0x000053cc b 0x5024                                      |     goto label_23;
                                                             | label_51:
    0x000053d0 ldr r1, [r2, 0x1c]                            |     r1 = *((r2 + 0x1c));
    0x000053d4 mov r0, sl                                    |     r0 = sl;
    0x000053d8 ldr r1, [r1, r3]                              |     r1 = *((r1 + r3));
    0x000053dc str r2, [fp, -0x168]                          |     var_168h = r2;
    0x000053e0 str r3, [fp, -0x164]                          |     var_164h = r3;
    0x000053e4 bl 0x122c                                     |     r0 = fcn_0000122c (r0, r1);
    0x000053e8 lsl sb, r0, 2                                 |     sb = r0 << 2;
    0x000053ec str r0, [fp, -0x15c]                          |     var_15ch = r0;
    0x000053f0 mov r0, sb                                    |     r0 = sb;
    0x000053f4 bl 0x243c                                     |     dl_malloc ();
    0x000053f8 ldr r1, [fp, -0x15c]                          |     r1 = var_15ch;
    0x000053fc ldr r3, [fp, -0x164]                          |     r3 = var_164h;
    0x00005400 ldr r2, [fp, -0x168]                          |     r2 = var_168h;
    0x00005404 str r1, [r8, 0x44]                            |     *((r8 + 0x44)) = r1;
    0x00005408 sub r1, sl, 1                                 |     r1 = sl - 1;
    0x0000540c add sb, r0, sb                                |     sb = r0 + sb;
    0x00005410 str r0, [r8, 0x40]                            |     *((r8 + 0x40)) = r0;
                                                             |     do {
    0x00005414 cmp sb, r0                                    |         
                                                             |         if (sb == r0) {
    0x00005418 bne 0x543c                                    |             
    0x0000541c ldr r1, [fp, -0x158]                          |             r1 = var_158h;
    0x00005420 ldr lr, [r1, 0x1c]                            |             
    0x00005424 mov r1, 1                                     |             r1 = 1;
                                                             | label_25:
    0x00005428 cmp r7, r1                                    |             
                                                             |             if (r7 > r1) {
    0x0000542c bhi 0x5448                                    |                 goto label_62;
                                                             |             }
    0x00005430 ldr r8, [r8, 0xc]                             |             r8 = *((r8 + 0xc));
    0x00005434 add r3, r3, 4                                 |             r3 += 4;
    0x00005438 b 0x5070                                      |             goto label_24;
                                                             |         }
    0x0000543c ldrb ip, [r1, 1]!                             |         ip = *((r1 += 1));
    0x00005440 strb ip, [r0], 1                              |         *(r0) = ip;
                                                             |         r0++;
    0x00005444 b 0x5414                                      |         
                                                             |     } while (1);
                                                             | label_62:
    0x00005448 ldr ip, [lr, r1, lsl 2]                       |     offset_4 = r1 << 2;
                                                             |     ip = *((lr + offset_4));
    0x0000544c add r1, r1, 1                                 |     r1++;
    0x00005450 ldrh r0, [ip, 0x4e]                           |     r0 = *((ip + 0x4e));
    0x00005454 bic r0, r0, 0x20                              |     r0 = BIT_MASK (r0, 0x20);
    0x00005458 strh r0, [ip, 0x4e]                           |     *((ip + 0x4e)) = r0;
    0x0000545c b 0x5428                                      |     goto label_25;
                                                             | label_53:
    0x00005460 ldr r3, [sb, 0x104]                           |     r3 = *((sb + 0x104));
    0x00005464 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00005468 beq 0x5474                                    |         
    0x0000546c mov r0, sb                                    |         r0 = sb;
    0x00005470 bl 0x31b8                                     |         dl_protect_relro ();
                                                             |     }
    0x00005474 ldr sb, [sb, 0xc]                             |     sb = *((sb + 0xc));
    0x00005478 b 0x50d8                                      |     goto label_26;
                                                             | label_55:
    0x0000547c ldr r0, [pc, 0x2dc]                           |     r0 = *(0x575c);
    0x00005480 mov r3, 0                                     |     r3 = 0;
    0x00005484 str r3, [sp]                                  |     *(sp) = r3;
    0x00005488 mov r2, r3                                    |     r2 = r3;
    0x0000548c mov r1, r6                                    |     r1 = r6;
    0x00005490 add r0, pc, r0                                |     r0 = pc + r0;
    0x00005494 bl 0x1988                                     |     r0 = dl_find_hash ();
    0x00005498 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0000549c ldrne r3, [fp, -0x14c]                        |         r3 = var_14ch;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x000054a0 strne r3, [r0]                                |         *(r0) = r3;
                                                             |     }
    0x000054a4 ldr r3, [fp, -0x148]                          |     r3 = var_148h;
    0x000054a8 ldr r3, [r3]                                  |     r3 = *(r3);
                                                             |     do {
    0x000054ac cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x000054b0 bne 0x55e0                                    |             
    0x000054b4 ldr r3, [fp, -0x160]                          |             r3 = var_160h;
    0x000054b8 mov r2, 1                                     |             r2 = 1;
    0x000054bc ldr r3, [r3]                                  |             r3 = *(r3);
    0x000054c0 str r2, [r3, 0xc]                             |             *((r3 + 0xc)) = r2;
    0x000054c4 bl 0x1220                                     |             dl_debug_state ();
    0x000054c8 ldr r3, [fp, -0x148]                          |             r3 = var_148h;
    0x000054cc ldr r3, [r3]                                  |             r3 = *(r3);
    0x000054d0 ldr r7, [r3, 0xec]                            |             r7 = *((r3 + 0xec));
    0x000054d4 cmp r7, 0                                     |             
                                                             |             if (r7 != 0) {
    0x000054d8 bne 0x5684                                    |                 goto label_63;
                                                             |             }
                                                             | label_28:
    0x000054dc ldr r3, [pc, 0x280]                           |             r3 = *(0x5760);
    0x000054e0 ldr r8, [pc, 0x280]                           |             r8 = *(0x5764);
    0x000054e4 add r3, pc, r3                                |             r3 = pc + r3;
    0x000054e8 ldr r7, [r3, 8]                               |             r7 = *(0x5768);
    0x000054ec add r8, pc, r8                                |             r8 = pc + r8;
    0x000054f0 lsl sb, r7, 2                                 |             sb = r7 << 2;
                                                             | label_30:
    0x000054f4 cmp r7, 0                                     |             
                                                             |             if (r7 != 0) {
    0x000054f8 bne 0x5794                                    |                 goto label_64;
                                                             |             }
    0x000054fc ldr r0, [pc, 0x268]                           |             r0 = *(0x5768);
    0x00005500 mov r2, r7                                    |             r2 = r7;
    0x00005504 mov r1, r6                                    |             r1 = r6;
    0x00005508 str r7, [sp]                                  |             *(sp) = r7;
    0x0000550c mov r3, 1                                     |             r3 = 1;
    0x00005510 add r0, pc, r0                                |             r0 = pc + r0;
    0x00005514 bl 0x1988                                     |             dl_find_hash ();
    0x00005518 ldr r3, [pc, 0x250]                           |             r3 = *(0x576c);
    0x0000551c mov r2, r7                                    |             r2 = r7;
    0x00005520 ldr r3, [r4, r3]                              |             r3 = *((r4 + r3));
    0x00005524 mov r1, r6                                    |             r1 = r6;
    0x00005528 str r0, [r3]                                  |             *(r3) = r0;
    0x0000552c ldr r0, [pc, 0x240]                           |             r0 = *(0x5770);
    0x00005530 str r7, [sp]                                  |             *(sp) = r7;
    0x00005534 mov r3, 1                                     |             r3 = 1;
    0x00005538 add r0, pc, r0                                |             r0 = pc + r0;
    0x0000553c bl 0x1988                                     |             dl_find_hash ();
    0x00005540 ldr r3, [pc, 0x230]                           |             r3 = *(0x5774);
    0x00005544 mov r2, r7                                    |             r2 = r7;
    0x00005548 ldr r3, [r4, r3]                              |             r3 = *((r4 + r3));
    0x0000554c mov r1, r6                                    |             r1 = r6;
    0x00005550 str r0, [r3]                                  |             *(r3) = r0;
    0x00005554 ldr r0, [pc, 0x220]                           |             r0 = *(0x5778);
    0x00005558 str r7, [sp]                                  |             *(sp) = r7;
    0x0000555c mov r3, 1                                     |             r3 = 1;
    0x00005560 add r0, pc, r0                                |             r0 = pc + r0;
    0x00005564 bl 0x1988                                     |             dl_find_hash ();
    0x00005568 ldr r3, [pc, 0x210]                           |             r3 = *(0x577c);
    0x0000556c mov r2, r7                                    |             r2 = r7;
    0x00005570 ldr r3, [r4, r3]                              |             r3 = *((r4 + r3));
    0x00005574 mov r1, r6                                    |             r1 = r6;
    0x00005578 str r0, [r3]                                  |             *(r3) = r0;
    0x0000557c ldr r0, [pc, 0x200]                           |             r0 = *(0x5780);
    0x00005580 str r7, [sp]                                  |             *(sp) = r7;
    0x00005584 mov r3, 1                                     |             r3 = 1;
    0x00005588 add r0, pc, r0                                |             r0 = pc + r0;
    0x0000558c bl 0x1988                                     |             dl_find_hash ();
    0x00005590 ldr r3, [pc, 0x1f0]                           |             r3 = *(0x5784);
    0x00005594 mov r2, r7                                    |             r2 = r7;
    0x00005598 ldr r3, [r4, r3]                              |             r3 = *((r4 + r3));
    0x0000559c mov r1, r6                                    |             r1 = r6;
    0x000055a0 str r0, [r3]                                  |             *(r3) = r0;
    0x000055a4 ldr r0, [pc, 0x1e0]                           |             r0 = *(0x5788);
    0x000055a8 str r7, [sp]                                  |             *(sp) = r7;
    0x000055ac mov r3, 1                                     |             r3 = 1;
    0x000055b0 add r0, pc, r0                                |             r0 = pc + r0;
    0x000055b4 bl 0x1988                                     |             dl_find_hash ();
    0x000055b8 ldr r3, [pc, 0x1d0]                           |             
    0x000055bc ldr r3, [r4, r3]                              |             r3 = *((r4 + r3));
    0x000055c0 str r0, [r3]                                  |             *(r3) = r0;
    0x000055c4 ldr r3, [fp, -0x160]                          |             r3 = var_160h;
    0x000055c8 ldr r3, [r3]                                  |             r3 = *(0x578c);
    0x000055cc str r7, [r3, 0xc]                             |             *((r3 + 0xc)) = r7;
    0x000055d0 bl 0x1220                                     |             dl_debug_state ();
    0x000055d4 ldr r0, [r5, 0x4c]                            |             r0 = *((r5 + 0x4c));
    0x000055d8 sub sp, fp, 0x20                              |             
    0x000055dc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |             
                                                             |         }
    0x000055e0 ldr r8, [r3, 0xfc]                            |         r8 = *((r3 + 0xfc));
    0x000055e4 mov ip, 0                                     |         
                                                             | label_27:
    0x000055e8 ldr r2, [r3, 0xf8]                            |         r2 = *((r3 + 0xf8));
    0x000055ec cmp r2, ip                                    |         
                                                             |         if (r2 > ip) {
    0x000055f0 ldrls r3, [r3, 0xc]                           |             r3 = *((r3 + 0xc));
                                                             |         }
    0x000055f4 bls 0x54ac                                    |         
                                                             |     } while (r2 < ip);
    0x000055f8 ldr r2, [r8, ip, lsl 5]                       |     offset_5 = ip << 5;
                                                             |     r2 = *((r8 + offset_5));
    0x000055fc cmp r2, 1                                     |     
                                                             |     if (r2 == 1) {
    0x00005600 bne 0x567c                                    |         
    0x00005604 add r0, r8, ip, lsl 5                         |         r0 = r8 + (ip << 5);
    0x00005608 ldr r2, [r0, 0x18]                            |         r2 = *((r0 + 0x18));
    0x0000560c tst r2, 2                                     |         
                                                             |         if ((r2 & 2) != 0) {
    0x00005610 bne 0x567c                                    |             goto label_65;
                                                             |         }
    0x00005614 ldr r1, [r3, 0xc4]                            |         r1 = *((r3 + 0xc4));
    0x00005618 cmp r1, 0                                     |         
                                                             |         if (r1 == 0) {
    0x0000561c beq 0x567c                                    |             goto label_65;
                                                             |         }
    0x00005620 ldr r1, [pc, 0x88]                            |         r1 = *(0x56ac);
    0x00005624 ldr sl, [r0, 8]                               |         sl = *((r0 + 8));
    0x00005628 ldr r1, [r4, r1]                              |         r1 = *((r4 + r1));
    0x0000562c ldr sb, [r0, 0x10]                            |         sb = *((r0 + 0x10));
    0x00005630 ldr lr, [r1]                                  |         lr = *(0x56ac);
    0x00005634 ldr r0, [r3]                                  |         r0 = *(r3);
    0x00005638 lsl r7, r2, 0x1d                              |         r7 = r2 << 0x1d;
    0x0000563c sub r1, lr, 1                                 |         r1 = lr - 1;
    0x00005640 lsl r2, r2, 2                                 |         r2 <<= 2;
    0x00005644 and r1, r1, sl                                |         r1 &= sl;
    0x00005648 add r0, sl, r0                                |         r0 = sl + r0;
    0x0000564c rsb lr, lr, 0                                 |         lr -= ;
    0x00005650 and r2, r2, 4                                 |         r2 &= 4;
    0x00005654 orr r2, r2, r7, lsr 31                        |         r2 |= (r7 >> 31);
    0x00005658 and r0, r0, lr                                |         r0 &= lr;
    0x0000565c add r1, r1, sb                                |         r1 += sb;
    0x00005660 mov r7, 0x7d                                  |         r7 = 0x7d;
    0x00005664 svc 0                                         |         __asm ("svc 0");
    0x00005668 cmn r0, 0x1000                                |         
                                                             |         if (r0 <= 0x1000) {
    0x0000566c ldrhi r2, [pc, 0x4c]                          |             r2 = *((pc + 0x4c));
                                                             |         }
    0x00005670 rsbhi r0, r0, 0                               |         __asm ("rsbhi r0, r0, 0");
                                                             |         if (r0 <= 0x1000) {
    0x00005674 ldrhi r2, [r4, r2]                            |             r2 = *((r4 + r2));
                                                             |         }
                                                             |         if (r0 > 0x1000) {
    0x00005678 strhi r0, [r2]                                |             *(r2) = r0;
                                                             |             goto label_65;
                                                             |         }
                                                             |     }
                                                             | label_65:
    0x0000567c add ip, ip, 1                                 |     
    0x00005680 b 0x55e8                                      |     goto label_27;
                                                             | label_63:
    0x00005684 ldr r2, [r3]                                  |     r2 = *(r3);
    0x00005688 ldr r8, [r3, 0xf0]                            |     r8 = *((r3 + 0xf0));
    0x0000568c add r7, r7, r2                                |     r7 += r2;
    0x00005690 bic r8, r8, 3                                 |     r8 = BIT_MASK (r8, 3);
    0x00005694 add r8, r8, r7                                |     r8 += r7;
                                                             | label_29:
    0x00005698 cmp r8, r7                                    |     
                                                             |     if (r8 == r7) {
    0x0000569c beq 0x54dc                                    |         goto label_28;
                                                             |     }
    0x000056a0 ldr r3, [r7], 4                               |     r3 = *(r7);
                                                             |     r7 += 4;
    0x000056a4 blx r3                                        |     uint32_t (*r3)(uint32_t) (r3);
    0x000056a8 b 0x5698                                      |     goto label_29;
                                                             | label_64:
    0x00005794 ldr r3, [r8, 4]                               |     r3 = *((r8 + 4));
    0x00005798 add r3, r3, sb                                |     r3 += sb;
    0x0000579c ldr sl, [r3, -4]                              |     sl = *((r3 - 4));
    0x000057a0 mov r3, 0                                     |     r3 = 0;
    0x000057a4 str r3, [sl, 0x5c]                            |     *((sl + 0x5c)) = r3;
    0x000057a8 ldrh r3, [sl, 0x4e]                           |     r3 = *((sl + 0x4e));
    0x000057ac tst r3, 4                                     |     
                                                             |     if ((r3 & 4) == 0) {
    0x000057b0 bne 0x57dc                                    |         
    0x000057b4 orr r3, r3, 4                                 |         r3 |= 4;
    0x000057b8 strh r3, [sl, 0x4e]                           |         *((sl + 0x4e)) = r3;
    0x000057bc ldr r3, [sl, 0x9c]                            |         r3 = *((sl + 0x9c));
    0x000057c0 cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x000057c4 beq 0x57d4                                    |             
    0x000057c8 ldr r1, [sl]                                  |             r1 = *(sl);
    0x000057cc add r3, r3, r1                                |             r3 += r1;
    0x000057d0 blx r3                                        |             uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
                                                             |         }
    0x000057d4 mov r0, sl                                    |         r0 = sl;
    0x000057d8 bl 0x16e8                                     |         dl_run_init_array ();
                                                             |     }
    0x000057dc sub r7, r7, 1                                 |     r7--;
    0x000057e0 sub sb, sb, 4                                 |     sb -= 4;
    0x000057e4 b 0x54f4                                      |     goto label_30;
                                                             | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x2080 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym._dl_linux_resolver ()            | void dl_linux_resolver (int32_t arg1, int32_t arg2) {
                                                 |     int32_t var_0h;
                                                 |     int32_t var_14h_2;
                                                 |     int32_t var_14h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x00002080 push {r4, r5, r6, r7, fp, lr}     |     
    0x00002084 ldr r4, [pc, 0xa8]                |     r4 = *(0x2130);
    0x00002088 add fp, sp, 0x14                  |     
    0x0000208c sub sp, sp, 8                     |     
    0x00002090 mov r2, r0                        |     r2 = r0;
    0x00002094 ldr r0, [r0, 0xc8]                |     r0 = *((r0 + 0xc8));
    0x00002098 ldr ip, [r2, 0x84]                |     ip = *((r2 + 0x84));
    0x0000209c add r3, r0, r1, lsl 3             |     r3 = r0 + (r1 << 3);
    0x000020a0 ldr r3, [r3, 4]                   |     r3 = *((r3 + 4));
    0x000020a4 ldr r5, [r2, 0x80]                |     r5 = *((r2 + 0x80));
    0x000020a8 lsr r3, r3, 8                     |     r3 >>= 8;
    0x000020ac ldr r3, [ip, r3, lsl 4]           |     offset_0 = r3 << 4;
                                                 |     r3 = *((ip + offset_0));
    0x000020b0 add r4, pc, r4                    |     r4 = pc + r4;
    0x000020b4 add r5, r5, r3                    |     r5 += r3;
    0x000020b8 ldr r3, [pc, 0x78]                |     r3 = *(0x2134);
    0x000020bc ldr r7, [r0, r1, lsl 3]           |     offset_1 = r1 << 3;
                                                 |     r7 = *((r0 + offset_1));
    0x000020c0 ldr r3, [r4, r3]                  |     r3 = *(0x2130);
    0x000020c4 ldr r6, [r2]                      |     r6 = *(r2);
    0x000020c8 ldr r1, [r3]                      |     
    0x000020cc mov r3, 0                         |     r3 = 0;
    0x000020d0 str r3, [sp]                      |     *(sp) = r3;
    0x000020d4 add r1, r1, 0x40                  |     r1 = 0x2170;
    0x000020d8 mov r3, 1                         |     r3 = 1;
    0x000020dc mov r0, r5                        |     r0 = r5;
    0x000020e0 bl 0x1988                         |     r0 = dl_find_hash ();
    0x000020e4 subs r3, r0, 0                    |     r3 = r0 - 0;
                                                 |     if (r3 == r0) {
    0x000020e8 bne 0x2128                        |         
    0x000020ec ldr r3, [pc, 0x48]                |         r3 = *(0x2138);
    0x000020f0 ldr r1, [pc, 0x48]                |         r1 = *(0x213c);
    0x000020f4 ldr r2, [r4, r3]                  |         r2 = *((r4 + r3));
    0x000020f8 add r1, pc, r1                    |         r1 = pc + r1;
    0x000020fc mov r3, r5                        |         r3 = r5;
    0x00002100 ldr r2, [r2]                      |         r2 = *(r2);
    0x00002104 mov r0, 2                         |         r0 = 2;
    0x00002108 bl 0x1bf4                         |         dl_dprintf ()
    0x0000210c mov r0, 1                         |         r0 = 1;
    0x00002110 mov r7, r0                        |         r7 = r0;
    0x00002114 svc 0                             |         __asm ("svc 0");
    0x00002118 ldr r3, [pc, 0x24]                |         r3 = *(0x2140);
    0x0000211c rsb r0, r0, 0                     |         r0 -= ;
    0x00002120 ldr r3, [r4, r3]                  |         r3 = *((r4 + r3));
    0x00002124 str r0, [r3]                      |         *(r3) = r0;
                                                 |     }
    0x00002128 str r3, [r7, r6]                  |     *((r7 + r6)) = r3;
    0x0000212c sub sp, fp, 0x14                  |     
    0x00002130 pop {r4, r5, r6, r7, fp, pc}      |     
                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x36c4 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym._dl_load_elf_shared_library ()               | void dl_load_elf_shared_library (int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_140h;
                                                             |     int32_t var_13ch;
                                                             |     int32_t var_138h;
                                                             |     int32_t var_134h;
                                                             |     int32_t var_130h;
                                                             |     int32_t var_12ch;
                                                             |     int32_t var_128h;
                                                             |     int32_t var_124h;
                                                             |     int32_t var_120h;
                                                             |     int32_t var_11ch;
                                                             |     int32_t var_118h;
                                                             |     int32_t var_114h;
                                                             |     int32_t var_110h;
                                                             |     int32_t var_10ch;
                                                             |     int32_t var_108h;
                                                             |     int32_t var_104h;
                                                             |     int32_t var_100h;
                                                             |     int32_t var_fch;
                                                             |     int32_t var_f8h;
                                                             |     int32_t var_f0h;
                                                             |     int32_t var_ech;
                                                             |     int32_t var_e8h;
                                                             |     int32_t var_b0h;
                                                             |     int32_t var_a4h;
                                                             |     int32_t var_58h;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x000036c4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x000036c8 ldr r8, [pc, 0xaec]                           |     r8 = *(0x41b8);
    0x000036cc add fp, sp, 0x20                              |     
    0x000036d0 mov lr, r1                                    |     lr = r1;
    0x000036d4 sub sp, sp, 0x12c                             |     
    0x000036d8 mov r1, 0                                     |     r1 = 0;
    0x000036dc mov r3, r0                                    |     r3 = r0;
    0x000036e0 mov ip, r2                                    |     
    0x000036e4 add r8, pc, r8                                |     r8 = pc + r8;
    0x000036e8 mov r0, r2                                    |     r0 = r2;
    0x000036ec mov r2, r1                                    |     r2 = r1;
    0x000036f0 mov r7, 5                                     |     r7 = 5;
    0x000036f4 svc 0                                         |     __asm ("svc 0");
    0x000036f8 cmn r0, 0x1000                                |     
    0x000036fc mov r2, r0                                    |     r2 = r0;
                                                             |     if (r0 < 0x1000) {
    0x00003700 bls 0x3734                                    |         goto label_16;
                                                             |     }
    0x00003704 ldr r3, [pc, 0xab4]                           |     r3 = *(0x41bc);
    0x00003708 rsb r2, r0, 0                                 |     r2 = r0 - ;
    0x0000370c ldr r3, [r8, r3]                              |     r3 = *((r8 + r3));
    0x00003710 str r2, [r3]                                  |     *(r3) = r2;
                                                             |     do {
    0x00003714 ldr r3, [pc, 0xaa8]                           |         r3 = *(0x41c0);
    0x00003718 mov r2, 1                                     |         r2 = 1;
    0x0000371c ldr r3, [r8, r3]                              |         r3 = *((r8 + r3));
    0x00003720 str r2, [r3]                                  |         *(r3) = r2;
                                                             | label_0:
    0x00003724 mov r6, 0                                     |         r6 = 0;
                                                             | label_1:
    0x00003728 mov r0, r6                                    |         r0 = r6;
    0x0000372c sub sp, fp, 0x20                              |         
    0x00003730 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             | label_16:
    0x00003734 cmp r0, 0                                     |         
    0x00003738 blt 0x3714                                    |         
                                                             |     } while (r0 < 0);
    0x0000373c sub r1, fp, 0xf0                              |     r1 -= var_f0h;
    0x00003740 mov r7, 0x6c                                  |     r7 = 0x6c;
    0x00003744 svc 0                                         |     __asm ("svc 0");
    0x00003748 cmn r0, 0x1000                                |     
                                                             |     if (r0 < 0x1000) {
    0x0000374c bls 0x3794                                    |         goto label_17;
                                                             |     }
    0x00003750 ldr r3, [pc, 0xa68]                           |     r3 = *(0x41bc);
    0x00003754 rsb r0, r0, 0                                 |     r0 -= ;
    0x00003758 ldr r3, [r8, r3]                              |     r3 = *((r8 + r3));
    0x0000375c str r0, [r3]                                  |     *(r3) = r0;
                                                             |     do {
    0x00003760 ldr r3, [pc, 0xa5c]                           |         r3 = *(0x41c0);
    0x00003764 mov r1, 1                                     |         r1 = 1;
    0x00003768 ldr r3, [r8, r3]                              |         r3 = *((r8 + r3));
    0x0000376c mov r0, r2                                    |         r0 = r2;
    0x00003770 str r1, [r3]                                  |         *(r3) = r1;
    0x00003774 mov r7, 6                                     |         r7 = 6;
    0x00003778 svc 0                                         |         __asm ("svc 0");
    0x0000377c cmn r0, 0x1000                                |         
                                                             |         if (r0 <= 0x1000) {
    0x00003780 ldrhi r3, [pc, 0xa38]                         |             r3 = *((pc + 0xa38));
                                                             |         }
    0x00003784 rsbhi r0, r0, 0                               |         __asm ("rsbhi r0, r0, 0");
                                                             |         if (r0 <= 0x1000) {
    0x00003788 ldrhi r3, [r8, r3]                            |             r3 = *((r8 + r3));
                                                             |         }
                                                             |         if (r0 <= 0x1000) {
    0x0000378c strhi r0, [r3]                                |             *(r3) = r0;
                                                             |         }
    0x00003790 b 0x3724                                      |         goto label_0;
                                                             | label_17:
    0x00003794 cmp r0, 0                                     |         
    0x00003798 blt 0x3760                                    |         
                                                             |     } while (r0 < 0);
    0x0000379c tst r3, 0x4000000                             |     
                                                             |     if ((r3 & 0x4000000) == 0) {
    0x000037a0 beq 0x37c0                                    |         goto label_18;
                                                             |     }
    0x000037a4 ldrh r6, [fp, -0xe8]                          |     r6 = var_e8h;
    0x000037a8 ands r6, r6, 0x800                            |     r6 &= 0x800;
    0x000037ac bne 0x37c0                                    |     
                                                             |     while ((r3 & 4) != 0) {
    0x000037b0 mov r0, r2                                    |         r0 = r2;
                                                             | label_7:
    0x000037b4 mov r7, 6                                     |         r7 = 6;
    0x000037b8 svc 0                                         |         __asm ("svc 0");
    0x000037bc b 0x398c                                      |         goto label_19;
                                                             | label_18:
    0x000037c0 ldr r1, [pc, 0xa00]                           |         r1 = *(0x41c4);
    0x000037c4 ldr r0, [fp, -0xf0]                           |         r0 = var_f0h;
    0x000037c8 ldr r1, [r8, r1]                              |         r1 = *((r8 + r1));
    0x000037cc ldr r7, [fp, -0xec]                           |         r7 = var_ech;
    0x000037d0 ldr r6, [r1]                                  |         r6 = *(0x41c4);
    0x000037d4 mov r1, 0                                     |         r1 = 0;
                                                             | label_2:
    0x000037d8 cmp r6, 0                                     |         
                                                             |         if (r6 != 0) {
    0x000037dc bne 0x3894                                    |             goto label_20;
                                                             |         }
    0x000037e0 tst r3, 4                                     |         
    0x000037e4 bne 0x37b0                                    |         
                                                             |     }
    0x000037e8 str r3, [fp, -0x140]                          |     var_140h = r3;
    0x000037ec ldr r3, [pc, 0x9d8]                           |     r3 = *(0x41c8);
    0x000037f0 str r2, [fp, -0xfc]                           |     var_fch = r2;
    0x000037f4 str ip, [fp, -0x10c]                          |     var_10ch = ip;
    0x000037f8 str lr, [fp, -0x110]                          |     var_110h = lr;
    0x000037fc ldr r3, [r8, r3]                              |     r3 = *((r8 + r3));
    0x00003800 mov r0, r6                                    |     r0 = r6;
    0x00003804 str r3, [fp, -0xf8]                           |     var_f8h = r3;
    0x00003808 ldr r1, [r3]                                  |     r1 = *(0x41c8);
    0x0000380c mov r2, 3                                     |     r2 = 3;
    0x00003810 mov r3, 0x22                                  |     r3 = 0x22;
    0x00003814 mvn r4, 0                                     |     r4 = ~0;
    0x00003818 mov r5, r6                                    |     r5 = r6;
    0x0000381c mov r7, 0xc0                                  |     r7 = 0xc0;
    0x00003820 svc 0                                         |     __asm ("svc 0");
    0x00003824 cmn r0, 0x1000                                |     
    0x00003828 mov sl, r0                                    |     sl = r0;
                                                             |     if (r0 < 0x1000) {
    0x0000382c bls 0x38ec                                    |         goto label_21;
                                                             |     }
    0x00003830 ldr r3, [pc, 0x988]                           |     r3 = *(0x41bc);
    0x00003834 ldr r1, [pc, 0x994]                           |     r1 = *(0x41cc);
    0x00003838 ldr r4, [r8, r3]                              |     r4 = *((r8 + r3));
    0x0000383c rsb r3, r0, 0                                 |     r3 = r0 - ;
    0x00003840 str r3, [r4]                                  |     *(r4) = r3;
    0x00003844 ldr r3, [pc, 0x988]                           |     r3 = *(0x41d0);
    0x00003848 add r1, pc, r1                                |     r1 = pc + r1;
    0x0000384c ldr r2, [r8, r3]                              |     r2 = *((r8 + r3));
    0x00003850 ldr r3, [fp, -0x10c]                          |     r3 = var_10ch;
    0x00003854 mov r0, 2                                     |     r0 = 2;
    0x00003858 str r3, [sp]                                  |     *(sp) = r3;
    0x0000385c mov r3, 0x240                                 |     r3 = 0x240;
    0x00003860 ldr r2, [r2]                                  |     r2 = *(r2);
    0x00003864 bl 0x1bf4                                     |     dl_dprintf ()
    0x00003868 ldr r3, [pc, 0x954]                           |     r3 = *(0x41c0);
    0x0000386c mov r7, 6                                     |     r7 = 6;
    0x00003870 ldr r3, [r8, r3]                              |     r3 = *((r8 + r3));
    0x00003874 ldr r0, [fp, -0xfc]                           |     r0 = var_fch;
    0x00003878 str r7, [r3]                                  |     *(r3) = r7;
    0x0000387c svc 0                                         |     __asm ("svc 0");
    0x00003880 cmn r0, 0x1000                                |     
                                                             |     if (r0 < 0x1000) {
    0x00003884 bls 0x3724                                    |         goto label_0;
                                                             |     }
    0x00003888 rsb r0, r0, 0                                 |     r0 -= ;
    0x0000388c str r0, [r4]                                  |     *(r4) = r0;
    0x00003890 b 0x3728                                      |     goto label_1;
                                                             | label_20:
    0x00003894 add r4, r6, 0x110                             |     r4 = r6 + 0x110;
    0x00003898 ldrd r4, r5, [r4, -8]                         |     __asm ("ldrd r4, r5, [r4, -8]");
    0x0000389c cmp r5, r1                                    |     
    0x000038a0 cmpeq r4, r0                                  |     __asm ("cmpeq r4, r0");
                                                             |     if (r5 != r1) {
    0x000038a4 bne 0x38e4                                    |         goto label_22;
                                                             |     }
    0x000038a8 ldr r4, [r6, 0x110]                           |     r4 = *((r6 + 0x110));
    0x000038ac cmp r4, r7                                    |     
                                                             |     if (r4 != r7) {
    0x000038b0 bne 0x38e4                                    |         goto label_22;
                                                             |     }
    0x000038b4 ldrh r3, [r6, 0x4c]                           |     r3 = *((r6 + 0x4c));
    0x000038b8 mov r0, r2                                    |     r0 = r2;
    0x000038bc add r3, r3, 1                                 |     r3++;
    0x000038c0 strh r3, [r6, 0x4c]                           |     *((r6 + 0x4c)) = r3;
    0x000038c4 ldrh r3, [r6, 0x4e]                           |     r3 = *((r6 + 0x4e));
    0x000038c8 mov r7, 6                                     |     r7 = 6;
    0x000038cc orr r3, r3, 0x10                              |     r3 |= 0x10;
    0x000038d0 strh r3, [r6, 0x4e]                           |     *((r6 + 0x4e)) = r3;
    0x000038d4 svc 0                                         |     __asm ("svc 0");
                                                             | label_13:
    0x000038d8 cmn r0, 0x1000                                |     
                                                             |     if (r0 < 0x1000) {
    0x000038dc bls 0x3728                                    |         goto label_1;
                                                             |     }
    0x000038e0 b 0x3994                                      |     goto label_23;
                                                             | label_22:
    0x000038e4 ldr r6, [r6, 0xc]                             |     r6 = *((r6 + 0xc));
    0x000038e8 b 0x37d8                                      |     goto label_2;
                                                             | label_21:
    0x000038ec ldr r3, [fp, -0xf8]                           |     r3 = var_f8h;
    0x000038f0 ldr r0, [fp, -0xfc]                           |     r0 = var_fch;
    0x000038f4 mov r1, sl                                    |     r1 = sl;
    0x000038f8 ldr r2, [r3]                                  |     r2 = *(r3);
    0x000038fc mov r7, 3                                     |     r7 = 3;
    0x00003900 svc 0                                         |     __asm ("svc 0");
    0x00003904 cmn r0, 0x1000                                |     
                                                             |     if (r0 <= 0x1000) {
    0x00003908 ldrhi r3, [pc, 0x8b0]                         |         r3 = *((pc + 0x8b0));
                                                             |     }
    0x0000390c rsbhi r0, r0, 0                               |     __asm ("rsbhi r0, r0, 0");
                                                             |     if (r0 <= 0x1000) {
    0x00003910 ldrhi r3, [r8, r3]                            |         r3 = *((r8 + r3));
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x00003914 strhi r0, [r3]                                |         *(r3) = r0;
                                                             |     }
    0x00003918 ldr r2, [sl]                                  |     r2 = *(sl);
    0x0000391c ldr r3, [pc, 0x8b4]                           |     r3 = *(0x41d4);
    0x00003920 cmp r2, r3                                    |     
                                                             |     if (r2 == r3) {
    0x00003924 beq 0x39a8                                    |         goto label_24;
                                                             |     }
    0x00003928 ldr r3, [pc, 0x8a4]                           |     r3 = *(0x41d0);
    0x0000392c ldr r1, [pc, 0x8a8]                           |     r1 = *(0x41d8);
    0x00003930 ldr r2, [r8, r3]                              |     r2 = *((r8 + r3));
    0x00003934 add r1, pc, r1                                |     r1 = pc + r1;
    0x00003938 ldr r3, [fp, -0x10c]                          |     r3 = var_10ch;
    0x0000393c ldr r2, [r2]                                  |     r2 = *(r2);
    0x00003940 mov r0, 2                                     |     r0 = 2;
    0x00003944 bl 0x1bf4                                     |     dl_dprintf ()
    0x00003948 ldr r3, [pc, 0x874]                           |     r3 = *(0x41c0);
    0x0000394c mov r2, 3                                     |     r2 = 3;
    0x00003950 ldr r3, [r8, r3]                              |     r3 = *((r8 + r3));
    0x00003954 str r2, [r3]                                  |     *(r3) = r2;
                                                             | label_3:
    0x00003958 ldr r0, [fp, -0xfc]                           |     r0 = var_fch;
    0x0000395c mov r7, 6                                     |     r7 = 6;
                                                             | label_4:
    0x00003960 svc 0                                         |     __asm ("svc 0");
    0x00003964 cmn r0, 0x1000                                |     
                                                             |     if (r0 <= 0x1000) {
    0x00003968 ldrhi r3, [pc, 0x850]                         |         r3 = *((pc + 0x850));
                                                             |     }
    0x0000396c rsbhi r0, r0, 0                               |     __asm ("rsbhi r0, r0, 0");
                                                             |     if (r0 <= 0x1000) {
    0x00003970 ldrhi r3, [r8, r3]                            |         r3 = *((r8 + r3));
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x00003974 strhi r0, [r3]                                |         *(r3) = r0;
                                                             |     }
    0x00003978 ldr r3, [fp, -0xf8]                           |     r3 = var_f8h;
    0x0000397c mov r0, sl                                    |     r0 = sl;
    0x00003980 ldr r1, [r3]                                  |     r1 = *(r3);
    0x00003984 mov r7, 0x5b                                  |     r7 = 0x5b;
    0x00003988 svc 0                                         |     __asm ("svc 0");
                                                             | label_19:
    0x0000398c cmn r0, 0x1000                                |     
                                                             |     if (r0 < 0x1000) {
    0x00003990 bls 0x3724                                    |         goto label_0;
                                                             |     }
                                                             | label_23:
    0x00003994 ldr r3, [pc, 0x824]                           |     r3 = *(0x41bc);
    0x00003998 rsb r0, r0, 0                                 |     r0 -= ;
    0x0000399c ldr r3, [r8, r3]                              |     r3 = *((r8 + r3));
    0x000039a0 str r0, [r3]                                  |     *(r3) = r0;
    0x000039a4 b 0x3728                                      |     goto label_1;
                                                             | label_24:
    0x000039a8 ldr r2, [sl, 0x10]                            |     r2 = *((sl + 0x10));
    0x000039ac ldr r3, [pc, 0x82c]                           |     r3 = *(0x41dc);
    0x000039b0 cmp r2, r3                                    |     
                                                             |     if (r2 != r3) {
    0x000039b4 beq 0x39f8                                    |         
    0x000039b8 ldrh r3, [sl, 0x10]                           |         r3 = *((sl + 0x10));
    0x000039bc ldr r1, [pc, 0x820]                           |         r1 = *(0x41e0);
    0x000039c0 cmp r3, 3                                     |         
    0x000039c4 ldr r3, [pc, 0x7f8]                           |         r3 = *(0x41c0);
                                                             |         if (r3 != 3) {
    0x000039c8 moveq r2, 4                                   |             r2 = 4;
                                                             |         }
    0x000039cc ldr r3, [r8, r3]                              |         r3 = *((r8 + r3));
                                                             |         if (r3 == 3) {
    0x000039d0 movne r2, 5                                   |             r2 = 5;
                                                             |         }
    0x000039d4 str r2, [r3]                                  |         *(r3) = r2;
    0x000039d8 ldr r3, [pc, 0x7f4]                           |         r3 = *(0x41d0);
    0x000039dc add r1, pc, r1                                |         r1 = pc + r1;
    0x000039e0 ldr r2, [r8, r3]                              |         r2 = *((r8 + r3));
    0x000039e4 mov r0, 2                                     |         r0 = 2;
    0x000039e8 ldr r3, [fp, -0x10c]                          |         r3 = var_10ch;
    0x000039ec ldr r2, [r2]                                  |         r2 = *(r2);
    0x000039f0 bl 0x1bf4                                     |         dl_dprintf ()
    0x000039f4 b 0x3958                                      |         goto label_3;
                                                             |     }
    0x000039f8 mov r3, 1                                     |     r3 = 1;
    0x000039fc ldr r4, [sl, 0x1c]                            |     r4 = *((sl + 0x1c));
    0x00003a00 str r3, [fp, -0x100]                          |     var_100h = r3;
    0x00003a04 ldr r3, [pc, 0x7dc]                           |     r3 = *(0x41e4);
    0x00003a08 mov r7, 0                                     |     r7 = 0;
    0x00003a0c add r3, pc, r3                                |     r3 = pc + r3;
    0x00003a10 add r4, sl, r4                                |     r4 = sl + r4;
    0x00003a14 mov sb, r7                                    |     sb = r7;
    0x00003a18 mvn r5, 0                                     |     r5 = ~0;
    0x00003a1c str r7, [fp, -0x108]                          |     var_108h = r7;
    0x00003a20 str r7, [fp, -0x104]                          |     var_104h = r7;
    0x00003a24 str r3, [fp, -0x114]                          |     var_114h = r3;
                                                             |     do {
    0x00003a28 ldrh r3, [sl, 0x2c]                           |         r3 = *((sl + 0x2c));
    0x00003a2c cmp r3, r7                                    |         
                                                             |         if (r3 <= r7) {
    0x00003a30 bgt 0x3ae0                                    |             
    0x00003a34 ldr r3, [fp, -0xf8]                           |             r3 = var_f8h;
    0x00003a38 ldr r1, [fp, -0x100]                          |             r1 = var_100h;
    0x00003a3c ldr r3, [r3]                                  |             r3 = *(r3);
    0x00003a40 cmp r1, 0                                     |             
    0x00003a44 rsb r2, r3, 0                                 |             r2 = r3 - ;
    0x00003a48 sub r3, r3, 1                                 |             r3--;
    0x00003a4c add sb, r3, sb                                |             sb = r3 + sb;
    0x00003a50 and lr, r2, r5                                |             lr = r2 & r5;
    0x00003a54 and sb, sb, r2                                |             sb &= r2;
    0x00003a58 sub r3, sb, lr                                |             r3 = sb - lr;
    0x00003a5c mov r2, 0                                     |             r2 = 0;
    0x00003a60 str r3, [fp, -0x128]                          |             var_128h = r3;
    0x00003a64 mov r1, r3                                    |             r1 = r3;
                                                             |             if (r1 != 0) {
    0x00003a68 moveq r0, lr                                  |                 r0 = lr;
                                                             |             }
                                                             |             if (r1 == 0) {
    0x00003a6c movne r0, 0                                   |                 r0 = 0;
                                                             |             }
    0x00003a70 mov r3, 0x22                                  |             r3 = 0x22;
    0x00003a74 mvn r4, 0                                     |             r4 = ~0;
    0x00003a78 mov r5, r2                                    |             r5 = r2;
    0x00003a7c mov r7, 0xc0                                  |             r7 = 0xc0;
    0x00003a80 svc 0                                         |             __asm ("svc 0");
    0x00003a84 cmn r0, 0x1000                                |             
    0x00003a88 mov sb, r0                                    |             sb = r0;
                                                             |             if (r0 < 0x1000) {
    0x00003a8c bls 0x3b90                                    |                 goto label_25;
                                                             |             }
    0x00003a90 ldr r3, [pc, 0x728]                           |             r3 = *(0x41bc);
    0x00003a94 rsb r2, r0, 0                                 |             r2 = r0 - ;
    0x00003a98 ldr r3, [r8, r3]                              |             r3 = *((r8 + r3));
    0x00003a9c str r2, [r3]                                  |             *(r3) = r2;
                                                             | label_9:
    0x00003aa0 ldr r3, [pc, 0x72c]                           |             r3 = *(0x41d0);
    0x00003aa4 ldr r1, [pc, 0x740]                           |             r1 = *(0x41e8);
    0x00003aa8 ldr r2, [r8, r3]                              |             r2 = *((r8 + r3));
    0x00003aac ldr r3, [fp, -0x10c]                          |             r3 = var_10ch;
    0x00003ab0 mov r0, 2                                     |             r0 = 2;
    0x00003ab4 str r3, [sp]                                  |             *(sp) = r3;
    0x00003ab8 add r1, pc, r1                                |             r1 = pc + r1;
    0x00003abc mov r3, 0x2a8                                 |             r3 = 0x2a8;
    0x00003ac0 ldr r2, [r2]                                  |             r2 = *(r2);
    0x00003ac4 bl 0x1bf4                                     |             dl_dprintf ()
    0x00003ac8 ldr r3, [pc, 0x6f4]                           |             r3 = *(0x41c0);
    0x00003acc mov r7, 6                                     |             r7 = 6;
    0x00003ad0 ldr r3, [r8, r3]                              |             r3 = *((r8 + r3));
    0x00003ad4 ldr r0, [fp, -0xfc]                           |             r0 = var_fch;
    0x00003ad8 str r7, [r3]                                  |             *(r3) = r7;
    0x00003adc b 0x3960                                      |             goto label_4;
                                                             |         }
    0x00003ae0 ldr r0, [r4]                                  |         r0 = *(r4);
    0x00003ae4 cmp r0, 2                                     |         
                                                             |         if (r0 == 2) {
    0x00003ae8 bne 0x3b18                                    |             
    0x00003aec ldr r3, [fp, -0x104]                          |             r3 = var_104h;
    0x00003af0 cmp r3, 0                                     |             
                                                             |             if (r3 != 0) {
    0x00003af4 beq 0x3b10                                    |                 
    0x00003af8 ldr r3, [pc, 0x6d4]                           |                 r3 = *(0x41d0);
    0x00003afc ldr r1, [fp, -0x114]                          |                 r1 = var_114h;
    0x00003b00 ldr r2, [r8, r3]                              |                 r2 = *((r8 + r3));
    0x00003b04 ldr r3, [fp, -0x10c]                          |                 r3 = var_10ch;
    0x00003b08 ldr r2, [r2]                                  |                 r2 = *(r2);
    0x00003b0c bl 0x1bf4                                     |                 dl_dprintf ()
                                                             |             }
    0x00003b10 ldr r3, [r4, 8]                               |             r3 = *((r4 + 8));
    0x00003b14 str r3, [fp, -0x104]                          |             var_104h = r3;
                                                             |         }
    0x00003b18 ldr r3, [r4]                                  |         r3 = *(r4);
    0x00003b1c cmp r3, 1                                     |         
                                                             |         if (r3 != 1) {
    0x00003b20 bne 0x3b74                                    |             goto label_26;
                                                             |         }
    0x00003b24 cmn r5, 1                                     |         
    0x00003b28 ldr r3, [r4, 8]                               |         r3 = *((r4 + 8));
                                                             |         if (r5 == 1) {
    0x00003b2c bne 0x3b44                                    |             
    0x00003b30 cmp r3, 0x1000000                             |             
                                                             |             if (r3 <= 0x1000000) {
    0x00003b34 movhi r2, 0                                   |                 r2 = 0;
                                                             |             }
                                                             |             if (r3 <= 0x1000000) {
    0x00003b38 movhi r5, r3                                  |                 r5 = r3;
                                                             |             }
                                                             |             if (r3 <= 0x1000000) {
    0x00003b3c strhi r2, [fp, -0x100]                        |                 var_100h = r2;
                                                             |             }
                                                             |             if (r3 > 0x1000000) {
    0x00003b40 bhi 0x3b58                                    |                 goto label_27;
                                                             |             }
                                                             |         }
    0x00003b44 ldr r2, [fp, -0x100]                          |         r2 = var_100h;
    0x00003b48 cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x00003b4c beq 0x3b58                                    |             
    0x00003b50 cmp r5, r3                                    |             
                                                             |             if (r5 >= r3) {
    0x00003b54 movhs r5, r3                                  |                 r5 = r3;
                                                             |                 goto label_27;
                                                             |             }
                                                             |         }
                                                             | label_27:
    0x00003b58 ldr r2, [r4, 0x14]                            |         r2 = *((r4 + 0x14));
    0x00003b5c add r3, r3, r2                                |         r3 += r2;
    0x00003b60 cmp sb, r3                                    |         
                                                             |         if (sb >= r3) {
    0x00003b64 movlo sb, r3                                  |             sb = r3;
                                                             |         }
                                                             | label_5:
    0x00003b68 add r4, r4, 0x20                              |         r4 += 0x20;
                                                             | label_6:
    0x00003b6c add r7, r7, 1                                 |         r7++;
    0x00003b70 b 0x3a28                                      |         
                                                             |     } while (1);
                                                             | label_26:
    0x00003b74 cmp r3, 7                                     |     
                                                             |     if (r3 != 7) {
    0x00003b78 bne 0x3b68                                    |         goto label_5;
                                                             |     }
    0x00003b7c ldr r3, [r4, 0x14]                            |     r3 = *((r4 + 0x14));
    0x00003b80 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00003b84 beq 0x3b6c                                    |         goto label_6;
                                                             |     }
    0x00003b88 str r4, [fp, -0x108]                          |     var_108h = r4;
    0x00003b8c b 0x3b68                                      |     goto label_5;
                                                             | label_25:
    0x00003b90 sub r3, r0, lr                                |     r3 = r0 - lr;
    0x00003b94 str r3, [fp, -0x114]                          |     var_114h = r3;
    0x00003b98 ldr r3, [pc, 0x650]                           |     r3 = *(0x41ec);
    0x00003b9c ldr r1, [fp, -0x114]                          |     r1 = var_114h;
    0x00003ba0 add r3, pc, r3                                |     r3 = pc + r3;
    0x00003ba4 str r1, [r3, 0x18]                            |     *((r3 + 0x18)) = r1;
    0x00003ba8 ldr r3, [fp, -0x100]                          |     r3 = var_100h;
    0x00003bac ldr ip, [sl, 0x1c]                            |     ip = *((sl + 0x1c));
    0x00003bb0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00003bb4 movne r3, r0                                  |         r3 = r0;
                                                             |     }
                                                             |     if (r3 != 0) {
    0x00003bb8 moveq r3, 0                                   |         r3 = 0;
                                                             |     }
    0x00003bbc str r3, [fp, -0x134]                          |     var_134h = r3;
    0x00003bc0 ldr r3, [pc, 0x62c]                           |     r3 = *(0x41f0);
    0x00003bc4 add ip, ip, 0x20                              |     
    0x00003bc8 add r3, pc, r3                                |     r3 = pc + r3;
    0x00003bcc str r3, [fp, -0x138]                          |     var_138h = r3;
    0x00003bd0 ldr r3, [pc, 0x620]                           |     r3 = *(0x41f4);
    0x00003bd4 add ip, sl, ip                                |     
    0x00003bd8 add r3, pc, r3                                |     r3 = pc + r3;
    0x00003bdc str r2, [fp, -0x11c]                          |     var_11ch = r2;
    0x00003be0 str r2, [fp, -0x124]                          |     var_124h = r2;
    0x00003be4 str r2, [fp, -0x120]                          |     var_120h = r2;
    0x00003be8 str r3, [fp, -0x13c]                          |     var_13ch = r3;
                                                             |     do {
    0x00003bec ldrh r3, [sl, 0x2c]                           |         r3 = *((sl + 0x2c));
    0x00003bf0 ldr r2, [fp, -0x120]                          |         r2 = var_120h;
    0x00003bf4 cmp r3, r2                                    |         
                                                             |         if (r3 <= r2) {
    0x00003bf8 bgt 0x3c8c                                    |             
    0x00003bfc ldr r3, [fp, -0x100]                          |             r3 = var_100h;
    0x00003c00 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00003c04 ldrne r3, [fp, -0x104]                        |                 r3 = var_104h;
                                                             |             }
                                                             |             if (r3 == 0) {
    0x00003c08 ldrne r2, [fp, -0x114]                        |                 r2 = var_114h;
                                                             |             }
                                                             |             if (r3 == 0) {
    0x00003c0c addne r3, r3, r2                              |                 r3 += r2;
                                                             |             }
                                                             |             if (r3 == 0) {
    0x00003c10 strne r3, [fp, -0x104]                        |                 var_104h = r3;
                                                             |             }
    0x00003c14 ldr r3, [fp, -0x104]                          |             r3 = var_104h;
    0x00003c18 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00003c1c movne r3, 0                                   |                 r3 = 0;
                                                             |             }
                                                             |             if (r3 == 0) {
    0x00003c20 subne r1, fp, 0xb0                            |                 r1 = fp - 0xb0;
                                                             |             }
                                                             |             if (r3 == 0) {
    0x00003c24 movne r2, r3                                  |                 r2 = r3;
                                                             |             }
                                                             |             if (r3 != 0) {
    0x00003c28 bne 0x3f38                                    |                 goto label_28;
                                                             |             }
    0x00003c2c ldr r3, [pc, 0x590]                           |             r3 = *(0x41c0);
    0x00003c30 mov r2, 7                                     |             r2 = 7;
    0x00003c34 ldr r3, [r8, r3]                              |             r3 = *((r8 + r3));
    0x00003c38 ldr r1, [pc, 0x5bc]                           |             r1 = *(0x41f8);
    0x00003c3c str r2, [r3]                                  |             *(r3) = r2;
    0x00003c40 ldr r3, [pc, 0x58c]                           |             r3 = *(0x41d0);
    0x00003c44 add r1, pc, r1                                |             r1 = pc + r1;
    0x00003c48 ldr r2, [r8, r3]                              |             r2 = *((r8 + r3));
    0x00003c4c mov r0, 2                                     |             r0 = 2;
    0x00003c50 ldr r3, [fp, -0x10c]                          |             r3 = var_10ch;
    0x00003c54 ldr r2, [r2]                                  |             r2 = *(r2);
    0x00003c58 bl 0x1bf4                                     |             dl_dprintf ()
    0x00003c5c ldr r3, [fp, -0xf8]                           |             r3 = var_f8h;
    0x00003c60 mov r0, sl                                    |             r0 = sl;
    0x00003c64 ldr r1, [r3]                                  |             r1 = *(0x41d0);
    0x00003c68 mov r7, 0x5b                                  |             r7 = 0x5b;
    0x00003c6c svc 0                                         |             __asm ("svc 0");
    0x00003c70 cmn r0, 0x1000                                |             
                                                             |             if (r0 <= 0x1000) {
    0x00003c74 ldrhi r3, [pc, 0x544]                         |                 r3 = *((pc + 0x544));
                                                             |             }
    0x00003c78 rsbhi r0, r0, 0                               |             __asm ("rsbhi r0, r0, 0");
                                                             |             if (r0 <= 0x1000) {
    0x00003c7c ldrhi r3, [r8, r3]                            |                 r3 = *((r8 + r3));
                                                             |             }
                                                             |             if (r0 <= 0x1000) {
    0x00003c80 strhi r0, [r3]                                |                 *(r3) = r0;
                                                             |             }
    0x00003c84 ldr r0, [fp, -0xfc]                           |             r0 = var_fch;
    0x00003c88 b 0x37b4                                      |             goto label_7;
                                                             |         }
    0x00003c8c ldr r3, [ip, -0x20]                           |         r3 = *((ip - 0x20));
    0x00003c90 ldr r2, [pc, 0x568]                           |         r2 = *(0x41fc);
    0x00003c94 cmp r3, r2                                    |         
                                                             |         if (r3 != r2) {
    0x00003c98 bne 0x3cc0                                    |             goto label_29;
                                                             |         }
    0x00003c9c ldr r3, [ip, -0x18]                           |         r3 = *((ip - 0x18));
    0x00003ca0 str r3, [fp, -0x124]                          |         var_124h = r3;
    0x00003ca4 ldr r3, [ip, -0xc]                            |         r3 = *((ip - 0xc));
    0x00003ca8 str r3, [fp, -0x11c]                          |         var_11ch = r3;
                                                             | label_8:
    0x00003cac ldr r3, [fp, -0x120]                          |         r3 = var_120h;
    0x00003cb0 add ip, ip, 0x20                              |         
    0x00003cb4 add r3, r3, 1                                 |         r3++;
    0x00003cb8 str r3, [fp, -0x120]                          |         var_120h = r3;
    0x00003cbc b 0x3bec                                      |         
                                                             |     } while (1);
                                                             | label_29:
    0x00003cc0 cmp r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x00003cc4 bne 0x3cac                                    |         goto label_8;
                                                             |     }
    0x00003cc8 ldr r2, [fp, -0xf8]                           |     r2 = var_f8h;
    0x00003ccc ldr r3, [ip, -8]                              |     r3 = *((ip - 8));
    0x00003cd0 ldr lr, [r2]                                  |     
    0x00003cd4 ldr r1, [ip, -0x18]                           |     r1 = *((ip - 0x18));
    0x00003cd8 rsb r5, lr, 0                                 |     r5 = lr - ;
    0x00003cdc tst r3, 2                                     |     
    0x00003ce0 and r0, r5, r1                                |     r0 = r5 & r1;
    0x00003ce4 sub lr, lr, 1                                 |     lr--;
                                                             |     if ((r3 & 2) == 0) {
    0x00003ce8 beq 0x3e9c                                    |         goto label_30;
                                                             |     }
    0x00003cec ldr r2, [fp, -0x100]                          |     r2 = var_100h;
    0x00003cf0 orr r3, r3, 2                                 |     r3 |= 2;
    0x00003cf4 cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x00003cf8 ldreq r2, [fp, -0x13c]                        |         r2 = var_13ch;
                                                             |     }
                                                             |     if (r2 == 0) {
    0x00003cfc movne r2, sb                                  |         r2 = sb;
                                                             |     }
                                                             |     if (r2 != 0) {
    0x00003d00 ldreq r2, [r2, 0x18]                          |         r2 = *((r2 + 0x18));
                                                             |     }
    0x00003d04 and lr, lr, r1                                |     lr &= r1;
    0x00003d08 add r2, r0, r2                                |     r2 = r0 + r2;
    0x00003d0c str r2, [fp, -0x12c]                          |     var_12ch = r2;
    0x00003d10 ldr r2, [ip, -0x10]                           |     r2 = *((ip - 0x10));
    0x00003d14 add lr, lr, r2                                |     lr += r2;
    0x00003d18 lsl r2, r3, 0x1d                              |     r2 = r3 << 0x1d;
    0x00003d1c lsl r3, r3, 2                                 |     r3 <<= 2;
    0x00003d20 and r3, r3, 4                                 |     r3 &= 4;
    0x00003d24 orr r3, r3, r2, lsr 31                        |     r3 |= (r2 >> 31);
    0x00003d28 orr r3, r3, 2                                 |     r3 |= 2;
    0x00003d2c str r3, [fp, -0x130]                          |     var_130h = r3;
    0x00003d30 ldr r3, [ip, -0x1c]                           |     r3 = *((ip - 0x1c));
    0x00003d34 and r5, r5, r3                                |     r5 &= r3;
    0x00003d38 ldr r3, [pc, 0x4c4]                           |     r3 = *(0x4200);
    0x00003d3c tst r5, r3                                    |     
                                                             |     if ((r5 & r3) != 0) {
    0x00003d40 bne 0x3d84                                    |         goto label_10;
                                                             |     }
    0x00003d44 ldr r7, [pc, 0x4bc]                           |     r7 = *(0x4204);
    0x00003d48 ldr r0, [fp, -0x12c]                          |     r0 = var_12ch;
    0x00003d4c and r5, r7, r5, lsr 12                        |     r5 = r7 & (r5 >> 12);
    0x00003d50 mov r1, lr                                    |     r1 = lr;
    0x00003d54 ldr r2, [fp, -0x130]                          |     r2 = var_130h;
    0x00003d58 mov r3, 0x12                                  |     r3 = 0x12;
    0x00003d5c ldr r4, [fp, -0xfc]                           |     r4 = var_fch;
    0x00003d60 mov r7, 0xc0                                  |     r7 = 0xc0;
    0x00003d64 svc 0                                         |     __asm ("svc 0");
    0x00003d68 cmn r0, 0x1000                                |     
    0x00003d6c str r0, [fp, -0x118]                          |     var_118h = r0;
                                                             |     if (r0 < 0x1000) {
    0x00003d70 bls 0x3dac                                    |         goto label_31;
                                                             |     }
    0x00003d74 ldr r3, [pc, 0x444]                           |     r3 = *(0x41bc);
    0x00003d78 rsb sb, r0, 0                                 |     sb = r0 - ;
    0x00003d7c ldr r3, [r8, r3]                              |     r3 = *((r8 + r3));
    0x00003d80 str sb, [r3]                                  |     *(r3) = sb;
                                                             |     do {
                                                             | label_10:
    0x00003d84 ldr r0, [fp, -0x114]                          |         r0 = var_114h;
    0x00003d88 ldr r1, [fp, -0x128]                          |         r1 = var_128h;
    0x00003d8c mov r7, 0x5b                                  |         r7 = 0x5b;
    0x00003d90 svc 0                                         |         __asm ("svc 0");
    0x00003d94 cmn r0, 0x1000                                |         
                                                             |         if (r0 <= 0x1000) {
    0x00003d98 ldrhi r3, [pc, 0x420]                         |             r3 = *((pc + 0x420));
                                                             |         }
    0x00003d9c rsbhi r0, r0, 0                               |         __asm ("rsbhi r0, r0, 0");
                                                             |         if (r0 <= 0x1000) {
    0x00003da0 ldrhi r3, [r8, r3]                            |             r3 = *((r8 + r3));
                                                             |         }
                                                             |         if (r0 <= 0x1000) {
    0x00003da4 strhi r0, [r3]                                |             *(r3) = r0;
                                                             |         }
    0x00003da8 b 0x3aa0                                      |         goto label_9;
                                                             | label_31:
    0x00003dac ldr r3, [fp, -0x12c]                          |         r3 = var_12ch;
    0x00003db0 ldr r2, [fp, -0x118]                          |         r2 = var_118h;
    0x00003db4 cmp r3, 0                                     |         
    0x00003db8 cmpne r3, r2                                  |         __asm ("cmpne r3, r2");
    0x00003dbc bne 0x3d84                                    |         
                                                             |     } while (r3 != 0);
    0x00003dc0 ldr r3, [fp, -0xf8]                           |     r3 = var_f8h;
    0x00003dc4 ldr r5, [ip, -0x10]                           |     r5 = *((ip - 0x10));
    0x00003dc8 ldr r4, [r3]                                  |     r4 = *(r3);
    0x00003dcc ldr r0, [ip, -0x18]                           |     r0 = *((ip - 0x18));
    0x00003dd0 add lr, r2, lr                                |     lr = r2 + lr;
    0x00003dd4 add r0, r5, r0                                |     r0 = r5 + r0;
    0x00003dd8 sub r2, r4, 1                                 |     r2 = r4 - 1;
    0x00003ddc ldr r3, [ip, -0xc]                            |     r3 = *((ip - 0xc));
    0x00003de0 add r2, r2, r0                                |     r2 += r0;
    0x00003de4 rsb r4, r4, 0                                 |     r4 -= ;
    0x00003de8 and r2, r2, r4                                |     r2 &= r4;
    0x00003dec sub r3, r3, r5                                |     r3 -= r5;
    0x00003df0 sub r0, r2, r0                                |     r0 = r2 - r0;
    0x00003df4 cmp r3, r0                                    |     
                                                             |     if (r3 > r0) {
    0x00003df8 addls r3, lr, r3                              |         r3 = lr + r3;
                                                             |     }
                                                             |     if (r3 <= r0) {
    0x00003dfc addhi r3, lr, r0                              |         r3 = lr + r0;
                                                             |     }
                                                             | label_11:
    0x00003e00 cmp r3, lr                                    |     
                                                             |     if (r3 != lr) {
    0x00003e04 bne 0x3e2c                                    |         goto label_32;
                                                             |     }
    0x00003e08 ldr r1, [ip, -0x18]                           |     r1 = *((ip - 0x18));
    0x00003e0c ldr r3, [ip, -0xc]                            |     r3 = *((ip - 0xc));
    0x00003e10 add r1, r1, r3                                |     r1 += r3;
    0x00003e14 cmp r2, r1                                    |     
                                                             |     if (r2 <= r1) {
    0x00003e18 blo 0x3e38                                    |         goto label_33;
                                                             |     }
                                                             | label_12:
    0x00003e1c ldr r3, [fp, -0x118]                          |     r3 = var_118h;
    0x00003e20 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00003e24 bne 0x3cac                                    |         goto label_8;
                                                             |     }
    0x00003e28 b 0x3d84                                      |     goto label_10;
                                                             | label_32:
    0x00003e2c mov r1, 0                                     |     r1 = 0;
    0x00003e30 strb r1, [lr], 1                              |     *(lr) = r1;
                                                             |     lr++;
    0x00003e34 b 0x3e00                                      |     goto label_11;
                                                             | label_33:
    0x00003e38 ldr r3, [fp, -0x134]                          |     r3 = var_134h;
    0x00003e3c sub r1, r1, r2                                |     r1 -= r2;
    0x00003e40 add lr, r3, r2                                |     lr = r3 + r2;
    0x00003e44 mov r0, lr                                    |     r0 = lr;
    0x00003e48 ldr r2, [fp, -0x130]                          |     r2 = var_130h;
    0x00003e4c mov r3, 0x32                                  |     r3 = 0x32;
    0x00003e50 mvn r4, 0                                     |     r4 = ~0;
    0x00003e54 mov r5, 0                                     |     r5 = 0;
    0x00003e58 mov r7, 0xc0                                  |     r7 = 0xc0;
    0x00003e5c svc 0                                         |     __asm ("svc 0");
    0x00003e60 cmn r0, 0x1000                                |     
                                                             |     if (r0 <= 0x1000) {
    0x00003e64 ldrhi r3, [pc, 0x354]                         |         r3 = *((pc + 0x354));
                                                             |     }
    0x00003e68 rsbhi r0, r0, 0                               |     __asm ("rsbhi r0, r0, 0");
                                                             |     if (r0 <= 0x1000) {
    0x00003e6c ldrhi r3, [r8, r3]                            |         r3 = *((r8 + r3));
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x00003e70 strhi r0, [r3]                                |         *(r3) = r0;
                                                             |     }
                                                             |     if (r0 <= 0x1000) {
    0x00003e74 movhi r0, r4                                  |         r0 = r4;
                                                             |     }
    0x00003e78 cmn r0, 1                                     |     
                                                             |     if (r0 == 1) {
    0x00003e7c movne r3, 0                                   |         r3 = 0;
                                                             |     }
                                                             |     if (r0 != 1) {
    0x00003e80 moveq r3, 1                                   |         r3 = 1;
                                                             |     }
    0x00003e84 cmp lr, r0                                    |     
                                                             |     if (lr != r0) {
    0x00003e88 moveq r0, r3                                  |         r0 = r3;
                                                             |     }
                                                             |     if (lr == r0) {
    0x00003e8c orrne r0, r3, 1                               |         r0 = r3 | 1;
                                                             |     }
    0x00003e90 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00003e94 beq 0x3e1c                                    |         goto label_12;
                                                             |     }
    0x00003e98 b 0x3d84                                      |     goto label_10;
                                                             | label_30:
    0x00003e9c ldr r2, [fp, -0x100]                          |     r2 = var_100h;
    0x00003ea0 and lr, lr, r1                                |     lr &= r1;
    0x00003ea4 cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x00003ea8 ldreq r2, [fp, -0x138]                        |         r2 = var_138h;
                                                             |     }
                                                             |     if (r2 == 0) {
    0x00003eac movne r2, sb                                  |         r2 = sb;
                                                             |     }
                                                             |     if (r2 != 0) {
    0x00003eb0 ldreq r2, [r2, 0x18]                          |         r2 = *((r2 + 0x18));
                                                             |     }
    0x00003eb4 ldr r1, [ip, -0x10]                           |     r1 = *((ip - 0x10));
    0x00003eb8 add r2, r2, r0                                |     r2 += r0;
    0x00003ebc str r2, [fp, -0x118]                          |     var_118h = r2;
    0x00003ec0 lsl r2, r3, 2                                 |     r2 = r3 << 2;
    0x00003ec4 lsl r0, r3, 0x1d                              |     r0 = r3 << 0x1d;
    0x00003ec8 and r2, r2, 4                                 |     r2 &= 4;
    0x00003ecc and r3, r3, 2                                 |     r3 &= 2;
    0x00003ed0 orr r2, r2, r0, lsr 31                        |     r2 |= (r0 >> 31);
    0x00003ed4 orr r2, r2, r3                                |     r2 |= r3;
    0x00003ed8 ldr r3, [ip, -0x1c]                           |     r3 = *((ip - 0x1c));
    0x00003edc add r1, lr, r1                                |     r1 = lr + r1;
    0x00003ee0 and r5, r5, r3                                |     r5 &= r3;
    0x00003ee4 ldr r3, [pc, 0x318]                           |     r3 = *(0x4200);
    0x00003ee8 tst r5, r3                                    |     
                                                             |     if ((r5 & r3) != 0) {
    0x00003eec bne 0x3d84                                    |         goto label_10;
                                                             |     }
    0x00003ef0 ldr lr, [pc, 0x310]                           |     
    0x00003ef4 ldr r0, [fp, -0x118]                          |     r0 = var_118h;
    0x00003ef8 mov r3, 0x12                                  |     r3 = 0x12;
    0x00003efc ldr r4, [fp, -0xfc]                           |     r4 = var_fch;
    0x00003f00 and r5, lr, r5, lsr 12                        |     r5 = lr & (r5 >> 12);
    0x00003f04 mov r7, 0xc0                                  |     r7 = 0xc0;
    0x00003f08 svc 0                                         |     __asm ("svc 0");
    0x00003f0c cmn r0, 0x1000                                |     
                                                             |     if (r0 <= 0x1000) {
    0x00003f10 ldrhi r3, [pc, 0x2a8]                         |         r3 = *((pc + 0x2a8));
                                                             |     }
    0x00003f14 rsbhi r0, r0, 0                               |     __asm ("rsbhi r0, r0, 0");
                                                             |     if (r0 <= 0x1000) {
    0x00003f18 ldrhi r3, [r8, r3]                            |         r3 = *((r8 + r3));
                                                             |     }
                                                             |     if (r0 > 0x1000) {
    0x00003f1c strhi r0, [r3]                                |         *(r3) = r0;
                                                             |         goto label_34;
                                                             |     }
                                                             |     if (r0 > 0x1000) {
                                                             | label_34:
    0x00003f20 bhi 0x3d84                                    |         goto label_10;
                                                             |     }
    0x00003f24 ldr r3, [fp, -0x118]                          |     r3 = var_118h;
    0x00003f28 cmp r3, 0                                     |     
    0x00003f2c cmpne r3, r0                                  |     __asm ("cmpne r3, r0");
                                                             |     if (r3 == 0) {
    0x00003f30 beq 0x3cac                                    |         goto label_8;
                                                             |     }
    0x00003f34 b 0x3d84                                      |     goto label_10;
                                                             |     do {
                                                             | label_28:
    0x00003f38 strb r2, [r3, r1]                             |         *((r3 + r1)) = r2;
    0x00003f3c add r3, r3, 1                                 |         r3++;
    0x00003f40 cmp r3, 0x8c                                  |         
    0x00003f44 bne 0x3f38                                    |         
                                                             |     } while (r3 != 0x8c);
    0x00003f48 ldr r3, [fp, -0x114]                          |     r3 = var_114h;
    0x00003f4c mov r2, 0                                     |     r2 = 0;
    0x00003f50 ldr r0, [fp, -0x104]                          |     r0 = var_104h;
    0x00003f54 bl 0x3584                                     |     dl_parse_dynamic_info ();
    0x00003f58 ldr r3, [fp, -0x58]                           |     r3 = var_58h;
    0x00003f5c cmp r3, 0                                     |     
    0x00003f60 mov r4, r0                                    |     r4 = r0;
    0x00003f64 bne 0x4118                                    |     
                                                             |     while (r2 <= r3) {
    0x00003f68 ldr r0, [fp, -0xfc]                           |         r0 = var_fch;
    0x00003f6c mov r7, 6                                     |         r7 = 6;
    0x00003f70 svc 0                                         |         __asm ("svc 0");
    0x00003f74 cmn r0, 0x1000                                |         
                                                             |         if (r0 <= 0x1000) {
    0x00003f78 ldrhi r3, [pc, 0x240]                         |             r3 = *((pc + 0x240));
                                                             |         }
    0x00003f7c rsbhi r0, r0, 0                               |         __asm ("rsbhi r0, r0, 0");
                                                             |         if (r0 <= 0x1000) {
    0x00003f80 ldrhi r3, [r8, r3]                            |             r3 = *((r8 + r3));
                                                             |         }
                                                             |         if (r0 <= 0x1000) {
    0x00003f84 strhi r0, [r3]                                |             *(r3) = r0;
                                                             |         }
    0x00003f88 mov r5, 0                                     |         r5 = 0;
    0x00003f8c ldr r3, [fp, -0x104]                          |         r3 = var_104h;
    0x00003f90 sub r2, fp, 0xb0                              |         r2 -= var_b0h;
    0x00003f94 str r5, [sp]                                  |         *(sp) = r5;
    0x00003f98 ldr r1, [fp, -0x114]                          |         r1 = var_114h;
    0x00003f9c ldr r0, [fp, -0x10c]                          |         r0 = var_10ch;
    0x00003fa0 bl 0x3364                                     |         dl_add_elf_hash_table ();
    0x00003fa4 ldr r3, [fp, -0x124]                          |         r3 = var_124h;
    0x00003fa8 ldr r2, [fp, -0xf0]                           |         r2 = var_f0h;
    0x00003fac str r3, [r0, 0x100]                           |         *((r0 + 0x100)) = r3;
    0x00003fb0 ldr r3, [fp, -0x11c]                          |         r3 = var_11ch;
    0x00003fb4 mov r6, r0                                    |         r6 = r0;
    0x00003fb8 str r3, [r0, 0x104]                           |         *((r0 + 0x104)) = r3;
    0x00003fbc ldr r3, [fp, -0xec]                           |         r3 = var_ech;
    0x00003fc0 str sb, [r0, 0x38]                            |         *((r0 + 0x38)) = sb;
    0x00003fc4 str r3, [r0, 0x110]                           |         *((r0 + 0x110)) = r3;
    0x00003fc8 ldr r3, [sl, 0x1c]                            |         r3 = *((sl + 0x1c));
    0x00003fcc str r2, [r0, 0x108]                           |         *((r0 + 0x108)) = r2;
    0x00003fd0 add r3, r3, sb                                |         r3 += sb;
    0x00003fd4 str r3, [r0, 0xfc]                            |         *((r0 + 0xfc)) = r3;
    0x00003fd8 ldrh r3, [sl, 0x2c]                           |         r3 = *((sl + 0x2c));
    0x00003fdc str r5, [r0, 0x10c]                           |         *((r0 + 0x10c)) = r5;
    0x00003fe0 str r3, [r0, 0xf8]                            |         *((r0 + 0xf8)) = r3;
    0x00003fe4 ldr r3, [fp, -0x140]                          |         r3 = var_140h;
    0x00003fe8 orr r3, r3, r4                                |         r3 |= r4;
    0x00003fec str r3, [r0, 0x50]                            |         *((r0 + 0x50)) = r3;
    0x00003ff0 ldr r3, [fp, -0x108]                          |         r3 = var_108h;
    0x00003ff4 cmp r3, r5                                    |         
                                                             |         if (r3 != r5) {
    0x00003ff8 beq 0x405c                                    |             
    0x00003ffc ldr r3, [r3, 0x14]                            |             r3 = *((r3 + 0x14));
    0x00004000 ldr r2, [fp, -0x108]                          |             r2 = var_108h;
    0x00004004 str r3, [r0, 0x1c]                            |             *((r0 + 0x1c)) = r3;
    0x00004008 ldr r3, [fp, -0x108]                          |             r3 = var_108h;
    0x0000400c ldr r2, [r2, 8]                               |             r2 = *((r2 + 8));
    0x00004010 ldr r3, [r3, 0x1c]                            |             r3 = *((r3 + 0x1c));
    0x00004014 cmp r3, r5                                    |             
    0x00004018 str r3, [r0, 0x20]                            |             *((r0 + 0x20)) = r3;
                                                             |             if (r3 == r5) {
    0x0000401c subne r3, r3, 1                               |                 r3--;
                                                             |             }
                                                             |             if (r3 == r5) {
    0x00004020 andne r3, r3, r2                              |                 r3 &= r2;
                                                             |             }
    0x00004024 str r3, [r0, 0x24]                            |             *((r0 + 0x24)) = r3;
    0x00004028 ldr r3, [fp, -0x108]                          |             r3 = var_108h;
    0x0000402c ldr r3, [r3, 0x10]                            |             r3 = *((r3 + 0x10));
    0x00004030 str r2, [r0, 0x14]                            |             *((r0 + 0x14)) = r2;
    0x00004034 str r3, [r0, 0x18]                            |             *((r0 + 0x18)) = r3;
    0x00004038 bl 0x136c                                     |             dl_next_tls_modid ();
    0x0000403c ldr r3, [r6, 0x14]                            |             r3 = *((r6 + 0x14));
    0x00004040 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00004044 ldrne r2, [fp, -0x108]                        |                 r2 = var_108h;
                                                             |             }
                                                             |             if (r3 == 0) {
    0x00004048 ldrne r3, [r6]                                |                 r3 = *(r6);
                                                             |             }
                                                             |             if (r3 == 0) {
    0x0000404c ldrne r2, [r2, 8]                             |                 r2 = *((r2 + 8));
                                                             |             }
    0x00004050 str r0, [r6, 0x2c]                            |             *((r6 + 0x2c)) = r0;
                                                             |             if (r3 == 0) {
    0x00004054 addne r3, r3, r2                              |                 r3 += r2;
                                                             |             }
                                                             |             if (r3 != 0) {
    0x00004058 strne r3, [r6, 0x14]                          |                 *((r6 + 0x14)) = r3;
                                                             |                 goto label_35;
                                                             |             }
                                                             |         }
                                                             | label_35:
    0x0000405c ldr r3, [fp, -0x110]                          |         r3 = var_110h;
    0x00004060 ldr r4, [r3]                                  |         r4 = *(r3);
    0x00004064 cmp r4, 0                                     |         
                                                             |         if (r4 != 0) {
    0x00004068 beq 0x40b8                                    |             
    0x0000406c mov r0, 0x18                                  |             r0 = 0x18;
    0x00004070 bl 0x243c                                     |             dl_malloc ();
    0x00004074 ldr r3, [fp, -0x110]                          |             r3 = var_110h;
    0x00004078 mov r1, 0                                     |             r1 = 0;
    0x0000407c str r0, [r4, 0x10]                            |             *((r4 + 0x10)) = r0;
    0x00004080 ldr r3, [r3]                                  |             r3 = *(r3);
    0x00004084 ldr r3, [r3, 0x10]                            |             r3 = *((r3 + 0x10));
    0x00004088 add r2, r3, 0x18                              |             r2 = r3 + 0x18;
                                                             | label_15:
    0x0000408c cmp r3, r2                                    |             
                                                             |             if (r3 != r2) {
    0x00004090 bne 0x41b4                                    |                 goto label_36;
                                                             |             }
    0x00004094 ldr r3, [fp, -0x110]                          |             r3 = var_110h;
    0x00004098 ldr r3, [r3]                                  |             r3 = *(r3);
    0x0000409c ldr r2, [r3, 0x10]                            |             r2 = *((r3 + 0x10));
    0x000040a0 str r3, [r2, 0x14]                            |             *((r2 + 0x14)) = r3;
    0x000040a4 ldr r3, [fp, -0x110]                          |             r3 = var_110h;
    0x000040a8 ldr r2, [fp, -0x110]                          |             r2 = var_110h;
    0x000040ac ldr r3, [r3]                                  |             r3 = *(r3);
    0x000040b0 ldr r3, [r3, 0x10]                            |             r3 = *((r3 + 0x10));
    0x000040b4 str r3, [r2]                                  |             *(r2) = r3;
                                                             |         }
    0x000040b8 ldr r3, [fp, -0x110]                          |         r3 = var_110h;
    0x000040bc ldr r3, [r3]                                  |         r3 = *(r3);
    0x000040c0 str r6, [r3]                                  |         *(r3) = r6;
    0x000040c4 ldrh r3, [r6, 0x4c]                           |         r3 = *((r6 + 0x4c));
    0x000040c8 add r2, r3, 1                                 |         r2 = r3 + 1;
    0x000040cc strh r2, [r6, 0x4c]                           |         *((r6 + 0x4c)) = r2;
    0x000040d0 ldr r2, [r6, 0x50]                            |         r2 = *((r6 + 0x50));
    0x000040d4 tst r2, 0x1000                                |         
                                                             |         if ((r2 & 0x1000) == 0) {
    0x000040d8 addne r3, r3, 2                               |             r3 += 2;
                                                             |         }
    0x000040dc strhne r3, [r6, 0x4c]                         |         __asm ("strhne r3, [r6, 0x4c]");
    0x000040e0 mov r3, 0                                     |         r3 = 0;
    0x000040e4 str r3, [r6, 0x3c]                            |         *((r6 + 0x3c)) = r3;
    0x000040e8 ldr r3, [fp, -0xa4]                           |         r3 = var_a4h;
    0x000040ec cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x000040f0 ldrne r2, [pc, 0x114]                         |             r2 = *((pc + 0x114));
                                                             |         }
                                                             |         if (r3 == 0) {
    0x000040f4 ldrne r2, [r8, r2]                            |             r2 = *((r8 + r2));
                                                             |         }
                                                             |         if (r3 == 0) {
    0x000040f8 strne r6, [r3, 4]                             |             *((r3 + 4)) = r6;
                                                             |         }
                                                             |         if (r3 == 0) {
    0x000040fc strne r2, [r3, 8]                             |             *((r3 + 8)) = r2;
                                                             |         }
    0x00004100 ldr r3, [fp, -0xf8]                           |         r3 = var_f8h;
    0x00004104 mov r0, sl                                    |         r0 = sl;
    0x00004108 ldr r1, [r3]                                  |         r1 = *(r3);
    0x0000410c mov r7, 0x5b                                  |         r7 = 0x5b;
    0x00004110 svc 0                                         |         __asm ("svc 0");
    0x00004114 b 0x38d8                                      |         goto label_13;
    0x00004118 ldr ip, [sl, 0x1c]                            |         ip = *((sl + 0x1c));
    0x0000411c ldr lr, [pc, 0xec]                            |         
    0x00004120 add ip, sl, ip                                |         
    0x00004124 mov r3, 0                                     |         r3 = 0;
    0x00004128 add lr, pc, lr                                |         lr = pc + lr;
                                                             | label_14:
    0x0000412c ldrh r2, [sl, 0x2c]                           |         r2 = *((sl + 0x2c));
    0x00004130 cmp r2, r3                                    |         
    0x00004134 ble 0x3f68                                    |         
                                                             |     }
    0x00004138 ldr r2, [ip, r3, lsl 5]                       |     offset_0 = r3 << 5;
                                                             |     r2 = *((ip + offset_0));
    0x0000413c cmp r2, 1                                     |     
                                                             |     if (r2 == 1) {
    0x00004140 bne 0x41ac                                    |         
    0x00004144 add r5, ip, r3, lsl 5                         |         r5 = ip + (r3 << 5);
    0x00004148 ldr r2, [r5, 0x18]                            |         r2 = *((r5 + 0x18));
    0x0000414c tst r2, 2                                     |         
                                                             |         if ((r2 & 2) != 0) {
    0x00004150 bne 0x41ac                                    |             goto label_37;
                                                             |         }
    0x00004154 ldr r2, [fp, -0x100]                          |         r2 = var_100h;
    0x00004158 ldr r6, [r5, 8]                               |         r6 = *((r5 + 8));
    0x0000415c cmp r2, 0                                     |         
    0x00004160 ldr r2, [fp, -0xf8]                           |         r2 = var_f8h;
                                                             |         if (r2 != 0) {
    0x00004164 ldreq r0, [lr, 0x18]                          |             r0 = *((lr + 0x18));
                                                             |         }
    0x00004168 ldr r2, [r2]                                  |         r2 = *(r2);
    0x0000416c ldr r5, [r5, 0x10]                            |         r5 = *((r5 + 0x10));
    0x00004170 sub r1, r2, 1                                 |         r1 = r2 - 1;
    0x00004174 rsb r2, r2, 0                                 |         r2 -= ;
    0x00004178 and r2, r2, r6                                |         r2 &= r6;
                                                             |         if (r2 == 0) {
    0x0000417c movne r0, sb                                  |             r0 = sb;
                                                             |         }
    0x00004180 and r1, r1, r6                                |         r1 &= r6;
    0x00004184 add r0, r2, r0                                |         r0 = r2 + r0;
    0x00004188 add r1, r1, r5                                |         r1 += r5;
    0x0000418c mov r2, 7                                     |         r2 = 7;
    0x00004190 mov r7, 0x7d                                  |         r7 = 0x7d;
    0x00004194 svc 0                                         |         __asm ("svc 0");
    0x00004198 cmn r0, 0x1000                                |         
                                                             |         if (r0 <= 0x1000) {
    0x0000419c ldrhi r2, [pc, 0x1c]                          |             r2 = *((pc + 0x1c));
                                                             |         }
    0x000041a0 rsbhi r0, r0, 0                               |         __asm ("rsbhi r0, r0, 0");
                                                             |         if (r0 <= 0x1000) {
    0x000041a4 ldrhi r2, [r8, r2]                            |             r2 = *((r8 + r2));
                                                             |         }
                                                             |         if (r0 > 0x1000) {
    0x000041a8 strhi r0, [r2]                                |             *(r2) = r0;
                                                             |             goto label_37;
                                                             |         }
                                                             |     }
                                                             | label_37:
    0x000041ac add r3, r3, 1                                 |     r3++;
    0x000041b0 b 0x412c                                      |     goto label_14;
                                                             | label_36:
    0x000041b4 strb r1, [r3], 1                              |     *(r3) = r1;
                                                             |     r3++;
    0x000041b8 b 0x408c                                      |     goto label_15;
                                                             | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x243c */
                                                 | #include <stdint.h>
                                                 |  
                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                 |  
    ; (fcn) sym._dl_malloc ()                    | void dl_malloc (uint32_t arg1) {
                                                 |     int32_t var_14h_2;
                                                 |     int32_t var_14h;
                                                 |     r0 = arg1;
    0x0000243c push {r4, r5, r6, r7, fp, lr}     |     
    0x00002440 ldr r6, [pc, 0x10c]               |     r6 = *(0x2550);
    0x00002444 ldr r3, [pc, 0x10c]               |     r3 = *(0x2554);
    0x00002448 add r6, pc, r6                    |     r6 = pc + r6;
    0x0000244c ldr r3, [r6, r3]                  |     
    0x00002450 add fp, sp, 0x14                  |     
    0x00002454 ldr r3, [r3]                      |     r3 = *(0x2550);
    0x00002458 cmp r3, 0                         |     
                                                 |     if (r3 != 0) {
    0x0000245c beq 0x246c                        |         
    0x00002460 sub sp, fp, 0x14                  |         
    0x00002464 pop {r4, r5, r6, r7, fp, lr}      |         
    0x00002468 bx r3                             |         return uint32_t (*r3)() ();
                                                 |     }
    0x0000246c ldr r3, [pc, 0xe8]                |     r3 = *(0x2558);
    0x00002470 ldr r1, [pc, 0xe8]                |     
    0x00002474 ldr r3, [r6, r3]                  |     r3 = *((r6 + r3));
    0x00002478 add r1, pc, r1                    |     r1 = pc + r1;
    0x0000247c ldr r2, [r3]                      |     r2 = *(0x2558);
    0x00002480 ldr r3, [r1, 0xc]                 |     r3 = *(0x2568);
    0x00002484 ldr r1, [r1, 0x10]                |     r1 = *(0x256c);
    0x00002488 mov ip, r0                        |     
    0x0000248c sub r3, r3, r1                    |     r3 -= r1;
    0x00002490 add r3, r3, r0                    |     r3 += r0;
    0x00002494 cmp r3, r2                        |     
                                                 |     if (r3 >= r2) {
    0x00002498 bls 0x2534                        |         
    0x0000249c cmp r0, r2                        |         
                                                 |         if (r0 >= r2) {
    0x000024a0 sublo r1, r2, 1                   |             r1 = r2 - 1;
                                                 |         }
                                                 |         if (r0 >= r2) {
    0x000024a4 addlo r1, r1, r0                  |             r1 += r0;
                                                 |         }
                                                 |         if (r0 < r2) {
    0x000024a8 movhs r1, r0                      |             r1 = r0;
                                                 |         }
    0x000024ac mov r0, 0                         |         r0 = 0;
                                                 |         if (r0 >= r2) {
    0x000024b0 andlo r1, r1, r2                  |             r1 &= r2;
                                                 |         }
    0x000024b4 mov r3, 0x22                      |         r3 = 0x22;
    0x000024b8 mov r2, 3                         |         r2 = 3;
    0x000024bc mvn r4, 0                         |         r4 = ~0;
    0x000024c0 mov r5, r0                        |         r5 = r0;
    0x000024c4 mov r7, 0xc0                      |         r7 = 0xc0;
    0x000024c8 svc 0                             |         __asm ("svc 0");
    0x000024cc cmn r0, 0x1000                    |         
                                                 |         if (r0 <= 0x1000) {
    0x000024d0 ldrhi r3, [pc, 0x8c]              |             r3 = *((pc + 0x8c));
                                                 |         }
    0x000024d4 rsbhi r0, r0, 0                   |         __asm ("rsbhi r0, r0, 0");
                                                 |         if (r0 <= 0x1000) {
    0x000024d8 ldrhi r3, [r6, r3]                |             r3 = *((r6 + r3));
                                                 |         }
                                                 |         if (r0 <= 0x1000) {
    0x000024dc strhi r0, [r3]                    |             *(r3) = r0;
                                                 |         }
                                                 |         if (r0 <= 0x1000) {
    0x000024e0 movhi r0, r4                      |             r0 = r4;
                                                 |         }
    0x000024e4 ldr r3, [pc, 0x7c]                |         r3 = *(0x2564);
    0x000024e8 cmn r0, 1                         |         
    0x000024ec add r3, pc, r3                    |         r3 = pc + r3;
    0x000024f0 str r0, [r3, 0xc]                 |         *((r3 + 0xc)) = r0;
    0x000024f4 str r0, [r3, 0x10]                |         *((r3 + 0x10)) = r0;
                                                 |         if (r0 != 1) {
    0x000024f8 bne 0x2534                        |             goto label_0;
                                                 |         }
    0x000024fc ldr r3, [pc, 0x68]                |         r3 = *(0x2568);
    0x00002500 ldr r1, [pc, 0x68]                |         r1 = *(0x256c);
    0x00002504 ldr r3, [r6, r3]                  |         r3 = *((r6 + r3));
    0x00002508 add r1, pc, r1                    |         r1 = pc + r1;
    0x0000250c ldr r2, [r3]                      |         r2 = *(0x2568);
    0x00002510 mov r0, 2                         |         r0 = 2;
    0x00002514 bl 0x1bf4                         |         dl_dprintf ()
    0x00002518 mov r7, 1                         |         r7 = 1;
    0x0000251c mov r0, 0x14                      |         r0 = 0x14;
    0x00002520 svc 0                             |         __asm ("svc 0");
    0x00002524 ldr r3, [pc, 0x38]                |         r3 = *(0x2560);
    0x00002528 rsb r0, r0, 0                     |         r0 -= ;
    0x0000252c ldr r3, [r6, r3]                  |         r3 = *((r6 + r3));
    0x00002530 str r0, [r3]                      |         *(r3) = r0;
                                                 |     }
                                                 | label_0:
    0x00002534 ldr r3, [pc, 0x38]                |     r3 = *(0x2570);
    0x00002538 add r3, pc, r3                    |     r3 = pc + r3;
    0x0000253c ldr r0, [r3, 0xc]                 |     r0 = *(0x257c);
    0x00002540 add ip, r0, ip                    |     
    0x00002544 add ip, ip, 7                     |     
    0x00002548 bic ip, ip, 7                     |     ip = BIT_MASK (ip, 7);
    0x0000254c str ip, [r3, 0xc]                 |     *((r3 + 0xc)) = ip;
    0x00002550 pop {r4, r5, r6, r7, fp, pc}      |     
                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x1fb8 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym._dl_nothread_init_static_tls ()      | void dl_nothread_init_static_tls (int32_t arg1) {
                                                     |     int32_t var_ch;
                                                     |     r0 = arg1;
    0x00001fb8 mov r2, r0                            |     r2 = r0;
    0x00001fbc push {r4, r7, fp, lr}                 |     
    0x00001fc0 bl 0x5a90                             |     aeabi_read_tp ();
    0x00001fc4 ldr r3, [r2, 0x28]                    |     r3 = *((r2 + 0x28));
    0x00001fc8 ldr r1, [r0]                          |     r1 = *(r0);
    0x00001fcc add r3, r0, r3                        |     r3 = r0 + r3;
    0x00001fd0 ldr ip, [r1, -8]                      |     ip = *((r1 - 8));
    0x00001fd4 ldr r0, [r2, 0x2c]                    |     r0 = *((r2 + 0x2c));
    0x00001fd8 ldr r4, [pc, 0x94]                    |     r4 = *(0x2070);
    0x00001fdc cmp r0, ip                            |     
    0x00001fe0 add r4, pc, r4                        |     r4 = pc + r4;
    0x00001fe4 add fp, sp, 0xc                       |     
                                                     |     if (r0 >= ip) {
    0x00001fe8 bls 0x2018                            |         
    0x00001fec ldr r1, [pc, 0x84]                    |         r1 = *(0x2074);
    0x00001ff0 mov r0, 2                             |         r0 = 2;
    0x00001ff4 add r1, pc, r1                        |         r1 = pc + r1;
    0x00001ff8 bl 0x1bf4                             |         dl_dprintf ()
    0x00001ffc mov r7, 1                             |         r7 = 1;
    0x00002000 mov r0, 0x1e                          |         r0 = 0x1e;
    0x00002004 svc 0                                 |         __asm ("svc 0");
    0x00002008 ldr r3, [pc, 0x6c]                    |         r3 = *(0x2078);
    0x0000200c rsb r0, r0, 0                         |         r0 -= ;
    0x00002010 ldr r3, [r4, r3]                      |         r3 = *((r4 + r3));
    0x00002014 str r0, [r3]                          |         *(r3) = r0;
                                                     |     }
    0x00002018 add ip, r1, r0, lsl 3                 |     
    0x0000201c str r3, [r1, r0, lsl 3]               |     offset_0 = r0 << 3;
                                                     |     *((r1 + offset_0)) = r3;
    0x00002020 mov r1, 1                             |     r1 = 1;
    0x00002024 strb r1, [ip, 4]                      |     *((ip + 4)) = r1;
    0x00002028 ldr r0, [r2, 0x18]                    |     r0 = *((r2 + 0x18));
    0x0000202c ldr r1, [r2, 0x14]                    |     r1 = *((r2 + 0x14));
    0x00002030 mov ip, r3                            |     
    0x00002034 sub r1, r1, 1                         |     r1--;
    0x00002038 add r0, r3, r0                        |     r0 = r3 + r0;
                                                     | label_0:
    0x0000203c cmp ip, r0                            |     
                                                     |     if (ip != r0) {
    0x00002040 bne 0x2068                            |         goto label_1;
                                                     |     }
    0x00002044 ldr r1, [r2, 0x18]                    |     r1 = *((r2 + 0x18));
    0x00002048 ldr r2, [r2, 0x1c]                    |     r2 = *((r2 + 0x1c));
    0x0000204c add r1, r3, r1                        |     r1 = r3 + r1;
    0x00002050 add r3, r3, r2                        |     r3 += r2;
    0x00002054 mov r2, 0                             |     r2 = 0;
                                                     |     do {
    0x00002058 cmp r1, r3                            |         
    0x0000205c popeq {r4, r7, fp, pc}                |         
    0x00002060 strb r2, [r1], 1                      |         *(r1) = r2;
                                                     |         r1++;
    0x00002064 b 0x2058                              |         
                                                     |     } while (1);
                                                     | label_1:
    0x00002068 ldrb lr, [r1, 1]!                     |     
    0x0000206c strb lr, [ip], 1                      |     
    0x00002070 b 0x203c                              |     goto label_0;
                                                     | }
    ; assembly                           | /* r2dec pseudo code output */
                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/lib/ld-uClibc-1.0.31.so @ 0x31b8 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) sym._dl_protect_relro ()     | void dl_protect_relro (int32_t arg1) {
                                         |     int32_t var_ch;
                                         |     r0 = arg1;
    0x000031b8 push {r4, r7, fp, lr}     |     
    0x000031bc ldr r4, [pc, 0xa0]        |     r4 = *(0x3260);
    0x000031c0 ldr r2, [pc, 0xa0]        |     r2 = *(0x3264);
    0x000031c4 add r4, pc, r4            |     r4 = pc + r4;
    0x000031c8 ldr r1, [r0, 0x100]       |     r1 = *((r0 + 0x100));
    0x000031cc ldr r3, [r0]              |     r3 = *(r0);
    0x000031d0 ldr r2, [r4, r2]          |     r2 = *(0x3260);
    0x000031d4 add r3, r3, r1            |     r3 += r1;
    0x000031d8 ldr r1, [r2]              |     r1 = *(0x3260);
    0x000031dc mov ip, r0                |     
    0x000031e0 rsb r2, r1, 0             |     r2 = r1 - ;
    0x000031e4 ldr r1, [ip, 0x104]       |     r1 = *((ip + 0x104));
    0x000031e8 and r0, r2, r3            |     r0 = r2 & r3;
    0x000031ec add r1, r3, r1            |     r1 = r3 + r1;
    0x000031f0 and r1, r1, r2            |     r1 &= r2;
    0x000031f4 cmp r0, r1                |     
    0x000031f8 add fp, sp, 0xc           |     
    0x000031fc popeq {r4, r7, fp, pc}    |     
    0x00003200 sub r1, r1, r0            |     r1 -= r0;
    0x00003204 mov r2, 1                 |     r2 = 1;
    0x00003208 mov r7, 0x7d              |     r7 = 0x7d;
    0x0000320c svc 0                     |     __asm ("svc 0");
    0x00003210 cmn r0, 0x1000            |     
                                         |     if (r0 < 0x1000) {
    0x00003214 bls 0x3258                |         goto label_0;
                                         |     }
    0x00003218 ldr r3, [pc, 0x4c]        |     r3 = *(0x3268);
    0x0000321c rsb r0, r0, 0             |     r0 -= ;
    0x00003220 ldr r3, [r4, r3]          |     r3 = *((r4 + r3));
    0x00003224 str r0, [r3]              |     *(r3) = r0;
                                         |     do {
    0x00003228 ldr r1, [pc, 0x40]        |         r1 = *(0x326c);
    0x0000322c ldr r2, [ip, 4]           |         r2 = *((ip + 4));
    0x00003230 add r1, pc, r1            |         r1 = pc + r1;
    0x00003234 mov r0, 2                 |         r0 = 2;
    0x00003238 bl 0x1bf4                 |         dl_dprintf ()
    0x0000323c mov r7, 1                 |         r7 = 1;
    0x00003240 mov r0, 0                 |         r0 = 0;
    0x00003244 svc 0                     |         __asm ("svc 0");
    0x00003248 ldr r3, [pc, 0x1c]        |         r3 = *(0x3268);
    0x0000324c rsb r0, r0, 0             |         r0 -= ;
    0x00003250 ldr r3, [r4, r3]          |         r3 = *((r4 + r3));
    0x00003254 str r0, [r3]              |         *(r3) = r0;
                                         | label_0:
    0x00003258 cmp r0, 0                 |         
                                         |         if (r0 < 0) {
    0x0000325c popge {r4, r7, fp, pc}    |             
                                         |         }
    0x00003260 b 0x3228                  |         
                                         |     } while (1);
                                         | }

[*] Function printf used 26 times ld-uClibc-1.0.31.so