[*] Binary protection state of ubiformat

  
  	Partial RELRO  No Canary found   NX disabled  No PIE       No RPATH     No RUNPATH   No Symbols


[*] Function sprintf tear down of ubiformat

    ; 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/usr/sbin/ubiformat @ 0x12f88 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.00012f88 ()                          | void fcn_00012f88 (int32_t arg1, int32_t arg2) {
                                                     |     int32_t var_14h_2;
                                                     |     int32_t var_14h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x00012f88 push {r4, r5, r6, r7, fp, lr}         |     
    0x00012f8c add fp, sp, 0x14                      |     
    0x00012f90 mov r6, r1                            |     r6 = r1;
    0x00012f94 mov r7, r2                            |     r7 = r2;
    0x00012f98 mov r4, r3                            |     r4 = r3;
    0x00012f9c mov r5, r0                            |     r5 = r0;
    0x00012fa0 bl 0x10d90                            |     strlen (r0);
    0x00012fa4 mov r3, r7                            |     r3 = r7;
    0x00012fa8 mov r2, r6                            |     r2 = r6;
    0x00012fac mov r1, r5                            |     r1 = r5;
    0x00012fb0 add r0, r0, 0x6b                      |     r0 += 0x6b;
    0x00012fb4 bic r0, r0, 7                         |     r0 = BIT_MASK (r0, 7);
    0x00012fb8 sub sp, sp, r0                        |     
    0x00012fbc mov r0, sp                            |     r0 = sp;
    0x00012fc0 bl 0x10d60                            |     sprintf (r0, r1, r2)
    0x00012fc4 mov r1, r4                            |     r1 = r4;
    0x00012fc8 mov r0, sp                            |     r0 = sp;
    0x00012fcc bl 0x12ecc                            |     fcn_00012ecc (r0, r1);
    0x00012fd0 sub sp, fp, 0x14                      |     
    0x00012fd4 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/usr/sbin/ubiformat @ 0x1342c */
                                                 | #include <stdint.h>
                                                 |  
                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                 |  
    ; (fcn) fcn.0001342c ()                      | void fcn_0001342c (int32_t arg2, char * s) {
                                                 |     int32_t var_14h_2;
                                                 |     int32_t var_14h;
                                                 |     r1 = arg2;
                                                 |     r0 = s;
    0x0001342c push {r4, r5, r6, r7, fp, lr}     |     
    0x00013430 ldr r4, [r0]                      |     r4 = *(r0);
    0x00013434 add fp, sp, 0x14                  |     
    0x00013438 mov r0, r4                        |     r0 = r4;
    0x0001343c mov r6, r3                        |     r6 = r3;
    0x00013440 mov r7, r1                        |     r7 = r1;
    0x00013444 mov r5, r2                        |     r5 = r2;
    0x00013448 bl 0x10d90                        |     strlen (r0);
    0x0001344c mov r2, r7                        |     r2 = r7;
    0x00013450 mov r1, r4                        |     r1 = r4;
    0x00013454 add r0, r0, 0x39                  |     r0 += 0x39;
    0x00013458 bic r0, r0, 7                     |     r0 = BIT_MASK (r0, 7);
    0x0001345c sub sp, sp, r0                    |     
    0x00013460 mov r0, sp                        |     r0 = sp;
    0x00013464 bl 0x10d60                        |     sprintf (r0, r1, r2)
    0x00013468 mov r2, r6                        |     r2 = r6;
    0x0001346c mov r1, r5                        |     r1 = r5;
    0x00013470 mov r0, sp                        |     r0 = sp;
    0x00013474 bl 0x13354                        |     fcn_00013354 (r0, r1);
    0x00013478 sub sp, fp, 0x14                  |     
    0x0001347c 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/usr/sbin/ubiformat @ 0x13e00 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.00013e00 ()                                  | void fcn_00013e00 (int32_t arg2, char * s) {
                                                             |     int32_t var_b4h;
                                                             |     int32_t var_ach;
                                                             |     int32_t var_a8h;
                                                             |     int32_t var_a4h;
                                                             |     int32_t var_a0h;
                                                             |     int32_t var_9ch;
                                                             |     int32_t var_8ch;
                                                             |     int32_t var_7ch;
                                                             |     int32_t var_6ch;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_sp_b4h;
                                                             |     int32_t var_sp_6ch;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r1 = arg2;
                                                             |     r0 = s;
    0x00013e00 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00013e04 add fp, sp, 0x20                              |     
    0x00013e08 sub sp, sp, 0x9c                              |     
    0x00013e0c mov r6, r0                                    |     r6 = r0;
    0x00013e10 ldr r0, [r0, 0x40]                            |     r0 = *((r0 + 0x40));
    0x00013e14 mov r5, r1                                    |     r5 = r1;
    0x00013e18 bl 0x10d90                                    |     strlen (r0);
    0x00013e1c sub r1, fp, 0x8c                              |     r1 -= var_8ch;
    0x00013e20 add r0, r0, 0x6b                              |     r0 += 0x6b;
    0x00013e24 bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x00013e28 sub sp, sp, r0                                |     
    0x00013e2c mov r0, r5                                    |     r0 = r5;
    0x00013e30 bl 0x10bd4                                    |     r0 = stat64 ();
    0x00013e34 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00013e38 beq 0x13e90                                   |         goto label_5;
                                                             |     }
    0x00013e3c bl 0x10d78                                    |     errno_location ();
    0x00013e40 ldr r6, [pc, 0x1e8]                           |     r6 = *(0x1402c);
    0x00013e44 mov r3, r5                                    |     r3 = r5;
    0x00013e48 ldr r2, [pc, 0x1e4]                           |     r2 = stderr;
    0x00013e4c ldr r1, [pc, 0x1e4]                           |     r1 = "libubi";
    0x00013e50 ldr r4, [r0]                                  |     r4 = *(r0);
    0x00013e54 ldr r0, [r6]                                  |     r0 = *(0x1402c);
    0x00013e58 bl 0x10c7c                                    |     fprintf (r0, "libubi", r2, r3, r4, r5, r6);
    0x00013e5c mov r0, r4                                    |     r0 = r4;
    0x00013e60 ldr r5, [r6]                                  |     r5 = *(0x1402c);
    0x00013e64 bl 0x10bc8                                    |     strerror (r0);
    0x00013e68 str r4, [sp]                                  |     *(sp) = r4;
    0x00013e6c ldr r3, [pc, 0x1c8]                           |     r3 = "%s: error!: cannot get information about \"%s\"\n";
    0x00013e70 mov r2, 8                                     |     r2 = 8;
    0x00013e74 ldr r1, [pc, 0x1c4]                           |     r1 = *(0x1403c);
    0x00013e78 str r0, [sp, 4]                               |     var_4h = r0;
    0x00013e7c mov r0, r5                                    |     r0 = r5;
    0x00013e80 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: cannot get information about \"%s\"\n", r4);
                                                             |     do {
                                                             | label_0:
    0x00013e84 mvn r0, 0                                     |         r0 = ~0;
                                                             | label_4:
    0x00013e88 sub sp, fp, 0x20                              |         
    0x00013e8c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             | label_5:
    0x00013e90 ldr r3, [fp, -0x7c]                           |         r3 = var_7ch;
    0x00013e94 and r3, r3, 0xf000                            |         r3 &= 0xf000;
    0x00013e98 cmp r3, 0x2000                                |         
                                                             |         if (r3 == 0x2000) {
    0x00013e9c beq 0x13ec8                                   |             goto label_6;
                                                             |         }
    0x00013ea0 ldr r0, [pc, 0x188]                           |         
    0x00013ea4 mov r3, r5                                    |         r3 = r5;
    0x00013ea8 ldr r2, [pc, 0x184]                           |         r2 = stderr;
    0x00013eac ldr r1, [pc, 0x190]                           |         r1 = "_serror__d___s_";
    0x00013eb0 ldr r0, [r0]                                  |         r0 = *(0x1402c);
    0x00013eb4 bl 0x10c7c                                    |         r0 = fprintf (r0, "_serror__d___s_", r2, r3);
    0x00013eb8 bl 0x10d78                                    |         errno_location ();
    0x00013ebc mov r3, 0x16                                  |         r3 = 0x16;
                                                             | label_1:
    0x00013ec0 str r3, [r0]                                  |         *(r0) = r3;
    0x00013ec4 b 0x13e84                                     |         
                                                             |     } while (1);
                                                             | label_6:
    0x00013ec8 ldrd r2, r3, [fp, -0x6c]                      |     __asm ("ldrd r2, r3, [var_6ch]");
    0x00013ecc mov r1, r3                                    |     r1 = r3;
    0x00013ed0 mov r0, r2                                    |     r0 = r2;
    0x00013ed4 strd r2, r3, [fp, -0xb4]                      |     __asm ("strd r2, r3, [var_b4h]");
    0x00013ed8 bl 0x10c04                                    |     gnu_dev_major ();
    0x00013edc ldrd r2, r3, [fp, -0xb4]                      |     __asm ("ldrd r2, r3, [var_b4h]");
    0x00013ee0 mov r1, r3                                    |     r1 = r3;
    0x00013ee4 mov sb, r0                                    |     sb = r0;
    0x00013ee8 mov r0, r2                                    |     r0 = r2;
    0x00013eec bl 0x10c4c                                    |     gnu_dev_minor ();
    0x00013ef0 sub r1, fp, 0xa4                              |     r1 -= var_a4h;
    0x00013ef4 mov r7, r0                                    |     r7 = r0;
    0x00013ef8 mov r0, r6                                    |     r0 = r6;
    0x00013efc bl 0x13ad0                                    |     r0 = fcn_00013ad0 (r0, r1);
    0x00013f00 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00013f04 addeq r8, sp, 8                               |         r8 += var_b4h;
                                                             |     }
                                                             |     if (r0 != 0) {
    0x00013f08 ldreq r4, [fp, -0xa0]                         |         r4 = var_a0h;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x00013f0c addeq sl, r6, 0x18                            |         sl = r6 + 0x18;
                                                             |         goto label_7;
                                                             |     }
                                                             |     if (r0 != 0) {
                                                             | label_7:
    0x00013f10 bne 0x13e84                                   |         goto label_0;
                                                             |     }
                                                             |     do {
    0x00013f14 ldr r3, [fp, -0x9c]                           |         r3 = var_9ch;
    0x00013f18 cmp r4, r3                                    |         
                                                             |         if (r4 > r3) {
    0x00013f1c bgt 0x13f94                                   |             goto label_8;
                                                             |         }
    0x00013f20 sub r3, fp, 0xa8                              |         r3 -= var_a8h;
    0x00013f24 sub r2, fp, 0xac                              |         r2 -= var_ach;
    0x00013f28 mov r1, r4                                    |         r1 = r4;
    0x00013f2c mov r0, sl                                    |         r0 = sl;
    0x00013f30 bl 0x1342c                                    |         r0 = fcn_0001342c (r0, r1);
    0x00013f34 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00013f38 beq 0x13f88                                   |             goto label_9;
                                                             |         }
    0x00013f3c bl 0x10d78                                    |         r0 = errno_location ();
    0x00013f40 ldr r3, [r0]                                  |         r3 = *(r0);
    0x00013f44 cmp r3, 2                                     |         
                                                             |         if (r3 != 2) {
    0x00013f48 bne 0x13f54                                   |             goto label_10;
                                                             |         }
                                                             | label_2:
    0x00013f4c add r4, r4, 1                                 |         r4++;
    0x00013f50 b 0x13f14                                     |         
                                                             |     } while (1);
                                                             | label_10:
    0x00013f54 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00013f58 bne 0x13e84                                   |         goto label_0;
                                                             |     }
                                                             | label_3:
    0x00013f5c ldr r0, [pc, 0xcc]                            |     
    0x00013f60 mov r3, r5                                    |     r3 = r5;
    0x00013f64 str r7, [sp, 4]                               |     var_4h = r7;
    0x00013f68 str sb, [sp]                                  |     *(sp) = sb;
    0x00013f6c ldr r2, [pc, 0xc0]                            |     r2 = stderr;
    0x00013f70 ldr r1, [pc, 0xd0]                            |     r1 = "%s: error!: \"%s\" is not a character device\n";
    0x00013f74 ldr r0, [r0]                                  |     r0 = *(0x1402c);
    0x00013f78 bl 0x10c7c                                    |     r0 = fprintf (r0, "%s: error!: \"%s\" is not a character device\n", r2, r3);
    0x00013f7c bl 0x10d78                                    |     errno_location ();
    0x00013f80 mov r3, 0x13                                  |     r3 = 0x13;
    0x00013f84 b 0x13ec0                                     |     goto label_1;
                                                             | label_9:
    0x00013f88 ldr r3, [fp, -0xac]                           |     r3 = var_ach;
    0x00013f8c cmp r3, sb                                    |     
                                                             |     if (r3 != sb) {
    0x00013f90 bne 0x13f4c                                   |         goto label_2;
                                                             |     }
                                                             | label_8:
    0x00013f94 ldr r3, [fp, -0x9c]                           |     r3 = var_9ch;
    0x00013f98 cmp r4, r3                                    |     
                                                             |     if (r4 > r3) {
    0x00013f9c bgt 0x13f5c                                   |         goto label_3;
                                                             |     }
    0x00013fa0 cmp r7, 0                                     |     
                                                             |     if (r7 == 0) {
    0x00013fa4 moveq r0, 1                                   |         r0 = 1;
                                                             |         goto label_11;
                                                             |     }
                                                             |     if (r7 == 0) {
                                                             | label_11:
    0x00013fa8 beq 0x13e88                                   |         goto label_4;
                                                             |     }
    0x00013fac sub r3, r7, 1                                 |     r3 = r7 - 1;
    0x00013fb0 mov r2, r4                                    |     r2 = r4;
    0x00013fb4 ldr r1, [r6, 0x40]                            |     r1 = *((r6 + 0x40));
    0x00013fb8 mov r0, r8                                    |     r0 = r8;
    0x00013fbc bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x00013fc0 mov r1, 0                                     |     r1 = 0;
    0x00013fc4 mov r0, r8                                    |     r0 = r8;
    0x00013fc8 bl 0x10d30                                    |     r0 = open64 ();
    0x00013fcc cmn r0, 1                                     |     
                                                             |     if (r0 == 1) {
    0x00013fd0 beq 0x13f5c                                   |         goto label_3;
                                                             |     }
    0x00013fd4 bl 0x10dcc                                    |     r0 = close (r0);
    0x00013fd8 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00013fdc beq 0x14028                                   |         
    0x00013fe0 bl 0x10d78                                    |         errno_location ();
    0x00013fe4 ldr r5, [pc, 0x44]                            |         
    0x00013fe8 mov r3, r8                                    |         r3 = r8;
    0x00013fec ldr r2, [pc, 0x40]                            |         r2 = stderr;
    0x00013ff0 ldr r1, [pc, 0x54]                            |         r1 = "_s:_error_:___s__has_major:minor__d:_d__but_this_does_not_correspond_to_any_existing_UBI_device_or_volume";
    0x00013ff4 ldr r4, [r0]                                  |         r4 = *(r0);
    0x00013ff8 ldr r0, [r5]                                  |         r0 = *(0x1402c);
    0x00013ffc bl 0x10c7c                                    |         fprintf (r0, "_s:_error_:___s__has_major:minor__d:_d__but_this_does_not_correspond_to_any_existing_UBI_device_or_volume", r2, r3, r4, r5);
    0x00014000 mov r0, r4                                    |         r0 = r4;
    0x00014004 ldr r5, [r5]                                  |         r5 = *(0x1402c);
    0x00014008 bl 0x10bc8                                    |         strerror (r0);
    0x0001400c str r4, [sp]                                  |         *(sp) = r4;
    0x00014010 ldr r3, [pc, 0x24]                            |         r3 = "%s: error!: cannot get information about \"%s\"\n";
    0x00014014 mov r2, 8                                     |         r2 = 8;
    0x00014018 ldr r1, [pc, 0x20]                            |         r1 = *(0x1403c);
    0x0001401c str r0, [sp, 4]                               |         var_4h = r0;
    0x00014020 mov r0, r5                                    |         r0 = r5;
    0x00014024 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot get information about \"%s\"\n", r4);
                                                             |     }
    0x00014028 mov r0, 2                                     |     r0 = 2;
    0x0001402c b 0x13e88                                     |     goto label_4;
                                                             | }
    ; 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/usr/sbin/ubiformat @ 0x14408 */
                                         | #include <stdint.h>
                                         |  
                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                         |  
    ; (fcn) fcn.00014408 ()              | void fcn_00014408 (int32_t arg2, char * s) {
                                         |     int32_t var_74h;
                                         |     int32_t var_ch_2;
                                         |     int32_t var_ch;
                                         |     r1 = arg2;
                                         |     r0 = s;
    0x00014408 push {r4, r5, fp, lr}     |     
    0x0001440c add fp, sp, 0xc           |     
    0x00014410 sub sp, sp, 0x68          |     
    0x00014414 ldr r4, [r0, 0x10]        |     r4 = *((r0 + 0x10));
    0x00014418 mov r5, r1                |     r5 = r1;
    0x0001441c mov r0, r4                |     r0 = r4;
    0x00014420 bl 0x10d90                |     strlen (r0);
    0x00014424 mov r2, r5                |     r2 = r5;
    0x00014428 mov r1, r4                |     r1 = r4;
    0x0001442c add r0, r0, 0x39          |     r0 += 0x39;
    0x00014430 bic r0, r0, 7             |     r0 = BIT_MASK (r0, 7);
    0x00014434 sub sp, sp, r0            |     
    0x00014438 mov r0, sp                |     r0 = sp;
    0x0001443c bl 0x10d60                |     sprintf (r0, r1, r2)
    0x00014440 sub r1, fp, 0x74          |     r1 -= var_74h;
    0x00014444 mov r0, sp                |     r0 = sp;
    0x00014448 bl 0x10bd4                |     r0 = stat64 ();
    0x0001444c clz r0, r0                |     r0 &= r0;
    0x00014450 lsr r0, r0, 5             |     r0 >>= 5;
    0x00014454 sub sp, fp, 0xc           |     
    0x00014458 pop {r4, r5, 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/usr/sbin/ubiformat @ 0x1445c */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.0001445c ()                                  | void fcn_0001445c (int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_128h;
                                                             |     int32_t var_124h;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     char * s;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0001445c push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00014460 add sl, r2, 4                                 |     sl = r2 + 4;
    0x00014464 add fp, sp, 0x20                              |     
    0x00014468 sub sp, sp, 0x114                             |     
    0x0001446c mov r6, r1                                    |     r6 = r1;
    0x00014470 mov r5, r0                                    |     r5 = r0;
    0x00014474 mov r4, r2                                    |     r4 = r2;
    0x00014478 mov r1, 0                                     |     r1 = 0;
    0x0001447c mov r2, 0x54                                  |     r2 = 0x54;
    0x00014480 mov r0, sl                                    |     r0 = sl;
    0x00014484 bl 0x10d18                                    |     memset (r0, r1, r2);
    0x00014488 str r6, [r4]                                  |     *(r4) = r6;
    0x0001448c mov r1, r6                                    |     r1 = r6;
    0x00014490 mov r0, r5                                    |     r0 = r5;
    0x00014494 bl 0x14408                                    |     r0 = fcn_00014408 (r0, r1);
    0x00014498 cmp r0, 0                                     |     
    0x0001449c bne 0x144a8                                   |     
                                                             |     while (r8 == r0) {
                                                             | label_0:
    0x000144a0 mvn r0, 0                                     |         r0 = ~0;
    0x000144a4 b 0x1476c                                     |         goto label_3;
    0x000144a8 ldr r0, [r5, 0xc]                             |         r0 = *((r5 + 0xc));
    0x000144ac bl 0x10d3c                                    |         r0 = opendir ();
    0x000144b0 subs r8, r0, 0                                |         r8 = r0 - 0;
    0x000144b4 beq 0x144a0                                   |         
                                                             |     }
    0x000144b8 mvn r3, 0x80000000                            |     r3 = ~0x80000000;
    0x000144bc str r3, [r4, 0xc]                             |     *((r4 + 0xc)) = r3;
    0x000144c0 bl 0x10d78                                    |     r0 = errno_location ();
    0x000144c4 mov sb, r0                                    |     sb = r0;
                                                             |     do {
                                                             | label_1:
    0x000144c8 mov r3, 0                                     |         r3 = 0;
    0x000144cc str r3, [sb]                                  |         *(sb) = r3;
    0x000144d0 mov r0, r8                                    |         r0 = r8;
    0x000144d4 bl 0x10cd0                                    |         r0 = readdir64 ();
    0x000144d8 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x000144dc beq 0x14578                                   |             goto label_4;
                                                             |         }
    0x000144e0 add r7, r0, 0x13                              |         r7 = r0 + 0x13;
    0x000144e4 mov r0, r7                                    |         r0 = r7;
    0x000144e8 bl 0x10d90                                    |         r0 = strlen (r0);
    0x000144ec cmp r0, 0xfe                                  |         
                                                             |         if (r0 >= 0xfe) {
    0x000144f0 bls 0x1451c                                   |             
    0x000144f4 ldr r0, [pc, 0x278]                           |             
    0x000144f8 str r7, [sp]                                  |             *(sp) = r7;
    0x000144fc ldr r2, [pc, 0x274]                           |             r2 = stderr;
    0x00014500 ldr r3, [r5, 0xc]                             |             r3 = *((r5 + 0xc));
    0x00014504 ldr r1, [pc, 0x270]                           |             r1 = "libubi";
    0x00014508 ldr r0, [r0]                                  |             r0 = *(0x14770);
    0x0001450c bl 0x10c7c                                    |             fprintf (r0, "libubi", r2, r3);
                                                             | label_2:
    0x00014510 mov r0, r8                                    |             r0 = r8;
    0x00014514 bl 0x10db4                                    |             closedir ();
    0x00014518 b 0x144a0                                     |             goto label_0;
                                                             |         }
    0x0001451c sub r3, fp, 0x124                             |         r3 -= var_124h;
    0x00014520 str r3, [sp]                                  |         *(sp) = r3;
    0x00014524 sub r2, fp, 0x128                             |         r2 -= var_128h;
    0x00014528 sub r3, fp, 0x12c                             |         r3 -= s;
    0x0001452c ldr r1, [pc, 0x24c]                           |         r1 = "_s:_error_:_invalid_entry_in__s:___s_";
    0x00014530 mov r0, r7                                    |         r0 = r7;
    0x00014534 bl 0x10ce8                                    |         r0 = sscanf (r0, "_s:_error_:_invalid_entry_in__s:___s_", r2);
    0x00014538 cmp r0, 2                                     |         
    0x0001453c bne 0x144c8                                   |         
                                                             |     } while (r0 != 2);
    0x00014540 ldr r3, [fp, -0x128]                          |     r3 = var_128h;
    0x00014544 cmp r3, r6                                    |     
                                                             |     if (r3 != r6) {
    0x00014548 bne 0x144c8                                   |         goto label_1;
                                                             |     }
    0x0001454c ldr r3, [r4, 8]                               |     r3 = *((r4 + 8));
    0x00014550 ldr r2, [r4, 0x10]                            |     r2 = *((r4 + 0x10));
    0x00014554 add r3, r3, 1                                 |     r3++;
    0x00014558 str r3, [r4, 8]                               |     *((r4 + 8)) = r3;
    0x0001455c ldr r3, [fp, -0x12c]                          |     r3 = s;
    0x00014560 cmp r2, r3                                    |     
    0x00014564 ldr r2, [r4, 0xc]                             |     r2 = *((r4 + 0xc));
                                                             |     if (r2 >= r3) {
    0x00014568 strlt r3, [r4, 0x10]                          |         *((r4 + 0x10)) = r3;
                                                             |     }
    0x0001456c cmp r3, r2                                    |     
                                                             |     if (r3 >= r2) {
    0x00014570 strlt r3, [r4, 0xc]                           |         *((r4 + 0xc)) = r3;
                                                             |     }
    0x00014574 b 0x144c8                                     |     goto label_1;
                                                             | label_4:
    0x00014578 ldr r7, [sb]                                  |     r7 = *(sb);
    0x0001457c cmp r7, 0                                     |     
                                                             |     if (r7 != 0) {
    0x00014580 beq 0x145c8                                   |         
    0x00014584 ldr r4, [pc, 0x1e8]                           |         
    0x00014588 ldr r3, [r5, 0xc]                             |         r3 = *((r5 + 0xc));
    0x0001458c ldr r2, [pc, 0x1e4]                           |         r2 = stderr;
    0x00014590 ldr r1, [pc, 0x1ec]                           |         r1 = "ubi%d_%d%s";
    0x00014594 ldr r0, [r4]                                  |         r0 = *(0x14770);
    0x00014598 bl 0x10c7c                                    |         fprintf (r0, "ubi%d_%d%s", r2, r3, r4);
    0x0001459c mov r0, r7                                    |         r0 = r7;
    0x000145a0 ldr r4, [r4]                                  |         r4 = *(0x14770);
    0x000145a4 bl 0x10bc8                                    |         strerror (r0);
    0x000145a8 str r7, [sp]                                  |         *(sp) = r7;
    0x000145ac ldr r3, [pc, 0x1d4]                           |         r3 = "%s: error!: readdir failed on \"%s\"\n";
    0x000145b0 mov r2, 8                                     |         r2 = 8;
    0x000145b4 ldr r1, [pc, 0x1d0]                           |         r1 = *(0x14788);
    0x000145b8 str r0, [sp, 4]                               |         var_4h = r0;
    0x000145bc mov r0, r4                                    |         r0 = r4;
    0x000145c0 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: readdir failed on \"%s\"\n");
    0x000145c4 b 0x14510                                     |         goto label_2;
                                                             |     }
    0x000145c8 mov r0, r8                                    |     r0 = r8;
    0x000145cc bl 0x10db4                                    |     r0 = closedir ();
    0x000145d0 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000145d4 beq 0x14620                                   |         
    0x000145d8 ldr r6, [pc, 0x194]                           |         r6 = *(0x14770);
    0x000145dc ldr r4, [sb]                                  |         r4 = *(sb);
    0x000145e0 ldr r3, [r5, 0xc]                             |         r3 = *((r5 + 0xc));
    0x000145e4 ldr r2, [pc, 0x18c]                           |         r2 = stderr;
    0x000145e8 ldr r1, [pc, 0x1a0]                           |         r1 = "_serror__d___s_";
    0x000145ec ldr r0, [r6]                                  |         r0 = *(0x14770);
    0x000145f0 bl 0x10c7c                                    |         fprintf (r0, "_serror__d___s_", r2, r3, r4, r5, r6);
    0x000145f4 mov r0, r4                                    |         r0 = r4;
    0x000145f8 ldr r5, [r6]                                  |         r5 = *(0x14770);
    0x000145fc bl 0x10bc8                                    |         strerror (r0);
    0x00014600 str r4, [sp]                                  |         *(sp) = r4;
    0x00014604 ldr r3, [pc, 0x17c]                           |         r3 = "%s: error!: readdir failed on \"%s\"\n";
    0x00014608 mov r2, 8                                     |         r2 = 8;
    0x0001460c ldr r1, [pc, 0x178]                           |         r1 = *(0x14788);
    0x00014610 str r0, [sp, 4]                               |         var_4h = r0;
    0x00014614 mov r0, r5                                    |         r0 = r5;
    0x00014618 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: readdir failed on \"%s\"\n", r4);
    0x0001461c b 0x144a0                                     |         goto label_0;
                                                             |     }
    0x00014620 ldr r3, [r4, 0xc]                             |     r3 = *((r4 + 0xc));
    0x00014624 add r2, r4, 0x14                              |     r2 = r4 + 0x14;
    0x00014628 cmn r3, 0x80000001                            |     
                                                             |     if (r3 != 0x80000001) {
    0x0001462c streq r0, [r4, 0xc]                           |         *((r4 + 0xc)) = r0;
                                                             |     }
    0x00014630 add r3, r4, 0x18                              |     r3 = r4 + 0x18;
    0x00014634 mov r1, r6                                    |     r1 = r6;
    0x00014638 add r0, r5, 0x18                              |     r0 = r5 + 0x18;
    0x0001463c bl 0x1342c                                    |     r0 = fcn_0001342c (r0, r1);
    0x00014640 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00014644 bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x00014648 mov r2, sl                                    |     r2 = sl;
    0x0001464c mov r1, r6                                    |     r1 = r6;
    0x00014650 ldr r0, [r5, 0x3c]                            |     r0 = *((r5 + 0x3c));
    0x00014654 bl 0x12f40                                    |     r0 = fcn_00012f40 (r0, r1);
    0x00014658 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001465c bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x00014660 add r2, r4, 0x20                              |     r2 = r4 + 0x20;
    0x00014664 mov r1, r6                                    |     r1 = r6;
    0x00014668 ldr r0, [r5, 0x1c]                            |     r0 = *((r5 + 0x1c));
    0x0001466c bl 0x12f40                                    |     r0 = fcn_00012f40 (r0, r1);
    0x00014670 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00014674 bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x00014678 add r2, r4, 0x1c                              |     r2 = r4 + 0x1c;
    0x0001467c mov r1, r6                                    |     r1 = r6;
    0x00014680 ldr r0, [r5, 0x20]                            |     r0 = *((r5 + 0x20));
    0x00014684 bl 0x12f40                                    |     r0 = fcn_00012f40 (r0, r1);
    0x00014688 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001468c bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x00014690 add r2, r4, 0x38                              |     r2 = r4 + 0x38;
    0x00014694 mov r1, r6                                    |     r1 = r6;
    0x00014698 ldr r0, [r5, 0x24]                            |     r0 = *((r5 + 0x24));
    0x0001469c bl 0x12f40                                    |     r0 = fcn_00012f40 (r0, r1);
    0x000146a0 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000146a4 bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x000146a8 add r2, r4, 0x3c                              |     r2 = r4 + 0x3c;
    0x000146ac mov r1, r6                                    |     r1 = r6;
    0x000146b0 ldr r0, [r5, 0x28]                            |     r0 = *((r5 + 0x28));
    0x000146b4 bl 0x12f40                                    |     r0 = fcn_00012f40 (r0, r1);
    0x000146b8 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000146bc bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x000146c0 add r2, r4, 0x48                              |     r2 = r4 + 0x48;
    0x000146c4 mov r1, r6                                    |     r1 = r6;
    0x000146c8 ldr r0, [r5, 0x30]                            |     r0 = *((r5 + 0x30));
    0x000146cc bl 0x12f40                                    |     r0 = fcn_00012f40 (r0, r1);
    0x000146d0 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000146d4 bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x000146d8 ldr r8, [r5, 0x2c]                            |     r8 = *((r5 + 0x2c));
    0x000146dc mov sb, sp                                    |     sb = sp;
    0x000146e0 mov r0, r8                                    |     r0 = r8;
    0x000146e4 bl 0x10d90                                    |     strlen (r0);
    0x000146e8 mov r2, r6                                    |     r2 = r6;
    0x000146ec mov r1, r8                                    |     r1 = r8;
    0x000146f0 add r0, r0, 0x39                              |     r0 += 0x39;
    0x000146f4 bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x000146f8 sub sp, sp, r0                                |     
    0x000146fc add r7, sp, 8                                 |     r7 += s;
    0x00014700 mov r0, r7                                    |     r0 = r7;
    0x00014704 bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x00014708 add r1, r4, 0x40                              |     r1 = r4 + 0x40;
    0x0001470c mov r0, r7                                    |     r0 = r7;
    0x00014710 bl 0x12d1c                                    |     fcn_00012d1c (r0, r1);
    0x00014714 mov sp, sb                                    |     
    0x00014718 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001471c bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x00014720 add r2, r4, 0x4c                              |     r2 = r4 + 0x4c;
    0x00014724 mov r1, r6                                    |     r1 = r6;
    0x00014728 ldr r0, [r5, 0x34]                            |     r0 = *((r5 + 0x34));
    0x0001472c bl 0x12f40                                    |     r0 = fcn_00012f40 (r0, r1);
    0x00014730 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00014734 bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x00014738 add r2, r4, 0x50                              |     r2 = r4 + 0x50;
    0x0001473c mov r1, r6                                    |     r1 = r6;
    0x00014740 ldr r0, [r5, 0x38]                            |     r0 = *((r5 + 0x38));
    0x00014744 bl 0x12f40                                    |     r0 = fcn_00012f40 (r0, r1);
    0x00014748 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001474c bne 0x144a0                                   |         goto label_0;
                                                             |     }
    0x00014750 ldr r3, [r4, 0x3c]                            |     r3 = *((r4 + 0x3c));
    0x00014754 ldr r2, [r4, 0x20]                            |     r2 = *((r4 + 0x20));
    0x00014758 smull r6, r7, r2, r3                          |     r6:r7 = r2 * r3;
    0x0001475c ldr r2, [r4, 0x1c]                            |     r2 = *((r4 + 0x1c));
    0x00014760 strd r6, r7, [r4, 0x30]                       |     __asm ("strd r6, r7, [r4, 0x30]");
    0x00014764 smull r6, r7, r2, r3                          |     r6:r7 = r2 * r3;
    0x00014768 strd r6, r7, [r4, 0x28]                       |     __asm ("strd r6, r7, [r4, 0x28]");
                                                             | label_3:
    0x0001476c sub sp, fp, 0x20                              |     
    0x00014770 pop {r4, r5, r6, r7, r8, sb, sl, 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/usr/sbin/ubiformat @ 0x14984 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.00014984 ()                                  | void fcn_00014984 (int32_t arg1, int32_t arg2) {
                                                             |     char * s1;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00014984 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00014988 add sb, r3, 8                                 |     sb = r3 + 8;
    0x0001498c add fp, sp, 0x20                              |     
    0x00014990 sub sp, sp, 0x3c                              |     
    0x00014994 mov r5, r1                                    |     r5 = r1;
    0x00014998 mov r6, r2                                    |     r6 = r2;
    0x0001499c mov r1, 0                                     |     r1 = 0;
    0x000149a0 mov r2, 0xb0                                  |     r2 = 0xb0;
    0x000149a4 mov r7, r0                                    |     r7 = r0;
    0x000149a8 mov r0, sb                                    |     r0 = sb;
    0x000149ac mov r4, r3                                    |     r4 = r3;
    0x000149b0 bl 0x10d18                                    |     memset (r0, r1, r2);
    0x000149b4 ldr sl, [r7, 0x48]                            |     sl = *((r7 + 0x48));
    0x000149b8 stm r4, {r5, r6}                              |     *(r4) = r5;
                                                             |     *((r4 + 4)) = r6;
    0x000149bc mov r0, sl                                    |     r0 = sl;
    0x000149c0 bl 0x10d90                                    |     strlen (r0);
    0x000149c4 mov r8, sp                                    |     r8 = sp;
    0x000149c8 mov r3, r6                                    |     r3 = r6;
    0x000149cc mov r2, r5                                    |     r2 = r5;
    0x000149d0 mov r1, sl                                    |     r1 = sl;
    0x000149d4 add r0, r0, 0x6b                              |     r0 += 0x6b;
    0x000149d8 bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x000149dc sub sp, sp, r0                                |     
    0x000149e0 mov r0, sp                                    |     r0 = sp;
    0x000149e4 bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x000149e8 mov r0, sp                                    |     r0 = sp;
    0x000149ec add r2, r4, 0xc                               |     r2 = r4 + 0xc;
    0x000149f0 mov r1, sb                                    |     r1 = sb;
    0x000149f4 bl 0x13354                                    |     fcn_00013354 (r0, r1);
    0x000149f8 mov sp, r8                                    |     
    0x000149fc cmp r0, 0                                     |     
    0x00014a00 beq 0x14a14                                   |     
                                                             |     while (r8 < r0) {
                                                             | label_0:
    0x00014a04 mvn r8, 0                                     |         r8 = ~0;
                                                             | label_1:
    0x00014a08 mov r0, r8                                    |         r0 = r8;
    0x00014a0c sub sp, fp, 0x20                              |         
    0x00014a10 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
    0x00014a14 ldr sb, [r7, 0x44]                            |         sb = *((r7 + 0x44));
    0x00014a18 mov r0, sb                                    |         r0 = sb;
    0x00014a1c bl 0x10d90                                    |         strlen (r0);
    0x00014a20 mov r3, r6                                    |         r3 = r6;
    0x00014a24 mov r2, r5                                    |         r2 = r5;
    0x00014a28 mov r1, sb                                    |         r1 = sb;
    0x00014a2c add r0, r0, 0x6b                              |         r0 += 0x6b;
    0x00014a30 bic r0, r0, 7                                 |         r0 = BIT_MASK (r0, 7);
    0x00014a34 sub sp, sp, r0                                |         
    0x00014a38 mov r0, sp                                    |         r0 = sp;
    0x00014a3c bl 0x10d60                                    |         sprintf (r0, r1, r2)
    0x00014a40 mov r0, sp                                    |         r0 = sp;
    0x00014a44 mov r2, 0x32                                  |         r2 = 0x32;
    0x00014a48 sub r1, fp, 0x58                              |         r1 -= s1;
    0x00014a4c bl 0x12fd8                                    |         fcn_00012fd8 (r0, r1);
    0x00014a50 mov sp, r8                                    |         
    0x00014a54 subs r8, r0, 0                                |         r8 = r0 - 0;
    0x00014a58 blt 0x14a04                                   |         
                                                             |     }
    0x00014a5c mov r2, r8                                    |     r2 = r8;
    0x00014a60 ldr r1, [pc, 0x174]                           |     r1 = *(0x14bd8);
    0x00014a64 sub r0, fp, 0x58                              |     r0 -= s1;
    0x00014a68 bl 0x10cb8                                    |     r0 = strncmp (r0, r1, r2);
    0x00014a6c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00014a70 moveq r3, 4                                   |         r3 = 4;
                                                             |     }
                                                             |     if (r0 != 0) {
    0x00014a74 beq 0x14a94                                   |         
    0x00014a78 mov r2, r8                                    |         r2 = r8;
    0x00014a7c ldr r1, [pc, 0x15c]                           |         r1 = "static\n";
    0x00014a80 sub r0, fp, 0x58                              |         r0 -= s1;
    0x00014a84 bl 0x10cb8                                    |         r0 = strncmp (r0, "static\n", r2);
    0x00014a88 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x00014a8c bne 0x14bb4                                   |             goto label_2;
                                                             |         }
    0x00014a90 mov r3, 3                                     |         r3 = 3;
                                                             |     }
    0x00014a94 str r3, [r4, 0x10]                            |     *((r4 + 0x10)) = r3;
    0x00014a98 mov r2, r6                                    |     r2 = r6;
    0x00014a9c add r3, r4, 0x14                              |     r3 = r4 + 0x14;
    0x00014aa0 mov r1, r5                                    |     r1 = r5;
    0x00014aa4 ldr r0, [r7, 0x4c]                            |     r0 = *((r7 + 0x4c));
    0x00014aa8 bl 0x12f88                                    |     r0 = fcn_00012f88 (r0, r1);
    0x00014aac cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00014ab0 bne 0x14a04                                   |         goto label_0;
                                                             |     }
    0x00014ab4 ldr r8, [r7, 0x50]                            |     r8 = *((r7 + 0x50));
    0x00014ab8 mov sb, sp                                    |     sb = sp;
    0x00014abc mov r0, r8                                    |     r0 = r8;
    0x00014ac0 bl 0x10d90                                    |     strlen (r0);
    0x00014ac4 mov r3, r6                                    |     r3 = r6;
    0x00014ac8 mov r2, r5                                    |     r2 = r5;
    0x00014acc mov r1, r8                                    |     r1 = r8;
    0x00014ad0 add r0, r0, 0x6b                              |     r0 += 0x6b;
    0x00014ad4 bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x00014ad8 sub sp, sp, r0                                |     
    0x00014adc mov r0, sp                                    |     r0 = sp;
    0x00014ae0 bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x00014ae4 mov r0, sp                                    |     r0 = sp;
    0x00014ae8 add r1, r4, 0x18                              |     r1 = r4 + 0x18;
    0x00014aec bl 0x12d1c                                    |     fcn_00012d1c (r0, r1);
    0x00014af0 mov sp, sb                                    |     
    0x00014af4 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00014af8 bne 0x14a04                                   |         goto label_0;
                                                             |     }
    0x00014afc add r3, r4, 0x28                              |     r3 = r4 + 0x28;
    0x00014b00 mov r2, r6                                    |     r2 = r6;
    0x00014b04 mov r1, r5                                    |     r1 = r5;
    0x00014b08 ldr r0, [r7, 0x54]                            |     r0 = *((r7 + 0x54));
    0x00014b0c bl 0x12f88                                    |     r0 = fcn_00012f88 (r0, r1);
    0x00014b10 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00014b14 bne 0x14a04                                   |         goto label_0;
                                                             |     }
    0x00014b18 add r3, r4, 0x2c                              |     r3 = r4 + 0x2c;
    0x00014b1c mov r2, r6                                    |     r2 = r6;
    0x00014b20 mov r1, r5                                    |     r1 = r5;
    0x00014b24 ldr r0, [r7, 0x58]                            |     r0 = *((r7 + 0x58));
    0x00014b28 bl 0x12f88                                    |     r0 = fcn_00012f88 (r0, r1);
    0x00014b2c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00014b30 bne 0x14a04                                   |         goto label_0;
                                                             |     }
    0x00014b34 add r3, r4, 0x30                              |     r3 = r4 + 0x30;
    0x00014b38 mov r2, r6                                    |     r2 = r6;
    0x00014b3c mov r1, r5                                    |     r1 = r5;
    0x00014b40 ldr r0, [r7, 0x5c]                            |     r0 = *((r7 + 0x5c));
    0x00014b44 bl 0x12f88                                    |     r0 = fcn_00012f88 (r0, r1);
    0x00014b48 subs r8, r0, 0                                |     r8 = r0 - 0;
                                                             |     if (r8 != r0) {
    0x00014b4c bne 0x14a04                                   |         goto label_0;
                                                             |     }
    0x00014b50 ldr r1, [r4, 0x28]                            |     r1 = *((r4 + 0x28));
    0x00014b54 ldr r0, [r4, 0x2c]                            |     r0 = *((r4 + 0x2c));
    0x00014b58 ldr r7, [r7, 0x60]                            |     r7 = *((r7 + 0x60));
    0x00014b5c smull r2, r3, r0, r1                          |     r2:r3 = r0 * r1;
    0x00014b60 mov r0, r7                                    |     r0 = r7;
    0x00014b64 strd r2, r3, [r4, 0x20]                       |     __asm ("strd r2, r3, [r4, 0x20]");
    0x00014b68 bl 0x10d90                                    |     strlen (r0);
    0x00014b6c mov r3, r6                                    |     r3 = r6;
    0x00014b70 mov r2, r5                                    |     r2 = r5;
    0x00014b74 mov r1, r7                                    |     r1 = r7;
    0x00014b78 add r0, r0, 0x6b                              |     r0 += 0x6b;
    0x00014b7c bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x00014b80 sub sp, sp, r0                                |     
    0x00014b84 mov r0, sp                                    |     r0 = sp;
    0x00014b88 bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x00014b8c mov r0, sp                                    |     r0 = sp;
    0x00014b90 mov r2, 0x81                                  |     r2 = 0x81;
    0x00014b94 add r1, r4, 0x34                              |     r1 = r4 + 0x34;
    0x00014b98 bl 0x12fd8                                    |     fcn_00012fd8 (r0, r1);
    0x00014b9c mov sp, sb                                    |     
    0x00014ba0 cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x00014ba4 blt 0x14a04                                   |         goto label_0;
                                                             |     }
    0x00014ba8 add r4, r4, r0                                |     r4 += r0;
    0x00014bac strb r8, [r4, 0x33]                           |     *((r4 + 0x33)) = r8;
    0x00014bb0 b 0x14a08                                     |     goto label_1;
                                                             | label_2:
    0x00014bb4 ldr r0, [pc, 0x28]                            |     
    0x00014bb8 sub r3, fp, 0x58                              |     r3 -= s1;
    0x00014bbc ldr r2, [pc, 0x24]                            |     r2 = stderr;
    0x00014bc0 ldr r1, [pc, 0x24]                            |     r1 = "libubi";
    0x00014bc4 ldr r0, [r0]                                  |     r0 = "dynamic\n";
    0x00014bc8 bl 0x10c7c                                    |     r0 = fprintf ("dynamic\n", "libubi", r2, r3);
    0x00014bcc bl 0x10d78                                    |     errno_location ();
    0x00014bd0 mov r3, 0x16                                  |     r3 = 0x16;
    0x00014bd4 str r3, [r0]                                  |     *(r0) = r3;
    0x00014bd8 b 0x14a04                                     |     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/usr/sbin/ubiformat @ 0x15d90 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.00015d90 ()                          | void fcn_00015d90 (char * s) {
                                                     |     int32_t var_120h;
                                                     |     int32_t var_11ch;
                                                     |     int32_t var_0h;
                                                     |     int32_t var_4h;
                                                     |     int32_t var_8h;
                                                     |     int32_t var_18h_2;
                                                     |     int32_t var_18h;
                                                     |     r0 = s;
    0x00015d90 push {r4, r5, r6, r7, r8, fp, lr}     |     
    0x00015d94 add fp, sp, 0x18                      |     
    0x00015d98 sub sp, sp, 0x114                     |     
    0x00015d9c mov r5, r0                            |     r5 = r0;
    0x00015da0 ldr r0, [r0, 0xc]                     |     r0 = *((r0 + 0xc));
    0x00015da4 bl 0x10d90                            |     r0 = strlen (r0);
    0x00015da8 add r0, r0, 0x11                      |     r0 += 0x11;
    0x00015dac bic r0, r0, 7                         |     r0 = BIT_MASK (r0, 7);
    0x00015db0 sub sp, sp, r0                        |     
    0x00015db4 ldr r0, [r5]                          |     r0 = *(r5);
    0x00015db8 bl 0x10d3c                            |     r0 = opendir ();
    0x00015dbc subs r4, r0, 0                        |     r4 = r0 - 0;
                                                     |     if (r4 == r0) {
    0x00015dc0 addne r7, sp, 8                       |         r7 += var_8h;
                                                     |     }
                                                     |     if (r4 == r0) {
    0x00015dc4 ldrne r8, [pc, 0x1a0]                 |         r8 = "mtd_d_s";
                                                     |     }
                                                     |     if (r4 != r0) {
    0x00015dc8 bne 0x15e24                           |         goto label_3;
                                                     |     }
    0x00015dcc bl 0x10d78                            |     r0 = errno_location ();
    0x00015dd0 ldr r6, [r0]                          |     r6 = *(r0);
    0x00015dd4 cmp r6, 2                             |     
                                                     |     if (r6 != 2) {
    0x00015dd8 streq r4, [r0]                        |         *(r0) = r4;
                                                     |     }
                                                     |     if (r6 == 2) {
    0x00015ddc beq 0x15e7c                           |         goto label_1;
                                                     |     }
    0x00015de0 ldr r4, [pc, 0x188]                   |     
    0x00015de4 ldr r3, [r5]                          |     r3 = *(r5);
    0x00015de8 ldr r2, [pc, 0x184]                   |     r2 = stderr;
    0x00015dec ldr r1, [pc, 0x184]                   |     r1 = "libmtd";
    0x00015df0 ldr r0, [r4]                          |     r0 = "mtd_d_s";
    0x00015df4 bl 0x10c7c                            |     fprintf ("mtd_d_s", "libmtd", r2, r3, "mtd_d_s");
    0x00015df8 mov r0, r6                            |     r0 = r6;
    0x00015dfc ldr r4, [r4]                          |     r4 = "mtd_d_s";
    0x00015e00 bl 0x10bc8                            |     strerror (r0);
    0x00015e04 ldr r3, [pc, 0x170]                   |     r3 = "%s: error!: cannot open \"%s\"\n";
    0x00015e08 ldr r1, [pc, 0x170]                   |     r1 = *(0x15f7c);
    0x00015e0c mov r2, 8                             |     r2 = 8;
    0x00015e10 str r6, [sp]                          |     *(sp) = r6;
    0x00015e14 str r0, [sp, 4]                       |     var_4h = r0;
    0x00015e18 mov r0, r4                            |     r0 = r4;
                                                     | label_0:
    0x00015e1c bl 0x10c7c                            |     fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4, r5, r6);
    0x00015e20 b 0x15e78                             |     
                                                     |     while (r0 != 1) {
                                                     | label_3:
    0x00015e24 mov r0, r4                            |         r0 = r4;
    0x00015e28 bl 0x10cd0                            |         r0 = readdir64 ();
    0x00015e2c cmp r0, 0                             |         
                                                     |         if (r0 == 0) {
    0x00015e30 beq 0x15f00                           |             goto label_4;
                                                     |         }
    0x00015e34 add r6, r0, 0x13                      |         r6 = r0 + 0x13;
    0x00015e38 mov r0, r6                            |         r0 = r6;
    0x00015e3c bl 0x10d90                            |         r0 = strlen (r0);
    0x00015e40 cmp r0, 0xfe                          |         
                                                     |         if (r0 >= 0xfe) {
    0x00015e44 bls 0x15e88                           |             
    0x00015e48 ldr r0, [pc, 0x120]                   |             
    0x00015e4c str r6, [sp]                          |             *(sp) = r6;
    0x00015e50 ldr r2, [pc, 0x11c]                   |             r2 = stderr;
    0x00015e54 ldr r3, [r5]                          |             r3 = *(r5);
    0x00015e58 ldr r1, [pc, 0x124]                   |             r1 = "_serror__d___s_";
    0x00015e5c ldr r0, [r0]                          |             r0 = "mtd_d_s";
    0x00015e60 bl 0x10c7c                            |             r0 = fprintf ("mtd_d_s", "_serror__d___s_", r2, r3, r4, r5, r6);
    0x00015e64 bl 0x10d78                            |             errno_location ();
    0x00015e68 mov r3, 0x16                          |             r3 = 0x16;
    0x00015e6c str r3, [r0]                          |             *(r0) = r3;
    0x00015e70 mov r0, r4                            |             r0 = r4;
    0x00015e74 bl 0x10db4                            |             closedir ();
    0x00015e78 mvn r4, 0                             |             r4 = ~0;
                                                     | label_1:
    0x00015e7c mov r0, r4                            |             r0 = r4;
    0x00015e80 sub sp, fp, 0x18                      |             
    0x00015e84 pop {r4, r5, r6, r7, r8, fp, pc}      |             
                                                     |         }
    0x00015e88 sub r3, fp, 0x11c                     |         r3 -= var_11ch;
    0x00015e8c sub r2, fp, 0x120                     |         r2 -= var_120h;
    0x00015e90 mov r1, r8                            |         r1 = r8;
    0x00015e94 mov r0, r6                            |         r0 = r6;
    0x00015e98 bl 0x10ce8                            |         r0 = sscanf (r0, r1, r2);
    0x00015e9c cmp r0, 1                             |         
    0x00015ea0 bne 0x15e24                           |         
                                                     |     }
    0x00015ea4 ldr r6, [fp, -0x120]                  |     r6 = var_120h;
                                                     |     do {
    0x00015ea8 mov r0, r4                            |         r0 = r4;
    0x00015eac bl 0x10db4                            |         r0 = closedir ();
    0x00015eb0 subs r4, r0, 0                        |         r4 = r0 - 0;
                                                     |         if (r4 == r0) {
    0x00015eb4 beq 0x15f08                           |             goto label_5;
                                                     |         }
    0x00015eb8 bl 0x10d78                            |         errno_location ();
    0x00015ebc ldr r6, [pc, 0xac]                    |         r6 = "mtd_d_s";
    0x00015ec0 ldr r3, [r5]                          |         r3 = *(r5);
    0x00015ec4 ldr r2, [pc, 0xa8]                    |         r2 = stderr;
    0x00015ec8 ldr r1, [pc, 0xb8]                    |         r1 = "_s:_error_:_invalid_entry_in__s:___s_";
    0x00015ecc ldr r4, [r0]                          |         r4 = *(r0);
    0x00015ed0 ldr r0, [r6]                          |         r0 = "mtd_d_s";
    0x00015ed4 bl 0x10c7c                            |         fprintf ("mtd_d_s", "_s:_error_:_invalid_entry_in__s:___s_", r2, r3, r4, r5, "mtd_d_s");
    0x00015ed8 ldr r5, [r6]                          |         r5 = "mtd_d_s";
                                                     | label_2:
    0x00015edc mov r0, r4                            |         r0 = r4;
    0x00015ee0 bl 0x10bc8                            |         strerror (r0);
    0x00015ee4 str r4, [sp]                          |         *(sp) = r4;
    0x00015ee8 ldr r3, [pc, 0x8c]                    |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00015eec mov r2, 8                             |         r2 = 8;
    0x00015ef0 ldr r1, [pc, 0x88]                    |         r1 = *(0x15f7c);
    0x00015ef4 str r0, [sp, 4]                       |         var_4h = r0;
    0x00015ef8 mov r0, r5                            |         r0 = r5;
    0x00015efc b 0x15e1c                             |         goto label_0;
                                                     | label_4:
    0x00015f00 mvn r6, 0                             |         r6 = ~0;
    0x00015f04 b 0x15ea8                             |         
                                                     |     } while (1);
                                                     | label_5:
    0x00015f08 cmn r6, 1                             |     
                                                     |     if (r6 == 1) {
    0x00015f0c beq 0x15e7c                           |         goto label_1;
                                                     |     }
    0x00015f10 mov r2, r6                            |     r2 = r6;
    0x00015f14 ldr r1, [r5, 0xc]                     |     r1 = *((r5 + 0xc));
    0x00015f18 mov r0, r7                            |     r0 = r7;
    0x00015f1c bl 0x10d60                            |     sprintf (r0, r1, r2)
    0x00015f20 mov r1, 0x80000                       |     r1 = 0x80000;
    0x00015f24 mov r0, r7                            |     r0 = r7;
    0x00015f28 bl 0x10d30                            |     r0 = open64 ();
    0x00015f2c cmn r0, 1                             |     
                                                     |     if (r0 == 1) {
    0x00015f30 beq 0x15e7c                           |         goto label_1;
                                                     |     }
    0x00015f34 bl 0x10dcc                            |     r0 = close (r0);
    0x00015f38 cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x00015f3c moveq r4, 1                           |         r4 = 1;
                                                     |         goto label_6;
                                                     |     }
                                                     |     if (r0 == 0) {
                                                     | label_6:
    0x00015f40 beq 0x15e7c                           |         goto label_1;
                                                     |     }
    0x00015f44 bl 0x10d78                            |     errno_location ();
    0x00015f48 ldr r5, [pc, 0x20]                    |     
    0x00015f4c mov r3, r7                            |     r3 = r7;
    0x00015f50 ldr r2, [pc, 0x1c]                    |     r2 = stderr;
    0x00015f54 ldr r1, [pc, 0x30]                    |     r1 = "%s: error!: closedir failed on \"%s\"\n";
    0x00015f58 ldr r4, [r0]                          |     r4 = *(r0);
    0x00015f5c ldr r0, [r5]                          |     r0 = "mtd_d_s";
    0x00015f60 bl 0x10c7c                            |     fprintf ("mtd_d_s", "%s: error!: closedir failed on \"%s\"\n", r2, r3, r4, "mtd_d_s");
    0x00015f64 ldr r5, [r5]                          |     r5 = "mtd_d_s";
    0x00015f68 b 0x15edc                             |     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/usr/sbin/ubiformat @ 0x162d8 */
                                                 | #include <stdint.h>
                                                 |  
                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                 |  
    ; (fcn) fcn.000162d8 ()                      | void fcn_000162d8 (int32_t arg1, int32_t arg2) {
                                                 |     int32_t var_8h;
                                                 |     char * s;
                                                 |     int32_t var_1ch;
                                                 |     int32_t var_14h_2;
                                                 |     int32_t var_14h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x000162d8 push {r4, r5, r6, r7, fp, lr}     |     
    0x000162dc add fp, sp, 0x14                  |     
    0x000162e0 sub sp, sp, 0x18                  |     
    0x000162e4 mov r7, r1                        |     r7 = r1;
    0x000162e8 mov r6, r0                        |     r6 = r0;
    0x000162ec mov r5, r2                        |     r5 = r2;
    0x000162f0 bl 0x10d90                        |     strlen (r0);
    0x000162f4 mov r2, r7                        |     r2 = r7;
    0x000162f8 mov r1, r6                        |     r1 = r6;
    0x000162fc add r0, r0, 0x39                  |     r0 += 0x39;
    0x00016300 bic r0, r0, 7                     |     r0 = BIT_MASK (r0, 7);
    0x00016304 sub sp, sp, r0                    |     
    0x00016308 add r4, sp, 0x10                  |     r4 += s;
    0x0001630c mov r0, r4                        |     r0 = r4;
    0x00016310 bl 0x10d60                        |     sprintf (r0, r1, r2)
    0x00016314 sub r1, fp, 0x1c                  |     r1 -= s;
    0x00016318 mov r0, r4                        |     r0 = r4;
    0x0001631c bl 0x16124                        |     r0 = fcn_00016124 (r0, r1);
    0x00016320 cmp r0, 0                         |     
                                                 |     if (r0 == 0) {
    0x00016324 bne 0x16364                       |         
    0x00016328 ldrd r2, r3, [fp, -0x1c]          |         __asm ("ldrd r2, r3, [s]");
    0x0001632c cmp r2, 0x80000000                |         
    0x00016330 sbcs r1, r3, 0                    |         __asm ("sbcs r1, r3, 0");
                                                 |         if (r2 >= 0x80000000) {
    0x00016334 strlt r2, [r5]                    |             *(r5) = r2;
                                                 |         }
                                                 |         if (r2 < 0x80000000) {
    0x00016338 blt 0x16368                       |             goto label_0;
                                                 |         }
    0x0001633c strd r2, r3, [sp]                 |         __asm ("strd r2, r3, [sp]");
    0x00016340 ldr r3, [pc, 0x28]                |         r3 = *(0x1636c);
    0x00016344 str r4, [sp, 8]                   |         var_8h = r4;
    0x00016348 ldr r2, [pc, 0x24]                |         r2 = stderr;
    0x0001634c ldr r0, [r3]                      |         r0 = *(0x1636c);
    0x00016350 ldr r1, [pc, 0x20]                |         r1 = "libmtd";
    0x00016354 bl 0x10c7c                        |         r0 = fprintf (r0, "libmtd", r2, r3, r4);
    0x00016358 bl 0x10d78                        |         errno_location ();
    0x0001635c mov r3, 0x16                      |         r3 = 0x16;
    0x00016360 str r3, [r0]                      |         *(r0) = r3;
                                                 |     }
    0x00016364 mvn r0, 0                         |     r0 = ~0;
                                                 | label_0:
    0x00016368 sub sp, fp, 0x14                  |     
    0x0001636c 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/usr/sbin/ubiformat @ 0x16768 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.00016768 ()                          | void fcn_00016768 (int32_t arg2, char * s) {
                                                     |     char * var_50h;
                                                     |     int32_t var_0h;
                                                     |     int32_t var_4h;
                                                     |     char * var_8h;
                                                     |     int32_t var_18h_2;
                                                     |     int32_t var_18h;
                                                     |     r1 = arg2;
                                                     |     r0 = s;
    0x00016768 push {r4, r5, r6, r7, r8, fp, lr}     |     
    0x0001676c add fp, sp, 0x18                      |     
    0x00016770 sub sp, sp, 0x44                      |     
    0x00016774 ldr r7, [r0]                          |     r7 = *(r0);
    0x00016778 mov r8, r1                            |     r8 = r1;
    0x0001677c mov r0, r7                            |     r0 = r7;
    0x00016780 mov r6, r3                            |     r6 = r3;
    0x00016784 mov r5, r2                            |     r5 = r2;
    0x00016788 bl 0x10d90                            |     strlen (r0);
    0x0001678c mov r2, r8                            |     r2 = r8;
    0x00016790 mov r1, r7                            |     r1 = r7;
    0x00016794 add r0, r0, 0x39                      |     r0 += 0x39;
    0x00016798 bic r0, r0, 7                         |     r0 = BIT_MASK (r0, 7);
    0x0001679c sub sp, sp, r0                        |     
    0x000167a0 add r4, sp, 8                         |     r4 += var_8h;
    0x000167a4 mov r0, r4                            |     r0 = r4;
    0x000167a8 bl 0x10d60                            |     sprintf (r0, r1, r2)
    0x000167ac mov r2, 0x32                          |     r2 = 0x32;
    0x000167b0 sub r1, fp, 0x50                      |     r1 -= var_50h;
    0x000167b4 mov r0, r4                            |     r0 = r4;
    0x000167b8 bl 0x15f90                            |     r0 = fcn_00015f90 (r0, r1);
    0x000167bc cmp r0, 0                             |     
                                                     |     if (r0 < 0) {
    0x000167c0 blt 0x16808                           |         goto label_1;
                                                     |     }
    0x000167c4 mov r3, r6                            |     r3 = r6;
    0x000167c8 mov r2, r5                            |     r2 = r5;
    0x000167cc ldr r1, [pc, 0x8c]                    |     r1 = *(0x1685c);
    0x000167d0 sub r0, fp, 0x50                      |     r0 -= var_50h;
    0x000167d4 bl 0x10ce8                            |     r0 = sscanf (r0, r1, r2);
    0x000167d8 cmp r0, 2                             |     
                                                     |     if (r0 == 2) {
    0x000167dc beq 0x16810                           |         goto label_2;
                                                     |     }
    0x000167e0 bl 0x10d78                            |     errno_location ();
    0x000167e4 mov r3, 0x16                          |     r3 = 0x16;
    0x000167e8 ldr r2, [pc, 0x74]                    |     r2 = "_d:_d";
    0x000167ec ldr r1, [pc, 0x74]                    |     r1 = "libmtd";
    0x000167f0 str r3, [r0]                          |     *(r0) = r3;
    0x000167f4 ldr r0, [pc, 0x70]                    |     
    0x000167f8 mov r3, r4                            |     r3 = r4;
    0x000167fc ldr r0, [r0]                          |     r0 = "%s: error!: \"%s\" does not have major:minor format\n";
    0x00016800 bl 0x10c7c                            |     fprintf ("%s: error!: \"%s\" does not have major:minor format\n", "libmtd", "_d:_d", r3);
                                                     | label_0:
    0x00016804 mvn r0, 0                             |     r0 = ~0;
                                                     |     do {
                                                     | label_1:
    0x00016808 sub sp, fp, 0x18                      |         
    0x0001680c pop {r4, r5, r6, r7, r8, fp, pc}      |         
                                                     | label_2:
    0x00016810 ldr r3, [r5]                          |         r3 = *(r5);
    0x00016814 cmp r3, 0                             |         
                                                     |         if (r3 < 0) {
    0x00016818 blt 0x1682c                           |             goto label_3;
                                                     |         }
    0x0001681c ldr r3, [r6]                          |         r3 = *(r6);
    0x00016820 cmp r3, 0                             |         
                                                     |         if (r3 < 0) {
    0x00016824 movge r0, 0                           |             r0 = 0;
                                                     |         }
    0x00016828 bge 0x16808                           |         
                                                     |     } while (r3 >= 0);
                                                     | label_3:
    0x0001682c bl 0x10d78                            |     errno_location ();
    0x00016830 mov r3, 0x16                          |     r3 = 0x16;
    0x00016834 ldr r2, [pc, 0x28]                    |     r2 = "_d:_d";
    0x00016838 ldr r1, [pc, 0x30]                    |     r1 = stderr;
    0x0001683c str r3, [r0]                          |     *(r0) = r3;
    0x00016840 ldr r0, [pc, 0x24]                    |     
    0x00016844 ldr r3, [r6]                          |     r3 = *(r6);
    0x00016848 str r4, [sp, 4]                       |     var_4h = r4;
    0x0001684c str r3, [sp]                          |     *(sp) = r3;
    0x00016850 ldr r3, [r5]                          |     r3 = *(r5);
    0x00016854 ldr r0, [r0]                          |     r0 = "%s: error!: \"%s\" does not have major:minor format\n";
    0x00016858 bl 0x10c7c                            |     fprintf ("%s: error!: \"%s\" does not have major:minor format\n", r1, "_d:_d", r3, r4);
    0x0001685c b 0x16804                             |     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/usr/sbin/ubiformat @ 0x16e10 */
                                             | #include <stdint.h>
                                             |  
                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                             |  
    ; (fcn) fcn.00016e10 ()                  | void fcn_00016e10 (int32_t arg1, int32_t arg2) {
                                             |     int32_t var_7ch;
                                             |     int32_t var_10h_2;
                                             |     int32_t var_10h;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
    0x00016e10 push {r4, r5, r6, fp, lr}     |     
    0x00016e14 add fp, sp, 0x10              |     
    0x00016e18 sub sp, sp, 0x6c              |     
    0x00016e1c ldrb r3, [r0, 0x34]           |     r3 = *((r0 + 0x34));
    0x00016e20 mov r5, r1                    |     r5 = r1;
    0x00016e24 tst r3, 1                     |     
                                             |     if ((r3 & 1) != 0) {
    0x00016e28 bne 0x16e48                   |         goto label_0;
                                             |     }
    0x00016e2c mov r0, r1                    |     r0 = r1;
    0x00016e30 bl 0x189d0                    |     r0 = fcn_000189d0 (r0);
    0x00016e34 sub r0, r0, 1                 |     r0--;
    0x00016e38 clz r0, r0                    |     r0 &= r0;
    0x00016e3c lsr r0, r0, 5                 |     r0 >>= 5;
                                             |     do {
    0x00016e40 sub sp, fp, 0x10              |         
    0x00016e44 pop {r4, r5, r6, fp, pc}      |         
                                             | label_0:
    0x00016e48 ldr r4, [r0, 4]               |         r4 = *((r0 + 4));
    0x00016e4c mov r6, sp                    |         r6 = sp;
    0x00016e50 mov r0, r4                    |         r0 = r4;
    0x00016e54 bl 0x10d90                    |         strlen (r0);
    0x00016e58 mov r2, r5                    |         r2 = r5;
    0x00016e5c mov r1, r4                    |         r1 = r4;
    0x00016e60 add r0, r0, 0x11              |         r0 += 0x11;
    0x00016e64 bic r0, r0, 7                 |         r0 = BIT_MASK (r0, 7);
    0x00016e68 sub sp, sp, r0                |         
    0x00016e6c mov r0, sp                    |         r0 = sp;
    0x00016e70 bl 0x10d60                    |         sprintf (r0, r1, r2)
    0x00016e74 mov r0, sp                    |         r0 = sp;
    0x00016e78 sub r1, fp, 0x7c              |         r1 -= var_7ch;
    0x00016e7c bl 0x10bd4                    |         stat64 ();
    0x00016e80 mov sp, r6                    |         
    0x00016e84 clz r0, r0                    |         r0 &= r0;
    0x00016e88 lsr r0, r0, 5                 |         r0 >>= 5;
    0x00016e8c b 0x16e40                     |         
                                             |     } 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/usr/sbin/ubiformat @ 0x16ed0 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.00016ed0 ()                                  | void fcn_00016ed0 (int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_68h;
                                                             |     int32_t var_64h;
                                                             |     char * buf;
                                                             |     int32_t var_24h;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     char * s;
                                                             |     int32_t var_sp_64h;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00016ed0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00016ed4 add r6, r2, 4                                 |     r6 = r2 + 4;
    0x00016ed8 add fp, sp, 0x20                              |     
    0x00016edc sub sp, sp, 0x5c                              |     
    0x00016ee0 mov r5, r1                                    |     r5 = r1;
    0x00016ee4 mov r7, r0                                    |     r7 = r0;
    0x00016ee8 mov r4, r2                                    |     r4 = r2;
    0x00016eec mov r1, 0                                     |     r1 = 0;
    0x00016ef0 mov r2, 0xfc                                  |     r2 = 0xfc;
    0x00016ef4 mov r0, r6                                    |     r0 = r6;
    0x00016ef8 bl 0x10d18                                    |     memset (r0, r1, r2);
    0x00016efc str r5, [r4]                                  |     *(r4) = r5;
    0x00016f00 mov r1, r5                                    |     r1 = r5;
    0x00016f04 mov r0, r7                                    |     r0 = r7;
    0x00016f08 bl 0x16e10                                    |     r0 = fcn_00016e10 (r0, r1);
    0x00016f0c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00016f10 bne 0x16f28                                   |         goto label_4;
                                                             |     }
    0x00016f14 bl 0x10d78                                    |     errno_location ();
    0x00016f18 mov r3, 0x13                                  |     r3 = 0x13;
    0x00016f1c str r3, [r0]                                  |     *(r0) = r3;
                                                             |     do {
                                                             | label_0:
    0x00016f20 mvn r5, 0                                     |         r5 = ~0;
    0x00016f24 b 0x16f44                                     |         goto label_1;
                                                             | label_4:
    0x00016f28 ldrb r3, [r7, 0x34]                           |         r3 = *((r7 + 0x34));
    0x00016f2c tst r3, 1                                     |         
                                                             |         if ((r3 & 1) == 0) {
    0x00016f30 bne 0x16f50                                   |             
    0x00016f34 mov r0, r5                                    |             r0 = r5;
    0x00016f38 mov r1, r4                                    |             r1 = r4;
    0x00016f3c bl 0x19144                                    |             r0 = fcn_00019144 (r0, r1);
    0x00016f40 mov r5, r0                                    |             r5 = r0;
                                                             | label_1:
    0x00016f44 mov r0, r5                                    |             r0 = r5;
    0x00016f48 sub sp, fp, 0x20                              |             
    0x00016f4c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |             
                                                             |         }
    0x00016f50 add r3, r4, 8                                 |         r3 = r4 + 8;
    0x00016f54 mov r2, r6                                    |         r2 = r6;
    0x00016f58 mov r1, r5                                    |         r1 = r5;
    0x00016f5c add r0, r7, 8                                 |         r0 = r7 + 8;
    0x00016f60 bl 0x16768                                    |         r0 = fcn_00016768 (r0, r1);
    0x00016f64 subs sl, r0, 0                                |         sl = r0 - 0;
    0x00016f68 bne 0x16f20                                   |         
                                                             |     } while (sl != r0);
    0x00016f6c ldr r8, [r7, 0xc]                             |     r8 = *((r7 + 0xc));
    0x00016f70 mov sb, sp                                    |     sb = sp;
    0x00016f74 mov r0, r8                                    |     r0 = r8;
    0x00016f78 bl 0x10d90                                    |     strlen (r0);
    0x00016f7c mov r2, r5                                    |     r2 = r5;
    0x00016f80 mov r1, r8                                    |     r1 = r8;
    0x00016f84 add r6, r4, 0x51                              |     r6 = r4 + 0x51;
    0x00016f88 add r0, r0, 0x6b                              |     r0 += 0x6b;
    0x00016f8c bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x00016f90 sub sp, sp, r0                                |     
    0x00016f94 add r3, sp, 0x10                              |     r3 += s;
    0x00016f98 mov r0, r3                                    |     r0 = r3;
    0x00016f9c str r3, [fp, -0x68]                           |     var_68h = r3;
    0x00016fa0 bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x00016fa4 ldr r3, [fp, -0x68]                           |     r3 = var_68h;
    0x00016fa8 mov r2, 0x80                                  |     r2 = 0x80;
    0x00016fac mov r1, r6                                    |     r1 = r6;
    0x00016fb0 mov r0, r3                                    |     r0 = r3;
    0x00016fb4 bl 0x15f90                                    |     fcn_00015f90 (r0, r1);
    0x00016fb8 mov sp, sb                                    |     
    0x00016fbc cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x00016fc0 blt 0x16f20                                   |         goto label_0;
                                                             |     }
    0x00016fc4 add r6, r6, r0                                |     r6 += r0;
    0x00016fc8 strb sl, [r6, -1]                             |     *((r6 - 1)) = sl;
    0x00016fcc ldr r6, [r7, 0x10]                            |     r6 = *((r7 + 0x10));
    0x00016fd0 add r8, r4, 0x10                              |     r8 = r4 + 0x10;
    0x00016fd4 mov r0, r6                                    |     r0 = r6;
    0x00016fd8 bl 0x10d90                                    |     strlen (r0);
    0x00016fdc mov r2, r5                                    |     r2 = r5;
    0x00016fe0 mov r1, r6                                    |     r1 = r6;
    0x00016fe4 add r0, r0, 0x6b                              |     r0 += 0x6b;
    0x00016fe8 bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x00016fec sub sp, sp, r0                                |     
    0x00016ff0 add r3, sp, 0x10                              |     r3 += s;
    0x00016ff4 mov r0, r3                                    |     r0 = r3;
    0x00016ff8 str r3, [fp, -0x68]                           |     var_68h = r3;
    0x00016ffc bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x00017000 ldr r3, [fp, -0x68]                           |     r3 = var_68h;
    0x00017004 mov r2, 0x41                                  |     r2 = 0x41;
    0x00017008 mov r1, r8                                    |     r1 = r8;
    0x0001700c mov r0, r3                                    |     r0 = r3;
    0x00017010 bl 0x15f90                                    |     fcn_00015f90 (r0, r1);
    0x00017014 mov sp, sb                                    |     
    0x00017018 cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x0001701c blt 0x16f20                                   |         goto label_0;
                                                             |     }
    0x00017020 add r0, r8, r0                                |     r0 = r8 + r0;
    0x00017024 strb sl, [r0, -1]                             |     *((r0 - 1)) = sl;
    0x00017028 add r2, r4, 0xe4                              |     r2 = r4 + 0xe4;
    0x0001702c mov r1, r5                                    |     r1 = r5;
    0x00017030 ldr r0, [r7, 0x14]                            |     r0 = *((r7 + 0x14));
    0x00017034 bl 0x162d8                                    |     r0 = fcn_000162d8 (r0, r1);
    0x00017038 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001703c bne 0x16f20                                   |         goto label_0;
                                                             |     }
    0x00017040 ldr sl, [r7, 0x18]                            |     sl = *((r7 + 0x18));
    0x00017044 mov r0, sl                                    |     r0 = sl;
    0x00017048 bl 0x10d90                                    |     strlen (r0);
    0x0001704c mov r2, r5                                    |     r2 = r5;
    0x00017050 mov r1, sl                                    |     r1 = sl;
    0x00017054 add r0, r0, 0x39                              |     r0 += 0x39;
    0x00017058 bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x0001705c sub sp, sp, r0                                |     
    0x00017060 add r6, sp, 0x10                              |     r6 += s;
    0x00017064 mov r0, r6                                    |     r0 = r6;
    0x00017068 bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x0001706c add r1, r4, 0xd8                              |     r1 = r4 + 0xd8;
    0x00017070 mov r0, r6                                    |     r0 = r6;
    0x00017074 bl 0x16124                                    |     fcn_00016124 (r0, r1);
    0x00017078 mov sp, sb                                    |     
    0x0001707c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00017080 bne 0x16f20                                   |         goto label_0;
                                                             |     }
    0x00017084 add r2, r4, 0xe8                              |     r2 = r4 + 0xe8;
    0x00017088 mov r1, r5                                    |     r1 = r5;
    0x0001708c ldr r0, [r7, 0x1c]                            |     r0 = *((r7 + 0x1c));
    0x00017090 bl 0x162d8                                    |     r0 = fcn_000162d8 (r0, r1);
    0x00017094 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00017098 bne 0x16f20                                   |         goto label_0;
                                                             |     }
    0x0001709c add r2, r4, 0xec                              |     r2 = r4 + 0xec;
    0x000170a0 mov r1, r5                                    |     r1 = r5;
    0x000170a4 ldr r0, [r7, 0x20]                            |     r0 = *((r7 + 0x20));
    0x000170a8 bl 0x162d8                                    |     r0 = fcn_000162d8 (r0, r1);
    0x000170ac cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000170b0 bne 0x16f20                                   |         goto label_0;
                                                             |     }
    0x000170b4 add r2, r4, 0xf0                              |     r2 = r4 + 0xf0;
    0x000170b8 mov r1, r5                                    |     r1 = r5;
    0x000170bc ldr r0, [r7, 0x24]                            |     r0 = *((r7 + 0x24));
    0x000170c0 bl 0x162d8                                    |     r0 = fcn_000162d8 (r0, r1);
    0x000170c4 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000170c8 bne 0x16f20                                   |         goto label_0;
                                                             |     }
    0x000170cc add r2, r4, 0xf4                              |     r2 = r4 + 0xf4;
    0x000170d0 mov r1, r5                                    |     r1 = r5;
    0x000170d4 ldr r0, [r7, 0x28]                            |     r0 = *((r7 + 0x28));
    0x000170d8 bl 0x162d8                                    |     r0 = fcn_000162d8 (r0, r1);
    0x000170dc cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000170e0 beq 0x170fc                                   |         
    0x000170e4 mov r0, r5                                    |         r0 = r5;
    0x000170e8 bl 0x18c2c                                    |         r0 = fcn_00018c2c (r0);
    0x000170ec cmp r0, 0                                     |         
                                                             |         if (r0 >= 0) {
    0x000170f0 movlt r3, 0                                   |             r3 = 0;
                                                             |         }
                                                             |         if (r0 < 0) {
    0x000170f4 strge r0, [r4, 0xf4]                          |             *((r4 + 0xf4)) = r0;
                                                             |         }
                                                             |         if (r0 < 0) {
    0x000170f8 strlt r3, [r4, 0xf4]                          |             *((r4 + 0xf4)) = r3;
                                                             |             goto label_5;
                                                             |         }
                                                             |     }
                                                             | label_5:
    0x000170fc add r2, r4, 0xf8                              |     r2 = r4 + 0xf8;
    0x00017100 mov r1, r5                                    |     r1 = r5;
    0x00017104 ldr r0, [r7, 0x2c]                            |     r0 = *((r7 + 0x2c));
    0x00017108 bl 0x162d8                                    |     r0 = fcn_000162d8 (r0, r1);
    0x0001710c subs r6, r0, 0                                |     r6 = r0 - 0;
                                                             |     if (r6 != r0) {
    0x00017110 bne 0x16f20                                   |         goto label_0;
                                                             |     }
    0x00017114 ldr r7, [r7, 0x30]                            |     r7 = *((r7 + 0x30));
    0x00017118 mov sl, sp                                    |     sl = sp;
    0x0001711c mov r0, r7                                    |     r0 = r7;
    0x00017120 bl 0x10d90                                    |     strlen (r0);
    0x00017124 mov r2, r5                                    |     r2 = r5;
    0x00017128 mov r1, r7                                    |     r1 = r7;
    0x0001712c add r0, r0, 0x39                              |     r0 += 0x39;
    0x00017130 bic r0, r0, 7                                 |     r0 = BIT_MASK (r0, 7);
    0x00017134 sub sp, sp, r0                                |     
    0x00017138 add sb, sp, 0x10                              |     sb += s;
    0x0001713c mov r0, sb                                    |     r0 = sb;
    0x00017140 bl 0x10d60                                    |     sprintf (r0, r1, r2)
    0x00017144 mov r1, 0x80000                               |     r1 = 0x80000;
    0x00017148 mov r0, sb                                    |     r0 = sb;
    0x0001714c bl 0x10d30                                    |     r0 = open64 ();
    0x00017150 cmn r0, 1                                     |     
    0x00017154 mov r5, r0                                    |     r5 = r0;
                                                             |     if (r0 == 1) {
    0x00017158 bne 0x17164                                   |         
    0x0001715c mov sp, sl                                    |         
    0x00017160 b 0x16f44                                     |         goto label_1;
                                                             |     }
    0x00017164 mov r2, 0x32                                  |     r2 = 0x32;
    0x00017168 sub r1, fp, 0x58                              |     r1 -= buf;
    0x0001716c bl 0x10cac                                    |     r0 = read (r0, r1, r2);
    0x00017170 cmn r0, 1                                     |     
                                                             |     if (r0 != 1) {
    0x00017174 bne 0x171cc                                   |         goto label_6;
                                                             |     }
    0x00017178 bl 0x10d78                                    |     errno_location ();
    0x0001717c ldr r6, [pc, 0x294]                           |     
    0x00017180 mov r3, sb                                    |     r3 = sb;
    0x00017184 ldr r2, [pc, 0x290]                           |     r2 = stderr;
    0x00017188 ldr r1, [pc, 0x290]                           |     r1 = "libmtd";
    0x0001718c ldr r4, [r0]                                  |     r4 = *(r0);
    0x00017190 ldr r0, [r6]                                  |     r0 = *(0x17414);
    0x00017194 bl 0x10c7c                                    |     fprintf (r0, "libmtd", r2, r3, r4, r5, r6);
    0x00017198 mov r0, r4                                    |     r0 = r4;
    0x0001719c ldr r6, [r6]                                  |     r6 = *(0x17414);
    0x000171a0 bl 0x10bc8                                    |     strerror (r0);
    0x000171a4 str r4, [sp]                                  |     *(sp) = r4;
    0x000171a8 ldr r3, [pc, 0x274]                           |     r3 = "%s: error!: cannot read \"%s\"\n";
    0x000171ac mov r2, 8                                     |     r2 = 8;
    0x000171b0 ldr r1, [pc, 0x270]                           |     r1 = *(0x17424);
    0x000171b4 str r0, [sp, 4]                               |     var_4h = r0;
    0x000171b8 mov r0, r6                                    |     r0 = r6;
    0x000171bc bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4);
                                                             |     do {
    0x000171c0 mov r0, r5                                    |         r0 = r5;
    0x000171c4 bl 0x10dcc                                    |         close (r0);
    0x000171c8 b 0x172b4                                     |         goto label_7;
                                                             | label_6:
    0x000171cc cmp r0, 0x32                                  |         
                                                             |         if (r0 != 0x32) {
    0x000171d0 bne 0x171fc                                   |             goto label_8;
                                                             |         }
    0x000171d4 ldr r2, [pc, 0x240]                           |         r2 = stderr;
    0x000171d8 ldr r1, [pc, 0x24c]                           |         r1 = "_serror__d___s_";
    0x000171dc mov r3, sb                                    |         r3 = sb;
                                                             | label_2:
    0x000171e0 ldr r0, [pc, 0x230]                           |         
    0x000171e4 ldr r0, [r0]                                  |         r0 = *(0x17414);
    0x000171e8 bl 0x10c7c                                    |         r0 = fprintf (r0, "_serror__d___s_", r2, r3);
                                                             | label_3:
    0x000171ec bl 0x10d78                                    |         errno_location ();
    0x000171f0 mov r3, 0x16                                  |         r3 = 0x16;
    0x000171f4 str r3, [r0]                                  |         *(r0) = r3;
    0x000171f8 b 0x171c0                                     |         
                                                             |     } while (1);
                                                             | label_8:
    0x000171fc sub r3, fp, 0x24                              |     r3 -= var_24h;
    0x00017200 add r0, r3, r0                                |     r0 = r3 + r0;
    0x00017204 strb r6, [r0, -0x34]                          |     *((r0 - 0x34)) = r6;
    0x00017208 sub r2, fp, 0x64                              |     r2 -= var_64h;
    0x0001720c ldr r1, [pc, 0x21c]                           |     r1 = "%s: error!: contents of \"%s\" is too long\n";
    0x00017210 sub r0, fp, 0x58                              |     r0 -= buf;
    0x00017214 bl 0x10ce8                                    |     r0 = sscanf (r0, "%s: error!: contents of \"%s\" is too long\n", r2);
    0x00017218 cmp r0, 1                                     |     
                                                             |     if (r0 == 1) {
    0x0001721c movne r3, sb                                  |         r3 = sb;
                                                             |     }
                                                             |     if (r0 == 1) {
    0x00017220 ldrne r2, [pc, 0x1f4]                         |         r2 = "libmtd";
                                                             |     }
                                                             |     if (r0 != 1) {
    0x00017224 ldrne r1, [pc, 0x208]                         |         r1 = "%s: error!: cannot read integer from \"%s\"\n\n";
                                                             |         goto label_9;
                                                             |     }
                                                             |     if (r0 != 1) {
                                                             | label_9:
    0x00017228 bne 0x171e0                                   |         goto label_2;
                                                             |     }
    0x0001722c ldrd r2, r3, [fp, -0x64]                      |     __asm ("ldrd r2, r3, [var_64h]");
    0x00017230 cmp r2, 0                                     |     
    0x00017234 sbcs r1, r3, 0                                |     __asm ("sbcs r1, r3, 0");
                                                             |     if (r2 < 0) {
    0x00017238 bge 0x1725c                                   |         
    0x0001723c strd r2, r3, [sp]                             |         __asm ("strd r2, r3, [sp]");
    0x00017240 ldr r3, [pc, 0x1d0]                           |         r3 = *(0x17414);
    0x00017244 str sb, [sp, 8]                               |         var_8h = sb;
    0x00017248 ldr r2, [pc, 0x1cc]                           |         r2 = stderr;
    0x0001724c ldr r1, [pc, 0x1e4]                           |         r1 = "%s: error!: cannot read integer from \"%s\"\n\n";
    0x00017250 ldr r0, [r3]                                  |         r0 = *(0x17414);
    0x00017254 bl 0x10c7c                                    |         fprintf (r0, "%s: error!: cannot read integer from \"%s\"\n\n", r2, r3);
    0x00017258 b 0x171ec                                     |         goto label_3;
                                                             |     }
    0x0001725c mov r0, r5                                    |     r0 = r5;
    0x00017260 bl 0x10dcc                                    |     r0 = close (r0);
    0x00017264 subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 == r0) {
    0x00017268 beq 0x172bc                                   |         goto label_10;
                                                             |     }
    0x0001726c bl 0x10d78                                    |     errno_location ();
    0x00017270 ldr r5, [pc, 0x1a0]                           |     
    0x00017274 mov r3, sb                                    |     r3 = sb;
    0x00017278 ldr r2, [pc, 0x19c]                           |     r2 = stderr;
    0x0001727c ldr r1, [pc, 0x1b8]                           |     r1 = "%s: error!: negative value %lld in \"%s\"\n";
    0x00017280 ldr r4, [r0]                                  |     r4 = *(r0);
    0x00017284 ldr r0, [r5]                                  |     r0 = *(0x17414);
    0x00017288 bl 0x10c7c                                    |     fprintf (r0, "%s: error!: negative value %lld in \"%s\"\n", r2, r3, r4, r5);
    0x0001728c mov r0, r4                                    |     r0 = r4;
    0x00017290 ldr r5, [r5]                                  |     r5 = *(0x17414);
    0x00017294 bl 0x10bc8                                    |     strerror (r0);
    0x00017298 str r4, [sp]                                  |     *(sp) = r4;
    0x0001729c ldr r3, [pc, 0x180]                           |     r3 = "%s: error!: cannot read \"%s\"\n";
    0x000172a0 mov r2, 8                                     |     r2 = 8;
    0x000172a4 ldr r1, [pc, 0x17c]                           |     r1 = *(0x17424);
    0x000172a8 str r0, [sp, 4]                               |     var_4h = r0;
    0x000172ac mov r0, r5                                    |     r0 = r5;
    0x000172b0 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4);
                                                             |     do {
                                                             | label_7:
    0x000172b4 mov sp, sl                                    |         
    0x000172b8 b 0x16f20                                     |         goto label_0;
                                                             | label_10:
    0x000172bc ldrd r2, r3, [fp, -0x64]                      |         __asm ("ldrd r2, r3, [var_64h]");
    0x000172c0 mov r1, 0                                     |         r1 = 0;
    0x000172c4 adds r6, r2, 0x80000000                       |         r6 = r2 + 0x80000000;
    0x000172c8 adc r7, r3, 0                                 |         __asm ("adc r7, r3, 0");
    0x000172cc mvn r0, 0                                     |         r0 = ~0;
    0x000172d0 cmp r7, r1                                    |         
    0x000172d4 cmpeq r6, r0                                  |         __asm ("cmpeq r6, r0");
                                                             |         if (r7 < r1) {
    0x000172d8 bls 0x17308                                   |             goto label_11;
                                                             |         }
    0x000172dc strd r2, r3, [sp]                             |         __asm ("strd r2, r3, [sp]");
    0x000172e0 ldr r3, [pc, 0x130]                           |         r3 = *(0x17414);
    0x000172e4 str sb, [sp, 8]                               |         var_8h = sb;
    0x000172e8 ldr r2, [pc, 0x12c]                           |         r2 = stderr;
    0x000172ec ldr r0, [r3]                                  |         r0 = *(0x17414);
    0x000172f0 ldr r1, [pc, 0x148]                           |         r1 = "_s:_error_:_close_failed_on___s_";
    0x000172f4 bl 0x10c7c                                    |         r0 = fprintf (r0, "_s:_error_:_close_failed_on___s_", r2, r3);
    0x000172f8 bl 0x10d78                                    |         errno_location ();
    0x000172fc mov r3, 0x16                                  |         r3 = 0x16;
    0x00017300 str r3, [r0]                                  |         *(r0) = r3;
    0x00017304 b 0x172b4                                     |         
                                                             |     } while (1);
                                                             | label_11:
    0x00017308 lsl r3, r2, 0x15                              |     r3 = r2 << 0x15;
    0x0001730c ldrb r2, [r4, 0xfc]                           |     r2 = *((r4 + 0xfc));
    0x00017310 mov sp, sl                                    |     
    0x00017314 bic r2, r2, 1                                 |     r2 = BIT_MASK (r2, 1);
    0x00017318 orr r2, r2, r3, lsr 31                        |     r2 |= (r3 >> 31);
    0x0001731c strb r2, [r4, 0xfc]                           |     *((r4 + 0xfc)) = r2;
    0x00017320 ldr r2, [r4, 0xe4]                            |     r2 = *((r4 + 0xe4));
    0x00017324 ldrd r0, r1, [r4, 0xd8]                       |     __asm ("ldrd r0, r1, [r4, 0xd8]");
    0x00017328 asr r3, r2, 0x1f                              |     r3 = r2 >> 0x1f;
    0x0001732c bl 0x19ad0                                    |     fcn_00019ad0 (r0);
    0x00017330 ldr r1, [pc, 0x10c]                           |     r1 = "_s:_error_:_value__lld_read_from_file___s__is_out_of_range";
    0x00017334 str r0, [r4, 0xe0]                            |     *((r4 + 0xe0)) = r0;
    0x00017338 mov r0, r8                                    |     r0 = r8;
    0x0001733c bl 0x10d48                                    |     r0 = strcmp (r0, r1);
    0x00017340 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00017344 moveq r0, 4                                   |         r0 = 4;
                                                             |     }
                                                             |     if (r0 != 0) {
    0x00017348 beq 0x173f0                                   |         
    0x0001734c ldr r1, [pc, 0xf4]                            |         r1 = "nand";
    0x00017350 mov r0, r8                                    |         r0 = r8;
    0x00017354 bl 0x10d48                                    |         r0 = strcmp (r0, "nand");
    0x00017358 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x0001735c moveq r0, 8                                   |             r0 = 8;
                                                             |         }
                                                             |         if (r0 == 0) {
    0x00017360 beq 0x173f0                                   |             goto label_12;
                                                             |         }
    0x00017364 ldr r1, [pc, 0xe0]                            |         r1 = "mlc_nand";
    0x00017368 mov r0, r8                                    |         r0 = r8;
    0x0001736c bl 0x10d48                                    |         r0 = strcmp (r0, "mlc_nand");
    0x00017370 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x00017374 moveq r0, 3                                   |             r0 = 3;
                                                             |         }
                                                             |         if (r0 == 0) {
    0x00017378 beq 0x173f0                                   |             goto label_12;
                                                             |         }
    0x0001737c ldr r1, [pc, 0xcc]                            |         r1 = *(0x1744c);
    0x00017380 mov r0, r8                                    |         r0 = r8;
    0x00017384 bl 0x10d48                                    |         r0 = strcmp (r0, r1);
    0x00017388 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x0001738c moveq r0, 2                                   |             r0 = 2;
                                                             |         }
                                                             |         if (r0 == 0) {
    0x00017390 beq 0x173f0                                   |             goto label_12;
                                                             |         }
    0x00017394 ldr r1, [pc, 0xb8]                            |         r1 = *(0x17450);
    0x00017398 mov r0, r8                                    |         r0 = r8;
    0x0001739c bl 0x10d48                                    |         r0 = strcmp (r0, r1);
    0x000173a0 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x000173a4 beq 0x173f0                                   |             goto label_12;
                                                             |         }
    0x000173a8 ldr r1, [pc, 0xa8]                            |         r1 = "absent";
    0x000173ac mov r0, r8                                    |         r0 = r8;
    0x000173b0 bl 0x10d48                                    |         r0 = strcmp (r0, "absent");
    0x000173b4 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x000173b8 moveq r0, 6                                   |             r0 = 6;
                                                             |         }
                                                             |         if (r0 == 0) {
    0x000173bc beq 0x173f0                                   |             goto label_12;
                                                             |         }
    0x000173c0 ldr r1, [pc, 0x94]                            |         r1 = "dataflash";
    0x000173c4 mov r0, r8                                    |         r0 = r8;
    0x000173c8 bl 0x10d48                                    |         r0 = strcmp (r0, "dataflash");
    0x000173cc cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x000173d0 moveq r0, 1                                   |             r0 = 1;
                                                             |         }
                                                             |         if (r0 == 0) {
    0x000173d4 beq 0x173f0                                   |             goto label_12;
                                                             |         }
    0x000173d8 ldr r1, [pc, 0x80]                            |         r1 = "ram";
    0x000173dc mov r0, r8                                    |         r0 = r8;
    0x000173e0 bl 0x10d48                                    |         r0 = strcmp (r0, "ram");
    0x000173e4 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x000173e8 moveq r0, 7                                   |             r0 = 7;
                                                             |         }
                                                             |         if (r0 != 0) {
    0x000173ec mvnne r0, 0                                   |             r0 = ~0;
                                                             |             goto label_12;
                                                             |         }
                                                             |     }
                                                             | label_12:
    0x000173f0 str r0, [r4, 0xc]                             |     *((r4 + 0xc)) = r0;
    0x000173f4 sub r0, r0, 4                                 |     r0 -= 4;
    0x000173f8 bics r3, r0, 4                                |     __asm ("bics r3, r0, 4");
    0x000173fc ldrb r3, [r4, 0xfc]                           |     r3 = *((r4 + 0xfc));
    0x00017400 bic r2, r3, 2                                 |     r2 = BIT_MASK (r3, 2);
                                                             |     if (r0 != 0) {
    0x00017404 moveq r3, 2                                   |         r3 = 2;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x00017408 movne r3, 0                                   |         r3 = 0;
                                                             |     }
    0x0001740c orr r3, r3, r2                                |     r3 |= r2;
    0x00017410 strb r3, [r4, 0xfc]                           |     *((r4 + 0xfc)) = r3;
    0x00017414 b 0x16f44                                     |     goto label_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/usr/sbin/ubiformat @ 0x18c2c */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.00018c2c ()              | void fcn_00018c2c (int32_t arg1) {
                                         |     int32_t var_24h;
                                         |     r0 = arg1;
    0x00018c2c str lr, [sp, -4]!         |     
    0x00018c30 ldr r1, [pc, 0x1c]        |     r1 = *(0x18c50);
    0x00018c34 sub sp, sp, 0x24          |     
    0x00018c38 mov r2, r0                |     r2 = r0;
    0x00018c3c mov r0, sp                |     r0 = sp;
    0x00018c40 bl 0x10d60                |     sprintf (r0, r1, r2)
    0x00018c44 mov r0, sp                |     r0 = sp;
    0x00018c48 bl 0x18a8c                |     fcn_00018a8c (r0);
    0x00018c4c add sp, sp, 0x24          |     
    0x00018c50 pop {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/usr/sbin/ubiformat @ 0x19144 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.00019144 ()              | void fcn_00019144 (int32_t arg1, int32_t arg2) {
                                         |     char * s;
                                         |     int32_t var_20h;
                                         |     r0 = arg1;
                                         |     r1 = arg2;
    0x00019144 push {r4, lr}             |     
    0x00019148 sub sp, sp, 0x20          |     
    0x0001914c mov r2, r0                |     r2 = r0;
    0x00019150 mov r4, r1                |     r4 = r1;
    0x00019154 mov r0, sp                |     r0 = sp;
    0x00019158 ldr r1, [pc, 0x14]        |     r1 = *(0x19170);
    0x0001915c bl 0x10d60                |     sprintf (r0, r1, r2)
    0x00019160 mov r1, r4                |     r1 = r4;
    0x00019164 mov r0, sp                |     r0 = sp;
    0x00019168 bl 0x18c58                |     fcn_00018c58 (r0, r1);
    0x0001916c add sp, sp, 0x20          |     
    0x00019170 pop {r4, pc}              |     
                                         | }

[*] Function sprintf used 20 times ubiformat