[*] Binary protection state of ubiformat

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


[*] Function fprintf 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 @ 0x10df0 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00010df0 ()                  | void fcn_00010df0 () {
                                             |     int32_t var_18ch;
                                             |     int32_t var_0h_2;
                                             |     int32_t var_0h;
                                             |     int32_t var_4h;
                                             |     /* [10] -r-x section size 36700 named .text */
    0x00010df0 push {r0, r1, r2, lr}         |     
    0x00010df4 bl 0x10d78                    |     errno_location ();
    0x00010df8 ldr r5, [pc, 0x40]            |     
    0x00010dfc ldr r2, [pc, 0x40]            |     r2 = stderr;
    0x00010e00 ldr r1, [pc, 0x40]            |     r1 = "libmtd";
    0x00010e04 ldr r4, [r0]                  |     r4 = *(r0);
    0x00010e08 ldr r0, [r5]                  |     r0 = *(0x10e3c);
    0x00010e0c bl 0x10c7c                    |     fprintf (r0, "libmtd", r2, r3, r4, r5)
    0x00010e10 mov r0, r4                    |     r0 = r4;
    0x00010e14 ldr r5, [r5]                  |     r5 = *(0x10e3c);
    0x00010e18 bl 0x10bc8                    |     strerror (r0);
    0x00010e1c str r4, [sp]                  |     *(sp) = r4;
    0x00010e20 ldr r3, [pc, 0x24]            |     r3 = "_s:_error_:_out_of_memory";
    0x00010e24 mov r2, 8                     |     r2 = 8;
    0x00010e28 ldr r1, [pc, 0x20]            |     r1 = *(0x10e4c);
    0x00010e2c str r0, [sp, 4]               |     var_4h = r0;
    0x00010e30 mov r0, r5                    |     r0 = r5;
    0x00010e34 bl 0x10c7c                    |     fprintf (r0, r1, r2, "_s:_error_:_out_of_memory", r4)
    0x00010e38 mvn r0, 0                     |     r0 = ~0;
    0x00010e3c bl 0x10d84                    |     exit (r0);
                                             |     if (? != ?) {
    0x00010e40 andeq sp, r2, r4, lsr r1      |         
                                             |     }
                                             |     if (? != ?) {
    0x00010e44 andeq fp, r1, fp, asr 24      |         
                                             |     }
                                             |     if (? != ?) {
    0x00010e48 andeq fp, r1, sl, lsr lr      |         
                                             |     }
                                             |     if (? != ?) {
    0x00010e4c andeq fp, r1, r6, ror 11      |         
                                             |     }
                                             |     /* Beware that this jump is a conditional jump.
                                             |      * r2dec transformed it as a return, due being the
                                             |      * last instruction. Please, check 'pdda' output
                                             |      * for more hints. */
    0x00010e50 andeq sl, r1, r4, lsr 15      |     return sl = r1 & (r4 >> 15);
                                             | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/ubiformat @ 0x12570 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00012570 ()                              | void fcn_00012570 (int32_t arg1, int32_t arg2) {
                                                         |     int32_t var_0h;
                                                         |     char * * endptr;
                                                         |     int32_t var_10h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x00012570 push {r0, r1, r2, r3, r4, r5, r6, lr}     |     
    0x00012574 mov r6, r1                                |     r6 = r1;
    0x00012578 mov r2, 0                                 |     r2 = 0;
    0x0001257c add r1, sp, 0xc                           |     r1 += endptr;
    0x00012580 mov r4, r0                                |     r4 = r0;
    0x00012584 bl 0x10c34                                |     strtoul (r0, r1, r2);
    0x00012588 ldrb r3, [r4]                             |     r3 = *(r4);
    0x0001258c cmp r3, 0                                 |     
    0x00012590 mov r5, r0                                |     r5 = r0;
                                                         |     if (r3 != 0) {
    0x00012594 beq 0x125a8                               |         
    0x00012598 ldr r3, [sp, 0xc]                         |         r3 = endptr;
    0x0001259c ldrb r3, [r3]                             |         r3 = *(r3);
    0x000125a0 cmp r3, 0                                 |         
                                                         |         if (r3 == 0) {
    0x000125a4 beq 0x125cc                               |             goto label_0;
                                                         |         }
                                                         |     }
    0x000125a8 ldr r0, [pc, 0x28]                        |     
    0x000125ac str r4, [sp]                              |     *(sp) = r4;
    0x000125b0 ldr r3, [pc, 0x24]                        |     r3 = stderr;
    0x000125b4 ldr r2, [pc, 0x24]                        |     r2 = "strtoul";
    0x000125b8 ldr r1, [pc, 0x24]                        |     r1 = "ubiformat";
    0x000125bc ldr r0, [r0]                              |     r0 = *(0x125d4);
    0x000125c0 bl 0x10c7c                                |     fprintf (r0, "ubiformat", "strtoul", r3, r4)
    0x000125c4 mov r3, 1                                 |     r3 = 1;
    0x000125c8 str r3, [r6]                              |     *(r6) = r3;
                                                         | label_0:
    0x000125cc mov r0, r5                                |     r0 = r5;
    0x000125d0 add sp, sp, 0x10                          |     
    0x000125d4 pop {r4, r5, r6, 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 @ 0x126e4 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.000126e4 ()                          | void fcn_000126e4 (char * * arg1, int32_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x000126e4 push {r4, r5, r6, r7, r8, lr}         |     
    0x000126e8 ldr r4, [pc, 0x12c]                   |     r4 = *(0x12818);
    0x000126ec mov r7, r0                            |     r7 = r0;
    0x000126f0 ldrb r3, [r4]                         |     r3 = *(r4);
    0x000126f4 mov r6, r1                            |     r6 = r1;
    0x000126f8 tst r3, 1                             |     
    0x000126fc mov r5, r2                            |     r5 = r2;
    0x00012700 beq 0x1276c                           |     
                                                     |     while (r0 != 0) {
    0x00012704 ldrb r3, [r4]                         |         r3 = *(r4);
    0x00012708 tst r3, 2                             |         
                                                     |         if ((r3 & 2) == 0) {
    0x0001270c bne 0x12720                           |             
    0x00012710 mov r2, r5                            |             r2 = r5;
    0x00012714 ldr r1, [pc, 0x104]                   |             r1 = *(0x1281c);
    0x00012718 ldr r0, [pc, 0x104]                   |             r0 = "ubiformat";
    0x0001271c bl 0x10bbc                            |             printf ("ubiformat", r1, r2);
                                                     |         }
    0x00012720 ldrb r3, [r4]                         |         r3 = *(r4);
    0x00012724 tst r3, 2                             |         
                                                     |         if ((r3 & 2) == 0) {
    0x00012728 bne 0x12734                           |             
    0x0001272c mov r0, 0xa                           |             r0 = 0xa;
    0x00012730 bl 0x10b98                            |             putchar (r0);
                                                     |         }
    0x00012734 ldrb r3, [r7, 0xfc]                   |         r3 = *((r7 + 0xfc));
    0x00012738 tst r3, 2                             |         
                                                     |         if ((r3 & 2) != 0) {
    0x0001273c bne 0x12784                           |             goto label_0;
                                                     |         }
    0x00012740 ldrb r3, [r4]                         |         r3 = *(r4);
    0x00012744 tst r3, 2                             |         
                                                     |         if ((r3 & 2) == 0) {
    0x00012748 bne 0x12754                           |             
    0x0001274c mov r0, 0xa                           |             r0 = 0xa;
    0x00012750 bl 0x10b98                            |             putchar (r0);
                                                     |         }
    0x00012754 ldr r3, [pc, 0xcc]                    |         r3 = "_s:_marking_block__d_bad";
    0x00012758 ldr r2, [pc, 0xc0]                    |         r2 = *(0x1281c);
    0x0001275c ldr r1, [pc, 0xc8]                    |         r1 = stderr;
    0x00012760 ldr r0, [r3]                          |         r0 = "_s:_marking_block__d_bad";
    0x00012764 bl 0x10c7c                            |         fprintf ("_s:_marking_block__d_bad", r1, r2, "_s:_marking_block__d_bad")
    0x00012768 b 0x1277c                             |         goto label_1;
    0x0001276c ldr r0, [pc, 0xbc]                    |         r0 = "%s: error!: bad blocks not supported by this flash\n";
    0x00012770 bl 0x125e8                            |         r0 = fcn_000125e8 ("%s: error!: bad blocks not supported by this flash\n");
    0x00012774 cmp r0, 0                             |         
    0x00012778 bne 0x12704                           |         
                                                     |     }
                                                     |     do {
                                                     | label_1:
    0x0001277c mvn r0, 0                             |         r0 = ~0;
    0x00012780 pop {r4, r5, r6, r7, r8, pc}          |         
                                                     | label_0:
    0x00012784 mov r2, r5                            |         r2 = r5;
    0x00012788 ldr r1, [r4, 0x30]                    |         r1 = *((r4 + 0x30));
    0x0001278c mov r0, r7                            |         r0 = r7;
    0x00012790 bl 0x17964                            |         r0 = fcn_00017964 (r0, r1);
    0x00012794 cmp r0, 0                             |         
    0x00012798 popne {r4, r5, r6, r7, r8, pc}        |         
    0x0001279c ldr r3, [r6, 0x20]                    |         r3 = *((r6 + 0x20));
    0x000127a0 mvn r2, 3                             |         r2 = ~3;
    0x000127a4 add r3, r3, 1                         |         r3++;
    0x000127a8 str r3, [r6, 0x20]                    |         *((r6 + 0x20)) = r3;
    0x000127ac ldr r3, [r6]                          |         r3 = *(r6);
    0x000127b0 str r2, [r3, r5, lsl 2]               |         offset_0 = r5 << 2;
                                                     |         *((r3 + offset_0)) = r2;
    0x000127b4 ldr r3, [r4, 0x38]                    |         r3 = *((r4 + 0x38));
    0x000127b8 cmn r3, 1                             |         
                                                     |         if (r3 != 1) {
    0x000127bc streq r5, [r4, 0x38]                  |             *((r4 + 0x38)) = r5;
                                                     |         }
    0x000127c0 ldr r3, [r4, 0x38]                    |         r3 = *((r4 + 0x38));
    0x000127c4 str r5, [r4, 0x38]                    |         *((r4 + 0x38)) = r5;
    0x000127c8 add r3, r3, 1                         |         r3++;
    0x000127cc cmp r5, r3                            |         
                                                     |         if (r5 != r3) {
    0x000127d0 ldreq r3, [r4, 0x3c]                  |             r3 = *((r4 + 0x3c));
                                                     |         }
                                                     |         if (r5 == r3) {
    0x000127d4 movne r3, 1                           |             r3 = 1;
                                                     |         }
                                                     |         if (r5 != r3) {
    0x000127d8 addeq r3, r3, 1                       |             r3++;
                                                     |         }
    0x000127dc str r3, [r4, 0x3c]                    |         *((r4 + 0x3c)) = r3;
    0x000127e0 ldr r3, [r4, 0x3c]                    |         r3 = *((r4 + 0x3c));
    0x000127e4 cmp r3, 3                             |         
                                                     |         if (r3 > 3) {
    0x000127e8 pople {r4, r5, r6, r7, r8, pc}        |             
                                                     |         }
    0x000127ec ldrb r3, [r4]                         |         r3 = *(r4);
    0x000127f0 tst r3, 2                             |         
                                                     |         if ((r3 & 2) == 0) {
    0x000127f4 bne 0x12800                           |             
    0x000127f8 mov r0, 0xa                           |             r0 = 0xa;
    0x000127fc bl 0x10b98                            |             putchar (r0);
                                                     |         }
    0x00012800 ldr r0, [pc, 0x20]                    |         
    0x00012804 mov r3, 4                             |         r3 = 4;
    0x00012808 ldr r2, [pc, 0x10]                    |         r2 = *(0x1281c);
    0x0001280c ldr r1, [pc, 0x20]                    |         r1 = "mark_it_as_bad_";
    0x00012810 ldr r0, [r0]                          |         r0 = "_s:_marking_block__d_bad";
    0x00012814 bl 0x10c7c                            |         fprintf ("_s:_marking_block__d_bad", "mark_it_as_bad_", r2, r3)
    0x00012818 b 0x1277c                             |         
                                                     |     } 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 @ 0x12838 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00012838 ()                                  | void fcn_00012838 (int32_t arg_30h, FILE * stream, int32_t arg_6ch, int32_t arg1, char * * arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_20h;
                                                             |     int32_t var_24h;
                                                             |     void * ptr;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_34h;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_3ch;
                                                             |     int32_t var_44h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00012838 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x0001283c ldr r4, [r1, 0xec]                            |     r4 = *((r1 + 0xec));
    0x00012840 sub sp, sp, 0x44                              |     
    0x00012844 str r0, [sp, 0x2c]                            |     var_2ch = r0;
    0x00012848 mov r6, r1                                    |     r6 = r1;
    0x0001284c add r0, r4, 0x3f                              |     r0 = r4 + 0x3f;
    0x00012850 mov r1, r4                                    |     r1 = r4;
    0x00012854 str r2, [sp, 0x30]                            |     var_30h = r2;
    0x00012858 str r3, [sp, 0x24]                            |     var_24h = r3;
    0x0001285c bl 0x199d4                                    |     r0 = fcn_000199d4 (r0, r1);
    0x00012860 mul r3, r0, r4                                |     r3 = r0 * r4;
    0x00012864 mov r0, r3                                    |     r0 = r3;
    0x00012868 str r3, [sp, 0x20]                            |     var_20h = r3;
    0x0001286c bl 0x10c28                                    |     r0 = malloc (r0);
    0x00012870 subs r3, r0, 0                                |     r3 = r0 - 0;
    0x00012874 str r3, [sp, 0x28]                            |     ptr = r3;
                                                             |     if (r3 == r0) {
    0x00012878 bne 0x128cc                                   |         
    0x0001287c bl 0x10d78                                    |         errno_location ();
    0x00012880 ldr r5, [pc, 0x450]                           |         
    0x00012884 ldr r3, [sp, 0x20]                            |         r3 = var_20h;
    0x00012888 ldr r2, [pc, 0x44c]                           |         r2 = stderr;
    0x0001288c ldr r1, [pc, 0x44c]                           |         r1 = "ubiformat";
    0x00012890 ldr r4, [r0]                                  |         r4 = *(r0);
    0x00012894 ldr r0, [r5]                                  |         r0 = *(0x12cd4);
    0x00012898 bl 0x10c7c                                    |         fprintf (r0, "ubiformat", r2, r3, r4, r5)
    0x0001289c mov r0, r4                                    |         r0 = r4;
    0x000128a0 ldr r5, [r5]                                  |         r5 = *(0x12cd4);
    0x000128a4 bl 0x10bc8                                    |         strerror (r0);
    0x000128a8 str r4, [sp]                                  |         *(sp) = r4;
    0x000128ac ldr r3, [pc, 0x430]                           |         r3 = "_s:_error_:_cannot_allocate__d_bytes_of_memory";
    0x000128b0 mov r2, 0xb                                   |         r2 = 0xb;
    0x000128b4 ldr r1, [pc, 0x42c]                           |         r1 = *(0x12ce4);
    0x000128b8 str r0, [sp, 4]                               |         var_4h = r0;
    0x000128bc mov r0, r5                                    |         r0 = r5;
    0x000128c0 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "_s:_error_:_cannot_allocate__d_bytes_of_memory", r4)
                                                             | label_1:
    0x000128c4 mvn r5, 0                                     |         r5 = ~0;
    0x000128c8 b 0x12ccc                                     |         goto label_5;
                                                             |     }
    0x000128cc ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x000128d0 mov r1, 0xff                                  |     r1 = 0xff;
    0x000128d4 bl 0x10d18                                    |     memset (r0, r1, r2);
    0x000128d8 ldr r5, [pc, 0x40c]                           |     r5 = "_serror__d___s_";
    0x000128dc ldr r4, [sp, 0x68]                            |     r4 = *(stream);
    0x000128e0 mvn r7, 0                                     |     r7 = ~0;
    0x000128e4 mov r8, r7                                    |     r8 = r7;
    0x000128e8 str r7, [sp, 0x3c]                            |     var_3ch = r7;
    0x000128ec str r7, [sp, 0x34]                            |     var_34h = r7;
    0x000128f0 str r7, [sp, 0x38]                            |     var_38h = r7;
    0x000128f4 str r7, [sp, 0x1c]                            |     var_1ch = r7;
                                                             |     do {
    0x000128f8 ldr r2, [r6, 0xe0]                            |         r2 = *((r6 + 0xe0));
    0x000128fc ldrb r3, [r5]                                 |         r3 = *(r5);
    0x00012900 cmp r2, r4                                    |         
    0x00012904 and r3, r3, 6                                 |         r3 &= 6;
                                                             |         if (r2 <= r4) {
    0x00012908 bgt 0x12950                                   |             
    0x0001290c cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00012910 bne 0x1291c                                   |                 
    0x00012914 mov r0, 0xa                                   |                 r0 = 0xa;
    0x00012918 bl 0x10b98                                    |                 putchar (r0);
                                                             |             }
    0x0001291c ldr r3, [sp, 0x6c]                            |             r3 = *(arg_6ch);
    0x00012920 cmp r3, 0                                     |             
                                                             |             if (r3 != 0) {
    0x00012924 bne 0x12c0c                                   |                 goto label_3;
                                                             |             }
    0x00012928 ldr r3, [sp, 0x1c]                            |             r3 = var_1ch;
    0x0001292c cmn r8, 1                                     |             
    0x00012930 cmnne r3, 1                                   |             __asm ("cmnne r3, 1");
                                                             |             if (r8 != 1) {
    0x00012934 bne 0x12c38                                   |                 goto label_6;
                                                             |             }
    0x00012938 ldr r2, [pc, 0x39c]                           |             r2 = stderr;
    0x0001293c ldr r1, [pc, 0x3ac]                           |             r1 = *(0x12cec);
                                                             | label_4:
    0x00012940 ldr r3, [pc, 0x390]                           |             r3 = *(0x12cd4);
    0x00012944 ldr r0, [r3]                                  |             r0 = *(0x12cd4);
    0x00012948 bl 0x10c7c                                    |             fprintf (r0, r1, r2, r3)
    0x0001294c b 0x12c0c                                     |             goto label_3;
                                                             |         }
    0x00012950 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00012954 bne 0x129a0                                   |             
    0x00012958 ldr r3, [sp, 0x68]                            |             r3 = *(stream);
    0x0001295c mov r0, 0x64                                  |             r0 = 0x64;
    0x00012960 rsb r1, r3, 1                                 |             r1 = 1 - r3;
    0x00012964 add r1, r1, r4                                |             r1 += r4;
    0x00012968 smull sl, fp, r1, r0                          |             sl:fp = r1 * r0;
    0x0001296c sub r2, r2, r3                                |             r2 -= r3;
    0x00012970 asr r3, r2, 0x1f                              |             r3 = r2 >> 0x1f;
    0x00012974 mov r0, sl                                    |             r0 = sl;
    0x00012978 mov r1, fp                                    |             r1 = fp;
    0x0001297c bl 0x19ad0                                    |             fcn_00019ad0 (r0);
    0x00012980 mov r3, r1                                    |             r3 = r1;
    0x00012984 mov r2, r0                                    |             r2 = r0;
    0x00012988 mov r1, r4                                    |             r1 = r4;
    0x0001298c ldr r0, [pc, 0x360]                           |             r0 = "_s:_error_:_no_eraseblocks_for_volume_table";
    0x00012990 bl 0x10bbc                                    |             printf ("_s:_error_:_no_eraseblocks_for_volume_table", r1, r2, r3);
    0x00012994 ldr r3, [pc, 0x35c]                           |             r3 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012998 ldr r0, [r3]                                  |             r0 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x0001299c bl 0x10c40                                    |             fflush ("ubiformat:_formatting_eraseblock__d_____2lld____complete__");
                                                             |         }
    0x000129a0 ldr r3, [sp, 0x24]                            |         r3 = var_24h;
    0x000129a4 ldr r3, [r3]                                  |         r3 = *(r3);
    0x000129a8 ldr sl, [r3, r4, lsl 2]                       |         offset_0 = r4 << 2;
                                                             |         sl = *((r3 + offset_0));
    0x000129ac cmn sl, 4                                     |         
                                                             |         if (sl != 4) {
    0x000129b0 beq 0x12b14                                   |             
    0x000129b4 ldrb sb, [r5]                                 |             sb = *(r5);
    0x000129b8 ands sb, sb, 8                                |             sb &= 8;
                                                             |             if (sb == sb) {
    0x000129bc ldrne sl, [r5, 0x20]                          |                 sl = *((r5 + 0x20));
                                                             |             }
                                                             |             if (sb == sb) {
    0x000129c0 ldrne sb, [r5, 0x24]                          |                 sb = *((r5 + 0x24));
                                                             |             }
                                                             |             if (sb == sb) {
    0x000129c4 bne 0x129dc                                   |                 
    0x000129c8 cmp sl, 0                                     |                 
                                                             |                 if (sl >= 0) {
    0x000129cc ldrlt r3, [sp, 0x24]                          |                     r3 = var_24h;
                                                             |                 }
                                                             |                 if (sl < 0) {
    0x000129d0 addge sl, sl, 1                               |                     sl++;
                                                             |                 }
                                                             |                 if (sl >= 0) {
    0x000129d4 ldrlt sl, [r3, 8]                             |                     sl = *((r3 + 8));
                                                             |                 }
                                                             |                 if (sl < 0) {
    0x000129d8 ldrlt sb, [r3, 0xc]                           |                     sb = *((r3 + 0xc));
                                                             |                     goto label_7;
                                                             |                 }
                                                             |             }
                                                             | label_7:
    0x000129dc mov r3, sb                                    |             r3 = sb;
    0x000129e0 mov r2, sl                                    |             r2 = sl;
    0x000129e4 ldr r1, [sp, 0x28]                            |             r1 = ptr;
    0x000129e8 ldr r0, [sp, 0x30]                            |             r0 = var_30h;
    0x000129ec bl 0x1538c                                    |             fcn_0001538c (r0, r1);
    0x000129f0 ldrb r3, [r5]                                 |             r3 = *(r5);
    0x000129f4 tst r3, 4                                     |             
                                                             |             if ((r3 & 4) != 0) {
    0x000129f8 beq 0x12a18                                   |                 
    0x000129fc mov r2, r4                                    |                 r2 = r4;
    0x00012a00 ldr r1, [pc, 0x2d4]                           |                 r1 = stderr;
    0x00012a04 ldr r0, [pc, 0x2f0]                           |                 r0 = stdout;
    0x00012a08 bl 0x10bbc                                    |                 printf (r0, r1, r2);
    0x00012a0c ldr r3, [pc, 0x2e4]                           |                 r3 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012a10 ldr r0, [r3]                                  |                 r0 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012a14 bl 0x10c40                                    |                 fflush ("ubiformat:_formatting_eraseblock__d_____2lld____complete__");
                                                             |             }
    0x00012a18 ldr fp, [pc, 0x2cc]                           |             fp = *(0x00012cec);
    0x00012a1c mov r3, r4                                    |             r3 = r4;
    0x00012a20 ldr r2, [fp, 0x30]                            |             r2 = *(arg_30h);
    0x00012a24 mov r1, r6                                    |             r1 = r6;
    0x00012a28 ldr r0, [sp, 0x2c]                            |             r0 = var_2ch;
    0x00012a2c bl 0x177c0                                    |             fcn_000177c0 ();
    0x00012a30 ldrb r3, [fp]                                 |             r3 = *(fp);
    0x00012a34 cmp r0, 0                                     |             
                                                             |             if (r0 != 0) {
    0x00012a38 beq 0x12ac0                                   |                 
    0x00012a3c tst r3, 2                                     |                 
                                                             |                 if ((r3 & 2) == 0) {
    0x00012a40 bne 0x12a4c                                   |                     
    0x00012a44 mov r0, 0xa                                   |                     r0 = 0xa;
    0x00012a48 bl 0x10b98                                    |                     r0 = putchar (r0);
                                                             |                 }
    0x00012a4c bl 0x10d78                                    |                 errno_location ();
    0x00012a50 ldr fp, [pc, 0x280]                           |                 fp = obj.stderr;
    0x00012a54 mov r3, r4                                    |                 r3 = r4;
    0x00012a58 ldr r2, [pc, 0x27c]                           |                 r2 = stderr;
    0x00012a5c ldr r1, [pc, 0x29c]                           |                 r1 = "_s:_eraseblock__d:_erase";
    0x00012a60 ldr sl, [r0]                                  |                 sl = *(r0);
    0x00012a64 mov sb, r0                                    |                 sb = r0;
    0x00012a68 ldr r0, [fp]                                  |                 r0 = *(fp);
    0x00012a6c bl 0x10c7c                                    |                 fprintf (r0, "_s:_eraseblock__d:_erase", r2, r3)
    0x00012a70 mov r0, sl                                    |                 r0 = sl;
    0x00012a74 ldr fp, [fp]                                  |                 fp = *(fp);
    0x00012a78 bl 0x10bc8                                    |                 strerror (r0);
    0x00012a7c ldr r3, [pc, 0x260]                           |                 r3 = "_s:_error_:_cannot_allocate__d_bytes_of_memory";
    0x00012a80 str sl, [sp]                                  |                 *(sp) = sl;
    0x00012a84 mov r2, 0xb                                   |                 r2 = 0xb;
    0x00012a88 ldr r1, [pc, 0x258]                           |                 r1 = *(0x12ce4);
    0x00012a8c str r0, [sp, 4]                               |                 var_4h = r0;
    0x00012a90 mov r0, fp                                    |                 r0 = fp;
    0x00012a94 bl 0x10c7c                                    |                 fprintf (r0, r1, r2, "_s:_error_:_cannot_allocate__d_bytes_of_memory")
    0x00012a98 ldr r3, [sb]                                  |                 r3 = *(sb);
    0x00012a9c cmp r3, 5                                     |                 
                                                             |                 if (r3 != 5) {
    0x00012aa0 bne 0x12c0c                                   |                     goto label_3;
                                                             |                 }
                                                             | label_2:
    0x00012aa4 mov r2, r4                                    |                 r2 = r4;
    0x00012aa8 ldr r1, [sp, 0x24]                            |                 r1 = var_24h;
    0x00012aac mov r0, r6                                    |                 r0 = r6;
    0x00012ab0 bl 0x126e4                                    |                 r0 = fcn_000126e4 (r0, r1);
    0x00012ab4 cmp r0, 0                                     |                 
                                                             |                 if (r0 == 0) {
    0x00012ab8 beq 0x12b14                                   |                     goto label_0;
                                                             |                 }
    0x00012abc b 0x12c0c                                     |                 goto label_3;
                                                             |             }
    0x00012ac0 ldr r2, [sp, 0x1c]                            |             r2 = var_1ch;
    0x00012ac4 ldr r1, [sp, 0x6c]                            |             r1 = *(arg_6ch);
    0x00012ac8 cmn r8, 1                                     |             
    0x00012acc cmnne r2, 1                                   |             __asm ("cmnne r2, 1");
                                                             |             if (r8 != 1) {
    0x00012ad0 moveq r2, 1                                   |                 r2 = 1;
                                                             |             }
                                                             |             if (r8 == 1) {
    0x00012ad4 movne r2, 0                                   |                 r2 = 0;
                                                             |             }
    0x00012ad8 eor r1, r1, 1                                 |             r1 ^= 1;
    0x00012adc tst r1, r2                                    |             
    0x00012ae0 and r3, r3, 4                                 |             r3 &= 4;
                                                             |             if ((r1 & r2) == 0) {
    0x00012ae4 beq 0x12b1c                                   |                 goto label_8;
                                                             |             }
    0x00012ae8 cmn r8, 1                                     |             
                                                             |             if (r8 != 1) {
    0x00012aec streq sl, [sp, 0x34]                          |                 var_34h = sl;
                                                             |             }
                                                             |             if (r8 != 1) {
    0x00012af0 streq sb, [sp, 0x38]                          |                 var_38h = sb;
                                                             |             }
                                                             |             if (r8 != 1) {
    0x00012af4 moveq r8, r4                                  |                 r8 = r4;
                                                             |             }
                                                             |             if (r8 == 1) {
    0x00012af8 movne r7, sl                                  |                 r7 = sl;
                                                             |             }
                                                             |             if (r8 == 1) {
    0x00012afc strne sb, [sp, 0x3c]                          |                 var_3ch = sb;
                                                             |             }
                                                             |             if (r8 == 1) {
    0x00012b00 strne r4, [sp, 0x1c]                          |                 var_1ch = r4;
                                                             |             }
    0x00012b04 cmp r3, 0                                     |             
                                                             |             if (r3 == 0) {
    0x00012b08 beq 0x12b14                                   |                 goto label_0;
                                                             |             }
    0x00012b0c ldr r0, [pc, 0x1f0]                           |             r0 = "%s: error!: failed to erase eraseblock %d\n";
    0x00012b10 bl 0x10c1c                                    |             puts ("%s: error!: failed to erase eraseblock %d\n");
                                                             |         }
                                                             | label_0:
    0x00012b14 add r4, r4, 1                                 |         r4++;
    0x00012b18 b 0x128f8                                     |         
                                                             |     } while (1);
                                                             | label_8:
    0x00012b1c cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00012b20 beq 0x12b40                                   |         
    0x00012b24 mov r3, sb                                    |         r3 = sb;
    0x00012b28 mov r2, sl                                    |         r2 = sl;
    0x00012b2c ldr r0, [pc, 0x1d4]                           |         r0 = "__do_not_write_EC__leave_for_vtbl";
    0x00012b30 bl 0x10bbc                                    |         printf ("__do_not_write_EC__leave_for_vtbl", r1, r2, r3);
    0x00012b34 ldr r3, [pc, 0x1bc]                           |         r3 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012b38 ldr r0, [r3]                                  |         r0 = "ubiformat:_formatting_eraseblock__d_____2lld____complete__";
    0x00012b3c bl 0x10c40                                    |         fflush ("ubiformat:_formatting_eraseblock__d_____2lld____complete__");
                                                             |     }
    0x00012b40 ldr r2, [sp, 0x20]                            |     r2 = var_20h;
    0x00012b44 mov r3, 0                                     |     r3 = 0;
    0x00012b48 str r2, [sp, 8]                               |     var_8h = r2;
    0x00012b4c ldr r2, [sp, 0x28]                            |     r2 = ptr;
    0x00012b50 str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00012b54 str r3, [sp, 0x10]                            |     var_10h = r3;
    0x00012b58 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00012b5c str r3, [sp]                                  |     *(sp) = r3;
    0x00012b60 str r2, [sp, 4]                               |     var_4h = r2;
    0x00012b64 mov r3, r4                                    |     r3 = r4;
    0x00012b68 ldr r2, [r5, 0x30]                            |     r2 = *((r5 + 0x30));
    0x00012b6c mov r1, r6                                    |     r1 = r6;
    0x00012b70 ldr r0, [sp, 0x2c]                            |     r0 = var_2ch;
    0x00012b74 bl 0x17c0c                                    |     r0 = fcn_00017c0c (r0, r1, r2, r3, r4, r5, r6);
    0x00012b78 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00012b7c beq 0x12b14                                   |         goto label_0;
                                                             |     }
    0x00012b80 ldrb r3, [r5]                                 |     r3 = *(r5);
    0x00012b84 tst r3, 6                                     |     
                                                             |     if ((r3 & 6) == 0) {
    0x00012b88 bne 0x12b94                                   |         
    0x00012b8c mov r0, 0xa                                   |         r0 = 0xa;
    0x00012b90 bl 0x10b98                                    |         r0 = putchar (r0);
                                                             |     }
    0x00012b94 bl 0x10d78                                    |     errno_location ();
    0x00012b98 ldr fp, [pc, 0x138]                           |     fp = obj.stderr;
    0x00012b9c ldr r3, [sp, 0x20]                            |     r3 = var_20h;
    0x00012ba0 ldr r2, [pc, 0x134]                           |     r2 = stderr;
    0x00012ba4 ldr r1, [pc, 0x160]                           |     r1 = "__write_EC__lld";
    0x00012ba8 ldr sl, [r0]                                  |     sl = *(r0);
    0x00012bac str r4, [sp]                                  |     *(sp) = r4;
    0x00012bb0 mov sb, r0                                    |     sb = r0;
    0x00012bb4 ldr r0, [fp]                                  |     r0 = *(fp);
    0x00012bb8 bl 0x10c7c                                    |     fprintf (r0, "__write_EC__lld", r2, r3, r4)
    0x00012bbc mov r0, sl                                    |     r0 = sl;
    0x00012bc0 ldr fp, [fp]                                  |     fp = *(fp);
    0x00012bc4 bl 0x10bc8                                    |     strerror (r0);
    0x00012bc8 ldr r3, [pc, 0x114]                           |     r3 = "_s:_error_:_cannot_allocate__d_bytes_of_memory";
    0x00012bcc str sl, [sp]                                  |     *(sp) = sl;
    0x00012bd0 mov r2, 0xb                                   |     r2 = 0xb;
    0x00012bd4 ldr r1, [pc, 0x10c]                           |     r1 = *(0x12ce4);
    0x00012bd8 str r0, [sp, 4]                               |     var_4h = r0;
    0x00012bdc mov r0, fp                                    |     r0 = fp;
    0x00012be0 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "_s:_error_:_cannot_allocate__d_bytes_of_memory")
    0x00012be4 ldr r3, [sb]                                  |     r3 = *(sb);
    0x00012be8 cmp r3, 5                                     |     
                                                             |     if (r3 != 5) {
    0x00012bec beq 0x12c18                                   |         
    0x00012bf0 ldr r2, [r5, 8]                               |         r2 = *((r5 + 8));
    0x00012bf4 ldr r3, [r6, 0xe8]                            |         r3 = *((r6 + 0xe8));
    0x00012bf8 cmp r2, r3                                    |         
                                                             |         if (r2 != r3) {
    0x00012bfc beq 0x12c0c                                   |             
    0x00012c00 ldr r1, [pc, 0xd4]                            |             r1 = stderr;
    0x00012c04 ldr r0, [pc, 0x104]                           |             r0 = "%s: error!: cannot write EC header (%d bytes buffer) to eraseblock %d\n";
    0x00012c08 bl 0x10bbc                                    |             printf ("%s: error!: cannot write EC header (%d bytes buffer) to eraseblock %d\n", r1);
                                                             |         }
                                                             | label_3:
    0x00012c0c ldr r0, [sp, 0x28]                            |         r0 = ptr;
    0x00012c10 bl 0x10de4                                    |         free (r0);
    0x00012c14 b 0x128c4                                     |         goto label_1;
                                                             |     }
    0x00012c18 mov r3, r4                                    |     r3 = r4;
    0x00012c1c ldr r2, [r5, 0x30]                            |     r2 = *((r5 + 0x30));
    0x00012c20 mov r1, r6                                    |     r1 = r6;
    0x00012c24 ldr r0, [sp, 0x2c]                            |     r0 = var_2ch;
    0x00012c28 bl 0x17fdc                                    |     r0 = fcn_00017fdc (r0, r1);
    0x00012c2c cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00012c30 beq 0x12b14                                   |         goto label_0;
                                                             |     }
    0x00012c34 b 0x12aa4                                     |     goto label_2;
                                                             | label_6:
    0x00012c38 ldr r3, [pc, 0xac]                            |     r3 = "_serror__d___s_";
    0x00012c3c ldrb r3, [r3]                                 |     r3 = *(r3);
    0x00012c40 tst r3, 4                                     |     
                                                             |     if ((r3 & 4) != 0) {
    0x00012c44 beq 0x12c5c                                   |         
    0x00012c48 ldr r3, [sp, 0x1c]                            |         r3 = var_1ch;
    0x00012c4c mov r2, r8                                    |         r2 = r8;
    0x00012c50 ldr r1, [pc, 0x84]                            |         r1 = stderr;
    0x00012c54 ldr r0, [pc, 0xb8]                            |         r0 = "_s:_may_be_sub_page_size_is_incorrect_";
    0x00012c58 bl 0x10bbc                                    |         printf ("_s:_may_be_sub_page_size_is_incorrect_", r1, r2, r3);
                                                             |     }
    0x00012c5c ldr r0, [sp, 0x30]                            |     r0 = var_30h;
    0x00012c60 bl 0x1509c                                    |     r0 = fcn_0001509c (r0);
    0x00012c64 subs r4, r0, 0                                |     r4 = r0 - 0;
                                                             |     if (r4 == r0) {
    0x00012c68 beq 0x12c0c                                   |         goto label_3;
                                                             |     }
    0x00012c6c ldr r3, [pc, 0x78]                            |     
    0x00012c70 ldr r2, [sp, 0x1c]                            |     r2 = var_1ch;
    0x00012c74 ldr r3, [r3, 0x30]                            |     r3 = "%s: error!: cannot write layout volume\n";
    0x00012c78 mov r1, r8                                    |     r1 = r8;
    0x00012c7c str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00012c80 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00012c84 str r4, [sp, 0x10]                            |     var_10h = r4;
    0x00012c88 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00012c8c ldr r3, [sp, 0x34]                            |     r3 = var_34h;
    0x00012c90 str r7, [sp, 8]                               |     var_8h = r7;
    0x00012c94 str r3, [sp]                                  |     *(sp) = r3;
    0x00012c98 ldr r3, [sp, 0x38]                            |     r3 = var_38h;
    0x00012c9c ldr r0, [sp, 0x30]                            |     r0 = var_30h;
    0x00012ca0 str r3, [sp, 4]                               |     var_4h = r3;
    0x00012ca4 bl 0x15ae8                                    |     r0 = fcn_00015ae8 (r0, r1, r2, r3, r4, r5);
    0x00012ca8 mov r5, r0                                    |     r5 = r0;
    0x00012cac mov r0, r4                                    |     r0 = r4;
    0x00012cb0 bl 0x10de4                                    |     free (r0);
    0x00012cb4 cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x00012cb8 ldrne r2, [pc, 0x1c]                          |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r5 != 0) {
    0x00012cbc ldrne r1, [pc, 0x54]                          |         r1 = "%s: error!: cannot write layout volume\n";
                                                             |         goto label_9;
                                                             |     }
                                                             |     if (r5 != 0) {
                                                             | label_9:
    0x00012cc0 bne 0x12940                                   |         goto label_4;
                                                             |     }
    0x00012cc4 ldr r0, [sp, 0x28]                            |     r0 = ptr;
    0x00012cc8 bl 0x10de4                                    |     free (r0);
                                                             | label_5:
    0x00012ccc mov r0, r5                                    |     r0 = r5;
    0x00012cd0 add sp, sp, 0x44                              |     
    0x00012cd4 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 @ 0x12d1c */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00012d1c ()                  | void fcn_00012d1c (int32_t arg1, int32_t arg2) {
                                             |     int32_t var_0h;
                                             |     int32_t var_4h;
                                             |     int32_t var_8h;
                                             |     char * buf;
                                             |     char * s;
                                             |     int32_t var_4ch;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
    0x00012d1c push {r4, r5, r6, r7, lr}     |     
    0x00012d20 mov r6, r1                    |     r6 = r1;
    0x00012d24 sub sp, sp, 0x4c              |     
    0x00012d28 mov r1, 0                     |     r1 = 0;
    0x00012d2c mov r5, r0                    |     r5 = r0;
    0x00012d30 bl 0x10d30                    |     r0 = open64 ();
    0x00012d34 cmn r0, 1                     |     
    0x00012d38 mov r4, r0                    |     r4 = r0;
                                             |     if (r0 == 1) {
    0x00012d3c beq 0x12e98                   |         goto label_2;
                                             |     }
    0x00012d40 mov r2, 0x32                  |     r2 = 0x32;
    0x00012d44 add r1, sp, 0x14              |     r1 += buf;
    0x00012d48 bl 0x10cac                    |     r0 = read (r0, r1, r2);
    0x00012d4c cmn r0, 1                     |     
                                             |     if (r0 != 1) {
    0x00012d50 bne 0x12da8                   |         goto label_3;
                                             |     }
    0x00012d54 bl 0x10d78                    |     errno_location ();
    0x00012d58 ldr r7, [pc, 0x144]           |     r7 = *(0x12ea0);
    0x00012d5c mov r3, r5                    |     r3 = r5;
    0x00012d60 ldr r2, [pc, 0x140]           |     r2 = stderr;
    0x00012d64 ldr r1, [pc, 0x140]           |     r1 = "libubi";
    0x00012d68 ldr r6, [r0]                  |     r6 = *(r0);
    0x00012d6c ldr r0, [r7]                  |     r0 = *(0x12ea0);
    0x00012d70 bl 0x10c7c                    |     fprintf (r0, "libubi", r2, r3, r4, r5, r6)
    0x00012d74 mov r0, r6                    |     r0 = r6;
    0x00012d78 ldr r5, [r7]                  |     r5 = *(0x12ea0);
    0x00012d7c bl 0x10bc8                    |     strerror (r0);
    0x00012d80 str r6, [sp]                  |     *(sp) = r6;
    0x00012d84 ldr r3, [pc, 0x124]           |     r3 = "%s: error!: cannot read \"%s\"\n";
    0x00012d88 mov r2, 8                     |     r2 = 8;
    0x00012d8c ldr r1, [pc, 0x120]           |     r1 = *(0x12eb0);
    0x00012d90 str r0, [sp, 4]               |     var_4h = r0;
    0x00012d94 mov r0, r5                    |     r0 = r5;
    0x00012d98 bl 0x10c7c                    |     fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4, r5, r6)
                                             |     do {
    0x00012d9c mov r0, r4                    |         r0 = r4;
    0x00012da0 bl 0x10dcc                    |         close (r0);
    0x00012da4 b 0x12e94                     |         goto label_4;
                                             | label_3:
    0x00012da8 cmp r0, 0x32                  |         
                                             |         if (r0 != 0x32) {
    0x00012dac bne 0x12dd8                   |             goto label_5;
                                             |         }
    0x00012db0 ldr r2, [pc, 0xf0]            |         r2 = stderr;
    0x00012db4 ldr r1, [pc, 0xfc]            |         r1 = "_serror__d___s_";
    0x00012db8 mov r3, r5                    |         r3 = r5;
                                             | label_0:
    0x00012dbc ldr r0, [pc, 0xe0]            |         
    0x00012dc0 ldr r0, [r0]                  |         r0 = *(0x12ea0);
    0x00012dc4 bl 0x10c7c                    |         r0 = fprintf (r0, "_serror__d___s_", r2, r3)
                                             | label_1:
    0x00012dc8 bl 0x10d78                    |         errno_location ();
    0x00012dcc mov r3, 0x16                  |         r3 = 0x16;
    0x00012dd0 str r3, [r0]                  |         *(r0) = r3;
    0x00012dd4 b 0x12d9c                     |         
                                             |     } while (1);
                                             | label_5:
    0x00012dd8 add r3, sp, 0x48              |     r3 += s;
    0x00012ddc add r0, r3, r0                |     r0 = r3 + r0;
    0x00012de0 mov r3, 0                     |     r3 = 0;
    0x00012de4 strb r3, [r0, -0x34]          |     buf = r3;
    0x00012de8 mov r2, r6                    |     r2 = r6;
    0x00012dec ldr r1, [pc, 0xc8]            |     r1 = "%s: error!: contents of \"%s\" is too long\n";
    0x00012df0 add r0, sp, 0x14              |     r0 += buf;
    0x00012df4 bl 0x10ce8                    |     r0 = sscanf (r0, "%s: error!: contents of \"%s\" is too long\n", r2);
    0x00012df8 cmp r0, 1                     |     
                                             |     if (r0 == 1) {
    0x00012dfc movne r3, r5                  |         r3 = r5;
                                             |     }
                                             |     if (r0 == 1) {
    0x00012e00 ldrne r2, [pc, 0xa0]          |         r2 = "libubi";
                                             |     }
                                             |     if (r0 != 1) {
    0x00012e04 ldrne r1, [pc, 0xb4]          |         r1 = "%s: error!: cannot read integer from \"%s\"\n\n";
                                             |         goto label_6;
                                             |     }
                                             |     if (r0 != 1) {
                                             | label_6:
    0x00012e08 bne 0x12dbc                   |         goto label_0;
                                             |     }
    0x00012e0c ldrd r2, r3, [r6]             |     __asm ("ldrd r2, r3, [r6]");
    0x00012e10 cmp r2, 0                     |     
    0x00012e14 sbcs r1, r3, 0                |     __asm ("sbcs r1, r3, 0");
                                             |     if (r2 < 0) {
    0x00012e18 bge 0x12e3c                   |         
    0x00012e1c strd r2, r3, [sp]             |         __asm ("strd r2, r3, [sp]");
    0x00012e20 ldr r3, [pc, 0x7c]            |         r3 = *(0x12ea0);
    0x00012e24 str r5, [sp, 8]               |         var_8h = r5;
    0x00012e28 ldr r2, [pc, 0x78]            |         r2 = stderr;
    0x00012e2c ldr r1, [pc, 0x90]            |         r1 = "%s: error!: cannot read integer from \"%s\"\n\n";
    0x00012e30 ldr r0, [r3]                  |         r0 = *(0x12ea0);
    0x00012e34 bl 0x10c7c                    |         fprintf (r0, "%s: error!: cannot read integer from \"%s\"\n\n", r2, r3, r4, r5)
    0x00012e38 b 0x12dc8                     |         goto label_1;
                                             |     }
    0x00012e3c mov r0, r4                    |     r0 = r4;
    0x00012e40 bl 0x10dcc                    |     r0 = close (r0);
    0x00012e44 subs r4, r0, 0                |     r4 = r0 - 0;
                                             |     if (r4 != r0) {
    0x00012e48 beq 0x12e98                   |         
    0x00012e4c bl 0x10d78                    |         errno_location ();
    0x00012e50 ldr r6, [pc, 0x4c]            |         r6 = *(0x12ea0);
    0x00012e54 mov r3, r5                    |         r3 = r5;
    0x00012e58 ldr r2, [pc, 0x48]            |         r2 = stderr;
    0x00012e5c ldr r1, [pc, 0x64]            |         r1 = "%s: error!: negative value %lld in \"%s\"\n";
    0x00012e60 ldr r4, [r0]                  |         r4 = *(r0);
    0x00012e64 ldr r0, [r6]                  |         r0 = *(0x12ea0);
    0x00012e68 bl 0x10c7c                    |         fprintf (r0, "%s: error!: negative value %lld in \"%s\"\n", r2, r3, r4, r5, r6)
    0x00012e6c mov r0, r4                    |         r0 = r4;
    0x00012e70 ldr r5, [r6]                  |         r5 = *(0x12ea0);
    0x00012e74 bl 0x10bc8                    |         strerror (r0);
    0x00012e78 str r4, [sp]                  |         *(sp) = r4;
    0x00012e7c ldr r3, [pc, 0x2c]            |         r3 = "%s: error!: cannot read \"%s\"\n";
    0x00012e80 mov r2, 8                     |         r2 = 8;
    0x00012e84 ldr r1, [pc, 0x28]            |         r1 = *(0x12eb0);
    0x00012e88 str r0, [sp, 4]               |         var_4h = r0;
    0x00012e8c mov r0, r5                    |         r0 = r5;
    0x00012e90 bl 0x10c7c                    |         fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4)
                                             | label_4:
    0x00012e94 mvn r4, 0                     |         r4 = ~0;
                                             |     }
                                             | label_2:
    0x00012e98 mov r0, r4                    |     r0 = r4;
    0x00012e9c add sp, sp, 0x4c              |     
    0x00012ea0 pop {r4, r5, r6, r7, 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 @ 0x12ecc */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00012ecc ()                      | void fcn_00012ecc (int32_t arg1, int32_t arg2) {
                                                 |     int32_t var_0h;
                                                 |     int32_t var_0h_2;
                                                 |     int32_t var_8h;
                                                 |     int32_t var_10h;
                                                 |     int32_t var_10h_2;
                                                 |     int32_t var_1ch;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x00012ecc push {r4, r5, lr}                 |     
    0x00012ed0 sub sp, sp, 0x1c                  |     
    0x00012ed4 mov r4, r1                        |     r4 = r1;
    0x00012ed8 add r1, sp, 0x10                  |     r1 += var_10h;
    0x00012edc mov r5, r0                        |     r5 = r0;
    0x00012ee0 bl 0x12d1c                        |     r0 = fcn_00012d1c (r0, r1);
    0x00012ee4 cmp r0, 0                         |     
                                                 |     if (r0 == 0) {
    0x00012ee8 bne 0x12f28                       |         
    0x00012eec ldrd r2, r3, [sp, 0x10]           |         __asm ("ldrd r2, r3, [var_10h]");
    0x00012ef0 cmp r2, 0x80000000                |         
    0x00012ef4 sbcs r1, r3, 0                    |         __asm ("sbcs r1, r3, 0");
                                                 |         if (r2 >= 0x80000000) {
    0x00012ef8 strlt r2, [r4]                    |             *(r4) = r2;
                                                 |         }
                                                 |         if (r2 < 0x80000000) {
    0x00012efc blt 0x12f2c                       |             goto label_0;
                                                 |         }
    0x00012f00 strd r2, r3, [sp]                 |         __asm ("strd r2, r3, [sp]");
    0x00012f04 ldr r3, [pc, 0x28]                |         r3 = *(0x12f30);
    0x00012f08 str r5, [sp, 8]                   |         var_8h = r5;
    0x00012f0c ldr r2, [pc, 0x24]                |         r2 = stderr;
    0x00012f10 ldr r0, [r3]                      |         r0 = *(0x12f30);
    0x00012f14 ldr r1, [pc, 0x20]                |         r1 = "libubi";
    0x00012f18 bl 0x10c7c                        |         r0 = fprintf (r0, "libubi", r2, r3, r4, r5)
    0x00012f1c bl 0x10d78                        |         errno_location ();
    0x00012f20 mov r3, 0x16                      |         r3 = 0x16;
    0x00012f24 str r3, [r0]                      |         *(r0) = r3;
                                                 |     }
    0x00012f28 mvn r0, 0                         |     r0 = ~0;
                                                 | label_0:
    0x00012f2c add sp, sp, 0x1c                  |     
    0x00012f30 pop {r4, r5, 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 @ 0x12fd8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00012fd8 ()                                      | void fcn_00012fd8 (int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     void * buf;
                                                                 |     int32_t var_10h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00012fd8 push {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr}     |     
    0x00012fdc mov r8, r1                                        |     r8 = r1;
    0x00012fe0 mov r1, 0                                         |     r1 = 0;
    0x00012fe4 mov r5, r0                                        |     r5 = r0;
    0x00012fe8 mov r7, r2                                        |     r7 = r2;
    0x00012fec bl 0x10d30                                        |     r0 = open64 ();
    0x00012ff0 cmn r0, 1                                         |     
    0x00012ff4 mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 1) {
    0x00012ff8 beq 0x13140                                       |         goto label_2;
                                                                 |     }
    0x00012ffc mov r2, r7                                        |     r2 = r7;
    0x00013000 mov r1, r8                                        |     r1 = r8;
    0x00013004 bl 0x10cac                                        |     r0 = read (r0, r1, r2);
    0x00013008 cmn r0, 1                                         |     
    0x0001300c mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 != 1) {
    0x00013010 bne 0x13068                                       |         goto label_3;
                                                                 |     }
                                                                 | label_0:
    0x00013014 bl 0x10d78                                        |     errno_location ();
    0x00013018 ldr r7, [pc, 0x12c]                               |     r7 = *(0x13148);
    0x0001301c mov r3, r5                                        |     r3 = r5;
    0x00013020 ldr r2, [pc, 0x128]                               |     r2 = stderr;
    0x00013024 ldr r1, [pc, 0x128]                               |     r1 = "libubi";
    0x00013028 ldr r6, [r0]                                      |     r6 = *(r0);
    0x0001302c ldr r0, [r7]                                      |     r0 = *(0x13148);
    0x00013030 bl 0x10c7c                                        |     fprintf (r0, "libubi", r2, r3, r4, r5, r6)
    0x00013034 mov r0, r6                                        |     r0 = r6;
    0x00013038 ldr r5, [r7]                                      |     r5 = *(0x13148);
    0x0001303c bl 0x10bc8                                        |     strerror (r0);
    0x00013040 str r6, [sp]                                      |     *(sp) = r6;
    0x00013044 ldr r3, [pc, 0x10c]                               |     r3 = "%s: error!: cannot read \"%s\"\n";
    0x00013048 mov r2, 8                                         |     r2 = 8;
    0x0001304c ldr r1, [pc, 0x108]                               |     r1 = *(0x13158);
    0x00013050 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00013054 mov r0, r5                                        |     r0 = r5;
    0x00013058 bl 0x10c7c                                        |     fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4, r5, r6)
                                                                 |     do {
    0x0001305c mov r0, r4                                        |         r0 = r4;
    0x00013060 bl 0x10dcc                                        |         close (r0);
    0x00013064 b 0x1313c                                         |         goto label_4;
                                                                 | label_3:
    0x00013068 cmp r7, r0                                        |         
                                                                 |         if (r7 != r0) {
    0x0001306c bne 0x13098                                       |             goto label_5;
                                                                 |         }
    0x00013070 ldr r0, [pc, 0xd4]                                |         
    0x00013074 mov r3, r5                                        |         r3 = r5;
    0x00013078 ldr r2, [pc, 0xd0]                                |         r2 = stderr;
    0x0001307c ldr r1, [pc, 0xdc]                                |         r1 = "_serror__d___s_";
    0x00013080 ldr r0, [r0]                                      |         r0 = *(0x13148);
    0x00013084 bl 0x10c7c                                        |         r0 = fprintf (r0, "_serror__d___s_", r2, r3)
                                                                 | label_1:
    0x00013088 bl 0x10d78                                        |         errno_location ();
    0x0001308c mov r3, 0x16                                      |         r3 = 0x16;
    0x00013090 str r3, [r0]                                      |         *(r0) = r3;
    0x00013094 b 0x1305c                                         |         
                                                                 |     } while (1);
                                                                 | label_5:
    0x00013098 mov r3, 0                                         |     r3 = 0;
    0x0001309c strb r3, [r8, r0]                                 |     *((r8 + r0)) = r3;
    0x000130a0 mov r2, 1                                         |     r2 = 1;
    0x000130a4 add r1, sp, 0xc                                   |     r1 += buf;
    0x000130a8 mov r0, r4                                        |     r0 = r4;
    0x000130ac bl 0x10cac                                        |     r0 = read (r0, r1, r2);
    0x000130b0 cmp r0, 1                                         |     
                                                                 |     if (r0 == 1) {
    0x000130b4 beq 0x13014                                       |         goto label_0;
                                                                 |     }
    0x000130b8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000130bc beq 0x130e0                                       |         
    0x000130c0 ldr r0, [pc, 0x84]                                |         
    0x000130c4 str r7, [sp]                                      |         *(sp) = r7;
    0x000130c8 mov r3, r5                                        |         r3 = r5;
    0x000130cc ldr r2, [pc, 0x7c]                                |         r2 = stderr;
    0x000130d0 ldr r1, [pc, 0x8c]                                |         r1 = "%s: error!: contents of \"%s\" is too long\n";
    0x000130d4 ldr r0, [r0]                                      |         r0 = *(0x13148);
    0x000130d8 bl 0x10c7c                                        |         fprintf (r0, "%s: error!: contents of \"%s\" is too long\n", r2, r3)
    0x000130dc b 0x13088                                         |         goto label_1;
                                                                 |     }
    0x000130e0 mov r0, r4                                        |     r0 = r4;
    0x000130e4 bl 0x10dcc                                        |     r0 = close (r0);
    0x000130e8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000130ec moveq r4, r6                                      |         r4 = r6;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x000130f0 beq 0x13140                                       |         
    0x000130f4 bl 0x10d78                                        |         errno_location ();
    0x000130f8 ldr r6, [pc, 0x4c]                                |         r6 = *(0x13148);
    0x000130fc mov r3, r5                                        |         r3 = r5;
    0x00013100 ldr r2, [pc, 0x48]                                |         r2 = stderr;
    0x00013104 ldr r1, [pc, 0x5c]                                |         r1 = "_s:_error_:_file___s__contains_too_much_data_____d_bytes_";
    0x00013108 ldr r4, [r0]                                      |         r4 = *(r0);
    0x0001310c ldr r0, [r6]                                      |         r0 = *(0x13148);
    0x00013110 bl 0x10c7c                                        |         fprintf (r0, "_s:_error_:_file___s__contains_too_much_data_____d_bytes_", r2, r3, r4, r5, r6)
    0x00013114 mov r0, r4                                        |         r0 = r4;
    0x00013118 ldr r5, [r6]                                      |         r5 = *(0x13148);
    0x0001311c bl 0x10bc8                                        |         strerror (r0);
    0x00013120 str r4, [sp]                                      |         *(sp) = r4;
    0x00013124 ldr r3, [pc, 0x2c]                                |         r3 = "%s: error!: cannot read \"%s\"\n";
    0x00013128 mov r2, 8                                         |         r2 = 8;
    0x0001312c ldr r1, [pc, 0x28]                                |         r1 = *(0x13158);
    0x00013130 str r0, [sp, 4]                                   |         var_4h = r0;
    0x00013134 mov r0, r5                                        |         r0 = r5;
    0x00013138 bl 0x10c7c                                        |         fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4)
                                                                 | label_4:
    0x0001313c mvn r4, 0                                         |         r4 = ~0;
                                                                 |     }
                                                                 | label_2:
    0x00013140 mov r0, r4                                        |     r0 = r4;
    0x00013144 add sp, sp, 0x10                                  |     
    0x00013148 pop {r4, r5, r6, r7, r8, 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 @ 0x1316c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0001316c ()                                      | void fcn_0001316c (int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_8h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0001316c push {r0, r1, r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x00013170 mov r7, r1                                        |     r7 = r1;
    0x00013174 mov sl, r0                                        |     sl = r0;
    0x00013178 bl 0x10d90                                        |     r0 = strlen (r0);
    0x0001317c mov r4, r0                                        |     r4 = r0;
    0x00013180 mov sb, r0                                        |     sb = r0;
    0x00013184 mov r0, r7                                        |     r0 = r7;
    0x00013188 bl 0x10d90                                        |     r0 = strlen (r0);
    0x0001318c add r6, r4, r0                                    |     r6 = r4 + r0;
    0x00013190 add r6, r6, 2                                     |     r6 += 2;
    0x00013194 mov r8, r0                                        |     r8 = r0;
    0x00013198 mov r0, r6                                        |     r0 = r6;
    0x0001319c bl 0x10c28                                        |     r0 = malloc (r0);
    0x000131a0 subs r5, r0, 0                                    |     r5 = r0 - 0;
                                                                 |     if (r5 != r0) {
    0x000131a4 bne 0x131fc                                       |         goto label_0;
                                                                 |     }
    0x000131a8 bl 0x10d78                                        |     errno_location ();
    0x000131ac ldr r7, [pc, 0x80]                                |     r7 = *(0x13230);
    0x000131b0 mov r3, r6                                        |     r3 = r6;
    0x000131b4 ldr r2, [pc, 0x7c]                                |     r2 = stderr;
    0x000131b8 ldr r1, [pc, 0x7c]                                |     r1 = "libubi";
    0x000131bc ldr r4, [r0]                                      |     r4 = *(r0);
    0x000131c0 ldr r0, [r7]                                      |     r0 = *(0x13230);
    0x000131c4 bl 0x10c7c                                        |     fprintf (r0, "libubi", r2, r3, r4)
    0x000131c8 mov r0, r4                                        |     r0 = r4;
    0x000131cc ldr r6, [r7]                                      |     r6 = *(0x13230);
    0x000131d0 bl 0x10bc8                                        |     strerror (r0);
    0x000131d4 str r4, [sp]                                      |     *(sp) = r4;
    0x000131d8 ldr r3, [pc, 0x60]                                |     r3 = "%s: error!: cannot allocate %d bytes\n";
    0x000131dc mov r2, 8                                         |     r2 = 8;
    0x000131e0 ldr r1, [pc, 0x5c]                                |     r1 = *(0x13240);
    0x000131e4 str r0, [sp, 4]                                   |     var_4h = r0;
    0x000131e8 mov r0, r6                                        |     r0 = r6;
    0x000131ec bl 0x10c7c                                        |     fprintf (r0, r1, r2, "%s: error!: cannot allocate %d bytes\n", r4)
                                                                 |     do {
    0x000131f0 mov r0, r5                                        |         r0 = r5;
    0x000131f4 add sp, sp, 8                                     |         
    0x000131f8 pop {r4, r5, r6, r7, r8, sb, sl, pc}              |         
                                                                 | label_0:
    0x000131fc mov r2, r4                                        |         r2 = r4;
    0x00013200 mov r1, sl                                        |         r1 = sl;
    0x00013204 bl 0x10c10                                        |         memcpy (r0, r1, r2);
    0x00013208 add r3, r5, r4                                    |         r3 = r5 + r4;
    0x0001320c ldrb r3, [r3, -1]                                 |         r3 = *((r3 - 1));
    0x00013210 add r2, r8, 1                                     |         r2 = r8 + 1;
    0x00013214 cmp r3, 0x2f                                      |         
                                                                 |         if (r3 == 0x2f) {
    0x00013218 addne r4, r4, 1                                   |             r4++;
                                                                 |         }
                                                                 |         if (r3 == 0x2f) {
    0x0001321c movne r3, 0x2f                                    |             r3 = 0x2f;
                                                                 |         }
                                                                 |         if (r3 == 0x2f) {
    0x00013220 strbne r3, [r5, sb]                               |             *((r5 + sb)) = r3;
                                                                 |         }
    0x00013224 mov r1, r7                                        |         r1 = r7;
    0x00013228 add r0, r5, r4                                    |         r0 = r5 + r4;
    0x0001322c bl 0x10c10                                        |         memcpy (r0, r1, r2);
    0x00013230 b 0x131f0                                         |         
                                                                 |     } 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 @ 0x13248 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00013248 ()                  | void fcn_00013248 (int32_t arg1) {
                                             |     int32_t var_0h;
                                             |     int32_t var_4h;
                                             |     int32_t var_8h;
                                             |     int32_t var_18h;
                                             |     int32_t var_28h;
                                             |     int32_t var_28h_2;
                                             |     int32_t var_74h;
                                             |     r0 = arg1;
    0x00013248 push {r4, r5, r6, r7, lr}     |     
    0x0001324c sub sp, sp, 0x74              |     
    0x00013250 add r1, sp, 8                 |     r1 += var_8h;
    0x00013254 mov r5, r0                    |     r5 = r0;
    0x00013258 bl 0x10bd4                    |     r0 = stat64 ();
    0x0001325c cmp r0, 0                     |     
                                             |     if (r0 >= 0) {
    0x00013260 bge 0x132b8                   |         goto label_2;
                                             |     }
    0x00013264 bl 0x10d78                    |     errno_location ();
    0x00013268 ldr r6, [pc, 0xc8]            |     r6 = *(0x13334);
    0x0001326c ldr r2, [pc, 0xc8]            |     r2 = stderr;
    0x00013270 ldr r1, [pc, 0xc8]            |     r1 = "libubi";
    0x00013274 mov r3, r5                    |     r3 = r5;
    0x00013278 ldr r4, [r0]                  |     r4 = *(r0);
                                             |     do {
                                             | label_1:
    0x0001327c ldr r0, [r6]                  |         r0 = *(r6);
    0x00013280 bl 0x10c7c                    |         fprintf (r0, "libubi", r2, r3, r4, r5, r6)
    0x00013284 mov r0, r4                    |         r0 = r4;
    0x00013288 ldr r5, [r6]                  |         r5 = *(r6);
    0x0001328c bl 0x10bc8                    |         strerror (r0);
    0x00013290 str r4, [sp]                  |         *(sp) = r4;
    0x00013294 ldr r3, [pc, 0xa8]            |         r3 = "%s: error!: cannot stat \"%s\"\n";
    0x00013298 mov r2, 8                     |         r2 = 8;
    0x0001329c ldr r1, [pc, 0xa4]            |         r1 = *(0x13344);
    0x000132a0 str r0, [sp, 4]               |         var_4h = r0;
    0x000132a4 mov r0, r5                    |         r0 = r5;
    0x000132a8 bl 0x10c7c                    |         fprintf (r0, r1, r2, "%s: error!: cannot stat \"%s\"\n", r4)
    0x000132ac mvn r0, 0                     |         r0 = ~0;
                                             | label_0:
    0x000132b0 add sp, sp, 0x74              |         
    0x000132b4 pop {r4, r5, r6, r7, pc}      |         
                                             | label_2:
    0x000132b8 ldr r3, [sp, 0x18]            |         r3 = var_18h;
    0x000132bc and r3, r3, 0xf000            |         r3 &= 0xf000;
    0x000132c0 cmp r3, 0x2000                |         
                                             |         if (r3 == 0x2000) {
    0x000132c4 beq 0x132e8                   |             goto label_3;
                                             |         }
    0x000132c8 bl 0x10d78                    |         errno_location ();
    0x000132cc mov r4, 0x16                  |         r4 = 0x16;
    0x000132d0 ldr r6, [pc, 0x60]            |         r6 = *(0x13334);
    0x000132d4 mov r3, r5                    |         r3 = r5;
    0x000132d8 ldr r2, [pc, 0x5c]            |         r2 = stderr;
    0x000132dc ldr r1, [pc, 0x68]            |         r1 = "_serror__d___s_";
    0x000132e0 str r4, [r0]                  |         *(r0) = r4;
    0x000132e4 b 0x1327c                     |         
                                             |     } while (1);
                                             | label_3:
    0x000132e8 ldrd r6, r7, [sp, 0x28]       |     __asm ("ldrd r6, r7, [var_28h]");
    0x000132ec mov r1, r7                    |     r1 = r7;
    0x000132f0 mov r0, r6                    |     r0 = r6;
    0x000132f4 bl 0x10c04                    |     gnu_dev_major ();
    0x000132f8 mov r1, r7                    |     r1 = r7;
    0x000132fc mov r4, r0                    |     r4 = r0;
    0x00013300 mov r0, r6                    |     r0 = r6;
    0x00013304 bl 0x10c4c                    |     gnu_dev_minor ();
    0x00013308 cmp r4, 0x5a                  |     
                                             |     if (r4 != 0x5a) {
    0x0001330c addeq r0, r0, r0, lsr 31      |         r0 += (r0 >> 31);
                                             |     }
    0x00013310 asreq r0, r0, 1               |     __asm ("asreq r0, r0, 1");
                                             |     if (r4 == 0x5a) {
    0x00013314 beq 0x132b0                   |         goto label_0;
                                             |     }
    0x00013318 bl 0x10d78                    |     errno_location ();
    0x0001331c mov r4, 0x16                  |     r4 = 0x16;
    0x00013320 ldr r6, [pc, 0x10]            |     r6 = *(0x13334);
    0x00013324 mov r3, r5                    |     r3 = r5;
    0x00013328 ldr r2, [pc, 0xc]             |     r2 = stderr;
    0x0001332c ldr r1, [pc, 0x1c]            |     r1 = "%s: error!: \"%s\" is not a character device\n";
    0x00013330 str r4, [r0]                  |     *(r0) = r4;
    0x00013334 b 0x1327c                     |     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 @ 0x13354 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.00013354 ()              | void fcn_00013354 (int32_t arg1, int32_t arg2) {
                                         |     int32_t var_0h;
                                         |     int32_t var_4h;
                                         |     char * s;
                                         |     int32_t var_40h;
                                         |     r0 = arg1;
                                         |     r1 = arg2;
    0x00013354 push {r4, r5, r6, lr}     |     
    0x00013358 sub sp, sp, 0x40          |     
    0x0001335c mov r4, r1                |     r4 = r1;
    0x00013360 mov r5, r2                |     r5 = r2;
    0x00013364 add r1, sp, 0xc           |     r1 += s;
    0x00013368 mov r2, 0x32              |     r2 = 0x32;
    0x0001336c mov r6, r0                |     r6 = r0;
    0x00013370 bl 0x12fd8                |     r0 = fcn_00012fd8 (r0, r1);
    0x00013374 cmp r0, 0                 |     
                                         |     if (r0 < 0) {
    0x00013378 blt 0x133c0               |         goto label_1;
                                         |     }
    0x0001337c mov r3, r5                |     r3 = r5;
    0x00013380 mov r2, r4                |     r2 = r4;
    0x00013384 ldr r1, [pc, 0x8c]        |     r1 = *(0x13414);
    0x00013388 add r0, sp, 0xc           |     r0 += s;
    0x0001338c bl 0x10ce8                |     r0 = sscanf (r0, r1, r2);
    0x00013390 cmp r0, 2                 |     
                                         |     if (r0 == 2) {
    0x00013394 beq 0x133c8               |         goto label_2;
                                         |     }
    0x00013398 bl 0x10d78                |     errno_location ();
    0x0001339c mov r3, 0x16              |     r3 = 0x16;
    0x000133a0 ldr r2, [pc, 0x74]        |     r2 = "_d:_d";
    0x000133a4 ldr r1, [pc, 0x74]        |     r1 = "libubi";
    0x000133a8 str r3, [r0]              |     *(r0) = r3;
    0x000133ac ldr r0, [pc, 0x70]        |     
    0x000133b0 mov r3, r6                |     r3 = r6;
    0x000133b4 ldr r0, [r0]              |     r0 = "%s: error!: \"%s\" does not have major:minor format\n";
    0x000133b8 bl 0x10c7c                |     fprintf ("%s: error!: \"%s\" does not have major:minor format\n", "libubi", "_d:_d", r3)
                                         | label_0:
    0x000133bc mvn r0, 0                 |     r0 = ~0;
                                         |     do {
                                         | label_1:
    0x000133c0 add sp, sp, 0x40          |         
    0x000133c4 pop {r4, r5, r6, pc}      |         
                                         | label_2:
    0x000133c8 ldr r3, [r4]              |         r3 = *(r4);
    0x000133cc cmp r3, 0                 |         
                                         |         if (r3 < 0) {
    0x000133d0 blt 0x133e4               |             goto label_3;
                                         |         }
    0x000133d4 ldr r3, [r5]              |         r3 = *(r5);
    0x000133d8 cmp r3, 0                 |         
                                         |         if (r3 < 0) {
    0x000133dc movge r0, 0               |             r0 = 0;
                                         |         }
    0x000133e0 bge 0x133c0               |         
                                         |     } while (r3 >= 0);
                                         | label_3:
    0x000133e4 bl 0x10d78                |     errno_location ();
    0x000133e8 mov r3, 0x16              |     r3 = 0x16;
    0x000133ec ldr r2, [pc, 0x28]        |     r2 = "_d:_d";
    0x000133f0 ldr r1, [pc, 0x30]        |     r1 = stderr;
    0x000133f4 str r3, [r0]              |     *(r0) = r3;
    0x000133f8 ldr r0, [pc, 0x24]        |     
    0x000133fc ldr r3, [r5]              |     r3 = *(r5);
    0x00013400 str r6, [sp, 4]           |     var_4h = r6;
    0x00013404 str r3, [sp]              |     *(sp) = r3;
    0x00013408 ldr r3, [r4]              |     r3 = *(r4);
    0x0001340c ldr r0, [r0]              |     r0 = "%s: error!: \"%s\" does not have major:minor format\n";
    0x00013410 bl 0x10c7c                |     fprintf ("%s: error!: \"%s\" does not have major:minor format\n", r1, "_d:_d", r3, r4, r5, r6)
    0x00013414 b 0x133bc                 |     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 @ 0x13480 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00013480 ()                      | void fcn_00013480 (int32_t arg1) {
                                                 |     int32_t var_0h;
                                                 |     int32_t var_4h;
                                                 |     r0 = arg1;
    0x00013480 push {r0, r1, r4, r5, r6, lr}     |     
    0x00013484 ldr r5, [pc, 0x50]                |     
    0x00013488 mov r6, r0                        |     r6 = r0;
    0x0001348c bl 0x10d78                        |     errno_location ();
    0x00013490 mov r3, r6                        |     r3 = r6;
    0x00013494 ldr r2, [pc, 0x44]                |     r2 = stderr;
    0x00013498 ldr r1, [pc, 0x44]                |     r1 = "libubi";
    0x0001349c ldr r4, [r0]                      |     r4 = *(r0);
    0x000134a0 ldr r0, [r5]                      |     r0 = *(0x134d8);
    0x000134a4 bl 0x10c7c                        |     fprintf (r0, "libubi", r2, r3, r4)
    0x000134a8 mov r0, r4                        |     r0 = r4;
    0x000134ac ldr r5, [r5]                      |     r5 = *(0x134d8);
    0x000134b0 bl 0x10bc8                        |     strerror (r0);
    0x000134b4 str r4, [sp]                      |     *(sp) = r4;
    0x000134b8 ldr r3, [pc, 0x28]                |     r3 = "%s: error!: cannot open \"%s\"\n";
    0x000134bc mov r2, 8                         |     r2 = 8;
    0x000134c0 ldr r1, [pc, 0x24]                |     r1 = *(0x134e8);
    0x000134c4 str r0, [sp, 4]                   |     var_4h = r0;
    0x000134c8 mov r0, r5                        |     r0 = r5;
    0x000134cc bl 0x10c7c                        |     fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
    0x000134d0 mvn r0, 0                         |     r0 = ~0;
    0x000134d4 add sp, sp, 8                     |     
    0x000134d8 pop {r4, r5, r6, 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 @ 0x13614 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00013614 ()                              | void fcn_00013614 () {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_4h;
                                                         |     int32_t var_ch;
                                                         |     int32_t var_10h;
    0x00013614 push {r0, r1, r2, r3, r4, r5, r6, lr}     |     
    0x00013618 mov r1, 0x68                              |     r1 = 0x68;
    0x0001361c mov r0, 1                                 |     r0 = 1;
    0x00013620 bl 0x10c64                                |     r0 = calloc (r0, r1);
    0x00013624 subs r4, r0, 0                            |     r4 = r0 - 0;
                                                         |     if (r4 == r0) {
    0x00013628 beq 0x13698                               |         goto label_1;
                                                         |     }
    0x0001362c ldr r1, [pc, 0x2fc]                       |     r1 = *(0x1392c);
    0x00013630 ldr r0, [pc, 0x2fc]                       |     r0 = "class/misc/ubi_ctrl/";
    0x00013634 bl 0x1316c                                |     r0 = fcn_0001316c ("class/misc/ubi_ctrl/", r1);
    0x00013638 cmp r0, 0                                 |     
    0x0001363c str r0, [r4, 4]                           |     *((r4 + 4)) = r0;
                                                         |     if (r0 == 0) {
    0x00013640 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013644 ldr r1, [pc, 0x2ec]                       |     r1 = "_sys";
    0x00013648 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "_sys");
    0x0001364c cmp r0, 0                                 |     
    0x00013650 str r0, [r4, 8]                           |     *((r4 + 8)) = r0;
                                                         |     if (r0 == 0) {
    0x00013654 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013658 ldr r1, [pc, 0x2dc]                       |     r1 = *(0x13938);
    0x0001365c ldr r0, [pc, 0x2d0]                       |     r0 = "class/misc/ubi_ctrl/";
    0x00013660 bl 0x1316c                                |     r0 = fcn_0001316c ("class/misc/ubi_ctrl/", r1);
    0x00013664 cmp r0, 0                                 |     
    0x00013668 str r0, [r4, 0xc]                         |     *((r4 + 0xc)) = r0;
                                                         |     if (r0 == 0) {
    0x0001366c beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013670 mov r1, 0                                 |     r1 = 0;
    0x00013674 bl 0x10d30                                |     r0 = open64 ();
    0x00013678 cmn r0, 1                                 |     
                                                         |     if (r0 != 1) {
    0x0001367c bne 0x136a4                               |         goto label_2;
                                                         |     }
    0x00013680 bl 0x10d78                                |     errno_location ();
    0x00013684 mov r3, 0                                 |     r3 = 0;
    0x00013688 str r3, [r0]                              |     *(r0) = r3;
                                                         |     do {
                                                         | label_0:
    0x0001368c mov r0, r4                                |         r0 = r4;
    0x00013690 bl 0x13540                                |         fcn_00013540 (r0);
    0x00013694 mov r4, 0                                 |         r4 = 0;
                                                         | label_1:
    0x00013698 mov r0, r4                                |         r0 = r4;
    0x0001369c add sp, sp, 0x10                          |         
    0x000136a0 pop {r4, r5, r6, pc}                      |         
                                                         | label_2:
    0x000136a4 bl 0x10dcc                                |         r0 = close (r0);
    0x000136a8 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x000136ac beq 0x136fc                               |             goto label_3;
                                                         |         }
    0x000136b0 bl 0x10d78                                |         errno_location ();
    0x000136b4 ldr r6, [pc, 0x284]                       |         
    0x000136b8 ldr r3, [r4, 0xc]                         |         r3 = *((r4 + 0xc));
    0x000136bc ldr r2, [pc, 0x280]                       |         r2 = stderr;
    0x000136c0 ldr r1, [pc, 0x280]                       |         r1 = "libubi";
    0x000136c4 ldr r5, [r0]                              |         r5 = *(r0);
    0x000136c8 ldr r0, [r6]                              |         r0 = "class/ubi";
    0x000136cc bl 0x10c7c                                |         fprintf ("class/ubi", "libubi", r2, r3, r4, r5, "class/ubi")
    0x000136d0 mov r0, r5                                |         r0 = r5;
    0x000136d4 ldr r6, [r6]                              |         r6 = "class/ubi";
    0x000136d8 bl 0x10bc8                                |         strerror (r0);
    0x000136dc str r5, [sp]                              |         *(sp) = r5;
    0x000136e0 ldr r3, [pc, 0x264]                       |         r3 = "_s:_error_:_close_failed_on___s_";
    0x000136e4 mov r2, 8                                 |         r2 = 8;
    0x000136e8 ldr r1, [pc, 0x260]                       |         r1 = *(0x1394c);
    0x000136ec str r0, [sp, 4]                           |         var_4h = r0;
    0x000136f0 mov r0, r6                                |         r0 = r6;
    0x000136f4 bl 0x10c7c                                |         fprintf (r0, r1, r2, "_s:_error_:_close_failed_on___s_", r4, r5)
    0x000136f8 b 0x1368c                                 |         
                                                         |     } while (1);
                                                         | label_3:
    0x000136fc ldr r1, [pc, 0x250]                       |     r1 = "_serror__d___s_";
    0x00013700 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00013704 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "_serror__d___s_");
    0x00013708 cmp r0, 0                                 |     
    0x0001370c str r0, [r4, 0x10]                        |     *((r4 + 0x10)) = r0;
                                                         |     if (r0 == 0) {
    0x00013710 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013714 ldr r1, [pc, 0x23c]                       |     r1 = "ubi%d";
    0x00013718 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x0001371c bl 0x1316c                                |     r0 = fcn_0001316c (r0, "ubi%d");
    0x00013720 cmp r0, 0                                 |     
    0x00013724 str r0, [r4, 0x14]                        |     *((r4 + 0x14)) = r0;
                                                         |     if (r0 == 0) {
    0x00013728 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x0001372c ldr r1, [pc, 0x204]                       |     r1 = "_sys";
    0x00013730 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00013734 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "_sys");
    0x00013738 cmp r0, 0                                 |     
    0x0001373c str r0, [r4, 0x18]                        |     *((r4 + 0x18)) = r0;
                                                         |     if (r0 == 0) {
    0x00013740 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013744 ldr r1, [pc, 0x210]                       |     r1 = "version";
    0x00013748 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x0001374c bl 0x1316c                                |     r0 = fcn_0001316c (r0, "version");
    0x00013750 cmp r0, 0                                 |     
    0x00013754 str r0, [r4, 0x1c]                        |     *((r4 + 0x1c)) = r0;
                                                         |     if (r0 == 0) {
    0x00013758 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x0001375c ldr r1, [pc, 0x1fc]                       |     r1 = "avail_eraseblocks";
    0x00013760 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00013764 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "avail_eraseblocks");
    0x00013768 cmp r0, 0                                 |     
    0x0001376c str r0, [r4, 0x20]                        |     *((r4 + 0x20)) = r0;
                                                         |     if (r0 == 0) {
    0x00013770 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013774 ldr r1, [pc, 0x1e8]                       |     r1 = "total_eraseblocks";
    0x00013778 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x0001377c bl 0x1316c                                |     r0 = fcn_0001316c (r0, "total_eraseblocks");
    0x00013780 cmp r0, 0                                 |     
    0x00013784 str r0, [r4, 0x24]                        |     *((r4 + 0x24)) = r0;
                                                         |     if (r0 == 0) {
    0x00013788 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x0001378c ldr r1, [pc, 0x1d4]                       |     r1 = "bad_peb_count";
    0x00013790 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x00013794 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "bad_peb_count");
    0x00013798 cmp r0, 0                                 |     
    0x0001379c str r0, [r4, 0x28]                        |     *((r4 + 0x28)) = r0;
                                                         |     if (r0 == 0) {
    0x000137a0 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x000137a4 ldr r1, [pc, 0x1c0]                       |     r1 = "eraseblock_size";
    0x000137a8 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x000137ac bl 0x1316c                                |     r0 = fcn_0001316c (r0, "eraseblock_size");
    0x000137b0 cmp r0, 0                                 |     
    0x000137b4 str r0, [r4, 0x2c]                        |     *((r4 + 0x2c)) = r0;
                                                         |     if (r0 == 0) {
    0x000137b8 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x000137bc ldr r1, [pc, 0x1ac]                       |     r1 = "max_ec";
    0x000137c0 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x000137c4 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "max_ec");
    0x000137c8 cmp r0, 0                                 |     
    0x000137cc str r0, [r4, 0x30]                        |     *((r4 + 0x30)) = r0;
                                                         |     if (r0 == 0) {
    0x000137d0 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x000137d4 ldr r1, [pc, 0x198]                       |     r1 = "reserved_for_bad";
    0x000137d8 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x000137dc bl 0x1316c                                |     r0 = fcn_0001316c (r0, "reserved_for_bad");
    0x000137e0 cmp r0, 0                                 |     
    0x000137e4 str r0, [r4, 0x34]                        |     *((r4 + 0x34)) = r0;
                                                         |     if (r0 == 0) {
    0x000137e8 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x000137ec ldr r1, [pc, 0x184]                       |     r1 = "max_vol_count";
    0x000137f0 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x000137f4 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "max_vol_count");
    0x000137f8 cmp r0, 0                                 |     
    0x000137fc str r0, [r4, 0x38]                        |     *((r4 + 0x38)) = r0;
                                                         |     if (r0 == 0) {
    0x00013800 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013804 ldr r1, [pc, 0x170]                       |     r1 = "min_io_size";
    0x00013808 ldr r0, [r4, 0x10]                        |     r0 = *((r4 + 0x10));
    0x0001380c bl 0x1316c                                |     r0 = fcn_0001316c (r0, "min_io_size");
    0x00013810 cmp r0, 0                                 |     
    0x00013814 str r0, [r4, 0x3c]                        |     *((r4 + 0x3c)) = r0;
                                                         |     if (r0 == 0) {
    0x00013818 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x0001381c ldr r1, [pc, 0x15c]                       |     r1 = "mtd_num";
    0x00013820 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00013824 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "mtd_num");
    0x00013828 cmp r0, 0                                 |     
    0x0001382c str r0, [r4, 0x40]                        |     *((r4 + 0x40)) = r0;
                                                         |     if (r0 == 0) {
    0x00013830 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013834 ldr r1, [pc, 0x148]                       |     r1 = "ubi%d_%d";
    0x00013838 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "ubi%d_%d");
    0x0001383c cmp r0, 0                                 |     
    0x00013840 str r0, [r4, 0x44]                        |     *((r4 + 0x44)) = r0;
                                                         |     if (r0 == 0) {
    0x00013844 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013848 ldr r1, [pc, 0xe8]                        |     r1 = "_sys";
    0x0001384c ldr r0, [r4, 0x40]                        |     r0 = *((r4 + 0x40));
    0x00013850 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "_sys");
    0x00013854 cmp r0, 0                                 |     
    0x00013858 str r0, [r4, 0x48]                        |     *((r4 + 0x48)) = r0;
                                                         |     if (r0 == 0) {
    0x0001385c beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013860 ldr r1, [pc, 0x120]                       |     r1 = "type";
    0x00013864 ldr r0, [r4, 0x40]                        |     r0 = *((r4 + 0x40));
    0x00013868 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "type");
    0x0001386c cmp r0, 0                                 |     
    0x00013870 str r0, [r4, 0x4c]                        |     *((r4 + 0x4c)) = r0;
                                                         |     if (r0 == 0) {
    0x00013874 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013878 ldr r1, [pc, 0x10c]                       |     r1 = "alignment";
    0x0001387c ldr r0, [r4, 0x40]                        |     r0 = *((r4 + 0x40));
    0x00013880 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "alignment");
    0x00013884 cmp r0, 0                                 |     
    0x00013888 str r0, [r4, 0x50]                        |     *((r4 + 0x50)) = r0;
                                                         |     if (r0 == 0) {
    0x0001388c beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013890 ldr r1, [pc, 0xf8]                        |     r1 = "data_bytes";
    0x00013894 ldr r0, [r4, 0x40]                        |     r0 = *((r4 + 0x40));
    0x00013898 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "data_bytes");
    0x0001389c cmp r0, 0                                 |     
    0x000138a0 str r0, [r4, 0x54]                        |     *((r4 + 0x54)) = r0;
                                                         |     if (r0 == 0) {
    0x000138a4 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x000138a8 ldr r1, [pc, 0xe4]                        |     r1 = "reserved_ebs";
    0x000138ac ldr r0, [r4, 0x40]                        |     r0 = *((r4 + 0x40));
    0x000138b0 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "reserved_ebs");
    0x000138b4 cmp r0, 0                                 |     
    0x000138b8 str r0, [r4, 0x58]                        |     *((r4 + 0x58)) = r0;
                                                         |     if (r0 == 0) {
    0x000138bc beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x000138c0 ldr r1, [pc, 0xd0]                        |     r1 = "usable_eb_size";
    0x000138c4 ldr r0, [r4, 0x40]                        |     r0 = *((r4 + 0x40));
    0x000138c8 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "usable_eb_size");
    0x000138cc cmp r0, 0                                 |     
    0x000138d0 str r0, [r4, 0x5c]                        |     *((r4 + 0x5c)) = r0;
                                                         |     if (r0 == 0) {
    0x000138d4 beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x000138d8 ldr r1, [pc, 0xbc]                        |     r1 = "corrupted";
    0x000138dc ldr r0, [r4, 0x40]                        |     r0 = *((r4 + 0x40));
    0x000138e0 bl 0x1316c                                |     r0 = fcn_0001316c (r0, "corrupted");
    0x000138e4 cmp r0, 0                                 |     
    0x000138e8 str r0, [r4, 0x60]                        |     *((r4 + 0x60)) = r0;
                                                         |     if (r0 == 0) {
    0x000138ec beq 0x1368c                               |         goto label_0;
                                                         |     }
    0x000138f0 add r1, sp, 0xc                           |     r1 += var_ch;
    0x000138f4 ldr r0, [r4, 0x14]                        |     r0 = *((r4 + 0x14));
    0x000138f8 bl 0x12ecc                                |     r0 = fcn_00012ecc (r0, r1);
    0x000138fc cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00013900 bne 0x1368c                               |         goto label_0;
                                                         |     }
    0x00013904 ldr r3, [sp, 0xc]                         |     r3 = var_ch;
    0x00013908 cmp r3, 1                                 |     
                                                         |     if (r3 == 1) {
    0x0001390c beq 0x13698                               |         goto label_1;
                                                         |     }
    0x00013910 ldr r0, [pc, 0x28]                        |     
    0x00013914 str r3, [sp]                              |     *(sp) = r3;
    0x00013918 ldr r2, [pc, 0x24]                        |     r2 = stderr;
    0x0001391c mov r3, 1                                 |     r3 = 1;
    0x00013920 ldr r1, [pc, 0x78]                        |     r1 = "name";
    0x00013924 ldr r0, [r0]                              |     r0 = "class/ubi";
    0x00013928 bl 0x10c7c                                |     fprintf ("class/ubi", "name", r2, r3)
    0x0001392c b 0x1368c                                 |     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 @ 0x13ad0 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00013ad0 ()                                  | void fcn_00013ad0 (int32_t arg1, void * s) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_110h;
                                                             |     r0 = arg1;
                                                             |     r1 = s;
    0x00013ad0 push {r4, r5, r6, r7, r8, sb, sl, lr}         |     
    0x00013ad4 mov r4, r1                                    |     r4 = r1;
    0x00013ad8 sub sp, sp, 0x110                             |     
    0x00013adc mov r5, r0                                    |     r5 = r0;
    0x00013ae0 mov r2, 0x18                                  |     r2 = 0x18;
    0x00013ae4 mov r1, 0                                     |     r1 = 0;
    0x00013ae8 mov r0, r4                                    |     r0 = r4;
    0x00013aec bl 0x10d18                                    |     memset (r0, r1, r2);
    0x00013af0 add r2, r4, 0x14                              |     r2 = r4 + 0x14;
    0x00013af4 add r1, r4, 0x10                              |     r1 = r4 + 0x10;
    0x00013af8 ldr r0, [r5, 8]                               |     r0 = *((r5 + 8));
    0x00013afc bl 0x13354                                    |     r0 = fcn_00013354 (r0, r1);
    0x00013b00 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00013b04 mvnne r3, 0                                   |         r3 = ~0;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x00013b08 strne r3, [r4, 0x14]                          |         *((r4 + 0x14)) = r3;
                                                             |     }
                                                             |     if (r0 == 0) {
    0x00013b0c strne r3, [r4, 0x10]                          |         *((r4 + 0x10)) = r3;
                                                             |     }
    0x00013b10 ldr r0, [r5, 0xc]                             |     r0 = *((r5 + 0xc));
    0x00013b14 bl 0x10d3c                                    |     r0 = opendir ();
    0x00013b18 subs r8, r0, 0                                |     r8 = r0 - 0;
                                                             |     if (r8 == r0) {
    0x00013b1c beq 0x13c7c                                   |         goto label_2;
                                                             |     }
    0x00013b20 mvn r3, 0x80000000                            |     r3 = ~0x80000000;
    0x00013b24 str r3, [r4, 4]                               |     *((r4 + 4)) = r3;
    0x00013b28 bl 0x10d78                                    |     errno_location ();
    0x00013b2c ldr sl, [pc, 0x17c]                           |     sl = "ubi%d%s";
    0x00013b30 mov sb, 0                                     |     sb = 0;
    0x00013b34 mov r7, r0                                    |     r7 = r0;
                                                             |     do {
                                                             | label_0:
    0x00013b38 str sb, [r7]                                  |         *(r7) = sb;
    0x00013b3c mov r0, r8                                    |         r0 = r8;
    0x00013b40 bl 0x10cd0                                    |         r0 = readdir64 ();
    0x00013b44 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00013b48 beq 0x13bd8                                   |             goto label_3;
                                                             |         }
    0x00013b4c add r6, r0, 0x13                              |         r6 = r0 + 0x13;
    0x00013b50 mov r0, r6                                    |         r0 = r6;
    0x00013b54 bl 0x10d90                                    |         r0 = strlen (r0);
    0x00013b58 cmp r0, 0xfe                                  |         
                                                             |         if (r0 >= 0xfe) {
    0x00013b5c bls 0x13b90                                   |             
    0x00013b60 ldr r0, [pc, 0x14c]                           |             
    0x00013b64 str r6, [sp]                                  |             *(sp) = r6;
    0x00013b68 ldr r2, [pc, 0x148]                           |             r2 = stderr;
    0x00013b6c ldr r3, [r5, 0xc]                             |             r3 = *((r5 + 0xc));
    0x00013b70 ldr r1, [pc, 0x144]                           |             r1 = "libubi";
    0x00013b74 ldr r0, [r0]                                  |             r0 = "ubi%d%s";
    0x00013b78 bl 0x10c7c                                    |             fprintf ("ubi%d%s", "libubi", r2, r3, r4, r5, r6)
    0x00013b7c mov r3, 0x16                                  |             r3 = 0x16;
    0x00013b80 str r3, [r7]                                  |             *(r7) = r3;
                                                             | label_1:
    0x00013b84 mov r0, r8                                    |             r0 = r8;
    0x00013b88 bl 0x10db4                                    |             closedir ();
    0x00013b8c b 0x13c7c                                     |             goto label_2;
                                                             |         }
    0x00013b90 add r3, sp, 0x10                              |         r3 += var_10h;
    0x00013b94 add r2, sp, 0xc                               |         r2 += var_ch;
    0x00013b98 mov r1, sl                                    |         r1 = sl;
    0x00013b9c mov r0, r6                                    |         r0 = r6;
    0x00013ba0 bl 0x10ce8                                    |         r0 = sscanf (r0, r1, r2);
    0x00013ba4 cmp r0, 1                                     |         
    0x00013ba8 bne 0x13b38                                   |         
                                                             |     } while (r0 != 1);
    0x00013bac ldr r3, [r4]                                  |     r3 = *(r4);
    0x00013bb0 ldr r2, [r4, 8]                               |     r2 = *((r4 + 8));
    0x00013bb4 add r3, r3, 1                                 |     r3++;
    0x00013bb8 str r3, [r4]                                  |     *(r4) = r3;
    0x00013bbc ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00013bc0 cmp r2, r3                                    |     
    0x00013bc4 ldr r2, [r4, 4]                               |     r2 = *((r4 + 4));
                                                             |     if (r2 >= r3) {
    0x00013bc8 strlt r3, [r4, 8]                             |         *((r4 + 8)) = r3;
                                                             |     }
    0x00013bcc cmp r3, r2                                    |     
                                                             |     if (r3 >= r2) {
    0x00013bd0 strlt r3, [r4, 4]                             |         *((r4 + 4)) = r3;
                                                             |     }
    0x00013bd4 b 0x13b38                                     |     goto label_0;
                                                             | label_3:
    0x00013bd8 ldr r6, [r7]                                  |     r6 = *(r7);
    0x00013bdc cmp r6, 0                                     |     
                                                             |     if (r6 != 0) {
    0x00013be0 beq 0x13c28                                   |         
    0x00013be4 ldr r4, [pc, 0xc8]                            |         
    0x00013be8 ldr r3, [r5, 0xc]                             |         r3 = *((r5 + 0xc));
    0x00013bec ldr r2, [pc, 0xc4]                            |         r2 = stderr;
    0x00013bf0 ldr r1, [pc, 0xc8]                            |         r1 = "_s:_error_:_invalid_entry_in__s:___s_";
    0x00013bf4 ldr r0, [r4]                                  |         r0 = "ubi%d%s";
    0x00013bf8 bl 0x10c7c                                    |         fprintf ("ubi%d%s", "_s:_error_:_invalid_entry_in__s:___s_", r2, r3, "ubi%d%s")
    0x00013bfc mov r0, r6                                    |         r0 = r6;
    0x00013c00 ldr r4, [r4]                                  |         r4 = "ubi%d%s";
    0x00013c04 bl 0x10bc8                                    |         strerror (r0);
    0x00013c08 str r6, [sp]                                  |         *(sp) = r6;
    0x00013c0c ldr r3, [pc, 0xb0]                            |         r3 = "%s: error!: readdir failed on \"%s\"\n";
    0x00013c10 mov r2, 8                                     |         r2 = 8;
    0x00013c14 ldr r1, [pc, 0xac]                            |         r1 = *(0x13cc4);
    0x00013c18 str r0, [sp, 4]                               |         var_4h = r0;
    0x00013c1c mov r0, r4                                    |         r0 = r4;
    0x00013c20 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: readdir failed on \"%s\"\n", r4, r5, r6)
    0x00013c24 b 0x13b84                                     |         goto label_1;
                                                             |     }
    0x00013c28 mov r0, r8                                    |     r0 = r8;
    0x00013c2c bl 0x10db4                                    |     r0 = closedir ();
    0x00013c30 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00013c34 beq 0x13c84                                   |         
    0x00013c38 ldr r6, [pc, 0x74]                            |         r6 = "ubi%d%s";
    0x00013c3c ldr r4, [r7]                                  |         r4 = *(r7);
    0x00013c40 ldr r3, [r5, 0xc]                             |         r3 = *((r5 + 0xc));
    0x00013c44 ldr r2, [pc, 0x6c]                            |         r2 = stderr;
    0x00013c48 ldr r1, [pc, 0x7c]                            |         r1 = "_serror__d___s_";
    0x00013c4c ldr r0, [r6]                                  |         r0 = "ubi%d%s";
    0x00013c50 bl 0x10c7c                                    |         fprintf ("ubi%d%s", "_serror__d___s_", r2, r3, r4, r5, "ubi%d%s")
    0x00013c54 mov r0, r4                                    |         r0 = r4;
    0x00013c58 ldr r5, [r6]                                  |         r5 = "ubi%d%s";
    0x00013c5c bl 0x10bc8                                    |         strerror (r0);
    0x00013c60 str r4, [sp]                                  |         *(sp) = r4;
    0x00013c64 ldr r3, [pc, 0x58]                            |         r3 = "%s: error!: readdir failed on \"%s\"\n";
    0x00013c68 mov r2, 8                                     |         r2 = 8;
    0x00013c6c ldr r1, [pc, 0x54]                            |         r1 = *(0x13cc4);
    0x00013c70 str r0, [sp, 4]                               |         var_4h = r0;
    0x00013c74 mov r0, r5                                    |         r0 = r5;
    0x00013c78 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: readdir failed on \"%s\"\n", r4)
                                                             | label_2:
    0x00013c7c mvn r0, 0                                     |         r0 = ~0;
    0x00013c80 b 0x13ca8                                     |         
                                                             |     } else {
    0x00013c84 ldr r3, [r4, 4]                               |         r3 = *((r4 + 4));
    0x00013c88 add r1, r4, 0xc                               |         r1 = r4 + 0xc;
    0x00013c8c cmn r3, 0x80000001                            |         
                                                             |         if (r3 != 0x80000001) {
    0x00013c90 streq r0, [r4, 4]                             |             *((r4 + 4)) = r0;
                                                             |         }
    0x00013c94 ldr r0, [r5, 0x14]                            |         r0 = *((r5 + 0x14));
    0x00013c98 bl 0x12ecc                                    |         r0 = fcn_00012ecc (r0, r1);
    0x00013c9c adds r0, r0, 0                                |         r0 += 0;
                                                             |         if (r0 == r0) {
    0x00013ca0 movne r0, 1                                   |             r0 = 1;
                                                             |         }
    0x00013ca4 rsb r0, r0, 0                                 |         r0 -= ;
                                                             |     }
    0x00013ca8 add sp, sp, 0x110                             |     
    0x00013cac pop {r4, r5, r6, r7, r8, sb, sl, 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 @ 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 @ 0x1509c */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0001509c ()                              | void fcn_0001509c (size_t size) {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_4h;
                                                         |     int32_t var_8h;
                                                         |     r0 = size;
    0x0001509c push {r0, r1, r4, r5, r6, r7, r8, lr}     |     
    0x000150a0 ldr r8, [r0, 0x18]                        |     r8 = *((r0 + 0x18));
    0x000150a4 mov r7, r0                                |     r7 = r0;
    0x000150a8 mov r1, r8                                |     r1 = r8;
    0x000150ac mov r0, 1                                 |     r0 = 1;
    0x000150b0 bl 0x10c64                                |     r0 = calloc (r0, r1);
    0x000150b4 subs r6, r0, 0                            |     r6 = r0 - 0;
                                                         |     if (r6 == r0) {
    0x000150b8 movne r4, r6                              |         r4 = r6;
                                                         |     }
                                                         |     if (r6 == r0) {
    0x000150bc movne r5, 0                               |         r5 = 0;
                                                         |     }
                                                         |     if (r6 != r0) {
    0x000150c0 bne 0x15154                               |         goto label_1;
                                                         |     }
    0x000150c4 bl 0x10d78                                |     errno_location ();
    0x000150c8 ldr r5, [pc, 0x94]                        |     
    0x000150cc mov r3, r8                                |     r3 = r8;
    0x000150d0 ldr r2, [pc, 0x90]                        |     r2 = stderr;
    0x000150d4 ldr r1, [pc, 0x90]                        |     r1 = "libubigen";
    0x000150d8 ldr r4, [r0]                              |     r4 = *(r0);
    0x000150dc ldr r0, [r5]                              |     r0 = *(0x15160);
    0x000150e0 bl 0x10c7c                                |     fprintf (r0, "libubigen", r2, r3, r4, r5)
    0x000150e4 mov r0, r4                                |     r0 = r4;
    0x000150e8 ldr r5, [r5]                              |     r5 = *(0x15160);
    0x000150ec bl 0x10bc8                                |     strerror (r0);
    0x000150f0 str r4, [sp]                              |     *(sp) = r4;
    0x000150f4 ldr r3, [pc, 0x74]                        |     r3 = "_s:_error_:_cannot_allocate__d_bytes_of_memory";
    0x000150f8 mov r2, 0xb                               |     r2 = 0xb;
    0x000150fc ldr r1, [pc, 0x70]                        |     r1 = *(0x15170);
    0x00015100 str r0, [sp, 4]                           |     var_4h = r0;
    0x00015104 mov r0, r5                                |     r0 = r5;
    0x00015108 bl 0x10c7c                                |     fprintf (r0, r1, r2, "_s:_error_:_cannot_allocate__d_bytes_of_memory", r4)
                                                         | label_0:
    0x0001510c mov r0, r6                                |     r0 = r6;
    0x00015110 add sp, sp, 8                             |     
    0x00015114 pop {r4, r5, r6, r7, r8, pc}              |     
                                                         |     do {
    0x00015118 mov r2, 0xa8                              |         r2 = 0xa8;
    0x0001511c mov r1, r4                                |         r1 = r4;
    0x00015120 mvn r0, 0                                 |         r0 = ~0;
    0x00015124 bl 0x18624                                |         fcn_00018624 (r0);
    0x00015128 add r5, r5, 1                             |         r5++;
    0x0001512c add r4, r4, 0xac                          |         r4 += 0xac;
    0x00015130 lsr r3, r0, 0x18                          |         r3 = r0 >> 0x18;
    0x00015134 lsl r2, r0, 8                             |         r2 = r0 << 8;
    0x00015138 orr r3, r3, r0, lsl 24                    |         r3 |= (r0 << 24);
    0x0001513c and r2, r2, 0xff0000                      |         r2 &= 0xff0000;
    0x00015140 lsr r0, r0, 8                             |         r0 >>= 8;
    0x00015144 orr r3, r3, r2                            |         r3 |= r2;
    0x00015148 and r0, r0, 0xff00                        |         r0 &= 0xff00;
    0x0001514c orr r0, r3, r0                            |         r0 = r3 | r0;
    0x00015150 str r0, [r4, -4]                          |         *((r4 - 4)) = r0;
                                                         | label_1:
    0x00015154 ldr r3, [r7, 0x1c]                        |         r3 = *((r7 + 0x1c));
    0x00015158 cmp r3, r5                                |         
    0x0001515c bgt 0x15118                               |         
                                                         |     } while (r3 > r5);
    0x00015160 b 0x1510c                                 |     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 @ 0x15ae8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00015ae8 ()                                      | void fcn_00015ae8 (int32_t arg_70h, int32_t arg_78h, void * s2, int32_t fd, int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_ch;
                                                                 |     int32_t var_10h;
                                                                 |     int32_t var_14h;
                                                                 |     int32_t var_18h;
                                                                 |     int32_t var_1ch;
                                                                 |     int32_t var_20h;
                                                                 |     int32_t var_24h;
                                                                 |     int32_t var_28h;
                                                                 |     int32_t var_28h_2;
                                                                 |     int32_t var_38h;
                                                                 |     int32_t var_38h_2;
                                                                 |     int32_t var_4ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00015ae8 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}         |     
    0x00015aec mov fp, r1                                        |     
    0x00015af0 ldr r1, [r0]                                      |     r1 = *(r0);
    0x00015af4 sub sp, sp, 0x4c                                  |     
    0x00015af8 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00015afc lsl r2, r1, 1                                     |     r2 = r1 << 1;
    0x00015b00 asr r3, r2, 0x1f                                  |     r3 = r2 >> 0x1f;
    0x00015b04 strd r2, r3, [sp, 0x38]                           |     __asm ("strd r2, r3, [var_38h]");
    0x00015b08 ldr r3, [pc, 0x25c]                               |     r3 = *(0x15d68);
    0x00015b0c mov r8, 0xd                                       |     r8 = 0xd;
    0x00015b10 mov sb, 5                                         |     sb = 5;
    0x00015b14 strd r8, sb, [sp, 0x28]                           |     __asm ("strd r8, sb, [var_28h]");
    0x00015b18 ldr r8, [r0, 4]                                   |     r8 = *((r0 + 4));
    0x00015b1c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00015b20 ldr r3, [pc, 0x248]                               |     r3 = *(0x15d6c);
    0x00015b24 mov r7, 1                                         |     r7 = 1;
    0x00015b28 mov r4, r0                                        |     r4 = r0;
    0x00015b2c mov r5, 0                                         |     r5 = 0;
    0x00015b30 mov r0, r8                                        |     r0 = r8;
    0x00015b34 str r7, [sp, 0x18]                                |     var_18h = r7;
    0x00015b38 str r5, [sp, 0x1c]                                |     var_1ch = r5;
    0x00015b3c str r1, [sp, 0x20]                                |     var_20h = r1;
    0x00015b40 str r7, [sp, 0x14]                                |     var_14h = r7;
    0x00015b44 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00015b48 bl 0x10c28                                        |     r0 = malloc (r0);
    0x00015b4c subs r6, r0, 0                                    |     r6 = r0 - 0;
                                                                 |     if (r6 != r0) {
    0x00015b50 bne 0x15ba4                                       |         goto label_3;
                                                                 |     }
    0x00015b54 bl 0x10d78                                        |     errno_location ();
    0x00015b58 ldr r5, [pc, 0x214]                               |     
    0x00015b5c mov r3, r8                                        |     r3 = r8;
    0x00015b60 ldr r2, [pc, 0x210]                               |     r2 = stderr;
    0x00015b64 ldr r1, [pc, 0x210]                               |     r1 = "libubigen";
    0x00015b68 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00015b6c ldr r0, [r5]                                      |     r0 = "layout volume";
    0x00015b70 bl 0x10c7c                                        |     fprintf ("layout volume", "libubigen", r2, r3, r4, "layout volume")
    0x00015b74 mov r0, r4                                        |     r0 = r4;
    0x00015b78 ldr r5, [r5]                                      |     r5 = "layout volume";
    0x00015b7c bl 0x10bc8                                        |     strerror (r0);
    0x00015b80 str r4, [sp]                                      |     *(sp) = r4;
    0x00015b84 ldr r3, [pc, 0x1f4]                               |     r3 = "%s: error!: failed to allocate %d bytes\n";
    0x00015b88 mov r2, 0xb                                       |     r2 = 0xb;
    0x00015b8c ldr r1, [pc, 0x1f0]                               |     r1 = *(0x15d80);
    0x00015b90 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00015b94 mov r0, r5                                        |     r0 = r5;
    0x00015b98 bl 0x10c7c                                        |     fprintf (r0, r1, r2, "%s: error!: failed to allocate %d bytes\n", r4)
                                                                 |     do {
    0x00015b9c mvn r0, 0                                         |         r0 = ~0;
    0x00015ba0 b 0x15d64                                         |         goto label_4;
                                                                 | label_3:
    0x00015ba4 ldr r8, [r4, 0x10]                                |         r8 = *((r4 + 0x10));
    0x00015ba8 mov r1, 0xff                                      |         r1 = 0xff;
    0x00015bac mov r2, r8                                        |         r2 = r8;
    0x00015bb0 bl 0x10d18                                        |         memset (r0, r1, r2);
    0x00015bb4 ldr r2, [r4, 0x18]                                |         r2 = *((r4 + 0x18));
    0x00015bb8 ldr r1, [sp, 0x80]                                |         r1 = *(s2);
    0x00015bbc add r0, r6, r8                                    |         r0 = r6 + r8;
    0x00015bc0 ldr sl, [r4, 0xc]                                 |         sl = *((r4 + 0xc));
    0x00015bc4 bl 0x10c10                                        |         memcpy (r0, r1, r2);
    0x00015bc8 ldr r0, [r4, 0x10]                                |         r0 = *((r4 + 0x10));
    0x00015bcc ldr r2, [r4, 0x18]                                |         r2 = *((r4 + 0x18));
    0x00015bd0 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00015bd4 mov r1, 0xff                                      |         r1 = 0xff;
    0x00015bd8 sub r3, r3, r0                                    |         r3 -= r0;
    0x00015bdc add r0, r0, r2                                    |         r0 += r2;
    0x00015be0 add r0, r6, r0                                    |         r0 = r6 + r0;
    0x00015be4 sub r2, r3, r2                                    |         r2 = r3 - r2;
    0x00015be8 bl 0x10d18                                        |         memset (r0, r1, r2);
    0x00015bec ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00015bf0 ldr r0, [sp, 0x84]                                |         r0 = *(fd);
    0x00015bf4 smull r8, sb, fp, r3                              |         r8:sb = fp * r3;
    0x00015bf8 str r5, [sp]                                      |         *(sp) = r5;
    0x00015bfc mov r2, r8                                        |         r2 = r8;
    0x00015c00 mov r3, sb                                        |         r3 = sb;
    0x00015c04 bl 0x10d9c                                        |         lseek64 ();
    0x00015c08 add sl, r6, sl                                    |         sl = r6 + sl;
    0x00015c0c cmp r1, sb                                        |         
    0x00015c10 cmpeq r0, r8                                      |         __asm ("cmpeq r0, r8");
                                                                 |         if (r1 == sb) {
    0x00015c14 beq 0x15c68                                       |             goto label_5;
                                                                 |         }
                                                                 | label_1:
    0x00015c18 bl 0x10d78                                        |         errno_location ();
    0x00015c1c ldr r5, [pc, 0x150]                               |         r5 = "layout volume";
    0x00015c20 ldr r2, [pc, 0x150]                               |         r2 = stderr;
    0x00015c24 ldr r1, [pc, 0x15c]                               |         r1 = "_serror__d___s_";
    0x00015c28 ldr r4, [r0]                                      |         r4 = *(r0);
    0x00015c2c ldr r0, [r5]                                      |         r0 = "layout volume";
    0x00015c30 bl 0x10c7c                                        |         fprintf ("layout volume", "_serror__d___s_", r2, r3, r4, "layout volume")
                                                                 | label_0:
    0x00015c34 mov r0, r4                                        |         r0 = r4;
    0x00015c38 ldr r5, [r5]                                      |         r5 = *(r5);
    0x00015c3c bl 0x10bc8                                        |         strerror (r0);
    0x00015c40 str r4, [sp]                                      |         *(sp) = r4;
    0x00015c44 ldr r3, [pc, 0x134]                               |         r3 = "%s: error!: failed to allocate %d bytes\n";
    0x00015c48 mov r2, 0xb                                       |         r2 = 0xb;
    0x00015c4c ldr r1, [pc, 0x130]                               |         r1 = *(0x15d80);
    0x00015c50 str r0, [sp, 4]                                   |         var_4h = r0;
    0x00015c54 mov r0, r5                                        |         r0 = r5;
    0x00015c58 bl 0x10c7c                                        |         fprintf (r0, r1, r2, "%s: error!: failed to allocate %d bytes\n", r4)
    0x00015c5c mov r0, r6                                        |         r0 = r6;
    0x00015c60 bl 0x10de4                                        |         free (r0);
    0x00015c64 b 0x15b9c                                         |         
                                                                 |     } while (1);
                                                                 | label_5:
    0x00015c68 ldrd r2, r3, [sp, 0x70]                           |     __asm ("ldrd r2, r3, [arg_70h]");
    0x00015c6c mov r1, r6                                        |     r1 = r6;
    0x00015c70 mov r0, r4                                        |     r0 = r4;
    0x00015c74 bl 0x1538c                                        |     fcn_0001538c (r0, r1);
    0x00015c78 mov r3, r5                                        |     r3 = r5;
    0x00015c7c mov r2, sl                                        |     r2 = sl;
    0x00015c80 add r1, sp, 0x10                                  |     r1 += var_10h;
    0x00015c84 mov r0, r4                                        |     r0 = r4;
    0x00015c88 str r5, [sp, 4]                                   |     var_4h = r5;
    0x00015c8c str r5, [sp]                                      |     *(sp) = r5;
    0x00015c90 bl 0x155e4                                        |     fcn_000155e4 (r0, r1, r2, r3);
    0x00015c94 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00015c98 mov r1, r6                                        |     r1 = r6;
    0x00015c9c ldr r0, [sp, 0x84]                                |     r0 = *(fd);
    0x00015ca0 bl 0x10c70                                        |     write (r0, r1, r2);
    0x00015ca4 ldr fp, [r4, 4]                                   |     fp = *((r4 + 4));
    0x00015ca8 cmp fp, r0                                        |     
                                                                 |     if (fp != r0) {
    0x00015cac beq 0x15cd4                                       |         
    0x00015cb0 bl 0x10d78                                        |         errno_location ();
    0x00015cb4 ldr r5, [pc, 0xb8]                                |         r5 = "layout volume";
    0x00015cb8 mov r3, fp                                        |         r3 = fp;
    0x00015cbc ldr r4, [r0]                                      |         r4 = *(r0);
                                                                 | label_2:
    0x00015cc0 ldr r2, [pc, 0xb0]                                |         r2 = stderr;
    0x00015cc4 ldr r1, [pc, 0xc0]                                |         r1 = "_s:_error_:_cannot_seek_output_file";
    0x00015cc8 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00015ccc bl 0x10c7c                                        |         fprintf (r0, "_s:_error_:_cannot_seek_output_file", r2, r3, r4, "layout volume")
    0x00015cd0 b 0x15c34                                         |         goto label_0;
                                                                 |     }
    0x00015cd4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00015cd8 str r5, [sp]                                      |     *(sp) = r5;
    0x00015cdc smull r8, sb, r3, fp                              |     r8:sb = r3 * fp;
    0x00015ce0 ldr r0, [sp, 0x84]                                |     r0 = *(fd);
    0x00015ce4 mov r2, r8                                        |     r2 = r8;
    0x00015ce8 mov r3, sb                                        |     r3 = sb;
    0x00015cec bl 0x10d9c                                        |     lseek64 ();
    0x00015cf0 cmp r1, sb                                        |     
    0x00015cf4 cmpeq r0, r8                                      |     __asm ("cmpeq r0, r8");
                                                                 |     if (r1 != sb) {
    0x00015cf8 bne 0x15c18                                       |         goto label_1;
                                                                 |     }
    0x00015cfc ldrd r2, r3, [sp, 0x78]                           |     __asm ("ldrd r2, r3, [arg_78h]");
    0x00015d00 mov r1, r6                                        |     r1 = r6;
    0x00015d04 mov r0, r4                                        |     r0 = r4;
    0x00015d08 bl 0x1538c                                        |     fcn_0001538c (r0, r1);
    0x00015d0c mov r3, r7                                        |     r3 = r7;
    0x00015d10 mov r2, sl                                        |     r2 = sl;
    0x00015d14 add r1, sp, 0x10                                  |     r1 += var_10h;
    0x00015d18 mov r0, r4                                        |     r0 = r4;
    0x00015d1c str r5, [sp, 4]                                   |     var_4h = r5;
    0x00015d20 str r5, [sp]                                      |     *(sp) = r5;
    0x00015d24 bl 0x155e4                                        |     fcn_000155e4 (r0, r1, r2, r3);
    0x00015d28 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00015d2c mov r1, r6                                        |     r1 = r6;
    0x00015d30 ldr r0, [sp, 0x84]                                |     r0 = *(fd);
    0x00015d34 bl 0x10c70                                        |     write (r0, r1, r2);
    0x00015d38 ldr r7, [r4, 4]                                   |     r7 = *((r4 + 4));
    0x00015d3c cmp r7, r0                                        |     
                                                                 |     if (r7 != r0) {
    0x00015d40 beq 0x15d58                                       |         
    0x00015d44 bl 0x10d78                                        |         errno_location ();
    0x00015d48 ldr r5, [pc, 0x24]                                |         r5 = "layout volume";
    0x00015d4c mov r3, r7                                        |         r3 = r7;
    0x00015d50 ldr r4, [r0]                                      |         r4 = *(r0);
    0x00015d54 b 0x15cc0                                         |         goto label_2;
                                                                 |     }
    0x00015d58 mov r0, r6                                        |     r0 = r6;
    0x00015d5c bl 0x10de4                                        |     free (r0);
    0x00015d60 mov r0, r5                                        |     r0 = r5;
                                                                 | label_4:
    0x00015d64 add sp, sp, 0x4c                                  |     
    0x00015d68 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 @ 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 @ 0x15f90 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00015f90 ()                                      | void fcn_00015f90 (int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     void * buf;
                                                                 |     int32_t var_10h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00015f90 push {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr}     |     
    0x00015f94 mov r8, r1                                        |     r8 = r1;
    0x00015f98 mov r1, 0x80000                                   |     r1 = 0x80000;
    0x00015f9c mov r5, r0                                        |     r5 = r0;
    0x00015fa0 mov r7, r2                                        |     r7 = r2;
    0x00015fa4 bl 0x10d30                                        |     r0 = open64 ();
    0x00015fa8 cmn r0, 1                                         |     
    0x00015fac mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 1) {
    0x00015fb0 beq 0x160f8                                       |         goto label_2;
                                                                 |     }
    0x00015fb4 mov r2, r7                                        |     r2 = r7;
    0x00015fb8 mov r1, r8                                        |     r1 = r8;
    0x00015fbc bl 0x10cac                                        |     r0 = read (r0, r1, r2);
    0x00015fc0 cmn r0, 1                                         |     
    0x00015fc4 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 != 1) {
    0x00015fc8 bne 0x16020                                       |         goto label_3;
                                                                 |     }
                                                                 | label_0:
    0x00015fcc bl 0x10d78                                        |     errno_location ();
    0x00015fd0 ldr r7, [pc, 0x12c]                               |     r7 = *(0x16100);
    0x00015fd4 mov r3, r5                                        |     r3 = r5;
    0x00015fd8 ldr r2, [pc, 0x128]                               |     r2 = stderr;
    0x00015fdc ldr r1, [pc, 0x128]                               |     r1 = "libmtd";
    0x00015fe0 ldr r6, [r0]                                      |     r6 = *(r0);
    0x00015fe4 ldr r0, [r7]                                      |     r0 = *(0x16100);
    0x00015fe8 bl 0x10c7c                                        |     fprintf (r0, "libmtd", r2, r3, r4, r5, r6)
    0x00015fec mov r0, r6                                        |     r0 = r6;
    0x00015ff0 ldr r5, [r7]                                      |     r5 = *(0x16100);
    0x00015ff4 bl 0x10bc8                                        |     strerror (r0);
    0x00015ff8 str r6, [sp]                                      |     *(sp) = r6;
    0x00015ffc ldr r3, [pc, 0x10c]                               |     r3 = "%s: error!: cannot read \"%s\"\n";
    0x00016000 mov r2, 8                                         |     r2 = 8;
    0x00016004 ldr r1, [pc, 0x108]                               |     r1 = *(0x16110);
    0x00016008 str r0, [sp, 4]                                   |     var_4h = r0;
    0x0001600c mov r0, r5                                        |     r0 = r5;
    0x00016010 bl 0x10c7c                                        |     fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4, r5, r6)
                                                                 |     do {
    0x00016014 mov r0, r4                                        |         r0 = r4;
    0x00016018 bl 0x10dcc                                        |         close (r0);
    0x0001601c b 0x160f4                                         |         goto label_4;
                                                                 | label_3:
    0x00016020 cmp r7, r0                                        |         
                                                                 |         if (r7 != r0) {
    0x00016024 bne 0x16050                                       |             goto label_5;
                                                                 |         }
    0x00016028 ldr r0, [pc, 0xd4]                                |         
    0x0001602c mov r3, r5                                        |         r3 = r5;
    0x00016030 ldr r2, [pc, 0xd0]                                |         r2 = stderr;
    0x00016034 ldr r1, [pc, 0xdc]                                |         r1 = "_serror__d___s_";
    0x00016038 ldr r0, [r0]                                      |         r0 = *(0x16100);
    0x0001603c bl 0x10c7c                                        |         r0 = fprintf (r0, "_serror__d___s_", r2, r3)
                                                                 | label_1:
    0x00016040 bl 0x10d78                                        |         errno_location ();
    0x00016044 mov r3, 0x16                                      |         r3 = 0x16;
    0x00016048 str r3, [r0]                                      |         *(r0) = r3;
    0x0001604c b 0x16014                                         |         
                                                                 |     } while (1);
                                                                 | label_5:
    0x00016050 mov r3, 0                                         |     r3 = 0;
    0x00016054 strb r3, [r8, r0]                                 |     *((r8 + r0)) = r3;
    0x00016058 mov r2, 1                                         |     r2 = 1;
    0x0001605c add r1, sp, 0xc                                   |     r1 += buf;
    0x00016060 mov r0, r4                                        |     r0 = r4;
    0x00016064 bl 0x10cac                                        |     r0 = read (r0, r1, r2);
    0x00016068 cmp r0, 1                                         |     
                                                                 |     if (r0 == 1) {
    0x0001606c beq 0x15fcc                                       |         goto label_0;
                                                                 |     }
    0x00016070 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00016074 beq 0x16098                                       |         
    0x00016078 ldr r0, [pc, 0x84]                                |         
    0x0001607c str r7, [sp]                                      |         *(sp) = r7;
    0x00016080 mov r3, r5                                        |         r3 = r5;
    0x00016084 ldr r2, [pc, 0x7c]                                |         r2 = stderr;
    0x00016088 ldr r1, [pc, 0x8c]                                |         r1 = "%s: error!: contents of \"%s\" is too long\n";
    0x0001608c ldr r0, [r0]                                      |         r0 = *(0x16100);
    0x00016090 bl 0x10c7c                                        |         fprintf (r0, "%s: error!: contents of \"%s\" is too long\n", r2, r3)
    0x00016094 b 0x16040                                         |         goto label_1;
                                                                 |     }
    0x00016098 mov r0, r4                                        |     r0 = r4;
    0x0001609c bl 0x10dcc                                        |     r0 = close (r0);
    0x000160a0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000160a4 moveq r4, r6                                      |         r4 = r6;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x000160a8 beq 0x160f8                                       |         
    0x000160ac bl 0x10d78                                        |         errno_location ();
    0x000160b0 ldr r6, [pc, 0x4c]                                |         r6 = *(0x16100);
    0x000160b4 mov r3, r5                                        |         r3 = r5;
    0x000160b8 ldr r2, [pc, 0x48]                                |         r2 = stderr;
    0x000160bc ldr r1, [pc, 0x5c]                                |         r1 = "_s:_error_:_file___s__contains_too_much_data_____d_bytes_";
    0x000160c0 ldr r4, [r0]                                      |         r4 = *(r0);
    0x000160c4 ldr r0, [r6]                                      |         r0 = *(0x16100);
    0x000160c8 bl 0x10c7c                                        |         fprintf (r0, "_s:_error_:_file___s__contains_too_much_data_____d_bytes_", r2, r3, r4, r5, r6)
    0x000160cc mov r0, r4                                        |         r0 = r4;
    0x000160d0 ldr r5, [r6]                                      |         r5 = *(0x16100);
    0x000160d4 bl 0x10bc8                                        |         strerror (r0);
    0x000160d8 str r4, [sp]                                      |         *(sp) = r4;
    0x000160dc ldr r3, [pc, 0x2c]                                |         r3 = "%s: error!: cannot read \"%s\"\n";
    0x000160e0 mov r2, 8                                         |         r2 = 8;
    0x000160e4 ldr r1, [pc, 0x28]                                |         r1 = *(0x16110);
    0x000160e8 str r0, [sp, 4]                                   |         var_4h = r0;
    0x000160ec mov r0, r5                                        |         r0 = r5;
    0x000160f0 bl 0x10c7c                                        |         fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4)
                                                                 | label_4:
    0x000160f4 mvn r4, 0                                         |         r4 = ~0;
                                                                 |     }
                                                                 | label_2:
    0x000160f8 mov r0, r4                                        |     r0 = r4;
    0x000160fc add sp, sp, 0x10                                  |     
    0x00016100 pop {r4, r5, r6, r7, r8, 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 @ 0x16124 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00016124 ()                  | void fcn_00016124 (int32_t arg1, char * arg2) {
                                             |     int32_t var_0h;
                                             |     int32_t var_4h;
                                             |     int32_t var_8h;
                                             |     char * buf;
                                             |     int32_t var_4ch;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
    0x00016124 push {r4, r5, r6, r7, lr}     |     
    0x00016128 sub sp, sp, 0x4c              |     
    0x0001612c mov r5, r0                    |     r5 = r0;
    0x00016130 mov r2, 0x32                  |     r2 = 0x32;
    0x00016134 mov r6, r1                    |     r6 = r1;
    0x00016138 add r0, sp, 0x14              |     r0 += buf;
    0x0001613c mov r1, 0                     |     r1 = 0;
    0x00016140 bl 0x10d18                    |     memset (r0, r1, r2);
    0x00016144 mov r1, 0x80000               |     r1 = 0x80000;
    0x00016148 mov r0, r5                    |     r0 = r5;
    0x0001614c bl 0x10d30                    |     r0 = open64 ();
    0x00016150 cmn r0, 1                     |     
    0x00016154 mov r4, r0                    |     r4 = r0;
                                             |     if (r0 == 1) {
    0x00016158 beq 0x162a4                   |         goto label_2;
                                             |     }
    0x0001615c mov r2, 0x32                  |     r2 = 0x32;
    0x00016160 add r1, sp, 0x14              |     r1 += buf;
    0x00016164 bl 0x10cac                    |     r0 = read (r0, r1, r2);
    0x00016168 cmn r0, 1                     |     
                                             |     if (r0 != 1) {
    0x0001616c bne 0x161c4                   |         goto label_3;
                                             |     }
    0x00016170 bl 0x10d78                    |     errno_location ();
    0x00016174 ldr r7, [pc, 0x134]           |     r7 = *(0x162ac);
    0x00016178 mov r3, r5                    |     r3 = r5;
    0x0001617c ldr r2, [pc, 0x130]           |     r2 = stderr;
    0x00016180 ldr r1, [pc, 0x130]           |     r1 = "libmtd";
    0x00016184 ldr r6, [r0]                  |     r6 = *(r0);
    0x00016188 ldr r0, [r7]                  |     r0 = *(0x162ac);
    0x0001618c bl 0x10c7c                    |     fprintf (r0, "libmtd", r2, r3, r4, r5, r6)
    0x00016190 mov r0, r6                    |     r0 = r6;
    0x00016194 ldr r5, [r7]                  |     r5 = *(0x162ac);
    0x00016198 bl 0x10bc8                    |     strerror (r0);
    0x0001619c str r6, [sp]                  |     *(sp) = r6;
    0x000161a0 ldr r3, [pc, 0x114]           |     r3 = "%s: error!: cannot read \"%s\"\n";
    0x000161a4 mov r2, 8                     |     r2 = 8;
    0x000161a8 ldr r1, [pc, 0x110]           |     r1 = *(0x162bc);
    0x000161ac str r0, [sp, 4]               |     var_4h = r0;
    0x000161b0 mov r0, r5                    |     r0 = r5;
    0x000161b4 bl 0x10c7c                    |     fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4, r5, r6)
                                             |     do {
    0x000161b8 mov r0, r4                    |         r0 = r4;
    0x000161bc bl 0x10dcc                    |         close (r0);
    0x000161c0 b 0x162a0                     |         goto label_4;
                                             | label_3:
    0x000161c4 cmp r0, 0x32                  |         
                                             |         if (r0 != 0x32) {
    0x000161c8 bne 0x161f4                   |             goto label_5;
                                             |         }
    0x000161cc ldr r2, [pc, 0xe0]            |         r2 = stderr;
    0x000161d0 ldr r1, [pc, 0xec]            |         r1 = "_serror__d___s_";
    0x000161d4 mov r3, r5                    |         r3 = r5;
                                             | label_0:
    0x000161d8 ldr r0, [pc, 0xd0]            |         
    0x000161dc ldr r0, [r0]                  |         r0 = *(0x162ac);
    0x000161e0 bl 0x10c7c                    |         r0 = fprintf (r0, "_serror__d___s_", r2, r3)
                                             | label_1:
    0x000161e4 bl 0x10d78                    |         errno_location ();
    0x000161e8 mov r3, 0x16                  |         r3 = 0x16;
    0x000161ec str r3, [r0]                  |         *(r0) = r3;
    0x000161f0 b 0x161b8                     |         
                                             |     } while (1);
                                             | label_5:
    0x000161f4 mov r2, r6                    |     r2 = r6;
    0x000161f8 ldr r1, [pc, 0xc8]            |     r1 = "%s: error!: contents of \"%s\" is too long\n";
    0x000161fc add r0, sp, 0x14              |     r0 += buf;
    0x00016200 bl 0x10ce8                    |     r0 = sscanf (r0, "%s: error!: contents of \"%s\" is too long\n", r2);
    0x00016204 cmp r0, 1                     |     
                                             |     if (r0 == 1) {
    0x00016208 movne r3, r5                  |         r3 = r5;
                                             |     }
                                             |     if (r0 == 1) {
    0x0001620c ldrne r2, [pc, 0xa0]          |         r2 = "libmtd";
                                             |     }
                                             |     if (r0 != 1) {
    0x00016210 ldrne r1, [pc, 0xb4]          |         r1 = "%s: error!: cannot read integer from \"%s\"\n\n";
                                             |         goto label_6;
                                             |     }
                                             |     if (r0 != 1) {
                                             | label_6:
    0x00016214 bne 0x161d8                   |         goto label_0;
                                             |     }
    0x00016218 ldrd r2, r3, [r6]             |     __asm ("ldrd r2, r3, [r6]");
    0x0001621c cmp r2, 0                     |     
    0x00016220 sbcs r1, r3, 0                |     __asm ("sbcs r1, r3, 0");
                                             |     if (r2 < 0) {
    0x00016224 bge 0x16248                   |         
    0x00016228 strd r2, r3, [sp]             |         __asm ("strd r2, r3, [sp]");
    0x0001622c ldr r3, [pc, 0x7c]            |         r3 = *(0x162ac);
    0x00016230 str r5, [sp, 8]               |         var_8h = r5;
    0x00016234 ldr r2, [pc, 0x78]            |         r2 = stderr;
    0x00016238 ldr r1, [pc, 0x90]            |         r1 = "%s: error!: cannot read integer from \"%s\"\n\n";
    0x0001623c ldr r0, [r3]                  |         r0 = *(0x162ac);
    0x00016240 bl 0x10c7c                    |         fprintf (r0, "%s: error!: cannot read integer from \"%s\"\n\n", r2, r3, r4, r5)
    0x00016244 b 0x161e4                     |         goto label_1;
                                             |     }
    0x00016248 mov r0, r4                    |     r0 = r4;
    0x0001624c bl 0x10dcc                    |     r0 = close (r0);
    0x00016250 subs r4, r0, 0                |     r4 = r0 - 0;
                                             |     if (r4 != r0) {
    0x00016254 beq 0x162a4                   |         
    0x00016258 bl 0x10d78                    |         errno_location ();
    0x0001625c ldr r6, [pc, 0x4c]            |         r6 = *(0x162ac);
    0x00016260 mov r3, r5                    |         r3 = r5;
    0x00016264 ldr r2, [pc, 0x48]            |         r2 = stderr;
    0x00016268 ldr r1, [pc, 0x64]            |         r1 = "%s: error!: negative value %lld in \"%s\"\n";
    0x0001626c ldr r4, [r0]                  |         r4 = *(r0);
    0x00016270 ldr r0, [r6]                  |         r0 = *(0x162ac);
    0x00016274 bl 0x10c7c                    |         fprintf (r0, "%s: error!: negative value %lld in \"%s\"\n", r2, r3, r4, r5, r6)
    0x00016278 mov r0, r4                    |         r0 = r4;
    0x0001627c ldr r5, [r6]                  |         r5 = *(0x162ac);
    0x00016280 bl 0x10bc8                    |         strerror (r0);
    0x00016284 str r4, [sp]                  |         *(sp) = r4;
    0x00016288 ldr r3, [pc, 0x2c]            |         r3 = "%s: error!: cannot read \"%s\"\n";
    0x0001628c mov r2, 8                     |         r2 = 8;
    0x00016290 ldr r1, [pc, 0x28]            |         r1 = *(0x162bc);
    0x00016294 str r0, [sp, 4]               |         var_4h = r0;
    0x00016298 mov r0, r5                    |         r0 = r5;
    0x0001629c bl 0x10c7c                    |         fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4)
                                             | label_4:
    0x000162a0 mvn r4, 0                     |         r4 = ~0;
                                             |     }
                                             | label_2:
    0x000162a4 mov r0, r4                    |     r0 = r4;
    0x000162a8 add sp, sp, 0x4c              |     
    0x000162ac pop {r4, r5, r6, r7, 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 @ 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 @ 0x1637c */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.0001637c ()                                  | void fcn_0001637c (int32_t arg_78h, int32_t arg_80h, int32_t arg_84h, int32_t arg_88h, uint32_t request, uint32_t arg_90h, int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_18h;
                                                             |     int32_t var_24h;
                                                             |     int32_t var_2ch;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_34h;
                                                             |     void * s;
                                                             |     int32_t var_38h_2;
                                                             |     int32_t var_44h;
                                                             |     int32_t var_48h;
                                                             |     int32_t var_4ch;
                                                             |     int32_t var_54h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0001637c push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00016380 ldr r8, [pc, 0x2d0]                           |     r8 = *(0x16654);
    0x00016384 sub sp, sp, 0x54                              |     
    0x00016388 mov r4, r1                                    |     r4 = r1;
    0x0001638c mov r5, r0                                    |     r5 = r0;
    0x00016390 mov r1, 0                                     |     r1 = 0;
    0x00016394 mov sb, r2                                    |     sb = r2;
    0x00016398 add r0, sp, 0x38                              |     r0 += s;
    0x0001639c mov r2, 0x18                                  |     r2 = 0x18;
    0x000163a0 ldrd sl, fp, [sp, 0x78]                       |     __asm ("ldrd sl, fp, [arg_78h]");
    0x000163a4 bl 0x10d18                                    |     memset (r0, r1, r2);
    0x000163a8 mov r3, 0                                     |     r3 = 0;
    0x000163ac ldr r2, [sp, 0x8c]                            |     r2 = *(request);
    0x000163b0 str r3, [sp, 0x2c]                            |     var_2ch = r3;
    0x000163b4 str r3, [sp, 0x30]                            |     var_30h = r3;
    0x000163b8 str r3, [sp, 0x34]                            |     var_34h = r3;
    0x000163bc ldr r3, [pc, 0x298]                           |     r3 = "MEMREADOOB64";
    0x000163c0 cmp r2, r3                                    |     
    0x000163c4 ldr r2, [pc, 0x294]                           |     r2 = *(0x1665c);
    0x000163c8 ldr r3, [pc, 0x294]                           |     r3 = "MEMREADOOB";
                                                             |     if (r2 != r3) {
    0x000163cc moveq r3, r2                                  |         r3 = r2;
                                                             |     }
    0x000163d0 str r3, [sp, 0x24]                            |     var_24h = r3;
    0x000163d4 ldr r3, [pc, 0x28c]                           |     r3 = "MEMWRITEOOB";
    0x000163d8 ldr r2, [r4, 0xe4]                            |     r2 = *((r4 + 0xe4));
                                                             |     if (r2 == r3) {
    0x000163dc movne r8, r3                                  |         r8 = r3;
                                                             |     }
    0x000163e0 ldr r3, [r4, 0xe0]                            |     r3 = *((r4 + 0xe0));
    0x000163e4 smull r0, r1, r3, r2                          |     r0:r1 = r3 * r2;
    0x000163e8 cmp r1, fp                                    |     
    0x000163ec cmpeq r0, sl                                  |     __asm ("cmpeq r0, sl");
                                                             |     if (r1 > fp) {
    0x000163f0 bhi 0x16438                                   |         goto label_2;
                                                             |     }
    0x000163f4 strd r0, r1, [sp, 0x10]                       |     __asm ("strd r0, r1, [var_10h]");
    0x000163f8 ldr r2, [pc, 0x26c]                           |     r2 = "MEMWRITEOOB64";
    0x000163fc str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00016400 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00016404 ldr r1, [pc, 0x264]                           |     r1 = "libmtd";
    0x00016408 str r3, [sp, 8]                               |     var_8h = r3;
    0x0001640c ldr r3, [pc, 0x260]                           |     r3 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x00016410 strd sl, fp, [sp]                             |     __asm ("strd sl, fp, [sp]");
    0x00016414 ldr r0, [r3]                                  |     r0 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x00016418 bl 0x10c7c                                    |     r0 = fprintf (r0, "libmtd", "MEMWRITEOOB64", r3)
                                                             |     do {
                                                             | label_1:
    0x0001641c bl 0x10d78                                    |         errno_location ();
    0x00016420 mvn r7, 0                                     |         r7 = ~0;
    0x00016424 mov r3, 0x16                                  |         r3 = 0x16;
    0x00016428 str r3, [r0]                                  |         *(r0) = r3;
                                                             | label_0:
    0x0001642c mov r0, r7                                    |         r0 = r7;
    0x00016430 add sp, sp, 0x54                              |         
    0x00016434 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             | label_2:
    0x00016438 ldr r3, [r4, 0xe8]                            |         r3 = *((r4 + 0xe8));
    0x0001643c ldrd r0, r1, [sp, 0x80]                       |         __asm ("ldrd r0, r1, [arg_80h]");
    0x00016440 ldr r2, [r4, 0xf0]                            |         r2 = *((r4 + 0xf0));
    0x00016444 sub r3, r3, 1                                 |         r3--;
    0x00016448 and r3, r3, sl                                |         r3 &= sl;
    0x0001644c adds r0, r0, r3                               |         r0 += r3;
    0x00016450 adc r1, r1, r3, asr 31                        |         __asm ("adc r1, r1, r3, asr 31");
    0x00016454 mov r6, r0                                    |         r6 = r0;
    0x00016458 mov r7, r1                                    |         r7 = r1;
    0x0001645c ldr r0, [sp, 0x80]                            |         r0 = *(arg_80h);
    0x00016460 asr r1, r2, 0x1f                              |         r1 = r2 >> 0x1f;
    0x00016464 ldr ip, [sp, 0x84]                            |         ip = *(arg_84h);
    0x00016468 cmp r7, r1                                    |         
    0x0001646c cmpeq r6, r2                                  |         __asm ("cmpeq r6, r2");
                                                             |         if (r7 <= r1) {
    0x00016470 movhi r1, 1                                   |             r1 = 1;
                                                             |         }
                                                             |         if (r7 > r1) {
    0x00016474 movls r1, 0                                   |             r1 = 0;
                                                             |         }
    0x00016478 orrs r0, r0, ip                               |         r0 |= ip;
                                                             |         if (r0 != r0) {
    0x0001647c moveq r1, 1                                   |             r1 = 1;
                                                             |         }
    0x00016480 cmp r1, 0                                     |         
                                                             |         if (r1 == 0) {
    0x00016484 beq 0x164bc                                   |             goto label_3;
                                                             |         }
    0x00016488 str r2, [sp, 0x18]                            |         var_18h = r2;
    0x0001648c ldr r2, [r4]                                  |         r2 = *(r4);
    0x00016490 str r3, [sp, 0x10]                            |         var_10h = r3;
    0x00016494 str r2, [sp, 0x14]                            |         var_14h = r2;
    0x00016498 ldrd r2, r3, [sp, 0x80]                       |         __asm ("ldrd r2, r3, [arg_80h]");
    0x0001649c ldr r1, [pc, 0x1d4]                           |         r1 = stderr;
    0x000164a0 strd r2, r3, [sp]                             |         __asm ("strd r2, r3, [sp]");
    0x000164a4 ldr r3, [pc, 0x1c8]                           |         r3 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x000164a8 strd sl, fp, [sp, 8]                          |         __asm ("strd sl, fp, [var_ch]");
    0x000164ac ldr r2, [pc, 0x1b8]                           |         r2 = "MEMWRITEOOB64";
    0x000164b0 ldr r0, [r3]                                  |         r0 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x000164b4 bl 0x10c7c                                    |         fprintf ("_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_", r1, r2, r3)
    0x000164b8 b 0x1641c                                     |         
                                                             |     } while (1);
                                                             | label_3:
    0x000164bc ldr r3, [sp, 0x80]                            |     r3 = *(arg_80h);
    0x000164c0 strd sl, fp, [sp, 0x38]                       |     __asm ("strd sl, fp, [s]");
    0x000164c4 str r3, [sp, 0x44]                            |     var_44h = r3;
    0x000164c8 ldr r3, [sp, 0x88]                            |     r3 = *(arg_88h);
    0x000164cc str r1, [sp, 0x4c]                            |     var_4ch = r1;
    0x000164d0 str r3, [sp, 0x48]                            |     var_48h = r3;
    0x000164d4 ldrb r3, [r5, 0x34]                           |     r3 = *((r5 + 0x34));
    0x000164d8 tst r3, 2                                     |     
                                                             |     if ((r3 & 2) != 0) {
    0x000164dc bne 0x16588                                   |         goto label_4;
                                                             |     }
    0x000164e0 add r2, sp, 0x38                              |     r2 += s;
    0x000164e4 ldr r1, [sp, 0x8c]                            |     r1 = *(request);
    0x000164e8 mov r0, sb                                    |     r0 = sb;
    0x000164ec bl 0x10bb0                                    |     r0 = ioctl (r0, r1);
    0x000164f0 subs r7, r0, 0                                |     r7 = r0 - 0;
                                                             |     if (r7 == r0) {
    0x000164f4 beq 0x1642c                                   |         goto label_0;
                                                             |     }
    0x000164f8 bl 0x10d78                                    |     r0 = errno_location ();
    0x000164fc ldr r7, [r0]                                  |     r7 = *(r0);
    0x00016500 cmp r7, 0x19                                  |     
                                                             |     if (r7 == 0x19) {
    0x00016504 bne 0x16514                                   |         
    0x00016508 ldrb r3, [r5, 0x34]                           |         r3 = *((r5 + 0x34));
    0x0001650c tst r3, 6                                     |         
                                                             |         if ((r3 & 6) == 0) {
    0x00016510 beq 0x16578                                   |             goto label_5;
                                                             |         }
                                                             |     }
    0x00016514 ldr r2, [r4, 0xe4]                            |     r2 = *((r4 + 0xe4));
    0x00016518 mov r0, sl                                    |     r0 = sl;
    0x0001651c asr r3, r2, 0x1f                              |     r3 = r2 >> 0x1f;
    0x00016520 mov r1, fp                                    |     r1 = fp;
    0x00016524 bl 0x19ba4                                    |     fcn_00019ba4 (r0, r1);
    0x00016528 ldr r6, [pc, 0x144]                           |     r6 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x0001652c strd sl, fp, [sp, 8]                          |     __asm ("strd sl, fp, [var_ch]");
    0x00016530 ldr r2, [pc, 0x134]                           |     r2 = "MEMWRITEOOB64";
    0x00016534 strd r0, r1, [sp, 0x10]                       |     __asm ("strd r0, r1, [var_10h]");
    0x00016538 ldr r3, [r4]                                  |     r3 = *(r4);
    0x0001653c ldr r1, [pc, 0x138]                           |     r1 = "_s:_error_:_Cannot_write__llu_OOB_bytes_to_address__llu__OOB_offset__u____mtd_d_OOB_size_is_only__d_bytes";
    0x00016540 str r3, [sp]                                  |     *(sp) = r3;
    0x00016544 mov r3, r8                                    |     r3 = r8;
    0x00016548 ldr r0, [r6]                                  |     r0 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x0001654c bl 0x10c7c                                    |     fprintf (r0, "_s:_error_:_Cannot_write__llu_OOB_bytes_to_address__llu__OOB_offset__u____mtd_d_OOB_size_is_only__d_bytes", "MEMWRITEOOB64", r3, r4, r5, "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_")
    0x00016550 mov r0, r7                                    |     r0 = r7;
    0x00016554 ldr r8, [r6]                                  |     r8 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x00016558 bl 0x10bc8                                    |     strerror (r0);
    0x0001655c str r7, [sp]                                  |     *(sp) = r7;
    0x00016560 ldr r3, [pc, 0x118]                           |     r3 = "%s: error!: %s ioctl failed for mtd%d, offset %llu (eraseblock %llu)\n";
    0x00016564 mov r2, 8                                     |     r2 = 8;
    0x00016568 ldr r1, [pc, 0x114]                           |     r1 = *(0x16680);
    0x0001656c str r0, [sp, 4]                               |     var_4h = r0;
    0x00016570 mov r0, r8                                    |     r0 = r8;
    0x00016574 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: %s ioctl failed for mtd%d, offset %llu (eraseblock %llu)\n")
                                                             | label_5:
    0x00016578 ldrb r3, [r5, 0x34]                           |     r3 = *((r5 + 0x34));
    0x0001657c bic r3, r3, 4                                 |     r3 = BIT_MASK (r3, 4);
    0x00016580 orr r3, r3, 2                                 |     r3 |= 2;
    0x00016584 strb r3, [r5, 0x34]                           |     *((r5 + 0x34)) = r3;
                                                             | label_4:
    0x00016588 ldrd r2, r3, [sp, 0x38]                       |     __asm ("ldrd r2, r3, [s]");
    0x0001658c mov r1, 0                                     |     r1 = 0;
    0x00016590 mvn r0, 0                                     |     r0 = ~0;
    0x00016594 cmp r3, r1                                    |     
    0x00016598 cmpeq r2, r0                                  |     __asm ("cmpeq r2, r0");
                                                             |     if (r3 >= r1) {
    0x0001659c bls 0x165bc                                   |         
    0x000165a0 ldr r0, [pc, 0xcc]                            |         
    0x000165a4 mvn r3, 0                                     |         r3 = ~0;
    0x000165a8 ldr r2, [pc, 0xbc]                            |         r2 = "MEMWRITEOOB64";
    0x000165ac ldr r1, [pc, 0xd4]                            |         r1 = "_serror__d___s_";
    0x000165b0 ldr r0, [r0]                                  |         r0 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x000165b4 bl 0x10c7c                                    |         fprintf ("_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_", "_serror__d___s_", "MEMWRITEOOB64", r3)
    0x000165b8 b 0x1641c                                     |         goto label_1;
                                                             |     }
    0x000165bc ldr r3, [sp, 0x44]                            |     r3 = var_44h;
    0x000165c0 str r2, [sp, 0x2c]                            |     var_2ch = r2;
    0x000165c4 str r3, [sp, 0x30]                            |     var_30h = r3;
    0x000165c8 ldr r3, [sp, 0x88]                            |     r3 = *(arg_88h);
    0x000165cc add r2, sp, 0x2c                              |     r2 += var_2ch;
    0x000165d0 ldr r1, [sp, 0x90]                            |     r1 = *(arg_90h);
    0x000165d4 mov r0, sb                                    |     r0 = sb;
    0x000165d8 str r3, [sp, 0x34]                            |     var_34h = r3;
    0x000165dc bl 0x10bb0                                    |     r0 = ioctl (r0, r1);
    0x000165e0 subs r7, r0, 0                                |     r7 = r0 - 0;
                                                             |     if (r7 >= r0) {
    0x000165e4 bge 0x1642c                                   |         goto label_0;
                                                             |     }
    0x000165e8 bl 0x10d78                                    |     errno_location ();
    0x000165ec ldr r2, [r4, 0xe4]                            |     r2 = *((r4 + 0xe4));
    0x000165f0 mov r1, fp                                    |     r1 = fp;
    0x000165f4 asr r3, r2, 0x1f                              |     r3 = r2 >> 0x1f;
    0x000165f8 ldr r8, [pc, 0x74]                            |     r8 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x000165fc ldr r5, [r0]                                  |     r5 = *(r0);
    0x00016600 mov r0, sl                                    |     r0 = sl;
    0x00016604 bl 0x19ba4                                    |     fcn_00019ba4 (r0, r1);
    0x00016608 strd sl, fp, [sp, 8]                          |     __asm ("strd sl, fp, [var_ch]");
    0x0001660c ldr r2, [pc, 0x58]                            |     r2 = "MEMWRITEOOB64";
    0x00016610 strd r0, r1, [sp, 0x10]                       |     __asm ("strd r0, r1, [var_10h]");
    0x00016614 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00016618 ldr r1, [pc, 0x5c]                            |     r1 = "_s:_error_:_Cannot_write__llu_OOB_bytes_to_address__llu__OOB_offset__u____mtd_d_OOB_size_is_only__d_bytes";
    0x0001661c str r3, [sp]                                  |     *(sp) = r3;
    0x00016620 ldr r3, [sp, 0x24]                            |     r3 = var_24h;
    0x00016624 ldr r0, [r8]                                  |     r0 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x00016628 bl 0x10c7c                                    |     fprintf (r0, "_s:_error_:_Cannot_write__llu_OOB_bytes_to_address__llu__OOB_offset__u____mtd_d_OOB_size_is_only__d_bytes", "MEMWRITEOOB64", r3)
    0x0001662c mov r0, r5                                    |     r0 = r5;
    0x00016630 ldr r4, [r8]                                  |     r4 = "_s:_error_:_bad_page_address__llu__mtd_d_has__d_eraseblocks___llu_bytes_";
    0x00016634 bl 0x10bc8                                    |     strerror (r0);
    0x00016638 str r5, [sp]                                  |     *(sp) = r5;
    0x0001663c ldr r3, [pc, 0x3c]                            |     r3 = "%s: error!: %s ioctl failed for mtd%d, offset %llu (eraseblock %llu)\n";
    0x00016640 mov r2, 8                                     |     r2 = 8;
    0x00016644 ldr r1, [pc, 0x38]                            |     r1 = *(0x16680);
    0x00016648 str r0, [sp, 4]                               |     var_4h = r0;
    0x0001664c mov r0, r4                                    |     r0 = r4;
    0x00016650 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: %s ioctl failed for mtd%d, offset %llu (eraseblock %llu)\n", r4, r5)
    0x00016654 b 0x1642c                                     |     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 @ 0x1668c */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.0001668c ()              | void fcn_0001668c (int32_t arg1, int32_t arg2) {
                                         |     int32_t var_0h;
                                         |     int32_t var_4h;
                                         |     int32_t var_ch;
                                         |     r0 = arg1;
                                         |     r1 = arg2;
    0x0001668c subs r3, r1, 0            |     r3 = r1 - 0;
    0x00016690 push {r0, r1, r2, lr}     |     
    0x00016694 ldr r2, [r0, 0xe0]        |     r2 = *((r0 + 0xe0));
                                         |     if (r3 >= r1) {
    0x00016698 blt 0x166a8               |         
    0x0001669c cmp r3, r2                |         
                                         |         if (r3 >= r2) {
    0x000166a0 movlt r0, 0               |             r0 = 0;
                                         |         }
                                         |         if (r3 < r2) {
    0x000166a4 blt 0x166d8               |             goto label_0;
                                         |         }
                                         |     }
    0x000166a8 str r2, [sp, 4]           |     var_4h = r2;
    0x000166ac ldr r2, [r0]              |     r2 = *(r0);
    0x000166b0 ldr r0, [pc, 0x28]        |     
    0x000166b4 str r2, [sp]              |     *(sp) = r2;
    0x000166b8 ldr r1, [pc, 0x24]        |     r1 = stderr;
    0x000166bc ldr r2, [pc, 0x24]        |     r2 = "%s: error!: bad eraseblock number %d, mtd%d has %d eraseblocks\n";
    0x000166c0 ldr r0, [r0]              |     r0 = *(0x166dc);
    0x000166c4 bl 0x10c7c                |     r0 = fprintf (r0, r1, r2)
    0x000166c8 bl 0x10d78                |     errno_location ();
    0x000166cc mov r3, 0x16              |     r3 = 0x16;
    0x000166d0 str r3, [r0]              |     *(r0) = r3;
    0x000166d4 mvn r0, 0                 |     r0 = ~0;
                                         | label_0:
    0x000166d8 add sp, sp, 0xc           |     
    0x000166dc 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 @ 0x166ec */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.000166ec ()                              | void fcn_000166ec (int32_t arg1, int32_t arg2) {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_4h;
                                                         |     int32_t var_8h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x000166ec push {r0, r1, r4, r5, r6, r7, r8, lr}     |     
    0x000166f0 ldr r5, [pc, 0x5c]                        |     
    0x000166f4 mov r7, r1                                |     r7 = r1;
    0x000166f8 mov r6, r2                                |     r6 = r2;
    0x000166fc mov r8, r0                                |     r8 = r0;
    0x00016700 bl 0x10d78                                |     errno_location ();
    0x00016704 mov r3, r6                                |     r3 = r6;
    0x00016708 ldr r2, [pc, 0x48]                        |     r2 = stderr;
    0x0001670c ldr r1, [pc, 0x48]                        |     r1 = "libmtd";
    0x00016710 ldr r4, [r0]                              |     r4 = *(r0);
    0x00016714 stm sp, {r7, r8}                          |     *(sp) = r7;
                                                         |     *((sp + 4)) = r8;
    0x00016718 ldr r0, [r5]                              |     r0 = *(0x16750);
    0x0001671c bl 0x10c7c                                |     fprintf (r0, "libmtd", r2, r3, r4)
    0x00016720 mov r0, r4                                |     r0 = r4;
    0x00016724 ldr r5, [r5]                              |     r5 = *(0x16750);
    0x00016728 bl 0x10bc8                                |     strerror (r0);
    0x0001672c str r4, [sp]                              |     *(sp) = r4;
    0x00016730 ldr r3, [pc, 0x28]                        |     r3 = "%s: error!: %s ioctl failed for eraseblock %d (mtd%d)\n";
    0x00016734 mov r2, 8                                 |     r2 = 8;
    0x00016738 ldr r1, [pc, 0x24]                        |     r1 = *(0x16760);
    0x0001673c str r0, [sp, 4]                           |     var_4h = r0;
    0x00016740 mov r0, r5                                |     r0 = r5;
    0x00016744 bl 0x10c7c                                |     fprintf (r0, r1, r2, "%s: error!: %s ioctl failed for eraseblock %d (mtd%d)\n", r4)
    0x00016748 mvn r0, 0                                 |     r0 = ~0;
    0x0001674c add sp, sp, 8                             |     
    0x00016750 pop {r4, r5, r6, r7, r8, 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 @ 0x16bb4 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.00016bb4 ()                          | void fcn_00016bb4 () {
                                                     |     int32_t var_0h;
                                                     |     int32_t var_4h;
                                                     |     int32_t var_ch;
    0x00016bb4 push {r0, r1, r2, r4, r5, lr}         |     
    0x00016bb8 mov r1, 0x38                          |     r1 = 0x38;
    0x00016bbc mov r0, 1                             |     r0 = 1;
    0x00016bc0 bl 0x10c64                            |     r0 = calloc (r0, r1);
    0x00016bc4 subs r4, r0, 0                        |     r4 = r0 - 0;
                                                     |     if (r4 == r0) {
    0x00016bc8 bne 0x16c18                           |         
    0x00016bcc bl 0x10d78                            |         errno_location ();
    0x00016bd0 ldr r5, [pc, 0x1ec]                   |         
    0x00016bd4 ldr r2, [pc, 0x1ec]                   |         r2 = stderr;
    0x00016bd8 ldr r1, [pc, 0x1ec]                   |         r1 = "libmtd";
    0x00016bdc ldr r4, [r0]                          |         r4 = *(r0);
    0x00016be0 ldr r0, [r5]                          |         r0 = *(0x16dc0);
    0x00016be4 bl 0x10c7c                            |         fprintf (r0, "libmtd", r2, r3, r4, r5)
    0x00016be8 mov r0, r4                            |         r0 = r4;
    0x00016bec ldr r5, [r5]                          |         r5 = *(0x16dc0);
    0x00016bf0 bl 0x10bc8                            |         strerror (r0);
    0x00016bf4 str r4, [sp]                          |         *(sp) = r4;
    0x00016bf8 ldr r3, [pc, 0x1d0]                   |         r3 = "_s:_error_:_out_of_memory";
    0x00016bfc mov r2, 8                             |         r2 = 8;
    0x00016c00 ldr r1, [pc, 0x1cc]                   |         r1 = *(0x16dd0);
    0x00016c04 str r0, [sp, 4]                       |         var_4h = r0;
    0x00016c08 mov r0, r5                            |         r0 = r5;
    0x00016c0c bl 0x10c7c                            |         fprintf (r0, r1, r2, "_s:_error_:_out_of_memory", r4)
    0x00016c10 mvn r0, 0                             |         r0 = ~0;
    0x00016c14 bl 0x10d84                            |         exit (r0);
                                                     |     }
    0x00016c18 ldrb r3, [r4, 0x34]                   |     r3 = *((r4 + 0x34));
    0x00016c1c ldr r1, [pc, 0x1b4]                   |     r1 = "_serror__d___s_";
    0x00016c20 bic r3, r3, 6                         |     r3 = BIT_MASK (r3, 6);
    0x00016c24 strb r3, [r4, 0x34]                   |     *((r4 + 0x34)) = r3;
    0x00016c28 ldr r0, [pc, 0x1ac]                   |     r0 = "class/mtd";
    0x00016c2c bl 0x16ac4                            |     r0 = fcn_00016ac4 ("class/mtd", r1);
    0x00016c30 cmp r0, 0                             |     
    0x00016c34 str r0, [r4]                          |     *(r4) = r0;
                                                     |     if (r0 == 0) {
    0x00016c38 beq 0x16db8                           |         goto label_1;
                                                     |     }
    0x00016c3c ldr r1, [pc, 0x19c]                   |     r1 = "_sys";
    0x00016c40 bl 0x16ac4                            |     r0 = fcn_00016ac4 (r0, "_sys");
    0x00016c44 cmp r0, 0                             |     
    0x00016c48 str r0, [r4, 4]                       |     *((r4 + 4)) = r0;
                                                     |     if (r0 == 0) {
    0x00016c4c beq 0x16db8                           |         goto label_1;
                                                     |     }
    0x00016c50 ldr r1, [pc, 0x18c]                   |     r1 = *(0x16de0);
    0x00016c54 bl 0x16ac4                            |     r0 = fcn_00016ac4 (r0, r1);
    0x00016c58 cmp r0, 0                             |     
    0x00016c5c str r0, [r4, 0xc]                     |     *((r4 + 0xc)) = r0;
                                                     |     if (r0 == 0) {
    0x00016c60 beq 0x16db8                           |         goto label_1;
                                                     |     }
    0x00016c64 mov r0, r4                            |     r0 = r4;
    0x00016c68 bl 0x15d90                            |     r0 = fcn_00015d90 (r0);
    0x00016c6c subs r5, r0, 0                        |     r5 = r0 - 0;
                                                     |     if (r5 != r0) {
    0x00016c70 bne 0x16cbc                           |         goto label_2;
                                                     |     }
    0x00016c74 ldr r0, [r4, 4]                       |     r0 = *((r4 + 4));
    0x00016c78 bl 0x10de4                            |     free (r0);
    0x00016c7c ldr r0, [r4]                          |     r0 = *(r4);
    0x00016c80 bl 0x10de4                            |     free (r0);
    0x00016c84 ldr r0, [r4, 0xc]                     |     r0 = *((r4 + 0xc));
    0x00016c88 bl 0x10de4                            |     free (r0);
    0x00016c8c str r5, [r4]                          |     *(r4) = r5;
    0x00016c90 str r5, [r4, 4]                       |     *((r4 + 4)) = r5;
    0x00016c94 str r5, [r4, 0xc]                     |     *((r4 + 0xc)) = r5;
    0x00016c98 bl 0x18938                            |     r0 = fcn_00018938 ();
    0x00016c9c subs r5, r0, 0                        |     r5 = r0 - 0;
                                                     |     if (r5 != r0) {
    0x00016ca0 bne 0x16cb0                           |         goto label_3;
                                                     |     }
    0x00016ca4 mov r0, r4                            |     r0 = r4;
    0x00016ca8 bl 0x10de4                            |     free (r0);
                                                     | label_0:
    0x00016cac mov r4, 0                             |     r4 = 0;
                                                     |     do {
                                                     | label_3:
    0x00016cb0 mov r0, r4                            |         r0 = r4;
    0x00016cb4 add sp, sp, 0xc                       |         
    0x00016cb8 pop {r4, r5, pc}                      |         
                                                     | label_2:
    0x00016cbc ldr r1, [pc, 0x124]                   |         r1 = "name";
    0x00016cc0 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016cc4 bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "name");
    0x00016cc8 cmp r0, 0                             |         
    0x00016ccc str r0, [r4, 8]                       |         *((r4 + 8)) = r0;
                                                     |         if (r0 == 0) {
    0x00016cd0 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016cd4 ldr r1, [pc, 0x110]                   |         r1 = *(0x16de8);
    0x00016cd8 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016cdc bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, r1);
    0x00016ce0 cmp r0, 0                             |         
    0x00016ce4 str r0, [r4, 0x10]                    |         *((r4 + 0x10)) = r0;
                                                     |         if (r0 == 0) {
    0x00016ce8 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016cec ldr r1, [pc, 0xfc]                    |         r1 = "type";
    0x00016cf0 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016cf4 bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "type");
    0x00016cf8 cmp r0, 0                             |         
    0x00016cfc str r0, [r4, 0x14]                    |         *((r4 + 0x14)) = r0;
                                                     |         if (r0 == 0) {
    0x00016d00 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016d04 ldr r1, [pc, 0xe8]                    |         r1 = "erasesize";
    0x00016d08 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016d0c bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "erasesize");
    0x00016d10 cmp r0, 0                             |         
    0x00016d14 str r0, [r4, 0x18]                    |         *((r4 + 0x18)) = r0;
                                                     |         if (r0 == 0) {
    0x00016d18 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016d1c ldr r1, [pc, 0xd4]                    |         r1 = "size";
    0x00016d20 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016d24 bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "size");
    0x00016d28 cmp r0, 0                             |         
    0x00016d2c str r0, [r4, 0x1c]                    |         *((r4 + 0x1c)) = r0;
                                                     |         if (r0 == 0) {
    0x00016d30 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016d34 ldr r1, [pc, 0xc0]                    |         r1 = "writesize";
    0x00016d38 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016d3c bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "writesize");
    0x00016d40 cmp r0, 0                             |         
    0x00016d44 str r0, [r4, 0x20]                    |         *((r4 + 0x20)) = r0;
                                                     |         if (r0 == 0) {
    0x00016d48 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016d4c ldr r1, [pc, 0xac]                    |         r1 = "subpagesize";
    0x00016d50 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016d54 bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "subpagesize");
    0x00016d58 cmp r0, 0                             |         
    0x00016d5c str r0, [r4, 0x24]                    |         *((r4 + 0x24)) = r0;
                                                     |         if (r0 == 0) {
    0x00016d60 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016d64 ldr r1, [pc, 0x98]                    |         r1 = "oobsize";
    0x00016d68 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016d6c bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "oobsize");
    0x00016d70 cmp r0, 0                             |         
    0x00016d74 str r0, [r4, 0x28]                    |         *((r4 + 0x28)) = r0;
                                                     |         if (r0 == 0) {
    0x00016d78 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016d7c ldr r1, [pc, 0x84]                    |         r1 = "oobavail";
    0x00016d80 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016d84 bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "oobavail");
    0x00016d88 cmp r0, 0                             |         
    0x00016d8c str r0, [r4, 0x2c]                    |         *((r4 + 0x2c)) = r0;
                                                     |         if (r0 == 0) {
    0x00016d90 beq 0x16db8                           |             goto label_1;
                                                     |         }
    0x00016d94 ldr r1, [pc, 0x70]                    |         r1 = "numeraseregions";
    0x00016d98 ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x00016d9c bl 0x16ac4                            |         r0 = fcn_00016ac4 (r0, "numeraseregions");
    0x00016da0 cmp r0, 0                             |         
                                                     |         if (r0 == 0) {
    0x00016da4 ldrbne r3, [r4, 0x34]                 |             r3 = *((r4 + 0x34));
                                                     |         }
    0x00016da8 str r0, [r4, 0x30]                    |         *((r4 + 0x30)) = r0;
                                                     |         if (r0 == 0) {
    0x00016dac orrne r3, r3, 1                       |             r3 |= 1;
                                                     |         }
                                                     |         if (r0 == 0) {
    0x00016db0 strbne r3, [r4, 0x34]                 |             *((r4 + 0x34)) = r3;
                                                     |         }
    0x00016db4 bne 0x16cb0                           |         
                                                     |     } while (r0 != 0);
                                                     | label_1:
    0x00016db8 mov r0, r4                            |     r0 = r4;
    0x00016dbc bl 0x16b38                            |     fcn_00016b38 (r0);
    0x00016dc0 b 0x16cac                             |     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 @ 0x16e90 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00016e90 ()                              | void fcn_00016e90 (int32_t arg1, void * s) {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_4h;
                                                         |     int32_t var_ch;
                                                         |     int32_t var_10h;
                                                         |     int32_t var_0h_2;
                                                         |     r0 = arg1;
                                                         |     r1 = s;
                                                         | label_3:
    0x000168e0 ldrb r3, [r1, 0xc]                        |     r3 = *((r1 + 0xc));
    0x000168e4 push {r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x000168e8 orr r3, r3, 1                             |     r3 |= 1;
    0x000168ec sub sp, sp, 0x110                         |     
    0x000168f0 strb r3, [r1, 0xc]                        |     *((r1 + 0xc)) = r3;
    0x000168f4 mov r5, r0                                |     r5 = r0;
    0x000168f8 ldr r0, [r0]                              |     r0 = *(r0);
    0x000168fc mov r4, r1                                |     r4 = r1;
    0x00016900 bl 0x10d3c                                |     r0 = opendir ();
    0x00016904 mov r8, r0                                |     r8 = r0;
    0x00016908 bl 0x10d78                                |     errno_location ();
    0x0001690c cmp r8, 0                                 |     
    0x00016910 mov r6, r0                                |     r6 = r0;
                                                         |     if (r8 != 0) {
    0x00016914 bne 0x16964                               |         goto label_4;
                                                         |     }
    0x00016918 ldr r4, [r0]                              |     r4 = *(r0);
    0x0001691c ldr r6, [pc, 0x17c]                       |     r6 = *(0x16a9c);
    0x00016920 ldr r3, [r5]                              |     r3 = *(r5);
    0x00016924 ldr r2, [pc, 0x178]                       |     r2 = stderr;
    0x00016928 ldr r1, [pc, 0x178]                       |     r1 = "libmtd";
                                                         | label_2:
    0x0001692c ldr r0, [r6]                              |     r0 = *(r6);
    0x00016930 bl 0x10c7c                                |     fprintf (r0, "libmtd", r2, r3, r4, r5, r6)
    0x00016934 mov r0, r4                                |     r0 = r4;
    0x00016938 ldr r5, [r6]                              |     r5 = *(r6);
    0x0001693c bl 0x10bc8                                |     strerror (r0);
    0x00016940 str r4, [sp]                              |     *(sp) = r4;
    0x00016944 ldr r3, [pc, 0x160]                       |     r3 = "%s: error!: cannot open \"%s\"\n";
    0x00016948 mov r2, 8                                 |     r2 = 8;
    0x0001694c ldr r1, [pc, 0x15c]                       |     r1 = *(0x16aac);
    0x00016950 str r0, [sp, 4]                           |     var_4h = r0;
    0x00016954 mov r0, r5                                |     r0 = r5;
    0x00016958 bl 0x10c7c                                |     fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
                                                         |     do {
    0x0001695c mvn r0, 0                                 |         r0 = ~0;
    0x00016960 b 0x16a98                                 |         goto label_5;
                                                         | label_4:
    0x00016964 ldr sl, [pc, 0x148]                       |         sl = "mtd_d_s";
    0x00016968 mvn r3, 0x80000000                        |         r3 = ~0x80000000;
    0x0001696c mov sb, 0                                 |         sb = 0;
    0x00016970 str r3, [r4, 4]                           |         *((r4 + 4)) = r3;
                                                         | label_0:
    0x00016974 str sb, [r6]                              |         *(r6) = sb;
    0x00016978 mov r0, r8                                |         r0 = r8;
    0x0001697c bl 0x10cd0                                |         r0 = readdir64 ();
    0x00016980 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x00016984 beq 0x16a14                               |             goto label_6;
                                                         |         }
    0x00016988 add r7, r0, 0x13                          |         r7 = r0 + 0x13;
    0x0001698c mov r0, r7                                |         r0 = r7;
    0x00016990 bl 0x10d90                                |         r0 = strlen (r0);
    0x00016994 cmp r0, 0xfe                              |         
                                                         |         if (r0 < 0xfe) {
    0x00016998 bls 0x169cc                               |             goto label_7;
                                                         |         }
    0x0001699c ldr r0, [pc, 0xfc]                        |         
    0x000169a0 str r7, [sp]                              |         *(sp) = r7;
    0x000169a4 ldr r2, [pc, 0xf8]                        |         r2 = stderr;
    0x000169a8 ldr r3, [r5]                              |         r3 = *(r5);
    0x000169ac ldr r1, [pc, 0x104]                       |         r1 = "mtd_d_s";
    0x000169b0 ldr r0, [r0]                              |         r0 = *(0x16a9c);
    0x000169b4 bl 0x10c7c                                |         fprintf (r0, "mtd_d_s", r2, r3)
    0x000169b8 mov r3, 0x16                              |         r3 = 0x16;
    0x000169bc str r3, [r6]                              |         *(r6) = r3;
                                                         | label_1:
    0x000169c0 mov r0, r8                                |         r0 = r8;
    0x000169c4 bl 0x10db4                                |         closedir ();
    0x000169c8 b 0x1695c                                 |         
                                                         |     } while (1);
                                                         | label_7:
    0x000169cc add r3, sp, 0x10                          |     r3 += var_10h;
    0x000169d0 add r2, sp, 0xc                           |     r2 += var_ch;
    0x000169d4 mov r1, sl                                |     r1 = sl;
    0x000169d8 mov r0, r7                                |     r0 = r7;
    0x000169dc bl 0x10ce8                                |     r0 = sscanf (r0, r1, r2);
    0x000169e0 cmp r0, 1                                 |     
                                                         |     if (r0 != 1) {
    0x000169e4 bne 0x16974                               |         goto label_0;
                                                         |     }
    0x000169e8 ldr r3, [r4]                              |     r3 = *(r4);
    0x000169ec ldr r2, [r4, 8]                           |     r2 = *((r4 + 8));
    0x000169f0 add r3, r3, 1                             |     r3++;
    0x000169f4 str r3, [r4]                              |     *(r4) = r3;
    0x000169f8 ldr r3, [sp, 0xc]                         |     r3 = var_ch;
    0x000169fc cmp r2, r3                                |     
    0x00016a00 ldr r2, [r4, 4]                           |     r2 = *((r4 + 4));
                                                         |     if (r2 >= r3) {
    0x00016a04 strlt r3, [r4, 8]                         |         *((r4 + 8)) = r3;
                                                         |     }
    0x00016a08 cmp r3, r2                                |     
                                                         |     if (r3 >= r2) {
    0x00016a0c strlt r3, [r4, 4]                         |         *((r4 + 4)) = r3;
                                                         |     }
    0x00016a10 b 0x16974                                 |     goto label_0;
                                                         | label_6:
    0x00016a14 ldr r7, [r6]                              |     r7 = *(r6);
    0x00016a18 cmp r7, 0                                 |     
                                                         |     if (r7 != 0) {
    0x00016a1c beq 0x16a64                               |         
    0x00016a20 ldr r4, [pc, 0x78]                        |         
    0x00016a24 ldr r3, [r5]                              |         r3 = *(r5);
    0x00016a28 ldr r2, [pc, 0x74]                        |         r2 = stderr;
    0x00016a2c ldr r1, [pc, 0x88]                        |         r1 = "_s:_error_:_invalid_entry_in__s:___s_";
    0x00016a30 ldr r0, [r4]                              |         r0 = *(0x16a9c);
    0x00016a34 bl 0x10c7c                                |         fprintf (r0, "_s:_error_:_invalid_entry_in__s:___s_", r2, r3, r4)
    0x00016a38 mov r0, r7                                |         r0 = r7;
    0x00016a3c ldr r4, [r4]                              |         r4 = *(0x16a9c);
    0x00016a40 bl 0x10bc8                                |         strerror (r0);
    0x00016a44 str r7, [sp]                              |         *(sp) = r7;
    0x00016a48 ldr r3, [pc, 0x5c]                        |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00016a4c mov r2, 8                                 |         r2 = 8;
    0x00016a50 ldr r1, [pc, 0x58]                        |         r1 = *(0x16aac);
    0x00016a54 str r0, [sp, 4]                           |         var_4h = r0;
    0x00016a58 mov r0, r4                                |         r0 = r4;
    0x00016a5c bl 0x10c7c                                |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n")
    0x00016a60 b 0x169c0                                 |         goto label_1;
                                                         |     }
    0x00016a64 mov r0, r8                                |     r0 = r8;
    0x00016a68 bl 0x10db4                                |     r0 = closedir ();
    0x00016a6c cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00016a70 beq 0x16a8c                               |         
    0x00016a74 ldr r4, [r6]                              |         r4 = *(r6);
    0x00016a78 ldr r3, [r5]                              |         r3 = *(r5);
    0x00016a7c ldr r6, [pc, 0x1c]                        |         r6 = *(0x16a9c);
    0x00016a80 ldr r2, [pc, 0x1c]                        |         r2 = stderr;
    0x00016a84 ldr r1, [pc, 0x34]                        |         r1 = "%s: error!: readdir failed on \"%s\"\n";
    0x00016a88 b 0x1692c                                 |         goto label_2;
                                                         |     }
    0x00016a8c ldr r3, [r4, 4]                           |     r3 = *((r4 + 4));
    0x00016a90 cmn r3, 0x80000001                        |     
                                                         |     if (r3 != 0x80000001) {
    0x00016a94 streq r0, [r4, 4]                         |         *((r4 + 4)) = r0;
                                                         |     }
                                                         | label_5:
    0x00016a98 add sp, sp, 0x110                         |     
    0x00016a9c pop {r4, r5, r6, r7, r8, sb, sl, pc}      |     
    0x00016e90 mov r3, r1                                |     r3 = r1;
    0x00016e94 push {r4, lr}                             |     
    0x00016e98 mov r2, 0x10                              |     r2 = 0x10;
    0x00016e9c mov r4, r0                                |     r4 = r0;
    0x00016ea0 mov r1, 0                                 |     r1 = 0;
    0x00016ea4 mov r0, r3                                |     r0 = r3;
    0x00016ea8 bl 0x10d18                                |     memset (r0, r1, r2);
    0x00016eac ldrb r2, [r4, 0x34]                       |     r2 = *((r4 + 0x34));
    0x00016eb0 tst r2, 1                                 |     
                                                         |     if ((r2 & 1) == 0) {
    0x00016eb4 bne 0x16ec0                               |         
    0x00016eb8 pop {r4, lr}                              |         
    0x00016ebc b 0x18a20                                 |         
                                                         |     } else {
    0x00016ec0 mov r1, r0                                |         r1 = r0;
    0x00016ec4 mov r0, r4                                |         r0 = r4;
    0x00016ec8 pop {r4, lr}                              |         
    0x00016ecc b 0x168e0                                 |         goto label_3;
                                                         |     }
    0x00018a20 push {r4, lr}                             |     
    0x00018a24 sub sp, sp, 0xa0                          |     
    0x00018a28 mov r4, r0                                |     r4 = r0;
    0x00018a2c mov r0, sp                                |     r0 = sp;
    0x00018a30 bl 0x187b0                                |     r0 = fcn_000187b0 (r0);
    0x00018a34 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00018a38 mvneq r3, 0x80000000                      |         r3 = ~0x80000000;
                                                         |     }
                                                         |     if (r0 == 0) {
    0x00018a3c beq 0x18a70                               |         goto label_8;
                                                         |     }
    0x00018a40 mvn r0, 0                                 |     r0 = ~0;
    0x00018a44 b 0x18a84                                 |     goto label_9;
                                                         |     do {
    0x00018a48 ldr r3, [r4]                              |         r3 = *(r4);
    0x00018a4c ldr r2, [r4, 8]                           |         r2 = *((r4 + 8));
    0x00018a50 add r3, r3, 1                             |         r3++;
    0x00018a54 str r3, [r4]                              |         *(r4) = r3;
    0x00018a58 ldr r3, [sp]                              |         r3 = *(sp);
    0x00018a5c cmp r3, r2                                |         
    0x00018a60 ldr r2, [r4, 4]                           |         r2 = *((r4 + 4));
                                                         |         if (r3 <= r2) {
    0x00018a64 strgt r3, [r4, 8]                         |             *((r4 + 8)) = r3;
                                                         |         }
    0x00018a68 cmp r3, r2                                |         
                                                         |         if (r3 < r2) {
    0x00018a6c bge 0x18a74                               |             
                                                         | label_8:
    0x00018a70 str r3, [r4, 4]                           |             *((r4 + 4)) = r3;
                                                         |         }
    0x00018a74 mov r0, sp                                |         r0 = sp;
    0x00018a78 bl 0x1864c                                |         r0 = fcn_0001864c (r0);
    0x00018a7c cmp r0, 0                                 |         
    0x00018a80 bne 0x18a48                               |         
                                                         |     } while (r0 != 0);
                                                         | label_9:
    0x00018a84 add sp, sp, 0xa0                          |     
    0x00018a88 pop {r4, 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 @ 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 @ 0x17464 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00017464 ()                              | void fcn_00017464 (int32_t arg1, int32_t arg2) {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_4h;
                                                         |     int32_t var_8h;
                                                         |     int32_t var_ch;
                                                         |     int32_t var_10h;
                                                         |     int32_t var_14h;
                                                         |     int32_t var_18h;
                                                         |     int32_t var_20h;
                                                         |     int32_t var_30h;
                                                         |     int32_t var_40h;
                                                         |     int32_t var_40h_2;
                                                         |     int32_t var_88h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x00017464 ldrb r3, [r0, 0x34]                       |     r3 = *((r0 + 0x34));
    0x00017468 push {r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x0001746c tst r3, 1                                 |     
    0x00017470 sub sp, sp, 0x88                          |     
    0x00017474 mov r4, r1                                |     r4 = r1;
    0x00017478 mov r7, r2                                |     r7 = r2;
                                                         |     if ((r3 & 1) != 0) {
    0x0001747c bne 0x17494                               |         goto label_3;
                                                         |     }
    0x00017480 mov r1, r2                                |     r1 = r2;
    0x00017484 mov r0, r4                                |     r0 = r4;
    0x00017488 bl 0x18c58                                |     fcn_00018c58 (r0, r1);
                                                         |     do {
                                                         | label_2:
    0x0001748c add sp, sp, 0x88                          |         
    0x00017490 pop {r4, r5, r6, r7, r8, sb, sl, pc}      |         
                                                         | label_3:
    0x00017494 mov r5, r0                                |         r5 = r0;
    0x00017498 add r1, sp, 0x20                          |         r1 += var_20h;
    0x0001749c mov r0, r4                                |         r0 = r4;
    0x000174a0 bl 0x10bd4                                |         r0 = stat64 ();
    0x000174a4 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x000174a8 beq 0x174fc                               |             goto label_4;
                                                         |         }
    0x000174ac bl 0x10d78                                |         errno_location ();
    0x000174b0 ldr r6, [pc, 0x144]                       |         r6 = *(0x175f8);
    0x000174b4 mov r3, r4                                |         r3 = r4;
    0x000174b8 ldr r2, [pc, 0x140]                       |         r2 = stderr;
    0x000174bc ldr r1, [pc, 0x140]                       |         r1 = "libmtd";
    0x000174c0 ldr r5, [r0]                              |         r5 = *(r0);
    0x000174c4 ldr r0, [r6]                              |         r0 = *(0x175f8);
    0x000174c8 bl 0x10c7c                                |         fprintf (r0, "libmtd", r2, r3, r4, r5, r6)
    0x000174cc mov r0, r5                                |         r0 = r5;
    0x000174d0 ldr r4, [r6]                              |         r4 = *(0x175f8);
    0x000174d4 bl 0x10bc8                                |         strerror (r0);
    0x000174d8 str r5, [sp]                              |         *(sp) = r5;
    0x000174dc ldr r3, [pc, 0x124]                       |         r3 = "%s: error!: cannot get information about \"%s\"\n";
    0x000174e0 mov r2, 8                                 |         r2 = 8;
    0x000174e4 ldr r1, [pc, 0x120]                       |         r1 = *(0x17608);
    0x000174e8 str r0, [sp, 4]                           |         var_4h = r0;
    0x000174ec mov r0, r4                                |         r0 = r4;
    0x000174f0 bl 0x10c7c                                |         fprintf (r0, r1, r2, "%s: error!: cannot get information about \"%s\"\n", r4, r5)
                                                         | label_0:
    0x000174f4 mvn r0, 0                                 |         r0 = ~0;
    0x000174f8 b 0x1748c                                 |         
                                                         |     } while (1);
                                                         | label_4:
    0x000174fc ldr r3, [sp, 0x30]                        |     r3 = var_30h;
    0x00017500 and r3, r3, 0xf000                        |     r3 &= 0xf000;
    0x00017504 cmp r3, 0x2000                            |     
                                                         |     if (r3 != 0x2000) {
    0x00017508 beq 0x17534                               |         
    0x0001750c ldr r0, [pc, 0xe8]                        |         
    0x00017510 mov r3, r4                                |         r3 = r4;
    0x00017514 ldr r2, [pc, 0xe4]                        |         r2 = stderr;
    0x00017518 ldr r1, [pc, 0xf0]                        |         r1 = "_serror__d___s_";
    0x0001751c ldr r0, [r0]                              |         r0 = *(0x175f8);
    0x00017520 bl 0x10c7c                                |         r0 = fprintf (r0, "_serror__d___s_", r2, r3)
    0x00017524 bl 0x10d78                                |         errno_location ();
    0x00017528 mov r3, 0x16                              |         r3 = 0x16;
    0x0001752c str r3, [r0]                              |         *(r0) = r3;
    0x00017530 b 0x174f4                                 |         goto label_0;
                                                         |     }
    0x00017534 ldrd r8, sb, [sp, 0x40]                   |     __asm ("ldrd r8, sb, [var_40h]");
    0x00017538 mov r0, r8                                |     r0 = r8;
    0x0001753c mov r1, sb                                |     r1 = sb;
    0x00017540 bl 0x10c04                                |     gnu_dev_major ();
    0x00017544 mov r1, sb                                |     r1 = sb;
    0x00017548 mov sl, r0                                |     sl = r0;
    0x0001754c mov r0, r8                                |     r0 = r8;
    0x00017550 bl 0x10c4c                                |     gnu_dev_minor ();
    0x00017554 add r1, sp, 0x10                          |     r1 += var_10h;
    0x00017558 mov r8, r0                                |     r8 = r0;
    0x0001755c mov r0, r5                                |     r0 = r5;
    0x00017560 bl 0x16e90                                |     r0 = fcn_00016e90 (r0, r1);
    0x00017564 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00017568 bne 0x174f4                               |         goto label_0;
                                                         |     }
    0x0001756c bl 0x10d78                                |     errno_location ();
    0x00017570 ldr r4, [sp, 0x14]                        |     r4 = var_14h;
    0x00017574 add sb, r5, 8                             |     sb = r5 + 8;
    0x00017578 mov r6, r0                                |     r6 = r0;
                                                         |     do {
    0x0001757c ldr r3, [sp, 0x18]                        |         r3 = var_18h;
    0x00017580 cmp r4, r3                                |         
                                                         |         if (r4 > r3) {
    0x00017584 bgt 0x175c0                               |             goto label_5;
                                                         |         }
    0x00017588 add r3, sp, 0xc                           |         r3 += var_ch;
    0x0001758c add r2, sp, 8                             |         r2 += var_8h;
    0x00017590 mov r1, r4                                |         r1 = r4;
    0x00017594 mov r0, sb                                |         r0 = sb;
    0x00017598 bl 0x16768                                |         r0 = fcn_00016768 (r0, r1);
    0x0001759c cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x000175a0 beq 0x175cc                               |             goto label_6;
                                                         |         }
    0x000175a4 ldr r3, [r6]                              |         r3 = *(r6);
    0x000175a8 cmp r3, 2                                 |         
                                                         |         if (r3 != 2) {
    0x000175ac bne 0x175b8                               |             goto label_7;
                                                         |         }
                                                         | label_1:
    0x000175b0 add r4, r4, 1                             |         r4++;
    0x000175b4 b 0x1757c                                 |         
                                                         |     } while (1);
                                                         | label_7:
    0x000175b8 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x000175bc bne 0x174f4                               |         goto label_0;
                                                         |     }
                                                         | label_5:
    0x000175c0 mov r3, 0x13                              |     r3 = 0x13;
    0x000175c4 str r3, [r6]                              |     *(r6) = r3;
    0x000175c8 b 0x174f4                                 |     goto label_0;
                                                         | label_6:
    0x000175cc ldr r3, [sp, 8]                           |     r3 = var_8h;
    0x000175d0 cmp sl, r3                                |     
                                                         |     if (sl != r3) {
    0x000175d4 bne 0x175b0                               |         goto label_1;
                                                         |     }
    0x000175d8 ldr r3, [sp, 0xc]                         |     r3 = var_ch;
    0x000175dc cmp r8, r3                                |     
                                                         |     if (r8 != r3) {
    0x000175e0 bne 0x175b0                               |         goto label_1;
                                                         |     }
    0x000175e4 str r0, [r6]                              |     *(r6) = r0;
    0x000175e8 mov r2, r7                                |     r2 = r7;
    0x000175ec mov r1, r4                                |     r1 = r4;
    0x000175f0 mov r0, r5                                |     r0 = r5;
    0x000175f4 bl 0x16ed0                                |     fcn_00016ed0 (r0, r1);
    0x000175f8 b 0x1748c                                 |     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 @ 0x1765c */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0001765c ()                                  | void fcn_0001765c (int32_t arg_40h, int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_8h_2;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_10h_2;
                                                             |     int32_t var_1ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0001765c push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00017660 mov r4, r1                                    |     r4 = r1;
    0x00017664 sub sp, sp, 0x1c                              |     
    0x00017668 mov r6, r0                                    |     r6 = r0;
    0x0001766c mov r1, r3                                    |     r1 = r3;
    0x00017670 mov r0, r4                                    |     r0 = r4;
    0x00017674 mov fp, r2                                    |     
    0x00017678 mov sl, r3                                    |     sl = r3;
    0x0001767c ldr r7, [sp, 0x40]                            |     r7 = *(arg_40h);
    0x00017680 bl 0x1668c                                    |     r0 = fcn_0001668c (r0, r1);
    0x00017684 subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 != r0) {
    0x00017688 bne 0x17774                                   |         goto label_1;
                                                             |     }
    0x0001768c add r1, sl, r7                                |     r1 = sl + r7;
    0x00017690 sub r1, r1, 1                                 |     r1--;
    0x00017694 mov r0, r4                                    |     r0 = r4;
    0x00017698 bl 0x1668c                                    |     r0 = fcn_0001668c (r0, r1);
    0x0001769c subs r5, r0, 0                                |     r5 = r0 - 0;
                                                             |     if (r5 != r0) {
    0x000176a0 bne 0x17774                                   |         goto label_1;
                                                             |     }
    0x000176a4 ldr r3, [r4, 0xe4]                            |     r3 = *((r4 + 0xe4));
    0x000176a8 smull r0, r1, sl, r3                          |     r0:r1 = sl * r3;
    0x000176ac strd r0, r1, [sp, 8]                          |     __asm ("strd r0, r1, [var_8h]");
    0x000176b0 smull r0, r1, r3, r7                          |     r0:r1 = r3 * r7;
    0x000176b4 ldrb r3, [r6, 0x34]                           |     r3 = *((r6 + 0x34));
    0x000176b8 strd r0, r1, [sp, 0x10]                       |     __asm ("strd r0, r1, [var_10h]");
    0x000176bc tst r3, 2                                     |     
                                                             |     if ((r3 & 2) == 0) {
    0x000176c0 bne 0x1771c                                   |         
    0x000176c4 add r2, sp, 8                                 |         r2 += var_8h;
    0x000176c8 ldr r1, [pc, 0xd4]                            |         r1 = *(0x177a0);
    0x000176cc mov r0, fp                                    |         r0 = fp;
    0x000176d0 bl 0x10bb0                                    |         r0 = ioctl (r0, r1);
    0x000176d4 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x000176d8 beq 0x17774                                   |             goto label_1;
                                                             |         }
    0x000176dc bl 0x10d78                                    |         r0 = errno_location ();
    0x000176e0 ldr r3, [r0]                                  |         r3 = *(r0);
    0x000176e4 cmp r3, 0x19                                  |         
                                                             |         if (r3 == 0x19) {
    0x000176e8 bne 0x17704                                   |             
    0x000176ec ldrb r3, [r6, 0x34]                           |             r3 = *((r6 + 0x34));
    0x000176f0 tst r3, 6                                     |             
    0x000176f4 biceq r3, r3, 4                               |             __asm ("biceq r3, r3, 4");
                                                             |             if ((r3 & 6) != 0) {
    0x000176f8 orreq r3, r3, 2                               |                 r3 |= 2;
                                                             |             }
                                                             |             if ((r3 & 6) != 0) {
    0x000176fc strbeq r3, [r6, 0x34]                         |                 *((r6 + 0x34)) = r3;
                                                             |             }
                                                             |             if ((r3 & 6) == 0) {
    0x00017700 beq 0x1771c                                   |                 goto label_2;
                                                             |             }
                                                             |         }
    0x00017704 ldr r2, [pc, 0x9c]                            |         r2 = *(0x177a4);
                                                             | label_0:
    0x00017708 mov r1, sl                                    |         r1 = sl;
    0x0001770c ldr r0, [r4]                                  |         r0 = *(r4);
    0x00017710 bl 0x166ec                                    |         r0 = fcn_000166ec (r0, r1);
    0x00017714 mov r5, r0                                    |         r5 = r0;
    0x00017718 b 0x17774                                     |         
                                                             |     } else {
                                                             | label_2:
    0x0001771c ldrd r0, r1, [sp, 8]                          |         __asm ("ldrd r0, r1, [var_8h]");
    0x00017720 ldrd r2, r3, [sp, 0x10]                       |         __asm ("ldrd r2, r3, [var_10h]");
    0x00017724 mov r7, 0                                     |         r7 = 0;
    0x00017728 adds r8, r0, r2                               |         r8 = r0 + r2;
    0x0001772c adc sb, r1, r3                                |         __asm ("adc sb, r1, r3");
    0x00017730 mvn r6, 0                                     |         r6 = ~0;
    0x00017734 cmp sb, r7                                    |         
    0x00017738 cmpeq r8, r6                                  |         __asm ("cmpeq r8, r6");
                                                             |         if (sb < r7) {
    0x0001773c bls 0x17780                                   |             goto label_3;
                                                             |         }
    0x00017740 ldr r1, [r4, 0xe4]                            |         r1 = *((r4 + 0xe4));
    0x00017744 mvn r0, 0                                     |         r0 = ~0;
    0x00017748 bl 0x1990c                                    |         fcn_0001990c (r0, r1);
    0x0001774c ldr r2, [pc, 0x58]                            |         r2 = "MEMERASE64";
    0x00017750 ldr r1, [pc, 0x58]                            |         r1 = "libmtd";
    0x00017754 mvn r5, 0                                     |         r5 = ~0;
    0x00017758 mov r3, r0                                    |         r3 = r0;
    0x0001775c ldr r0, [pc, 0x50]                            |         
    0x00017760 ldr r0, [r0]                                  |         r0 = "%s: error!: this system can address only %u eraseblocks\n";
    0x00017764 bl 0x10c7c                                    |         r0 = fprintf ("%s: error!: this system can address only %u eraseblocks\n", "libmtd", "MEMERASE64", r3, r4, r5)
    0x00017768 bl 0x10d78                                    |         errno_location ();
    0x0001776c mov r3, 0x16                                  |         r3 = 0x16;
    0x00017770 str r3, [r0]                                  |         *(r0) = r3;
                                                             |     }
                                                             |     do {
                                                             | label_1:
    0x00017774 mov r0, r5                                    |         r0 = r5;
    0x00017778 add sp, sp, 0x1c                              |         
    0x0001777c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             | label_3:
    0x00017780 stm sp, {r0, r2}                              |         *(sp) = r0;
                                                             |         *((sp + 4)) = r2;
    0x00017784 ldr r1, [pc, 0x2c]                            |         r1 = stderr;
    0x00017788 mov r2, sp                                    |         r2 = sp;
    0x0001778c mov r0, fp                                    |         r0 = fp;
    0x00017790 bl 0x10bb0                                    |         r0 = ioctl (r0, r1);
    0x00017794 cmp r0, 0                                     |         
    0x00017798 bge 0x17774                                   |         
                                                             |     } while (r0 >= 0);
    0x0001779c ldr r2, [pc, 0x18]                            |     r2 = *(0x177b8);
    0x000177a0 b 0x17708                                     |     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 @ 0x179f0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000179f0 ()                                      | void fcn_000179f0 (int32_t arg_38h, int32_t arg_3ch, int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_8h;
                                                                 |     int32_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x000179f0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}         |     
    0x000179f4 mov fp, r1                                        |     
    0x000179f8 sub sp, sp, 0x14                                  |     
    0x000179fc mov r1, r2                                        |     r1 = r2;
    0x00017a00 mov sb, r0                                        |     sb = r0;
    0x00017a04 mov sl, r2                                        |     sl = r2;
    0x00017a08 mov r5, r3                                        |     r5 = r3;
    0x00017a0c ldr r8, [sp, 0x3c]                                |     r8 = *(arg_3ch);
    0x00017a10 bl 0x1668c                                        |     r0 = fcn_0001668c (r0, r1);
    0x00017a14 subs r4, r0, 0                                    |     r4 = r0 - 0;
                                                                 |     if (r4 != r0) {
    0x00017a18 bne 0x17a6c                                       |         goto label_0;
                                                                 |     }
    0x00017a1c cmp r5, 0                                         |     
    0x00017a20 ldr r3, [sb, 0xe4]                                |     r3 = *((sb + 0xe4));
                                                                 |     if (r5 >= 0) {
    0x00017a24 blt 0x17a34                                       |         
    0x00017a28 add r2, r5, r8                                    |         r2 = r5 + r8;
    0x00017a2c cmp r2, r3                                        |         
                                                                 |         if (r2 <= r3) {
    0x00017a30 ble 0x17a78                                       |             goto label_3;
                                                                 |         }
                                                                 |     }
    0x00017a34 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00017a38 ldr r0, [pc, 0x128]                               |     
    0x00017a3c ldr r3, [sb]                                      |     r3 = *(sb);
    0x00017a40 str r8, [sp]                                      |     *(sp) = r8;
    0x00017a44 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00017a48 ldr r2, [pc, 0x11c]                               |     r2 = stderr;
    0x00017a4c mov r3, r5                                        |     r3 = r5;
    0x00017a50 ldr r1, [pc, 0x118]                               |     r1 = "libmtd";
    0x00017a54 ldr r0, [r0]                                      |     r0 = *(0x17b64);
    0x00017a58 bl 0x10c7c                                        |     r0 = fprintf (r0, "libmtd", r2, r3)
    0x00017a5c bl 0x10d78                                        |     errno_location ();
    0x00017a60 mov r3, 0x16                                      |     r3 = 0x16;
    0x00017a64 str r3, [r0]                                      |     *(r0) = r3;
                                                                 |     do {
    0x00017a68 mvn r4, 0                                         |         r4 = ~0;
                                                                 | label_0:
    0x00017a6c mov r0, r4                                        |         r0 = r4;
    0x00017a70 add sp, sp, 0x14                                  |         
    0x00017a74 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}          |         
                                                                 | label_3:
    0x00017a78 mov r6, r5                                        |         r6 = r5;
    0x00017a7c asr r7, r5, 0x1f                                  |         r7 = r5 >> 0x1f;
    0x00017a80 smlal r6, r7, r3, sl                              |         __asm ("smlal r6, r7, r3, sl");
    0x00017a84 str r4, [sp]                                      |         *(sp) = r4;
    0x00017a88 mov r3, r7                                        |         r3 = r7;
    0x00017a8c mov r2, r6                                        |         r2 = r6;
    0x00017a90 mov r0, fp                                        |         r0 = fp;
    0x00017a94 bl 0x10d9c                                        |         lseek64 ();
    0x00017a98 cmp r7, r1                                        |         
    0x00017a9c cmpeq r6, r0                                      |         __asm ("cmpeq r6, r0");
                                                                 |         if (r7 != r1) {
    0x00017aa0 moveq r7, r4                                      |             r7 = r4;
                                                                 |         }
                                                                 |         if (r7 == r1) {
    0x00017aa4 beq 0x17b04                                       |             goto label_4;
                                                                 |         }
    0x00017aa8 bl 0x10d78                                        |         errno_location ();
    0x00017aac ldr r5, [pc, 0xb4]                                |         
    0x00017ab0 mov r2, r6                                        |         r2 = r6;
    0x00017ab4 mov r3, r7                                        |         r3 = r7;
    0x00017ab8 ldr r1, [pc, 0xb4]                                |         r1 = "%s: error!: bad offset %d or length %d, mtd%d eraseblock size is %d\n";
    0x00017abc ldr r4, [r0]                                      |         r4 = *(r0);
    0x00017ac0 strd r2, r3, [sp]                                 |         __asm ("strd r2, r3, [sp]");
    0x00017ac4 ldr r3, [sb]                                      |         r3 = *(sb);
    0x00017ac8 ldr r0, [r5]                                      |         r0 = *(0x17b64);
    0x00017acc ldr r2, [pc, 0x98]                                |         r2 = stderr;
    0x00017ad0 bl 0x10c7c                                        |         fprintf (r0, "%s: error!: bad offset %d or length %d, mtd%d eraseblock size is %d\n", r2, r3, r4, r5)
    0x00017ad4 ldr r5, [r5]                                      |         r5 = *(0x17b64);
                                                                 | label_2:
    0x00017ad8 mov r0, r4                                        |         r0 = r4;
    0x00017adc bl 0x10bc8                                        |         strerror (r0);
    0x00017ae0 str r4, [sp]                                      |         *(sp) = r4;
    0x00017ae4 ldr r3, [pc, 0x8c]                                |         r3 = "_s:_error_:_cannot_seek_mtd_d_to_offset__lld";
    0x00017ae8 mov r2, 8                                         |         r2 = 8;
    0x00017aec ldr r1, [pc, 0x88]                                |         r1 = *(0x17b78);
    0x00017af0 str r0, [sp, 4]                                   |         var_4h = r0;
    0x00017af4 mov r0, r5                                        |         r0 = r5;
    0x00017af8 bl 0x10c7c                                        |         fprintf (r0, r1, r2, "_s:_error_:_cannot_seek_mtd_d_to_offset__lld", r4)
    0x00017afc b 0x17a68                                         |         
                                                                 |     } while (1);
                                                                 | label_1:
    0x00017b00 add r7, r7, r0                                    |     r7 += r0;
                                                                 | label_4:
    0x00017b04 cmp r8, r7                                        |     
                                                                 |     if (r8 <= r7) {
    0x00017b08 ble 0x17a6c                                       |         goto label_0;
                                                                 |     }
    0x00017b0c ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x00017b10 sub r6, r8, r7                                    |     r6 = r8 - r7;
    0x00017b14 mov r2, r6                                        |     r2 = r6;
    0x00017b18 add r1, r3, r7                                    |     r1 = r3 + r7;
    0x00017b1c mov r0, fp                                        |     r0 = fp;
    0x00017b20 bl 0x10cac                                        |     r0 = read (r0, r1, r2);
    0x00017b24 cmp r0, 0                                         |     
                                                                 |     if (r0 >= 0) {
    0x00017b28 bge 0x17b00                                       |         goto label_1;
                                                                 |     }
    0x00017b2c bl 0x10d78                                        |     errno_location ();
    0x00017b30 ldr r8, [pc, 0x30]                                |     r8 = *(0x17b64);
    0x00017b34 ldr r3, [sb]                                      |     r3 = *(sb);
    0x00017b38 add r5, r5, r7                                    |     r5 += r7;
    0x00017b3c ldr r2, [pc, 0x28]                                |     r2 = stderr;
    0x00017b40 ldr r1, [pc, 0x38]                                |     r1 = "_serror__d___s_";
    0x00017b44 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00017b48 str r5, [sp, 8]                                   |     var_8h = r5;
    0x00017b4c str r3, [sp]                                      |     *(sp) = r3;
    0x00017b50 str sl, [sp, 4]                                   |     var_4h = sl;
    0x00017b54 mov r3, r6                                        |     r3 = r6;
    0x00017b58 ldr r0, [r8]                                      |     r0 = *(0x17b64);
    0x00017b5c bl 0x10c7c                                        |     fprintf (r0, "_serror__d___s_", r2, r3, r4, r5)
    0x00017b60 ldr r5, [r8]                                      |     r5 = *(0x17b64);
    0x00017b64 b 0x17ad8                                         |     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 @ 0x17c0c */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00017c0c ()                                  | void fcn_00017c0c (int32_t arg_158h, char * ptr, int32_t arg_160h, void * s2, int32_t arg_168h, int32_t arg_16ch, int32_t arg1, char * * arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_8h_2;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_18h;
                                                             |     int32_t var_18h_2;
                                                             |     int32_t var_24h;
                                                             |     int32_t var_28h;
                                                             |     int32_t var_28h_2;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_34h;
                                                             |     void * s;
                                                             |     int32_t var_38h_2;
                                                             |     int32_t var_40h;
                                                             |     int32_t var_40h_2;
                                                             |     int32_t var_48h;
                                                             |     int32_t var_48h_2;
                                                             |     int32_t var_50h;
                                                             |     int32_t var_54h;
                                                             |     int32_t var_58h;
                                                             |     int32_t var_5ch;
                                                             |     int32_t var_60h;
                                                             |     int32_t var_68h;
                                                             |     void * s1;
                                                             |     int32_t var_70h;
                                                             |     int32_t var_134h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00017c0c push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00017c10 sub sp, sp, 0x134                             |     
    0x00017c14 str r0, [sp, 0x34]                            |     var_34h = r0;
    0x00017c18 mov r5, r1                                    |     r5 = r1;
    0x00017c1c mov r7, r2                                    |     r7 = r2;
    0x00017c20 mov r1, 0                                     |     r1 = 0;
    0x00017c24 mov r2, 0x30                                  |     r2 = 0x30;
    0x00017c28 add r0, sp, 0x38                              |     r0 += s;
    0x00017c2c str r3, [sp, 0x24]                            |     var_24h = r3;
    0x00017c30 ldr r6, [sp, 0x160]                           |     r6 = *(arg_160h);
    0x00017c34 ldr sl, [sp, 0x168]                           |     sl = *(arg_168h);
    0x00017c38 ldrb r8, [sp, 0x16c]                          |     r8 = *(arg_16ch);
    0x00017c3c bl 0x10d18                                    |     memset (r0, r1, r2);
    0x00017c40 ldr r1, [sp, 0x24]                            |     r1 = var_24h;
    0x00017c44 mov r0, r5                                    |     r0 = r5;
    0x00017c48 bl 0x1668c                                    |     r0 = fcn_0001668c (r0, r1);
    0x00017c4c subs r4, r0, 0                                |     r4 = r0 - 0;
                                                             |     if (r4 != r0) {
    0x00017c50 bne 0x17dc0                                   |         goto label_3;
                                                             |     }
    0x00017c54 ldr r3, [sp, 0x158]                           |     r3 = *(arg_158h);
    0x00017c58 ldr fp, [r5, 0xe4]                            |     fp = *((r5 + 0xe4));
    0x00017c5c cmp r3, 0                                     |     
                                                             |     if (r3 >= 0) {
    0x00017c60 blt 0x17c70                                   |         
    0x00017c64 add r3, r3, r6                                |         r3 += r6;
    0x00017c68 cmp r3, fp                                    |         
                                                             |         if (r3 <= fp) {
    0x00017c6c ble 0x17cac                                   |             goto label_5;
                                                             |         }
                                                             |     }
    0x00017c70 str fp, [sp, 8]                               |     var_8h = fp;
    0x00017c74 ldr r0, [pc, 0x328]                           |     
    0x00017c78 ldr r3, [r5]                                  |     r3 = *(r5);
    0x00017c7c ldr r2, [pc, 0x324]                           |     r2 = stderr;
    0x00017c80 str r3, [sp, 4]                               |     var_4h = r3;
    0x00017c84 str r6, [sp]                                  |     *(sp) = r6;
    0x00017c88 ldr r3, [sp, 0x158]                           |     r3 = *(arg_158h);
    0x00017c8c ldr r1, [pc, 0x318]                           |     r1 = "libmtd";
    0x00017c90 ldr r0, [r0]                                  |     r0 = *(0x17fa0);
    0x00017c94 bl 0x10c7c                                    |     r0 = fprintf (r0, "libmtd", r2, r3, r4, r5, r6)
                                                             |     do {
    0x00017c98 bl 0x10d78                                    |         errno_location ();
    0x00017c9c mov r3, 0x16                                  |         r3 = 0x16;
    0x00017ca0 str r3, [r0]                                  |         *(r0) = r3;
                                                             | label_1:
    0x00017ca4 mvn r4, 0                                     |         r4 = ~0;
    0x00017ca8 b 0x17dc0                                     |         goto label_3;
                                                             | label_5:
    0x00017cac ldr sb, [r5, 0xec]                            |         sb = *((r5 + 0xec));
    0x00017cb0 ldr r0, [sp, 0x158]                           |         r0 = *(arg_158h);
    0x00017cb4 mov r1, sb                                    |         r1 = sb;
    0x00017cb8 bl 0x19ab0                                    |         fcn_00019ab0 (r0, r1);
    0x00017cbc cmp r1, 0                                     |         
                                                             |         if (r1 == 0) {
    0x00017cc0 beq 0x17cec                                   |             goto label_6;
                                                             |         }
    0x00017cc4 str sb, [sp, 4]                               |         var_4h = sb;
    0x00017cc8 ldr r3, [r5]                                  |         r3 = *(r5);
    0x00017ccc ldr r2, [pc, 0x2d4]                           |         r2 = stderr;
    0x00017cd0 str r3, [sp]                                  |         *(sp) = r3;
    0x00017cd4 ldr r1, [pc, 0x2d4]                           |         r1 = "%s: error!: bad offset %d or length %d, mtd%d eraseblock size is %d\n";
    0x00017cd8 ldr r3, [sp, 0x158]                           |         r3 = *(arg_158h);
                                                             | label_0:
    0x00017cdc ldr r0, [pc, 0x2c0]                           |         
    0x00017ce0 ldr r0, [r0]                                  |         r0 = *(0x17fa0);
    0x00017ce4 bl 0x10c7c                                    |         fprintf (r0, "%s: error!: bad offset %d or length %d, mtd%d eraseblock size is %d\n", r2, r3)
    0x00017ce8 b 0x17c98                                     |         
                                                             |     } while (1);
                                                             | label_6:
    0x00017cec mov r1, sb                                    |     r1 = sb;
    0x00017cf0 mov r0, r6                                    |     r0 = r6;
    0x00017cf4 bl 0x19ab0                                    |     fcn_00019ab0 (r0, r1);
    0x00017cf8 subs r4, r1, 0                                |     r4 = r1 - 0;
                                                             |     if (r4 != r1) {
    0x00017cfc beq 0x17d1c                                   |         
    0x00017d00 str sb, [sp, 4]                               |         var_4h = sb;
    0x00017d04 ldr r3, [r5]                                  |         r3 = *(r5);
    0x00017d08 ldr r2, [pc, 0x298]                           |         r2 = stderr;
    0x00017d0c str r3, [sp]                                  |         *(sp) = r3;
    0x00017d10 ldr r1, [pc, 0x29c]                           |         r1 = "_s:_error_:_write_offset__d_is_not_aligned_to_mtd_d_min._I_O_size__d";
    0x00017d14 mov r3, r6                                    |         r3 = r6;
    0x00017d18 b 0x17cdc                                     |         goto label_0;
                                                             |     }
    0x00017d1c ldr r2, [sp, 0x158]                           |     r2 = *(arg_158h);
    0x00017d20 ldr r1, [sp, 0x24]                            |     r1 = var_24h;
    0x00017d24 asr r3, r2, 0x1f                              |     r3 = r2 >> 0x1f;
    0x00017d28 smlal r2, r3, fp, r1                          |     __asm ("smlal r2, r3, fp, r1");
    0x00017d2c strd r2, r3, [sp, 0x18]                       |     __asm ("strd r2, r3, [var_18h]");
    0x00017d30 ldr r3, [sp, 0x164]                           |     r3 = *(s2);
    0x00017d34 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00017d38 beq 0x17eec                                   |         goto label_7;
                                                             |     }
    0x00017d3c ldrd r2, r3, [sp, 0x18]                       |     __asm ("ldrd r2, r3, [var_18h]");
    0x00017d40 ldr r1, [pc, 0x270]                           |     r1 = "_s:_error_:_write_length__d_is_not_aligned_to_mtd_d_min._I_O_size__d";
    0x00017d44 strd r2, r3, [sp, 0x38]                       |     __asm ("strd r2, r3, [s]");
    0x00017d48 mov r2, r6                                    |     r2 = r6;
    0x00017d4c asr r3, r6, 0x1f                              |     r3 = r6 >> 0x1f;
    0x00017d50 strd r2, r3, [sp, 0x40]                       |     __asm ("strd r2, r3, [var_40h]");
    0x00017d54 mov r2, sl                                    |     r2 = sl;
    0x00017d58 asr r3, sl, 0x1f                              |     r3 = sl >> 0x1f;
    0x00017d5c strd r2, r3, [sp, 0x28]                       |     __asm ("strd r2, r3, [var_28h]");
    0x00017d60 strd r2, r3, [sp, 0x48]                       |     __asm ("strd r2, r3, [var_48h]");
    0x00017d64 ldr r3, [sp, 0x15c]                           |     r3 = *(ptr);
    0x00017d68 add r2, sp, 0x38                              |     r2 += s;
    0x00017d6c str r3, [sp, 0x50]                            |     var_50h = r3;
    0x00017d70 ldr r3, [sp, 0x164]                           |     r3 = *(s2);
    0x00017d74 mov r0, r7                                    |     r0 = r7;
    0x00017d78 str r4, [sp, 0x54]                            |     var_54h = r4;
    0x00017d7c str r3, [sp, 0x58]                            |     var_58h = r3;
    0x00017d80 str r4, [sp, 0x5c]                            |     var_5ch = r4;
    0x00017d84 strb r8, [sp, 0x60]                           |     var_60h = r8;
    0x00017d88 bl 0x10bb0                                    |     r0 = ioctl (r0, r1);
    0x00017d8c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00017d90 beq 0x17dc0                                   |         
    0x00017d94 bl 0x10d78                                    |         r0 = errno_location ();
    0x00017d98 ldr r3, [r0]                                  |         r3 = *(r0);
    0x00017d9c mov sb, r0                                    |         sb = r0;
    0x00017da0 cmp r3, 0x19                                  |         
    0x00017da4 cmpne r3, 0x5f                                |         __asm ("cmpne r3, 0x5f");
                                                             |         if (r3 == 0x19) {
    0x00017da8 beq 0x17dcc                                   |             goto label_8;
                                                             |         }
    0x00017dac ldr r2, [pc, 0x208]                           |         r2 = *(0x17fb8);
    0x00017db0 ldr r1, [sp, 0x24]                            |         r1 = var_24h;
    0x00017db4 ldr r0, [r5]                                  |         r0 = *(r5);
    0x00017db8 bl 0x166ec                                    |         r0 = fcn_000166ec (r0, r1);
    0x00017dbc mov r4, r0                                    |         r4 = r0;
                                                             |     }
                                                             | label_3:
    0x00017dc0 mov r0, r4                                    |     r0 = r4;
    0x00017dc4 add sp, sp, 0x134                             |     
    0x00017dc8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |     
                                                             | label_8:
    0x00017dcc cmp r8, 1                                     |     
                                                             |     if (r8 != 1) {
    0x00017dd0 bne 0x17eac                                   |         goto label_9;
                                                             |     }
    0x00017dd4 add r2, sp, 0x68                              |     r2 += var_68h;
    0x00017dd8 ldr r1, [pc, 0x1e0]                           |     r1 = "MEMWRITE";
    0x00017ddc mov r0, r7                                    |     r0 = r7;
    0x00017de0 bl 0x10bb0                                    |     r0 = ioctl (r0, "MEMWRITE");
    0x00017de4 subs fp, r0, 0                                |     
                                                             |     if (fp != r0) {
    0x00017de8 beq 0x17e30                                   |         
    0x00017dec ldr r4, [sb]                                  |         r4 = *(sb);
    0x00017df0 ldr r5, [pc, 0x1ac]                           |         r5 = *(0x17fa0);
    0x00017df4 ldr r2, [pc, 0x1ac]                           |         r2 = stderr;
    0x00017df8 ldr r1, [pc, 0x1c4]                           |         r1 = *(0x17fc0);
                                                             | label_2:
    0x00017dfc ldr r0, [r5]                                  |         r0 = *(r5);
    0x00017e00 bl 0x10c7c                                    |         fprintf (r0, r1, r2, r3, r4, r5)
    0x00017e04 ldr r5, [r5]                                  |         r5 = *(r5);
                                                             | label_4:
    0x00017e08 mov r0, r4                                    |         r0 = r4;
    0x00017e0c bl 0x10bc8                                    |         strerror (r0);
    0x00017e10 str r4, [sp]                                  |         *(sp) = r4;
    0x00017e14 ldr r3, [pc, 0x1ac]                           |         r3 = "%s: error!: MEMGETOOBSEL failed\n";
    0x00017e18 mov r2, 8                                     |         r2 = 8;
    0x00017e1c ldr r1, [pc, 0x1a8]                           |         r1 = *(0x17fc8);
    0x00017e20 str r0, [sp, 4]                               |         var_4h = r0;
    0x00017e24 mov r0, r5                                    |         r0 = r5;
    0x00017e28 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: MEMGETOOBSEL failed\n", r4)
    0x00017e2c b 0x17ca4                                     |         goto label_1;
                                                             |     }
    0x00017e30 mov r0, sl                                    |     r0 = sl;
    0x00017e34 bl 0x10c28                                    |     malloc (r0);
    0x00017e38 mov r2, sl                                    |     r2 = sl;
    0x00017e3c ldr r1, [sp, 0x164]                           |     r1 = *(s2);
    0x00017e40 str r0, [sp, 0x30]                            |     var_30h = r0;
    0x00017e44 bl 0x10c10                                    |     memcpy (r0, r1, r2);
    0x00017e48 ldr r2, [sp, 0x68]                            |     r2 = var_68h;
    0x00017e4c cmp r2, 2                                     |     
                                                             |     if (r2 != 2) {
    0x00017e50 addeq r8, sp, 0x70                            |         r8 += var_70h;
                                                             |     }
                                                             |     if (r2 == 2) {
    0x00017e54 beq 0x17e9c                                   |         goto label_10;
                                                             |     }
    0x00017e58 ldr r0, [sp, 0x6c]                            |     r0 = s1;
    0x00017e5c ldr r3, [sp, 0x30]                            |     r3 = var_30h;
    0x00017e60 ldr r2, [r5, 0xf0]                            |     r2 = *((r5 + 0xf0));
    0x00017e64 add r1, r3, r0                                |     r1 = r3 + r0;
    0x00017e68 ldr r3, [sp, 0x164]                           |     r3 = *(s2);
    0x00017e6c sub r2, r2, r0                                |     r2 -= r0;
    0x00017e70 add r0, r3, r0                                |     r0 = r3 + r0;
    0x00017e74 bl 0x10c10                                    |     memcpy (r0, r1, r2);
    0x00017e78 b 0x17eac                                     |     goto label_9;
                                                             |     do {
    0x00017e7c ldr r3, [sp, 0x30]                            |         r3 = var_30h;
    0x00017e80 ldr r0, [r8, -8]                              |         r0 = *((r8 - 8));
    0x00017e84 add r1, r3, fp                                |         r1 = r3 + fp;
    0x00017e88 ldr r3, [sp, 0x164]                           |         r3 = *(s2);
    0x00017e8c mov r2, sl                                    |         r2 = sl;
    0x00017e90 add r0, r3, r0                                |         r0 = r3 + r0;
    0x00017e94 bl 0x10c10                                    |         memcpy (r0, r1, r2);
    0x00017e98 add fp, fp, sl                                |         
                                                             | label_10:
    0x00017e9c add r8, r8, 8                                 |         r8 += 8;
    0x00017ea0 ldr sl, [r8, -4]                              |         sl = *((r8 - 4));
    0x00017ea4 cmp sl, 0                                     |         
    0x00017ea8 bne 0x17e7c                                   |         
                                                             |     } while (sl != 0);
                                                             | label_9:
    0x00017eac ldr r3, [sp, 0x164]                           |     r3 = *(s2);
    0x00017eb0 mov r1, r5                                    |     r1 = r5;
    0x00017eb4 str r3, [sp, 0x10]                            |     var_10h = r3;
    0x00017eb8 ldrd r2, r3, [sp, 0x28]                       |     __asm ("ldrd r2, r3, [var_28h]");
    0x00017ebc ldr r0, [sp, 0x34]                            |     r0 = var_34h;
    0x00017ec0 strd r2, r3, [sp, 8]                          |     __asm ("strd r2, r3, [var_8h]");
    0x00017ec4 ldrd r2, r3, [sp, 0x18]                       |     __asm ("ldrd r2, r3, [var_18h]");
    0x00017ec8 strd r2, r3, [sp]                             |     __asm ("strd r2, r3, [sp]");
    0x00017ecc mov r2, r7                                    |     r2 = r7;
    0x00017ed0 bl 0x17bc8                                    |     r0 = fcn_00017bc8 (r0, r1, r2, r3, r4);
    0x00017ed4 cmp r0, 0                                     |     
                                                             |     if (r0 >= 0) {
    0x00017ed8 ldrlt r4, [sb]                                |         r4 = *(sb);
                                                             |     }
                                                             |     if (r0 >= 0) {
    0x00017edc ldrlt r5, [pc, 0xc0]                          |         r5 = obj.stderr;
                                                             |     }
                                                             |     if (r0 >= 0) {
    0x00017ee0 ldrlt r2, [pc, 0xc0]                          |         r2 = "libmtd";
                                                             |     }
                                                             |     if (r0 < 0) {
    0x00017ee4 ldrlt r1, [pc, 0xe4]                          |         r1 = "%s: error!: cannot write to OOB\n";
                                                             |         goto label_11;
                                                             |     }
                                                             |     if (r0 < 0) {
                                                             | label_11:
    0x00017ee8 blt 0x17dfc                                   |         goto label_2;
                                                             |     }
                                                             | label_7:
    0x00017eec ldr r3, [sp, 0x15c]                           |     r3 = *(ptr);
    0x00017ef0 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00017ef4 beq 0x17dc0                                   |         goto label_3;
                                                             |     }
    0x00017ef8 mov r3, 0                                     |     r3 = 0;
    0x00017efc str r3, [sp]                                  |     *(sp) = r3;
    0x00017f00 mov r0, r7                                    |     r0 = r7;
    0x00017f04 ldrd r2, r3, [sp, 0x18]                       |     __asm ("ldrd r2, r3, [var_18h]");
    0x00017f08 bl 0x10d9c                                    |     lseek64 ();
    0x00017f0c ldrd r2, r3, [sp, 0x18]                       |     __asm ("ldrd r2, r3, [var_18h]");
    0x00017f10 cmp r1, r3                                    |     
    0x00017f14 cmpeq r0, r2                                  |     __asm ("cmpeq r0, r2");
                                                             |     if (r1 != r3) {
    0x00017f18 beq 0x17f4c                                   |         
    0x00017f1c bl 0x10d78                                    |         errno_location ();
    0x00017f20 ldr r6, [pc, 0x7c]                            |         r6 = *(0x17fa0);
    0x00017f24 ldrd r2, r3, [sp, 0x18]                       |         __asm ("ldrd r2, r3, [var_18h]");
    0x00017f28 ldr r1, [pc, 0xa4]                            |         r1 = "%s: error!: cannot write to OOB\n";
    0x00017f2c ldr r4, [r0]                                  |         r4 = *(r0);
    0x00017f30 strd r2, r3, [sp]                             |         __asm ("strd r2, r3, [sp]");
    0x00017f34 ldr r2, [pc, 0x6c]                            |         r2 = stderr;
    0x00017f38 ldr r3, [r5]                                  |         r3 = *(r5);
    0x00017f3c ldr r0, [r6]                                  |         r0 = *(0x17fa0);
    0x00017f40 bl 0x10c7c                                    |         fprintf (r0, "%s: error!: cannot write to OOB\n", r2, r3, r4, r5, r6)
    0x00017f44 ldr r5, [r6]                                  |         r5 = *(0x17fa0);
    0x00017f48 b 0x17e08                                     |         goto label_4;
                                                             |     }
    0x00017f4c mov r2, r6                                    |     r2 = r6;
    0x00017f50 ldr r1, [sp, 0x15c]                           |     r1 = *(ptr);
    0x00017f54 mov r0, r7                                    |     r0 = r7;
    0x00017f58 bl 0x10c70                                    |     r0 = write (r0, r1, r2);
    0x00017f5c cmp r6, r0                                    |     
                                                             |     if (r6 == r0) {
    0x00017f60 beq 0x17dc0                                   |         goto label_3;
                                                             |     }
    0x00017f64 bl 0x10d78                                    |     errno_location ();
    0x00017f68 ldr r3, [sp, 0x158]                           |     r3 = *(arg_158h);
    0x00017f6c ldr r7, [pc, 0x30]                            |     r7 = *(0x17fa0);
    0x00017f70 ldr r2, [pc, 0x30]                            |     r2 = stderr;
    0x00017f74 ldr r1, [pc, 0x5c]                            |     r1 = "_s:_error_:_cannot_seek_mtd_d_to_offset__lld";
    0x00017f78 ldr r4, [r0]                                  |     r4 = *(r0);
    0x00017f7c str r3, [sp, 8]                               |     var_8h = r3;
    0x00017f80 ldr r3, [sp, 0x24]                            |     r3 = var_24h;
    0x00017f84 str r3, [sp, 4]                               |     var_4h = r3;
    0x00017f88 ldr r3, [r5]                                  |     r3 = *(r5);
    0x00017f8c str r3, [sp]                                  |     *(sp) = r3;
    0x00017f90 mov r3, r6                                    |     r3 = r6;
    0x00017f94 ldr r0, [r7]                                  |     r0 = *(0x17fa0);
    0x00017f98 bl 0x10c7c                                    |     fprintf (r0, "_s:_error_:_cannot_seek_mtd_d_to_offset__lld", r2, r3, r4)
    0x00017f9c ldr r5, [r7]                                  |     r5 = *(0x17fa0);
    0x00017fa0 b 0x17e08                                     |     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 @ 0x17fdc */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00017fdc ()                                  | void fcn_00017fdc (int32_t arg1, char * * arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int32_t var_18h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_24h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00017fdc push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00017fe0 sub sp, sp, 0x24                              |     
    0x00017fe4 str r0, [sp, 0x18]                            |     var_18h = r0;
    0x00017fe8 mov r6, r1                                    |     r6 = r1;
    0x00017fec mov sb, r2                                    |     sb = r2;
    0x00017ff0 ldr r1, [pc, 0x1c0]                           |     r1 = *(0x181b4);
    0x00017ff4 mov r2, r3                                    |     r2 = r3;
    0x00017ff8 ldr r0, [pc, 0x1bc]                           |     r0 = "libmtd";
    0x00017ffc mov r8, r3                                    |     r8 = r3;
    0x00018000 bl 0x10bbc                                    |     printf (r0, r1, r2, r3, r4, r5, r6);
    0x00018004 ldr r4, [r6, 0xe4]                            |     r4 = *((r6 + 0xe4));
    0x00018008 mov r0, r4                                    |     r0 = r4;
    0x0001800c bl 0x10c28                                    |     malloc (r0);
    0x00018010 adds r4, r4, 0                                |     r4 += 0;
                                                             |     if (r4 == r4) {
    0x00018014 movne r4, 1                                   |         r4 = 1;
                                                             |     }
    0x00018018 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0001801c movne r4, 0                                   |         r4 = 0;
                                                             |     }
    0x00018020 cmp r4, 0                                     |     
                                                             |     if (r4 != 0) {
    0x00018024 moveq r5, r0                                  |         r5 = r0;
                                                             |     }
                                                             |     if (r4 != 0) {
    0x00018028 moveq sl, r4                                  |         sl = r4;
                                                             |     }
                                                             |     if (r4 == 0) {
    0x0001802c beq 0x18034                                   |         goto label_4;
                                                             |     }
    0x00018030 bl 0x10df0                                    |     fcn_00010df0 ();
                                                             |     do {
                                                             | label_4:
    0x00018034 mov r3, r8                                    |         r3 = r8;
    0x00018038 mov r2, sb                                    |         r2 = sb;
    0x0001803c mov r1, r6                                    |         r1 = r6;
    0x00018040 ldr r0, [sp, 0x18]                            |         r0 = var_18h;
    0x00018044 bl 0x177c0                                    |         r0 = fcn_000177c0 ();
    0x00018048 subs r7, r0, 0                                |         r7 = r0 - 0;
                                                             |         if (r7 != r0) {
    0x0001804c bne 0x18140                                   |             goto label_1;
                                                             |         }
    0x00018050 ldr r3, [r6, 0xe4]                            |         r3 = *((r6 + 0xe4));
    0x00018054 str r5, [sp]                                  |         *(sp) = r5;
    0x00018058 str r3, [sp, 4]                               |         var_4h = r3;
    0x0001805c mov r2, r8                                    |         r2 = r8;
    0x00018060 mov r3, r7                                    |         r3 = r7;
    0x00018064 mov r1, sb                                    |         r1 = sb;
    0x00018068 mov r0, r6                                    |         r0 = r6;
    0x0001806c bl 0x179f0                                    |         r0 = fcn_000179f0 (r0, r1, r2, r3);
    0x00018070 subs r7, r0, 0                                |         r7 = r0 - 0;
                                                             |         if (r7 != r0) {
    0x00018074 bne 0x18140                                   |             goto label_1;
                                                             |         }
    0x00018078 ldr r7, [r6, 0xe4]                            |         r7 = *((r6 + 0xe4));
    0x0001807c mov r3, r5                                    |         r3 = r5;
                                                             | label_0:
    0x00018080 sub r2, r3, r5                                |         r2 = r3 - r5;
    0x00018084 cmp r7, r2                                    |         
                                                             |         if (r7 > r2) {
    0x00018088 bgt 0x18154                                   |             goto label_5;
                                                             |         }
    0x0001808c ldr r3, [pc, 0x12c]                           |         r3 = "_s:_run_torture_test_for_PEB__d";
    0x00018090 mov r2, r7                                    |         r2 = r7;
    0x00018094 ldrb fp, [r4, r3]                             |         fp = *((r4 + r3));
    0x00018098 mov r0, r5                                    |         r0 = r5;
    0x0001809c mov r1, fp                                    |         r1 = fp;
    0x000180a0 bl 0x10d18                                    |         memset (r0, r1, r2);
    0x000180a4 stmib sp, {r5, r7, sl}                        |         __asm ("stmib sp, {r5, r7, sl}");
    0x000180a8 ldr r0, [sp, 0x18]                            |         r0 = var_18h;
    0x000180ac str sl, [sp, 0x14]                            |         var_14h = sl;
    0x000180b0 str sl, [sp, 0x10]                            |         var_10h = sl;
    0x000180b4 str sl, [sp]                                  |         *(sp) = sl;
    0x000180b8 mov r3, r8                                    |         r3 = r8;
    0x000180bc mov r2, sb                                    |         r2 = sb;
    0x000180c0 mov r1, r6                                    |         r1 = r6;
    0x000180c4 bl 0x17c0c                                    |         r0 = fcn_00017c0c (r0, r1, r2, r3, r4, r5, r6);
    0x000180c8 subs r7, r0, 0                                |         r7 = r0 - 0;
                                                             |         if (r7 != r0) {
    0x000180cc bne 0x18140                                   |             goto label_1;
                                                             |         }
    0x000180d0 ldr r3, [r6, 0xe4]                            |         r3 = *((r6 + 0xe4));
    0x000180d4 mvn r1, fp                                    |         r1 = ~fp;
    0x000180d8 mov r2, r3                                    |         r2 = r3;
    0x000180dc mov r0, r5                                    |         r0 = r5;
    0x000180e0 str r3, [sp, 0x1c]                            |         var_1ch = r3;
    0x000180e4 bl 0x10d18                                    |         memset (r0, r1, r2);
    0x000180e8 ldr r3, [sp, 0x1c]                            |         r3 = var_1ch;
    0x000180ec str r5, [sp]                                  |         *(sp) = r5;
    0x000180f0 str r3, [sp, 4]                               |         var_4h = r3;
    0x000180f4 mov r2, r8                                    |         r2 = r8;
    0x000180f8 mov r3, r7                                    |         r3 = r7;
    0x000180fc mov r1, sb                                    |         r1 = sb;
    0x00018100 mov r0, r6                                    |         r0 = r6;
    0x00018104 bl 0x179f0                                    |         r0 = fcn_000179f0 (r0, r1, r2, r3);
    0x00018108 subs r7, r0, 0                                |         r7 = r0 - 0;
                                                             |         if (r7 != r0) {
    0x0001810c bne 0x18140                                   |             goto label_1;
                                                             |         }
    0x00018110 ldr r1, [r6, 0xe4]                            |         r1 = *((r6 + 0xe4));
    0x00018114 mov r3, r5                                    |         r3 = r5;
                                                             | label_2:
    0x00018118 sub r2, r3, r5                                |         r2 = r3 - r5;
    0x0001811c cmp r1, r2                                    |         
                                                             |         if (r1 > r2) {
    0x00018120 bgt 0x1818c                                   |             goto label_6;
                                                             |         }
    0x00018124 add r4, r4, 1                                 |         r4++;
    0x00018128 cmp r4, 3                                     |         
    0x0001812c bne 0x18034                                   |         
                                                             |     } while (r4 != 3);
    0x00018130 mov r2, r8                                    |     r2 = r8;
    0x00018134 ldr r1, [pc, 0x7c]                            |     r1 = *(0x181b4);
    0x00018138 ldr r0, [pc, 0x84]                            |     r0 = *(0x181c0);
    0x0001813c bl 0x10bbc                                    |     printf (r0, r1, r2);
                                                             | label_1:
    0x00018140 mov r0, r5                                    |     r0 = r5;
    0x00018144 bl 0x10de4                                    |     free (r0);
    0x00018148 mov r0, r7                                    |     r0 = r7;
    0x0001814c add sp, sp, 0x24                              |     
    0x00018150 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |     
                                                             | label_5:
    0x00018154 ldrb r2, [r3], 1                              |     r2 = *(r3);
                                                             |     r3++;
    0x00018158 cmp r2, 0xff                                  |     
                                                             |     if (r2 == 0xff) {
    0x0001815c beq 0x18080                                   |         goto label_0;
                                                             |     }
    0x00018160 ldr r0, [pc, 0x60]                            |     
    0x00018164 mov r3, r8                                    |     r3 = r8;
    0x00018168 ldr r2, [pc, 0x48]                            |     r2 = *(0x181b4);
    0x0001816c ldr r1, [pc, 0x58]                            |     r1 = stderr;
    0x00018170 ldr r0, [r0]                                  |     r0 = "%s: PEB %d passed torture test, do not mark it a bad\n";
    0x00018174 bl 0x10c7c                                    |     r0 = fprintf ("%s: PEB %d passed torture test, do not mark it a bad\n", r1, r2, r3)
                                                             | label_3:
    0x00018178 bl 0x10d78                                    |     errno_location ();
    0x0001817c mov r3, 5                                     |     r3 = 5;
    0x00018180 mvn r7, 0                                     |     r7 = ~0;
    0x00018184 str r3, [r0]                                  |     *(r0) = r3;
    0x00018188 b 0x18140                                     |     goto label_1;
                                                             | label_6:
    0x0001818c ldrb r2, [r3], 1                              |     r2 = *(r3);
                                                             |     r3++;
    0x00018190 cmp fp, r2                                    |     
                                                             |     if (fp == r2) {
    0x00018194 beq 0x18118                                   |         goto label_2;
                                                             |     }
    0x00018198 ldr r0, [pc, 0x28]                            |     
    0x0001819c str r8, [sp]                                  |     *(sp) = r8;
    0x000181a0 mov r3, fp                                    |     r3 = fp;
    0x000181a4 ldr r2, [pc, 0xc]                             |     r2 = *(0x181b4);
    0x000181a8 ldr r1, [pc, 0x20]                            |     r1 = "%s: error!: erased PEB %d, but a non-0xFF byte found\n";
    0x000181ac ldr r0, [r0]                                  |     r0 = "%s: PEB %d passed torture test, do not mark it a bad\n";
    0x000181b0 bl 0x10c7c                                    |     fprintf ("%s: PEB %d passed torture test, do not mark it a bad\n", "%s: error!: erased PEB %d, but a non-0xFF byte found\n", r2, r3)
    0x000181b4 b 0x18178                                     |     goto label_3;
                                                             | }
    ; 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 @ 0x18360 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00018360 ()                              | void fcn_00018360 (int32_t arg1) {
                                                         |     char * * endptr;
                                                         |     int32_t var_ch;
                                                         |     r0 = arg1;
    0x00018360 push {r0, r1, r2, r4, r5, r6, r7, lr}     |     
    0x00018364 mov r2, 0                                 |     r2 = 0;
    0x00018368 add r1, sp, 4                             |     r1 += endptr;
    0x0001836c mov r7, r0                                |     r7 = r0;
    0x00018370 bl 0x10d00                                |     strtoull (r0, r1, r2);
    0x00018374 ldr r6, [sp, 4]                           |     r6 = endptr;
    0x00018378 sub r3, r6, r7                            |     r3 = r6 - r7;
    0x0001837c clz r3, r3                                |     r3 &= r3;
    0x00018380 lsr r3, r3, 5                             |     r3 >>= 5;
    0x00018384 orrs r3, r3, r1, lsr 31                   |     r3 |= (r1 >> 31);
                                                         |     if (r3 == r3) {
    0x00018388 movne r2, r7                              |         r2 = r7;
                                                         |     }
                                                         |     if (r3 == r3) {
    0x0001838c ldrne r1, [pc, 0xc0]                      |         r1 = "incorrect_amount_of_bytes:___s_";
                                                         |     }
                                                         |     if (r3 != r3) {
    0x00018390 bne 0x18408                               |         goto label_1;
                                                         |     }
    0x00018394 ldrb r3, [r6]                             |     r3 = *(r6);
    0x00018398 mov r4, r0                                |     r4 = r0;
    0x0001839c cmp r3, 0                                 |     
    0x000183a0 mov r5, r1                                |     r5 = r1;
                                                         |     if (r3 == 0) {
    0x000183a4 beq 0x1841c                               |         goto label_2;
                                                         |     }
    0x000183a8 mov r3, r6                                |     r3 = r6;
                                                         |     do {
    0x000183ac mov r7, r3                                |         r7 = r3;
    0x000183b0 ldrb r2, [r3], 1                          |         r2 = *(r3);
                                                         |         r3++;
    0x000183b4 cmp r2, 9                                 |         
    0x000183b8 cmpne r2, 0x20                            |         __asm ("cmpne r2, 0x20");
    0x000183bc beq 0x183ac                               |         
                                                         |     } while (r2 == 9);
    0x000183c0 ldr r1, [pc, 0x90]                        |     r1 = "incorrect_amount_of_bytes:___s_";
    0x000183c4 mov r0, r7                                |     r0 = r7;
    0x000183c8 bl 0x10d48                                |     r0 = strcmp (r0, "incorrect_amount_of_bytes:___s_");
    0x000183cc cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x000183d0 beq 0x1842c                               |         goto label_3;
                                                         |     }
    0x000183d4 ldr r1, [pc, 0x80]                        |     r1 = "KiB";
    0x000183d8 mov r0, r7                                |     r0 = r7;
    0x000183dc bl 0x10d48                                |     r0 = strcmp (r0, "KiB");
    0x000183e0 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x000183e4 beq 0x1844c                               |         goto label_4;
                                                         |     }
    0x000183e8 ldr r1, [pc, 0x70]                        |     r1 = "MiB";
    0x000183ec mov r0, r7                                |     r0 = r7;
    0x000183f0 bl 0x10d48                                |     r0 = strcmp (r0, "MiB");
    0x000183f4 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x000183f8 moveq r3, 0x40000000                      |         r3 = 0x40000000;
                                                         |     }
                                                         |     if (r0 == 0) {
    0x000183fc beq 0x18430                               |         goto label_0;
                                                         |     }
    0x00018400 ldr r1, [pc, 0x5c]                        |     r1 = "GiB";
    0x00018404 mov r2, r6                                |     r2 = r6;
                                                         | label_1:
    0x00018408 ldr r3, [pc, 0x58]                        |     r3 = "bad size specifier: \"%s\" - should be 'KiB', 'MiB' or 'GiB'\n";
    0x0001840c mvn r4, 0                                 |     r4 = ~0;
    0x00018410 ldr r0, [r3]                              |     r0 = "bad size specifier: \"%s\" - should be 'KiB', 'MiB' or 'GiB'\n";
    0x00018414 bl 0x10c7c                                |     fprintf ("bad size specifier: \"%s\" - should be 'KiB', 'MiB' or 'GiB'\n", "GiB", r2, "bad size specifier: \"%s\" - should be 'KiB', 'MiB' or 'GiB'\n", r4)
    0x00018418 mvn r5, 0                                 |     r5 = ~0;
                                                         |     do {
                                                         | label_2:
    0x0001841c mov r0, r4                                |         r0 = r4;
    0x00018420 mov r1, r5                                |         r1 = r5;
    0x00018424 add sp, sp, 0xc                           |         
    0x00018428 pop {r4, r5, r6, r7, pc}                  |         
                                                         | label_3:
    0x0001842c mov r3, 0x400                             |         r3 = 0x400;
                                                         | label_0:
    0x00018430 asr r1, r3, 0x1f                          |         r1 = r3 >> 0x1f;
    0x00018434 mul ip, r4, r1                            |         
    0x00018438 mov r1, r4                                |         r1 = r4;
    0x0001843c mla r2, r3, r5, ip                        |         __asm ("mla r2, r3, r5, ip");
    0x00018440 umull r4, r5, r1, r3                      |         r4:r5 = r1 * r3;
    0x00018444 add r5, r2, r5                            |         r5 = r2 + r5;
    0x00018448 b 0x1841c                                 |         
                                                         |     } while (1);
                                                         | label_4:
    0x0001844c mov r3, 0x100000                          |     r3 = 0x100000;
    0x00018450 b 0x18430                                 |     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 @ 0x1864c */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0001864c ()                              | void fcn_0001864c (int32_t arg1) {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_8h;
                                                         |     r0 = arg1;
    0x0001864c push {r0, r1, r4, r5, r6, r7, r8, lr}     |     
    0x00018650 mov r4, r0                                |     r4 = r0;
    0x00018654 ldr r3, [r4, 0x94]                        |     r3 = *((r4 + 0x94));
    0x00018658 ldr r0, [r0, 0x9c]                        |     r0 = *((r0 + 0x9c));
    0x0001865c ldr r2, [r4, 0x98]                        |     r2 = *((r4 + 0x98));
    0x00018660 sub r5, r0, r3                            |     r5 = r0 - r3;
    0x00018664 cmp r2, r5                                |     
                                                         |     if (r2 > r5) {
    0x00018668 bgt 0x18680                               |         goto label_4;
                                                         |     }
    0x0001866c mov r0, r3                                |     r0 = r3;
    0x00018670 bl 0x10de4                                |     free (r0);
    0x00018674 mov r0, 0                                 |     r0 = 0;
                                                         |     do {
                                                         | label_3:
    0x00018678 add sp, sp, 8                             |         
    0x0001867c pop {r4, r5, r6, r7, r8, pc}              |         
                                                         | label_4:
    0x00018680 add r3, r4, 0x90                          |         r3 = r4 + 0x90;
    0x00018684 str r3, [sp]                              |         *(sp) = r3;
    0x00018688 mov r2, r4                                |         r2 = r4;
    0x0001868c add r3, r4, 8                             |         r3 = r4 + 8;
    0x00018690 ldr r1, [pc, 0xf8]                        |         r1 = *(0x1878c);
    0x00018694 bl 0x10ce8                                |         r0 = sscanf (r0, r1, r2);
    0x00018698 cmp r0, 3                                 |         
                                                         |         if (r0 == 3) {
    0x0001869c beq 0x186c0                               |             goto label_5;
                                                         |         }
    0x000186a0 ldr r3, [pc, 0xe8]                        |         r3 = *(0x1878c);
    0x000186a4 ldr r2, [pc, 0xe8]                        |         r2 = "mtd_d:__llx__x";
    0x000186a8 ldr r1, [pc, 0xe8]                        |         r1 = "libmtd";
                                                         | label_2:
    0x000186ac ldr r0, [pc, 0xe8]                        |         
    0x000186b0 ldr r0, [r0]                              |         r0 = "%s: error!: \"%s\" pattern not found\n";
    0x000186b4 bl 0x10c7c                                |         fprintf ("%s: error!: \"%s\" pattern not found\n", "libmtd", "mtd_d:__llx__x", r3)
                                                         | label_0:
    0x000186b8 mvn r0, 0                                 |         r0 = ~0;
    0x000186bc b 0x18678                                 |         
                                                         |     } while (1);
                                                         | label_5:
    0x000186c0 ldr r8, [r4, 0x98]                        |     r8 = *((r4 + 0x98));
    0x000186c4 mov r1, 0x22                              |     r1 = 0x22;
    0x000186c8 sub r2, r8, r5                            |     r2 = r8 - r5;
    0x000186cc ldr r0, [r4, 0x9c]                        |     r0 = *((r4 + 0x9c));
    0x000186d0 bl 0x10c94                                |     r0 = memchr (r0, r1, r2);
    0x000186d4 cmp r0, 0                                 |     
    0x000186d8 bne 0x186f4                               |     
                                                         |     while (r8 <= r2) {
    0x000186dc ldr r2, [pc, 0xb0]                        |         r2 = "mtd_d:__llx__x";
    0x000186e0 ldr r1, [pc, 0xb8]                        |         r1 = stderr;
                                                         | label_1:
    0x000186e4 ldr r3, [pc, 0xb0]                        |         r3 = "%s: error!: \"%s\" pattern not found\n";
    0x000186e8 ldr r0, [r3]                              |         r0 = "%s: error!: \"%s\" pattern not found\n";
    0x000186ec bl 0x10c7c                                |         fprintf ("%s: error!: \"%s\" pattern not found\n", r1, "mtd_d:__llx__x", "%s: error!: \"%s\" pattern not found\n")
    0x000186f0 b 0x186b8                                 |         goto label_0;
    0x000186f4 ldr r7, [r4, 0x94]                        |         r7 = *((r4 + 0x94));
    0x000186f8 add r6, r0, 1                             |         r6 = r0 + 1;
    0x000186fc sub r2, r6, r7                            |         r2 = r6 - r7;
    0x00018700 cmp r8, r2                                |         
    0x00018704 ble 0x186dc                               |         
                                                         |     }
    0x00018708 sub r2, r8, r2                            |     r2 = r8 - r2;
    0x0001870c mov r1, 0x22                              |     r1 = 0x22;
    0x00018710 mov r0, r6                                |     r0 = r6;
    0x00018714 bl 0x10c94                                |     r0 = memchr (r0, r1, r2);
    0x00018718 subs r5, r0, 0                            |     r5 = r0 - 0;
    0x0001871c bne 0x1872c                               |     
                                                         |     while (r8 <= r7) {
    0x00018720 ldr r2, [pc, 0x6c]                        |         r2 = "mtd_d:__llx__x";
    0x00018724 ldr r1, [pc, 0x78]                        |         r1 = "%s: error!: opening \" not found\n";
    0x00018728 b 0x186e4                                 |         goto label_1;
    0x0001872c sub r7, r5, r7                            |         r7 = r5 - r7;
    0x00018730 cmp r8, r7                                |         
    0x00018734 ble 0x18720                               |         
                                                         |     }
    0x00018738 sub r7, r5, r6                            |     r7 = r5 - r6;
    0x0001873c cmp r7, 0x7f                              |     
                                                         |     if (r7 <= 0x7f) {
    0x00018740 ldrgt r3, [r4]                            |         r3 = *(r4);
                                                         |     }
                                                         |     if (r7 <= 0x7f) {
    0x00018744 ldrgt r2, [pc, 0x48]                      |         r2 = "libmtd";
                                                         |     }
                                                         |     if (r7 > 0x7f) {
    0x00018748 ldrgt r1, [pc, 0x58]                      |         r1 = "%s: error!: too long mtd%d device name\n";
                                                         |         goto label_6;
                                                         |     }
                                                         |     if (r7 > 0x7f) {
                                                         | label_6:
    0x0001874c bgt 0x186ac                               |         goto label_2;
                                                         |     }
    0x00018750 mov r2, r7                                |     r2 = r7;
    0x00018754 mov r1, r6                                |     r1 = r6;
    0x00018758 add r0, r4, 0x10                          |     r0 = r4 + 0x10;
    0x0001875c bl 0x10c10                                |     memcpy (r0, r1, r2);
    0x00018760 add r7, r4, r7                            |     r7 = r4 + r7;
    0x00018764 mov r3, 0                                 |     r3 = 0;
    0x00018768 strb r3, [r7, 0x10]                       |     *((r7 + 0x10)) = r3;
    0x0001876c ldrb r3, [r5, 1]                          |     r3 = *((r5 + 1));
    0x00018770 cmp r3, 0xa                               |     
                                                         |     if (r3 != 0xa) {
    0x00018774 addeq r5, r5, 2                           |         r5 += 2;
                                                         |     }
                                                         |     if (r3 != 0xa) {
    0x00018778 streq r5, [r4, 0x9c]                      |         *((r4 + 0x9c)) = r5;
                                                         |     }
                                                         |     if (r3 == 0xa) {
    0x0001877c moveq r0, 1                               |         r0 = 1;
                                                         |         goto label_7;
                                                         |     }
                                                         |     if (r3 == 0xa) {
                                                         | label_7:
    0x00018780 beq 0x18678                               |         goto label_3;
                                                         |     }
    0x00018784 ldr r2, [pc, 8]                           |     r2 = "libmtd";
    0x00018788 ldr r1, [pc, 0x1c]                        |     r1 = "%s: error!: too long mtd%d device name\n";
    0x0001878c b 0x186e4                                 |     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 @ 0x187b0 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.000187b0 ()                              | void fcn_000187b0 (int32_t arg1) {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_4h;
                                                         |     int32_t var_8h;
                                                         |     r0 = arg1;
    0x000187b0 push {r0, r1, r4, r5, r6, r7, r8, lr}     |     
    0x000187b4 mov r5, r0                                |     r5 = r0;
    0x000187b8 mov r1, 0                                 |     r1 = 0;
    0x000187bc ldr r0, [pc, 0x150]                       |     r0 = *(0x18910);
    0x000187c0 bl 0x10d30                                |     r0 = open64 ();
    0x000187c4 cmn r0, 1                                 |     
    0x000187c8 mov r4, r0                                |     r4 = r0;
                                                         |     if (r0 == 1) {
    0x000187cc beq 0x18908                               |         goto label_0;
                                                         |     }
    0x000187d0 mov r0, 0x1000                            |     r0 = 0x1000;
    0x000187d4 bl 0x10c28                                |     r0 = malloc (r0);
    0x000187d8 subs r1, r0, 0                            |     r1 = r0 - 0;
                                                         |     if (r1 == r0) {
    0x000187dc bne 0x1882c                               |         
    0x000187e0 bl 0x10d78                                |         errno_location ();
    0x000187e4 ldr r5, [pc, 0x12c]                       |         
    0x000187e8 ldr r2, [pc, 0x12c]                       |         r2 = stderr;
    0x000187ec ldr r1, [pc, 0x12c]                       |         r1 = "libmtd";
    0x000187f0 ldr r4, [r0]                              |         r4 = *(r0);
    0x000187f4 ldr r0, [r5]                              |         r0 = "_proc_mtd";
    0x000187f8 bl 0x10c7c                                |         fprintf ("_proc_mtd", "libmtd", r2, r3, r4, "_proc_mtd")
    0x000187fc mov r0, r4                                |         r0 = r4;
    0x00018800 ldr r5, [r5]                              |         r5 = "_proc_mtd";
    0x00018804 bl 0x10bc8                                |         strerror (r0);
    0x00018808 str r4, [sp]                              |         *(sp) = r4;
    0x0001880c ldr r3, [pc, 0x110]                       |         r3 = "_s:_error_:_out_of_memory";
    0x00018810 mov r2, 8                                 |         r2 = 8;
    0x00018814 ldr r1, [pc, 0x10c]                       |         r1 = *(0x18924);
    0x00018818 str r0, [sp, 4]                           |         var_4h = r0;
    0x0001881c mov r0, r5                                |         r0 = r5;
    0x00018820 bl 0x10c7c                                |         fprintf (r0, r1, r2, "_s:_error_:_out_of_memory", r4)
    0x00018824 mvn r0, 0                                 |         r0 = ~0;
    0x00018828 bl 0x10d84                                |         exit (r0);
                                                         |     }
    0x0001882c str r1, [r5, 0x94]                        |     *((r5 + 0x94)) = r1;
    0x00018830 mov r2, 0x1000                            |     r2 = 0x1000;
    0x00018834 mov r0, r4                                |     r0 = r4;
    0x00018838 bl 0x10cac                                |     r0 = read (r0, r1, r2);
    0x0001883c cmn r0, 1                                 |     
    0x00018840 mov r7, r0                                |     r7 = r0;
                                                         |     if (r0 != 1) {
    0x00018844 bne 0x188a8                               |         goto label_1;
                                                         |     }
    0x00018848 bl 0x10d78                                |     errno_location ();
    0x0001884c ldr r7, [pc, 0xc4]                        |     
    0x00018850 ldr r3, [pc, 0xbc]                        |     r3 = *(0x18910);
    0x00018854 ldr r2, [pc, 0xc0]                        |     r2 = stderr;
    0x00018858 ldr r1, [pc, 0xcc]                        |     r1 = "_serror__d___s_";
    0x0001885c ldr r6, [r0]                              |     r6 = *(r0);
    0x00018860 ldr r0, [r7]                              |     r0 = "_proc_mtd";
    0x00018864 bl 0x10c7c                                |     fprintf ("_proc_mtd", "_serror__d___s_", r2, r3, r4, r5, r6)
    0x00018868 mov r0, r6                                |     r0 = r6;
    0x0001886c ldr r7, [r7]                              |     r7 = "_proc_mtd";
    0x00018870 bl 0x10bc8                                |     strerror (r0);
    0x00018874 str r6, [sp]                              |     *(sp) = r6;
    0x00018878 ldr r3, [pc, 0xa4]                        |     r3 = "_s:_error_:_out_of_memory";
    0x0001887c mov r2, 8                                 |     r2 = 8;
    0x00018880 ldr r1, [pc, 0xa0]                        |     r1 = *(0x18924);
    0x00018884 str r0, [sp, 4]                           |     var_4h = r0;
    0x00018888 mov r0, r7                                |     r0 = r7;
    0x0001888c bl 0x10c7c                                |     fprintf (r0, r1, r2, "_s:_error_:_out_of_memory", r4, r5, r6)
                                                         |     do {
    0x00018890 ldr r0, [r5, 0x94]                        |         r0 = *((r5 + 0x94));
    0x00018894 bl 0x10de4                                |         free (r0);
    0x00018898 mov r0, r4                                |         r0 = r4;
    0x0001889c bl 0x10dcc                                |         close (r0);
    0x000188a0 mvn r4, 0                                 |         r4 = ~0;
    0x000188a4 b 0x18908                                 |         goto label_0;
                                                         | label_1:
    0x000188a8 cmp r0, 0x1e                              |         
                                                         |         if (r0 >= 0x1e) {
    0x000188ac bls 0x188cc                               |             
    0x000188b0 ldr r6, [r5, 0x94]                        |             r6 = *((r5 + 0x94));
    0x000188b4 mov r2, 0x1f                              |             r2 = 0x1f;
    0x000188b8 ldr r1, [pc, 0x70]                        |             r1 = "%s: error!: cannot read \"%s\"\n";
    0x000188bc mov r0, r6                                |             r0 = r6;
    0x000188c0 bl 0x10cdc                                |             r0 = memcmp (r0, "%s: error!: cannot read \"%s\"\n", r2);
    0x000188c4 subs r8, r0, 0                            |             r8 = r0 - 0;
                                                         |             if (r8 == r0) {
    0x000188c8 beq 0x188f0                               |                 goto label_2;
                                                         |             }
                                                         |         }
    0x000188cc ldr r3, [pc, 0x5c]                        |         r3 = "%s: error!: cannot read \"%s\"\n";
    0x000188d0 ldr r0, [pc, 0x40]                        |         
    0x000188d4 str r3, [sp]                              |         *(sp) = r3;
    0x000188d8 ldr r2, [pc, 0x3c]                        |         r2 = stderr;
    0x000188dc ldr r3, [pc, 0x30]                        |         r3 = *(0x18910);
    0x000188e0 ldr r1, [pc, 0x4c]                        |         r1 = "dev:____size___erasesize__name";
    0x000188e4 ldr r0, [r0]                              |         r0 = "_proc_mtd";
    0x000188e8 bl 0x10c7c                                |         fprintf ("_proc_mtd", "dev:____size___erasesize__name", r2, "%s: error!: cannot read \"%s\"\n")
    0x000188ec b 0x18890                                 |         
                                                         |     } while (1);
                                                         | label_2:
    0x000188f0 add r6, r6, 0x1f                          |     r6 += 0x1f;
    0x000188f4 mov r0, r4                                |     r0 = r4;
    0x000188f8 str r7, [r5, 0x98]                        |     *((r5 + 0x98)) = r7;
    0x000188fc str r6, [r5, 0x9c]                        |     *((r5 + 0x9c)) = r6;
    0x00018900 bl 0x10dcc                                |     close (r0);
    0x00018904 mov r4, r8                                |     r4 = r8;
                                                         | label_0:
    0x00018908 mov r0, r4                                |     r0 = r4;
    0x0001890c add sp, sp, 8                             |     
    0x00018910 pop {r4, r5, r6, r7, r8, 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 @ 0x18938 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00018938 ()                      | void fcn_00018938 () {
                                                 |     int32_t var_0h;
                                                 |     int32_t var_4h;
                                                 |     int32_t var_ch;
    0x00018938 push {r0, r1, r2, r4, r5, lr}     |     
    0x0001893c ldr r0, [pc, 0x74]                |     r0 = *(0x189b4);
    0x00018940 mov r1, 4                         |     r1 = 4;
    0x00018944 bl 0x10d6c                        |     r0 = access (r0, r1);
    0x00018948 cmp r0, 0                         |     
                                                 |     if (r0 != 0) {
    0x0001894c moveq r0, 1                       |         r0 = 1;
                                                 |     }
                                                 |     if (r0 != 0) {
    0x00018950 beq 0x189b0                       |         
    0x00018954 bl 0x10d78                        |         r0 = errno_location ();
    0x00018958 ldr r4, [r0]                      |         r4 = *(r0);
    0x0001895c cmp r4, 2                         |         
                                                 |         if (r4 != 2) {
    0x00018960 moveq r3, 0                       |             r3 = 0;
                                                 |         }
                                                 |         if (r4 != 2) {
    0x00018964 streq r3, [r0]                    |             *(r0) = r3;
                                                 |         }
                                                 |         if (r4 != 2) {
    0x00018968 beq 0x189ac                       |             
    0x0001896c ldr r5, [pc, 0x48]                |             
    0x00018970 ldr r3, [pc, 0x40]                |             r3 = *(0x189b4);
    0x00018974 ldr r2, [pc, 0x44]                |             r2 = stderr;
    0x00018978 ldr r1, [pc, 0x44]                |             r1 = "libmtd";
    0x0001897c ldr r0, [r5]                      |             r0 = "_proc_mtd";
    0x00018980 bl 0x10c7c                        |             fprintf ("_proc_mtd", "libmtd", r2, r3, r4, "_proc_mtd")
    0x00018984 mov r0, r4                        |             r0 = r4;
    0x00018988 ldr r5, [r5]                      |             r5 = "_proc_mtd";
    0x0001898c bl 0x10bc8                        |             strerror (r0);
    0x00018990 str r4, [sp]                      |             *(sp) = r4;
    0x00018994 ldr r3, [pc, 0x2c]                |             r3 = "%s: error!: cannot read \"%s\"\n";
    0x00018998 mov r2, 8                         |             r2 = 8;
    0x0001899c ldr r1, [pc, 0x28]                |             r1 = *(0x189c8);
    0x000189a0 str r0, [sp, 4]                   |             var_4h = r0;
    0x000189a4 mov r0, r5                        |             r0 = r5;
    0x000189a8 bl 0x10c7c                        |             fprintf (r0, r1, r2, "%s: error!: cannot read \"%s\"\n", r4)
                                                 |         }
    0x000189ac mov r0, 0                         |         r0 = 0;
                                                 |     }
    0x000189b0 add sp, sp, 0xc                   |     
    0x000189b4 pop {r4, r5, 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 @ 0x18a8c */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00018a8c ()                      | void fcn_00018a8c (int32_t arg1) {
                                                 |     int32_t var_0h;
                                                 |     int32_t var_4h;
                                                 |     int32_t var_8h;
                                                 |     int32_t var_18h;
                                                 |     int32_t var_70h;
                                                 |     int32_t var_174h;
                                                 |     int32_t var_1bch;
                                                 |     r0 = arg1;
    0x00018a8c push {r4, r5, r6, r7, lr}         |     
    0x00018a90 sub sp, sp, 0x1bc                 |     
    0x00018a94 add r1, sp, 8                     |     r1 += var_8h;
    0x00018a98 mov r5, r0                        |     r5 = r0;
    0x00018a9c bl 0x10bd4                        |     r0 = stat64 ();
    0x00018aa0 subs r1, r0, 0                    |     r1 = r0 - 0;
                                                 |     if (r1 == r0) {
    0x00018aa4 beq 0x18b00                       |         goto label_1;
                                                 |     }
    0x00018aa8 bl 0x10d78                        |     errno_location ();
    0x00018aac ldr r6, [pc, 0x158]               |     r6 = *(0x18c08);
    0x00018ab0 mov r3, r5                        |     r3 = r5;
    0x00018ab4 ldr r2, [pc, 0x154]               |     r2 = stderr;
    0x00018ab8 ldr r1, [pc, 0x154]               |     r1 = "libmtd";
    0x00018abc ldr r4, [r0]                      |     r4 = *(r0);
    0x00018ac0 ldr r0, [r6]                      |     r0 = *(0x18c08);
    0x00018ac4 bl 0x10c7c                        |     fprintf (r0, "libmtd", r2, r3, r4, r5, r6)
    0x00018ac8 mov r0, r4                        |     r0 = r4;
    0x00018acc ldr r5, [r6]                      |     r5 = *(0x18c08);
    0x00018ad0 bl 0x10bc8                        |     strerror (r0);
    0x00018ad4 str r4, [sp]                      |     *(sp) = r4;
    0x00018ad8 ldr r3, [pc, 0x138]               |     r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018adc mov r2, 8                         |     r2 = 8;
    0x00018ae0 ldr r1, [pc, 0x134]               |     r1 = *(0x18c18);
    0x00018ae4 str r0, [sp, 4]                   |     var_4h = r0;
    0x00018ae8 mov r0, r5                        |     r0 = r5;
    0x00018aec bl 0x10c7c                        |     fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
                                                 |     do {
    0x00018af0 mvn r4, 0                         |         r4 = ~0;
                                                 | label_0:
    0x00018af4 mov r0, r4                        |         r0 = r4;
    0x00018af8 add sp, sp, 0x1bc                 |         
    0x00018afc pop {r4, r5, r6, r7, pc}          |         
                                                 | label_1:
    0x00018b00 ldr r3, [sp, 0x18]                |         r3 = var_18h;
    0x00018b04 and r3, r3, 0xf000                |         r3 &= 0xf000;
    0x00018b08 cmp r3, 0x2000                    |         
                                                 |         if (r3 == 0x2000) {
    0x00018b0c beq 0x18b38                       |             goto label_2;
                                                 |         }
    0x00018b10 bl 0x10d78                        |         errno_location ();
    0x00018b14 mov r3, 0x16                      |         r3 = 0x16;
    0x00018b18 ldr r2, [pc, 0xf0]                |         r2 = stderr;
    0x00018b1c ldr r1, [pc, 0xfc]                |         r1 = "_serror__d___s_";
    0x00018b20 str r3, [r0]                      |         *(r0) = r3;
    0x00018b24 ldr r0, [pc, 0xe0]                |         
    0x00018b28 mov r3, r5                        |         r3 = r5;
    0x00018b2c ldr r0, [r0]                      |         r0 = *(0x18c08);
    0x00018b30 bl 0x10c7c                        |         fprintf (r0, "_serror__d___s_", r2, r3)
    0x00018b34 b 0x18af0                         |         
                                                 |     } while (1);
                                                 | label_2:
    0x00018b38 mov r0, r5                        |     r0 = r5;
    0x00018b3c bl 0x10d30                        |     r0 = open64 ();
    0x00018b40 cmn r0, 1                         |     
    0x00018b44 mov r4, r0                        |     r4 = r0;
                                                 |     if (r0 == 1) {
    0x00018b48 bne 0x18b98                       |         
    0x00018b4c bl 0x10d78                        |         errno_location ();
    0x00018b50 ldr r7, [pc, 0xb4]                |         r7 = *(0x18c08);
    0x00018b54 mov r3, r5                        |         r3 = r5;
    0x00018b58 ldr r2, [pc, 0xb0]                |         r2 = stderr;
    0x00018b5c ldr r1, [pc, 0xb0]                |         r1 = "libmtd";
    0x00018b60 ldr r6, [r0]                      |         r6 = *(r0);
    0x00018b64 ldr r0, [r7]                      |         r0 = *(0x18c08);
    0x00018b68 bl 0x10c7c                        |         fprintf (r0, "libmtd", r2, r3, r4, r5, r6)
    0x00018b6c mov r0, r6                        |         r0 = r6;
    0x00018b70 ldr r5, [r7]                      |         r5 = *(0x18c08);
    0x00018b74 bl 0x10bc8                        |         strerror (r0);
    0x00018b78 str r6, [sp]                      |         *(sp) = r6;
    0x00018b7c ldr r3, [pc, 0x94]                |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018b80 mov r2, 8                         |         r2 = 8;
    0x00018b84 ldr r1, [pc, 0x90]                |         r1 = *(0x18c18);
    0x00018b88 str r0, [sp, 4]                   |         var_4h = r0;
    0x00018b8c mov r0, r5                        |         r0 = r5;
    0x00018b90 bl 0x10c7c                        |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4, r5, r6)
    0x00018b94 b 0x18af4                         |         goto label_0;
                                                 |     }
    0x00018b98 add r2, sp, 0x70                  |     r2 += var_70h;
    0x00018b9c ldr r1, [pc, 0x80]                |     r1 = "%s: error!: \"%s\" is not a character device\n";
    0x00018ba0 bl 0x10bb0                        |     r0 = ioctl (r0, "%s: error!: \"%s\" is not a character device\n");
    0x00018ba4 subs r6, r0, 0                    |     r6 = r0 - 0;
                                                 |     if (r6 < r0) {
    0x00018ba8 ldrge r6, [sp, 0x174]             |         r6 = var_174h;
                                                 |     }
                                                 |     if (r6 < r0) {
    0x00018bac bge 0x18bfc                       |         
    0x00018bb0 bl 0x10d78                        |         r0 = errno_location ();
    0x00018bb4 ldr r5, [r0]                      |         r5 = *(r0);
    0x00018bb8 cmp r5, 0x5f                      |         
                                                 |         if (r5 == 0x5f) {
    0x00018bbc beq 0x18bfc                       |             goto label_3;
                                                 |         }
    0x00018bc0 ldr r7, [pc, 0x44]                |         
    0x00018bc4 ldr r2, [pc, 0x44]                |         r2 = stderr;
    0x00018bc8 ldr r1, [pc, 0x58]                |         r1 = *(0x18c24);
    0x00018bcc ldr r0, [r7]                      |         r0 = *(0x18c08);
    0x00018bd0 bl 0x10c7c                        |         fprintf (r0, r1, r2)
    0x00018bd4 mov r0, r5                        |         r0 = r5;
    0x00018bd8 ldr r7, [r7]                      |         r7 = *(0x18c08);
    0x00018bdc bl 0x10bc8                        |         strerror (r0);
    0x00018be0 str r5, [sp]                      |         *(sp) = r5;
    0x00018be4 ldr r3, [pc, 0x2c]                |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018be8 mov r2, 8                         |         r2 = 8;
    0x00018bec ldr r1, [pc, 0x28]                |         r1 = *(0x18c18);
    0x00018bf0 str r0, [sp, 4]                   |         var_4h = r0;
    0x00018bf4 mov r0, r7                        |         r0 = r7;
    0x00018bf8 bl 0x10c7c                        |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4, r5)
                                                 |     }
                                                 | label_3:
    0x00018bfc mov r0, r4                        |     r0 = r4;
    0x00018c00 bl 0x10dcc                        |     close (r0);
    0x00018c04 mov r4, r6                        |     r4 = r6;
    0x00018c08 b 0x18af4                         |     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 @ 0x18c58 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.00018c58 ()                          | void fcn_00018c58 (char * arg1, int32_t arg2) {
                                                     |     int32_t var_0h;
                                                     |     int32_t var_4h;
                                                     |     int32_t var_8h;
                                                     |     int32_t var_8h_2;
                                                     |     int32_t var_10h;
                                                     |     int32_t var_10h_2;
                                                     |     int32_t var_18h;
                                                     |     int32_t var_1ch;
                                                     |     int32_t var_20h;
                                                     |     int32_t var_24h;
                                                     |     int32_t var_28h;
                                                     |     int32_t var_2ch;
                                                     |     int32_t var_38h;
                                                     |     int32_t var_48h;
                                                     |     int32_t var_58h;
                                                     |     int32_t var_58h_2;
                                                     |     int32_t var_a0h;
                                                     |     char * src;
                                                     |     int32_t var_144h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x00018c58 push {r4, r5, r6, r7, r8, sb, lr}     |     
    0x00018c5c sub sp, sp, 0x144                     |     
    0x00018c60 mov r2, 0                             |     r2 = 0;
    0x00018c64 mov r3, 0                             |     r3 = 0;
    0x00018c68 mov r4, r1                            |     r4 = r1;
    0x00018c6c add r1, sp, 0x38                      |     r1 += var_38h;
    0x00018c70 mov r6, r0                            |     r6 = r0;
    0x00018c74 strd r2, r3, [sp, 0x10]               |     __asm ("strd r2, r3, [var_10h]");
    0x00018c78 bl 0x10bd4                            |     r0 = stat64 ();
    0x00018c7c cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x00018c80 beq 0x18ce8                           |         
    0x00018c84 bl 0x10d78                            |         errno_location ();
    0x00018c88 ldr r8, [pc, 0x450]                   |         
    0x00018c8c mov r3, r6                            |         r3 = r6;
    0x00018c90 ldr r2, [pc, 0x44c]                   |         r2 = stderr;
    0x00018c94 ldr r1, [pc, 0x44c]                   |         r1 = "libmtd";
    0x00018c98 ldr r7, [r0]                          |         r7 = *(r0);
    0x00018c9c mov r5, r0                            |         r5 = r0;
    0x00018ca0 ldr r0, [r8]                          |         r0 = *(0x190dc);
    0x00018ca4 bl 0x10c7c                            |         fprintf (r0, "libmtd", r2, r3, r4, r5)
    0x00018ca8 mov r0, r7                            |         r0 = r7;
    0x00018cac ldr r8, [r8]                          |         r8 = *(0x190dc);
    0x00018cb0 bl 0x10bc8                            |         strerror (r0);
    0x00018cb4 ldr r3, [pc, 0x430]                   |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018cb8 str r7, [sp]                          |         *(sp) = r7;
    0x00018cbc mov r2, 8                             |         r2 = 8;
    0x00018cc0 ldr r1, [pc, 0x428]                   |         r1 = *(0x190ec);
    0x00018cc4 str r0, [sp, 4]                       |         var_4h = r0;
    0x00018cc8 mov r0, r8                            |         r0 = r8;
    0x00018ccc bl 0x10c7c                            |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n")
    0x00018cd0 ldr r3, [r5]                          |         r3 = *(r5);
    0x00018cd4 cmp r3, 2                             |         
                                                     |         if (r3 != 2) {
    0x00018cd8 bne 0x18ce8                           |             goto label_5;
                                                     |         }
    0x00018cdc ldr r1, [pc, 0x400]                   |         r1 = stderr;
    0x00018ce0 ldr r0, [pc, 0x40c]                   |         r0 = "_serror__d___s_";
    0x00018ce4 bl 0x10bbc                            |         printf ("_serror__d___s_", r1);
                                                     |     }
                                                     | label_5:
    0x00018ce8 ldr r3, [sp, 0x48]                    |     r3 = var_48h;
    0x00018cec and r3, r3, 0xf000                    |     r3 &= 0xf000;
    0x00018cf0 cmp r3, 0x2000                        |     
                                                     |     if (r3 == 0x2000) {
    0x00018cf4 beq 0x18d24                           |         goto label_6;
                                                     |     }
    0x00018cf8 bl 0x10d78                            |     errno_location ();
    0x00018cfc mov r3, 0x16                          |     r3 = 0x16;
    0x00018d00 ldr r2, [pc, 0x3dc]                   |     r2 = stderr;
    0x00018d04 ldr r1, [pc, 0x3ec]                   |     r1 = "%s: MTD subsystem is old and does not support sysfs, so MTD character device nodes have to exist\n";
    0x00018d08 str r3, [r0]                          |     *(r0) = r3;
    0x00018d0c ldr r0, [pc, 0x3cc]                   |     
    0x00018d10 mov r3, r6                            |     r3 = r6;
    0x00018d14 ldr r0, [r0]                          |     r0 = *(0x190dc);
    0x00018d18 bl 0x10c7c                            |     fprintf (r0, "%s: MTD subsystem is old and does not support sysfs, so MTD character device nodes have to exist\n", r2, r3)
                                                     |     do {
                                                     | label_0:
    0x00018d1c mvn r5, 0                             |         r5 = ~0;
    0x00018d20 b 0x18e08                             |         goto label_4;
                                                     | label_6:
    0x00018d24 mov r2, 0x100                         |         r2 = 0x100;
    0x00018d28 mov r1, 0                             |         r1 = 0;
    0x00018d2c mov r0, r4                            |         r0 = r4;
    0x00018d30 bl 0x10d18                            |         memset (r0, r1, r2);
    0x00018d34 ldrd r8, sb, [sp, 0x58]               |         __asm ("ldrd r8, sb, [var_58h]");
    0x00018d38 mov r1, sb                            |         r1 = sb;
    0x00018d3c mov r0, r8                            |         r0 = r8;
    0x00018d40 bl 0x10c04                            |         gnu_dev_major ();
    0x00018d44 mov r1, sb                            |         r1 = sb;
    0x00018d48 mov r5, r0                            |         r5 = r0;
    0x00018d4c str r0, [r4, 4]                       |         *((r4 + 4)) = r0;
    0x00018d50 mov r0, r8                            |         r0 = r8;
    0x00018d54 bl 0x10c4c                            |         gnu_dev_minor ();
    0x00018d58 cmp r5, 0x5a                          |         
    0x00018d5c str r0, [r4, 8]                       |         *((r4 + 8)) = r0;
                                                     |         if (r5 == 0x5a) {
    0x00018d60 beq 0x18d9c                           |             goto label_7;
                                                     |         }
    0x00018d64 bl 0x10d78                            |         errno_location ();
    0x00018d68 mov r3, 0x16                          |         r3 = 0x16;
    0x00018d6c ldr r2, [pc, 0x370]                   |         r2 = stderr;
    0x00018d70 ldr r1, [pc, 0x384]                   |         r1 = "%s: error!: \"%s\" is not a character device\n";
    0x00018d74 str r3, [r0]                          |         *(r0) = r3;
    0x00018d78 mov r3, 0x5a                          |         r3 = 0x5a;
    0x00018d7c str r3, [sp, 4]                       |         var_4h = r3;
    0x00018d80 ldr r0, [pc, 0x358]                   |         
    0x00018d84 ldr r3, [r4, 4]                       |         r3 = *((r4 + 4));
    0x00018d88 str r3, [sp]                          |         *(sp) = r3;
    0x00018d8c mov r3, r6                            |         r3 = r6;
    0x00018d90 ldr r0, [r0]                          |         r0 = *(0x190dc);
    0x00018d94 bl 0x10c7c                            |         fprintf (r0, "%s: error!: \"%s\" is not a character device\n", r2, r3)
    0x00018d98 b 0x18d1c                             |         
                                                     |     } while (1);
                                                     | label_7:
    0x00018d9c add r0, r0, r0, lsr 31                |     r0 += (r0 >> 31);
    0x00018da0 asr r0, r0, 1                         |     r0 >>= 1;
    0x00018da4 str r0, [r4]                          |     *(r4) = r0;
    0x00018da8 mov r1, 0                             |     r1 = 0;
    0x00018dac mov r0, r6                            |     r0 = r6;
    0x00018db0 bl 0x10d30                            |     r0 = open64 ();
    0x00018db4 cmn r0, 1                             |     
    0x00018db8 mov r5, r0                            |     r5 = r0;
                                                     |     if (r0 == 1) {
    0x00018dbc bne 0x18e14                           |         
    0x00018dc0 bl 0x10d78                            |         errno_location ();
    0x00018dc4 ldr r7, [pc, 0x314]                   |         r7 = *(0x190dc);
    0x00018dc8 mov r3, r6                            |         r3 = r6;
    0x00018dcc ldr r2, [pc, 0x310]                   |         r2 = stderr;
    0x00018dd0 ldr r1, [pc, 0x310]                   |         r1 = "libmtd";
    0x00018dd4 ldr r4, [r0]                          |         r4 = *(r0);
    0x00018dd8 ldr r0, [r7]                          |         r0 = *(0x190dc);
    0x00018ddc bl 0x10c7c                            |         fprintf (r0, "libmtd", r2, r3, r4)
    0x00018de0 mov r0, r4                            |         r0 = r4;
    0x00018de4 ldr r6, [r7]                          |         r6 = *(0x190dc);
    0x00018de8 bl 0x10bc8                            |         strerror (r0);
    0x00018dec str r4, [sp]                          |         *(sp) = r4;
    0x00018df0 ldr r3, [pc, 0x2f4]                   |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018df4 mov r2, 8                             |         r2 = 8;
    0x00018df8 ldr r1, [pc, 0x2f0]                   |         r1 = *(0x190ec);
    0x00018dfc str r0, [sp, 4]                       |         var_4h = r0;
    0x00018e00 mov r0, r6                            |         r0 = r6;
    0x00018e04 bl 0x10c7c                            |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
                                                     | label_4:
    0x00018e08 mov r0, r5                            |         r0 = r5;
    0x00018e0c add sp, sp, 0x144                     |         
    0x00018e10 pop {r4, r5, r6, r7, r8, sb, pc}      |         
                                                     |     }
    0x00018e14 add r2, sp, 0x18                      |     r2 += var_18h;
    0x00018e18 ldr r1, [pc, 0x2e0]                   |     r1 = "%s: error!: \"%s\" has major number %d, MTD devices have major %d\n";
    0x00018e1c bl 0x10bb0                            |     r0 = ioctl (r0, "%s: error!: \"%s\" has major number %d, MTD devices have major %d\n");
    0x00018e20 subs r8, r0, 0                        |     r8 = r0 - 0;
                                                     |     if (r8 == r0) {
    0x00018e24 beq 0x18e78                           |         goto label_8;
                                                     |     }
    0x00018e28 bl 0x10d78                            |     errno_location ();
    0x00018e2c ldr r6, [pc, 0x2ac]                   |     
    0x00018e30 ldr r2, [pc, 0x2ac]                   |     r2 = stderr;
    0x00018e34 ldr r1, [pc, 0x2c8]                   |     r1 = *(0x19100);
    0x00018e38 ldr r4, [r0]                          |     r4 = *(r0);
    0x00018e3c ldr r0, [r6]                          |     r0 = *(0x190dc);
    0x00018e40 bl 0x10c7c                            |     fprintf (r0, r1, r2, r3, r4, r5, r6)
    0x00018e44 mov r0, r4                            |     r0 = r4;
    0x00018e48 ldr r6, [r6]                          |     r6 = *(0x190dc);
    0x00018e4c bl 0x10bc8                            |     strerror (r0);
    0x00018e50 ldr r3, [pc, 0x294]                   |     r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018e54 ldr r1, [pc, 0x294]                   |     r1 = *(0x190ec);
    0x00018e58 mov r2, 8                             |     r2 = 8;
    0x00018e5c str r4, [sp]                          |     *(sp) = r4;
    0x00018e60 str r0, [sp, 4]                       |     var_4h = r0;
    0x00018e64 mov r0, r6                            |     r0 = r6;
                                                     |     do {
                                                     | label_1:
    0x00018e68 bl 0x10c7c                            |         fprintf (r0, r1, r2, "%s: error!: cannot open \"%s\"\n", r4)
                                                     | label_2:
    0x00018e6c mov r0, r5                            |         r0 = r5;
    0x00018e70 bl 0x10dcc                            |         close (r0);
    0x00018e74 b 0x18d1c                             |         goto label_0;
                                                     | label_8:
    0x00018e78 add r2, sp, 0x10                      |         r2 += var_10h;
    0x00018e7c ldr r1, [pc, 0x284]                   |         r1 = "_s:_error_:_MEMGETINFO_ioctl_request_failed";
    0x00018e80 mov r0, r5                            |         r0 = r5;
    0x00018e84 bl 0x10bb0                            |         r0 = ioctl (r0, "_s:_error_:_MEMGETINFO_ioctl_request_failed");
    0x00018e88 cmn r0, 1                             |         
                                                     |         if (r0 == 1) {
    0x00018e8c ldrbne r3, [r4, 0xfc]                 |             r3 = *((r4 + 0xfc));
                                                     |         }
                                                     |         if (r0 == 1) {
    0x00018e90 orrne r3, r3, 2                       |             r3 |= 2;
                                                     |         }
                                                     |         if (r0 != 1) {
    0x00018e94 bne 0x18ef0                           |             goto label_9;
                                                     |         }
    0x00018e98 bl 0x10d78                            |         r0 = errno_location ();
    0x00018e9c ldr r7, [r0]                          |         r7 = *(r0);
    0x00018ea0 cmp r7, 0x5f                          |         
                                                     |         if (r7 != 0x5f) {
    0x00018ea4 streq r8, [r0]                        |             *(r0) = r8;
                                                     |         }
                                                     |         if (r7 != 0x5f) {
    0x00018ea8 ldrbeq r3, [r4, 0xfc]                 |             r3 = *((r4 + 0xfc));
                                                     |         }
    0x00018eac biceq r3, r3, 2                       |         __asm ("biceq r3, r3, 2");
                                                     |         if (r7 == 0x5f) {
    0x00018eb0 beq 0x18ef0                           |             goto label_9;
                                                     |         }
    0x00018eb4 ldr r4, [pc, 0x224]                   |         
    0x00018eb8 ldr r2, [pc, 0x224]                   |         r2 = stderr;
    0x00018ebc ldr r1, [pc, 0x248]                   |         r1 = *(0x19108);
    0x00018ec0 ldr r0, [r4]                          |         r0 = *(0x190dc);
    0x00018ec4 bl 0x10c7c                            |         fprintf (r0, r1, r2, r3, r4)
    0x00018ec8 mov r0, r7                            |         r0 = r7;
    0x00018ecc ldr r4, [r4]                          |         r4 = *(0x190dc);
    0x00018ed0 bl 0x10bc8                            |         strerror (r0);
    0x00018ed4 str r7, [sp]                          |         *(sp) = r7;
    0x00018ed8 ldr r3, [pc, 0x20c]                   |         r3 = "%s: error!: cannot open \"%s\"\n";
    0x00018edc mov r2, 8                             |         r2 = 8;
    0x00018ee0 ldr r1, [pc, 0x208]                   |         r1 = *(0x190ec);
    0x00018ee4 str r0, [sp, 4]                       |         var_4h = r0;
    0x00018ee8 mov r0, r4                            |         r0 = r4;
    0x00018eec b 0x18e68                             |         
                                                     |     } while (1);
                                                     | label_9:
    0x00018ef0 strb r3, [r4, 0xfc]                   |     *((r4 + 0xfc)) = r3;
    0x00018ef4 ldr r3, [sp, 0x28]                    |     r3 = var_28h;
    0x00018ef8 ldrb r7, [sp, 0x18]                   |     r7 = var_18h;
    0x00018efc ldr r0, [sp, 0x20]                    |     r0 = var_20h;
    0x00018f00 ldr r2, [sp, 0x24]                    |     r2 = var_24h;
    0x00018f04 ldr ip, [sp, 0x2c]                    |     ip = var_2ch;
    0x00018f08 mov r1, 0                             |     r1 = 0;
    0x00018f0c cmp r3, 0                             |     
    0x00018f10 str r7, [r4, 0xc]                     |     *((r4 + 0xc)) = r7;
    0x00018f14 strd r0, r1, [r4, 0xd8]               |     __asm ("strd r0, r1, [r4, 0xd8]");
    0x00018f18 str r2, [r4, 0xe4]                    |     *((r4 + 0xe4)) = r2;
    0x00018f1c str r3, [r4, 0xe8]                    |     *((r4 + 0xe8)) = r3;
    0x00018f20 str ip, [r4, 0xf0]                    |     *((r4 + 0xf0)) = ip;
                                                     |     if (r3 > 0) {
    0x00018f24 bgt 0x18f48                           |         goto label_10;
                                                     |     }
    0x00018f28 str r3, [sp, 4]                       |     var_4h = r3;
    0x00018f2c str r6, [sp]                          |     *(sp) = r6;
    0x00018f30 ldr r2, [pc, 0x1ac]                   |     r2 = stderr;
    0x00018f34 ldr r3, [r4]                          |     r3 = *(r4);
    0x00018f38 ldr r1, [pc, 0x1d0]                   |     r1 = "%s: error!: MEMGETBADBLOCK ioctl failed\n";
                                                     |     do {
    0x00018f3c ldr r0, [pc, 0x19c]                   |         
    0x00018f40 ldr r0, [r0]                          |         r0 = *(0x190dc);
    0x00018f44 b 0x18e68                             |         goto label_1;
                                                     | label_10:
    0x00018f48 cmp r2, r3                            |         
    0x00018f4c cmpge r2, 0                           |         __asm ("cmpge r2, 0");
                                                     |         if (r2 > r3) {
    0x00018f50 bgt 0x18f6c                           |             goto label_11;
                                                     |         }
    0x00018f54 str r2, [sp, 4]                       |         var_4h = r2;
    0x00018f58 str r6, [sp]                          |         *(sp) = r6;
    0x00018f5c ldr r2, [pc, 0x180]                   |         r2 = stderr;
    0x00018f60 ldr r3, [r4]                          |         r3 = *(r4);
    0x00018f64 ldr r1, [pc, 0x1a8]                   |         r1 = "_s:_error_:_mtd_d___s__has_insane_min._I_O_unit_size__d";
    0x00018f68 b 0x18f3c                             |         
                                                     |     } while (1);
                                                     | label_11:
    0x00018f6c orrs r3, r0, r1                       |     r3 = r0 | r1;
                                                     |     if (r3 != r0) {
    0x00018f70 beq 0x18f84                           |         
    0x00018f74 asr r3, r2, 0x1f                      |         r3 = r2 >> 0x1f;
    0x00018f78 cmp r0, r2                            |         
    0x00018f7c sbcs ip, r1, r3                       |         __asm ("sbcs ip, r1, r3");
                                                     |         if (r0 >= r2) {
    0x00018f80 bge 0x18fa8                           |             goto label_12;
                                                     |         }
                                                     |     }
    0x00018f84 strd r0, r1, [sp, 8]                  |     __asm ("strd r0, r1, [var_8h]");
    0x00018f88 ldr r0, [pc, 0x150]                   |     
    0x00018f8c str r6, [sp]                          |     *(sp) = r6;
    0x00018f90 ldr r2, [pc, 0x14c]                   |     r2 = stderr;
    0x00018f94 ldr r3, [r4]                          |     r3 = *(r4);
    0x00018f98 ldr r1, [pc, 0x178]                   |     r1 = "%s: error!: mtd%d (%s) has insane eraseblock size %d\n";
    0x00018f9c ldr r0, [r0]                          |     r0 = *(0x190dc);
    0x00018fa0 bl 0x10c7c                            |     fprintf (r0, "%s: error!: mtd%d (%s) has insane eraseblock size %d\n", r2, r3, r4, r5, r6)
    0x00018fa4 b 0x18e6c                             |     goto label_2;
                                                     | label_12:
    0x00018fa8 bl 0x19ad0                            |     fcn_00019ad0 (r0);
    0x00018fac str r0, [r4, 0xe0]                    |     *((r4 + 0xe0)) = r0;
    0x00018fb0 cmp r7, 8                             |     
                                                     |     if (r7 > 8) {
                                                     |         /* switch table (9 cases) at 0x18fbc */
    0x00018fb4 ldrls pc, [pc, r7, lsl 2]             |         offset_0 = r7 << 2;
                                                     |         pc = *((pc + offset_0));
                                                     |     }
    0x00018fb8 b 0x18e6c                             |     goto label_2;
    0x00018fe0 ldr r0, [pc, 0xf8]                    |     
    0x00018fe4 str r6, [sp]                          |     *(sp) = r6;
    0x00018fe8 ldr r2, [pc, 0xf4]                    |     r2 = stderr;
    0x00018fec ldr r3, [r4]                          |     r3 = *(r4);
    0x00018ff0 ldr r1, [pc, 0x124]                   |     r1 = "%s: error!: mtd%d (%s) has insane size %lld\n";
    0x00018ff4 ldr r0, [r0]                          |     r0 = *(0x190dc);
    0x00018ff8 bl 0x10c7c                            |     fprintf (r0, "%s: error!: mtd%d (%s) has insane size %lld\n", r2, r3, r4, r5, r6)
    0x00018ffc b 0x18e6c                             |     goto label_2;
    0x00019000 ldr r1, [pc, 0x118]                   |     r1 = "_s:_error_:_mtd_d___s__is_removable_and_is_not_present";
                                                     | label_3:
    0x00019004 add r0, r4, 0x10                      |     r0 = r4 + 0x10;
    0x00019008 bl 0x10ba4                            |     strcpy (r0, "_s:_error_:_mtd_d___s__is_removable_and_is_not_present");
    0x0001900c ldr r3, [sp, 0x1c]                    |     r3 = var_1ch;
    0x00019010 mov r0, r5                            |     r0 = r5;
    0x00019014 tst r3, 0x400                         |     
                                                     |     if ((r3 & 0x400) == 0) {
    0x00019018 ldrbne r3, [r4, 0xfc]                 |         r3 = *((r4 + 0xfc));
                                                     |     }
                                                     |     if ((r3 & 0x400) == 0) {
    0x0001901c orrne r3, r3, 1                       |         r3 |= 1;
                                                     |     }
                                                     |     if ((r3 & 0x400) == 0) {
    0x00019020 strbne r3, [r4, 0xfc]                 |         *((r4 + 0xfc)) = r3;
                                                     |     }
    0x00019024 ldr r3, [r4, 0xe8]                    |     r3 = *((r4 + 0xe8));
    0x00019028 str r3, [r4, 0xec]                    |     *((r4 + 0xec)) = r3;
    0x0001902c bl 0x10dcc                            |     close (r0);
    0x00019030 mov r0, r6                            |     r0 = r6;
    0x00019034 bl 0x18a8c                            |     r0 = fcn_00018a8c (r0);
    0x00019038 bic r0, r0, r0, asr 31                |     r0 = BIT_MASK (r0, r0);
    0x0001903c str r0, [r4, 0xf4]                    |     *((r4 + 0xf4)) = r0;
    0x00019040 add r0, sp, 0xa0                      |     r0 += var_a0h;
    0x00019044 bl 0x187b0                            |     fcn_000187b0 (r0);
    0x00019048 subs r5, r0, 0                        |     r5 -= var_a0h;
                                                     |     if (r5 != var_a0h) {
    0x0001904c bne 0x18d1c                           |         goto label_0;
                                                     |     }
                                                     |     do {
    0x00019050 add r0, sp, 0xa0                      |         r0 += var_a0h;
    0x00019054 bl 0x1864c                            |         r0 = fcn_0001864c (r0);
    0x00019058 cmp r0, 0                             |         
                                                     |         if (r0 == 0) {
    0x0001905c bne 0x190c0                           |             
    0x00019060 ldr r3, [pc, 0xbc]                    |             r3 = "ram";
    0x00019064 ldr r0, [pc, 0x74]                    |             
    0x00019068 str r3, [sp]                          |             *(sp) = r3;
    0x0001906c ldr r2, [pc, 0x70]                    |             r2 = stderr;
    0x00019070 ldr r3, [r4]                          |             r3 = *(r4);
    0x00019074 ldr r1, [pc, 0xac]                    |             r1 = "_proc_mtd";
    0x00019078 ldr r0, [r0]                          |             r0 = *(0x190dc);
    0x0001907c bl 0x10c7c                            |             r0 = fprintf (r0, "_proc_mtd", r2, "ram")
    0x00019080 bl 0x10d78                            |             errno_location ();
    0x00019084 mov r3, 2                             |             r3 = 2;
    0x00019088 str r3, [r0]                          |             *(r0) = r3;
    0x0001908c b 0x18d1c                             |             goto label_0;
    0x00019090 ldr r1, [pc, 0x94]                    |             r1 = "_s:_error_:_mtd_d_not_found_in___s_";
    0x00019094 b 0x19004                             |             goto label_3;
    0x00019098 ldr r1, [pc, 0x90]                    |             r1 = *(0x1912c);
    0x0001909c b 0x19004                             |             goto label_3;
    0x000190a0 ldr r1, [pc, 0x8c]                    |             r1 = *(0x19130);
    0x000190a4 b 0x19004                             |             goto label_3;
    0x000190a8 ldr r1, [pc, 0x88]                    |             r1 = "nand";
    0x000190ac b 0x19004                             |             goto label_3;
    0x000190b0 ldr r1, [pc, 0x84]                    |             r1 = "mlc_nand";
    0x000190b4 b 0x19004                             |             goto label_3;
    0x000190b8 ldr r1, [pc, 0x80]                    |             r1 = "dataflash";
    0x000190bc b 0x19004                             |             goto label_3;
                                                     |         }
    0x000190c0 ldr r3, [r4]                          |         r3 = *(r4);
    0x000190c4 ldr r2, [sp, 0xa0]                    |         r2 = var_a0h;
    0x000190c8 cmp r2, r3                            |         
    0x000190cc bne 0x19050                           |         
                                                     |     } while (r2 != r3);
    0x000190d0 add r1, sp, 0xb0                      |     r1 += src;
    0x000190d4 add r0, r4, 0x51                      |     r0 = r4 + 0x51;
    0x000190d8 bl 0x10ba4                            |     strcpy (r0, r1);
    0x000190dc b 0x18e08                             |     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 @ 0x19178 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00019178 ()                                  | void fcn_00019178 (char * * arg1, int32_t arg2) {
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_1ch;
                                                             |     int32_t var_20h;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_28h;
                                                             |     int32_t var_30h;
                                                             |     int32_t var_34h;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_3ch;
                                                             |     int32_t var_64h;
                                                             |     int32_t var_6ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00019178 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x0001917c mov r8, r0                                    |     r8 = r0;
    0x00019180 sub sp, sp, 0x6c                              |     
    0x00019184 mov sb, r1                                    |     sb = r1;
    0x00019188 mov r0, 1                                     |     r0 = 1;
    0x0001918c mov r1, 0x30                                  |     r1 = 0x30;
    0x00019190 str r2, [sp, 0x1c]                            |     var_1ch = r2;
    0x00019194 mov r6, r3                                    |     r6 = r3;
    0x00019198 bl 0x10c64                                    |     r0 = calloc (r0, r1);
    0x0001919c subs r4, r0, 0                                |     r4 = r0 - 0;
                                                             |     if (r4 != r0) {
    0x000191a0 bne 0x191f8                                   |         goto label_12;
                                                             |     }
    0x000191a4 bl 0x10d78                                    |     errno_location ();
    0x000191a8 ldr r5, [pc, 0x6e8]                           |     
    0x000191ac mov r3, 0x30                                  |     r3 = 0x30;
    0x000191b0 ldr r2, [pc, 0x6e4]                           |     r2 = stderr;
    0x000191b4 ldr r1, [pc, 0x6e4]                           |     r1 = "libscan";
    0x000191b8 ldr r4, [r0]                                  |     r4 = *(r0);
    0x000191bc ldr r0, [r5]                                  |     r0 = *(0x19894);
    0x000191c0 bl 0x10c7c                                    |     fprintf (r0, "libscan", r2, r3, r4, r5)
    0x000191c4 mov r0, r4                                    |     r0 = r4;
    0x000191c8 ldr r5, [r5]                                  |     r5 = *(0x19894);
    0x000191cc bl 0x10bc8                                    |     strerror (r0);
    0x000191d0 str r4, [sp]                                  |     *(sp) = r4;
    0x000191d4 ldr r3, [pc, 0x6c8]                           |     r3 = "%s: error!: cannot allocate %zd bytes of memory\n";
    0x000191d8 mov r2, 9                                     |     r2 = 9;
    0x000191dc ldr r1, [pc, 0x6c4]                           |     r1 = *(0x198a4);
    0x000191e0 str r0, [sp, 4]                               |     var_4h = r0;
    0x000191e4 mov r0, r5                                    |     r0 = r5;
    0x000191e8 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: cannot allocate %zd bytes of memory\n", r4)
                                                             |     do {
    0x000191ec mvn r0, 0                                     |         r0 = ~0;
                                                             | label_0:
    0x000191f0 add sp, sp, 0x6c                              |         
    0x000191f4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             | label_12:
    0x000191f8 ldr r5, [r8, 0xe0]                            |         r5 = *((r8 + 0xe0));
    0x000191fc mov r1, 4                                     |         r1 = 4;
    0x00019200 mov r0, r5                                    |         r0 = r5;
    0x00019204 bl 0x10c64                                    |         r0 = calloc (r0, r1);
    0x00019208 cmp r0, 0                                     |         
    0x0001920c str r0, [r4]                                  |         *(r4) = r0;
                                                             |         if (r0 != 0) {
    0x00019210 bne 0x19274                                   |             goto label_13;
                                                             |         }
    0x00019214 bl 0x10d78                                    |         errno_location ();
    0x00019218 ldr r6, [pc, 0x678]                           |         
    0x0001921c mov r3, 0x30                                  |         r3 = 0x30;
    0x00019220 ldr r2, [pc, 0x674]                           |         r2 = stderr;
    0x00019224 ldr r1, [pc, 0x674]                           |         r1 = "libscan";
    0x00019228 ldr r5, [r0]                                  |         r5 = *(r0);
    0x0001922c ldr r0, [r6]                                  |         r0 = *(0x19894);
    0x00019230 bl 0x10c7c                                    |         fprintf (r0, "libscan", r2, r3, r4, r5, r6)
    0x00019234 mov r0, r5                                    |         r0 = r5;
    0x00019238 ldr r6, [r6]                                  |         r6 = *(0x19894);
    0x0001923c bl 0x10bc8                                    |         strerror (r0);
    0x00019240 str r5, [sp]                                  |         *(sp) = r5;
    0x00019244 ldr r3, [pc, 0x658]                           |         r3 = "%s: error!: cannot allocate %zd bytes of memory\n";
    0x00019248 mov r2, 9                                     |         r2 = 9;
    0x0001924c ldr r1, [pc, 0x654]                           |         r1 = *(0x198a4);
    0x00019250 str r0, [sp, 4]                               |         var_4h = r0;
    0x00019254 mov r0, r6                                    |         r0 = r6;
    0x00019258 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot allocate %zd bytes of memory\n", r4, r5)
                                                             | label_4:
    0x0001925c mov r0, r4                                    |         r0 = r4;
    0x00019260 bl 0x10de4                                    |         free (r0);
    0x00019264 ldr r2, [sp, 0x1c]                            |         r2 = var_1ch;
    0x00019268 mov r3, 0                                     |         r3 = 0;
    0x0001926c str r3, [r2]                                  |         *(r2) = r3;
    0x00019270 b 0x191ec                                     |         
                                                             |     } while (1);
                                                             | label_13:
    0x00019274 mvn r3, 0                                     |     r3 = ~0;
    0x00019278 cmp r6, 2                                     |     
    0x0001927c str r3, [r4, 0x2c]                            |     *((r4 + 0x2c)) = r3;
    0x00019280 str r3, [r4, 0x28]                            |     *((r4 + 0x28)) = r3;
                                                             |     if (r6 == 2) {
    0x00019284 bne 0x19298                                   |         
    0x00019288 mov r2, r5                                    |         r2 = r5;
    0x0001928c ldr r1, [pc, 0x608]                           |         r1 = stderr;
    0x00019290 ldr r0, [pc, 0x614]                           |         r0 = "_serror__d___s_";
    0x00019294 bl 0x10bbc                                    |         printf ("_serror__d___s_", r1, r2);
                                                             |     }
    0x00019298 mov r5, 0                                     |     r5 = 0;
                                                             |     do {
    0x0001929c ldr r7, [r8, 0xe0]                            |         r7 = *((r8 + 0xe0));
    0x000192a0 cmp r7, r5                                    |         
                                                             |         if (r7 <= r5) {
    0x000192a4 bgt 0x19320                                   |             
    0x000192a8 ldr r5, [r4, 0x10]                            |             r5 = *((r4 + 0x10));
    0x000192ac cmp r5, 0                                     |             
                                                             |             if (r5 != 0) {
    0x000192b0 bne 0x19860                                   |                 goto label_14;
                                                             |             }
                                                             | label_9:
    0x000192b4 ldr r3, [r4, 0x20]                            |             r3 = *((r4 + 0x20));
    0x000192b8 cmp r6, 2                                     |             
    0x000192bc sub r7, r7, r3                                |             r7 -= r3;
    0x000192c0 str r7, [r4, 0x24]                            |             *((r4 + 0x24)) = r7;
                                                             |             if (r6 == 2) {
    0x000192c4 bne 0x19300                                   |                 
    0x000192c8 ldrd r0, r1, [r4, 8]                          |                 __asm ("ldrd r0, r1, [r4, 8]");
    0x000192cc str r3, [sp, 0x10]                            |                 var_10h = r3;
    0x000192d0 ldr r3, [r4, 0x1c]                            |                 r3 = *((r4 + 0x1c));
    0x000192d4 mov r2, r0                                    |                 r2 = r0;
    0x000192d8 str r3, [sp, 0xc]                             |                 var_ch = r3;
    0x000192dc ldr r3, [r4, 0x14]                            |                 r3 = *((r4 + 0x14));
    0x000192e0 ldr r0, [pc, 0x5c8]                           |                 r0 = "_s:_start_scanning_eraseblocks_0__d";
    0x000192e4 str r3, [sp, 8]                               |                 var_8h = r3;
    0x000192e8 ldr r3, [r4, 0x18]                            |                 r3 = *((r4 + 0x18));
    0x000192ec str r5, [sp]                                  |                 *(sp) = r5;
    0x000192f0 str r3, [sp, 4]                               |                 var_4h = r3;
    0x000192f4 mov r3, r1                                    |                 r3 = r1;
    0x000192f8 ldr r1, [pc, 0x59c]                           |                 r1 = stderr;
    0x000192fc bl 0x10bbc                                    |                 printf (r0, r1, r2, r3, r4, r5);
                                                             |             }
    0x00019300 ldr r3, [sp, 0x1c]                            |             r3 = var_1ch;
    0x00019304 cmp r6, 1                                     |             
    0x00019308 str r4, [r3]                                  |             *(r3) = r4;
                                                             |             if (r6 == 1) {
    0x0001930c bne 0x19318                                   |                 
    0x00019310 mov r0, 0xa                                   |                 r0 = 0xa;
    0x00019314 bl 0x10b98                                    |                 putchar (r0);
                                                             |             }
    0x00019318 mov r0, 0                                     |             r0 = 0;
    0x0001931c b 0x191f0                                     |             goto label_0;
                                                             |         }
    0x00019320 cmp r6, 2                                     |         
                                                             |         if (r6 != 2) {
    0x00019324 bne 0x19394                                   |             goto label_15;
                                                             |         }
    0x00019328 mov r2, r5                                    |         r2 = r5;
    0x0001932c ldr r1, [pc, 0x568]                           |         r1 = stderr;
    0x00019330 ldr r0, [pc, 0x57c]                           |         r0 = "_s:_finished__mean_EC__lld___d_OK___d_corrupted___d_empty___d_alien__bad__d";
    0x00019334 bl 0x10bbc                                    |         printf ("_s:_finished__mean_EC__lld___d_OK___d_corrupted___d_empty___d_alien__bad__d", r1, r2);
                                                             | label_2:
    0x00019338 ldr r3, [pc, 0x578]                           |         r3 = "%s: scanning eraseblock %d";
    0x0001933c ldr r0, [r3]                                  |         r0 = "%s: scanning eraseblock %d";
    0x00019340 bl 0x10c40                                    |         fflush ("%s: scanning eraseblock %d");
                                                             | label_1:
    0x00019344 mov r2, r5                                    |         r2 = r5;
    0x00019348 mov r1, sb                                    |         r1 = sb;
    0x0001934c mov r0, r8                                    |         r0 = r8;
    0x00019350 bl 0x178f4                                    |         r0 = fcn_000178f4 (r0, r1);
    0x00019354 cmn r0, 1                                     |         
    0x00019358 mov r7, r0                                    |         r7 = r0;
                                                             |         if (r0 == 1) {
    0x0001935c beq 0x1960c                                   |             goto label_16;
                                                             |         }
    0x00019360 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00019364 beq 0x193d4                                   |             goto label_17;
                                                             |         }
    0x00019368 ldr r3, [r4, 0x20]                            |         r3 = *((r4 + 0x20));
    0x0001936c mvn r2, 3                                     |         r2 = ~3;
    0x00019370 add r3, r3, 1                                 |         r3++;
    0x00019374 str r3, [r4, 0x20]                            |         *((r4 + 0x20)) = r3;
    0x00019378 ldr r3, [r4]                                  |         r3 = *(r4);
    0x0001937c cmp r6, 2                                     |         
    0x00019380 str r2, [r3, r5, lsl 2]                       |         offset_0 = r5 << 2;
                                                             |         *((r3 + offset_0)) = r2;
                                                             |         if (r6 != 2) {
    0x00019384 ldreq r0, [pc, 0x530]                         |             r0 = ": bad";
                                                             |         }
                                                             |         if (r6 == 2) {
    0x00019388 beq 0x1946c                                   |             goto label_11;
                                                             |         }
                                                             | label_3:
    0x0001938c add r5, r5, 1                                 |         r5++;
    0x00019390 b 0x1929c                                     |         
                                                             |     } while (1);
                                                             | label_15:
    0x00019394 cmp r6, 1                                     |     
                                                             |     if (r6 != 1) {
    0x00019398 bne 0x19344                                   |         goto label_1;
                                                             |     }
    0x0001939c add r0, r5, 1                                 |     r0 = r5 + 1;
    0x000193a0 mov r1, 0x64                                  |     r1 = 0x64;
    0x000193a4 umull sl, fp, r0, r1                          |     sl:fp = r0 * r1;
    0x000193a8 mov r2, r7                                    |     r2 = r7;
    0x000193ac asr r3, r7, 0x1f                              |     r3 = r7 >> 0x1f;
    0x000193b0 mov r0, sl                                    |     r0 = sl;
    0x000193b4 mov r1, fp                                    |     r1 = fp;
    0x000193b8 bl 0x19ad0                                    |     r0 = fcn_00019ad0 (r0);
    0x000193bc mov r2, r0                                    |     r2 = r0;
    0x000193c0 mov r3, r1                                    |     r3 = r1;
    0x000193c4 ldr r0, [pc, 0x4f4]                           |     r0 = ": bad";
    0x000193c8 mov r1, r5                                    |     r1 = r5;
    0x000193cc bl 0x10bbc                                    |     printf (": bad", r1, r2, r3);
    0x000193d0 b 0x19338                                     |     goto label_2;
                                                             | label_17:
    0x000193d4 mov r3, 0x40                                  |     r3 = 0x40;
    0x000193d8 add sl, sp, 0x28                              |     sl += var_28h;
    0x000193dc str r3, [sp, 4]                               |     var_4h = r3;
    0x000193e0 str sl, [sp]                                  |     *(sp) = sl;
    0x000193e4 mov r3, r0                                    |     r3 = r0;
    0x000193e8 mov r2, r5                                    |     r2 = r5;
    0x000193ec mov r1, sb                                    |     r1 = sb;
    0x000193f0 mov r0, r8                                    |     r0 = r8;
    0x000193f4 bl 0x179f0                                    |     r0 = fcn_000179f0 (r0, r1, r2, r3);
    0x000193f8 cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x000193fc blt 0x1960c                                   |         goto label_16;
                                                             |     }
    0x00019400 ldr r3, [sp, 0x28]                            |     r3 = var_28h;
    0x00019404 lsr r2, r3, 0x18                              |     r2 = r3 >> 0x18;
    0x00019408 lsl r1, r3, 8                                 |     r1 = r3 << 8;
    0x0001940c orr r2, r2, r3, lsl 24                        |     r2 |= (r3 << 24);
    0x00019410 and r1, r1, 0xff0000                          |     r1 &= 0xff0000;
    0x00019414 lsr r3, r3, 8                                 |     r3 >>= 8;
    0x00019418 orr r2, r2, r1                                |     r2 |= r1;
    0x0001941c and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x00019420 orr r3, r2, r3                                |     r3 = r2 | r3;
    0x00019424 ldr r2, [pc, 0x498]                           |     r2 = "libscan:_scanning_eraseblock__d_____2lld____complete__";
    0x00019428 cmp r3, r2                                    |     
                                                             |     if (r3 == r2) {
    0x0001942c beq 0x19474                                   |         goto label_18;
                                                             |     }
                                                             |     do {
    0x00019430 ldrb r3, [sl, r7]                             |         r3 = *((sl + r7));
    0x00019434 cmp r3, 0xff                                  |         
                                                             |         if (r3 != 0xff) {
    0x00019438 bne 0x19870                                   |             goto label_19;
                                                             |         }
    0x0001943c add r7, r7, 1                                 |         r7++;
    0x00019440 cmp r7, 0x40                                  |         
    0x00019444 bne 0x19430                                   |         
                                                             |     } while (r7 != 0x40);
    0x00019448 ldr r3, [r4, 0x14]                            |     r3 = *((r4 + 0x14));
    0x0001944c mvn r2, 0                                     |     r2 = ~0;
    0x00019450 add r3, r3, 1                                 |     r3++;
    0x00019454 str r3, [r4, 0x14]                            |     *((r4 + 0x14)) = r3;
    0x00019458 ldr r3, [r4]                                  |     r3 = *(r4);
    0x0001945c cmp r6, 2                                     |     
    0x00019460 str r2, [r3, r5, lsl 2]                       |     offset_1 = r5 << 2;
                                                             |     *((r3 + offset_1)) = r2;
                                                             |     if (r6 != 2) {
    0x00019464 bne 0x1938c                                   |         goto label_3;
                                                             |     }
    0x00019468 ldr r0, [pc, 0x458]                           |     r0 = *(0x198c4);
                                                             | label_11:
    0x0001946c bl 0x10c1c                                    |     puts (r0);
    0x00019470 b 0x1938c                                     |     goto label_3;
                                                             | label_18:
    0x00019474 mov r2, 0x3c                                  |     r2 = 0x3c;
    0x00019478 mov r1, sl                                    |     r1 = sl;
    0x0001947c mvn r0, 0                                     |     r0 = ~0;
    0x00019480 bl 0x18624                                    |     fcn_00018624 (r0);
    0x00019484 ldr r3, [sp, 0x64]                            |     r3 = var_64h;
    0x00019488 lsr r2, r3, 0x18                              |     r2 = r3 >> 0x18;
    0x0001948c orr r2, r2, r3, lsl 24                        |     r2 |= (r3 << 24);
    0x00019490 mov r1, r0                                    |     r1 = r0;
    0x00019494 lsl r0, r3, 8                                 |     r0 = r3 << 8;
    0x00019498 and r0, r0, 0xff0000                          |     r0 &= 0xff0000;
    0x0001949c lsr r3, r3, 8                                 |     r3 >>= 8;
    0x000194a0 orr r2, r2, r0                                |     r2 |= r0;
    0x000194a4 and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x000194a8 orr r3, r2, r3                                |     r3 = r2 | r3;
    0x000194ac cmp r1, r3                                    |     
                                                             |     if (r1 == r3) {
    0x000194b0 beq 0x19504                                   |         goto label_20;
                                                             |     }
    0x000194b4 ldr r3, [r4, 0x18]                            |     r3 = *((r4 + 0x18));
    0x000194b8 mvn r2, 1                                     |     r2 = ~1;
    0x000194bc add r3, r3, 1                                 |     r3++;
    0x000194c0 str r3, [r4, 0x18]                            |     *((r4 + 0x18)) = r3;
    0x000194c4 ldr r3, [r4]                                  |     r3 = *(r4);
    0x000194c8 cmp r6, 2                                     |     
    0x000194cc str r2, [r3, r5, lsl 2]                       |     offset_2 = r5 << 2;
                                                             |     *((r3 + offset_2)) = r2;
                                                             |     if (r6 != 2) {
    0x000194d0 bne 0x1938c                                   |         goto label_3;
                                                             |     }
    0x000194d4 ldr r3, [sp, 0x64]                            |     r3 = var_64h;
    0x000194d8 lsr r2, r3, 0x18                              |     r2 = r3 >> 0x18;
    0x000194dc lsl r0, r3, 8                                 |     r0 = r3 << 8;
    0x000194e0 orr r2, r2, r3, lsl 24                        |     r2 |= (r3 << 24);
    0x000194e4 and r0, r0, 0xff0000                          |     r0 &= 0xff0000;
    0x000194e8 lsr r3, r3, 8                                 |     r3 >>= 8;
    0x000194ec orr r2, r2, r0                                |     r2 |= r0;
    0x000194f0 and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x000194f4 orr r2, r2, r3                                |     r2 |= r3;
    0x000194f8 ldr r0, [pc, 0x3cc]                           |     r0 = ":_empty";
    0x000194fc bl 0x10bbc                                    |     printf (r0, r1, r2, r3);
    0x00019500 b 0x1938c                                     |     goto label_3;
                                                             | label_20:
    0x00019504 ldr ip, [sp, 0x30]                            |     ip = var_30h;
    0x00019508 ldr lr, [sp, 0x34]                            |     lr = var_34h;
    0x0001950c lsl fp, ip, 0x18                              |     
    0x00019510 orr r1, fp, r7                                |     r1 = fp | r7;
    0x00019514 lsl fp, ip, 8                                 |     
    0x00019518 lsr r2, lr, 0x18                              |     r2 = lr >> 0x18;
    0x0001951c and r3, fp, 0xff0000                          |     r3 = fp & 0xff0000;
    0x00019520 orr fp, r1, r3                                |     
    0x00019524 orr r0, r7, r2                                |     r0 = r7 | r2;
    0x00019528 lsl r1, lr, 0x18                              |     r1 = lr << 0x18;
    0x0001952c mov r2, 0                                     |     r2 = 0;
    0x00019530 orr sl, r0, r2                                |     sl = r0 | r2;
    0x00019534 orr r1, r1, ip, lsr 8                         |     r1 |= (ip >> 8);
    0x00019538 mov r2, 0                                     |     r2 = 0;
    0x0001953c orr r0, sl, r2                                |     r0 = sl | r2;
    0x00019540 and r3, r1, 0xff00                            |     r3 = r1 & 0xff00;
    0x00019544 mov r2, 0                                     |     r2 = 0;
    0x00019548 orr r1, fp, r3                                |     r1 = fp | r3;
    0x0001954c orr sl, r0, r2                                |     sl = r0 | r2;
    0x00019550 lsl fp, lr, 8                                 |     
    0x00019554 orr fp, fp, ip, lsr 24                        |     
    0x00019558 mov r0, sl                                    |     r0 = sl;
    0x0001955c lsr sl, ip, 8                                 |     sl = ip >> 8;
    0x00019560 and r3, fp, 0xff                              |     r3 = fp & 0xff;
    0x00019564 orr sl, sl, lr, lsl 24                        |     sl |= (lr << 24);
    0x00019568 orr fp, r1, r3                                |     
    0x0001956c and r2, sl, 0xff000000                        |     r2 = sl & 0xff000000;
    0x00019570 orr r0, r0, r2                                |     r0 |= r2;
    0x00019574 mov r1, fp                                    |     r1 = fp;
    0x00019578 mov r3, 0                                     |     r3 = 0;
    0x0001957c lsr r2, ip, 0x18                              |     r2 = ip >> 0x18;
    0x00019580 orr r1, r1, r3                                |     r1 |= r3;
    0x00019584 orr r2, r2, lr, lsl 8                         |     r2 |= (lr << 8);
    0x00019588 strd r0, r1, [sp, 0x20]                       |     __asm ("strd r0, r1, [var_20h]");
    0x0001958c and r0, r2, 0xff0000                          |     r0 = r2 & 0xff0000;
    0x00019590 mov r1, 0                                     |     r1 = 0;
    0x00019594 mov r2, r0                                    |     r2 = r0;
    0x00019598 mov r3, r1                                    |     r3 = r1;
    0x0001959c ldrd r0, r1, [sp, 0x20]                       |     __asm ("ldrd r0, r1, [var_20h]");
    0x000195a0 lsr fp, lr, 8                                 |     
    0x000195a4 orr r1, r1, r3                                |     r1 |= r3;
    0x000195a8 mov r3, r1                                    |     r3 = r1;
    0x000195ac orr r0, r0, r2                                |     r0 |= r2;
    0x000195b0 mov r1, 0                                     |     r1 = 0;
    0x000195b4 mov r2, r0                                    |     r2 = r0;
    0x000195b8 and r0, fp, 0xff00                            |     r0 = fp & 0xff00;
    0x000195bc orr fp, r3, r1                                |     
    0x000195c0 mov r3, 0                                     |     r3 = 0;
    0x000195c4 orr sl, r2, r0                                |     sl = r2 | r0;
    0x000195c8 cmp fp, r3                                    |     
    0x000195cc mvn r2, 0x80000000                            |     r2 = ~0x80000000;
    0x000195d0 cmpeq sl, r2                                  |     __asm ("cmpeq sl, r2");
                                                             |     if (fp >= r3) {
    0x000195d4 bls 0x19618                                   |         
    0x000195d8 cmp r6, 1                                     |         
                                                             |         if (r6 == 1) {
    0x000195dc bne 0x195e8                                   |             
    0x000195e0 mov r0, 0xa                                   |             r0 = 0xa;
    0x000195e4 bl 0x10b98                                    |             putchar (r0);
                                                             |         }
    0x000195e8 ldr r0, [pc, 0x2a8]                           |         
    0x000195ec mvn r3, 0x80000000                            |         r3 = ~0x80000000;
    0x000195f0 str r3, [sp, 8]                               |         var_8h = r3;
    0x000195f4 strd sl, fp, [sp]                             |         __asm ("strd sl, fp, [sp]");
    0x000195f8 ldr r2, [pc, 0x29c]                           |         r2 = stderr;
    0x000195fc mov r3, r5                                    |         r3 = r5;
    0x00019600 ldr r1, [pc, 0x2c8]                           |         r1 = ":_bad_CRC__08x__should_be__08x";
    0x00019604 ldr r0, [r0]                                  |         r0 = *(0x19894);
    0x00019608 bl 0x10c7c                                    |         fprintf (r0, ":_bad_CRC__08x__should_be__08x", r2, r3)
                                                             | label_16:
    0x0001960c ldr r0, [r4]                                  |         r0 = *(r4);
    0x00019610 bl 0x10de4                                    |         free (r0);
    0x00019614 b 0x1925c                                     |         goto label_4;
                                                             |     }
    0x00019618 ldr r2, [sp, 0x38]                            |     r2 = var_38h;
    0x0001961c ldr r1, [r4, 0x28]                            |     r1 = *((r4 + 0x28));
    0x00019620 lsr r3, r2, 0x18                              |     r3 = r2 >> 0x18;
    0x00019624 orr r0, r3, r2, lsl 24                        |     r0 = r3 | (r2 << 24);
    0x00019628 lsr r3, r2, 8                                 |     r3 = r2 >> 8;
    0x0001962c and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x00019630 lsl r2, r2, 8                                 |     r2 <<= 8;
    0x00019634 orr r3, r0, r3                                |     r3 = r0 | r3;
    0x00019638 and r2, r2, 0xff0000                          |     r2 &= 0xff0000;
    0x0001963c cmn r1, 1                                     |     
    0x00019640 orr r2, r3, r2                                |     r2 = r3 | r2;
                                                             |     if (r1 != 1) {
    0x00019644 bne 0x196fc                                   |         goto label_21;
                                                             |     }
    0x00019648 str r2, [r4, 0x28]                            |     *((r4 + 0x28)) = r2;
    0x0001964c ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x00019650 ldr r1, [r8, 0xe8]                            |     r1 = *((r8 + 0xe8));
    0x00019654 lsr r0, r3, 0x18                              |     r0 = r3 >> 0x18;
    0x00019658 lsl r2, r3, 8                                 |     r2 = r3 << 8;
    0x0001965c orr r0, r0, r3, lsl 24                        |     r0 |= (r3 << 24);
    0x00019660 and r2, r2, 0xff0000                          |     r2 &= 0xff0000;
    0x00019664 lsr r3, r3, 8                                 |     r3 >>= 8;
    0x00019668 orr r0, r0, r2                                |     r0 |= r2;
    0x0001966c and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x00019670 orr r0, r0, r3                                |     r0 |= r3;
    0x00019674 str r0, [r4, 0x2c]                            |     *((r4 + 0x2c)) = r0;
    0x00019678 bl 0x19ab0                                    |     fcn_00019ab0 (r0, r1);
    0x0001967c cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00019680 beq 0x197fc                                   |         goto label_22;
                                                             |     }
    0x00019684 cmp r6, 1                                     |     
                                                             |     if (r6 != 1) {
    0x00019688 bne 0x196e8                                   |         goto label_23;
                                                             |     }
    0x0001968c mov r0, 0xa                                   |     r0 = 0xa;
    0x00019690 bl 0x10b98                                    |     putchar (r0);
                                                             |     do {
                                                             | label_5:
    0x00019694 ldr r3, [r8, 0xe8]                            |         r3 = *((r8 + 0xe8));
    0x00019698 str r5, [sp]                                  |         *(sp) = r5;
    0x0001969c str r3, [sp, 4]                               |         var_4h = r3;
    0x000196a0 ldr r7, [pc, 0x1f0]                           |         r7 = *(0x19894);
    0x000196a4 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x000196a8 ldr r2, [pc, 0x1ec]                           |         r2 = stderr;
    0x000196ac ldr r1, [pc, 0x220]                           |         r1 = "_s:_error_:_erase_counter_in_EB__d_is__llu__while_this_program_expects_them_to_be_less_than__u";
                                                             | label_6:
    0x000196b0 ldr r0, [r7]                                  |         r0 = *(r7);
    0x000196b4 bl 0x10c7c                                    |         fprintf (r0, "_s:_error_:_erase_counter_in_EB__d_is__llu__while_this_program_expects_them_to_be_less_than__u", r2, r3, r4, r5)
    0x000196b8 mov r3, r5                                    |         r3 = r5;
    0x000196bc ldr r2, [pc, 0x1d8]                           |         r2 = stderr;
    0x000196c0 ldr r1, [pc, 0x210]                           |         r1 = "%s: warning!: bad data offset %d at eraseblock %d (nof multiple of min. I/O unit size %d)\n";
    0x000196c4 ldr r0, [r7]                                  |         r0 = *(r7);
    0x000196c8 bl 0x10c7c                                    |         fprintf (r0, "%s: warning!: bad data offset %d at eraseblock %d (nof multiple of min. I/O unit size %d)\n", r2, r3)
    0x000196cc ldr r3, [r4, 0x18]                            |         r3 = *((r4 + 0x18));
    0x000196d0 mvn r2, 1                                     |         r2 = ~1;
    0x000196d4 add r3, r3, 1                                 |         r3++;
    0x000196d8 str r3, [r4, 0x18]                            |         *((r4 + 0x18)) = r3;
    0x000196dc ldr r3, [r4]                                  |         r3 = *(r4);
    0x000196e0 str r2, [r3, r5, lsl 2]                       |         offset_3 = r5 << 2;
                                                             |         *((r3 + offset_3)) = r2;
    0x000196e4 b 0x1938c                                     |         goto label_3;
                                                             | label_23:
    0x000196e8 cmp r6, 2                                     |         
    0x000196ec bne 0x19694                                   |         
                                                             |     } while (r6 != 2);
    0x000196f0 ldr r0, [pc, 0x1e4]                           |     r0 = "_s:_warning_:_treat_eraseblock__d_as_corrupted";
    0x000196f4 bl 0x10c1c                                    |     puts ("_s:_warning_:_treat_eraseblock__d_as_corrupted");
    0x000196f8 b 0x19694                                     |     goto label_5;
                                                             | label_21:
    0x000196fc cmp r1, r2                                    |     
                                                             |     if (r1 == r2) {
    0x00019700 beq 0x19768                                   |         goto label_24;
                                                             |     }
    0x00019704 cmp r6, 1                                     |     
                                                             |     if (r6 != 1) {
    0x00019708 bne 0x19754                                   |         goto label_25;
                                                             |     }
    0x0001970c mov r0, 0xa                                   |     r0 = 0xa;
    0x00019710 bl 0x10b98                                    |     putchar (r0);
                                                             |     do {
                                                             | label_7:
    0x00019714 ldr r3, [sp, 0x38]                            |         r3 = var_38h;
    0x00019718 str r5, [sp, 4]                               |         var_4h = r5;
    0x0001971c lsr r2, r3, 0x18                              |         r2 = r3 >> 0x18;
    0x00019720 lsl r1, r3, 8                                 |         r1 = r3 << 8;
    0x00019724 orr r2, r2, r3, lsl 24                        |         r2 |= (r3 << 24);
    0x00019728 and r1, r1, 0xff0000                          |         r1 &= 0xff0000;
    0x0001972c lsr r3, r3, 8                                 |         r3 >>= 8;
    0x00019730 orr r2, r2, r1                                |         r2 |= r1;
    0x00019734 and r3, r3, 0xff00                            |         r3 &= 0xff00;
    0x00019738 orr r3, r2, r3                                |         r3 = r2 | r3;
    0x0001973c str r3, [sp]                                  |         *(sp) = r3;
    0x00019740 ldr r7, [pc, 0x150]                           |         r7 = *(0x19894);
    0x00019744 ldr r3, [r4, 0x28]                            |         r3 = *((r4 + 0x28));
    0x00019748 ldr r2, [pc, 0x14c]                           |         r2 = stderr;
    0x0001974c ldr r1, [pc, 0x18c]                           |         r1 = ":_corrupted_because_of_the_below";
    0x00019750 b 0x196b0                                     |         goto label_6;
                                                             | label_25:
    0x00019754 cmp r6, 2                                     |         
    0x00019758 bne 0x19714                                   |         
                                                             |     } while (r6 != 2);
    0x0001975c ldr r0, [pc, 0x178]                           |     r0 = "_s:_warning_:_treat_eraseblock__d_as_corrupted";
    0x00019760 bl 0x10c1c                                    |     puts ("_s:_warning_:_treat_eraseblock__d_as_corrupted");
    0x00019764 b 0x19714                                     |     goto label_7;
                                                             | label_24:
    0x00019768 ldr r3, [sp, 0x3c]                            |     r3 = var_3ch;
    0x0001976c lsr r2, r3, 0x18                              |     r2 = r3 >> 0x18;
    0x00019770 lsl r1, r3, 8                                 |     r1 = r3 << 8;
    0x00019774 orr r2, r2, r3, lsl 24                        |     r2 |= (r3 << 24);
    0x00019778 and r1, r1, 0xff0000                          |     r1 &= 0xff0000;
    0x0001977c lsr r3, r3, 8                                 |     r3 >>= 8;
    0x00019780 orr r2, r2, r1                                |     r2 |= r1;
    0x00019784 and r3, r3, 0xff00                            |     r3 &= 0xff00;
    0x00019788 orr r3, r2, r3                                |     r3 = r2 | r3;
    0x0001978c ldr r2, [r4, 0x2c]                            |     r2 = *((r4 + 0x2c));
    0x00019790 cmp r3, r2                                    |     
                                                             |     if (r3 == r2) {
    0x00019794 beq 0x197fc                                   |         goto label_22;
                                                             |     }
    0x00019798 cmp r6, 1                                     |     
                                                             |     if (r6 != 1) {
    0x0001979c bne 0x197e8                                   |         goto label_26;
                                                             |     }
    0x000197a0 mov r0, 0xa                                   |     r0 = 0xa;
    0x000197a4 bl 0x10b98                                    |     putchar (r0);
                                                             |     do {
                                                             | label_8:
    0x000197a8 ldr r3, [sp, 0x3c]                            |         r3 = var_3ch;
    0x000197ac str r5, [sp, 4]                               |         var_4h = r5;
    0x000197b0 lsr r2, r3, 0x18                              |         r2 = r3 >> 0x18;
    0x000197b4 lsl r1, r3, 8                                 |         r1 = r3 << 8;
    0x000197b8 orr r2, r2, r3, lsl 24                        |         r2 |= (r3 << 24);
    0x000197bc and r1, r1, 0xff0000                          |         r1 &= 0xff0000;
    0x000197c0 lsr r3, r3, 8                                 |         r3 >>= 8;
    0x000197c4 orr r2, r2, r1                                |         r2 |= r1;
    0x000197c8 and r3, r3, 0xff00                            |         r3 &= 0xff00;
    0x000197cc orr r3, r2, r3                                |         r3 = r2 | r3;
    0x000197d0 str r3, [sp]                                  |         *(sp) = r3;
    0x000197d4 ldr r7, [pc, 0xbc]                            |         r7 = *(0x19894);
    0x000197d8 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x000197dc ldr r2, [pc, 0xb8]                            |         r2 = stderr;
    0x000197e0 ldr r1, [pc, 0xfc]                            |         r1 = "_s:_warning_:_inconsistent_VID_header_offset:_was__d__but_is__d_in_eraseblock__d";
    0x000197e4 b 0x196b0                                     |         goto label_6;
                                                             | label_26:
    0x000197e8 cmp r6, 2                                     |         
    0x000197ec bne 0x197a8                                   |         
                                                             |     } while (r6 != 2);
    0x000197f0 ldr r0, [pc, 0xe4]                            |     r0 = "_s:_warning_:_treat_eraseblock__d_as_corrupted";
    0x000197f4 bl 0x10c1c                                    |     puts ("_s:_warning_:_treat_eraseblock__d_as_corrupted");
    0x000197f8 b 0x197a8                                     |     goto label_8;
                                                             | label_22:
    0x000197fc ldr r3, [r4, 0x10]                            |     r3 = *((r4 + 0x10));
    0x00019800 cmp r6, 2                                     |     
    0x00019804 add r3, r3, 1                                 |     r3++;
    0x00019808 str r3, [r4, 0x10]                            |     *((r4 + 0x10)) = r3;
    0x0001980c ldr r3, [r4]                                  |     r3 = *(r4);
    0x00019810 str sl, [r3, r5, lsl 2]                       |     offset_4 = r5 << 2;
                                                             |     *((r3 + offset_4)) = sl;
                                                             |     if (r6 != 2) {
    0x00019814 bne 0x1938c                                   |         goto label_3;
                                                             |     }
    0x00019818 mov r1, sl                                    |     r1 = sl;
    0x0001981c ldr r0, [pc, 0xc4]                            |     r0 = "_s:_warning_:_inconsistent_data_offset:_was__d__but_is__d_in_eraseblock__d";
    0x00019820 bl 0x10bbc                                    |     printf ("_s:_warning_:_inconsistent_data_offset:_was__d__but_is__d_in_eraseblock__d", r1);
    0x00019824 b 0x1938c                                     |     goto label_3;
                                                             |     do {
    0x00019828 ldr r2, [r4]                                  |         r2 = *(r4);
    0x0001982c ldr r2, [r2, r3, lsl 2]                       |         offset_5 = r3 << 2;
                                                             |         r2 = *((r2 + offset_5));
    0x00019830 cmp r2, 0                                     |         
                                                             |         if (r2 >= 0) {
    0x00019834 blt 0x19840                                   |             
    0x00019838 adds r0, r0, r2                               |             r0 += r2;
    0x0001983c adc r1, r1, 0                                 |             __asm ("adc r1, r1, 0");
                                                             |         }
    0x00019840 add r3, r3, 1                                 |         r3++;
                                                             | label_10:
    0x00019844 cmp r7, r3                                    |         
    0x00019848 bgt 0x19828                                   |         
                                                             |     } while (r7 > r3);
    0x0001984c mov r2, r5                                    |     r2 = r5;
    0x00019850 asr r3, r5, 0x1f                              |     r3 = r5 >> 0x1f;
    0x00019854 bl 0x19ba4                                    |     fcn_00019ba4 (r0, r1);
    0x00019858 strd r0, r1, [r4, 8]                          |     __asm ("strd r0, r1, [r4, 8]");
    0x0001985c b 0x192b4                                     |     goto label_9;
                                                             | label_14:
    0x00019860 mov r0, 0                                     |     r0 = 0;
    0x00019864 mov r1, 0                                     |     r1 = 0;
    0x00019868 mov r3, 0                                     |     r3 = 0;
    0x0001986c b 0x19844                                     |     goto label_10;
                                                             | label_19:
    0x00019870 ldr r3, [r4, 0x1c]                            |     r3 = *((r4 + 0x1c));
    0x00019874 mvn r2, 2                                     |     r2 = ~2;
    0x00019878 add r3, r3, 1                                 |     r3++;
    0x0001987c str r3, [r4, 0x1c]                            |     *((r4 + 0x1c)) = r3;
    0x00019880 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00019884 cmp r6, 2                                     |     
    0x00019888 str r2, [r3, r5, lsl 2]                       |     offset_6 = r5 << 2;
                                                             |     *((r3 + offset_6)) = r2;
                                                             |     if (r6 != 2) {
    0x0001988c bne 0x1938c                                   |         goto label_3;
                                                             |     }
    0x00019890 ldr r0, [pc, 0x54]                            |     r0 = ":_OK__erase_counter__u";
    0x00019894 b 0x1946c                                     |     goto label_11;
                                                             | }
    ; 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 @ 0x10e54 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) main ()                                          | int32_t main (int32_t argc, char ** argv) {
                                                             |     int32_t var_1e0h;
                                                             |     int32_t var_1dch;
                                                             |     int32_t var_1d8h;
                                                             |     int32_t var_1d4h;
                                                             |     int32_t fildes;
                                                             |     int32_t var_1cch;
                                                             |     int32_t var_1c8h;
                                                             |     int32_t var_1c4h;
                                                             |     int32_t var_1c0h;
                                                             |     int32_t var_1b4h;
                                                             |     int32_t var_1b0h;
                                                             |     int32_t var_1a4h;
                                                             |     int32_t var_1a0h;
                                                             |     int32_t var_190h;
                                                             |     int32_t var_18ch;
                                                             |     int32_t var_184h;
                                                             |     char * * endptr;
                                                             |     int32_t var_114h;
                                                             |     int32_t var_4ch;
                                                             |     int32_t var_44h;
                                                             |     int32_t var_40h;
                                                             |     int32_t var_3ch;
                                                             |     int32_t var_38h;
                                                             |     int32_t var_28h;
                                                             |     int32_t var_0h;
                                                             |     int32_t var_4h;
                                                             |     int32_t var_8h;
                                                             |     int32_t var_ch;
                                                             |     int32_t var_10h;
                                                             |     int32_t var_14h;
                                                             |     int8_t var_0h_3;
                                                             |     void * buf;
                                                             |     int8_t var_1h;
                                                             |     int8_t var_2h;
                                                             |     int8_t var_3h;
                                                             |     int32_t var_0h_2;
                                                             |     int8_t var_8h_2;
                                                             |     int8_t var_9h;
                                                             |     int8_t var_ah;
                                                             |     int8_t var_bh;
                                                             |     int8_t var_dh;
                                                             |     int8_t var_eh;
                                                             |     int8_t var_fh;
                                                             |     int8_t var_19h;
                                                             |     int8_t var_1ah;
                                                             |     int8_t var_1bh;
                                                             |     int8_t var_3dh;
                                                             |     int8_t var_3eh;
                                                             |     int8_t var_3fh;
                                                             |     int32_t var_sp_28h;
                                                             |     int32_t var_sp_4ch;
                                                             |     int32_t var_20h_2;
                                                             |     int32_t var_20h;
                                                             |     r0 = argc;
                                                             |     r1 = argv;
    0x00010e54 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00010e58 ldr r4, [pc, 0xef0]                           |     r4 = *(0x11d4c);
    0x00010e5c add fp, sp, 0x20                              |     
    0x00010e60 sub sp, sp, 0x1e4                             |     
    0x00010e64 mov sb, r1                                    |     sb = r1;
    0x00010e68 mov r8, r0                                    |     r8 = r0;
    0x00010e6c bl 0x185d8                                    |     fcn_000185d8 ();
    0x00010e70 bl 0x10ca0                                    |     rand ();
    0x00010e74 ldr sl, [pc, 0xed8]                           |     sl = "sub_page_size";
    0x00010e78 ldr r5, [pc, 0xed8]                           |     r5 = "sub_page_size";
    0x00010e7c str r0, [r4, 0x14]                            |     *((r4 + 0x14)) = r0;
                                                             | label_1:
    0x00010e80 mov r7, 0                                     |     r7 = 0;
    0x00010e84 str r7, [fp, -0x18c]                          |     var_18ch = r7;
    0x00010e88 mov r3, sl                                    |     r3 = sl;
    0x00010e8c str r7, [sp]                                  |     *(sp) = r7;
    0x00010e90 ldr r2, [pc, 0xec4]                           |     r2 = optarg;
    0x00010e94 mov r1, sb                                    |     r1 = sb;
    0x00010e98 mov r0, r8                                    |     r0 = r8;
    0x00010e9c bl 0x10be0                                    |     r0 = getopt_long ();
    0x00010ea0 cmn r0, 1                                     |     
    0x00010ea4 mov r6, r0                                    |     r6 = r0;
                                                             |     if (r0 == 1) {
    0x00010ea8 beq 0x111ec                                   |         goto label_26;
                                                             |     }
    0x00010eac cmp r0, 0x65                                  |     
                                                             |     if (r0 == 0x65) {
    0x00010eb0 beq 0x1102c                                   |         goto label_27;
                                                             |     }
                                                             |     if (r0 > 0x65) {
    0x00010eb4 bgt 0x10f28                                   |         goto label_28;
                                                             |     }
    0x00010eb8 cmp r0, 0x4f                                  |     
                                                             |     if (r0 == 0x4f) {
    0x00010ebc beq 0x10fec                                   |         goto label_29;
                                                             |     }
                                                             |     if (r0 > 0x4f) {
    0x00010ec0 bgt 0x10ee8                                   |         goto label_30;
                                                             |     }
    0x00010ec4 cmp r0, 0x3a                                  |     
                                                             |     if (r0 == 0x3a) {
    0x00010ec8 beq 0x111e0                                   |         goto label_31;
                                                             |     }
    0x00010ecc cmp r0, 0x3f                                  |     
                                                             |     if (r0 == 0x3f) {
    0x00010ed0 beq 0x111bc                                   |         goto label_32;
                                                             |     }
                                                             |     do {
                                                             | label_0:
    0x00010ed4 ldr r3, [pc, 0xe84]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00010ed8 ldr r0, [pc, 0xe84]                           |         r0 = stderr;
    0x00010edc ldr r1, [r3]                                  |         r1 = "nh_Vyqve:x:s:O:f:S:";
    0x00010ee0 bl 0x10da8                                    |         fputs (r0, "nh_Vyqve:x:s:O:f:S:");
    0x00010ee4 b 0x10fa8                                     |         goto label_2;
                                                             | label_30:
    0x00010ee8 cmp r0, 0x53                                  |         
                                                             |         if (r0 == 0x53) {
    0x00010eec beq 0x11100                                   |             goto label_33;
                                                             |         }
    0x00010ef0 cmp r0, 0x56                                  |         
                                                             |         if (r0 == 0x56) {
    0x00010ef4 beq 0x11180                                   |             goto label_34;
                                                             |         }
    0x00010ef8 cmp r0, 0x51                                  |         
    0x00010efc bne 0x10ed4                                   |         
                                                             |     } while (r0 != 0x51);
    0x00010f00 sub r1, fp, 0x18c                             |     r1 -= var_18ch;
    0x00010f04 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00010f08 bl 0x12570                                    |     fcn_00012570 (r0, r1);
    0x00010f0c ldr r3, [fp, -0x18c]                          |     r3 = var_18ch;
    0x00010f10 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00010f14 beq 0x11178                                   |         goto label_35;
                                                             |     }
    0x00010f18 ldr r3, [r5]                                  |     r3 = *(r5);
    0x00010f1c ldr r2, [pc, 0xf78]                           |     r2 = stderr;
    0x00010f20 ldr r1, [pc, 0xe40]                           |     r1 = "Use -h for help\n";
    0x00010f24 b 0x10f9c                                     |     goto label_3;
                                                             | label_28:
    0x00010f28 cmp r0, 0x73                                  |     
                                                             |     if (r0 == 0x73) {
    0x00010f2c beq 0x10f7c                                   |         goto label_36;
                                                             |     }
                                                             |     if (r0 > 0x73) {
    0x00010f30 bgt 0x10f58                                   |         goto label_37;
                                                             |     }
    0x00010f34 cmp r0, 0x68                                  |     
                                                             |     if (r0 == 0x68) {
    0x00010f38 beq 0x11198                                   |         goto label_38;
                                                             |     }
    0x00010f3c cmp r0, 0x71                                  |     
                                                             |     if (r0 == 0x71) {
    0x00010f40 beq 0x11134                                   |         goto label_39;
                                                             |     }
    0x00010f44 cmp r0, 0x66                                  |     
                                                             |     if (r0 != 0x66) {
    0x00010f48 bne 0x10ed4                                   |         goto label_0;
                                                             |     }
    0x00010f4c ldr r3, [r5]                                  |     r3 = *(r5);
    0x00010f50 str r3, [r4, 0x28]                            |     *((r4 + 0x28)) = r3;
    0x00010f54 b 0x10e80                                     |     goto label_1;
                                                             | label_37:
    0x00010f58 cmp r0, 0x78                                  |     
                                                             |     if (r0 == 0x78) {
    0x00010f5c beq 0x11140                                   |         goto label_40;
                                                             |     }
    0x00010f60 cmp r0, 0x79                                  |     
                                                             |     if (r0 == 0x79) {
    0x00010f64 beq 0x11128                                   |         goto label_41;
                                                             |     }
    0x00010f68 cmp r0, 0x76                                  |     
                                                             |     if (r0 != 0x76) {
    0x00010f6c bne 0x10ed4                                   |         goto label_0;
                                                             |     }
    0x00010f70 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x00010f74 orr r3, r3, 4                                 |     r3 |= 4;
    0x00010f78 b 0x110f8                                     |     goto label_4;
                                                             | label_36:
    0x00010f7c ldr r0, [r5]                                  |     r0 = *(r5);
    0x00010f80 bl 0x18360                                    |     r0 = fcn_00018360 (r0);
    0x00010f84 cmp r0, 0                                     |     
    0x00010f88 str r0, [r4, 8]                               |     *((r4 + 8)) = r0;
                                                             |     if (r0 <= 0) {
    0x00010f8c bgt 0x10fb8                                   |         
    0x00010f90 ldr r3, [r5]                                  |         r3 = *(r5);
    0x00010f94 ldr r2, [pc, 0xf00]                           |         r2 = stderr;
    0x00010f98 ldr r1, [pc, 0xdcc]                           |         r1 = "_s:_error_:_bad_UBI_image_sequence_number:___s_";
                                                             | label_3:
    0x00010f9c ldr r0, [pc, 0xdbc]                           |         
    0x00010fa0 ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00010fa4 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_bad_UBI_image_sequence_number:___s_", r2, r3)
                                                             | label_2:
    0x00010fa8 mvn r6, 0                                     |         r6 = ~0;
                                                             | label_6:
    0x00010fac mov r0, r6                                    |         r0 = r6;
    0x00010fb0 sub sp, fp, 0x20                              |         
    0x00010fb4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |         
                                                             |     }
    0x00010fb8 asr r7, r0, 0x1f                              |     r7 = r0 >> 0x1f;
    0x00010fbc subs r2, r0, 1                                |     r2 = r0 - 1;
    0x00010fc0 sbc r3, r7, 0                                 |     __asm ("sbc r3, r7, 0");
    0x00010fc4 and r0, r0, r2                                |     r0 &= r2;
    0x00010fc8 and r1, r7, r3                                |     r1 = r7 & r3;
    0x00010fcc orrs r3, r0, r1                               |     r3 = r0 | r1;
                                                             |     if (r3 == r0) {
    0x00010fd0 beq 0x10e80                                   |         goto label_1;
                                                             |     }
    0x00010fd4 ldr r2, [pc, 0xec0]                           |     r2 = stderr;
    0x00010fd8 ldr r1, [pc, 0xd90]                           |     r1 = "_s:_error_:_bad_sub_page_size:___s_";
                                                             | label_5:
    0x00010fdc ldr r3, [pc, 0xd7c]                           |     r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00010fe0 ldr r0, [r3]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00010fe4 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_bad_sub_page_size:___s_", r2, "nh_Vyqve:x:s:O:f:S:")
    0x00010fe8 b 0x10fa8                                     |     goto label_2;
                                                             | label_29:
    0x00010fec sub r1, fp, 0x18c                             |     r1 -= var_18ch;
    0x00010ff0 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00010ff4 bl 0x12570                                    |     fcn_00012570 (r0, r1);
    0x00010ff8 ldr r3, [fp, -0x18c]                          |     r3 = var_18ch;
    0x00010ffc cmp r0, 0                                     |     
    0x00011000 str r0, [r4, 0xc]                             |     *((r4 + 0xc)) = r0;
                                                             |     if (r0 <= 0) {
    0x00011004 movgt r0, 0                                   |         r0 = 0;
                                                             |     }
                                                             |     if (r0 > 0) {
    0x00011008 movle r0, 1                                   |         r0 = 1;
                                                             |     }
    0x0001100c cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00011010 movne r0, 1                                   |         r0 = 1;
                                                             |     }
    0x00011014 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00011018 beq 0x10e80                                   |         goto label_1;
                                                             |     }
    0x0001101c ldr r3, [r5]                                  |     r3 = *(r5);
    0x00011020 ldr r2, [pc, 0xe74]                           |     r2 = stderr;
    0x00011024 ldr r1, [pc, 0xd48]                           |     r1 = "%s: error!: sub-page size should be power of 2\n";
    0x00011028 b 0x10f9c                                     |     goto label_3;
                                                             | label_27:
    0x0001102c ldr r3, [r5]                                  |     r3 = *(r5);
    0x00011030 mov r2, r7                                    |     r2 = r7;
    0x00011034 mov r0, r3                                    |     r0 = r3;
    0x00011038 sub r1, fp, 0x124                             |     r1 -= endptr;
    0x0001103c str r3, [fp, -0x1c8]                          |     var_1c8h = r3;
    0x00011040 bl 0x10d00                                    |     strtoull (r0, r1, r2);
    0x00011044 ldr r3, [fp, -0x1c8]                          |     r3 = var_1c8h;
    0x00011048 ldrb r2, [r3]                                 |     r2 = *(r3);
    0x0001104c cmp r2, 0                                     |     
    0x00011050 mov r6, r0                                    |     r6 = r0;
    0x00011054 mov r7, r1                                    |     r7 = r1;
                                                             |     if (r2 != 0) {
    0x00011058 beq 0x1106c                                   |         
    0x0001105c ldr r2, [fp, -0x124]                          |         r2 = endptr;
    0x00011060 ldrb r2, [r2]                                 |         r2 = *(r2);
    0x00011064 cmp r2, 0                                     |         
                                                             |         if (r2 == 0) {
    0x00011068 beq 0x11090                                   |             goto label_42;
                                                             |         }
                                                             |     }
    0x0001106c ldr r0, [pc, 0xcec]                           |     
    0x00011070 str r3, [sp]                                  |     *(sp) = r3;
    0x00011074 ldr r2, [pc, 0xe20]                           |     r2 = stderr;
    0x00011078 ldr r3, [pc, 0xcf8]                           |     r3 = "%s: error!: bad VID header offset: \"%s\"\n";
    0x0001107c ldr r1, [pc, 0xcf8]                           |     r1 = "strtoull";
    0x00011080 ldr r0, [r0]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011084 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "strtoull", r2, r3)
    0x00011088 mov r3, 1                                     |     r3 = 1;
    0x0001108c str r3, [fp, -0x18c]                          |     var_18ch = r3;
                                                             | label_42:
    0x00011090 ldr r3, [fp, -0x18c]                          |     r3 = var_18ch;
    0x00011094 strd r6, r7, [r4, 0x20]                       |     __asm ("strd r6, r7, [r4, 0x20]");
    0x00011098 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0001109c lsreq r3, r7, 0x1f                            |         r3 = r7 >> 0x1f;
                                                             |     }
                                                             |     if (r3 == 0) {
    0x000110a0 movne r3, 1                                   |         r3 = 1;
                                                             |     }
    0x000110a4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000110a8 ldrne r3, [r5]                                |         r3 = *(r5);
                                                             |     }
                                                             |     if (r3 == 0) {
    0x000110ac ldrne r2, [pc, 0xde8]                         |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r3 != 0) {
    0x000110b0 ldrne r1, [pc, 0xcc8]                         |         r1 = "%s: error!: bad erase counter value: \"%s\"\n";
                                                             |         goto label_43;
                                                             |     }
                                                             |     if (r3 != 0) {
                                                             | label_43:
    0x000110b4 bne 0x10f9c                                   |         goto label_3;
                                                             |     }
    0x000110b8 mvn r2, 0x80000001                            |     r2 = ~0x80000001;
    0x000110bc mov r3, 0                                     |     r3 = 0;
    0x000110c0 cmp r2, r6                                    |     
    0x000110c4 sbcs r3, r3, r7                               |     __asm ("sbcs r3, r3, r7");
                                                             |     if (r2 < r6) {
    0x000110c8 bge 0x110f0                                   |         
    0x000110cc mvn r3, 0x80000000                            |         r3 = ~0x80000000;
    0x000110d0 str r3, [sp, 8]                               |         var_8h = r3;
    0x000110d4 ldr r3, [pc, 0xc84]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x000110d8 strd r6, r7, [sp]                             |         __asm ("strd r6, r7, [sp]");
    0x000110dc ldr r2, [pc, 0xdb8]                           |         r2 = stderr;
    0x000110e0 ldr r1, [pc, 0xc9c]                           |         r1 = "%s: error!: bad erase counter value: \"%s\"\n";
    0x000110e4 ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000110e8 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: bad erase counter value: \"%s\"\n", r2, r3, r4, r5, r6)
    0x000110ec b 0x10fa8                                     |         goto label_2;
                                                             |     }
    0x000110f0 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x000110f4 orr r3, r3, 8                                 |     r3 |= 8;
                                                             | label_4:
    0x000110f8 strb r3, [r4]                                 |     *(r4) = r3;
    0x000110fc b 0x10e80                                     |     goto label_1;
                                                             | label_33:
    0x00011100 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00011104 bl 0x18360                                    |     r0 = fcn_00018360 (r0);
    0x00011108 cmp r0, 1                                     |     
    0x0001110c sbcs r3, r1, 0                                |     __asm ("sbcs r3, r1, 0");
    0x00011110 strd r0, r1, [r4, 0x18]                       |     __asm ("strd r0, r1, [r4, 0x18]");
                                                             |     if (r0 >= 1) {
    0x00011114 bge 0x10e80                                   |         goto label_1;
                                                             |     }
    0x00011118 ldr r3, [r5]                                  |     r3 = *(r5);
    0x0001111c ldr r2, [pc, 0xd78]                           |     r2 = stderr;
    0x00011120 ldr r1, [pc, 0xc60]                           |     r1 = "_s:_error_:_too_high_erase__llu__counter__max_is__u";
    0x00011124 b 0x10f9c                                     |     goto label_3;
                                                             | label_41:
    0x00011128 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x0001112c orr r3, r3, 1                                 |     r3 |= 1;
    0x00011130 b 0x110f8                                     |     goto label_4;
                                                             | label_39:
    0x00011134 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x00011138 orr r3, r3, 2                                 |     r3 |= 2;
    0x0001113c b 0x110f8                                     |     goto label_4;
                                                             | label_40:
    0x00011140 sub r1, fp, 0x18c                             |     r1 -= var_18ch;
    0x00011144 ldr r0, [r5]                                  |     r0 = *(r5);
    0x00011148 bl 0x12570                                    |     fcn_00012570 (r0, r1);
    0x0001114c ldr r3, [fp, -0x18c]                          |     r3 = var_18ch;
    0x00011150 cmp r3, 0                                     |     
    0x00011154 str r0, [r4, 0x10]                            |     *((r4 + 0x10)) = r0;
                                                             |     if (r3 != 0) {
    0x00011158 lsreq r0, r0, 0x1f                            |         r0 >>= 0x1f;
                                                             |     }
                                                             |     if (r3 == 0) {
    0x0001115c movne r0, 1                                   |         r0 = 1;
                                                             |     }
    0x00011160 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00011164 beq 0x10e80                                   |         goto label_1;
                                                             |     }
    0x00011168 ldr r3, [r5]                                  |     r3 = *(r5);
    0x0001116c ldr r2, [pc, 0xd28]                           |     r2 = stderr;
    0x00011170 ldr r1, [pc, 0xc14]                           |     r1 = "%s: error!: bad image-size: \"%s\"\n";
    0x00011174 b 0x10f9c                                     |     goto label_3;
                                                             | label_35:
    0x00011178 str r0, [r4, 0x14]                            |     *((r4 + 0x14)) = r0;
    0x0001117c b 0x10e80                                     |     goto label_1;
                                                             | label_34:
    0x00011180 ldr r2, [pc, 0xc08]                           |     r2 = "%s: error!: bad UBI version: \"%s\"\n";
    0x00011184 ldr r1, [pc, 0xd10]                           |     r1 = stderr;
    0x00011188 ldr r0, [pc, 0xc04]                           |     r0 = "2.1.0";
    0x0001118c bl 0x10bbc                                    |     printf ("2.1.0", r1, "%s: error!: bad UBI version: \"%s\"\n");
                                                             |     do {
    0x00011190 mov r0, r7                                    |         r0 = r7;
    0x00011194 bl 0x10d84                                    |         exit (r0);
                                                             | label_38:
    0x00011198 ldr r1, [pc, 0xbf8]                           |         r1 = "%s (mtd-utils) %s\n";
    0x0001119c ldr r0, [pc, 0xbf8]                           |         r0 = "ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images";
    0x000111a0 bl 0x10bbc                                    |         printf ("ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images", "%s (mtd-utils) %s\n");
    0x000111a4 ldr r1, [pc, 0xbf4]                           |         r1 = "_s";
    0x000111a8 ldr r0, [pc, 0xbec]                           |         r0 = "ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images";
    0x000111ac bl 0x10bbc                                    |         printf ("ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images", "_s");
    0x000111b0 ldr r0, [pc, 0xbec]                           |         r0 = "Usage:_ubiformat__MTD_device_node_file_name____s__bytes_____O__offs_____n___Q__num_____f__file_____S__bytes_____e__value_____x__num_____y____q____v____h____sub_page_size_bytes______vid_hdr_offset_offs______no_volume_table____flash_image_fil";
    0x000111b4 bl 0x10c1c                                    |         puts ("Usage:_ubiformat__MTD_device_node_file_name____s__bytes_____O__offs_____n___Q__num_____f__file_____S__bytes_____e__value_____x__num_____y____q____v____h____sub_page_size_bytes______vid_hdr_offset_offs______no_volume_table____flash_image_fil");
    0x000111b8 b 0x11190                                     |         
                                                             |     } while (1);
                                                             | label_32:
    0x000111bc ldr r1, [pc, 0xbd4]                           |     r1 = "%s (mtd-utils) %s\n";
    0x000111c0 ldr r0, [pc, 0xbd4]                           |     r0 = "ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images";
    0x000111c4 bl 0x10bbc                                    |     printf ("ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images", "%s (mtd-utils) %s\n");
    0x000111c8 ldr r1, [pc, 0xbd0]                           |     r1 = "_s";
    0x000111cc ldr r0, [pc, 0xbc8]                           |     r0 = "ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images";
    0x000111d0 bl 0x10bbc                                    |     printf ("ubiformat_version_2.1.0___a_tool_to_format_MTD_devices_and_flash_UBI_images", "_s");
    0x000111d4 ldr r0, [pc, 0xbc8]                           |     r0 = "Usage:_ubiformat__MTD_device_node_file_name____s__bytes_____O__offs_____n___Q__num_____f__file_____S__bytes_____e__value_____x__num_____y____q____v____h____sub_page_size_bytes______vid_hdr_offset_offs______no_volume_table____flash_image_fil";
    0x000111d8 bl 0x10c1c                                    |     puts ("Usage:_ubiformat__MTD_device_node_file_name____s__bytes_____O__offs_____n___Q__num_____f__file_____S__bytes_____e__value_____x__num_____y____q____v____h____sub_page_size_bytes______vid_hdr_offset_offs______no_volume_table____flash_image_fil");
    0x000111dc b 0x10fa8                                     |     goto label_2;
                                                             | label_31:
    0x000111e0 ldr r2, [pc, 0xcb4]                           |     r2 = stderr;
    0x000111e4 ldr r1, [pc, 0xbbc]                           |     r1 = "_s____sub_page_size_bytes___minimum_input_output_unit_used_for_UBI_____________________________headers__e.g._sub_page_size_in_case_of_NAND_____________________________flash__equivalent_to_the_minimum_input_output_____________________________unit_size_";
    0x000111e8 b 0x10fdc                                     |     goto label_5;
                                                             | label_26:
    0x000111ec ldrb r3, [r4]                                 |     r3 = *(r4);
    0x000111f0 and r3, r3, 6                                 |     r3 &= 6;
    0x000111f4 cmp r3, 6                                     |     
                                                             |     if (r3 != 6) {
    0x000111f8 bne 0x11214                                   |         goto label_44;
                                                             |     }
    0x000111fc ldr r2, [pc, 0xc98]                           |     r2 = stderr;
    0x00011200 ldr r1, [pc, 0xba4]                           |     r1 = "%s: error!: parameter is missing\n";
                                                             |     do {
                                                             | label_7:
    0x00011204 ldr r3, [pc, 0xb54]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00011208 ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x0001120c bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: parameter is missing\n", r2, "nh_Vyqve:x:s:O:f:S:")
    0x00011210 b 0x10fac                                     |         goto label_6;
                                                             | label_44:
    0x00011214 ldr r3, [pc, 0xb94]                           |         
    0x00011218 ldr r3, [r3]                                  |         r3 = "_s:_error_:_using___q__and___v__at_the_same_time_does_not_make_sense";
    0x0001121c cmp r8, r3                                    |         
                                                             |         if (r8 != r3) {
    0x00011220 ldreq r2, [pc, 0xc74]                         |             r2 = "ubiformat";
                                                             |         }
                                                             |         if (r8 != r3) {
    0x00011224 ldreq r1, [pc, 0xb88]                         |             r1 = "_s:_error_:_MTD_device_name_was_not_specified__use__h_for_help_";
                                                             |         }
    0x00011228 beq 0x11204                                   |         
                                                             |     } while (r8 == r3);
    0x0001122c sub r8, r8, 1                                 |     r8--;
    0x00011230 cmp r3, r8                                    |     
                                                             |     if (r3 == r8) {
    0x00011234 ldrne r2, [pc, 0xc60]                         |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r3 != r8) {
    0x00011238 ldrne r1, [pc, 0xb78]                         |         r1 = "%s: error!: more then one MTD device specified (use -h for help)\n";
                                                             |         goto label_45;
                                                             |     }
                                                             |     if (r3 != r8) {
                                                             | label_45:
    0x0001123c bne 0x11204                                   |         goto label_7;
                                                             |     }
    0x00011240 ldr r3, [sb, r3, lsl 2]                       |     offset_0 = r3 << 2;
                                                             |     r3 = *((sb + offset_0));
    0x00011244 str r3, [r4, 0x2c]                            |     *((r4 + 0x2c)) = r3;
    0x00011248 bl 0x16bb4                                    |     r0 = fcn_00016bb4 ();
    0x0001124c subs r3, r0, 0                                |     r3 = r0 - 0;
    0x00011250 str r3, [fp, -0x1c8]                          |     var_1c8h = r3;
                                                             |     if (r3 != r0) {
    0x00011254 ldreq r2, [pc, 0xc40]                         |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r3 == r0) {
    0x00011258 ldreq r1, [pc, 0xb5c]                         |         r1 = "%s: error!: MTD subsystem is not present\n";
                                                             |         goto label_46;
                                                             |     }
                                                             |     if (r3 == r0) {
                                                             | label_46:
    0x0001125c beq 0x11204                                   |         goto label_7;
                                                             |     }
    0x00011260 sub r1, fp, 0x1c0                             |     r1 -= var_1c0h;
    0x00011264 bl 0x16e90                                    |     r0 = fcn_00016e90 (r0, r1);
    0x00011268 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0001126c beq 0x112c0                                   |         goto label_47;
                                                             |     }
    0x00011270 bl 0x10d78                                    |     errno_location ();
    0x00011274 ldr r5, [pc, 0xae4]                           |     
    0x00011278 ldr r2, [pc, 0xc1c]                           |     r2 = stderr;
    0x0001127c ldr r1, [pc, 0xb3c]                           |     r1 = "%s: error!: MTD subsystem is not present\n";
    0x00011280 ldr r4, [r0]                                  |     r4 = *(r0);
    0x00011284 ldr r0, [r5]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011288 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: MTD subsystem is not present\n", r2, r3, r4, "nh_Vyqve:x:s:O:f:S:")
    0x0001128c mov r0, r4                                    |     r0 = r4;
    0x00011290 ldr r5, [r5]                                  |     r5 = "nh_Vyqve:x:s:O:f:S:";
    0x00011294 bl 0x10bc8                                    |     strerror (r0);
    0x00011298 ldr r3, [pc, 0xc04]                           |     r3 = "%s: error!: cannot write eraseblock %d\n";
    0x0001129c ldr r1, [pc, 0xc04]                           |     r1 = *(0x11ea4);
    0x000112a0 mov r2, 0xb                                   |     r2 = 0xb;
    0x000112a4 str r4, [sp]                                  |     *(sp) = r4;
    0x000112a8 str r0, [sp, 4]                               |     var_4h = r0;
    0x000112ac mov r0, r5                                    |     r0 = r5;
                                                             |     do {
    0x000112b0 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot write eraseblock %d\n", r4)
                                                             | label_8:
    0x000112b4 ldr r0, [fp, -0x1c8]                          |         r0 = var_1c8h;
    0x000112b8 bl 0x16b38                                    |         fcn_00016b38 (r0);
    0x000112bc b 0x10fac                                     |         goto label_6;
                                                             | label_47:
    0x000112c0 sub r2, fp, 0x124                             |         r2 -= endptr;
    0x000112c4 ldr r1, [r4, 0x2c]                            |         r1 = *((r4 + 0x2c));
    0x000112c8 ldr r0, [fp, -0x1c8]                          |         r0 = var_1c8h;
    0x000112cc bl 0x17464                                    |         r0 = fcn_00017464 (r0, r1);
    0x000112d0 subs r5, r0, 0                                |         r5 = r0 - 0;
                                                             |         if (r5 == r0) {
    0x000112d4 beq 0x11320                                   |             goto label_48;
                                                             |         }
    0x000112d8 bl 0x10d78                                    |         errno_location ();
    0x000112dc ldr r7, [pc, 0xa7c]                           |         r7 = "nh_Vyqve:x:s:O:f:S:";
    0x000112e0 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x000112e4 ldr r2, [pc, 0xbb0]                           |         r2 = stderr;
    0x000112e8 ldr r1, [pc, 0xad4]                           |         r1 = "%s: error!: cannot get MTD information\n";
    0x000112ec ldr r5, [r0]                                  |         r5 = *(r0);
                                                             | label_11:
    0x000112f0 ldr r0, [r7]                                  |         r0 = *(r7);
    0x000112f4 bl 0x10c7c                                    |         fprintf (r0, "%s: error!: cannot get MTD information\n", r2, r3, r4, r5)
    0x000112f8 mov r0, r5                                    |         r0 = r5;
    0x000112fc ldr r4, [r7]                                  |         r4 = *(r7);
    0x00011300 bl 0x10bc8                                    |         strerror (r0);
    0x00011304 str r5, [sp]                                  |         *(sp) = r5;
    0x00011308 ldr r3, [pc, 0xb94]                           |         r3 = "%s: error!: cannot write eraseblock %d\n";
    0x0001130c mov r2, 0xb                                   |         r2 = 0xb;
    0x00011310 ldr r1, [pc, 0xb90]                           |         r1 = *(0x11ea4);
    0x00011314 str r0, [sp, 4]                               |         var_4h = r0;
    0x00011318 mov r0, r4                                    |         r0 = r4;
    0x0001131c b 0x112b0                                     |         
                                                             |     } while (1);
                                                             | label_48:
    0x00011320 ldr ip, [fp, -0x3c]                           |     ip = var_3ch;
    0x00011324 mov r0, ip                                    |     r0 = ip;
    0x00011328 asr r1, ip, 0x1f                              |     r1 = ip >> 0x1f;
    0x0001132c orrs r3, r0, r1                               |     r3 = r0 | r1;
                                                             |     if (r3 != r0) {
    0x00011330 beq 0x1134c                                   |         
    0x00011334 subs r8, ip, 1                                |         r8 = ip - 1;
    0x00011338 sbc sb, r1, 0                                 |         __asm ("sbc sb, r1, 0");
    0x0001133c and r2, r8, ip                                |         r2 = r8 & ip;
    0x00011340 and r3, sb, r1                                |         r3 = sb & r1;
    0x00011344 orrs r3, r2, r3                               |         r3 = r2 | r3;
                                                             |         if (r3 == r2) {
    0x00011348 beq 0x11368                                   |             goto label_49;
                                                             |         }
                                                             |     }
    0x0001134c ldr r0, [pc, 0xa0c]                           |     
    0x00011350 mov r3, ip                                    |     r3 = ip;
    0x00011354 ldr r2, [pc, 0xb40]                           |     r2 = stderr;
    0x00011358 ldr r1, [pc, 0xa68]                           |     r1 = "%s: error!: cannot get information about \"%s\"\n";
    0x0001135c ldr r0, [r0]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011360 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: cannot get information about \"%s\"\n", r2, r3)
    0x00011364 b 0x112b4                                     |     goto label_8;
                                                             | label_49:
    0x00011368 ldrb r2, [fp, -0x1b4]                         |     r2 = var_1b4h;
    0x0001136c ldr r3, [r4, 8]                               |     r3 = *((r4 + 8));
    0x00011370 tst r2, 1                                     |     
                                                             |     if ((r2 & 1) != 0) {
    0x00011374 bne 0x113d8                                   |         goto label_50;
                                                             |     }
    0x00011378 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0001137c bne 0x113ec                                   |         goto label_51;
                                                             |     }
    0x00011380 ldr r3, [pc, 0x9d8]                           |     r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00011384 ldr r2, [pc, 0xb10]                           |     r2 = stderr;
    0x00011388 ldr r1, [pc, 0xa3c]                           |     r1 = "_s:_error_:_min._I_O_size_is__d__but_should_be_power_of_2";
    0x0001138c ldr r0, [r3]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011390 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_min._I_O_size_is__d__but_should_be_power_of_2", r2, "nh_Vyqve:x:s:O:f:S:")
    0x00011394 ldr r2, [fp, -0x38]                           |     r2 = var_38h;
    0x00011398 ldr r1, [pc, 0xafc]                           |     r1 = stderr;
    0x0001139c ldr r0, [pc, 0xa2c]                           |     r0 = "%s: warning!: your MTD system is old and it is impossible to detect sub-page size. Use -s to get rid of this warning\n";
    0x000113a0 bl 0x10bbc                                    |     printf ("%s: warning!: your MTD system is old and it is impossible to detect sub-page size. Use -s to get rid of this warning\n", r1, r2);
                                                             |     do {
                                                             | label_9:
    0x000113a4 ldr r3, [r4, 4]                               |         r3 = *((r4 + 4));
    0x000113a8 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x000113ac beq 0x11410                                   |             goto label_52;
                                                             |         }
    0x000113b0 ldr r1, [r4, 8]                               |         r1 = *((r4 + 8));
    0x000113b4 ldr r0, [fp, -0x3c]                           |         r0 = var_3ch;
    0x000113b8 cmp r1, r0                                    |         
                                                             |         if (r1 <= r0) {
    0x000113bc ble 0x113fc                                   |             goto label_53;
                                                             |         }
    0x000113c0 ldr r2, [pc, 0xad4]                           |         r2 = stderr;
    0x000113c4 ldr r1, [pc, 0xa08]                           |         r1 = "%s: assume sub-page to be %d\n";
                                                             | label_10:
    0x000113c8 ldr r3, [pc, 0x990]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x000113cc ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000113d0 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: assume sub-page to be %d\n", r2, "nh_Vyqve:x:s:O:f:S:")
    0x000113d4 b 0x112b4                                     |         goto label_8;
                                                             | label_50:
    0x000113d8 cmp r3, 0                                     |         
    0x000113dc beq 0x113a4                                   |         
                                                             |     } while (r3 == 0);
    0x000113e0 ldr r2, [fp, -0x38]                           |     r2 = var_38h;
    0x000113e4 cmp r2, r3                                    |     
                                                             |     if (r2 == r3) {
    0x000113e8 beq 0x113a4                                   |         goto label_9;
                                                             |     }
                                                             | label_51:
    0x000113ec str r3, [fp, -0x38]                           |     var_38h = r3;
    0x000113f0 mov r3, 1                                     |     r3 = 1;
    0x000113f4 str r3, [r4, 4]                               |     *((r4 + 4)) = r3;
    0x000113f8 b 0x113a4                                     |     goto label_9;
                                                             | label_53:
    0x000113fc bl 0x19ab0                                    |     fcn_00019ab0 (r0, r1);
    0x00011400 cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00011404 ldrne r2, [pc, 0xa90]                         |         r2 = "ubiformat";
                                                             |     }
                                                             |     if (r1 != 0) {
    0x00011408 ldrne r1, [pc, 0x9c8]                         |         r1 = "%s: error!: min. I/O unit size should be multiple of sub-page size\n";
                                                             |         goto label_54;
                                                             |     }
                                                             |     if (r1 != 0) {
                                                             | label_54:
    0x0001140c bne 0x113c8                                   |         goto label_10;
                                                             |     }
                                                             | label_52:
    0x00011410 mov r1, 2                                     |     r1 = 2;
    0x00011414 ldr r0, [r4, 0x2c]                            |     r0 = *((r4 + 0x2c));
    0x00011418 bl 0x10d30                                    |     r0 = open64 ();
    0x0001141c cmn r0, 1                                     |     
    0x00011420 str r0, [r4, 0x30]                            |     *((r4 + 0x30)) = r0;
                                                             |     if (r0 == 1) {
    0x00011424 bne 0x11444                                   |         
    0x00011428 bl 0x10d78                                    |         errno_location ();
    0x0001142c ldr r7, [pc, 0x92c]                           |         r7 = "nh_Vyqve:x:s:O:f:S:";
    0x00011430 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x00011434 ldr r2, [pc, 0xa60]                           |         r2 = stderr;
    0x00011438 ldr r1, [pc, 0x99c]                           |         r1 = "%s: error!: min. I/O unit size should be multiple of sub-page size\n";
    0x0001143c ldr r5, [r0]                                  |         r5 = *(r0);
    0x00011440 b 0x112f0                                     |         goto label_11;
                                                             |     }
    0x00011444 ldr r3, [r4, 0xc]                             |     r3 = *((r4 + 0xc));
    0x00011448 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0001144c beq 0x11494                                   |         goto label_55;
                                                             |     }
    0x00011450 tst r3, 7                                     |     
                                                             |     if ((r3 & 7) == 0) {
    0x00011454 beq 0x1147c                                   |         goto label_56;
                                                             |     }
    0x00011458 ldr r2, [pc, 0xa3c]                           |     r2 = stderr;
    0x0001145c ldr r1, [pc, 0x97c]                           |     r1 = "%s: error!: cannot open \"%s\"\n";
                                                             |     do {
    0x00011460 ldr r3, [pc, 0x8f8]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00011464 ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011468 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: cannot open \"%s\"\n", r2, "nh_Vyqve:x:s:O:f:S:")
                                                             | label_12:
    0x0001146c ldr r3, [pc, 0x8dc]                           |         r3 = *(0x11d4c);
    0x00011470 ldr r0, [r3, 0x30]                            |         r0 = "%s: error!: %s: unable to parse the number '%s'\n";
    0x00011474 bl 0x10dcc                                    |         close ("%s: error!: %s: unable to parse the number '%s'\n");
    0x00011478 b 0x112b4                                     |         goto label_8;
                                                             | label_56:
    0x0001147c ldr r2, [fp, -0x40]                           |         r2 = var_40h;
    0x00011480 add r3, r3, 0x3f                              |         r3 += 0x3f;
    0x00011484 cmp r3, r2                                    |         
                                                             |         if (r3 < r2) {
    0x00011488 ldrge r2, [pc, 0xa0c]                         |             r2 = "ubiformat";
                                                             |         }
                                                             |         if (r3 < r2) {
    0x0001148c ldrge r1, [pc, 0x950]                         |             r1 = "%s: error!: bad VID header offset\n";
                                                             |         }
    0x00011490 bge 0x11460                                   |         
                                                             |     } while (r3 >= r2);
                                                             | label_55:
    0x00011494 ldrb r3, [fp, -0x28]                          |     r3 = var_28h;
    0x00011498 tst r3, 1                                     |     
                                                             |     if ((r3 & 1) != 0) {
    0x0001149c bne 0x114c4                                   |         goto label_57;
                                                             |     }
    0x000114a0 ldr r3, [r4, 0x2c]                            |     r3 = *((r4 + 0x2c));
    0x000114a4 ldr r2, [pc, 0x9f0]                           |     r2 = stderr;
    0x000114a8 str r3, [sp]                                  |     *(sp) = r3;
    0x000114ac ldr r3, [fp, -0x124]                          |     r3 = endptr;
    0x000114b0 ldr r1, [pc, 0x930]                           |     r1 = "%s: error!: bad VID header offset\n";
                                                             |     do {
    0x000114b4 ldr r0, [pc, 0x8a4]                           |         
    0x000114b8 ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000114bc bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: bad VID header offset\n", r2, r3)
    0x000114c0 b 0x1146c                                     |         goto label_12;
                                                             | label_57:
    0x000114c4 bl 0x13614                                    |         r0 = fcn_00013614 ();
    0x000114c8 subs r8, r0, 0                                |         r8 = r0 - 0;
                                                             |         if (r8 != r0) {
    0x000114cc beq 0x1151c                                   |             
    0x000114d0 sub r2, fp, 0x18c                             |             r2 -= var_18ch;
    0x000114d4 ldr r1, [fp, -0x124]                          |             r1 = endptr;
    0x000114d8 bl 0x13cd0                                    |             r0 = fcn_00013cd0 (r0, r1);
    0x000114dc mov r7, r0                                    |             r7 = r0;
    0x000114e0 mov r0, r8                                    |             r0 = r8;
    0x000114e4 bl 0x13540                                    |             fcn_00013540 (r0);
    0x000114e8 cmp r7, 0                                     |             
                                                             |             if (r7 != 0) {
    0x000114ec bne 0x1151c                                   |                 goto label_58;
                                                             |             }
    0x000114f0 ldr r3, [fp, -0x18c]                          |             r3 = var_18ch;
    0x000114f4 ldr r0, [pc, 0x864]                           |             
    0x000114f8 str r3, [sp, 4]                               |             var_4h = r3;
    0x000114fc ldr r3, [r4, 0x2c]                            |             r3 = *((r4 + 0x2c));
    0x00011500 ldr r2, [pc, 0x994]                           |             r2 = stderr;
    0x00011504 str r3, [sp]                                  |             *(sp) = r3;
    0x00011508 ldr r3, [fp, -0x124]                          |             r3 = endptr;
    0x0001150c ldr r1, [pc, 0x8d8]                           |             r1 = "_s:_error_:_mtd_d___s__is_a_read_only_device";
    0x00011510 ldr r0, [r0]                                  |             r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011514 bl 0x10c7c                                    |             fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_mtd_d___s__is_a_read_only_device", r2, r3)
    0x00011518 b 0x1146c                                     |             goto label_12;
                                                             |         }
                                                             | label_58:
    0x0001151c ldrb r3, [r4]                                 |         r3 = *(r4);
    0x00011520 tst r3, 2                                     |         
                                                             |         if ((r3 & 2) == 0) {
    0x00011524 bne 0x11570                                   |             
    0x00011528 sub r3, fp, 0x114                             |             r3 -= var_114h;
    0x0001152c ldr r2, [fp, -0x124]                          |             r2 = endptr;
    0x00011530 ldr r1, [pc, 0x964]                           |             r1 = stderr;
    0x00011534 ldr r0, [pc, 0x8b4]                           |             r0 = "_s:_error_:_please__first_detach_mtd_d___s__from_ubi_d";
    0x00011538 bl 0x10bbc                                    |             printf ("_s:_error_:_please__first_detach_mtd_d___s__from_ubi_d", r1, r2, r3);
    0x0001153c mov r2, 1                                     |             r2 = 1;
    0x00011540 ldrd r0, r1, [fp, -0x4c]                      |             __asm ("ldrd r0, r1, [var_4ch]");
    0x00011544 bl 0x1846c                                    |             fcn_0001846c (r0, r1);
    0x00011548 ldr r1, [fp, -0x44]                           |             r1 = var_44h;
    0x0001154c ldr r0, [pc, 0x8a0]                           |             r0 = "_s:_mtd_d___s___size_";
    0x00011550 bl 0x10bbc                                    |             printf ("_s:_mtd_d___s___size_", r1);
    0x00011554 ldr r0, [fp, -0x40]                           |             r0 = var_40h;
    0x00011558 mov r2, 1                                     |             r2 = 1;
    0x0001155c asr r1, r0, 0x1f                              |             r1 = r0 >> 0x1f;
    0x00011560 bl 0x1846c                                    |             fcn_0001846c (r0, r1);
    0x00011564 ldr r1, [fp, -0x3c]                           |             r1 = var_3ch;
    0x00011568 ldr r0, [pc, 0x888]                           |             r0 = "___d_eraseblocks_of_";
    0x0001156c bl 0x10bbc                                    |             printf ("___d_eraseblocks_of_", r1);
                                                             |         }
    0x00011570 ldrb r3, [r4]                                 |         r3 = *(r4);
    0x00011574 tst r3, 2                                     |         
                                                             |         if ((r3 & 2) == 0) {
    0x00011578 bne 0x11588                                   |             
    0x0001157c tst r3, 4                                     |             
                                                             |             if ((r3 & 4) != 0) {
    0x00011580 moveq r5, 1                                   |                 r5 = 1;
                                                             |             }
                                                             |             if ((r3 & 4) != 0) {
    0x00011584 movne r5, 2                                   |                 r5 = 2;
                                                             |                 goto label_59;
                                                             |             }
                                                             |         }
                                                             | label_59:
    0x00011588 mov r3, r5                                    |         r3 = r5;
    0x0001158c sub r2, fp, 0x1c4                             |         r2 -= var_1c4h;
    0x00011590 ldr r1, [r4, 0x30]                            |         r1 = *((r4 + 0x30));
    0x00011594 sub r0, fp, 0x124                             |         r0 -= endptr;
    0x00011598 bl 0x19178                                    |         r0 = fcn_00019178 (r0, r1);
    0x0001159c cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x000115a0 beq 0x115bc                                   |             goto label_60;
                                                             |         }
    0x000115a4 ldr r3, [r4, 0x2c]                            |         r3 = *((r4 + 0x2c));
    0x000115a8 ldr r2, [pc, 0x8ec]                           |         r2 = stderr;
    0x000115ac str r3, [sp]                                  |         *(sp) = r3;
    0x000115b0 ldr r3, [fp, -0x124]                          |         r3 = endptr;
    0x000115b4 ldr r1, [pc, 0x840]                           |         r1 = ", min. I/O size %d bytes\n";
    0x000115b8 b 0x114b4                                     |         
                                                             |     } while (1);
                                                             | label_60:
    0x000115bc ldr r1, [fp, -0x1c4]                          |     r1 = var_1c4h;
    0x000115c0 ldr r3, [r1, 0x24]                            |     r3 = *((r1 + 0x24));
    0x000115c4 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000115c8 bne 0x115f0                                   |         goto label_61;
                                                             |     }
    0x000115cc ldr r0, [pc, 0x78c]                           |     
    0x000115d0 ldr r3, [r1, 0x20]                            |     r3 = *((r1 + 0x20));
    0x000115d4 ldr r2, [pc, 0x8c0]                           |     r2 = stderr;
    0x000115d8 ldr r1, [pc, 0x820]                           |     r1 = "%s: error!: failed to scan mtd%d (%s)\n";
    0x000115dc ldr r0, [r0]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000115e0 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: failed to scan mtd%d (%s)\n", r2, r3)
                                                             |     do {
                                                             | label_13:
    0x000115e4 ldr r0, [fp, -0x1c4]                          |         r0 = var_1c4h;
    0x000115e8 bl 0x198f0                                    |         fcn_000198f0 (r0);
    0x000115ec b 0x1146c                                     |         goto label_12;
                                                             | label_61:
    0x000115f0 cmp r3, 1                                     |         
                                                             |         if (r3 > 1) {
    0x000115f4 bgt 0x11618                                   |             goto label_62;
                                                             |         }
    0x000115f8 ldr r2, [fp, -0x124]                          |         r2 = endptr;
    0x000115fc ldr r0, [pc, 0x75c]                           |         
    0x00011600 str r2, [sp]                                  |         *(sp) = r2;
    0x00011604 ldr r1, [pc, 0x7f8]                           |         r1 = "_s:_error_:_all__d_eraseblocks_are_bad";
    0x00011608 ldr r2, [pc, 0x88c]                           |         r2 = stderr;
    0x0001160c ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011610 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_all__d_eraseblocks_are_bad", r2)
    0x00011614 b 0x115e4                                     |         
                                                             |     } while (1);
                                                             | label_62:
    0x00011618 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x0001161c tst r3, 2                                     |     
                                                             |     if ((r3 & 2) == 0) {
    0x00011620 bne 0x116bc                                   |         
    0x00011624 ldr r2, [r1, 0x10]                            |         r2 = *((r1 + 0x10));
    0x00011628 cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x0001162c beq 0x11644                                   |             
    0x00011630 ldrd r0, r1, [r1, 8]                          |             __asm ("ldrd r0, r1, [r1, 8]");
    0x00011634 strd r0, r1, [sp]                             |             __asm ("strd r0, r1, [sp]");
    0x00011638 ldr r1, [pc, 0x85c]                           |             r1 = stderr;
    0x0001163c ldr r0, [pc, 0x7c4]                           |             r0 = "_s:_error_:_too_few_non_bad_eraseblocks___d__on_mtd_d";
    0x00011640 bl 0x10bbc                                    |             printf (r0, r1);
                                                             |         }
    0x00011644 ldr r3, [fp, -0x1c4]                          |         r3 = var_1c4h;
    0x00011648 ldr r2, [r3, 0x14]                            |         r2 = *((r3 + 0x14));
    0x0001164c cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x00011650 beq 0x11660                                   |             
    0x00011654 ldr r1, [pc, 0x840]                           |             r1 = stderr;
    0x00011658 ldr r0, [pc, 0x7ac]                           |             r0 = "%s: %d eraseblocks have valid erase counter, mean value is %lld\n";
    0x0001165c bl 0x10bbc                                    |             printf ("%s: %d eraseblocks have valid erase counter, mean value is %lld\n", r1);
                                                             |         }
    0x00011660 ldr r3, [fp, -0x1c4]                          |         r3 = var_1c4h;
    0x00011664 ldr r2, [r3, 0x18]                            |         r2 = *((r3 + 0x18));
    0x00011668 cmp r2, 0                                     |         
                                                             |         if (r2 != 0) {
    0x0001166c beq 0x1167c                                   |             
    0x00011670 ldr r1, [pc, 0x824]                           |             r1 = stderr;
    0x00011674 ldr r0, [pc, 0x794]                           |             r0 = "_s:__d_eraseblocks_are_supposedly_empty";
    0x00011678 bl 0x10bbc                                    |             printf ("_s:__d_eraseblocks_are_supposedly_empty", r1);
                                                             |         }
    0x0001167c ldr r7, [fp, -0x1c4]                          |         r7 = var_1c4h;
    0x00011680 ldr r2, [r7, 0x20]                            |         r2 = *((r7 + 0x20));
    0x00011684 cmp r2, 0                                     |         
                                                             |         if (r2 == 0) {
    0x00011688 beq 0x116bc                                   |             goto label_63;
                                                             |         }
    0x0001168c ldr r1, [pc, 0x808]                           |         r1 = stderr;
    0x00011690 ldr r0, [pc, 0x77c]                           |         r0 = "%s: %d corrupted erase counters\n";
    0x00011694 bl 0x10bbc                                    |         printf ("%s: %d corrupted erase counters\n", r1);
    0x00011698 ldr r8, [pc, 0x778]                           |         r8 = "_s:__d_bad_eraseblocks_found__numbers:_";
    0x0001169c ldr sb, [pc, 0x778]                           |         sb = "_d";
    0x000116a0 mov r5, 0                                     |         r5 = 0;
    0x000116a4 mov sl, 1                                     |         sl = 1;
                                                             | label_14:
    0x000116a8 ldr r3, [fp, -0x44]                           |         r3 = var_44h;
    0x000116ac cmp r5, r3                                    |         
                                                             |         if (r5 < r3) {
    0x000116b0 blt 0x1172c                                   |             goto label_64;
                                                             |         }
    0x000116b4 mov r0, 0xa                                   |         r0 = 0xa;
    0x000116b8 bl 0x10b98                                    |         putchar (r0);
                                                             |     }
                                                             | label_63:
    0x000116bc ldr r1, [fp, -0x1c4]                          |     r1 = var_1c4h;
    0x000116c0 ldr r3, [r1, 0x1c]                            |     r3 = *((r1 + 0x1c));
    0x000116c4 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000116c8 beq 0x11768                                   |         goto label_65;
                                                             |     }
    0x000116cc ldrb r2, [r4]                                 |     r2 = *(r4);
    0x000116d0 and r2, r2, 3                                 |     r2 &= 3;
    0x000116d4 cmp r2, 3                                     |     
                                                             |     if (r2 != 3) {
    0x000116d8 beq 0x116f8                                   |         
    0x000116dc ldr r2, [r1, 0x24]                            |         r2 = *((r1 + 0x24));
    0x000116e0 ldr r0, [pc, 0x678]                           |         
    0x000116e4 str r2, [sp]                                  |         *(sp) = r2;
    0x000116e8 ldr r1, [pc, 0x730]                           |         r1 = "_d";
    0x000116ec ldr r2, [pc, 0x7a8]                           |         r2 = stderr;
    0x000116f0 ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000116f4 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "_d", r2)
                                                             |     }
    0x000116f8 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x000116fc tst r3, 1                                     |     
                                                             |     if ((r3 & 1) != 0) {
    0x00011700 bne 0x11768                                   |         goto label_65;
                                                             |     }
    0x00011704 bl 0x126c8                                    |     r0 = fcn_000126c8 ();
    0x00011708 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0001170c beq 0x11768                                   |         goto label_65;
                                                             |     }
                                                             | label_15:
    0x00011710 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x00011714 and r3, r3, 3                                 |     r3 &= 3;
    0x00011718 cmp r3, 1                                     |     
                                                             |     if (r3 != 1) {
    0x0001171c bne 0x115e4                                   |         goto label_13;
                                                             |     }
    0x00011720 ldr r0, [pc, 0x6fc]                           |     r0 = "%s: warning!: %d of %d eraseblocks contain non-UBI data\n";
    0x00011724 bl 0x10c1c                                    |     puts ("%s: warning!: %d of %d eraseblocks contain non-UBI data\n");
    0x00011728 b 0x115e4                                     |     goto label_13;
                                                             | label_64:
    0x0001172c ldr r3, [r7]                                  |     r3 = *(r7);
    0x00011730 ldr r3, [r3, r5, lsl 2]                       |     offset_1 = r5 << 2;
                                                             |     r3 = *((r3 + offset_1));
    0x00011734 cmn r3, 4                                     |     
                                                             |     if (r3 != 4) {
    0x00011738 bne 0x11754                                   |         goto label_66;
                                                             |     }
    0x0001173c cmp sl, 0                                     |     
    0x00011740 mov r1, r5                                    |     r1 = r5;
                                                             |     if (sl == 0) {
    0x00011744 beq 0x1175c                                   |         goto label_67;
                                                             |     }
    0x00011748 mov r0, sb                                    |     r0 = sb;
    0x0001174c bl 0x10bbc                                    |     printf (r0);
    0x00011750 mov sl, 0                                     |     sl = 0;
                                                             |     do {
                                                             | label_66:
    0x00011754 add r5, r5, 1                                 |         r5++;
    0x00011758 b 0x116a8                                     |         goto label_14;
                                                             | label_67:
    0x0001175c mov r0, r8                                    |         r0 = r8;
    0x00011760 bl 0x10bbc                                    |         printf (r0);
    0x00011764 b 0x11754                                     |         
                                                             |     } while (1);
                                                             | label_65:
    0x00011768 ldrb r5, [r4]                                 |     r5 = *(r4);
    0x0001176c tst r5, 8                                     |     
                                                             |     if ((r5 & 8) != 0) {
    0x00011770 bne 0x11814                                   |         goto label_68;
                                                             |     }
    0x00011774 ldr r3, [fp, -0x1c4]                          |     r3 = var_1c4h;
    0x00011778 ldr r7, [r3, 0x24]                            |     r7 = *((r3 + 0x24));
    0x0001177c ldr r2, [r3, 0x14]                            |     r2 = *((r3 + 0x14));
    0x00011780 cmp r2, r7                                    |     
                                                             |     if (r2 >= r7) {
    0x00011784 bge 0x11814                                   |         goto label_68;
                                                             |     }
    0x00011788 ldr r8, [r3, 0x10]                            |     r8 = *((r3 + 0x10));
    0x0001178c mov r3, 0x64                                  |     r3 = 0x64;
    0x00011790 mov r1, r7                                    |     r1 = r7;
    0x00011794 mul r0, r8, r3                                |     r0 = r8 * r3;
    0x00011798 bl 0x199d4                                    |     r0 = fcn_000199d4 (r0, r1);
    0x0001179c cmp r0, 0x31                                  |     
                                                             |     if (r0 > 0x31) {
    0x000117a0 bgt 0x11944                                   |         goto label_69;
                                                             |     }
    0x000117a4 and r5, r5, 3                                 |     r5 &= 3;
    0x000117a8 cmp r5, 3                                     |     
                                                             |     if (r5 != 3) {
    0x000117ac beq 0x117e4                                   |         
    0x000117b0 ldr r0, [pc, 0x5a8]                           |         
    0x000117b4 str r7, [sp]                                  |         *(sp) = r7;
    0x000117b8 mov r3, r8                                    |         r3 = r8;
    0x000117bc ldr r2, [pc, 0x6d8]                           |         r2 = stderr;
    0x000117c0 ldr r1, [pc, 0x660]                           |         r1 = "yes";
    0x000117c4 ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000117c8 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "yes", r2, r3)
    0x000117cc ldr r1, [pc, 0x6c8]                           |         r1 = stderr;
    0x000117d0 ldr r0, [pc, 0x654]                           |         r0 = "_s:_warning_:_only__d_of__d_eraseblocks_have_valid_erase_counter";
    0x000117d4 bl 0x10bbc                                    |         printf ("_s:_warning_:_only__d_of__d_eraseblocks_have_valid_erase_counter", r1);
    0x000117d8 ldr r1, [pc, 0x6bc]                           |         r1 = stderr;
    0x000117dc ldr r0, [pc, 0x64c]                           |         r0 = "_s:_erase_counter_0_will_be_used_for_all_eraseblocks";
    0x000117e0 bl 0x10bbc                                    |         printf ("_s:_erase_counter_0_will_be_used_for_all_eraseblocks", r1);
                                                             |     }
    0x000117e4 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x000117e8 tst r3, 1                                     |     
                                                             |     if ((r3 & 1) != 0) {
    0x000117ec bne 0x117fc                                   |         goto label_70;
                                                             |     }
    0x000117f0 bl 0x126c8                                    |     r0 = fcn_000126c8 ();
    0x000117f4 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000117f8 bne 0x11710                                   |         goto label_15;
                                                             |     }
                                                             | label_70:
    0x000117fc mov r2, 0                                     |     r2 = 0;
    0x00011800 mov r3, 0                                     |     r3 = 0;
                                                             | label_16:
    0x00011804 strd r2, r3, [r4, 0x20]                       |     __asm ("strd r2, r3, [r4, 0x20]");
    0x00011808 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x0001180c orr r3, r3, 8                                 |     r3 |= 8;
    0x00011810 strb r3, [r4]                                 |     *(r4) = r3;
                                                             |     do {
                                                             | label_68:
    0x00011814 ldrb r3, [r4]                                 |         r3 = *(r4);
    0x00011818 and r3, r3, 0xa                               |         r3 &= 0xa;
    0x0001181c cmp r3, 8                                     |         
                                                             |         if (r3 == 8) {
    0x00011820 bne 0x11834                                   |             
    0x00011824 ldrd r2, r3, [r4, 0x20]                       |             __asm ("ldrd r2, r3, [r4, 0x20]");
    0x00011828 ldr r1, [pc, 0x66c]                           |             r1 = stderr;
    0x0001182c ldr r0, [pc, 0x600]                           |             r0 = "_s:_note__arbitrary_erase_counter_value_may_be_specified_using__e_option";
    0x00011830 bl 0x10bbc                                    |             printf ("_s:_note__arbitrary_erase_counter_value_may_be_specified_using__e_option", r1, r2);
                                                             |         }
    0x00011834 ldr r3, [r4, 0x14]                            |         r3 = *((r4 + 0x14));
    0x00011838 sub r1, fp, 0x40                              |         r1 -= var_40h;
    0x0001183c str r3, [sp, 8]                               |         var_8h = r3;
    0x00011840 ldr r3, [r4, 0x10]                            |         r3 = *((r4 + 0x10));
    0x00011844 sub r0, fp, 0x1b0                             |         r0 -= var_1b0h;
    0x00011848 str r3, [sp, 4]                               |         var_4h = r3;
    0x0001184c ldr r3, [r4, 0xc]                             |         r3 = *((r4 + 0xc));
    0x00011850 str r3, [sp]                                  |         *(sp) = r3;
    0x00011854 ldm r1, {r1, r2, r3}                          |         r1 = *(r1);
                                                             |         r2 = *((r1 + 4));
                                                             |         r3 = *((r1 + 8));
    0x00011858 bl 0x15000                                    |         fcn_00015000 (r0, r1, r2, r3, r4);
    0x0001185c ldr r1, [fp, -0x1c4]                          |         r1 = var_1c4h;
    0x00011860 ldr r3, [r1, 0x28]                            |         r3 = *((r1 + 0x28));
    0x00011864 cmn r3, 1                                     |         
                                                             |         if (r3 != 1) {
    0x00011868 beq 0x118f8                                   |             
    0x0001186c ldr r0, [fp, -0x1a4]                          |             r0 = var_1a4h;
    0x00011870 cmp r3, r0                                    |             
                                                             |             if (r3 == r0) {
    0x00011874 beq 0x118f8                                   |                 goto label_71;
                                                             |             }
    0x00011878 ldrb r2, [r4]                                 |             r2 = *(r4);
    0x0001187c and r2, r2, 3                                 |             r2 &= 3;
    0x00011880 cmp r2, 3                                     |             
                                                             |             if (r2 != 3) {
    0x00011884 beq 0x118c0                                   |                 
    0x00011888 ldr r2, [fp, -0x1a0]                          |                 r2 = var_1a0h;
    0x0001188c stmib sp, {r0, r2}                            |                 __asm ("stmib sp, {r0, r2}");
    0x00011890 ldr r0, [pc, 0x4c8]                           |                 
    0x00011894 ldr r2, [r1, 0x2c]                            |                 r2 = *((r1 + 0x2c));
    0x00011898 ldr r1, [pc, 0x598]                           |                 r1 = "%s: use erase counter %lld for all eraseblocks\n";
    0x0001189c str r2, [sp]                                  |                 *(sp) = r2;
    0x000118a0 ldr r2, [pc, 0x5f4]                           |                 r2 = stderr;
    0x000118a4 ldr r0, [r0]                                  |                 r0 = "nh_Vyqve:x:s:O:f:S:";
    0x000118a8 bl 0x10c7c                                    |                 fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: use erase counter %lld for all eraseblocks\n", r2)
    0x000118ac ldr r3, [fp, -0x1a0]                          |                 r3 = var_1a0h;
    0x000118b0 ldr r2, [fp, -0x1a4]                          |                 r2 = var_1a4h;
    0x000118b4 ldr r1, [pc, 0x5e0]                           |                 r1 = stderr;
    0x000118b8 ldr r0, [pc, 0x57c]                           |                 r0 = "%s: warning!: VID header and data offsets on flash are %d and %d, which is different to requested offsets %d and %d\n";
    0x000118bc bl 0x10bbc                                    |                 printf ("%s: warning!: VID header and data offsets on flash are %d and %d, which is different to requested offsets %d and %d\n", r1, r2, r3);
                                                             |             }
    0x000118c0 ldrb r3, [r4]                                 |             r3 = *(r4);
    0x000118c4 tst r3, 1                                     |             
                                                             |             if ((r3 & 1) == 0) {
    0x000118c8 beq 0x119ac                                   |                 goto label_72;
                                                             |             }
                                                             | label_17:
    0x000118cc ldrb r3, [r4]                                 |             r3 = *(r4);
    0x000118d0 and r3, r3, 3                                 |             r3 &= 3;
    0x000118d4 cmp r3, 1                                     |             
                                                             |             if (r3 == 1) {
    0x000118d8 bne 0x118e4                                   |                 
    0x000118dc ldr r0, [pc, 0x540]                           |                 r0 = "%s: warning!: %d of %d eraseblocks contain non-UBI data\n";
    0x000118e0 bl 0x10c1c                                    |                 puts ("%s: warning!: %d of %d eraseblocks contain non-UBI data\n");
                                                             |             }
                                                             | label_18:
    0x000118e4 ldr r3, [fp, -0x1a0]                          |             r3 = var_1a0h;
    0x000118e8 ldr r2, [fp, -0x1a4]                          |             r2 = var_1a4h;
    0x000118ec ldr r1, [pc, 0x5a8]                           |             r1 = stderr;
    0x000118f0 ldr r0, [pc, 0x548]                           |             r0 = "_s:_use_new_offsets__d_and__d__";
    0x000118f4 bl 0x10bbc                                    |             printf ("_s:_use_new_offsets__d_and__d__", r1, r2, r3);
                                                             |         }
                                                             | label_71:
    0x000118f8 ldr r5, [r4, 0x28]                            |         r5 = *((r4 + 0x28));
    0x000118fc ldr r3, [fp, -0x1c4]                          |         r3 = var_1c4h;
    0x00011900 cmp r5, 0                                     |         
    0x00011904 str r3, [fp, -0x1cc]                          |         var_1cch = r3;
                                                             |         if (r5 == 0) {
    0x00011908 beq 0x12448                                   |             goto label_73;
                                                             |         }
    0x0001190c ldr r1, [pc, 0x530]                           |         r1 = "_s:_use_offsets__d_and__d";
    0x00011910 mov r0, r5                                    |         r0 = r5;
    0x00011914 bl 0x10d48                                    |         r0 = strcmp (r0, "_s:_use_offsets__d_and__d");
    0x00011918 cmp r0, 0                                     |         
                                                             |         if (r0 != 0) {
    0x0001191c bne 0x11a44                                   |             goto label_74;
                                                             |         }
    0x00011920 ldrd r8, sb, [r4, 0x18]                       |         __asm ("ldrd r8, sb, [r4, 0x18]");
    0x00011924 orrs r3, r8, sb                               |         r3 = r8 | sb;
                                                             |         if (r3 != r8) {
    0x00011928 bne 0x119ec                                   |             goto label_75;
                                                             |         }
    0x0001192c ldr r3, [pc, 0x42c]                           |         r3 = "nh_Vyqve:x:s:O:f:S:";
    0x00011930 ldr r2, [pc, 0x564]                           |         r2 = stderr;
    0x00011934 ldr r1, [pc, 0x50c]                           |         r1 = *(0x11e44);
    0x00011938 ldr r0, [r3]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x0001193c bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", r1, r2, "nh_Vyqve:x:s:O:f:S:")
    0x00011940 b 0x115e4                                     |         goto label_13;
                                                             | label_69:
    0x00011944 cmp r0, 0x5e                                  |         
    0x00011948 bgt 0x11814                                   |         
                                                             |     } while (r0 > 0x5e);
    0x0001194c and r5, r5, 3                                 |     r5 &= 3;
    0x00011950 cmp r5, 3                                     |     
                                                             |     if (r5 != 3) {
    0x00011954 beq 0x11988                                   |         
    0x00011958 ldr r0, [pc, 0x400]                           |         
    0x0001195c str r7, [sp]                                  |         *(sp) = r7;
    0x00011960 mov r3, r8                                    |         r3 = r8;
    0x00011964 ldr r2, [pc, 0x530]                           |         r2 = stderr;
    0x00011968 ldr r1, [pc, 0x4b8]                           |         r1 = "yes";
    0x0001196c ldr r0, [r0]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011970 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "yes", r2, r3)
    0x00011974 ldr r3, [fp, -0x1c4]                          |         r3 = var_1c4h;
    0x00011978 ldr r1, [pc, 0x51c]                           |         r1 = stderr;
    0x0001197c ldrd r2, r3, [r3, 8]                          |         __asm ("ldrd r2, r3, [r3, 8]");
    0x00011980 ldr r0, [pc, 0x4c4]                           |         r0 = "%s: error!: must use '-S' with non-zero value when reading from stdin\n";
    0x00011984 bl 0x10bbc                                    |         printf ("%s: error!: must use '-S' with non-zero value when reading from stdin\n", r1, r2, r3);
                                                             |     }
    0x00011988 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x0001198c tst r3, 1                                     |     
                                                             |     if ((r3 & 1) != 0) {
    0x00011990 bne 0x119a0                                   |         goto label_76;
                                                             |     }
    0x00011994 bl 0x126c8                                    |     r0 = fcn_000126c8 ();
    0x00011998 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001199c bne 0x11710                                   |         goto label_15;
                                                             |     }
                                                             | label_76:
    0x000119a0 ldr r3, [fp, -0x1c4]                          |     r3 = var_1c4h;
    0x000119a4 ldrd r2, r3, [r3, 8]                          |     __asm ("ldrd r2, r3, [r3, 8]");
    0x000119a8 b 0x11804                                     |     goto label_16;
                                                             | label_72:
    0x000119ac ldr r0, [pc, 0x49c]                           |     r0 = "_s:_mean_erase_counter__lld_will_be_used_for_the_rest_of_eraseblock";
    0x000119b0 bl 0x125e8                                    |     r0 = fcn_000125e8 ("_s:_mean_erase_counter__lld_will_be_used_for_the_rest_of_eraseblock");
    0x000119b4 subs r3, r0, 0                                |     r3 = r0 - 0;
                                                             |     if (r3 != r0) {
    0x000119b8 bne 0x118cc                                   |         goto label_17;
                                                             |     }
    0x000119bc ldr r2, [r4, 0x14]                            |     r2 = *((r4 + 0x14));
    0x000119c0 sub r0, fp, 0x1b0                             |     r0 -= var_1b0h;
    0x000119c4 str r2, [sp, 8]                               |     var_8h = r2;
    0x000119c8 ldr r2, [r4, 0x10]                            |     r2 = *((r4 + 0x10));
    0x000119cc str r2, [sp, 4]                               |     var_4h = r2;
    0x000119d0 ldr r2, [fp, -0x1c4]                          |     r2 = var_1c4h;
    0x000119d4 ldr r2, [r2, 0x28]                            |     r2 = *((r2 + 0x28));
    0x000119d8 str r2, [sp]                                  |     *(sp) = r2;
    0x000119dc ldr r2, [fp, -0x3c]                           |     r2 = var_3ch;
    0x000119e0 ldr r1, [fp, -0x40]                           |     r1 = var_40h;
    0x000119e4 bl 0x15000                                    |     fcn_00015000 (r0, r1, r2, r3, r4);
    0x000119e8 b 0x118e4                                     |     goto label_18;
                                                             | label_75:
    0x000119ec bl 0x10d54                                    |     r0 = dup ();
    0x000119f0 subs r3, r0, 0                                |     r3 = r0 - 0;
    0x000119f4 str r3, [fp, -0x1d0]                          |     fildes = r3;
                                                             |     if (r3 >= r0) {
    0x000119f8 bge 0x11af0                                   |         goto label_77;
                                                             |     }
    0x000119fc bl 0x10d78                                    |     errno_location ();
    0x00011a00 ldr r5, [pc, 0x358]                           |     
    0x00011a04 ldr r2, [pc, 0x490]                           |     r2 = stderr;
    0x00011a08 ldr r1, [pc, 0x444]                           |     r1 = "continue_";
    0x00011a0c ldr r4, [r0]                                  |     r4 = *(r0);
    0x00011a10 ldr r0, [r5]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011a14 bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "continue_", r2, r3, r4, "nh_Vyqve:x:s:O:f:S:")
    0x00011a18 ldr r5, [r5]                                  |     r5 = "nh_Vyqve:x:s:O:f:S:";
                                                             |     do {
    0x00011a1c mov r0, r4                                    |         r0 = r4;
    0x00011a20 bl 0x10bc8                                    |         strerror (r0);
    0x00011a24 ldr r3, [pc, 0x478]                           |         r3 = "%s: error!: cannot write eraseblock %d\n";
    0x00011a28 ldr r1, [pc, 0x478]                           |         r1 = *(0x11ea4);
    0x00011a2c mov r2, 0xb                                   |         r2 = 0xb;
    0x00011a30 str r4, [sp]                                  |         *(sp) = r4;
    0x00011a34 str r0, [sp, 4]                               |         var_4h = r0;
    0x00011a38 mov r0, r5                                    |         r0 = r5;
                                                             | label_19:
    0x00011a3c bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot write eraseblock %d\n", r4)
    0x00011a40 b 0x115e4                                     |         goto label_13;
                                                             | label_74:
    0x00011a44 sub r1, fp, 0x18c                             |         r1 -= var_18ch;
    0x00011a48 mov r0, r5                                    |         r0 = r5;
    0x00011a4c bl 0x10bd4                                    |         r0 = stat64 ();
    0x00011a50 subs r1, r0, 0                                |         r1 = r0 - 0;
                                                             |         if (r1 == r0) {
    0x00011a54 beq 0x11a80                                   |             goto label_78;
                                                             |         }
    0x00011a58 bl 0x10d78                                    |         errno_location ();
    0x00011a5c ldr r7, [pc, 0x2fc]                           |         r7 = "nh_Vyqve:x:s:O:f:S:";
    0x00011a60 mov r3, r5                                    |         r3 = r5;
    0x00011a64 ldr r2, [pc, 0x430]                           |         r2 = stderr;
    0x00011a68 ldr r1, [pc, 0x36c]                           |         r1 = "%s: error!: min. I/O unit size should be multiple of sub-page size\n";
    0x00011a6c ldr r4, [r0]                                  |         r4 = *(r0);
    0x00011a70 ldr r0, [r7]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011a74 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: min. I/O unit size should be multiple of sub-page size\n", r2, r3, r4)
    0x00011a78 ldr r5, [r7]                                  |         r5 = "nh_Vyqve:x:s:O:f:S:";
    0x00011a7c b 0x11a1c                                     |         
                                                             |     } while (1);
                                                             | label_78:
    0x00011a80 sub r3, fp, 0x184                             |     r3 -= var_184h;
    0x00011a84 mov r0, r5                                    |     r0 = r5;
    0x00011a88 ldrd r8, sb, [r3, 0x28]                       |     __asm ("ldrd r8, sb, [var_sp_28h]");
    0x00011a8c bl 0x10d30                                    |     r0 = open64 ();
    0x00011a90 cmn r0, 1                                     |     
    0x00011a94 str r0, [fp, -0x1d0]                          |     fildes = r0;
                                                             |     if (r0 == 1) {
    0x00011a98 bne 0x11ae4                                   |         
    0x00011a9c bl 0x10d78                                    |         errno_location ();
    0x00011aa0 ldr r7, [pc, 0x2b8]                           |         r7 = "nh_Vyqve:x:s:O:f:S:";
    0x00011aa4 ldr r3, [r4, 0x28]                            |         r3 = *((r4 + 0x28));
    0x00011aa8 ldr r2, [pc, 0x3ec]                           |         r2 = stderr;
    0x00011aac ldr r1, [pc, 0x328]                           |         r1 = "%s: error!: min. I/O unit size should be multiple of sub-page size\n";
    0x00011ab0 ldr r5, [r0]                                  |         r5 = *(r0);
    0x00011ab4 ldr r0, [r7]                                  |         r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011ab8 bl 0x10c7c                                    |         fprintf ("nh_Vyqve:x:s:O:f:S:", "%s: error!: min. I/O unit size should be multiple of sub-page size\n", r2, r3, r4, r5)
    0x00011abc ldr r4, [r7]                                  |         r4 = "nh_Vyqve:x:s:O:f:S:";
                                                             | label_20:
    0x00011ac0 mov r0, r5                                    |         r0 = r5;
    0x00011ac4 bl 0x10bc8                                    |         strerror (r0);
    0x00011ac8 str r5, [sp]                                  |         *(sp) = r5;
    0x00011acc ldr r3, [pc, 0x3d0]                           |         r3 = "%s: error!: cannot write eraseblock %d\n";
    0x00011ad0 mov r2, 0xb                                   |         r2 = 0xb;
    0x00011ad4 ldr r1, [pc, 0x3cc]                           |         r1 = *(0x11ea4);
    0x00011ad8 str r0, [sp, 4]                               |         var_4h = r0;
    0x00011adc mov r0, r4                                    |         r0 = r4;
    0x00011ae0 b 0x11a3c                                     |         goto label_19;
                                                             |     }
    0x00011ae4 ldr r3, [fp, -0x1d0]                          |     r3 = fildes;
    0x00011ae8 cmp r3, 0                                     |     
                                                             |     if (r3 < 0) {
    0x00011aec blt 0x115e4                                   |         goto label_13;
                                                             |     }
                                                             | label_77:
    0x00011af0 ldr r7, [fp, -0x40]                           |     r7 = var_40h;
    0x00011af4 mov r0, r8                                    |     r0 = r8;
    0x00011af8 mov r2, r7                                    |     r2 = r7;
    0x00011afc asr r3, r7, 0x1f                              |     r3 = r7 >> 0x1f;
    0x00011b00 mov r1, sb                                    |     r1 = sb;
    0x00011b04 bl 0x19ad0                                    |     fcn_00019ad0 (r0);
    0x00011b08 ldr r1, [fp, -0x1cc]                          |     r1 = var_1cch;
    0x00011b0c ldr r1, [r1, 0x24]                            |     r1 = *((r1 + 0x24));
    0x00011b10 cmp r0, r1                                    |     
    0x00011b14 str r0, [fp, -0x1dc]                          |     var_1dch = r0;
                                                             |     if (r0 <= r1) {
    0x00011b18 ble 0x11b74                                   |         goto label_79;
                                                             |     }
    0x00011b1c bl 0x10d78                                    |     errno_location ();
    0x00011b20 ldr r7, [pc, 0x238]                           |     r7 = "nh_Vyqve:x:s:O:f:S:";
    0x00011b24 ldr r2, [pc, 0x370]                           |     r2 = stderr;
    0x00011b28 ldr r1, [pc, 0x328]                           |     r1 = "_s:_error_:_failed_to_dup_stdin";
    0x00011b2c ldr r5, [r0]                                  |     r5 = *(r0);
    0x00011b30 strd r8, sb, [sp]                             |     __asm ("strd r8, sb, [sp]");
    0x00011b34 ldr r3, [r4, 0x28]                            |     r3 = *((r4 + 0x28));
    0x00011b38 ldr r0, [r7]                                  |     r0 = "nh_Vyqve:x:s:O:f:S:";
    0x00011b3c bl 0x10c7c                                    |     fprintf ("nh_Vyqve:x:s:O:f:S:", "_s:_error_:_failed_to_dup_stdin", r2, r3, r4, r5)
    0x00011b40 mov r0, r5                                    |     r0 = r5;
    0x00011b44 ldr r4, [r7]                                  |     r4 = "nh_Vyqve:x:s:O:f:S:";
    0x00011b48 bl 0x10bc8                                    |     strerror (r0);
    0x00011b4c str r5, [sp]                                  |     *(sp) = r5;
    0x00011b50 ldr r3, [pc, 0x34c]                           |     r3 = "%s: error!: cannot write eraseblock %d\n";
    0x00011b54 mov r2, 0xb                                   |     r2 = 0xb;
    0x00011b58 ldr r1, [pc, 0x348]                           |     r1 = *(0x11ea4);
    0x00011b5c str r0, [sp, 4]                               |     var_4h = r0;
    0x00011b60 mov r0, r4                                    |     r0 = r4;
    0x00011b64 bl 0x10c7c                                    |     fprintf (r0, r1, r2, "%s: error!: cannot write eraseblock %d\n", r4, r5)
                                                             |     do {
    0x00011b68 ldr r0, [fp, -0x1d0]                          |         r0 = fildes;
    0x00011b6c bl 0x10dcc                                    |         close (r0);
    0x00011b70 b 0x115e4                                     |         goto label_13;
                                                             | label_79:
    0x00011b74 orrs r3, r2, r3                               |         r3 = r2 | r3;
                                                             |         if (r3 != r2) {
    0x00011b78 beq 0x11bac                                   |             
    0x00011b7c bl 0x10d78                                    |             errno_location ();
    0x00011b80 ldr sl, [pc, 0x1d8]                           |             sl = obj.stderr;
    0x00011b84 ldr r2, [pc, 0x310]                           |             r2 = stderr;
    0x00011b88 ldr r1, [pc, 0x2cc]                           |             r1 = "%s: error!: file \"%s\" is too large (%lld bytes)\n";
    0x00011b8c ldr r5, [r0]                                  |             r5 = *(r0);
    0x00011b90 str r7, [sp, 8]                               |             var_8h = r7;
    0x00011b94 strd r8, sb, [sp]                             |             __asm ("strd r8, sb, [sp]");
    0x00011b98 ldr r3, [r4, 0x28]                            |             r3 = *((r4 + 0x28));
    0x00011b9c ldr r0, [sl]                                  |             r0 = *(sl);
    0x00011ba0 bl 0x10c7c                                    |             fprintf (r0, "%s: error!: file \"%s\" is too large (%lld bytes)\n", r2, r3, r4, r5)
    0x00011ba4 ldr r4, [sl]                                  |             r4 = *(sl);
    0x00011ba8 b 0x11ac0                                     |             goto label_20;
                                                             |         }
    0x00011bac ldrb r3, [r4]                                 |         r3 = *(r4);
    0x00011bb0 tst r3, 4                                     |         
                                                             |         if ((r3 & 4) != 0) {
    0x00011bb4 beq 0x11bc8                                   |             
    0x00011bb8 ldr r2, [fp, -0x1dc]                          |             r2 = var_1dch;
    0x00011bbc ldr r1, [pc, 0x2d8]                           |             r1 = stderr;
    0x00011bc0 ldr r0, [pc, 0x298]                           |             r0 = "_s:_error_:_file___s___size__lld_bytes__is_not_multiple_of_eraseblock_size___d_bytes_";
    0x00011bc4 bl 0x10bbc                                    |             printf ("_s:_error_:_file___s___size__lld_bytes__is_not_multiple_of_eraseblock_size___d_bytes_", r1, r2);
                                                             |         }
    0x00011bc8 ldr r3, [fp, -0x1dc]                          |         r3 = var_1dch;
    0x00011bcc mov r7, 0                                     |         r7 = 0;
    0x00011bd0 mov r5, r7                                    |         r5 = r7;
    0x00011bd4 str r3, [fp, -0x1e0]                          |         var_1e0h = r3;
    0x00011bd8 str r7, [fp, -0x1d4]                          |         var_1d4h = r7;
                                                             | label_24:
    0x00011bdc ldr r3, [pc, 0x16c]                           |         r3 = *(0x11d4c);
    0x00011be0 ldrb r2, [r3]                                 |         r2 = *(r3);
    0x00011be4 ldr r3, [fp, -0x44]                           |         r3 = var_44h;
    0x00011be8 and r2, r2, 6                                 |         r2 &= 6;
    0x00011bec cmp r5, r3                                    |         
                                                             |         if (r5 >= r3) {
    0x00011bf0 bge 0x123d8                                   |             goto label_80;
                                                             |         }
    0x00011bf4 ldr r3, [fp, -0x40]                           |         r3 = var_40h;
    0x00011bf8 str sp, [fp, -0x1d8]                          |         var_1d8h = sp;
    0x00011bfc add r3, r3, 7                                 |         r3 += 7;
    0x00011c00 bic r3, r3, 7                                 |         r3 = BIT_MASK (r3, 7);
    0x00011c04 sub sp, sp, r3                                |         
    0x00011c08 cmp r2, 0                                     |         
    0x00011c0c add r4, sp, 0x18                              |         r4 += buf;
                                                             |         if (r2 == 0) {
    0x00011c10 bne 0x11c54                                   |             
    0x00011c14 add r0, r5, 1                                 |             r0 = r5 + 1;
    0x00011c18 mov r1, 0x64                                  |             r1 = 0x64;
    0x00011c1c smull r8, sb, r0, r1                          |             r8:sb = r0 * r1;
    0x00011c20 ldr r2, [fp, -0x1e0]                          |             r2 = var_1e0h;
    0x00011c24 mov r0, r8                                    |             r0 = r8;
    0x00011c28 asr r3, r2, 0x1f                              |             r3 = r2 >> 0x1f;
    0x00011c2c mov r1, sb                                    |             r1 = sb;
    0x00011c30 bl 0x19ad0                                    |             fcn_00019ad0 (r0);
    0x00011c34 mov r3, r1                                    |             r3 = r1;
    0x00011c38 mov r2, r0                                    |             r2 = r0;
    0x00011c3c mov r1, r5                                    |             r1 = r5;
    0x00011c40 ldr r0, [pc, 0x21c]                           |             r0 = "%s: will write %d eraseblocks\n";
    0x00011c44 bl 0x10bbc                                    |             printf ("%s: will write %d eraseblocks\n", r1, r2, r3);
    0x00011c48 ldr r3, [pc, 0x244]                           |             r3 = "__write_data";
    0x00011c4c ldr r0, [r3]                                  |             r0 = "__write_data";
    0x00011c50 bl 0x10c40                                    |             fflush ("__write_data");
                                                             |         }
    0x00011c54 ldr r3, [fp, -0x1cc]                          |         r3 = var_1cch;
    0x00011c58 lsl sl, r5, 2                                 |         sl = r5 << 2;
    0x00011c5c ldr r3, [r3]                                  |         r3 = *(r3);
    0x00011c60 ldr r3, [r3, r5, lsl 2]                       |         offset_2 = r5 << 2;
                                                             |         r3 = *((r3 + offset_2));
    0x00011c64 cmn r3, 4                                     |         
                                                             |         if (r3 != 4) {
    0x00011c68 ldreq r3, [fp, -0x1e0]                        |             r3 = var_1e0h;
                                                             |         }
                                                             |         if (r3 != 4) {
    0x00011c6c addeq r3, r3, 1                               |             r3++;
                                                             |         }
                                                             |         if (r3 != 4) {
    0x00011c70 streq r3, [fp, -0x1e0]                        |             var_1e0h = r3;
                                                             |         }
                                                             |         if (r3 == 4) {
    0x00011c74 beq 0x123c8                                   |             goto label_81;
                                                             |         }
    0x00011c78 ldr r3, [pc, 0xd0]                            |         r3 = *(0x11d4c);
    0x00011c7c ldrb r3, [r3]                                 |         r3 = *(r3);
    0x00011c80 tst r3, 4                                     |         
                                                             |         if ((r3 & 4) != 0) {
    0x00011c84 beq 0x11ca4                                   |             
    0x00011c88 mov r2, r5                                    |             r2 = r5;
    0x00011c8c ldr r1, [pc, 0x208]                           |             r1 = stderr;
    0x00011c90 ldr r0, [pc, 0x1d0]                           |             r0 = "ubiformat:_flashing_eraseblock__d_____2lld____complete__";
    0x00011c94 bl 0x10bbc                                    |             printf ("ubiformat:_flashing_eraseblock__d_____2lld____complete__", r1, r2);
    0x00011c98 ldr r3, [pc, 0x1f4]                           |             r3 = "__write_data";
    0x00011c9c ldr r0, [r3]                                  |             r0 = "__write_data";
    0x00011ca0 bl 0x10c40                                    |             fflush ("__write_data");
                                                             |         }
    0x00011ca4 ldr r8, [pc, 0xa4]                            |         r8 = *(0x11d4c);
    0x00011ca8 mov r3, r5                                    |         r3 = r5;
    0x00011cac ldr r2, [r8, 0x30]                            |         r2 = "%s: error!: %s: unable to parse the number '%s'\n";
    0x00011cb0 sub r1, fp, 0x124                             |         r1 -= endptr;
    0x00011cb4 ldr r0, [fp, -0x1c8]                          |         r0 = var_1c8h;
    0x00011cb8 bl 0x177c0                                    |         r0 = fcn_000177c0 ();
    0x00011cbc cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x00011cc0 beq 0x11eb0                                   |             goto label_82;
                                                             |         }
    0x00011cc4 ldrb r3, [r8]                                 |         r3 = *(r8);
    0x00011cc8 tst r3, 2                                     |         
                                                             |         if ((r3 & 2) == 0) {
    0x00011ccc bne 0x11cd8                                   |             
    0x00011cd0 mov r0, 0xa                                   |             r0 = 0xa;
    0x00011cd4 bl 0x10b98                                    |             r0 = putchar (r0);
                                                             |         }
    0x00011cd8 bl 0x10d78                                    |         errno_location ();
    0x00011cdc ldr sb, [pc, 0x7c]                            |         sb = obj.stderr;
    0x00011ce0 mov r3, r5                                    |         r3 = r5;
    0x00011ce4 ldr r2, [pc, 0x1b0]                           |         r2 = stderr;
    0x00011ce8 ldr r1, [pc, 0x17c]                           |         r1 = "_s:_eraseblock__d:_erase";
    0x00011cec ldr r8, [r0]                                  |         r8 = *(r0);
    0x00011cf0 mov r4, r0                                    |         r4 = r0;
    0x00011cf4 ldr r0, [sb]                                  |         r0 = *(sb);
    0x00011cf8 bl 0x10c7c                                    |         fprintf (r0, "_s:_eraseblock__d:_erase", r2, r3, r4)
    0x00011cfc mov r0, r8                                    |         r0 = r8;
    0x00011d00 ldr sb, [sb]                                  |         sb = *(sb);
    0x00011d04 bl 0x10bc8                                    |         strerror (r0);
    0x00011d08 ldr r3, [pc, 0x194]                           |         r3 = "%s: error!: cannot write eraseblock %d\n";
    0x00011d0c str r8, [sp]                                  |         *(sp) = r8;
    0x00011d10 mov r2, 0xb                                   |         r2 = 0xb;
    0x00011d14 ldr r1, [pc, 0x18c]                           |         r1 = *(0x11ea4);
    0x00011d18 str r0, [sp, 4]                               |         var_4h = r0;
    0x00011d1c mov r0, sb                                    |         r0 = sb;
    0x00011d20 bl 0x10c7c                                    |         fprintf (r0, r1, r2, "%s: error!: cannot write eraseblock %d\n")
    0x00011d24 ldr r3, [r4]                                  |         r3 = *(r4);
    0x00011d28 cmp r3, 5                                     |         
                                                             |         if (r3 == 5) {
    0x00011d2c bne 0x11d48                                   |             
    0x00011d30 mov r2, r5                                    |             r2 = r5;
    0x00011d34 ldr r1, [fp, -0x1cc]                          |             r1 = var_1cch;
    0x00011d38 sub r0, fp, 0x124                             |             r0 -= endptr;
    0x00011d3c bl 0x126e4                                    |             r0 = fcn_000126e4 (r0, r1);
    0x00011d40 cmp r0, 0                                     |             
                                                             |             if (r0 == 0) {
    0x00011d44 beq 0x123c8                                   |                 goto label_81;
                                                             |             }
                                                             |         }
                                                             | label_21:
    0x00011d48 ldr sp, [fp, -0x1d8]                          |         sp = var_1d8h;
    0x00011d4c b 0x11b68                                     |         
                                                             |     } while (1);
                                                             | label_82:
    0x00011eb0 cmp r7, 0                                     |     
                                                             |     if (r7 != 0) {
    0x00011eb4 ldreq r7, [fp, -0x40]                         |         r7 = var_40h;
                                                             |     }
                                                             |     if (r7 != 0) {
    0x00011eb8 moveq sb, r4                                  |         sb = r4;
                                                             |     }
    0x00011ebc beq 0x12010                                   |     
                                                             |     while (r7 == 0) {
    0x00011ec0 ldr r1, [pc, -0x1c]                           |         r1 = *(0x00011eac);
    0x00011ec4 ldrb r3, [r1]                                 |         r3 = *(r1);
    0x00011ec8 ands r2, r3, 8                                |         r2 = r3 & 8;
                                                             |         if (r2 == r3) {
    0x00011ecc ldrne r7, [r1, 0x20]                          |             r7 = *((r1 + 0x20));
                                                             |         }
                                                             |         if (r2 == r3) {
    0x00011ed0 ldrne sl, [r1, 0x24]                          |             sl = *((r1 + 0x24));
                                                             |         }
                                                             |         if (r2 == r3) {
    0x00011ed4 bne 0x11efc                                   |             
    0x00011ed8 ldr r1, [fp, -0x1cc]                          |             r1 = var_1cch;
    0x00011edc ldr r1, [r1]                                  |             r1 = *(r1);
    0x00011ee0 ldr r7, [r1, sl]                              |             r7 = *((r1 + sl));
    0x00011ee4 cmp r7, 0                                     |             
                                                             |             if (r7 >= 0) {
    0x00011ee8 ldrlt r2, [fp, -0x1cc]                        |                 r2 = var_1cch;
                                                             |             }
                                                             |             if (r7 < 0) {
    0x00011eec addge r7, r7, 1                               |                 r7++;
                                                             |             }
                                                             |             if (r7 >= 0) {
    0x00011ef0 ldrlt r7, [r2, 8]                             |                 r7 = *((r2 + 8));
                                                             |             }
                                                             |             if (r7 >= 0) {
    0x00011ef4 ldrlt sl, [r2, 0xc]                           |                 sl = *((r2 + 0xc));
                                                             |             }
                                                             |             if (r7 >= 0) {
    0x00011ef8 movge sl, r2                                  |                 sl = r2;
                                                             |                 goto label_83;
                                                             |             }
                                                             |         }
                                                             | label_83:
    0x00011efc tst r3, 4                                     |         
                                                             |         if ((r3 & 4) != 0) {
    0x00011f00 beq 0x11f20                                   |             
    0x00011f04 mov r3, sl                                    |             r3 = sl;
    0x00011f08 mov r2, r7                                    |             r2 = r7;
    0x00011f0c ldr r0, [pc, -0xa4]                           |             r0 = ", change EC to %lld";
    0x00011f10 bl 0x10bbc                                    |             printf (", change EC to %lld", r1, r2, r3);
    0x00011f14 ldr r3, [pc, -0x88]                           |             r3 = obj.stdout;
    0x00011f18 ldr r0, [r3]                                  |             r0 = *(r3);
    0x00011f1c bl 0x10c40                                    |             fflush (r0);
                                                             |         }
    0x00011f20 ldrb r3, [r4, 1]                              |         r3 = var_1h;
    0x00011f24 ldrb r2, [r4]                                 |         r2 = *(r4);
    0x00011f28 ldr r8, [fp, -0x190]                          |         r8 = var_190h;
    0x00011f2c orr r2, r2, r3, lsl 8                         |         r2 |= (r3 << 8);
    0x00011f30 ldrb r3, [r4, 2]                              |         r3 = var_2h;
    0x00011f34 orr r2, r2, r3, lsl 16                        |         r2 |= (r3 << 16);
    0x00011f38 ldrb r3, [r4, 3]                              |         r3 = var_3h;
    0x00011f3c orr r2, r2, r3, lsl 24                        |         r2 |= (r3 << 24);
    0x00011f40 lsr r3, r2, 0x18                              |         r3 = r2 >> 0x18;
    0x00011f44 lsl r1, r2, 8                                 |         r1 = r2 << 8;
    0x00011f48 orr r3, r3, r2, lsl 24                        |         r3 |= (r2 << 24);
    0x00011f4c and r1, r1, 0xff0000                          |         r1 &= 0xff0000;
    0x00011f50 lsr r2, r2, 8                                 |         r2 >>= 8;
    0x00011f54 and r2, r2, 0xff00                            |         r2 &= 0xff00;
    0x00011f58 orr r3, r3, r1                                |         r3 |= r1;
    0x00011f5c orr r3, r3, r2                                |         r3 |= r2;
    0x00011f60 ldr r2, [pc, -0xf4]                           |         r2 = *(0x00011e74);
    0x00011f64 cmp r3, r2                                    |         
                                                             |         if (r3 == r2) {
    0x00011f68 beq 0x120a0                                   |             goto label_84;
                                                             |         }
    0x00011f6c str r2, [sp]                                  |         *(sp) = r2;
    0x00011f70 ldr r1, [pc, -0x100]                          |         r1 = "%s: error!: bad UBI magic %#08x, should be %#08x\n";
    0x00011f74 ldr r2, [pc, -0xe0]                           |         r2 = "ubiformat";
                                                             | label_23:
    0x00011f78 ldr r0, [pc, -0xe8]                           |         r0 = obj.stderr;
    0x00011f7c ldr r0, [r0]                                  |         r0 = *(r0);
    0x00011f80 bl 0x10c7c                                    |         fprintf (r0, "%s: error!: bad UBI magic %#08x, should be %#08x\n", r2)
    0x00011f84 ldr r3, [pc, -0xe0]                           |         r3 = *(0x00011eac);
    0x00011f88 ldr r0, [pc, -0xf8]                           |         r0 = obj.stderr;
    0x00011f8c ldr r3, [r3, 0x28]                            |         r3 = *((r3 + 0x28));
    0x00011f90 ldr r2, [pc, -0xfc]                           |         r2 = "ubiformat";
    0x00011f94 str r3, [sp]                                  |         *(sp) = r3;
    0x00011f98 ldr r3, [fp, -0x1d4]                          |         r3 = var_1d4h;
    0x00011f9c ldr r1, [pc, -0x128]                          |         r1 = "_s:_error_:_bad_EC_header_at_eraseblock__d_of___s_";
    0x00011fa0 ldr r0, [r0]                                  |         r0 = *(r0);
    0x00011fa4 bl 0x10c7c                                    |         fprintf (r0, "_s:_error_:_bad_EC_header_at_eraseblock__d_of___s_", "ubiformat", r3)
    0x00011fa8 b 0x11d48                                     |         goto label_21;
                                                             |         if (r3 <= r2) {
                                                             | label_22:
    0x00011fac addgt sb, sb, r0                              |             sb += r0;
                                                             |         }
                                                             |         if (r3 <= r2) {
    0x00011fb0 subgt r7, r7, r0                              |             r7 -= r0;
                                                             |         }
                                                             |         if (r3 <= r2) {
    0x00011fb4 bgt 0x12010                                   |             
    0x00011fb8 bl 0x10d78                                    |             r0 = errno_location ();
    0x00011fbc ldr r8, [r0]                                  |             r8 = *(r0);
    0x00011fc0 cmp r8, 0xb                                   |             
    0x00011fc4 cmpne r8, 4                                   |             __asm ("cmpne r8, 4");
                                                             |             if (r8 == 0xb) {
    0x00011fc8 beq 0x12010                                   |                 goto label_85;
                                                             |             }
    0x00011fcc ldr r4, [pc, -0x13c]                          |             r4 = obj.stderr;
    0x00011fd0 mov r3, r7                                    |             r3 = r7;
    0x00011fd4 ldr r2, [pc, -0x140]                          |             r2 = "ubiformat";
    0x00011fd8 ldr r1, [pc, -0x160]                          |             r1 = "_s:_error_:_reading_failed___zu_bytes_remaining";
    0x00011fdc ldr r0, [r4]                                  |             r0 = *(r4);
    0x00011fe0 bl 0x10c7c                                    |             fprintf (r0, "_s:_error_:_reading_failed___zu_bytes_remaining", "ubiformat", r3, r4)
    0x00011fe4 mov r0, r8                                    |             r0 = r8;
    0x00011fe8 ldr r4, [r4]                                  |             r4 = *(r4);
    0x00011fec bl 0x10bc8                                    |             strerror (r0);
    0x00011ff0 str r8, [sp]                                  |             *(sp) = r8;
    0x00011ff4 ldr r3, [pc, -0x158]                          |             r3 = *(0x00011ea4);
    0x00011ff8 mov r2, 0xb                                   |             r2 = 0xb;
    0x00011ffc ldr r1, [pc, -0x15c]                          |             r1 = "_serror__d___s_";
    0x00012000 str r0, [sp, 4]                               |             var_4h = r0;
    0x00012004 mov r0, r4                                    |             r0 = r4;
    0x00012008 bl 0x10c7c                                    |             fprintf (r0, "_serror__d___s_", r2, r3)
    0x0001200c b 0x12048                                     |             goto label_86;
                                                             |         }
                                                             | label_85:
    0x00012010 cmp r7, 0                                     |         
    0x00012014 beq 0x11ec0                                   |         
                                                             |     }
    0x00012018 mov r2, r7                                    |     r2 = r7;
    0x0001201c mov r1, sb                                    |     r1 = sb;
    0x00012020 ldr r0, [fp, -0x1d0]                          |     r0 = fildes;
    0x00012024 bl 0x10cac                                    |     r0 = read (r0, r1, r2);
    0x00012028 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001202c bne 0x11fac                                   |         goto label_22;
                                                             |     }
    0x00012030 ldr r0, [pc, -0x1a0]                          |     r0 = obj.stderr;
    0x00012034 mov r3, r7                                    |     r3 = r7;
    0x00012038 ldr r2, [pc, -0x1a4]                          |     r2 = "ubiformat";
    0x0001203c ldr r1, [pc, -0x1c0]                          |     r1 = "_s:_error_:_eof_reached___zu_bytes_remaining";
    0x00012040 ldr r0, [r0]                                  |     r0 = *(r0);
    0x00012044 bl 0x10c7c                                    |     r0 = fprintf (r0, "_s:_error_:_eof_reached___zu_bytes_remaining", "ubiformat", r3)
                                                             | label_86:
    0x00012048 bl 0x10d78                                    |     errno_location ();
    0x0001204c ldr r3, [pc, -0x1a8]                          |     r3 = *(0x00011eac);
    0x00012050 ldr r5, [pc, -0x1c0]                          |     r5 = obj.stderr;
    0x00012054 ldr r3, [r3, 0x28]                            |     r3 = *((r3 + 0x28));
    0x00012058 ldr r2, [pc, -0x1c4]                          |     r2 = "ubiformat";
    0x0001205c ldr r1, [pc, -0x1dc]                          |     r1 = "%s: error!: failed to read eraseblock %d from \"%s\"\n";
    0x00012060 ldr r4, [r0]                                  |     r4 = *(r0);
    0x00012064 str r3, [sp]                                  |     *(sp) = r3;
    0x00012068 ldr r3, [fp, -0x1d4]                          |     r3 = var_1d4h;
    0x0001206c ldr r0, [r5]                                  |     r0 = *(r5);
    0x00012070 bl 0x10c7c                                    |     fprintf (r0, "%s: error!: failed to read eraseblock %d from \"%s\"\n", "ubiformat", r3, r4, r5)
    0x00012074 mov r0, r4                                    |     r0 = r4;
    0x00012078 ldr r5, [r5]                                  |     r5 = *(r5);
    0x0001207c bl 0x10bc8                                    |     strerror (r0);
    0x00012080 str r4, [sp]                                  |     *(sp) = r4;
    0x00012084 ldr r3, [pc, -0x1e8]                          |     r3 = *(0x00011ea4);
    0x00012088 mov r2, 0xb                                   |     r2 = 0xb;
    0x0001208c ldr r1, [pc, -0x1ec]                          |     r1 = "_serror__d___s_";
    0x00012090 str r0, [sp, 4]                               |     var_4h = r0;
    0x00012094 mov r0, r5                                    |     r0 = r5;
    0x00012098 bl 0x10c7c                                    |     fprintf (r0, "_serror__d___s_", r2, r3, r4)
    0x0001209c b 0x11d48                                     |     goto label_21;
                                                             | label_84:
    0x000120a0 mov r2, 0x3c                                  |     r2 = 0x3c;
    0x000120a4 mov r1, r4                                    |     r1 = r4;
    0x000120a8 mvn r0, 0                                     |     r0 = ~0;
    0x000120ac bl 0x18624                                    |     fcn_00018624 (r0);
    0x000120b0 ldrb r2, [r4, 0x3d]                           |     r2 = var_3dh;
    0x000120b4 ldrb r1, [r4, 0x3c]                           |     r1 = var_1b0h;
    0x000120b8 orr r1, r1, r2, lsl 8                         |     r1 |= (r2 << 8);
    0x000120bc ldrb r2, [r4, 0x3e]                           |     r2 = var_3eh;
    0x000120c0 orr r1, r1, r2, lsl 16                        |     r1 |= (r2 << 16);
    0x000120c4 ldrb r2, [r4, 0x3f]                           |     r2 = var_3fh;
    0x000120c8 orr r1, r1, r2, lsl 24                        |     r1 |= (r2 << 24);
    0x000120cc lsr r2, r1, 0x18                              |     r2 = r1 >> 0x18;
    0x000120d0 orr r2, r2, r1, lsl 24                        |     r2 |= (r1 << 24);
    0x000120d4 mov r3, r0                                    |     r3 = r0;
    0x000120d8 lsl r0, r1, 8                                 |     r0 = r1 << 8;
    0x000120dc and r0, r0, 0xff0000                          |     r0 &= 0xff0000;
    0x000120e0 lsr r1, r1, 8                                 |     r1 >>= 8;
    0x000120e4 orr r2, r2, r0                                |     r2 |= r0;
    0x000120e8 and r1, r1, 0xff00                            |     r1 &= 0xff00;
    0x000120ec orr r2, r2, r1                                |     r2 |= r1;
    0x000120f0 cmp r3, r2                                    |     
                                                             |     if (r3 == r2) {
    0x000120f4 strne r2, [sp]                                |         *(sp) = r2;
                                                             |     }
                                                             |     if (r3 == r2) {
    0x000120f8 ldrne r1, [pc, -0x274]                        |         r1 = "%s: error!: bad CRC %#08x, should be %#08x\n\n";
                                                             |     }
                                                             |     if (r3 != r2) {
    0x000120fc ldrne r2, [pc, -0x268]                        |         r2 = "ubiformat";
                                                             |         goto label_87;
                                                             |     }
                                                             |     if (r3 != r2) {
                                                             | label_87:
    0x00012100 bne 0x11f78                                   |         goto label_23;
                                                             |     }
    0x00012104 lsr r3, r8, 0x18                              |     r3 = r8 >> 0x18;
    0x00012108 lsl r2, r8, 8                                 |     r2 = r8 << 8;
    0x0001210c orr r3, r3, r8, lsl 24                        |     r3 |= (r8 << 24);
    0x00012110 and r2, r2, 0xff0000                          |     r2 &= 0xff0000;
    0x00012114 lsr r8, r8, 8                                 |     r8 >>= 8;
    0x00012118 orr r3, r3, r2                                |     r3 |= r2;
    0x0001211c and r8, r8, 0xff00                            |     r8 &= 0xff00;
    0x00012120 orr r3, r3, r8                                |     r3 |= r8;
    0x00012124 lsr r2, r3, 8                                 |     r2 = r3 >> 8;
    0x00012128 mov ip, 0                                     |     
    0x0001212c strb r3, [r4, 0x18]                           |     var_1d4h = r3;
    0x00012130 strb r2, [r4, 0x19]                           |     var_19h = r2;
    0x00012134 lsl r1, r7, 0x18                              |     r1 = r7 << 0x18;
    0x00012138 lsr r2, r3, 0x10                              |     r2 = r3 >> 0x10;
    0x0001213c lsr r3, r3, 0x18                              |     r3 >>= 0x18;
    0x00012140 strb r3, [r4, 0x1b]                           |     var_1bh = r3;
    0x00012144 orr r3, ip, r1                                |     r3 = ip | r1;
    0x00012148 lsl r1, r7, 8                                 |     r1 = r7 << 8;
    0x0001214c and sb, r1, 0xff0000                          |     sb = r1 & 0xff0000;
    0x00012150 orr r1, r3, sb                                |     r1 = r3 | sb;
    0x00012154 lsr r8, sl, 0x18                              |     r8 = sl >> 0x18;
    0x00012158 lsl r3, sl, 0x18                              |     r3 = sl << 0x18;
    0x0001215c strb r2, [r4, 0x1a]                           |     var_1ah = r2;
    0x00012160 orr r3, r3, r7, lsr 8                         |     r3 |= (r7 >> 8);
    0x00012164 orr r2, r8, ip                                |     r2 = r8 | ip;
    0x00012168 mov r8, 0                                     |     r8 = 0;
    0x0001216c orr r0, r2, r8                                |     r0 = r2 | r8;
    0x00012170 and sb, r3, 0xff00                            |     sb = r3 & 0xff00;
    0x00012174 mov r8, 0                                     |     r8 = 0;
    0x00012178 orr r3, r1, sb                                |     r3 = r1 | sb;
    0x0001217c orr r2, r0, r8                                |     r2 = r0 | r8;
    0x00012180 lsl sb, sl, 8                                 |     sb = sl << 8;
    0x00012184 mov r0, 0                                     |     r0 = 0;
    0x00012188 orr r8, r2, r0                                |     r8 = r2 | r0;
    0x0001218c orr sb, sb, r7, lsr 24                        |     sb |= (r7 >> 24);
    0x00012190 and r1, sb, 0xff                              |     r1 = sb & 0xff;
    0x00012194 mov r2, r8                                    |     r2 = r8;
    0x00012198 lsr r8, r7, 8                                 |     r8 = r7 >> 8;
    0x0001219c orr sb, r3, r1                                |     sb = r3 | r1;
    0x000121a0 orr r8, r8, sl, lsl 24                        |     r8 |= (sl << 24);
    0x000121a4 and r0, r8, 0xff000000                        |     r0 = r8 & 0xff000000;
    0x000121a8 mov r3, sb                                    |     r3 = sb;
    0x000121ac mov r1, 0                                     |     r1 = 0;
    0x000121b0 orr r2, r2, r0                                |     r2 |= r0;
    0x000121b4 orr r3, r3, r1                                |     r3 |= r1;
    0x000121b8 lsr r0, r7, 0x18                              |     r0 = r7 >> 0x18;
    0x000121bc sub r1, fp, 0x1ec                             |     r1 -= buf;
    0x000121c0 strd r2, r3, [r1]                             |     __asm ("strd r2, r3, [r1]");
    0x000121c4 orr r0, r0, sl, lsl 8                         |     r0 |= (sl << 8);
    0x000121c8 mov r3, 0                                     |     r3 = 0;
    0x000121cc mov r1, r3                                    |     r1 = r3;
    0x000121d0 and r2, r0, 0xff0000                          |     r2 = r0 & 0xff0000;
    0x000121d4 sub r3, fp, 0x1ec                             |     r3 -= buf;
    0x000121d8 mov r0, r2                                    |     r0 = r2;
    0x000121dc ldrd r2, r3, [r3]                             |     __asm ("ldrd r2, r3, [r3]");
    0x000121e0 lsr sb, sl, 8                                 |     sb = sl >> 8;
    0x000121e4 orr r2, r2, r0                                |     r2 |= r0;
    0x000121e8 mov r0, r2                                    |     r0 = r2;
    0x000121ec orr r3, r3, r1                                |     r3 |= r1;
    0x000121f0 and r2, sb, 0xff00                            |     r2 = sb & 0xff00;
    0x000121f4 orr r8, r0, r2                                |     r8 = r0 | r2;
    0x000121f8 mov r1, r3                                    |     r1 = r3;
    0x000121fc mov r3, 0                                     |     r3 = 0;
    0x00012200 orr sb, r1, r3                                |     sb = r1 | r3;
    0x00012204 lsr r3, r8, 8                                 |     r3 = r8 >> 8;
    0x00012208 strb r3, [r4, 9]                              |     var_9h = r3;
    0x0001220c lsr r3, r8, 0x10                              |     r3 = r8 >> 0x10;
    0x00012210 strb r3, [r4, 0xa]                            |     var_ah = r3;
    0x00012214 lsr r3, r8, 0x18                              |     r3 = r8 >> 0x18;
    0x00012218 strb r3, [r4, 0xb]                            |     var_bh = r3;
    0x0001221c lsr r3, sb, 8                                 |     r3 = sb >> 8;
    0x00012220 strb r3, [r4, 0xd]                            |     var_dh = r3;
    0x00012224 lsr r3, sb, 0x10                              |     r3 = sb >> 0x10;
    0x00012228 strb r3, [r4, 0xe]                            |     var_eh = r3;
    0x0001222c lsr r3, sb, 0x18                              |     r3 = sb >> 0x18;
    0x00012230 strb r3, [r4, 0xf]                            |     var_fh = r3;
    0x00012234 mov r2, 0x3c                                  |     r2 = 0x3c;
    0x00012238 strb r8, [r4, 8]                              |     var_8h_2 = r8;
    0x0001223c strb sb, [r4, 0xc]                            |     var_1e0h = sb;
    0x00012240 mov r1, r4                                    |     r1 = r4;
    0x00012244 mvn r0, 0                                     |     r0 = ~0;
    0x00012248 bl 0x18624                                    |     r0 = fcn_00018624 (r0);
    0x0001224c lsr r3, r0, 0x18                              |     r3 = r0 >> 0x18;
    0x00012250 lsl r2, r0, 8                                 |     r2 = r0 << 8;
    0x00012254 orr r3, r3, r0, lsl 24                        |     r3 |= (r0 << 24);
    0x00012258 and r2, r2, 0xff0000                          |     r2 &= 0xff0000;
    0x0001225c lsr r0, r0, 8                                 |     r0 >>= 8;
    0x00012260 orr r3, r3, r2                                |     r3 |= r2;
    0x00012264 and r0, r0, 0xff00                            |     r0 &= 0xff00;
    0x00012268 orr r0, r3, r0                                |     r0 = r3 | r0;
    0x0001226c lsr r3, r0, 8                                 |     r3 = r0 >> 8;
    0x00012270 strb r3, [r4, 0x3d]                           |     var_3dh = r3;
    0x00012274 lsr r3, r0, 0x10                              |     r3 = r0 >> 0x10;
    0x00012278 strb r3, [r4, 0x3e]                           |     var_3eh = r3;
    0x0001227c ldr r3, [pc, -0x3d8]                          |     r3 = *(0x00011eac);
    0x00012280 strb r0, [r4, 0x3c]                           |     var_1b0h = r0;
    0x00012284 ldrb r3, [r3]                                 |     r3 = *(r3);
    0x00012288 lsr r0, r0, 0x18                              |     r0 >>= 0x18;
    0x0001228c tst r3, 4                                     |     
    0x00012290 strb r0, [r4, 0x3f]                           |     var_3fh = r0;
                                                             |     if ((r3 & 4) != 0) {
    0x00012294 beq 0x122ac                                   |         
    0x00012298 ldr r0, [pc, -0x410]                          |         r0 = "__write_data";
    0x0001229c bl 0x10c1c                                    |         puts ("__write_data");
    0x000122a0 ldr r3, [pc, -0x414]                          |         r3 = obj.stdout;
    0x000122a4 ldr r0, [r3]                                  |         r0 = *(r3);
    0x000122a8 bl 0x10c40                                    |         fflush (r0);
                                                             |     }
    0x000122ac ldr r0, [fp, -0x40]                           |     r0 = var_40h;
                                                             |     do {
    0x000122b0 sub r0, r0, 1                                 |         r0--;
    0x000122b4 cmp r0, 0                                     |         
                                                             |         if (r0 < 0) {
    0x000122b8 blt 0x122c8                                   |             goto label_88;
                                                             |         }
    0x000122bc ldrb r3, [r4, r0]                             |         r3 = *((r4 + r0));
    0x000122c0 cmp r3, 0xff                                  |         
    0x000122c4 beq 0x122b0                                   |         
                                                             |     } while (r3 == 0xff);
                                                             | label_88:
    0x000122c8 ldr r7, [fp, -0x3c]                           |     r7 = var_3ch;
    0x000122cc mov r1, r7                                    |     r1 = r7;
    0x000122d0 add r0, r0, r7                                |     r0 += r7;
    0x000122d4 bl 0x199d4                                    |     fcn_000199d4 (r0, r1);
    0x000122d8 mov r3, 0                                     |     r3 = 0;
    0x000122dc str r3, [sp, 0x14]                            |     var_14h = r3;
    0x000122e0 str r3, [sp, 0x10]                            |     var_10h = r3;
    0x000122e4 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x000122e8 stm sp, {r3, r4}                              |     *(sp) = r3;
                                                             |     *((sp + 4)) = r4;
    0x000122ec sub r1, fp, 0x124                             |     r1 -= endptr;
    0x000122f0 mov r3, r5                                    |     r3 = r5;
    0x000122f4 mul r2, r7, r0                                |     r2 = r7 * r0;
    0x000122f8 str r2, [sp, 8]                               |     var_8h = r2;
    0x000122fc ldr r2, [pc, -0x458]                          |     r2 = *(0x00011eac);
    0x00012300 ldr r0, [fp, -0x1c8]                          |     r0 = var_1c8h;
    0x00012304 ldr r2, [r2, 0x30]                            |     r2 = *((r2 + 0x30));
    0x00012308 bl 0x17c0c                                    |     r0 = fcn_00017c0c (r0, r1, r2, r3, r4, r5, r6);
    0x0001230c subs r7, r0, 0                                |     r7 = r0 - 0;
                                                             |     if (r7 == r0) {
    0x00012310 beq 0x123ac                                   |         goto label_89;
                                                             |     }
    0x00012314 bl 0x10d78                                    |     errno_location ();
    0x00012318 ldr r8, [pc, -0x488]                          |     r8 = obj.stderr;
    0x0001231c mov r3, r5                                    |     r3 = r5;
    0x00012320 ldr r2, [pc, -0x48c]                          |     r2 = "ubiformat";
    0x00012324 ldr r1, [pc, -0x48c]                          |     r1 = "%s: error!: cannot write eraseblock %d\n";
    0x00012328 ldr r7, [r0]                                  |     r7 = *(r0);
    0x0001232c mov r4, r0                                    |     r4 = r0;
    0x00012330 ldr r0, [r8]                                  |     r0 = *(r8);
    0x00012334 bl 0x10c7c                                    |     fprintf (r0, "%s: error!: cannot write eraseblock %d\n", "ubiformat", r3, r4)
    0x00012338 mov r0, r7                                    |     r0 = r7;
    0x0001233c ldr r8, [r8]                                  |     r8 = *(r8);
    0x00012340 bl 0x10bc8                                    |     strerror (r0);
    0x00012344 ldr r3, [pc, -0x4a8]                          |     r3 = *(0x00011ea4);
    0x00012348 str r7, [sp]                                  |     *(sp) = r7;
    0x0001234c mov r2, 0xb                                   |     r2 = 0xb;
    0x00012350 ldr r1, [pc, -0x4b0]                          |     r1 = "_serror__d___s_";
    0x00012354 str r0, [sp, 4]                               |     var_4h = r0;
    0x00012358 mov r0, r8                                    |     r0 = r8;
    0x0001235c bl 0x10c7c                                    |     fprintf (r0, "_serror__d___s_", r2, r3)
    0x00012360 ldr r3, [r4]                                  |     r3 = *(r4);
    0x00012364 cmp r3, 5                                     |     
                                                             |     if (r3 != 5) {
    0x00012368 bne 0x11d48                                   |         goto label_21;
                                                             |     }
    0x0001236c ldr r2, [pc, -0x4c8]                          |     r2 = *(0x00011eac);
    0x00012370 mov r3, r5                                    |     r3 = r5;
    0x00012374 ldr r2, [r2, 0x30]                            |     r2 = *((r2 + 0x30));
    0x00012378 sub r1, fp, 0x124                             |     r1 -= endptr;
    0x0001237c ldr r0, [fp, -0x1c8]                          |     r0 = var_1c8h;
    0x00012380 bl 0x17fdc                                    |     r0 = fcn_00017fdc (r0, r1);
    0x00012384 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00012388 beq 0x123a4                                   |         goto label_90;
                                                             |     }
    0x0001238c mov r2, r5                                    |     r2 = r5;
    0x00012390 ldr r1, [fp, -0x1cc]                          |     r1 = var_1cch;
    0x00012394 sub r0, fp, 0x124                             |     r0 -= endptr;
    0x00012398 bl 0x126e4                                    |     r0 = fcn_000126e4 (r0, r1);
    0x0001239c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000123a0 bne 0x11d48                                   |         goto label_21;
                                                             |     }
                                                             | label_90:
    0x000123a4 mov r7, 1                                     |     r7 = 1;
    0x000123a8 b 0x123c8                                     |     goto label_81;
                                                             | label_89:
    0x000123ac ldr r3, [fp, -0x1d4]                          |     r3 = var_1d4h;
    0x000123b0 add r3, r3, 1                                 |     r3++;
    0x000123b4 str r3, [fp, -0x1d4]                          |     var_1d4h = r3;
    0x000123b8 ldr r2, [fp, -0x1d4]                          |     r2 = var_1d4h;
    0x000123bc ldr r3, [fp, -0x1dc]                          |     r3 = var_1dch;
    0x000123c0 cmp r3, r2                                    |     
                                                             |     if (r3 > r2) {
    0x000123c4 ble 0x123d4                                   |         
                                                             | label_81:
    0x000123c8 ldr sp, [fp, -0x1d8]                          |         sp = var_1d8h;
    0x000123cc add r5, r5, 1                                 |         r5++;
    0x000123d0 b 0x11bdc                                     |         goto label_24;
                                                             |     }
    0x000123d4 ldr sp, [fp, -0x1d8]                          |     sp = var_1d8h;
                                                             | label_80:
    0x000123d8 ldr r3, [pc, -0x534]                          |     r3 = *(0x00011eac);
    0x000123dc ldrb r3, [r3]                                 |     r3 = *(r3);
    0x000123e0 tst r3, 6                                     |     
                                                             |     if ((r3 & 6) == 0) {
    0x000123e4 bne 0x123f0                                   |         
    0x000123e8 mov r0, 0xa                                   |         r0 = 0xa;
    0x000123ec bl 0x10b98                                    |         putchar (r0);
                                                             |     }
    0x000123f0 ldr r0, [fp, -0x1d0]                          |     r0 = fildes;
    0x000123f4 bl 0x10dcc                                    |     close (r0);
    0x000123f8 mov r3, 1                                     |     r3 = 1;
    0x000123fc add r5, r5, r3                                |     r5 += r3;
    0x00012400 str r3, [sp, 4]                               |     var_4h = r3;
    0x00012404 str r5, [sp]                                  |     *(sp) = r5;
    0x00012408 ldr r3, [fp, -0x1c4]                          |     r3 = var_1c4h;
                                                             | label_25:
    0x0001240c sub r2, fp, 0x1b0                             |     r2 -= var_1b0h;
    0x00012410 sub r1, fp, 0x124                             |     r1 -= endptr;
    0x00012414 ldr r0, [fp, -0x1c8]                          |     r0 = var_1c8h;
    0x00012418 bl 0x12838                                    |     r0 = fcn_00012838 (r0, r1, r2, r3, r4);
    0x0001241c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00012420 bne 0x115e4                                   |         goto label_13;
                                                             |     }
    0x00012424 ldr r0, [fp, -0x1c4]                          |     r0 = var_1c4h;
    0x00012428 bl 0x198f0                                    |     fcn_000198f0 (r0);
    0x0001242c ldr r3, [pc, -0x588]                          |     r3 = *(0x00011eac);
    0x00012430 mov r6, 0                                     |     r6 = 0;
    0x00012434 ldr r0, [r3, 0x30]                            |     r0 = *((r3 + 0x30));
    0x00012438 bl 0x10dcc                                    |     close (r0);
    0x0001243c ldr r0, [fp, -0x1c8]                          |     r0 = var_1c8h;
    0x00012440 bl 0x16b38                                    |     fcn_00016b38 (r0);
    0x00012444 b 0x10fac                                     |     goto label_6;
                                                             | label_73:
    0x00012448 str r5, [sp, 4]                               |     var_4h = r5;
    0x0001244c str r5, [sp]                                  |     *(sp) = r5;
    0x00012450 ldr r3, [fp, -0x1cc]                          |     r3 = var_1cch;
    0x00012454 b 0x1240c                                     |     goto label_25;
                                                             | }

[*] Function fprintf used 196 times ubiformat