
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

void x11font_really_draw_text
               (x11font_drawfuncs *dfns,unifont_drawctx *ctx,x11font_individual *xfi,int x,int y,
               void *string,int nchars,int shadowoffset,int fontvariable,int cellwidth)

{
  bool bVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  
  if (fontvariable == 0) {
    (*dfns->setup)(ctx,xfi);
    bVar2 = false;
    iVar4 = 0;
  }
  else {
    iVar4 = nchars + -1;
    (*dfns->setup)(ctx,xfi);
    if (nchars < 1) {
      return;
    }
    nchars = 1;
    bVar2 = true;
  }
  iVar5 = 0;
  do {
    iVar3 = x;
    if (bVar2) {
      iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);
      iVar3 = (cellwidth - iVar3) / 2 + x;
    }
    (*dfns->draw)(ctx,xfi,iVar3,y,string,iVar5,nchars);
    if (shadowoffset != 0) {
      (*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);
    }
    iVar5 = iVar5 + nchars;
    bVar1 = 0 < iVar4;
    x = x + cellwidth;
    iVar4 = iVar4 + -1;
  } while (bVar1);
  return;
}



void FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,
                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,
                 int param_10)

{
  bool bVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  
  if (param_9 == 0) {
    (*(code *)param_1[1])(param_2,param_3);
    bVar2 = false;
    iVar4 = 0;
  }
  else {
    iVar4 = param_7 + -1;
    (*(code *)param_1[1])();
    if (param_7 < 1) {
      return;
    }
    param_7 = 1;
    bVar2 = true;
  }
  iVar5 = 0;
  do {
    iVar3 = param_4;
    if (bVar2) {
      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);
      iVar3 = (param_10 - iVar3) / 2 + param_4;
    }
    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);
    if (param_8 != 0) {
      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);
    }
    iVar5 = iVar5 + param_7;
    bVar1 = 0 < iVar4;
    param_4 = param_4 + param_10;
    iVar4 = iVar4 + -1;
  } while (bVar1);
  return;
}


addiu sp,sp,-0x58
lw t9,0x4(a0)
sw s1,0x34(sp)
sw s3,0x3c(sp)
or s3,a1,zero
sw s7,0x4c(sp)
or a1,a2,zero
sw s5,0x44(sp)
or s5,a0,zero
sw s4,0x40(sp)
or a0,s3,zero
sw s2,0x38(sp)
or s4,a2,zero
sw s0,0x30(sp)
or s2,a3,zero
sw ra,0x54(sp)
sw s8,0x50(sp)
sw s6,0x48(sp)
lw s1,0x78(sp)
lw s0,0x70(sp)
beq s1,zero,0x000ac71c
_lw s7,0x74(sp)
jalr t9
_addiu s1,s0,-0x1
blez s0,0x000ac6ec
_li v0,0x1
li s0,0x1
sw v0,0x2c(sp)
or s8,zero,zero
b 0x000ac6dc
_lw v0,0x2c(sp)
lw t9,0x0(s5)
or a1,s4,zero
lw a2,0x6c(sp)
or a0,s3,zero
jalr t9
_sw s0,0x10(sp)
lw v1,0x7c(sp)
subu v0,v1,v0
srl v1,v0,0x1f
addu v0,v1,v0
sra v0,v0,0x1
addu s6,v0,s2
lw v0,0x6c(sp)
or a2,s6,zero
lw t9,0x8(s5)
or a1,s4,zero
lw a3,0x68(sp)
or a0,s3,zero
sw s8,0x14(sp)
sw s0,0x18(sp)
jalr t9
_sw v0,0x10(sp)
beq s7,zero,0x000ac6c0
_addu a2,s6,s7
lw v0,0x6c(sp)
or a1,s4,zero
lw t9,0x8(s5)
or a0,s3,zero
lw a3,0x68(sp)
sw s8,0x14(sp)
sw s0,0x18(sp)
jalr t9
_sw v0,0x10(sp)
lw v1,0x7c(sp)
addiu v0,s1,-0x1
addu s8,s8,s0
blez s1,0x000ac6ec
_addu s2,s2,v1
or s1,v0,zero
lw v0,0x2c(sp)
bne v0,zero,0x000ac63c
_or a3,s8,zero
b 0x000ac66c
_or s6,s2,zero
lw ra,0x54(sp)
lw s8,0x50(sp)
lw s7,0x4c(sp)
lw s6,0x48(sp)
lw s5,0x44(sp)
lw s4,0x40(sp)
lw s3,0x3c(sp)
lw s2,0x38(sp)
lw s1,0x34(sp)
lw s0,0x30(sp)
jr ra
_addiu sp,sp,0x58
jalr t9
_or s8,zero,zero
b 0x000ac634
_sw zero,0x2c(sp)
(translation_unit "void FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)\n\n{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}\n\n" (function_definition "void FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)\n\n{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}" primitive_type (function_declarator "FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)" identifier (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) , (parameter_declaration "int param_9" primitive_type identifier) , (parameter_declaration "int param_10" primitive_type identifier) ))) (compound_statement "{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (if_statement "if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" if (parenthesized_expression "(param_9 == 0)" ( (binary_expression "param_9 == 0" identifier == number_literal) )) (compound_statement "{\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }" { (expression_statement "(*(code *)param_1[1])(param_2,param_3);" (call_expression "(*(code *)param_1[1])(param_2,param_3)" (parenthesized_expression "(*(code *)param_1[1])" ( (pointer_expression "*(code *)param_1[1]" * (cast_expression "(code *)param_1[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) )) (argument_list "(param_2,param_3)" ( identifier , identifier ))) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" else (compound_statement "{\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" { (expression_statement "iVar4 = param_7 + -1;" (assignment_expression "iVar4 = param_7 + -1" identifier = (binary_expression "param_7 + -1" identifier + number_literal)) ;) (expression_statement "(*(code *)param_1[1])();" (call_expression "(*(code *)param_1[1])()" (parenthesized_expression "(*(code *)param_1[1])" ( (pointer_expression "*(code *)param_1[1]" * (cast_expression "(code *)param_1[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) )) (argument_list "()" ( ))) ;) (if_statement "if (param_7 < 1) {\n      return;\n    }" if (parenthesized_expression "(param_7 < 1)" ( (binary_expression "param_7 < 1" identifier < number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "param_7 = 1;" (assignment_expression "param_7 = 1" identifier = number_literal) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) }))) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);" do (compound_statement "{\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  }" { (expression_statement "iVar3 = param_4;" (assignment_expression "iVar3 = param_4" identifier = identifier) ;) (if_statement "if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }" { (expression_statement "iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);" (assignment_expression "iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7)" identifier = (call_expression "(*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)*param_1)" ( (pointer_expression "*(code *)*param_1" * (cast_expression "(code *)*param_1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) )) (argument_list "(param_2,param_3,param_6,iVar5,param_7)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar3 = (param_10 - iVar3) / 2 + param_4;" (assignment_expression "iVar3 = (param_10 - iVar3) / 2 + param_4" identifier = (binary_expression "(param_10 - iVar3) / 2 + param_4" (binary_expression "(param_10 - iVar3) / 2" (parenthesized_expression "(param_10 - iVar3)" ( (binary_expression "param_10 - iVar3" identifier - identifier) )) / number_literal) + identifier)) ;) })) (expression_statement "(*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);" (call_expression "(*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)param_1[2])" ( (pointer_expression "*(code *)param_1[2]" * (cast_expression "(code *)param_1[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) )) (argument_list "(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }" if (parenthesized_expression "(param_8 != 0)" ( (binary_expression "param_8 != 0" identifier != number_literal) )) (compound_statement "{\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }" { (expression_statement "(*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);" (call_expression "(*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)param_1[2])" ( (pointer_expression "*(code *)param_1[2]" * (cast_expression "(code *)param_1[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) )) (argument_list "(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7)" ( identifier , identifier , (binary_expression "iVar3 + param_8" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) })) (expression_statement "iVar5 = iVar5 + param_7;" (assignment_expression "iVar5 = iVar5 + param_7" identifier = (binary_expression "iVar5 + param_7" identifier + identifier)) ;) (expression_statement "bVar1 = 0 < iVar4;" (assignment_expression "bVar1 = 0 < iVar4" identifier = (binary_expression "0 < iVar4" number_literal < identifier)) ;) (expression_statement "param_4 = param_4 + param_10;" (assignment_expression "param_4 = param_4 + param_10" identifier = (binary_expression "param_4 + param_10" identifier + identifier)) ;) (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar1)" ( identifier )) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nvoid x11font_really_draw_text\n               (x11font_drawfuncs *dfns,unifont_drawctx *ctx,x11font_individual *xfi,int x,int y,\n               void *string,int nchars,int shadowoffset,int fontvariable,int cellwidth)\n\n{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (fontvariable == 0) {\n    (*dfns->setup)(ctx,xfi);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = nchars + -1;\n    (*dfns->setup)(ctx,xfi);\n    if (nchars < 1) {\n      return;\n    }\n    nchars = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = x;\n    if (bVar2) {\n      iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);\n      iVar3 = (cellwidth - iVar3) / 2 + x;\n    }\n    (*dfns->draw)(ctx,xfi,iVar3,y,string,iVar5,nchars);\n    if (shadowoffset != 0) {\n      (*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);\n    }\n    iVar5 = iVar5 + nchars;\n    bVar1 = 0 < iVar4;\n    x = x + cellwidth;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}\n\n" comment (function_definition "void x11font_really_draw_text\n               (x11font_drawfuncs *dfns,unifont_drawctx *ctx,x11font_individual *xfi,int x,int y,\n               void *string,int nchars,int shadowoffset,int fontvariable,int cellwidth)\n\n{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (fontvariable == 0) {\n    (*dfns->setup)(ctx,xfi);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = nchars + -1;\n    (*dfns->setup)(ctx,xfi);\n    if (nchars < 1) {\n      return;\n    }\n    nchars = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = x;\n    if (bVar2) {\n      iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);\n      iVar3 = (cellwidth - iVar3) / 2 + x;\n    }\n    (*dfns->draw)(ctx,xfi,iVar3,y,string,iVar5,nchars);\n    if (shadowoffset != 0) {\n      (*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);\n    }\n    iVar5 = iVar5 + nchars;\n    bVar1 = 0 < iVar4;\n    x = x + cellwidth;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}" primitive_type (function_declarator "x11font_really_draw_text\n               (x11font_drawfuncs *dfns,unifont_drawctx *ctx,x11font_individual *xfi,int x,int y,\n               void *string,int nchars,int shadowoffset,int fontvariable,int cellwidth)" identifier (parameter_list "(x11font_drawfuncs *dfns,unifont_drawctx *ctx,x11font_individual *xfi,int x,int y,\n               void *string,int nchars,int shadowoffset,int fontvariable,int cellwidth)" ( (parameter_declaration "x11font_drawfuncs *dfns" type_identifier (pointer_declarator "*dfns" * identifier)) , (parameter_declaration "unifont_drawctx *ctx" type_identifier (pointer_declarator "*ctx" * identifier)) , (parameter_declaration "x11font_individual *xfi" type_identifier (pointer_declarator "*xfi" * identifier)) , (parameter_declaration "int x" primitive_type identifier) , (parameter_declaration "int y" primitive_type identifier) , (parameter_declaration "void *string" primitive_type (pointer_declarator "*string" * identifier)) , (parameter_declaration "int nchars" primitive_type identifier) , (parameter_declaration "int shadowoffset" primitive_type identifier) , (parameter_declaration "int fontvariable" primitive_type identifier) , (parameter_declaration "int cellwidth" primitive_type identifier) ))) (compound_statement "{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (fontvariable == 0) {\n    (*dfns->setup)(ctx,xfi);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = nchars + -1;\n    (*dfns->setup)(ctx,xfi);\n    if (nchars < 1) {\n      return;\n    }\n    nchars = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = x;\n    if (bVar2) {\n      iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);\n      iVar3 = (cellwidth - iVar3) / 2 + x;\n    }\n    (*dfns->draw)(ctx,xfi,iVar3,y,string,iVar5,nchars);\n    if (shadowoffset != 0) {\n      (*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);\n    }\n    iVar5 = iVar5 + nchars;\n    bVar1 = 0 < iVar4;\n    x = x + cellwidth;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (if_statement "if (fontvariable == 0) {\n    (*dfns->setup)(ctx,xfi);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = nchars + -1;\n    (*dfns->setup)(ctx,xfi);\n    if (nchars < 1) {\n      return;\n    }\n    nchars = 1;\n    bVar2 = true;\n  }" if (parenthesized_expression "(fontvariable == 0)" ( (binary_expression "fontvariable == 0" identifier == number_literal) )) (compound_statement "{\n    (*dfns->setup)(ctx,xfi);\n    bVar2 = false;\n    iVar4 = 0;\n  }" { (expression_statement "(*dfns->setup)(ctx,xfi);" (call_expression "(*dfns->setup)(ctx,xfi)" (parenthesized_expression "(*dfns->setup)" ( (pointer_expression "*dfns->setup" * (field_expression "dfns->setup" identifier -> field_identifier)) )) (argument_list "(ctx,xfi)" ( identifier , identifier ))) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    iVar4 = nchars + -1;\n    (*dfns->setup)(ctx,xfi);\n    if (nchars < 1) {\n      return;\n    }\n    nchars = 1;\n    bVar2 = true;\n  }" else (compound_statement "{\n    iVar4 = nchars + -1;\n    (*dfns->setup)(ctx,xfi);\n    if (nchars < 1) {\n      return;\n    }\n    nchars = 1;\n    bVar2 = true;\n  }" { (expression_statement "iVar4 = nchars + -1;" (assignment_expression "iVar4 = nchars + -1" identifier = (binary_expression "nchars + -1" identifier + number_literal)) ;) (expression_statement "(*dfns->setup)(ctx,xfi);" (call_expression "(*dfns->setup)(ctx,xfi)" (parenthesized_expression "(*dfns->setup)" ( (pointer_expression "*dfns->setup" * (field_expression "dfns->setup" identifier -> field_identifier)) )) (argument_list "(ctx,xfi)" ( identifier , identifier ))) ;) (if_statement "if (nchars < 1) {\n      return;\n    }" if (parenthesized_expression "(nchars < 1)" ( (binary_expression "nchars < 1" identifier < number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "nchars = 1;" (assignment_expression "nchars = 1" identifier = number_literal) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) }))) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n    iVar3 = x;\n    if (bVar2) {\n      iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);\n      iVar3 = (cellwidth - iVar3) / 2 + x;\n    }\n    (*dfns->draw)(ctx,xfi,iVar3,y,string,iVar5,nchars);\n    if (shadowoffset != 0) {\n      (*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);\n    }\n    iVar5 = iVar5 + nchars;\n    bVar1 = 0 < iVar4;\n    x = x + cellwidth;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);" do (compound_statement "{\n    iVar3 = x;\n    if (bVar2) {\n      iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);\n      iVar3 = (cellwidth - iVar3) / 2 + x;\n    }\n    (*dfns->draw)(ctx,xfi,iVar3,y,string,iVar5,nchars);\n    if (shadowoffset != 0) {\n      (*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);\n    }\n    iVar5 = iVar5 + nchars;\n    bVar1 = 0 < iVar4;\n    x = x + cellwidth;\n    iVar4 = iVar4 + -1;\n  }" { (expression_statement "iVar3 = x;" (assignment_expression "iVar3 = x" identifier = identifier) ;) (if_statement "if (bVar2) {\n      iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);\n      iVar3 = (cellwidth - iVar3) / 2 + x;\n    }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n      iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);\n      iVar3 = (cellwidth - iVar3) / 2 + x;\n    }" { (expression_statement "iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars);" (assignment_expression "iVar3 = (*dfns->width)(ctx,xfi,string,iVar5,nchars)" identifier = (call_expression "(*dfns->width)(ctx,xfi,string,iVar5,nchars)" (parenthesized_expression "(*dfns->width)" ( (pointer_expression "*dfns->width" * (field_expression "dfns->width" identifier -> field_identifier)) )) (argument_list "(ctx,xfi,string,iVar5,nchars)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar3 = (cellwidth - iVar3) / 2 + x;" (assignment_expression "iVar3 = (cellwidth - iVar3) / 2 + x" identifier = (binary_expression "(cellwidth - iVar3) / 2 + x" (binary_expression "(cellwidth - iVar3) / 2" (parenthesized_expression "(cellwidth - iVar3)" ( (binary_expression "cellwidth - iVar3" identifier - identifier) )) / number_literal) + identifier)) ;) })) (expression_statement "(*dfns->draw)(ctx,xfi,iVar3,y,string,iVar5,nchars);" (call_expression "(*dfns->draw)(ctx,xfi,iVar3,y,string,iVar5,nchars)" (parenthesized_expression "(*dfns->draw)" ( (pointer_expression "*dfns->draw" * (field_expression "dfns->draw" identifier -> field_identifier)) )) (argument_list "(ctx,xfi,iVar3,y,string,iVar5,nchars)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (shadowoffset != 0) {\n      (*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);\n    }" if (parenthesized_expression "(shadowoffset != 0)" ( (binary_expression "shadowoffset != 0" identifier != number_literal) )) (compound_statement "{\n      (*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);\n    }" { (expression_statement "(*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars);" (call_expression "(*dfns->draw)(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars)" (parenthesized_expression "(*dfns->draw)" ( (pointer_expression "*dfns->draw" * (field_expression "dfns->draw" identifier -> field_identifier)) )) (argument_list "(ctx,xfi,iVar3 + shadowoffset,y,string,iVar5,nchars)" ( identifier , identifier , (binary_expression "iVar3 + shadowoffset" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) })) (expression_statement "iVar5 = iVar5 + nchars;" (assignment_expression "iVar5 = iVar5 + nchars" identifier = (binary_expression "iVar5 + nchars" identifier + identifier)) ;) (expression_statement "bVar1 = 0 < iVar4;" (assignment_expression "bVar1 = 0 < iVar4" identifier = (binary_expression "0 < iVar4" number_literal < identifier)) ;) (expression_statement "x = x + cellwidth;" (assignment_expression "x = x + cellwidth" identifier = (binary_expression "x + cellwidth" identifier + identifier)) ;) (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar1)" ( identifier )) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)\n\n{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}\n\n" (function_definition "void FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)\n\n{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}" primitive_type (function_declarator "FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)" identifier (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) , (parameter_declaration "int param_9" primitive_type identifier) , (parameter_declaration "int param_10" primitive_type identifier) ))) (compound_statement "{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (if_statement "if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" if (parenthesized_expression "(param_9 == 0)" ( (binary_expression "param_9 == 0" identifier == number_literal) )) (compound_statement "{\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }" { (expression_statement "(*(code *)param_1[1])(param_2,param_3);" (call_expression "(*(code *)param_1[1])(param_2,param_3)" (parenthesized_expression "(*(code *)param_1[1])" ( (pointer_expression "*(code *)param_1[1]" * (cast_expression "(code *)param_1[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) )) (argument_list "(param_2,param_3)" ( identifier , identifier ))) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" else (compound_statement "{\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" { (expression_statement "iVar4 = param_7 + -1;" (assignment_expression "iVar4 = param_7 + -1" identifier = (binary_expression "param_7 + -1" identifier + number_literal)) ;) (expression_statement "(*(code *)param_1[1])();" (call_expression "(*(code *)param_1[1])()" (parenthesized_expression "(*(code *)param_1[1])" ( (pointer_expression "*(code *)param_1[1]" * (cast_expression "(code *)param_1[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) )) (argument_list "()" ( ))) ;) (if_statement "if (param_7 < 1) {\n      return;\n    }" if (parenthesized_expression "(param_7 < 1)" ( (binary_expression "param_7 < 1" identifier < number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "param_7 = 1;" (assignment_expression "param_7 = 1" identifier = number_literal) ;) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) }))) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);" do (compound_statement "{\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  }" { (expression_statement "iVar3 = param_4;" (assignment_expression "iVar3 = param_4" identifier = identifier) ;) (if_statement "if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }" { (expression_statement "iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);" (assignment_expression "iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7)" identifier = (call_expression "(*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)*param_1)" ( (pointer_expression "*(code *)*param_1" * (cast_expression "(code *)*param_1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) )) (argument_list "(param_2,param_3,param_6,iVar5,param_7)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar3 = (param_10 - iVar3) / 2 + param_4;" (assignment_expression "iVar3 = (param_10 - iVar3) / 2 + param_4" identifier = (binary_expression "(param_10 - iVar3) / 2 + param_4" (binary_expression "(param_10 - iVar3) / 2" (parenthesized_expression "(param_10 - iVar3)" ( (binary_expression "param_10 - iVar3" identifier - identifier) )) / number_literal) + identifier)) ;) })) (expression_statement "(*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);" (call_expression "(*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)param_1[2])" ( (pointer_expression "*(code *)param_1[2]" * (cast_expression "(code *)param_1[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) )) (argument_list "(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }" if (parenthesized_expression "(param_8 != 0)" ( (binary_expression "param_8 != 0" identifier != number_literal) )) (compound_statement "{\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }" { (expression_statement "(*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);" (call_expression "(*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)param_1[2])" ( (pointer_expression "*(code *)param_1[2]" * (cast_expression "(code *)param_1[2]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) )) (argument_list "(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7)" ( identifier , identifier , (binary_expression "iVar3 + param_8" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) })) (expression_statement "iVar5 = iVar5 + param_7;" (assignment_expression "iVar5 = iVar5 + param_7" identifier = (binary_expression "iVar5 + param_7" identifier + identifier)) ;) (expression_statement "bVar1 = 0 < iVar4;" (assignment_expression "bVar1 = 0 < iVar4" identifier = (binary_expression "0 < iVar4" number_literal < identifier)) ;) (expression_statement "param_4 = param_4 + param_10;" (assignment_expression "param_4 = param_4 + param_10" identifier = (binary_expression "param_4 + param_10" identifier + identifier)) ;) (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar1)" ( identifier )) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (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 *)) ) (subscript_expression IDENT [ LIT ]))) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) )) (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / LIT) + IDENT)) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (argument_list ( IDENT , IDENT , (binary_expression IDENT + IDENT) , IDENT , IDENT , IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT < IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (return_statement return ;) })))
(function_definition "void FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)\n\n{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_000ac5c0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)" (identifier "FUN_000ac5c0") (parameter_list "(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,\n                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,\n                 int param_10)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "undefined4 param_5" (type_identifier "undefined4") (identifier "param_5")) (, ",") (parameter_declaration "undefined4 param_6" (type_identifier "undefined4") (identifier "param_6")) (, ",") (parameter_declaration "int param_7" (primitive_type "int") (identifier "param_7")) (, ",") (parameter_declaration "int param_8" (primitive_type "int") (identifier "param_8")) (, ",") (parameter_declaration "int param_9" (primitive_type "int") (identifier "param_9")) (, ",") (parameter_declaration "int param_10" (primitive_type "int") (identifier "param_10")) () ")"))) (compound_statement "{\n  bool bVar1;\n  bool bVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }\n  iVar5 = 0;\n  do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);\n  return;\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "bool bVar2;" (primitive_type "bool") (identifier "bVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (if_statement "if (param_9 == 0) {\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }\n  else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" (if "if") (parenthesized_expression "(param_9 == 0)" (( "(") (binary_expression "param_9 == 0" (identifier "param_9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    (*(code *)param_1[1])(param_2,param_3);\n    bVar2 = false;\n    iVar4 = 0;\n  }" ({ "{") (expression_statement "(*(code *)param_1[1])(param_2,param_3);" (call_expression "(*(code *)param_1[1])(param_2,param_3)" (parenthesized_expression "(*(code *)param_1[1])" (( "(") (pointer_expression "*(code *)param_1[1]" (* "*") (cast_expression "(code *)param_1[1]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) () ")")) (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" (identifier "bVar2") (= "=") (false "false")) (; ";")) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" (else "else") (compound_statement "{\n    iVar4 = param_7 + -1;\n    (*(code *)param_1[1])();\n    if (param_7 < 1) {\n      return;\n    }\n    param_7 = 1;\n    bVar2 = true;\n  }" ({ "{") (expression_statement "iVar4 = param_7 + -1;" (assignment_expression "iVar4 = param_7 + -1" (identifier "iVar4") (= "=") (binary_expression "param_7 + -1" (identifier "param_7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "(*(code *)param_1[1])();" (call_expression "(*(code *)param_1[1])()" (parenthesized_expression "(*(code *)param_1[1])" (( "(") (pointer_expression "*(code *)param_1[1]" (* "*") (cast_expression "(code *)param_1[1]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (param_7 < 1) {\n      return;\n    }" (if "if") (parenthesized_expression "(param_7 < 1)" (( "(") (binary_expression "param_7 < 1" (identifier "param_7") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "param_7 = 1;" (assignment_expression "param_7 = 1" (identifier "param_7") (= "=") (number_literal "1")) (; ";")) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" (identifier "bVar2") (= "=") (true "true")) (; ";")) (} "}")))) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  } while (bVar1);" (do "do") (compound_statement "{\n    iVar3 = param_4;\n    if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }\n    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);\n    if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }\n    iVar5 = iVar5 + param_7;\n    bVar1 = 0 < iVar4;\n    param_4 = param_4 + param_10;\n    iVar4 = iVar4 + -1;\n  }" ({ "{") (expression_statement "iVar3 = param_4;" (assignment_expression "iVar3 = param_4" (identifier "iVar3") (= "=") (identifier "param_4")) (; ";")) (if_statement "if (bVar2) {\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }" (if "if") (parenthesized_expression "(bVar2)" (( "(") (identifier "bVar2") () ")")) (compound_statement "{\n      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);\n      iVar3 = (param_10 - iVar3) / 2 + param_4;\n    }" ({ "{") (expression_statement "iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);" (assignment_expression "iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7)" (identifier "iVar3") (= "=") (call_expression "(*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)*param_1)" (( "(") (pointer_expression "*(code *)*param_1" (* "*") (cast_expression "(code *)*param_1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) () ")")) (argument_list "(param_2,param_3,param_6,iVar5,param_7)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_6") (, ",") (identifier "iVar5") (, ",") (identifier "param_7") () ")")))) (; ";")) (expression_statement "iVar3 = (param_10 - iVar3) / 2 + param_4;" (assignment_expression "iVar3 = (param_10 - iVar3) / 2 + param_4" (identifier "iVar3") (= "=") (binary_expression "(param_10 - iVar3) / 2 + param_4" (binary_expression "(param_10 - iVar3) / 2" (parenthesized_expression "(param_10 - iVar3)" (( "(") (binary_expression "param_10 - iVar3" (identifier "param_10") (- "-") (identifier "iVar3")) () ")")) (/ "/") (number_literal "2")) (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (expression_statement "(*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);" (call_expression "(*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)param_1[2])" (( "(") (pointer_expression "*(code *)param_1[2]" (* "*") (cast_expression "(code *)param_1[2]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) () ")")) (argument_list "(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "iVar3") (, ",") (identifier "param_5") (, ",") (identifier "param_6") (, ",") (identifier "iVar5") (, ",") (identifier "param_7") () ")"))) (; ";")) (if_statement "if (param_8 != 0) {\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }" (if "if") (parenthesized_expression "(param_8 != 0)" (( "(") (binary_expression "param_8 != 0" (identifier "param_8") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);\n    }" ({ "{") (expression_statement "(*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);" (call_expression "(*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7)" (parenthesized_expression "(*(code *)param_1[2])" (( "(") (pointer_expression "*(code *)param_1[2]" (* "*") (cast_expression "(code *)param_1[2]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) () ")")) (argument_list "(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (binary_expression "iVar3 + param_8" (identifier "iVar3") (+ "+") (identifier "param_8")) (, ",") (identifier "param_5") (, ",") (identifier "param_6") (, ",") (identifier "iVar5") (, ",") (identifier "param_7") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar5 = iVar5 + param_7;" (assignment_expression "iVar5 = iVar5 + param_7" (identifier "iVar5") (= "=") (binary_expression "iVar5 + param_7" (identifier "iVar5") (+ "+") (identifier "param_7"))) (; ";")) (expression_statement "bVar1 = 0 < iVar4;" (assignment_expression "bVar1 = 0 < iVar4" (identifier "bVar1") (= "=") (binary_expression "0 < iVar4" (number_literal "0") (< "<") (identifier "iVar4"))) (; ";")) (expression_statement "param_4 = param_4 + param_10;" (assignment_expression "param_4 = param_4 + param_10" (identifier "param_4") (= "=") (binary_expression "param_4 + param_10" (identifier "param_4") (+ "+") (identifier "param_10"))) (; ";")) (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" (identifier "iVar4") (= "=") (binary_expression "iVar4 + -1" (identifier "iVar4") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar1)" (( "(") (identifier "bVar1") () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (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)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (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: (subscript_expression argument: (identifier) index: (number_literal))))) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (true)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)) right: (identifier)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (identifier)) (identifier) (identifier) (identifier) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (number_literal) 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: (number_literal))))) condition: (parenthesized_expression (identifier))) (return_statement))))

void MASKED(undefined4 *param_1,undefined4 param_2,undefined4 param_3,int param_4,
                 undefined4 param_5,undefined4 param_6,int param_7,int param_8,int param_9,
                 int param_10)

{
  bool bVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  
  if (param_9 == 0) {
    (*(code *)param_1[1])(param_2,param_3);
    bVar2 = false;
    iVar4 = 0;
  }
  else {
    iVar4 = param_7 + -1;
    (*(code *)param_1[1])();
    if (param_7 < 1) {
      return;
    }
    param_7 = 1;
    bVar2 = true;
  }
  iVar5 = 0;
  do {
    iVar3 = param_4;
    if (bVar2) {
      iVar3 = (*(code *)*param_1)(param_2,param_3,param_6,iVar5,param_7);
      iVar3 = (param_10 - iVar3) / 2 + param_4;
    }
    (*(code *)param_1[2])(param_2,param_3,iVar3,param_5,param_6,iVar5,param_7);
    if (param_8 != 0) {
      (*(code *)param_1[2])(param_2,param_3,iVar3 + param_8,param_5,param_6,iVar5,param_7);
    }
    iVar5 = iVar5 + param_7;
    bVar1 = 0 < iVar4;
    param_4 = param_4 + param_10;
    iVar4 = iVar4 + -1;
  } while (bVar1);
  return;
}

