
int png_write_image_8bit(png_voidp argument)

{
  ushort uVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined4 *puVar4;
  int iVar5;
  png_byte pVar6;
  uint uVar7;
  undefined4 uVar8;
  uint component;
  int iVar9;
  ushort *puVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  ushort *puVar13;
  ushort *puVar14;
  undefined1 *puVar15;
  uint uVar16;
  undefined1 *puVar17;
  int iVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  ushort *puVar24;
  undefined1 *puVar25;
  png_uint_32 reciprocal;
  
  puVar3 = PTR_png_sRGB_base_00053170;
  puVar2 = PTR_png_sRGB_delta_0005316c;
                    /* WARNING: Load size is inaccurate */
  puVar4 = *argument;
  iVar9 = 1;
  uVar7 = puVar4[4];
  puVar24 = *(ushort **)((int)argument + 0x14);
  puVar25 = *(undefined1 **)((int)argument + 0x1c);
  if ((uVar7 & 2) != 0) {
    iVar9 = 3;
  }
  uVar8 = *(undefined4 *)*puVar4;
  iVar23 = puVar4[3];
  iVar20 = puVar4[2];
  if ((uVar7 & 1) == 0) {
    if (iVar23 != 0) {
      do {
        puVar17 = puVar25;
        puVar10 = puVar24;
        if (puVar25 < puVar25 + iVar9 * iVar20) {
          do {
            puVar15 = puVar17 + 1;
            uVar7 = (uint)*puVar10 * 0xff >> 0xf;
            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)
                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);
            puVar17 = puVar15;
            puVar10 = puVar10 + 1;
          } while (puVar25 + iVar9 * iVar20 != puVar15);
        }
        iVar23 = iVar23 + -1;
        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);
        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));
      } while (iVar23 != 0);
      return 1;
    }
  }
  else {
    iVar22 = iVar9;
    if ((uVar7 & 0x20) != 0) {
      puVar24 = puVar24 + 1;
      puVar25 = puVar25 + 1;
      iVar22 = -1;
    }
    iVar21 = iVar9 + 1;
    if (iVar23 != 0) {
      do {
        if (puVar25 < puVar25 + iVar21 * iVar20) {
          iVar18 = 0x807f;
          puVar15 = puVar25 + iVar9;
          iVar19 = 0x7f7f8080;
          puVar17 = puVar25;
          puVar10 = puVar24;
          do {
            uVar1 = puVar10[iVar22];
            uVar7 = (uint)uVar1;
            iVar5 = uVar7 * 0xff + iVar18;
            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);
            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {
              if (uVar7 == 0) {
                trap(7);
              }
              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;
            }
            else {
              reciprocal = 0;
            }
            uVar16 = (uint)(uVar7 < 0x80);
            puVar11 = puVar17;
            puVar14 = puVar10;
            do {
              while( true ) {
                puVar13 = puVar14 + 1;
                component = (uint)*puVar14;
                puVar12 = puVar11 + 1;
                if (component < uVar7) break;
                pVar6 = 0xff;
LAB_00036d7c:
                puVar12[-1] = pVar6;
                puVar11 = puVar12;
                puVar14 = puVar13;
                if (puVar12 == puVar15) goto LAB_00036db4;
              }
              pVar6 = 0xff;
              if (uVar16 != 0) goto LAB_00036d7c;
              if (component != 0) {
                pVar6 = png_unpremultiply(component,uVar7,reciprocal);
                goto LAB_00036d7c;
              }
              *puVar11 = 0;
              puVar11 = puVar12;
              puVar14 = puVar13;
            } while (puVar12 != puVar15);
LAB_00036db4:
            puVar17 = puVar17 + iVar21;
            puVar10 = puVar10 + iVar21;
            puVar15 = puVar15 + iVar21;
          } while (puVar17 < puVar25 + iVar21 * iVar20);
        }
        iVar23 = iVar23 + -1;
        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));
        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));
      } while (iVar23 != 0);
    }
  }
  return 1;
}



undefined4 FUN_00036c34(int *param_1)

{
  ushort uVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined4 *puVar4;
  int iVar5;
  undefined1 uVar6;
  uint uVar7;
  undefined4 uVar8;
  uint uVar9;
  int iVar10;
  ushort *puVar11;
  undefined1 *puVar12;
  undefined1 *puVar13;
  ushort *puVar14;
  ushort *puVar15;
  undefined1 *puVar16;
  uint uVar17;
  undefined1 *puVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  ushort *puVar25;
  undefined1 *puVar26;
  
  puVar3 = PTR_DAT_00053170;
  puVar2 = PTR_DAT_0005316c;
  puVar4 = (undefined4 *)*param_1;
  iVar10 = 1;
  uVar7 = puVar4[4];
  puVar25 = (ushort *)param_1[5];
  puVar26 = (undefined1 *)param_1[7];
  if ((uVar7 & 2) != 0) {
    iVar10 = 3;
  }
  uVar8 = *(undefined4 *)*puVar4;
  iVar24 = puVar4[3];
  iVar21 = puVar4[2];
  if ((uVar7 & 1) == 0) {
    if (iVar24 != 0) {
      do {
        puVar18 = puVar26;
        puVar11 = puVar25;
        if (puVar26 < puVar26 + iVar10 * iVar21) {
          do {
            puVar16 = puVar18 + 1;
            uVar7 = (uint)*puVar11 * 0xff >> 0xf;
            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)
                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);
            puVar18 = puVar16;
            puVar11 = puVar11 + 1;
          } while (puVar26 + iVar10 * iVar21 != puVar16);
        }
        iVar24 = iVar24 + -1;
        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);
        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));
      } while (iVar24 != 0);
      return 1;
    }
  }
  else {
    iVar23 = iVar10;
    if ((uVar7 & 0x20) != 0) {
      puVar25 = puVar25 + 1;
      puVar26 = puVar26 + 1;
      iVar23 = -1;
    }
    iVar22 = iVar10 + 1;
    if (iVar24 != 0) {
      do {
        if (puVar26 < puVar26 + iVar22 * iVar21) {
          iVar19 = 0x807f;
          puVar16 = puVar26 + iVar10;
          iVar20 = 0x7f7f8080;
          puVar18 = puVar26;
          puVar11 = puVar25;
          do {
            uVar1 = puVar11[iVar23];
            uVar7 = (uint)uVar1;
            iVar5 = uVar7 * 0xff + iVar19;
            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);
            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {
              if (uVar7 == 0) {
                trap(7);
              }
              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;
            }
            else {
              iVar5 = 0;
            }
            uVar17 = (uint)(uVar7 < 0x80);
            puVar12 = puVar18;
            puVar15 = puVar11;
            do {
              while( true ) {
                puVar14 = puVar15 + 1;
                uVar9 = (uint)*puVar15;
                puVar13 = puVar12 + 1;
                if (uVar9 < uVar7) break;
                uVar6 = 0xff;
LAB_00036d7c:
                puVar13[-1] = uVar6;
                puVar12 = puVar13;
                puVar15 = puVar14;
                if (puVar13 == puVar16) goto LAB_00036db4;
              }
              uVar6 = 0xff;
              if (uVar17 != 0) goto LAB_00036d7c;
              if (uVar9 != 0) {
                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);
                goto LAB_00036d7c;
              }
              *puVar12 = 0;
              puVar12 = puVar13;
              puVar15 = puVar14;
            } while (puVar13 != puVar16);
LAB_00036db4:
            puVar18 = puVar18 + iVar22;
            puVar11 = puVar11 + iVar22;
            puVar16 = puVar16 + iVar22;
          } while (puVar18 < puVar26 + iVar22 * iVar21);
        }
        iVar24 = iVar24 + -1;
        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);
        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));
      } while (iVar24 != 0);
    }
  }
  return 1;
}


lui gp,0x2
addiu gp,gp,0x43bc
addu gp,gp,t9
lw v0,0x0(a0)
addiu sp,sp,-0x50
li a2,0x3
li a1,0x1
sw s8,0x48(sp)
sw s7,0x44(sp)
sw a0,0x50(sp)
lw v1,0x10(v0)
lw s7,0x14(a0)
lw s8,0x1c(a0)
lw a0,0x0(v0)
andi a3,v1,0x2
movn a1,a2,a3
sw s6,0x40(sp)
sw s1,0x2c(sp)
sw gp,0x10(sp)
sw ra,0x4c(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s0,0x28(sp)
sw a1,0x20(sp)
lw a0,0x0(a0)
lw s6,0xc(v0)
lw s1,0x8(v0)
andi v0,v1,0x1
beq v0,zero,0x00036e4c
_sw a0,0x1c(sp)
andi v1,v1,0x20
bne v1,zero,0x00036e2c
_nop
lw s3,0x20(sp)
lw v0,0x20(sp)
addiu s2,v0,0x1
mul v0,s2,s1
beq s6,zero,0x00036df8
_addu s1,v0,s8
lw s0,-0x7e0c(gp)
sltu v0,s8,s1
sll s5,s3,0x1
sw v0,0x24(sp)
sll s4,s2,0x1
addiu s0,s0,0x52b4
lw v0,0x24(sp)
beq v0,zero,0x00036dc8
_lw v0,0x20(sp)
lui t7,0x7f7f
ori t6,zero,0x807f
or t4,s8,zero
addu t2,s8,v0
or t5,s7,zero
ori t7,t7,0x8080
addu v0,t5,s5
addu a0,t4,s3
lhu t1,0x0(v0)
sll v0,t1,0x8
subu v0,v0,t1
addu v0,v0,t6
ext v0,v0,0x10,0x8
addiu v1,v0,-0x1
sb v0,0x0(a0)
andi v0,v1,0xff
sltiu v0,v0,0xfe
beq v0,zero,0x00036e44
_nop
srl t8,t1,0x1
addu t8,t8,t7
teq t1,zero
div t8,t1
mflo t8
or a3,t4,zero
or t0,t5,zero
b 0x00036d84
_sltiu t3,t1,0x80
or t9,s0,zero
bal 0x000352b4
_or a1,t1,zero
lw gp,0x10(sp)
beq a3,t2,0x00036db4
_sb v0,-0x1(a3)
addiu t0,t0,0x2
lhu a0,-0x2(t0)
sltu v0,a0,t1
beq v0,zero,0x00036e3c
_addiu a3,a3,0x1
bne t3,zero,0x00036d7c
_li v0,0xff
bne a0,zero,0x00036d6c
_or a2,t8,zero
or v0,zero,zero
bne a3,t2,0x00036d84
_sb v0,-0x1(a3)
addu t4,t4,s2
addu t5,t5,s4
sltu v0,t4,s1
bne v0,zero,0x00036d14
_addu t2,t2,s2
lw v0,0x50(sp)
addiu s6,s6,-0x1
lw t9,-0x7ba8(gp)
lw a0,0x1c(sp)
jalr t9
_lw a1,0x1c(v0)
lw v0,0x50(sp)
lw gp,0x10(sp)
lhu v0,0x1a(v0)
andi v0,v0,0xfffe
bne s6,zero,0x00036cf0
_addu s7,s7,v0
lw ra,0x4c(sp)
li v0,0x1
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
addiu s7,s7,0x2
addiu s8,s8,0x1
b 0x00036cc4
_li s3,-0x1
b 0x00036d7c
_li v0,0xff
b 0x00036d5c
_or t8,zero,zero
lw v0,0x20(sp)
mul v1,v0,s1
addu s1,v1,s8
beq s6,zero,0x00036df8
_sltu s0,s8,s1
lw s3,-0x7e84(gp)
lw s2,-0x7e80(gp)
beq s0,zero,0x00036ebc
_or a0,s8,zero
or a1,s7,zero
addiu a1,a1,0x2
lhu v1,-0x2(a1)
addiu a0,a0,0x1
sll v0,v1,0x8
subu v0,v0,v1
srl v1,v0,0xf
andi v0,v0,0x7fff
addu a2,s3,v1
sll v1,v1,0x1
lbu a2,0x0(a2)
addu v1,s2,v1
mul v0,v0,a2
lhu v1,0x0(v1)
srl v0,v0,0xc
addu v0,v0,v1
srl v0,v0,0x8
bne s1,a0,0x00036e74
_sb v0,-0x1(a0)
lw t9,-0x7ba8(gp)
or a1,s8,zero
lw a0,0x1c(sp)
jalr t9
_addiu s6,s6,-0x1
lw v0,0x50(sp)
lw gp,0x10(sp)
lhu v0,0x1a(v0)
andi v0,v0,0xfffe
bne s6,zero,0x00036e68
_addu s7,s7,v0
lw ra,0x4c(sp)
li v0,0x1
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
(translation_unit "undefined4 FUN_00036c34(int *param_1)\n\n{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined1 uVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  int iVar10;\n  ushort *puVar11;\n  undefined1 *puVar12;\n  undefined1 *puVar13;\n  ushort *puVar14;\n  ushort *puVar15;\n  undefined1 *puVar16;\n  uint uVar17;\n  undefined1 *puVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  ushort *puVar25;\n  undefined1 *puVar26;\n  \n  puVar3 = PTR_DAT_00053170;\n  puVar2 = PTR_DAT_0005316c;\n  puVar4 = (undefined4 *)*param_1;\n  iVar10 = 1;\n  uVar7 = puVar4[4];\n  puVar25 = (ushort *)param_1[5];\n  puVar26 = (undefined1 *)param_1[7];\n  if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar24 = puVar4[3];\n  iVar21 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }\n  return 1;\n}\n\n" (function_definition "undefined4 FUN_00036c34(int *param_1)\n\n{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined1 uVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  int iVar10;\n  ushort *puVar11;\n  undefined1 *puVar12;\n  undefined1 *puVar13;\n  ushort *puVar14;\n  ushort *puVar15;\n  undefined1 *puVar16;\n  uint uVar17;\n  undefined1 *puVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  ushort *puVar25;\n  undefined1 *puVar26;\n  \n  puVar3 = PTR_DAT_00053170;\n  puVar2 = PTR_DAT_0005316c;\n  puVar4 = (undefined4 *)*param_1;\n  iVar10 = 1;\n  uVar7 = puVar4[4];\n  puVar25 = (ushort *)param_1[5];\n  puVar26 = (undefined1 *)param_1[7];\n  if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar24 = puVar4[3];\n  iVar21 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_00036c34(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined1 uVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  int iVar10;\n  ushort *puVar11;\n  undefined1 *puVar12;\n  undefined1 *puVar13;\n  ushort *puVar14;\n  ushort *puVar15;\n  undefined1 *puVar16;\n  uint uVar17;\n  undefined1 *puVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  ushort *puVar25;\n  undefined1 *puVar26;\n  \n  puVar3 = PTR_DAT_00053170;\n  puVar2 = PTR_DAT_0005316c;\n  puVar4 = (undefined4 *)*param_1;\n  iVar10 = 1;\n  uVar7 = puVar4[4];\n  puVar25 = (ushort *)param_1[5];\n  puVar26 = (undefined1 *)param_1[7];\n  if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar24 = puVar4[3];\n  iVar21 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }\n  return 1;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined1 uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "ushort *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined1 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "undefined1 *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "ushort *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "ushort *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "undefined1 *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "undefined1 *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "int iVar23;" primitive_type identifier ;) (declaration "int iVar24;" primitive_type identifier ;) (declaration "ushort *puVar25;" type_identifier (pointer_declarator "*puVar25" * identifier) ;) (declaration "undefined1 *puVar26;" type_identifier (pointer_declarator "*puVar26" * identifier) ;) (expression_statement "puVar3 = PTR_DAT_00053170;" (assignment_expression "puVar3 = PTR_DAT_00053170" identifier = identifier) ;) (expression_statement "puVar2 = PTR_DAT_0005316c;" (assignment_expression "puVar2 = PTR_DAT_0005316c" identifier = identifier) ;) (expression_statement "puVar4 = (undefined4 *)*param_1;" (assignment_expression "puVar4 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "iVar10 = 1;" (assignment_expression "iVar10 = 1" identifier = number_literal) ;) (expression_statement "uVar7 = puVar4[4];" (assignment_expression "uVar7 = puVar4[4]" identifier = (subscript_expression "puVar4[4]" identifier [ number_literal ])) ;) (expression_statement "puVar25 = (ushort *)param_1[5];" (assignment_expression "puVar25 = (ushort *)param_1[5]" identifier = (cast_expression "(ushort *)param_1[5]" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[5]" identifier [ number_literal ]))) ;) (expression_statement "puVar26 = (undefined1 *)param_1[7];" (assignment_expression "puVar26 = (undefined1 *)param_1[7]" identifier = (cast_expression "(undefined1 *)param_1[7]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[7]" identifier [ number_literal ]))) ;) (if_statement "if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }" if (parenthesized_expression "((uVar7 & 2) != 0)" ( (binary_expression "(uVar7 & 2) != 0" (parenthesized_expression "(uVar7 & 2)" ( (binary_expression "uVar7 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    iVar10 = 3;\n  }" { (expression_statement "iVar10 = 3;" (assignment_expression "iVar10 = 3" identifier = number_literal) ;) })) (expression_statement "uVar8 = *(undefined4 *)*puVar4;" (assignment_expression "uVar8 = *(undefined4 *)*puVar4" identifier = (pointer_expression "*(undefined4 *)*puVar4" * (cast_expression "(undefined4 *)*puVar4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier)))) ;) (expression_statement "iVar24 = puVar4[3];" (assignment_expression "iVar24 = puVar4[3]" identifier = (subscript_expression "puVar4[3]" identifier [ number_literal ])) ;) (expression_statement "iVar21 = puVar4[2];" (assignment_expression "iVar21 = puVar4[2]" identifier = (subscript_expression "puVar4[2]" identifier [ number_literal ])) ;) (if_statement "if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }" { (if_statement "if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }" if (parenthesized_expression "(iVar24 != 0)" ( (binary_expression "iVar24 != 0" identifier != number_literal) )) (compound_statement "{\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }" { (do_statement "do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);" do (compound_statement "{\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      }" { (expression_statement "puVar18 = puVar26;" (assignment_expression "puVar18 = puVar26" identifier = identifier) ;) (expression_statement "puVar11 = puVar25;" (assignment_expression "puVar11 = puVar25" identifier = identifier) ;) (if_statement "if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }" if (parenthesized_expression "(puVar26 < puVar26 + iVar10 * iVar21)" ( (binary_expression "puVar26 < puVar26 + iVar10 * iVar21" identifier < (binary_expression "puVar26 + iVar10 * iVar21" identifier + (binary_expression "iVar10 * iVar21" identifier * identifier))) )) (compound_statement "{\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }" { (do_statement "do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);" do (compound_statement "{\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          }" { (expression_statement "puVar16 = puVar18 + 1;" (assignment_expression "puVar16 = puVar18 + 1" identifier = (binary_expression "puVar18 + 1" identifier + number_literal)) ;) (expression_statement "uVar7 = (uint)*puVar11 * 0xff >> 0xf;" (assignment_expression "uVar7 = (uint)*puVar11 * 0xff >> 0xf" identifier = (binary_expression "(uint)*puVar11 * 0xff >> 0xf" (binary_expression "(uint)*puVar11 * 0xff" (binary_expression "(uint)*puVar11" (parenthesized_expression "(uint)" ( identifier )) * identifier) * number_literal) >> number_literal)) ;) (expression_statement "*puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);" (assignment_expression "*puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" (pointer_expression "*puVar18" * identifier) = (cast_expression "(char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" ( (binary_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8" (binary_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2)" (parenthesized_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)" ( (binary_expression "((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc" (binary_expression "((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7]" (parenthesized_expression "((uint)*puVar11 * 0xff & 0x7fff)" ( (binary_expression "(uint)*puVar11 * 0xff & 0x7fff" (binary_expression "(uint)*puVar11 * 0xff" (binary_expression "(uint)*puVar11" (parenthesized_expression "(uint)" ( identifier )) * identifier) * number_literal) & number_literal) )) * (cast_expression "(uint)(byte)puVar2[uVar7]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)puVar2[uVar7]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "puVar2[uVar7]" identifier [ identifier ])))) >> number_literal) )) + (binary_expression "(uint)*(ushort *)(puVar3 + uVar7 * 2)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(puVar3 + uVar7 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + uVar7 * 2)" ( (binary_expression "puVar3 + uVar7 * 2" identifier + (binary_expression "uVar7 * 2" identifier * number_literal)) ))))) >> number_literal) )))) ;) (expression_statement "puVar18 = puVar16;" (assignment_expression "puVar18 = puVar16" identifier = identifier) ;) (expression_statement "puVar11 = puVar11 + 1;" (assignment_expression "puVar11 = puVar11 + 1" identifier = (binary_expression "puVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar26 + iVar10 * iVar21 != puVar16)" ( (binary_expression "puVar26 + iVar10 * iVar21 != puVar16" (binary_expression "puVar26 + iVar10 * iVar21" identifier + (binary_expression "iVar10 * iVar21" identifier * identifier)) != identifier) )) ;) })) (expression_statement "iVar24 = iVar24 + -1;" (assignment_expression "iVar24 = iVar24 + -1" identifier = (binary_expression "iVar24 + -1" identifier + number_literal)) ;) (expression_statement "(*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);" (call_expression "(*(code *)PTR_png_write_row_00053448)(uVar8,puVar26)" (parenthesized_expression "(*(code *)PTR_png_write_row_00053448)" ( (pointer_expression "*(code *)PTR_png_write_row_00053448" * (cast_expression "(code *)PTR_png_write_row_00053448" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,puVar26)" ( identifier , identifier ))) ;) (expression_statement "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));" (assignment_expression "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" identifier = (cast_expression "(ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" ( (binary_expression "(int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" (cast_expression "(int)puVar25" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" ( (binary_expression "*(ushort *)((int)param_1 + 0x1a) & 0xfffe" (pointer_expression "*(ushort *)((int)param_1 + 0x1a)" * (cast_expression "(ushort *)((int)param_1 + 0x1a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x1a)" ( (binary_expression "(int)param_1 + 0x1a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) ))) )))) ;) }) while (parenthesized_expression "(iVar24 != 0)" ( (binary_expression "iVar24 != 0" identifier != number_literal) )) ;) (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" else (compound_statement "{\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" { (expression_statement "iVar23 = iVar10;" (assignment_expression "iVar23 = iVar10" identifier = identifier) ;) (if_statement "if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }" if (parenthesized_expression "((uVar7 & 0x20) != 0)" ( (binary_expression "(uVar7 & 0x20) != 0" (parenthesized_expression "(uVar7 & 0x20)" ( (binary_expression "uVar7 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }" { (expression_statement "puVar25 = puVar25 + 1;" (assignment_expression "puVar25 = puVar25 + 1" identifier = (binary_expression "puVar25 + 1" identifier + number_literal)) ;) (expression_statement "puVar26 = puVar26 + 1;" (assignment_expression "puVar26 = puVar26 + 1" identifier = (binary_expression "puVar26 + 1" identifier + number_literal)) ;) (expression_statement "iVar23 = -1;" (assignment_expression "iVar23 = -1" identifier = number_literal) ;) })) (expression_statement "iVar22 = iVar10 + 1;" (assignment_expression "iVar22 = iVar10 + 1" identifier = (binary_expression "iVar10 + 1" identifier + number_literal)) ;) (if_statement "if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }" if (parenthesized_expression "(iVar24 != 0)" ( (binary_expression "iVar24 != 0" identifier != number_literal) )) (compound_statement "{\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }" { (do_statement "do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);" do (compound_statement "{\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      }" { (if_statement "if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }" if (parenthesized_expression "(puVar26 < puVar26 + iVar22 * iVar21)" ( (binary_expression "puVar26 < puVar26 + iVar22 * iVar21" identifier < (binary_expression "puVar26 + iVar22 * iVar21" identifier + (binary_expression "iVar22 * iVar21" identifier * identifier))) )) (compound_statement "{\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }" { (expression_statement "iVar19 = 0x807f;" (assignment_expression "iVar19 = 0x807f" identifier = number_literal) ;) (expression_statement "puVar16 = puVar26 + iVar10;" (assignment_expression "puVar16 = puVar26 + iVar10" identifier = (binary_expression "puVar26 + iVar10" identifier + identifier)) ;) (expression_statement "iVar20 = 0x7f7f8080;" (assignment_expression "iVar20 = 0x7f7f8080" identifier = number_literal) ;) (expression_statement "puVar18 = puVar26;" (assignment_expression "puVar18 = puVar26" identifier = identifier) ;) (expression_statement "puVar11 = puVar25;" (assignment_expression "puVar11 = puVar25" identifier = identifier) ;) (do_statement "do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);" do (compound_statement "{\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          }" { (expression_statement "uVar1 = puVar11[iVar23];" (assignment_expression "uVar1 = puVar11[iVar23]" identifier = (subscript_expression "puVar11[iVar23]" identifier [ identifier ])) ;) (expression_statement "uVar7 = (uint)uVar1;" (assignment_expression "uVar7 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar5 = uVar7 * 0xff + iVar19;" (assignment_expression "iVar5 = uVar7 * 0xff + iVar19" identifier = (binary_expression "uVar7 * 0xff + iVar19" (binary_expression "uVar7 * 0xff" identifier * number_literal) + identifier)) ;) (expression_statement "puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);" (assignment_expression "puVar18[iVar23] = (char)((uint)iVar5 >> 0x10)" (subscript_expression "puVar18[iVar23]" identifier [ identifier ]) = (cast_expression "(char)((uint)iVar5 >> 0x10)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((uint)iVar5 >> 0x10)" ( (binary_expression "(uint)iVar5 >> 0x10" (cast_expression "(uint)iVar5" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }" if (parenthesized_expression "((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe)" ( (binary_expression "(((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe" (parenthesized_expression "(((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff)" ( (binary_expression "((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff" (binary_expression "((uint)(iVar5 * 0x100) >> 0x18) - 1" (parenthesized_expression "((uint)(iVar5 * 0x100) >> 0x18)" ( (binary_expression "(uint)(iVar5 * 0x100) >> 0x18" (call_expression "(uint)(iVar5 * 0x100)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 * 0x100)" ( (binary_expression "iVar5 * 0x100" identifier * number_literal) ))) >> number_literal) )) - number_literal) & number_literal) )) < number_literal) )) (compound_statement "{\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }" { (if_statement "if (uVar7 == 0) {\n                trap(7);\n              }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n                trap(7);\n              }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;" (assignment_expression "iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7" identifier = (binary_expression "(int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7" (cast_expression "(int)((uint)(uVar1 >> 1) + iVar20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(uVar1 >> 1) + iVar20)" ( (binary_expression "(uint)(uVar1 >> 1) + iVar20" (call_expression "(uint)(uVar1 >> 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 >> 1)" ( (binary_expression "uVar1 >> 1" identifier >> number_literal) ))) + identifier) ))) / (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier))) ;) }) (else_clause "else {\n              iVar5 = 0;\n            }" else (compound_statement "{\n              iVar5 = 0;\n            }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }))) (expression_statement "uVar17 = (uint)(uVar7 < 0x80);" (assignment_expression "uVar17 = (uint)(uVar7 < 0x80)" identifier = (call_expression "(uint)(uVar7 < 0x80)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar7 < 0x80)" ( (binary_expression "uVar7 < 0x80" identifier < number_literal) )))) ;) (expression_statement "puVar12 = puVar18;" (assignment_expression "puVar12 = puVar18" identifier = identifier) ;) (expression_statement "puVar15 = puVar11;" (assignment_expression "puVar15 = puVar11" identifier = identifier) ;) (do_statement "do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);" do (compound_statement "{\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            }" { (while_statement "while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }" { (expression_statement "puVar14 = puVar15 + 1;" (assignment_expression "puVar14 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) (expression_statement "uVar9 = (uint)*puVar15;" (assignment_expression "uVar9 = (uint)*puVar15" identifier = (binary_expression "(uint)*puVar15" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "puVar13 = puVar12 + 1;" (assignment_expression "puVar13 = puVar12 + 1" identifier = (binary_expression "puVar12 + 1" identifier + number_literal)) ;) (if_statement "if (uVar9 < uVar7) break;" if (parenthesized_expression "(uVar9 < uVar7)" ( (binary_expression "uVar9 < uVar7" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar6 = 0xff;" (assignment_expression "uVar6 = 0xff" identifier = number_literal) ;) (labeled_statement "LAB_00036d7c:\n                puVar13[-1] = uVar6;" statement_identifier : (expression_statement "puVar13[-1] = uVar6;" (assignment_expression "puVar13[-1] = uVar6" (subscript_expression "puVar13[-1]" identifier [ number_literal ]) = identifier) ;)) (expression_statement "puVar12 = puVar13;" (assignment_expression "puVar12 = puVar13" identifier = identifier) ;) (expression_statement "puVar15 = puVar14;" (assignment_expression "puVar15 = puVar14" identifier = identifier) ;) (if_statement "if (puVar13 == puVar16) goto LAB_00036db4;" if (parenthesized_expression "(puVar13 == puVar16)" ( (binary_expression "puVar13 == puVar16" identifier == identifier) )) (goto_statement "goto LAB_00036db4;" goto statement_identifier ;)) })) (expression_statement "uVar6 = 0xff;" (assignment_expression "uVar6 = 0xff" identifier = number_literal) ;) (if_statement "if (uVar17 != 0) goto LAB_00036d7c;" if (parenthesized_expression "(uVar17 != 0)" ( (binary_expression "uVar17 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00036d7c;" goto statement_identifier ;)) (if_statement "if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }" { (expression_statement "uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);" (assignment_expression "uVar6 = FUN_000352b4(uVar9,uVar7,iVar5)" identifier = (call_expression "FUN_000352b4(uVar9,uVar7,iVar5)" identifier (argument_list "(uVar9,uVar7,iVar5)" ( identifier , identifier , identifier )))) ;) (goto_statement "goto LAB_00036d7c;" goto statement_identifier ;) })) (expression_statement "*puVar12 = 0;" (assignment_expression "*puVar12 = 0" (pointer_expression "*puVar12" * identifier) = number_literal) ;) (expression_statement "puVar12 = puVar13;" (assignment_expression "puVar12 = puVar13" identifier = identifier) ;) (expression_statement "puVar15 = puVar14;" (assignment_expression "puVar15 = puVar14" identifier = identifier) ;) }) while (parenthesized_expression "(puVar13 != puVar16)" ( (binary_expression "puVar13 != puVar16" identifier != identifier) )) ;) (labeled_statement "LAB_00036db4:\n            puVar18 = puVar18 + iVar22;" statement_identifier : (expression_statement "puVar18 = puVar18 + iVar22;" (assignment_expression "puVar18 = puVar18 + iVar22" identifier = (binary_expression "puVar18 + iVar22" identifier + identifier)) ;)) (expression_statement "puVar11 = puVar11 + iVar22;" (assignment_expression "puVar11 = puVar11 + iVar22" identifier = (binary_expression "puVar11 + iVar22" identifier + identifier)) ;) (expression_statement "puVar16 = puVar16 + iVar22;" (assignment_expression "puVar16 = puVar16 + iVar22" identifier = (binary_expression "puVar16 + iVar22" identifier + identifier)) ;) }) while (parenthesized_expression "(puVar18 < puVar26 + iVar22 * iVar21)" ( (binary_expression "puVar18 < puVar26 + iVar22 * iVar21" identifier < (binary_expression "puVar26 + iVar22 * iVar21" identifier + (binary_expression "iVar22 * iVar21" identifier * identifier))) )) ;) })) (expression_statement "iVar24 = iVar24 + -1;" (assignment_expression "iVar24 = iVar24 + -1" identifier = (binary_expression "iVar24 + -1" identifier + number_literal)) ;) (expression_statement "(*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);" (call_expression "(*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7])" (parenthesized_expression "(*(code *)PTR_png_write_row_00053448)" ( (pointer_expression "*(code *)PTR_png_write_row_00053448" * (cast_expression "(code *)PTR_png_write_row_00053448" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,param_1[7])" ( identifier , (subscript_expression "param_1[7]" identifier [ number_literal ]) ))) ;) (expression_statement "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));" (assignment_expression "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" identifier = (cast_expression "(ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" ( (binary_expression "(int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" (cast_expression "(int)puVar25" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" ( (binary_expression "*(ushort *)((int)param_1 + 0x1a) & 0xfffe" (pointer_expression "*(ushort *)((int)param_1 + 0x1a)" * (cast_expression "(ushort *)((int)param_1 + 0x1a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x1a)" ( (binary_expression "(int)param_1 + 0x1a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) ))) )))) ;) }) while (parenthesized_expression "(iVar24 != 0)" ( (binary_expression "iVar24 != 0" identifier != number_literal) )) ;) })) }))) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "int png_write_image_8bit(png_voidp argument)\n\n{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  png_byte pVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint component;\n  int iVar9;\n  ushort *puVar10;\n  undefined1 *puVar11;\n  undefined1 *puVar12;\n  ushort *puVar13;\n  ushort *puVar14;\n  undefined1 *puVar15;\n  uint uVar16;\n  undefined1 *puVar17;\n  int iVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  ushort *puVar24;\n  undefined1 *puVar25;\n  png_uint_32 reciprocal;\n  \n  puVar3 = PTR_png_sRGB_base_00053170;\n  puVar2 = PTR_png_sRGB_delta_0005316c;\n                    /* WARNING: Load size is inaccurate */\n  puVar4 = *argument;\n  iVar9 = 1;\n  uVar7 = puVar4[4];\n  puVar24 = *(ushort **)((int)argument + 0x14);\n  puVar25 = *(undefined1 **)((int)argument + 0x1c);\n  if ((uVar7 & 2) != 0) {\n    iVar9 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar23 = puVar4[3];\n  iVar20 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar23 != 0) {\n      do {\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar22 = iVar9;\n    if ((uVar7 & 0x20) != 0) {\n      puVar24 = puVar24 + 1;\n      puVar25 = puVar25 + 1;\n      iVar22 = -1;\n    }\n    iVar21 = iVar9 + 1;\n    if (iVar23 != 0) {\n      do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n    }\n  }\n  return 1;\n}\n\n" (function_definition "int png_write_image_8bit(png_voidp argument)\n\n{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  png_byte pVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint component;\n  int iVar9;\n  ushort *puVar10;\n  undefined1 *puVar11;\n  undefined1 *puVar12;\n  ushort *puVar13;\n  ushort *puVar14;\n  undefined1 *puVar15;\n  uint uVar16;\n  undefined1 *puVar17;\n  int iVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  ushort *puVar24;\n  undefined1 *puVar25;\n  png_uint_32 reciprocal;\n  \n  puVar3 = PTR_png_sRGB_base_00053170;\n  puVar2 = PTR_png_sRGB_delta_0005316c;\n                    /* WARNING: Load size is inaccurate */\n  puVar4 = *argument;\n  iVar9 = 1;\n  uVar7 = puVar4[4];\n  puVar24 = *(ushort **)((int)argument + 0x14);\n  puVar25 = *(undefined1 **)((int)argument + 0x1c);\n  if ((uVar7 & 2) != 0) {\n    iVar9 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar23 = puVar4[3];\n  iVar20 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar23 != 0) {\n      do {\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar22 = iVar9;\n    if ((uVar7 & 0x20) != 0) {\n      puVar24 = puVar24 + 1;\n      puVar25 = puVar25 + 1;\n      iVar22 = -1;\n    }\n    iVar21 = iVar9 + 1;\n    if (iVar23 != 0) {\n      do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n    }\n  }\n  return 1;\n}" primitive_type (function_declarator "png_write_image_8bit(png_voidp argument)" identifier (parameter_list "(png_voidp argument)" ( (parameter_declaration "png_voidp argument" type_identifier identifier) ))) (compound_statement "{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  png_byte pVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint component;\n  int iVar9;\n  ushort *puVar10;\n  undefined1 *puVar11;\n  undefined1 *puVar12;\n  ushort *puVar13;\n  ushort *puVar14;\n  undefined1 *puVar15;\n  uint uVar16;\n  undefined1 *puVar17;\n  int iVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  ushort *puVar24;\n  undefined1 *puVar25;\n  png_uint_32 reciprocal;\n  \n  puVar3 = PTR_png_sRGB_base_00053170;\n  puVar2 = PTR_png_sRGB_delta_0005316c;\n                    /* WARNING: Load size is inaccurate */\n  puVar4 = *argument;\n  iVar9 = 1;\n  uVar7 = puVar4[4];\n  puVar24 = *(ushort **)((int)argument + 0x14);\n  puVar25 = *(undefined1 **)((int)argument + 0x1c);\n  if ((uVar7 & 2) != 0) {\n    iVar9 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar23 = puVar4[3];\n  iVar20 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar23 != 0) {\n      do {\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar22 = iVar9;\n    if ((uVar7 & 0x20) != 0) {\n      puVar24 = puVar24 + 1;\n      puVar25 = puVar25 + 1;\n      iVar22 = -1;\n    }\n    iVar21 = iVar9 + 1;\n    if (iVar23 != 0) {\n      do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n    }\n  }\n  return 1;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "png_byte pVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "uint component;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "ushort *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "undefined1 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined1 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "ushort *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "ushort *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "undefined1 *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "undefined1 *puVar17;" type_identifier (pointer_declarator "*puVar17" * identifier) ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "int iVar23;" primitive_type identifier ;) (declaration "ushort *puVar24;" type_identifier (pointer_declarator "*puVar24" * identifier) ;) (declaration "undefined1 *puVar25;" type_identifier (pointer_declarator "*puVar25" * identifier) ;) (declaration "png_uint_32 reciprocal;" type_identifier identifier ;) (expression_statement "puVar3 = PTR_png_sRGB_base_00053170;" (assignment_expression "puVar3 = PTR_png_sRGB_base_00053170" identifier = identifier) ;) (expression_statement "puVar2 = PTR_png_sRGB_delta_0005316c;" (assignment_expression "puVar2 = PTR_png_sRGB_delta_0005316c" identifier = identifier) ;) comment (expression_statement "puVar4 = *argument;" (assignment_expression "puVar4 = *argument" identifier = (pointer_expression "*argument" * identifier)) ;) (expression_statement "iVar9 = 1;" (assignment_expression "iVar9 = 1" identifier = number_literal) ;) (expression_statement "uVar7 = puVar4[4];" (assignment_expression "uVar7 = puVar4[4]" identifier = (subscript_expression "puVar4[4]" identifier [ number_literal ])) ;) (expression_statement "puVar24 = *(ushort **)((int)argument + 0x14);" (assignment_expression "puVar24 = *(ushort **)((int)argument + 0x14)" identifier = (pointer_expression "*(ushort **)((int)argument + 0x14)" * (cast_expression "(ushort **)((int)argument + 0x14)" ( (type_descriptor "ushort **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)argument + 0x14)" ( (binary_expression "(int)argument + 0x14" (cast_expression "(int)argument" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (expression_statement "puVar25 = *(undefined1 **)((int)argument + 0x1c);" (assignment_expression "puVar25 = *(undefined1 **)((int)argument + 0x1c)" identifier = (pointer_expression "*(undefined1 **)((int)argument + 0x1c)" * (cast_expression "(undefined1 **)((int)argument + 0x1c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)argument + 0x1c)" ( (binary_expression "(int)argument + 0x1c" (cast_expression "(int)argument" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if ((uVar7 & 2) != 0) {\n    iVar9 = 3;\n  }" if (parenthesized_expression "((uVar7 & 2) != 0)" ( (binary_expression "(uVar7 & 2) != 0" (parenthesized_expression "(uVar7 & 2)" ( (binary_expression "uVar7 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    iVar9 = 3;\n  }" { (expression_statement "iVar9 = 3;" (assignment_expression "iVar9 = 3" identifier = number_literal) ;) })) (expression_statement "uVar8 = *(undefined4 *)*puVar4;" (assignment_expression "uVar8 = *(undefined4 *)*puVar4" identifier = (pointer_expression "*(undefined4 *)*puVar4" * (cast_expression "(undefined4 *)*puVar4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier)))) ;) (expression_statement "iVar23 = puVar4[3];" (assignment_expression "iVar23 = puVar4[3]" identifier = (subscript_expression "puVar4[3]" identifier [ number_literal ])) ;) (expression_statement "iVar20 = puVar4[2];" (assignment_expression "iVar20 = puVar4[2]" identifier = (subscript_expression "puVar4[2]" identifier [ number_literal ])) ;) (if_statement "if ((uVar7 & 1) == 0) {\n    if (iVar23 != 0) {\n      do {\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar22 = iVar9;\n    if ((uVar7 & 0x20) != 0) {\n      puVar24 = puVar24 + 1;\n      puVar25 = puVar25 + 1;\n      iVar22 = -1;\n    }\n    iVar21 = iVar9 + 1;\n    if (iVar23 != 0) {\n      do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n    }\n  }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if (iVar23 != 0) {\n      do {\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n      return 1;\n    }\n  }" { (if_statement "if (iVar23 != 0) {\n      do {\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n      return 1;\n    }" if (parenthesized_expression "(iVar23 != 0)" ( (binary_expression "iVar23 != 0" identifier != number_literal) )) (compound_statement "{\n      do {\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n      return 1;\n    }" { (do_statement "do {\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);" do (compound_statement "{\n        puVar17 = puVar25;\n        puVar10 = puVar24;\n        if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      }" { (expression_statement "puVar17 = puVar25;" (assignment_expression "puVar17 = puVar25" identifier = identifier) ;) (expression_statement "puVar10 = puVar24;" (assignment_expression "puVar10 = puVar24" identifier = identifier) ;) (if_statement "if (puVar25 < puVar25 + iVar9 * iVar20) {\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }" if (parenthesized_expression "(puVar25 < puVar25 + iVar9 * iVar20)" ( (binary_expression "puVar25 < puVar25 + iVar9 * iVar20" identifier < (binary_expression "puVar25 + iVar9 * iVar20" identifier + (binary_expression "iVar9 * iVar20" identifier * identifier))) )) (compound_statement "{\n          do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);\n        }" { (do_statement "do {\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          } while (puVar25 + iVar9 * iVar20 != puVar15);" do (compound_statement "{\n            puVar15 = puVar17 + 1;\n            uVar7 = (uint)*puVar10 * 0xff >> 0xf;\n            *puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar17 = puVar15;\n            puVar10 = puVar10 + 1;\n          }" { (expression_statement "puVar15 = puVar17 + 1;" (assignment_expression "puVar15 = puVar17 + 1" identifier = (binary_expression "puVar17 + 1" identifier + number_literal)) ;) (expression_statement "uVar7 = (uint)*puVar10 * 0xff >> 0xf;" (assignment_expression "uVar7 = (uint)*puVar10 * 0xff >> 0xf" identifier = (binary_expression "(uint)*puVar10 * 0xff >> 0xf" (binary_expression "(uint)*puVar10 * 0xff" (binary_expression "(uint)*puVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier) * number_literal) >> number_literal)) ;) (expression_statement "*puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);" (assignment_expression "*puVar17 = (char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" (pointer_expression "*puVar17" * identifier) = (cast_expression "(char)((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" ( (binary_expression "(((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8" (binary_expression "(((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2)" (parenthesized_expression "(((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)" ( (binary_expression "((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc" (binary_expression "((uint)*puVar10 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7]" (parenthesized_expression "((uint)*puVar10 * 0xff & 0x7fff)" ( (binary_expression "(uint)*puVar10 * 0xff & 0x7fff" (binary_expression "(uint)*puVar10 * 0xff" (binary_expression "(uint)*puVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier) * number_literal) & number_literal) )) * (cast_expression "(uint)(byte)puVar2[uVar7]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)puVar2[uVar7]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "puVar2[uVar7]" identifier [ identifier ])))) >> number_literal) )) + (binary_expression "(uint)*(ushort *)(puVar3 + uVar7 * 2)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(puVar3 + uVar7 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + uVar7 * 2)" ( (binary_expression "puVar3 + uVar7 * 2" identifier + (binary_expression "uVar7 * 2" identifier * number_literal)) ))))) >> number_literal) )))) ;) (expression_statement "puVar17 = puVar15;" (assignment_expression "puVar17 = puVar15" identifier = identifier) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar25 + iVar9 * iVar20 != puVar15)" ( (binary_expression "puVar25 + iVar9 * iVar20 != puVar15" (binary_expression "puVar25 + iVar9 * iVar20" identifier + (binary_expression "iVar9 * iVar20" identifier * identifier)) != identifier) )) ;) })) (expression_statement "iVar23 = iVar23 + -1;" (assignment_expression "iVar23 = iVar23 + -1" identifier = (binary_expression "iVar23 + -1" identifier + number_literal)) ;) (expression_statement "(*(code *)PTR_png_write_row_00053448)(uVar8,puVar25);" (call_expression "(*(code *)PTR_png_write_row_00053448)(uVar8,puVar25)" (parenthesized_expression "(*(code *)PTR_png_write_row_00053448)" ( (pointer_expression "*(code *)PTR_png_write_row_00053448" * (cast_expression "(code *)PTR_png_write_row_00053448" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,puVar25)" ( identifier , identifier ))) ;) (expression_statement "puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));" (assignment_expression "puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe))" identifier = (cast_expression "(ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe))" ( (binary_expression "(int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe)" (cast_expression "(int)puVar24" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(*(ushort *)((int)argument + 0x1a) & 0xfffe)" ( (binary_expression "*(ushort *)((int)argument + 0x1a) & 0xfffe" (pointer_expression "*(ushort *)((int)argument + 0x1a)" * (cast_expression "(ushort *)((int)argument + 0x1a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)argument + 0x1a)" ( (binary_expression "(int)argument + 0x1a" (cast_expression "(int)argument" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) ))) )))) ;) }) while (parenthesized_expression "(iVar23 != 0)" ( (binary_expression "iVar23 != 0" identifier != number_literal) )) ;) (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else {\n    iVar22 = iVar9;\n    if ((uVar7 & 0x20) != 0) {\n      puVar24 = puVar24 + 1;\n      puVar25 = puVar25 + 1;\n      iVar22 = -1;\n    }\n    iVar21 = iVar9 + 1;\n    if (iVar23 != 0) {\n      do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n    }\n  }" else (compound_statement "{\n    iVar22 = iVar9;\n    if ((uVar7 & 0x20) != 0) {\n      puVar24 = puVar24 + 1;\n      puVar25 = puVar25 + 1;\n      iVar22 = -1;\n    }\n    iVar21 = iVar9 + 1;\n    if (iVar23 != 0) {\n      do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n    }\n  }" { (expression_statement "iVar22 = iVar9;" (assignment_expression "iVar22 = iVar9" identifier = identifier) ;) (if_statement "if ((uVar7 & 0x20) != 0) {\n      puVar24 = puVar24 + 1;\n      puVar25 = puVar25 + 1;\n      iVar22 = -1;\n    }" if (parenthesized_expression "((uVar7 & 0x20) != 0)" ( (binary_expression "(uVar7 & 0x20) != 0" (parenthesized_expression "(uVar7 & 0x20)" ( (binary_expression "uVar7 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      puVar24 = puVar24 + 1;\n      puVar25 = puVar25 + 1;\n      iVar22 = -1;\n    }" { (expression_statement "puVar24 = puVar24 + 1;" (assignment_expression "puVar24 = puVar24 + 1" identifier = (binary_expression "puVar24 + 1" identifier + number_literal)) ;) (expression_statement "puVar25 = puVar25 + 1;" (assignment_expression "puVar25 = puVar25 + 1" identifier = (binary_expression "puVar25 + 1" identifier + number_literal)) ;) (expression_statement "iVar22 = -1;" (assignment_expression "iVar22 = -1" identifier = number_literal) ;) })) (expression_statement "iVar21 = iVar9 + 1;" (assignment_expression "iVar21 = iVar9 + 1" identifier = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (if_statement "if (iVar23 != 0) {\n      do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n    }" if (parenthesized_expression "(iVar23 != 0)" ( (binary_expression "iVar23 != 0" identifier != number_literal) )) (compound_statement "{\n      do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);\n    }" { (do_statement "do {\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      } while (iVar23 != 0);" do (compound_statement "{\n        if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }\n        iVar23 = iVar23 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));\n        puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));\n      }" { (if_statement "if (puVar25 < puVar25 + iVar21 * iVar20) {\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }" if (parenthesized_expression "(puVar25 < puVar25 + iVar21 * iVar20)" ( (binary_expression "puVar25 < puVar25 + iVar21 * iVar20" identifier < (binary_expression "puVar25 + iVar21 * iVar20" identifier + (binary_expression "iVar21 * iVar20" identifier * identifier))) )) (compound_statement "{\n          iVar18 = 0x807f;\n          puVar15 = puVar25 + iVar9;\n          iVar19 = 0x7f7f8080;\n          puVar17 = puVar25;\n          puVar10 = puVar24;\n          do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);\n        }" { (expression_statement "iVar18 = 0x807f;" (assignment_expression "iVar18 = 0x807f" identifier = number_literal) ;) (expression_statement "puVar15 = puVar25 + iVar9;" (assignment_expression "puVar15 = puVar25 + iVar9" identifier = (binary_expression "puVar25 + iVar9" identifier + identifier)) ;) (expression_statement "iVar19 = 0x7f7f8080;" (assignment_expression "iVar19 = 0x7f7f8080" identifier = number_literal) ;) (expression_statement "puVar17 = puVar25;" (assignment_expression "puVar17 = puVar25" identifier = identifier) ;) (expression_statement "puVar10 = puVar24;" (assignment_expression "puVar10 = puVar24" identifier = identifier) ;) (do_statement "do {\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          } while (puVar17 < puVar25 + iVar21 * iVar20);" do (compound_statement "{\n            uVar1 = puVar10[iVar22];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar18;\n            puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }\n            uVar16 = (uint)(uVar7 < 0x80);\n            puVar11 = puVar17;\n            puVar14 = puVar10;\n            do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);\nLAB_00036db4:\n            puVar17 = puVar17 + iVar21;\n            puVar10 = puVar10 + iVar21;\n            puVar15 = puVar15 + iVar21;\n          }" { (expression_statement "uVar1 = puVar10[iVar22];" (assignment_expression "uVar1 = puVar10[iVar22]" identifier = (subscript_expression "puVar10[iVar22]" identifier [ identifier ])) ;) (expression_statement "uVar7 = (uint)uVar1;" (assignment_expression "uVar7 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar5 = uVar7 * 0xff + iVar18;" (assignment_expression "iVar5 = uVar7 * 0xff + iVar18" identifier = (binary_expression "uVar7 * 0xff + iVar18" (binary_expression "uVar7 * 0xff" identifier * number_literal) + identifier)) ;) (expression_statement "puVar17[iVar22] = (char)((uint)iVar5 >> 0x10);" (assignment_expression "puVar17[iVar22] = (char)((uint)iVar5 >> 0x10)" (subscript_expression "puVar17[iVar22]" identifier [ identifier ]) = (cast_expression "(char)((uint)iVar5 >> 0x10)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((uint)iVar5 >> 0x10)" ( (binary_expression "(uint)iVar5 >> 0x10" (cast_expression "(uint)iVar5" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }\n            else {\n              reciprocal = 0;\n            }" if (parenthesized_expression "((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe)" ( (binary_expression "(((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe" (parenthesized_expression "(((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff)" ( (binary_expression "((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff" (binary_expression "((uint)(iVar5 * 0x100) >> 0x18) - 1" (parenthesized_expression "((uint)(iVar5 * 0x100) >> 0x18)" ( (binary_expression "(uint)(iVar5 * 0x100) >> 0x18" (call_expression "(uint)(iVar5 * 0x100)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 * 0x100)" ( (binary_expression "iVar5 * 0x100" identifier * number_literal) ))) >> number_literal) )) - number_literal) & number_literal) )) < number_literal) )) (compound_statement "{\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;\n            }" { (if_statement "if (uVar7 == 0) {\n                trap(7);\n              }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n                trap(7);\n              }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7;" (assignment_expression "reciprocal = (int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7" identifier = (binary_expression "(int)((uint)(uVar1 >> 1) + iVar19) / (int)uVar7" (cast_expression "(int)((uint)(uVar1 >> 1) + iVar19)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(uVar1 >> 1) + iVar19)" ( (binary_expression "(uint)(uVar1 >> 1) + iVar19" (call_expression "(uint)(uVar1 >> 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 >> 1)" ( (binary_expression "uVar1 >> 1" identifier >> number_literal) ))) + identifier) ))) / (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier))) ;) }) (else_clause "else {\n              reciprocal = 0;\n            }" else (compound_statement "{\n              reciprocal = 0;\n            }" { (expression_statement "reciprocal = 0;" (assignment_expression "reciprocal = 0" identifier = number_literal) ;) }))) (expression_statement "uVar16 = (uint)(uVar7 < 0x80);" (assignment_expression "uVar16 = (uint)(uVar7 < 0x80)" identifier = (call_expression "(uint)(uVar7 < 0x80)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar7 < 0x80)" ( (binary_expression "uVar7 < 0x80" identifier < number_literal) )))) ;) (expression_statement "puVar11 = puVar17;" (assignment_expression "puVar11 = puVar17" identifier = identifier) ;) (expression_statement "puVar14 = puVar10;" (assignment_expression "puVar14 = puVar10" identifier = identifier) ;) (do_statement "do {\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            } while (puVar12 != puVar15);" do (compound_statement "{\n              while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }\n              pVar6 = 0xff;\n              if (uVar16 != 0) goto LAB_00036d7c;\n              if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }\n              *puVar11 = 0;\n              puVar11 = puVar12;\n              puVar14 = puVar13;\n            }" { (while_statement "while( true ) {\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n                puVar13 = puVar14 + 1;\n                component = (uint)*puVar14;\n                puVar12 = puVar11 + 1;\n                if (component < uVar7) break;\n                pVar6 = 0xff;\nLAB_00036d7c:\n                puVar12[-1] = pVar6;\n                puVar11 = puVar12;\n                puVar14 = puVar13;\n                if (puVar12 == puVar15) goto LAB_00036db4;\n              }" { (expression_statement "puVar13 = puVar14 + 1;" (assignment_expression "puVar13 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "component = (uint)*puVar14;" (assignment_expression "component = (uint)*puVar14" identifier = (binary_expression "(uint)*puVar14" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "puVar12 = puVar11 + 1;" (assignment_expression "puVar12 = puVar11 + 1" identifier = (binary_expression "puVar11 + 1" identifier + number_literal)) ;) (if_statement "if (component < uVar7) break;" if (parenthesized_expression "(component < uVar7)" ( (binary_expression "component < uVar7" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "pVar6 = 0xff;" (assignment_expression "pVar6 = 0xff" identifier = number_literal) ;) (labeled_statement "LAB_00036d7c:\n                puVar12[-1] = pVar6;" statement_identifier : (expression_statement "puVar12[-1] = pVar6;" (assignment_expression "puVar12[-1] = pVar6" (subscript_expression "puVar12[-1]" identifier [ number_literal ]) = identifier) ;)) (expression_statement "puVar11 = puVar12;" (assignment_expression "puVar11 = puVar12" identifier = identifier) ;) (expression_statement "puVar14 = puVar13;" (assignment_expression "puVar14 = puVar13" identifier = identifier) ;) (if_statement "if (puVar12 == puVar15) goto LAB_00036db4;" if (parenthesized_expression "(puVar12 == puVar15)" ( (binary_expression "puVar12 == puVar15" identifier == identifier) )) (goto_statement "goto LAB_00036db4;" goto statement_identifier ;)) })) (expression_statement "pVar6 = 0xff;" (assignment_expression "pVar6 = 0xff" identifier = number_literal) ;) (if_statement "if (uVar16 != 0) goto LAB_00036d7c;" if (parenthesized_expression "(uVar16 != 0)" ( (binary_expression "uVar16 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00036d7c;" goto statement_identifier ;)) (if_statement "if (component != 0) {\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }" if (parenthesized_expression "(component != 0)" ( (binary_expression "component != 0" identifier != number_literal) )) (compound_statement "{\n                pVar6 = png_unpremultiply(component,uVar7,reciprocal);\n                goto LAB_00036d7c;\n              }" { (expression_statement "pVar6 = png_unpremultiply(component,uVar7,reciprocal);" (assignment_expression "pVar6 = png_unpremultiply(component,uVar7,reciprocal)" identifier = (call_expression "png_unpremultiply(component,uVar7,reciprocal)" identifier (argument_list "(component,uVar7,reciprocal)" ( identifier , identifier , identifier )))) ;) (goto_statement "goto LAB_00036d7c;" goto statement_identifier ;) })) (expression_statement "*puVar11 = 0;" (assignment_expression "*puVar11 = 0" (pointer_expression "*puVar11" * identifier) = number_literal) ;) (expression_statement "puVar11 = puVar12;" (assignment_expression "puVar11 = puVar12" identifier = identifier) ;) (expression_statement "puVar14 = puVar13;" (assignment_expression "puVar14 = puVar13" identifier = identifier) ;) }) while (parenthesized_expression "(puVar12 != puVar15)" ( (binary_expression "puVar12 != puVar15" identifier != identifier) )) ;) (labeled_statement "LAB_00036db4:\n            puVar17 = puVar17 + iVar21;" statement_identifier : (expression_statement "puVar17 = puVar17 + iVar21;" (assignment_expression "puVar17 = puVar17 + iVar21" identifier = (binary_expression "puVar17 + iVar21" identifier + identifier)) ;)) (expression_statement "puVar10 = puVar10 + iVar21;" (assignment_expression "puVar10 = puVar10 + iVar21" identifier = (binary_expression "puVar10 + iVar21" identifier + identifier)) ;) (expression_statement "puVar15 = puVar15 + iVar21;" (assignment_expression "puVar15 = puVar15 + iVar21" identifier = (binary_expression "puVar15 + iVar21" identifier + identifier)) ;) }) while (parenthesized_expression "(puVar17 < puVar25 + iVar21 * iVar20)" ( (binary_expression "puVar17 < puVar25 + iVar21 * iVar20" identifier < (binary_expression "puVar25 + iVar21 * iVar20" identifier + (binary_expression "iVar21 * iVar20" identifier * identifier))) )) ;) })) (expression_statement "iVar23 = iVar23 + -1;" (assignment_expression "iVar23 = iVar23 + -1" identifier = (binary_expression "iVar23 + -1" identifier + number_literal)) ;) (expression_statement "(*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c));" (call_expression "(*(code *)PTR_png_write_row_00053448)(uVar8,*(undefined4 *)((int)argument + 0x1c))" (parenthesized_expression "(*(code *)PTR_png_write_row_00053448)" ( (pointer_expression "*(code *)PTR_png_write_row_00053448" * (cast_expression "(code *)PTR_png_write_row_00053448" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,*(undefined4 *)((int)argument + 0x1c))" ( identifier , (pointer_expression "*(undefined4 *)((int)argument + 0x1c)" * (cast_expression "(undefined4 *)((int)argument + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)argument + 0x1c)" ( (binary_expression "(int)argument + 0x1c" (cast_expression "(int)argument" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ))) ;) (expression_statement "puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe));" (assignment_expression "puVar24 = (ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe))" identifier = (cast_expression "(ushort *)((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe))" ( (binary_expression "(int)puVar24 + (*(ushort *)((int)argument + 0x1a) & 0xfffe)" (cast_expression "(int)puVar24" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(*(ushort *)((int)argument + 0x1a) & 0xfffe)" ( (binary_expression "*(ushort *)((int)argument + 0x1a) & 0xfffe" (pointer_expression "*(ushort *)((int)argument + 0x1a)" * (cast_expression "(ushort *)((int)argument + 0x1a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)argument + 0x1a)" ( (binary_expression "(int)argument + 0x1a" (cast_expression "(int)argument" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) ))) )))) ;) }) while (parenthesized_expression "(iVar23 != 0)" ( (binary_expression "iVar23 != 0" identifier != number_literal) )) ;) })) }))) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "undefined4 FUN_00036c34(int *param_1)\n\n{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined1 uVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  int iVar10;\n  ushort *puVar11;\n  undefined1 *puVar12;\n  undefined1 *puVar13;\n  ushort *puVar14;\n  ushort *puVar15;\n  undefined1 *puVar16;\n  uint uVar17;\n  undefined1 *puVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  ushort *puVar25;\n  undefined1 *puVar26;\n  \n  puVar3 = PTR_DAT_00053170;\n  puVar2 = PTR_DAT_0005316c;\n  puVar4 = (undefined4 *)*param_1;\n  iVar10 = 1;\n  uVar7 = puVar4[4];\n  puVar25 = (ushort *)param_1[5];\n  puVar26 = (undefined1 *)param_1[7];\n  if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar24 = puVar4[3];\n  iVar21 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }\n  return 1;\n}\n\n" (function_definition "undefined4 FUN_00036c34(int *param_1)\n\n{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined1 uVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  int iVar10;\n  ushort *puVar11;\n  undefined1 *puVar12;\n  undefined1 *puVar13;\n  ushort *puVar14;\n  ushort *puVar15;\n  undefined1 *puVar16;\n  uint uVar17;\n  undefined1 *puVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  ushort *puVar25;\n  undefined1 *puVar26;\n  \n  puVar3 = PTR_DAT_00053170;\n  puVar2 = PTR_DAT_0005316c;\n  puVar4 = (undefined4 *)*param_1;\n  iVar10 = 1;\n  uVar7 = puVar4[4];\n  puVar25 = (ushort *)param_1[5];\n  puVar26 = (undefined1 *)param_1[7];\n  if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar24 = puVar4[3];\n  iVar21 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_00036c34(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined1 uVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  int iVar10;\n  ushort *puVar11;\n  undefined1 *puVar12;\n  undefined1 *puVar13;\n  ushort *puVar14;\n  ushort *puVar15;\n  undefined1 *puVar16;\n  uint uVar17;\n  undefined1 *puVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  ushort *puVar25;\n  undefined1 *puVar26;\n  \n  puVar3 = PTR_DAT_00053170;\n  puVar2 = PTR_DAT_0005316c;\n  puVar4 = (undefined4 *)*param_1;\n  iVar10 = 1;\n  uVar7 = puVar4[4];\n  puVar25 = (ushort *)param_1[5];\n  puVar26 = (undefined1 *)param_1[7];\n  if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar24 = puVar4[3];\n  iVar21 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }\n  return 1;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined1 uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "ushort *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined1 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "undefined1 *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "ushort *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "ushort *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "undefined1 *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "undefined1 *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "int iVar23;" primitive_type identifier ;) (declaration "int iVar24;" primitive_type identifier ;) (declaration "ushort *puVar25;" type_identifier (pointer_declarator "*puVar25" * identifier) ;) (declaration "undefined1 *puVar26;" type_identifier (pointer_declarator "*puVar26" * identifier) ;) (expression_statement "puVar3 = PTR_DAT_00053170;" (assignment_expression "puVar3 = PTR_DAT_00053170" identifier = identifier) ;) (expression_statement "puVar2 = PTR_DAT_0005316c;" (assignment_expression "puVar2 = PTR_DAT_0005316c" identifier = identifier) ;) (expression_statement "puVar4 = (undefined4 *)*param_1;" (assignment_expression "puVar4 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "iVar10 = 1;" (assignment_expression "iVar10 = 1" identifier = number_literal) ;) (expression_statement "uVar7 = puVar4[4];" (assignment_expression "uVar7 = puVar4[4]" identifier = (subscript_expression "puVar4[4]" identifier [ number_literal ])) ;) (expression_statement "puVar25 = (ushort *)param_1[5];" (assignment_expression "puVar25 = (ushort *)param_1[5]" identifier = (cast_expression "(ushort *)param_1[5]" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[5]" identifier [ number_literal ]))) ;) (expression_statement "puVar26 = (undefined1 *)param_1[7];" (assignment_expression "puVar26 = (undefined1 *)param_1[7]" identifier = (cast_expression "(undefined1 *)param_1[7]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[7]" identifier [ number_literal ]))) ;) (if_statement "if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }" if (parenthesized_expression "((uVar7 & 2) != 0)" ( (binary_expression "(uVar7 & 2) != 0" (parenthesized_expression "(uVar7 & 2)" ( (binary_expression "uVar7 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    iVar10 = 3;\n  }" { (expression_statement "iVar10 = 3;" (assignment_expression "iVar10 = 3" identifier = number_literal) ;) })) (expression_statement "uVar8 = *(undefined4 *)*puVar4;" (assignment_expression "uVar8 = *(undefined4 *)*puVar4" identifier = (pointer_expression "*(undefined4 *)*puVar4" * (cast_expression "(undefined4 *)*puVar4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier)))) ;) (expression_statement "iVar24 = puVar4[3];" (assignment_expression "iVar24 = puVar4[3]" identifier = (subscript_expression "puVar4[3]" identifier [ number_literal ])) ;) (expression_statement "iVar21 = puVar4[2];" (assignment_expression "iVar21 = puVar4[2]" identifier = (subscript_expression "puVar4[2]" identifier [ number_literal ])) ;) (if_statement "if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" if (parenthesized_expression "((uVar7 & 1) == 0)" ( (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" ( (binary_expression "uVar7 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }" { (if_statement "if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }" if (parenthesized_expression "(iVar24 != 0)" ( (binary_expression "iVar24 != 0" identifier != number_literal) )) (compound_statement "{\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }" { (do_statement "do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);" do (compound_statement "{\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      }" { (expression_statement "puVar18 = puVar26;" (assignment_expression "puVar18 = puVar26" identifier = identifier) ;) (expression_statement "puVar11 = puVar25;" (assignment_expression "puVar11 = puVar25" identifier = identifier) ;) (if_statement "if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }" if (parenthesized_expression "(puVar26 < puVar26 + iVar10 * iVar21)" ( (binary_expression "puVar26 < puVar26 + iVar10 * iVar21" identifier < (binary_expression "puVar26 + iVar10 * iVar21" identifier + (binary_expression "iVar10 * iVar21" identifier * identifier))) )) (compound_statement "{\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }" { (do_statement "do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);" do (compound_statement "{\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          }" { (expression_statement "puVar16 = puVar18 + 1;" (assignment_expression "puVar16 = puVar18 + 1" identifier = (binary_expression "puVar18 + 1" identifier + number_literal)) ;) (expression_statement "uVar7 = (uint)*puVar11 * 0xff >> 0xf;" (assignment_expression "uVar7 = (uint)*puVar11 * 0xff >> 0xf" identifier = (binary_expression "(uint)*puVar11 * 0xff >> 0xf" (binary_expression "(uint)*puVar11 * 0xff" (binary_expression "(uint)*puVar11" (parenthesized_expression "(uint)" ( identifier )) * identifier) * number_literal) >> number_literal)) ;) (expression_statement "*puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);" (assignment_expression "*puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" (pointer_expression "*puVar18" * identifier) = (cast_expression "(char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" ( (binary_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8" (binary_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2)" (parenthesized_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)" ( (binary_expression "((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc" (binary_expression "((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7]" (parenthesized_expression "((uint)*puVar11 * 0xff & 0x7fff)" ( (binary_expression "(uint)*puVar11 * 0xff & 0x7fff" (binary_expression "(uint)*puVar11 * 0xff" (binary_expression "(uint)*puVar11" (parenthesized_expression "(uint)" ( identifier )) * identifier) * number_literal) & number_literal) )) * (cast_expression "(uint)(byte)puVar2[uVar7]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)puVar2[uVar7]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "puVar2[uVar7]" identifier [ identifier ])))) >> number_literal) )) + (binary_expression "(uint)*(ushort *)(puVar3 + uVar7 * 2)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(puVar3 + uVar7 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + uVar7 * 2)" ( (binary_expression "puVar3 + uVar7 * 2" identifier + (binary_expression "uVar7 * 2" identifier * number_literal)) ))))) >> number_literal) )))) ;) (expression_statement "puVar18 = puVar16;" (assignment_expression "puVar18 = puVar16" identifier = identifier) ;) (expression_statement "puVar11 = puVar11 + 1;" (assignment_expression "puVar11 = puVar11 + 1" identifier = (binary_expression "puVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar26 + iVar10 * iVar21 != puVar16)" ( (binary_expression "puVar26 + iVar10 * iVar21 != puVar16" (binary_expression "puVar26 + iVar10 * iVar21" identifier + (binary_expression "iVar10 * iVar21" identifier * identifier)) != identifier) )) ;) })) (expression_statement "iVar24 = iVar24 + -1;" (assignment_expression "iVar24 = iVar24 + -1" identifier = (binary_expression "iVar24 + -1" identifier + number_literal)) ;) (expression_statement "(*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);" (call_expression "(*(code *)PTR_png_write_row_00053448)(uVar8,puVar26)" (parenthesized_expression "(*(code *)PTR_png_write_row_00053448)" ( (pointer_expression "*(code *)PTR_png_write_row_00053448" * (cast_expression "(code *)PTR_png_write_row_00053448" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,puVar26)" ( identifier , identifier ))) ;) (expression_statement "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));" (assignment_expression "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" identifier = (cast_expression "(ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" ( (binary_expression "(int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" (cast_expression "(int)puVar25" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" ( (binary_expression "*(ushort *)((int)param_1 + 0x1a) & 0xfffe" (pointer_expression "*(ushort *)((int)param_1 + 0x1a)" * (cast_expression "(ushort *)((int)param_1 + 0x1a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x1a)" ( (binary_expression "(int)param_1 + 0x1a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) ))) )))) ;) }) while (parenthesized_expression "(iVar24 != 0)" ( (binary_expression "iVar24 != 0" identifier != number_literal) )) ;) (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" else (compound_statement "{\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" { (expression_statement "iVar23 = iVar10;" (assignment_expression "iVar23 = iVar10" identifier = identifier) ;) (if_statement "if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }" if (parenthesized_expression "((uVar7 & 0x20) != 0)" ( (binary_expression "(uVar7 & 0x20) != 0" (parenthesized_expression "(uVar7 & 0x20)" ( (binary_expression "uVar7 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }" { (expression_statement "puVar25 = puVar25 + 1;" (assignment_expression "puVar25 = puVar25 + 1" identifier = (binary_expression "puVar25 + 1" identifier + number_literal)) ;) (expression_statement "puVar26 = puVar26 + 1;" (assignment_expression "puVar26 = puVar26 + 1" identifier = (binary_expression "puVar26 + 1" identifier + number_literal)) ;) (expression_statement "iVar23 = -1;" (assignment_expression "iVar23 = -1" identifier = number_literal) ;) })) (expression_statement "iVar22 = iVar10 + 1;" (assignment_expression "iVar22 = iVar10 + 1" identifier = (binary_expression "iVar10 + 1" identifier + number_literal)) ;) (if_statement "if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }" if (parenthesized_expression "(iVar24 != 0)" ( (binary_expression "iVar24 != 0" identifier != number_literal) )) (compound_statement "{\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }" { (do_statement "do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);" do (compound_statement "{\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      }" { (if_statement "if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }" if (parenthesized_expression "(puVar26 < puVar26 + iVar22 * iVar21)" ( (binary_expression "puVar26 < puVar26 + iVar22 * iVar21" identifier < (binary_expression "puVar26 + iVar22 * iVar21" identifier + (binary_expression "iVar22 * iVar21" identifier * identifier))) )) (compound_statement "{\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }" { (expression_statement "iVar19 = 0x807f;" (assignment_expression "iVar19 = 0x807f" identifier = number_literal) ;) (expression_statement "puVar16 = puVar26 + iVar10;" (assignment_expression "puVar16 = puVar26 + iVar10" identifier = (binary_expression "puVar26 + iVar10" identifier + identifier)) ;) (expression_statement "iVar20 = 0x7f7f8080;" (assignment_expression "iVar20 = 0x7f7f8080" identifier = number_literal) ;) (expression_statement "puVar18 = puVar26;" (assignment_expression "puVar18 = puVar26" identifier = identifier) ;) (expression_statement "puVar11 = puVar25;" (assignment_expression "puVar11 = puVar25" identifier = identifier) ;) (do_statement "do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);" do (compound_statement "{\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          }" { (expression_statement "uVar1 = puVar11[iVar23];" (assignment_expression "uVar1 = puVar11[iVar23]" identifier = (subscript_expression "puVar11[iVar23]" identifier [ identifier ])) ;) (expression_statement "uVar7 = (uint)uVar1;" (assignment_expression "uVar7 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar5 = uVar7 * 0xff + iVar19;" (assignment_expression "iVar5 = uVar7 * 0xff + iVar19" identifier = (binary_expression "uVar7 * 0xff + iVar19" (binary_expression "uVar7 * 0xff" identifier * number_literal) + identifier)) ;) (expression_statement "puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);" (assignment_expression "puVar18[iVar23] = (char)((uint)iVar5 >> 0x10)" (subscript_expression "puVar18[iVar23]" identifier [ identifier ]) = (cast_expression "(char)((uint)iVar5 >> 0x10)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((uint)iVar5 >> 0x10)" ( (binary_expression "(uint)iVar5 >> 0x10" (cast_expression "(uint)iVar5" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }" if (parenthesized_expression "((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe)" ( (binary_expression "(((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe" (parenthesized_expression "(((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff)" ( (binary_expression "((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff" (binary_expression "((uint)(iVar5 * 0x100) >> 0x18) - 1" (parenthesized_expression "((uint)(iVar5 * 0x100) >> 0x18)" ( (binary_expression "(uint)(iVar5 * 0x100) >> 0x18" (call_expression "(uint)(iVar5 * 0x100)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 * 0x100)" ( (binary_expression "iVar5 * 0x100" identifier * number_literal) ))) >> number_literal) )) - number_literal) & number_literal) )) < number_literal) )) (compound_statement "{\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }" { (if_statement "if (uVar7 == 0) {\n                trap(7);\n              }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n                trap(7);\n              }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;" (assignment_expression "iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7" identifier = (binary_expression "(int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7" (cast_expression "(int)((uint)(uVar1 >> 1) + iVar20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(uVar1 >> 1) + iVar20)" ( (binary_expression "(uint)(uVar1 >> 1) + iVar20" (call_expression "(uint)(uVar1 >> 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar1 >> 1)" ( (binary_expression "uVar1 >> 1" identifier >> number_literal) ))) + identifier) ))) / (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier))) ;) }) (else_clause "else {\n              iVar5 = 0;\n            }" else (compound_statement "{\n              iVar5 = 0;\n            }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }))) (expression_statement "uVar17 = (uint)(uVar7 < 0x80);" (assignment_expression "uVar17 = (uint)(uVar7 < 0x80)" identifier = (call_expression "(uint)(uVar7 < 0x80)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar7 < 0x80)" ( (binary_expression "uVar7 < 0x80" identifier < number_literal) )))) ;) (expression_statement "puVar12 = puVar18;" (assignment_expression "puVar12 = puVar18" identifier = identifier) ;) (expression_statement "puVar15 = puVar11;" (assignment_expression "puVar15 = puVar11" identifier = identifier) ;) (do_statement "do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);" do (compound_statement "{\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            }" { (while_statement "while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }" { (expression_statement "puVar14 = puVar15 + 1;" (assignment_expression "puVar14 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) (expression_statement "uVar9 = (uint)*puVar15;" (assignment_expression "uVar9 = (uint)*puVar15" identifier = (binary_expression "(uint)*puVar15" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "puVar13 = puVar12 + 1;" (assignment_expression "puVar13 = puVar12 + 1" identifier = (binary_expression "puVar12 + 1" identifier + number_literal)) ;) (if_statement "if (uVar9 < uVar7) break;" if (parenthesized_expression "(uVar9 < uVar7)" ( (binary_expression "uVar9 < uVar7" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar6 = 0xff;" (assignment_expression "uVar6 = 0xff" identifier = number_literal) ;) (labeled_statement "LAB_00036d7c:\n                puVar13[-1] = uVar6;" statement_identifier : (expression_statement "puVar13[-1] = uVar6;" (assignment_expression "puVar13[-1] = uVar6" (subscript_expression "puVar13[-1]" identifier [ number_literal ]) = identifier) ;)) (expression_statement "puVar12 = puVar13;" (assignment_expression "puVar12 = puVar13" identifier = identifier) ;) (expression_statement "puVar15 = puVar14;" (assignment_expression "puVar15 = puVar14" identifier = identifier) ;) (if_statement "if (puVar13 == puVar16) goto LAB_00036db4;" if (parenthesized_expression "(puVar13 == puVar16)" ( (binary_expression "puVar13 == puVar16" identifier == identifier) )) (goto_statement "goto LAB_00036db4;" goto statement_identifier ;)) })) (expression_statement "uVar6 = 0xff;" (assignment_expression "uVar6 = 0xff" identifier = number_literal) ;) (if_statement "if (uVar17 != 0) goto LAB_00036d7c;" if (parenthesized_expression "(uVar17 != 0)" ( (binary_expression "uVar17 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00036d7c;" goto statement_identifier ;)) (if_statement "if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }" { (expression_statement "uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);" (assignment_expression "uVar6 = FUN_000352b4(uVar9,uVar7,iVar5)" identifier = (call_expression "FUN_000352b4(uVar9,uVar7,iVar5)" identifier (argument_list "(uVar9,uVar7,iVar5)" ( identifier , identifier , identifier )))) ;) (goto_statement "goto LAB_00036d7c;" goto statement_identifier ;) })) (expression_statement "*puVar12 = 0;" (assignment_expression "*puVar12 = 0" (pointer_expression "*puVar12" * identifier) = number_literal) ;) (expression_statement "puVar12 = puVar13;" (assignment_expression "puVar12 = puVar13" identifier = identifier) ;) (expression_statement "puVar15 = puVar14;" (assignment_expression "puVar15 = puVar14" identifier = identifier) ;) }) while (parenthesized_expression "(puVar13 != puVar16)" ( (binary_expression "puVar13 != puVar16" identifier != identifier) )) ;) (labeled_statement "LAB_00036db4:\n            puVar18 = puVar18 + iVar22;" statement_identifier : (expression_statement "puVar18 = puVar18 + iVar22;" (assignment_expression "puVar18 = puVar18 + iVar22" identifier = (binary_expression "puVar18 + iVar22" identifier + identifier)) ;)) (expression_statement "puVar11 = puVar11 + iVar22;" (assignment_expression "puVar11 = puVar11 + iVar22" identifier = (binary_expression "puVar11 + iVar22" identifier + identifier)) ;) (expression_statement "puVar16 = puVar16 + iVar22;" (assignment_expression "puVar16 = puVar16 + iVar22" identifier = (binary_expression "puVar16 + iVar22" identifier + identifier)) ;) }) while (parenthesized_expression "(puVar18 < puVar26 + iVar22 * iVar21)" ( (binary_expression "puVar18 < puVar26 + iVar22 * iVar21" identifier < (binary_expression "puVar26 + iVar22 * iVar21" identifier + (binary_expression "iVar22 * iVar21" identifier * identifier))) )) ;) })) (expression_statement "iVar24 = iVar24 + -1;" (assignment_expression "iVar24 = iVar24 + -1" identifier = (binary_expression "iVar24 + -1" identifier + number_literal)) ;) (expression_statement "(*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);" (call_expression "(*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7])" (parenthesized_expression "(*(code *)PTR_png_write_row_00053448)" ( (pointer_expression "*(code *)PTR_png_write_row_00053448" * (cast_expression "(code *)PTR_png_write_row_00053448" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,param_1[7])" ( identifier , (subscript_expression "param_1[7]" identifier [ number_literal ]) ))) ;) (expression_statement "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));" (assignment_expression "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" identifier = (cast_expression "(ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" ( (binary_expression "(int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" (cast_expression "(int)puVar25" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" ( (binary_expression "*(ushort *)((int)param_1 + 0x1a) & 0xfffe" (pointer_expression "*(ushort *)((int)param_1 + 0x1a)" * (cast_expression "(ushort *)((int)param_1 + 0x1a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x1a)" ( (binary_expression "(int)param_1 + 0x1a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) ))) )))) ;) }) while (parenthesized_expression "(iVar24 != 0)" ( (binary_expression "iVar24 != 0" identifier != number_literal) )) ;) })) }))) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + (binary_expression IDENT * IDENT))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * LIT) >> LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * LIT) & LIT) )) * (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ])))) >> LIT) )) + (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * IDENT)) != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) & LIT) ))) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (return_statement return LIT ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + (binary_expression IDENT * IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT * LIT) ))) >> LIT) )) - LIT) & LIT) )) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) + IDENT) ))) / (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + (binary_expression IDENT * IDENT))) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) & LIT) ))) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) }))) (return_statement return LIT ;) })))
(function_definition "undefined4 FUN_00036c34(int *param_1)\n\n{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined1 uVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  int iVar10;\n  ushort *puVar11;\n  undefined1 *puVar12;\n  undefined1 *puVar13;\n  ushort *puVar14;\n  ushort *puVar15;\n  undefined1 *puVar16;\n  uint uVar17;\n  undefined1 *puVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  ushort *puVar25;\n  undefined1 *puVar26;\n  \n  puVar3 = PTR_DAT_00053170;\n  puVar2 = PTR_DAT_0005316c;\n  puVar4 = (undefined4 *)*param_1;\n  iVar10 = 1;\n  uVar7 = puVar4[4];\n  puVar25 = (ushort *)param_1[5];\n  puVar26 = (undefined1 *)param_1[7];\n  if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar24 = puVar4[3];\n  iVar21 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }\n  return 1;\n}" (type_identifier "undefined4") (function_declarator "FUN_00036c34(int *param_1)" (identifier "FUN_00036c34") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  ushort uVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined1 uVar6;\n  uint uVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  int iVar10;\n  ushort *puVar11;\n  undefined1 *puVar12;\n  undefined1 *puVar13;\n  ushort *puVar14;\n  ushort *puVar15;\n  undefined1 *puVar16;\n  uint uVar17;\n  undefined1 *puVar18;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  ushort *puVar25;\n  undefined1 *puVar26;\n  \n  puVar3 = PTR_DAT_00053170;\n  puVar2 = PTR_DAT_0005316c;\n  puVar4 = (undefined4 *)*param_1;\n  iVar10 = 1;\n  uVar7 = puVar4[4];\n  puVar25 = (ushort *)param_1[5];\n  puVar26 = (undefined1 *)param_1[7];\n  if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }\n  uVar8 = *(undefined4 *)*puVar4;\n  iVar24 = puVar4[3];\n  iVar21 = puVar4[2];\n  if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }\n  return 1;\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined4 *puVar4;" (type_identifier "undefined4") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "undefined1 uVar6;" (type_identifier "undefined1") (identifier "uVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "undefined4 uVar8;" (type_identifier "undefined4") (identifier "uVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "ushort *puVar11;" (type_identifier "ushort") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "undefined1 *puVar12;" (type_identifier "undefined1") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "undefined1 *puVar13;" (type_identifier "undefined1") (pointer_declarator "*puVar13" (* "*") (identifier "puVar13")) (; ";")) (declaration "ushort *puVar14;" (type_identifier "ushort") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "ushort *puVar15;" (type_identifier "ushort") (pointer_declarator "*puVar15" (* "*") (identifier "puVar15")) (; ";")) (declaration "undefined1 *puVar16;" (type_identifier "undefined1") (pointer_declarator "*puVar16" (* "*") (identifier "puVar16")) (; ";")) (declaration "uint uVar17;" (type_identifier "uint") (identifier "uVar17") (; ";")) (declaration "undefined1 *puVar18;" (type_identifier "undefined1") (pointer_declarator "*puVar18" (* "*") (identifier "puVar18")) (; ";")) (declaration "int iVar19;" (primitive_type "int") (identifier "iVar19") (; ";")) (declaration "int iVar20;" (primitive_type "int") (identifier "iVar20") (; ";")) (declaration "int iVar21;" (primitive_type "int") (identifier "iVar21") (; ";")) (declaration "int iVar22;" (primitive_type "int") (identifier "iVar22") (; ";")) (declaration "int iVar23;" (primitive_type "int") (identifier "iVar23") (; ";")) (declaration "int iVar24;" (primitive_type "int") (identifier "iVar24") (; ";")) (declaration "ushort *puVar25;" (type_identifier "ushort") (pointer_declarator "*puVar25" (* "*") (identifier "puVar25")) (; ";")) (declaration "undefined1 *puVar26;" (type_identifier "undefined1") (pointer_declarator "*puVar26" (* "*") (identifier "puVar26")) (; ";")) (expression_statement "puVar3 = PTR_DAT_00053170;" (assignment_expression "puVar3 = PTR_DAT_00053170" (identifier "puVar3") (= "=") (identifier "PTR_DAT_00053170")) (; ";")) (expression_statement "puVar2 = PTR_DAT_0005316c;" (assignment_expression "puVar2 = PTR_DAT_0005316c" (identifier "puVar2") (= "=") (identifier "PTR_DAT_0005316c")) (; ";")) (expression_statement "puVar4 = (undefined4 *)*param_1;" (assignment_expression "puVar4 = (undefined4 *)*param_1" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)*param_1" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "iVar10 = 1;" (assignment_expression "iVar10 = 1" (identifier "iVar10") (= "=") (number_literal "1")) (; ";")) (expression_statement "uVar7 = puVar4[4];" (assignment_expression "uVar7 = puVar4[4]" (identifier "uVar7") (= "=") (subscript_expression "puVar4[4]" (identifier "puVar4") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "puVar25 = (ushort *)param_1[5];" (assignment_expression "puVar25 = (ushort *)param_1[5]" (identifier "puVar25") (= "=") (cast_expression "(ushort *)param_1[5]" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")))) (; ";")) (expression_statement "puVar26 = (undefined1 *)param_1[7];" (assignment_expression "puVar26 = (undefined1 *)param_1[7]" (identifier "puVar26") (= "=") (cast_expression "(undefined1 *)param_1[7]" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")))) (; ";")) (if_statement "if ((uVar7 & 2) != 0) {\n    iVar10 = 3;\n  }" (if "if") (parenthesized_expression "((uVar7 & 2) != 0)" (( "(") (binary_expression "(uVar7 & 2) != 0" (parenthesized_expression "(uVar7 & 2)" (( "(") (binary_expression "uVar7 & 2" (identifier "uVar7") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    iVar10 = 3;\n  }" ({ "{") (expression_statement "iVar10 = 3;" (assignment_expression "iVar10 = 3" (identifier "iVar10") (= "=") (number_literal "3")) (; ";")) (} "}"))) (expression_statement "uVar8 = *(undefined4 *)*puVar4;" (assignment_expression "uVar8 = *(undefined4 *)*puVar4" (identifier "uVar8") (= "=") (pointer_expression "*(undefined4 *)*puVar4" (* "*") (cast_expression "(undefined4 *)*puVar4" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))))) (; ";")) (expression_statement "iVar24 = puVar4[3];" (assignment_expression "iVar24 = puVar4[3]" (identifier "iVar24") (= "=") (subscript_expression "puVar4[3]" (identifier "puVar4") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "iVar21 = puVar4[2];" (assignment_expression "iVar21 = puVar4[2]" (identifier "iVar21") (= "=") (subscript_expression "puVar4[2]" (identifier "puVar4") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if ((uVar7 & 1) == 0) {\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }\n  else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" (if "if") (parenthesized_expression "((uVar7 & 1) == 0)" (( "(") (binary_expression "(uVar7 & 1) == 0" (parenthesized_expression "(uVar7 & 1)" (( "(") (binary_expression "uVar7 & 1" (identifier "uVar7") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }\n  }" ({ "{") (if_statement "if (iVar24 != 0) {\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }" (if "if") (parenthesized_expression "(iVar24 != 0)" (( "(") (binary_expression "iVar24 != 0" (identifier "iVar24") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n      return 1;\n    }" ({ "{") (do_statement "do {\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);" (do "do") (compound_statement "{\n        puVar18 = puVar26;\n        puVar11 = puVar25;\n        if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      }" ({ "{") (expression_statement "puVar18 = puVar26;" (assignment_expression "puVar18 = puVar26" (identifier "puVar18") (= "=") (identifier "puVar26")) (; ";")) (expression_statement "puVar11 = puVar25;" (assignment_expression "puVar11 = puVar25" (identifier "puVar11") (= "=") (identifier "puVar25")) (; ";")) (if_statement "if (puVar26 < puVar26 + iVar10 * iVar21) {\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }" (if "if") (parenthesized_expression "(puVar26 < puVar26 + iVar10 * iVar21)" (( "(") (binary_expression "puVar26 < puVar26 + iVar10 * iVar21" (identifier "puVar26") (< "<") (binary_expression "puVar26 + iVar10 * iVar21" (identifier "puVar26") (+ "+") (binary_expression "iVar10 * iVar21" (identifier "iVar10") (* "*") (identifier "iVar21")))) () ")")) (compound_statement "{\n          do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);\n        }" ({ "{") (do_statement "do {\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          } while (puVar26 + iVar10 * iVar21 != puVar16);" (do "do") (compound_statement "{\n            puVar16 = puVar18 + 1;\n            uVar7 = (uint)*puVar11 * 0xff >> 0xf;\n            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);\n            puVar18 = puVar16;\n            puVar11 = puVar11 + 1;\n          }" ({ "{") (expression_statement "puVar16 = puVar18 + 1;" (assignment_expression "puVar16 = puVar18 + 1" (identifier "puVar16") (= "=") (binary_expression "puVar18 + 1" (identifier "puVar18") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar7 = (uint)*puVar11 * 0xff >> 0xf;" (assignment_expression "uVar7 = (uint)*puVar11 * 0xff >> 0xf" (identifier "uVar7") (= "=") (binary_expression "(uint)*puVar11 * 0xff >> 0xf" (binary_expression "(uint)*puVar11 * 0xff" (binary_expression "(uint)*puVar11" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "puVar11")) (* "*") (number_literal "0xff")) (>> ">>") (number_literal "0xf"))) (; ";")) (expression_statement "*puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);" (assignment_expression "*puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" (pointer_expression "*puVar18" (* "*") (identifier "puVar18")) (= "=") (cast_expression "(char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8)" (( "(") (binary_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8" (binary_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)\n                              + (uint)*(ushort *)(puVar3 + uVar7 * 2)" (parenthesized_expression "(((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)" (( "(") (binary_expression "((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc" (binary_expression "((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7]" (parenthesized_expression "((uint)*puVar11 * 0xff & 0x7fff)" (( "(") (binary_expression "(uint)*puVar11 * 0xff & 0x7fff" (binary_expression "(uint)*puVar11 * 0xff" (binary_expression "(uint)*puVar11" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "puVar11")) (* "*") (number_literal "0xff")) (& "&") (number_literal "0x7fff")) () ")")) (* "*") (cast_expression "(uint)(byte)puVar2[uVar7]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (cast_expression "(byte)puVar2[uVar7]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "puVar2[uVar7]" (identifier "puVar2") ([ "[") (identifier "uVar7") (] "]"))))) (>> ">>") (number_literal "0xc")) () ")")) (+ "+") (binary_expression "(uint)*(ushort *)(puVar3 + uVar7 * 2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(puVar3 + uVar7 * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + uVar7 * 2)" (( "(") (binary_expression "puVar3 + uVar7 * 2" (identifier "puVar3") (+ "+") (binary_expression "uVar7 * 2" (identifier "uVar7") (* "*") (number_literal "2"))) () ")"))))) (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "puVar18 = puVar16;" (assignment_expression "puVar18 = puVar16" (identifier "puVar18") (= "=") (identifier "puVar16")) (; ";")) (expression_statement "puVar11 = puVar11 + 1;" (assignment_expression "puVar11 = puVar11 + 1" (identifier "puVar11") (= "=") (binary_expression "puVar11 + 1" (identifier "puVar11") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar26 + iVar10 * iVar21 != puVar16)" (( "(") (binary_expression "puVar26 + iVar10 * iVar21 != puVar16" (binary_expression "puVar26 + iVar10 * iVar21" (identifier "puVar26") (+ "+") (binary_expression "iVar10 * iVar21" (identifier "iVar10") (* "*") (identifier "iVar21"))) (!= "!=") (identifier "puVar16")) () ")")) (; ";")) (} "}"))) (expression_statement "iVar24 = iVar24 + -1;" (assignment_expression "iVar24 = iVar24 + -1" (identifier "iVar24") (= "=") (binary_expression "iVar24 + -1" (identifier "iVar24") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "(*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);" (call_expression "(*(code *)PTR_png_write_row_00053448)(uVar8,puVar26)" (parenthesized_expression "(*(code *)PTR_png_write_row_00053448)" (( "(") (pointer_expression "*(code *)PTR_png_write_row_00053448" (* "*") (cast_expression "(code *)PTR_png_write_row_00053448" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_png_write_row_00053448"))) () ")")) (argument_list "(uVar8,puVar26)" (( "(") (identifier "uVar8") (, ",") (identifier "puVar26") () ")"))) (; ";")) (expression_statement "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));" (assignment_expression "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" (identifier "puVar25") (= "=") (cast_expression "(ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" (( "(") (binary_expression "(int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" (cast_expression "(int)puVar25" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar25")) (+ "+") (parenthesized_expression "(*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" (( "(") (binary_expression "*(ushort *)((int)param_1 + 0x1a) & 0xfffe" (pointer_expression "*(ushort *)((int)param_1 + 0x1a)" (* "*") (cast_expression "(ushort *)((int)param_1 + 0x1a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x1a)" (( "(") (binary_expression "(int)param_1 + 0x1a" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x1a")) () ")")))) (& "&") (number_literal "0xfffe")) () ")"))) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar24 != 0)" (( "(") (binary_expression "iVar24 != 0" (identifier "iVar24") (!= "!=") (number_literal "0")) () ")")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" (else "else") (compound_statement "{\n    iVar23 = iVar10;\n    if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }\n    iVar22 = iVar10 + 1;\n    if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }\n  }" ({ "{") (expression_statement "iVar23 = iVar10;" (assignment_expression "iVar23 = iVar10" (identifier "iVar23") (= "=") (identifier "iVar10")) (; ";")) (if_statement "if ((uVar7 & 0x20) != 0) {\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }" (if "if") (parenthesized_expression "((uVar7 & 0x20) != 0)" (( "(") (binary_expression "(uVar7 & 0x20) != 0" (parenthesized_expression "(uVar7 & 0x20)" (( "(") (binary_expression "uVar7 & 0x20" (identifier "uVar7") (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      puVar25 = puVar25 + 1;\n      puVar26 = puVar26 + 1;\n      iVar23 = -1;\n    }" ({ "{") (expression_statement "puVar25 = puVar25 + 1;" (assignment_expression "puVar25 = puVar25 + 1" (identifier "puVar25") (= "=") (binary_expression "puVar25 + 1" (identifier "puVar25") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar26 = puVar26 + 1;" (assignment_expression "puVar26 = puVar26 + 1" (identifier "puVar26") (= "=") (binary_expression "puVar26 + 1" (identifier "puVar26") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar23 = -1;" (assignment_expression "iVar23 = -1" (identifier "iVar23") (= "=") (number_literal "-1")) (; ";")) (} "}"))) (expression_statement "iVar22 = iVar10 + 1;" (assignment_expression "iVar22 = iVar10 + 1" (identifier "iVar22") (= "=") (binary_expression "iVar10 + 1" (identifier "iVar10") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar24 != 0) {\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }" (if "if") (parenthesized_expression "(iVar24 != 0)" (( "(") (binary_expression "iVar24 != 0" (identifier "iVar24") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);\n    }" ({ "{") (do_statement "do {\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      } while (iVar24 != 0);" (do "do") (compound_statement "{\n        if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }\n        iVar24 = iVar24 + -1;\n        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);\n        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));\n      }" ({ "{") (if_statement "if (puVar26 < puVar26 + iVar22 * iVar21) {\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }" (if "if") (parenthesized_expression "(puVar26 < puVar26 + iVar22 * iVar21)" (( "(") (binary_expression "puVar26 < puVar26 + iVar22 * iVar21" (identifier "puVar26") (< "<") (binary_expression "puVar26 + iVar22 * iVar21" (identifier "puVar26") (+ "+") (binary_expression "iVar22 * iVar21" (identifier "iVar22") (* "*") (identifier "iVar21")))) () ")")) (compound_statement "{\n          iVar19 = 0x807f;\n          puVar16 = puVar26 + iVar10;\n          iVar20 = 0x7f7f8080;\n          puVar18 = puVar26;\n          puVar11 = puVar25;\n          do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);\n        }" ({ "{") (expression_statement "iVar19 = 0x807f;" (assignment_expression "iVar19 = 0x807f" (identifier "iVar19") (= "=") (number_literal "0x807f")) (; ";")) (expression_statement "puVar16 = puVar26 + iVar10;" (assignment_expression "puVar16 = puVar26 + iVar10" (identifier "puVar16") (= "=") (binary_expression "puVar26 + iVar10" (identifier "puVar26") (+ "+") (identifier "iVar10"))) (; ";")) (expression_statement "iVar20 = 0x7f7f8080;" (assignment_expression "iVar20 = 0x7f7f8080" (identifier "iVar20") (= "=") (number_literal "0x7f7f8080")) (; ";")) (expression_statement "puVar18 = puVar26;" (assignment_expression "puVar18 = puVar26" (identifier "puVar18") (= "=") (identifier "puVar26")) (; ";")) (expression_statement "puVar11 = puVar25;" (assignment_expression "puVar11 = puVar25" (identifier "puVar11") (= "=") (identifier "puVar25")) (; ";")) (do_statement "do {\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          } while (puVar18 < puVar26 + iVar22 * iVar21);" (do "do") (compound_statement "{\n            uVar1 = puVar11[iVar23];\n            uVar7 = (uint)uVar1;\n            iVar5 = uVar7 * 0xff + iVar19;\n            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);\n            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }\n            uVar17 = (uint)(uVar7 < 0x80);\n            puVar12 = puVar18;\n            puVar15 = puVar11;\n            do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);\nLAB_00036db4:\n            puVar18 = puVar18 + iVar22;\n            puVar11 = puVar11 + iVar22;\n            puVar16 = puVar16 + iVar22;\n          }" ({ "{") (expression_statement "uVar1 = puVar11[iVar23];" (assignment_expression "uVar1 = puVar11[iVar23]" (identifier "uVar1") (= "=") (subscript_expression "puVar11[iVar23]" (identifier "puVar11") ([ "[") (identifier "iVar23") (] "]"))) (; ";")) (expression_statement "uVar7 = (uint)uVar1;" (assignment_expression "uVar7 = (uint)uVar1" (identifier "uVar7") (= "=") (cast_expression "(uint)uVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar1"))) (; ";")) (expression_statement "iVar5 = uVar7 * 0xff + iVar19;" (assignment_expression "iVar5 = uVar7 * 0xff + iVar19" (identifier "iVar5") (= "=") (binary_expression "uVar7 * 0xff + iVar19" (binary_expression "uVar7 * 0xff" (identifier "uVar7") (* "*") (number_literal "0xff")) (+ "+") (identifier "iVar19"))) (; ";")) (expression_statement "puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);" (assignment_expression "puVar18[iVar23] = (char)((uint)iVar5 >> 0x10)" (subscript_expression "puVar18[iVar23]" (identifier "puVar18") ([ "[") (identifier "iVar23") (] "]")) (= "=") (cast_expression "(char)((uint)iVar5 >> 0x10)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((uint)iVar5 >> 0x10)" (( "(") (binary_expression "(uint)iVar5 >> 0x10" (cast_expression "(uint)iVar5" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "iVar5")) (>> ">>") (number_literal "0x10")) () ")")))) (; ";")) (if_statement "if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }\n            else {\n              iVar5 = 0;\n            }" (if "if") (parenthesized_expression "((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe)" (( "(") (binary_expression "(((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe" (parenthesized_expression "(((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff)" (( "(") (binary_expression "((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff" (binary_expression "((uint)(iVar5 * 0x100) >> 0x18) - 1" (parenthesized_expression "((uint)(iVar5 * 0x100) >> 0x18)" (( "(") (binary_expression "(uint)(iVar5 * 0x100) >> 0x18" (call_expression "(uint)(iVar5 * 0x100)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar5 * 0x100)" (( "(") (binary_expression "iVar5 * 0x100" (identifier "iVar5") (* "*") (number_literal "0x100")) () ")"))) (>> ">>") (number_literal "0x18")) () ")")) (- "-") (number_literal "1")) (& "&") (number_literal "0xff")) () ")")) (< "<") (number_literal "0xfe")) () ")")) (compound_statement "{\n              if (uVar7 == 0) {\n                trap(7);\n              }\n              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;\n            }" ({ "{") (if_statement "if (uVar7 == 0) {\n                trap(7);\n              }" (if "if") (parenthesized_expression "(uVar7 == 0)" (( "(") (binary_expression "uVar7 == 0" (identifier "uVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                trap(7);\n              }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;" (assignment_expression "iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7" (identifier "iVar5") (= "=") (binary_expression "(int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7" (cast_expression "(int)((uint)(uVar1 >> 1) + iVar20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uint)(uVar1 >> 1) + iVar20)" (( "(") (binary_expression "(uint)(uVar1 >> 1) + iVar20" (call_expression "(uint)(uVar1 >> 1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar1 >> 1)" (( "(") (binary_expression "uVar1 >> 1" (identifier "uVar1") (>> ">>") (number_literal "1")) () ")"))) (+ "+") (identifier "iVar20")) () ")"))) (/ "/") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")))) (; ";")) (} "}")) (else_clause "else {\n              iVar5 = 0;\n            }" (else "else") (compound_statement "{\n              iVar5 = 0;\n            }" ({ "{") (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (} "}")))) (expression_statement "uVar17 = (uint)(uVar7 < 0x80);" (assignment_expression "uVar17 = (uint)(uVar7 < 0x80)" (identifier "uVar17") (= "=") (call_expression "(uint)(uVar7 < 0x80)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar7 < 0x80)" (( "(") (binary_expression "uVar7 < 0x80" (identifier "uVar7") (< "<") (number_literal "0x80")) () ")")))) (; ";")) (expression_statement "puVar12 = puVar18;" (assignment_expression "puVar12 = puVar18" (identifier "puVar12") (= "=") (identifier "puVar18")) (; ";")) (expression_statement "puVar15 = puVar11;" (assignment_expression "puVar15 = puVar11" (identifier "puVar15") (= "=") (identifier "puVar11")) (; ";")) (do_statement "do {\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            } while (puVar13 != puVar16);" (do "do") (compound_statement "{\n              while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }\n              uVar6 = 0xff;\n              if (uVar17 != 0) goto LAB_00036d7c;\n              if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }\n              *puVar12 = 0;\n              puVar12 = puVar13;\n              puVar15 = puVar14;\n            }" ({ "{") (while_statement "while( true ) {\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n                puVar14 = puVar15 + 1;\n                uVar9 = (uint)*puVar15;\n                puVar13 = puVar12 + 1;\n                if (uVar9 < uVar7) break;\n                uVar6 = 0xff;\nLAB_00036d7c:\n                puVar13[-1] = uVar6;\n                puVar12 = puVar13;\n                puVar15 = puVar14;\n                if (puVar13 == puVar16) goto LAB_00036db4;\n              }" ({ "{") (expression_statement "puVar14 = puVar15 + 1;" (assignment_expression "puVar14 = puVar15 + 1" (identifier "puVar14") (= "=") (binary_expression "puVar15 + 1" (identifier "puVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar9 = (uint)*puVar15;" (assignment_expression "uVar9 = (uint)*puVar15" (identifier "uVar9") (= "=") (binary_expression "(uint)*puVar15" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "puVar15"))) (; ";")) (expression_statement "puVar13 = puVar12 + 1;" (assignment_expression "puVar13 = puVar12 + 1" (identifier "puVar13") (= "=") (binary_expression "puVar12 + 1" (identifier "puVar12") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar9 < uVar7) break;" (if "if") (parenthesized_expression "(uVar9 < uVar7)" (( "(") (binary_expression "uVar9 < uVar7" (identifier "uVar9") (< "<") (identifier "uVar7")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar6 = 0xff;" (assignment_expression "uVar6 = 0xff" (identifier "uVar6") (= "=") (number_literal "0xff")) (; ";")) (labeled_statement "LAB_00036d7c:\n                puVar13[-1] = uVar6;" (statement_identifier "LAB_00036d7c") (: ":") (expression_statement "puVar13[-1] = uVar6;" (assignment_expression "puVar13[-1] = uVar6" (subscript_expression "puVar13[-1]" (identifier "puVar13") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "uVar6")) (; ";"))) (expression_statement "puVar12 = puVar13;" (assignment_expression "puVar12 = puVar13" (identifier "puVar12") (= "=") (identifier "puVar13")) (; ";")) (expression_statement "puVar15 = puVar14;" (assignment_expression "puVar15 = puVar14" (identifier "puVar15") (= "=") (identifier "puVar14")) (; ";")) (if_statement "if (puVar13 == puVar16) goto LAB_00036db4;" (if "if") (parenthesized_expression "(puVar13 == puVar16)" (( "(") (binary_expression "puVar13 == puVar16" (identifier "puVar13") (== "==") (identifier "puVar16")) () ")")) (goto_statement "goto LAB_00036db4;" (goto "goto") (statement_identifier "LAB_00036db4") (; ";"))) (} "}"))) (expression_statement "uVar6 = 0xff;" (assignment_expression "uVar6 = 0xff" (identifier "uVar6") (= "=") (number_literal "0xff")) (; ";")) (if_statement "if (uVar17 != 0) goto LAB_00036d7c;" (if "if") (parenthesized_expression "(uVar17 != 0)" (( "(") (binary_expression "uVar17 != 0" (identifier "uVar17") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00036d7c;" (goto "goto") (statement_identifier "LAB_00036d7c") (; ";"))) (if_statement "if (uVar9 != 0) {\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }" (if "if") (parenthesized_expression "(uVar9 != 0)" (( "(") (binary_expression "uVar9 != 0" (identifier "uVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);\n                goto LAB_00036d7c;\n              }" ({ "{") (expression_statement "uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);" (assignment_expression "uVar6 = FUN_000352b4(uVar9,uVar7,iVar5)" (identifier "uVar6") (= "=") (call_expression "FUN_000352b4(uVar9,uVar7,iVar5)" (identifier "FUN_000352b4") (argument_list "(uVar9,uVar7,iVar5)" (( "(") (identifier "uVar9") (, ",") (identifier "uVar7") (, ",") (identifier "iVar5") () ")")))) (; ";")) (goto_statement "goto LAB_00036d7c;" (goto "goto") (statement_identifier "LAB_00036d7c") (; ";")) (} "}"))) (expression_statement "*puVar12 = 0;" (assignment_expression "*puVar12 = 0" (pointer_expression "*puVar12" (* "*") (identifier "puVar12")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar12 = puVar13;" (assignment_expression "puVar12 = puVar13" (identifier "puVar12") (= "=") (identifier "puVar13")) (; ";")) (expression_statement "puVar15 = puVar14;" (assignment_expression "puVar15 = puVar14" (identifier "puVar15") (= "=") (identifier "puVar14")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar13 != puVar16)" (( "(") (binary_expression "puVar13 != puVar16" (identifier "puVar13") (!= "!=") (identifier "puVar16")) () ")")) (; ";")) (labeled_statement "LAB_00036db4:\n            puVar18 = puVar18 + iVar22;" (statement_identifier "LAB_00036db4") (: ":") (expression_statement "puVar18 = puVar18 + iVar22;" (assignment_expression "puVar18 = puVar18 + iVar22" (identifier "puVar18") (= "=") (binary_expression "puVar18 + iVar22" (identifier "puVar18") (+ "+") (identifier "iVar22"))) (; ";"))) (expression_statement "puVar11 = puVar11 + iVar22;" (assignment_expression "puVar11 = puVar11 + iVar22" (identifier "puVar11") (= "=") (binary_expression "puVar11 + iVar22" (identifier "puVar11") (+ "+") (identifier "iVar22"))) (; ";")) (expression_statement "puVar16 = puVar16 + iVar22;" (assignment_expression "puVar16 = puVar16 + iVar22" (identifier "puVar16") (= "=") (binary_expression "puVar16 + iVar22" (identifier "puVar16") (+ "+") (identifier "iVar22"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar18 < puVar26 + iVar22 * iVar21)" (( "(") (binary_expression "puVar18 < puVar26 + iVar22 * iVar21" (identifier "puVar18") (< "<") (binary_expression "puVar26 + iVar22 * iVar21" (identifier "puVar26") (+ "+") (binary_expression "iVar22 * iVar21" (identifier "iVar22") (* "*") (identifier "iVar21")))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar24 = iVar24 + -1;" (assignment_expression "iVar24 = iVar24 + -1" (identifier "iVar24") (= "=") (binary_expression "iVar24 + -1" (identifier "iVar24") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "(*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);" (call_expression "(*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7])" (parenthesized_expression "(*(code *)PTR_png_write_row_00053448)" (( "(") (pointer_expression "*(code *)PTR_png_write_row_00053448" (* "*") (cast_expression "(code *)PTR_png_write_row_00053448" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_png_write_row_00053448"))) () ")")) (argument_list "(uVar8,param_1[7])" (( "(") (identifier "uVar8") (, ",") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) () ")"))) (; ";")) (expression_statement "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));" (assignment_expression "puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" (identifier "puVar25") (= "=") (cast_expression "(ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe))" (( "(") (binary_expression "(int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" (cast_expression "(int)puVar25" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar25")) (+ "+") (parenthesized_expression "(*(ushort *)((int)param_1 + 0x1a) & 0xfffe)" (( "(") (binary_expression "*(ushort *)((int)param_1 + 0x1a) & 0xfffe" (pointer_expression "*(ushort *)((int)param_1 + 0x1a)" (* "*") (cast_expression "(ushort *)((int)param_1 + 0x1a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x1a)" (( "(") (binary_expression "(int)param_1 + 0x1a" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x1a")) () ")")))) (& "&") (number_literal "0xfffe")) () ")"))) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar24 != 0)" (( "(") (binary_expression "iVar24 != 0" (identifier "iVar24") (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}"))) (} "}")))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

int function_1(type_1 argument)

{
  type_2 var_15;
  type_3 *puVar2;
  type_3 *var_8;
  type_4 *puVar4;
  int var_13;
  type_5 pVar6;
  type_6 var_1;
  type_4 uVar8;
  type_6 var_19;
  int var_4;
  type_2 *var_7;
  type_7 *var_18;
  type_7 *var_20;
  type_2 *puVar13;
  type_2 *var_17;
  type_7 *var_9;
  type_6 var_21;
  type_7 *var_6;
  int var_12;
  int var_16;
  int var_5;
  int var_11;
  int iVar22;
  int var_2;
  type_2 *var_10;
  type_7 *var_3;
  type_8 reciprocal;
  
  var_8 = PTR_png_sRGB_base_00053170;
  puVar2 = PTR_png_sRGB_delta_0005316c;
                    /* WARNING: Load size is inaccurate */
  puVar4 = *argument;
  var_4 = 1;
  var_1 = puVar4[4];
  var_10 = *(type_2 **)((int)argument + 0x14);
  var_3 = *(type_7 **)((int)argument + 0x1c);
  if ((var_1 & 2) != 0) {
    var_4 = 3;
  }
  uVar8 = *(type_4 *)*puVar4;
  var_2 = puVar4[3];
  var_5 = puVar4[2];
  if ((var_1 & 1) == 0) {
    if (var_2 != 0) {
      do {
        var_6 = var_3;
        var_7 = var_10;
        if (var_3 < var_3 + var_4 * var_5) {
          do {
            var_9 = var_6 + 1;
            var_1 = (type_6)*var_7 * 0xff >> 0xf;
            *var_6 = (char)((((type_6)*var_7 * 0xff & 0x7fff) * (type_6)(type_9)puVar2[var_1] >> 0xc)
                              + (type_6)*(type_2 *)(var_8 + var_1 * 2) >> 8);
            var_6 = var_9;
            var_7 = var_7 + 1;
          } while (var_3 + var_4 * var_5 != var_9);
        }
        var_2 = var_2 + -1;
        (*(type_10 *)PTR_png_write_row_00053448)(uVar8,var_3);
        var_10 = (type_2 *)((int)var_10 + (*(type_2 *)((int)argument + 0x1a) & 0xfffe));
      } while (var_2 != 0);
      return 1;
    }
  }
  else {
    iVar22 = var_4;
    if ((var_1 & 0x20) != 0) {
      var_10 = var_10 + 1;
      var_3 = var_3 + 1;
      iVar22 = -1;
    }
    var_11 = var_4 + 1;
    if (var_2 != 0) {
      do {
        if (var_3 < var_3 + var_11 * var_5) {
          var_12 = 0x807f;
          var_9 = var_3 + var_4;
          var_16 = 0x7f7f8080;
          var_6 = var_3;
          var_7 = var_10;
          do {
            var_15 = var_7[iVar22];
            var_1 = (type_6)var_15;
            var_13 = var_1 * 0xff + var_12;
            var_6[iVar22] = (char)((type_6)var_13 >> 0x10);
            if ((((type_6)(var_13 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {
              if (var_1 == 0) {
                var_14(7);
              }
              reciprocal = (int)((type_6)(var_15 >> 1) + var_16) / (int)var_1;
            }
            else {
              reciprocal = 0;
            }
            var_21 = (type_6)(var_1 < 0x80);
            var_18 = var_6;
            var_17 = var_7;
            do {
              while( true ) {
                puVar13 = var_17 + 1;
                var_19 = (type_6)*var_17;
                var_20 = var_18 + 1;
                if (var_19 < var_1) break;
                pVar6 = 0xff;
LAB_00036d7c:
                var_20[-1] = pVar6;
                var_18 = var_20;
                var_17 = puVar13;
                if (var_20 == var_9) goto LAB_00036db4;
              }
              pVar6 = 0xff;
              if (var_21 != 0) goto LAB_00036d7c;
              if (var_19 != 0) {
                pVar6 = var_22(var_19,var_1,reciprocal);
                goto LAB_00036d7c;
              }
              *var_18 = 0;
              var_18 = var_20;
              var_17 = puVar13;
            } while (var_20 != var_9);
LAB_00036db4:
            var_6 = var_6 + var_11;
            var_7 = var_7 + var_11;
            var_9 = var_9 + var_11;
          } while (var_6 < var_3 + var_11 * var_5);
        }
        var_2 = var_2 + -1;
        (*(type_10 *)PTR_png_write_row_00053448)(uVar8,*(type_4 *)((int)argument + 0x1c));
        var_10 = (type_2 *)((int)var_10 + (*(type_2 *)((int)argument + 0x1a) & 0xfffe));
      } while (var_2 != 0);
    }
  }
  return 1;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (number_literal)) right: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (identifier))))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (number_literal))))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (return_statement (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))) right: (number_literal)) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (number_literal))))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (return_statement (number_literal)))))

undefined4 MASKED(int *param_1)

{
  ushort uVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined4 *puVar4;
  int iVar5;
  undefined1 uVar6;
  uint uVar7;
  undefined4 uVar8;
  uint uVar9;
  int iVar10;
  ushort *puVar11;
  undefined1 *puVar12;
  undefined1 *puVar13;
  ushort *puVar14;
  ushort *puVar15;
  undefined1 *puVar16;
  uint uVar17;
  undefined1 *puVar18;
  int iVar19;
  int iVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  ushort *puVar25;
  undefined1 *puVar26;
  
  puVar3 = PTR_DAT_00053170;
  puVar2 = PTR_DAT_0005316c;
  puVar4 = (undefined4 *)*param_1;
  iVar10 = 1;
  uVar7 = puVar4[4];
  puVar25 = (ushort *)param_1[5];
  puVar26 = (undefined1 *)param_1[7];
  if ((uVar7 & 2) != 0) {
    iVar10 = 3;
  }
  uVar8 = *(undefined4 *)*puVar4;
  iVar24 = puVar4[3];
  iVar21 = puVar4[2];
  if ((uVar7 & 1) == 0) {
    if (iVar24 != 0) {
      do {
        puVar18 = puVar26;
        puVar11 = puVar25;
        if (puVar26 < puVar26 + iVar10 * iVar21) {
          do {
            puVar16 = puVar18 + 1;
            uVar7 = (uint)*puVar11 * 0xff >> 0xf;
            *puVar18 = (char)((((uint)*puVar11 * 0xff & 0x7fff) * (uint)(byte)puVar2[uVar7] >> 0xc)
                              + (uint)*(ushort *)(puVar3 + uVar7 * 2) >> 8);
            puVar18 = puVar16;
            puVar11 = puVar11 + 1;
          } while (puVar26 + iVar10 * iVar21 != puVar16);
        }
        iVar24 = iVar24 + -1;
        (*(code *)PTR_png_write_row_00053448)(uVar8,puVar26);
        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));
      } while (iVar24 != 0);
      return 1;
    }
  }
  else {
    iVar23 = iVar10;
    if ((uVar7 & 0x20) != 0) {
      puVar25 = puVar25 + 1;
      puVar26 = puVar26 + 1;
      iVar23 = -1;
    }
    iVar22 = iVar10 + 1;
    if (iVar24 != 0) {
      do {
        if (puVar26 < puVar26 + iVar22 * iVar21) {
          iVar19 = 0x807f;
          puVar16 = puVar26 + iVar10;
          iVar20 = 0x7f7f8080;
          puVar18 = puVar26;
          puVar11 = puVar25;
          do {
            uVar1 = puVar11[iVar23];
            uVar7 = (uint)uVar1;
            iVar5 = uVar7 * 0xff + iVar19;
            puVar18[iVar23] = (char)((uint)iVar5 >> 0x10);
            if ((((uint)(iVar5 * 0x100) >> 0x18) - 1 & 0xff) < 0xfe) {
              if (uVar7 == 0) {
                trap(7);
              }
              iVar5 = (int)((uint)(uVar1 >> 1) + iVar20) / (int)uVar7;
            }
            else {
              iVar5 = 0;
            }
            uVar17 = (uint)(uVar7 < 0x80);
            puVar12 = puVar18;
            puVar15 = puVar11;
            do {
              while( true ) {
                puVar14 = puVar15 + 1;
                uVar9 = (uint)*puVar15;
                puVar13 = puVar12 + 1;
                if (uVar9 < uVar7) break;
                uVar6 = 0xff;
LAB_00036d7c:
                puVar13[-1] = uVar6;
                puVar12 = puVar13;
                puVar15 = puVar14;
                if (puVar13 == puVar16) goto LAB_00036db4;
              }
              uVar6 = 0xff;
              if (uVar17 != 0) goto LAB_00036d7c;
              if (uVar9 != 0) {
                uVar6 = FUN_000352b4(uVar9,uVar7,iVar5);
                goto LAB_00036d7c;
              }
              *puVar12 = 0;
              puVar12 = puVar13;
              puVar15 = puVar14;
            } while (puVar13 != puVar16);
LAB_00036db4:
            puVar18 = puVar18 + iVar22;
            puVar11 = puVar11 + iVar22;
            puVar16 = puVar16 + iVar22;
          } while (puVar18 < puVar26 + iVar22 * iVar21);
        }
        iVar24 = iVar24 + -1;
        (*(code *)PTR_png_write_row_00053448)(uVar8,param_1[7]);
        puVar25 = (ushort *)((int)puVar25 + (*(ushort *)((int)param_1 + 0x1a) & 0xfffe));
      } while (iVar24 != 0);
    }
  }
  return 1;
}

