
/* DWARF original prototype: _Bool enter_dir(FTS * fts, FTSENT * ent, FTS * fts) */

_Bool enter_dir(FTS *fts,FTSENT *ent,FTS *fts_1)

{
  undefined3 extraout_var;
  undefined4 *entry;
  undefined4 uVar1;
  undefined4 *puVar2;
  _Bool _Var3;
  undefined4 uVar4;
  _ftsent *p_Var5;
  
  if (((uint)fts & 0x102) == 0) {
    _Var3 = cycle_check((cycle_check_state *)ent->fts_cycle,
                        (stat *)((fts_1->fts_fd_ring).ir_data + 3));
    if (CONCAT31(extraout_var,_Var3) == 0) {
      return true;
    }
    fts_1->fts_cur = (_ftsent *)fts_1;
    *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;
    return _Var3;
  }
  entry = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);
  if (entry != (undefined4 *)0x0) {
    uVar4 = *(undefined4 *)&fts_1->field_0x5c;
    uVar1 = *(undefined4 *)&(fts_1->fts_fd_ring).ir_empty;
    p_Var5 = ent->fts_cycle;
    entry[1] = (fts_1->fts_fd_ring).ir_data[3];
    *entry = 0;
    entry[3] = uVar4;
    entry[2] = uVar1;
    entry[4] = fts_1;
    puVar2 = (undefined4 *)hash_insert((Hash_table *)p_Var5,entry);
    if (entry == puVar2) {
      return true;
    }
    (*(code *)PTR_free_000323b4)(entry);
    if (puVar2 != (undefined4 *)0x0) {
      p_Var5 = (_ftsent *)puVar2[4];
      *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;
      fts_1->fts_cur = p_Var5;
      return true;
    }
  }
  return false;
}



int FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)

{
  undefined4 *puVar1;
  undefined4 uVar2;
  undefined4 *puVar3;
  int iVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  
  if ((param_1 & 0x102) == 0) {
    iVar4 = cycle_check(*param_2,param_3 + 0x12);
    if (iVar4 == 0) {
      return 1;
    }
    *param_3 = param_3;
    *(undefined2 *)(param_3 + 0xf) = 2;
    return iVar4;
  }
  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);
  if (puVar1 != (undefined4 *)0x0) {
    uVar5 = param_3[0x17];
    uVar2 = param_3[0x16];
    uVar6 = *param_2;
    puVar1[1] = param_3[0x12];
    *puVar1 = 0;
    puVar1[3] = uVar5;
    puVar1[2] = uVar2;
    puVar1[4] = param_3;
    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);
    if (puVar1 == puVar3) {
      return 1;
    }
    (*(code *)PTR_free_000323b4)(puVar1);
    if (puVar3 != (undefined4 *)0x0) {
      uVar2 = puVar3[4];
      *(undefined2 *)(param_3 + 0xf) = 2;
      *param_3 = uVar2;
      return 1;
    }
  }
  return 0;
}


lui gp,0x2
addiu gp,gp,0xbb0
addu gp,gp,t9
addiu sp,sp,-0x28
andi a0,a0,0x102
sw gp,0x10(sp)
sw s2,0x20(sp)
or s2,a1,zero
sw s0,0x18(sp)
or s0,a2,zero
sw ra,0x24(sp)
beq a0,zero,0x00019610
_sw s1,0x1c(sp)
lw t9,-0x7d88(gp)
jalr t9
_li a0,0x18
lw gp,0x10(sp)
beq v0,zero,0x00019648
_or s1,v0,zero
lw a2,0x48(s0)
or a1,v0,zero
lw v1,0x5c(s0)
lw v0,0x58(s0)
lw t9,-0x7eb8(gp)
lw a0,0x0(s2)
sw a2,0x4(s1)
sw zero,0x0(s1)
sw v1,0xc(s1)
sw v0,0x8(s1)
bal 0x0001dffc
_sw s0,0x10(s1)
lw gp,0x10(sp)
beq s1,v0,0x000195f4
_or s2,v0,zero
lw t9,-0x7d2c(gp)
jalr t9
_or a0,s1,zero
beq s2,zero,0x00019648
_li a0,0x2
lw v1,0x10(s2)
lw ra,0x24(sp)
li v0,0x1
lw s2,0x20(sp)
lw s1,0x1c(sp)
sh a0,0x3c(s0)
sw v1,0x0(s0)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
lw ra,0x24(sp)
li v0,0x1
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
lw t9,-0x7ea4(gp)
addiu a1,a2,0x48
bal 0x0001c970
_lw a0,0x0(s2)
beq v0,zero,0x000195f8
_lw ra,0x24(sp)
li v1,0x2
lw s2,0x20(sp)
lw s1,0x1c(sp)
sw s0,0x0(s0)
sh v1,0x3c(s0)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
lw ra,0x24(sp)
or v0,zero,zero
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
(translation_unit "int FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  \n  if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }\n  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  \n  if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }\n  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)" identifier (parameter_list "(uint param_1,undefined4 *param_2,undefined4 *param_3)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  \n  if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }\n  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }\n  return 0;\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (if_statement "if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }" if (parenthesized_expression "((param_1 & 0x102) == 0)" ( (binary_expression "(param_1 & 0x102) == 0" (parenthesized_expression "(param_1 & 0x102)" ( (binary_expression "param_1 & 0x102" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }" { (expression_statement "iVar4 = cycle_check(*param_2,param_3 + 0x12);" (assignment_expression "iVar4 = cycle_check(*param_2,param_3 + 0x12)" identifier = (call_expression "cycle_check(*param_2,param_3 + 0x12)" identifier (argument_list "(*param_2,param_3 + 0x12)" ( (pointer_expression "*param_2" * identifier) , (binary_expression "param_3 + 0x12" identifier + number_literal) )))) ;) (if_statement "if (iVar4 == 0) {\n      return 1;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "*param_3 = param_3;" (assignment_expression "*param_3 = param_3" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(param_3 + 0xf) = 2;" (assignment_expression "*(undefined2 *)(param_3 + 0xf) = 2" (pointer_expression "*(undefined2 *)(param_3 + 0xf)" * (cast_expression "(undefined2 *)(param_3 + 0xf)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xf)" ( (binary_expression "param_3 + 0xf" identifier + number_literal) )))) = number_literal) ;) (return_statement "return iVar4;" return identifier ;) })) (expression_statement "puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);" (assignment_expression "puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_malloc_00032358)(0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_00032358)(0x18)" (parenthesized_expression "(*(code *)PTR_malloc_00032358)" ( (pointer_expression "*(code *)PTR_malloc_00032358" * (cast_expression "(code *)PTR_malloc_00032358" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x18)" ( number_literal ))))) ;) (if_statement "if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }" if (parenthesized_expression "(puVar1 != (undefined4 *)0x0)" ( (binary_expression "puVar1 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }" { (expression_statement "uVar5 = param_3[0x17];" (assignment_expression "uVar5 = param_3[0x17]" identifier = (subscript_expression "param_3[0x17]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_3[0x16];" (assignment_expression "uVar2 = param_3[0x16]" identifier = (subscript_expression "param_3[0x16]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = *param_2;" (assignment_expression "uVar6 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "puVar1[1] = param_3[0x12];" (assignment_expression "puVar1[1] = param_3[0x12]" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = (subscript_expression "param_3[0x12]" identifier [ number_literal ])) ;) (expression_statement "*puVar1 = 0;" (assignment_expression "*puVar1 = 0" (pointer_expression "*puVar1" * identifier) = number_literal) ;) (expression_statement "puVar1[3] = uVar5;" (assignment_expression "puVar1[3] = uVar5" (subscript_expression "puVar1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar1[2] = uVar2;" (assignment_expression "puVar1[2] = uVar2" (subscript_expression "puVar1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar1[4] = param_3;" (assignment_expression "puVar1[4] = param_3" (subscript_expression "puVar1[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);" (assignment_expression "puVar3 = (undefined4 *)hash_insert(uVar6,puVar1)" identifier = (cast_expression "(undefined4 *)hash_insert(uVar6,puVar1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "hash_insert(uVar6,puVar1)" identifier (argument_list "(uVar6,puVar1)" ( identifier , identifier ))))) ;) (if_statement "if (puVar1 == puVar3) {\n      return 1;\n    }" if (parenthesized_expression "(puVar1 == puVar3)" ( (binary_expression "puVar1 == puVar3" identifier == identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "(*(code *)PTR_free_000323b4)(puVar1);" (call_expression "(*(code *)PTR_free_000323b4)(puVar1)" (parenthesized_expression "(*(code *)PTR_free_000323b4)" ( (pointer_expression "*(code *)PTR_free_000323b4" * (cast_expression "(code *)PTR_free_000323b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar1)" ( identifier ))) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }" { (expression_statement "uVar2 = puVar3[4];" (assignment_expression "uVar2 = puVar3[4]" identifier = (subscript_expression "puVar3[4]" identifier [ number_literal ])) ;) (expression_statement "*(undefined2 *)(param_3 + 0xf) = 2;" (assignment_expression "*(undefined2 *)(param_3 + 0xf) = 2" (pointer_expression "*(undefined2 *)(param_3 + 0xf)" * (cast_expression "(undefined2 *)(param_3 + 0xf)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xf)" ( (binary_expression "param_3 + 0xf" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*param_3 = uVar2;" (assignment_expression "*param_3 = uVar2" (pointer_expression "*param_3" * identifier) = identifier) ;) (return_statement "return 1;" return number_literal ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: _Bool enter_dir(FTS * fts, FTSENT * ent, FTS * fts) */\n\n_Bool enter_dir(FTS *fts,FTSENT *ent,FTS *fts_1)\n\n{\n  undefined3 extraout_var;\n  undefined4 *entry;\n  undefined4 uVar1;\n  undefined4 *puVar2;\n  _Bool _Var3;\n  undefined4 uVar4;\n  _ftsent *p_Var5;\n  \n  if (((uint)fts & 0x102) == 0) {\n    _Var3 = cycle_check((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3));\n    if (CONCAT31(extraout_var,_Var3) == 0) {\n      return true;\n    }\n    fts_1->fts_cur = (_ftsent *)fts_1;\n    *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n    return _Var3;\n  }\n  entry = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (entry != (undefined4 *)0x0) {\n    uVar4 = *(undefined4 *)&fts_1->field_0x5c;\n    uVar1 = *(undefined4 *)&(fts_1->fts_fd_ring).ir_empty;\n    p_Var5 = ent->fts_cycle;\n    entry[1] = (fts_1->fts_fd_ring).ir_data[3];\n    *entry = 0;\n    entry[3] = uVar4;\n    entry[2] = uVar1;\n    entry[4] = fts_1;\n    puVar2 = (undefined4 *)hash_insert((Hash_table *)p_Var5,entry);\n    if (entry == puVar2) {\n      return true;\n    }\n    (*(code *)PTR_free_000323b4)(entry);\n    if (puVar2 != (undefined4 *)0x0) {\n      p_Var5 = (_ftsent *)puVar2[4];\n      *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n      fts_1->fts_cur = p_Var5;\n      return true;\n    }\n  }\n  return false;\n}\n\n" comment (function_definition "_Bool enter_dir(FTS *fts,FTSENT *ent,FTS *fts_1)\n\n{\n  undefined3 extraout_var;\n  undefined4 *entry;\n  undefined4 uVar1;\n  undefined4 *puVar2;\n  _Bool _Var3;\n  undefined4 uVar4;\n  _ftsent *p_Var5;\n  \n  if (((uint)fts & 0x102) == 0) {\n    _Var3 = cycle_check((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3));\n    if (CONCAT31(extraout_var,_Var3) == 0) {\n      return true;\n    }\n    fts_1->fts_cur = (_ftsent *)fts_1;\n    *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n    return _Var3;\n  }\n  entry = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (entry != (undefined4 *)0x0) {\n    uVar4 = *(undefined4 *)&fts_1->field_0x5c;\n    uVar1 = *(undefined4 *)&(fts_1->fts_fd_ring).ir_empty;\n    p_Var5 = ent->fts_cycle;\n    entry[1] = (fts_1->fts_fd_ring).ir_data[3];\n    *entry = 0;\n    entry[3] = uVar4;\n    entry[2] = uVar1;\n    entry[4] = fts_1;\n    puVar2 = (undefined4 *)hash_insert((Hash_table *)p_Var5,entry);\n    if (entry == puVar2) {\n      return true;\n    }\n    (*(code *)PTR_free_000323b4)(entry);\n    if (puVar2 != (undefined4 *)0x0) {\n      p_Var5 = (_ftsent *)puVar2[4];\n      *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n      fts_1->fts_cur = p_Var5;\n      return true;\n    }\n  }\n  return false;\n}" type_identifier (function_declarator "enter_dir(FTS *fts,FTSENT *ent,FTS *fts_1)" identifier (parameter_list "(FTS *fts,FTSENT *ent,FTS *fts_1)" ( (parameter_declaration "FTS *fts" type_identifier (pointer_declarator "*fts" * identifier)) , (parameter_declaration "FTSENT *ent" type_identifier (pointer_declarator "*ent" * identifier)) , (parameter_declaration "FTS *fts_1" type_identifier (pointer_declarator "*fts_1" * identifier)) ))) (compound_statement "{\n  undefined3 extraout_var;\n  undefined4 *entry;\n  undefined4 uVar1;\n  undefined4 *puVar2;\n  _Bool _Var3;\n  undefined4 uVar4;\n  _ftsent *p_Var5;\n  \n  if (((uint)fts & 0x102) == 0) {\n    _Var3 = cycle_check((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3));\n    if (CONCAT31(extraout_var,_Var3) == 0) {\n      return true;\n    }\n    fts_1->fts_cur = (_ftsent *)fts_1;\n    *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n    return _Var3;\n  }\n  entry = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (entry != (undefined4 *)0x0) {\n    uVar4 = *(undefined4 *)&fts_1->field_0x5c;\n    uVar1 = *(undefined4 *)&(fts_1->fts_fd_ring).ir_empty;\n    p_Var5 = ent->fts_cycle;\n    entry[1] = (fts_1->fts_fd_ring).ir_data[3];\n    *entry = 0;\n    entry[3] = uVar4;\n    entry[2] = uVar1;\n    entry[4] = fts_1;\n    puVar2 = (undefined4 *)hash_insert((Hash_table *)p_Var5,entry);\n    if (entry == puVar2) {\n      return true;\n    }\n    (*(code *)PTR_free_000323b4)(entry);\n    if (puVar2 != (undefined4 *)0x0) {\n      p_Var5 = (_ftsent *)puVar2[4];\n      *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n      fts_1->fts_cur = p_Var5;\n      return true;\n    }\n  }\n  return false;\n}" { (declaration "undefined3 extraout_var;" type_identifier identifier ;) (declaration "undefined4 *entry;" type_identifier (pointer_declarator "*entry" * identifier) ;) (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "_Bool _Var3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "_ftsent *p_Var5;" type_identifier (pointer_declarator "*p_Var5" * identifier) ;) (if_statement "if (((uint)fts & 0x102) == 0) {\n    _Var3 = cycle_check((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3));\n    if (CONCAT31(extraout_var,_Var3) == 0) {\n      return true;\n    }\n    fts_1->fts_cur = (_ftsent *)fts_1;\n    *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n    return _Var3;\n  }" if (parenthesized_expression "(((uint)fts & 0x102) == 0)" ( (binary_expression "((uint)fts & 0x102) == 0" (parenthesized_expression "((uint)fts & 0x102)" ( (binary_expression "(uint)fts & 0x102" (cast_expression "(uint)fts" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    _Var3 = cycle_check((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3));\n    if (CONCAT31(extraout_var,_Var3) == 0) {\n      return true;\n    }\n    fts_1->fts_cur = (_ftsent *)fts_1;\n    *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n    return _Var3;\n  }" { (expression_statement "_Var3 = cycle_check((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3));" (assignment_expression "_Var3 = cycle_check((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3))" identifier = (call_expression "cycle_check((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3))" identifier (argument_list "((cycle_check_state *)ent->fts_cycle,\n                        (stat *)((fts_1->fts_fd_ring).ir_data + 3))" ( (cast_expression "(cycle_check_state *)ent->fts_cycle" ( (type_descriptor "cycle_check_state *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "ent->fts_cycle" identifier -> field_identifier)) , (cast_expression "(stat *)((fts_1->fts_fd_ring).ir_data + 3)" ( (type_descriptor "stat *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((fts_1->fts_fd_ring).ir_data + 3)" ( (binary_expression "(fts_1->fts_fd_ring).ir_data + 3" (field_expression "(fts_1->fts_fd_ring).ir_data" (parenthesized_expression "(fts_1->fts_fd_ring)" ( (field_expression "fts_1->fts_fd_ring" identifier -> field_identifier) )) . field_identifier) + number_literal) ))) )))) ;) (if_statement "if (CONCAT31(extraout_var,_Var3) == 0) {\n      return true;\n    }" if (parenthesized_expression "(CONCAT31(extraout_var,_Var3) == 0)" ( (binary_expression "CONCAT31(extraout_var,_Var3) == 0" (call_expression "CONCAT31(extraout_var,_Var3)" identifier (argument_list "(extraout_var,_Var3)" ( identifier , identifier ))) == number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "fts_1->fts_cur = (_ftsent *)fts_1;" (assignment_expression "fts_1->fts_cur = (_ftsent *)fts_1" (field_expression "fts_1->fts_cur" identifier -> field_identifier) = (cast_expression "(_ftsent *)fts_1" ( (type_descriptor "_ftsent *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "*(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;" (assignment_expression "*(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2" (pointer_expression "*(undefined2 *)(fts_1->fts_fd_ring).ir_data" * (cast_expression "(undefined2 *)(fts_1->fts_fd_ring).ir_data" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(fts_1->fts_fd_ring).ir_data" (parenthesized_expression "(fts_1->fts_fd_ring)" ( (field_expression "fts_1->fts_fd_ring" identifier -> field_identifier) )) . field_identifier))) = number_literal) ;) (return_statement "return _Var3;" return identifier ;) })) (expression_statement "entry = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);" (assignment_expression "entry = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_malloc_00032358)(0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_00032358)(0x18)" (parenthesized_expression "(*(code *)PTR_malloc_00032358)" ( (pointer_expression "*(code *)PTR_malloc_00032358" * (cast_expression "(code *)PTR_malloc_00032358" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x18)" ( number_literal ))))) ;) (if_statement "if (entry != (undefined4 *)0x0) {\n    uVar4 = *(undefined4 *)&fts_1->field_0x5c;\n    uVar1 = *(undefined4 *)&(fts_1->fts_fd_ring).ir_empty;\n    p_Var5 = ent->fts_cycle;\n    entry[1] = (fts_1->fts_fd_ring).ir_data[3];\n    *entry = 0;\n    entry[3] = uVar4;\n    entry[2] = uVar1;\n    entry[4] = fts_1;\n    puVar2 = (undefined4 *)hash_insert((Hash_table *)p_Var5,entry);\n    if (entry == puVar2) {\n      return true;\n    }\n    (*(code *)PTR_free_000323b4)(entry);\n    if (puVar2 != (undefined4 *)0x0) {\n      p_Var5 = (_ftsent *)puVar2[4];\n      *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n      fts_1->fts_cur = p_Var5;\n      return true;\n    }\n  }" if (parenthesized_expression "(entry != (undefined4 *)0x0)" ( (binary_expression "entry != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar4 = *(undefined4 *)&fts_1->field_0x5c;\n    uVar1 = *(undefined4 *)&(fts_1->fts_fd_ring).ir_empty;\n    p_Var5 = ent->fts_cycle;\n    entry[1] = (fts_1->fts_fd_ring).ir_data[3];\n    *entry = 0;\n    entry[3] = uVar4;\n    entry[2] = uVar1;\n    entry[4] = fts_1;\n    puVar2 = (undefined4 *)hash_insert((Hash_table *)p_Var5,entry);\n    if (entry == puVar2) {\n      return true;\n    }\n    (*(code *)PTR_free_000323b4)(entry);\n    if (puVar2 != (undefined4 *)0x0) {\n      p_Var5 = (_ftsent *)puVar2[4];\n      *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n      fts_1->fts_cur = p_Var5;\n      return true;\n    }\n  }" { (expression_statement "uVar4 = *(undefined4 *)&fts_1->field_0x5c;" (assignment_expression "uVar4 = *(undefined4 *)&fts_1->field_0x5c" identifier = (pointer_expression "*(undefined4 *)&fts_1->field_0x5c" * (cast_expression "(undefined4 *)&fts_1->field_0x5c" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&fts_1->field_0x5c" & (field_expression "fts_1->field_0x5c" identifier -> field_identifier))))) ;) (expression_statement "uVar1 = *(undefined4 *)&(fts_1->fts_fd_ring).ir_empty;" (assignment_expression "uVar1 = *(undefined4 *)&(fts_1->fts_fd_ring).ir_empty" identifier = (pointer_expression "*(undefined4 *)&(fts_1->fts_fd_ring).ir_empty" * (cast_expression "(undefined4 *)&(fts_1->fts_fd_ring).ir_empty" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(fts_1->fts_fd_ring).ir_empty" & (field_expression "(fts_1->fts_fd_ring).ir_empty" (parenthesized_expression "(fts_1->fts_fd_ring)" ( (field_expression "fts_1->fts_fd_ring" identifier -> field_identifier) )) . field_identifier))))) ;) (expression_statement "p_Var5 = ent->fts_cycle;" (assignment_expression "p_Var5 = ent->fts_cycle" identifier = (field_expression "ent->fts_cycle" identifier -> field_identifier)) ;) (expression_statement "entry[1] = (fts_1->fts_fd_ring).ir_data[3];" (assignment_expression "entry[1] = (fts_1->fts_fd_ring).ir_data[3]" (subscript_expression "entry[1]" identifier [ number_literal ]) = (subscript_expression "(fts_1->fts_fd_ring).ir_data[3]" (field_expression "(fts_1->fts_fd_ring).ir_data" (parenthesized_expression "(fts_1->fts_fd_ring)" ( (field_expression "fts_1->fts_fd_ring" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "*entry = 0;" (assignment_expression "*entry = 0" (pointer_expression "*entry" * identifier) = number_literal) ;) (expression_statement "entry[3] = uVar4;" (assignment_expression "entry[3] = uVar4" (subscript_expression "entry[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "entry[2] = uVar1;" (assignment_expression "entry[2] = uVar1" (subscript_expression "entry[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "entry[4] = fts_1;" (assignment_expression "entry[4] = fts_1" (subscript_expression "entry[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar2 = (undefined4 *)hash_insert((Hash_table *)p_Var5,entry);" (assignment_expression "puVar2 = (undefined4 *)hash_insert((Hash_table *)p_Var5,entry)" identifier = (cast_expression "(undefined4 *)hash_insert((Hash_table *)p_Var5,entry)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "hash_insert((Hash_table *)p_Var5,entry)" identifier (argument_list "((Hash_table *)p_Var5,entry)" ( (cast_expression "(Hash_table *)p_Var5" ( (type_descriptor "Hash_table *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))))) ;) (if_statement "if (entry == puVar2) {\n      return true;\n    }" if (parenthesized_expression "(entry == puVar2)" ( (binary_expression "entry == puVar2" identifier == identifier) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "(*(code *)PTR_free_000323b4)(entry);" (call_expression "(*(code *)PTR_free_000323b4)(entry)" (parenthesized_expression "(*(code *)PTR_free_000323b4)" ( (pointer_expression "*(code *)PTR_free_000323b4" * (cast_expression "(code *)PTR_free_000323b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(entry)" ( identifier ))) ;) (if_statement "if (puVar2 != (undefined4 *)0x0) {\n      p_Var5 = (_ftsent *)puVar2[4];\n      *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n      fts_1->fts_cur = p_Var5;\n      return true;\n    }" if (parenthesized_expression "(puVar2 != (undefined4 *)0x0)" ( (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      p_Var5 = (_ftsent *)puVar2[4];\n      *(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;\n      fts_1->fts_cur = p_Var5;\n      return true;\n    }" { (expression_statement "p_Var5 = (_ftsent *)puVar2[4];" (assignment_expression "p_Var5 = (_ftsent *)puVar2[4]" identifier = (cast_expression "(_ftsent *)puVar2[4]" ( (type_descriptor "_ftsent *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[4]" identifier [ number_literal ]))) ;) (expression_statement "*(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2;" (assignment_expression "*(undefined2 *)(fts_1->fts_fd_ring).ir_data = 2" (pointer_expression "*(undefined2 *)(fts_1->fts_fd_ring).ir_data" * (cast_expression "(undefined2 *)(fts_1->fts_fd_ring).ir_data" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(fts_1->fts_fd_ring).ir_data" (parenthesized_expression "(fts_1->fts_fd_ring)" ( (field_expression "fts_1->fts_fd_ring" identifier -> field_identifier) )) . field_identifier))) = number_literal) ;) (expression_statement "fts_1->fts_cur = p_Var5;" (assignment_expression "fts_1->fts_cur = p_Var5" (field_expression "fts_1->fts_cur" identifier -> field_identifier) = identifier) ;) (return_statement "return true;" return true ;) })) })) (return_statement "return false;" return false ;) })))
(translation_unit "int FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  \n  if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }\n  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  \n  if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }\n  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)" identifier (parameter_list "(uint param_1,undefined4 *param_2,undefined4 *param_3)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  \n  if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }\n  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }\n  return 0;\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (if_statement "if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }" if (parenthesized_expression "((param_1 & 0x102) == 0)" ( (binary_expression "(param_1 & 0x102) == 0" (parenthesized_expression "(param_1 & 0x102)" ( (binary_expression "param_1 & 0x102" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }" { (expression_statement "iVar4 = cycle_check(*param_2,param_3 + 0x12);" (assignment_expression "iVar4 = cycle_check(*param_2,param_3 + 0x12)" identifier = (call_expression "cycle_check(*param_2,param_3 + 0x12)" identifier (argument_list "(*param_2,param_3 + 0x12)" ( (pointer_expression "*param_2" * identifier) , (binary_expression "param_3 + 0x12" identifier + number_literal) )))) ;) (if_statement "if (iVar4 == 0) {\n      return 1;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "*param_3 = param_3;" (assignment_expression "*param_3 = param_3" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "*(undefined2 *)(param_3 + 0xf) = 2;" (assignment_expression "*(undefined2 *)(param_3 + 0xf) = 2" (pointer_expression "*(undefined2 *)(param_3 + 0xf)" * (cast_expression "(undefined2 *)(param_3 + 0xf)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xf)" ( (binary_expression "param_3 + 0xf" identifier + number_literal) )))) = number_literal) ;) (return_statement "return iVar4;" return identifier ;) })) (expression_statement "puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);" (assignment_expression "puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_malloc_00032358)(0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_00032358)(0x18)" (parenthesized_expression "(*(code *)PTR_malloc_00032358)" ( (pointer_expression "*(code *)PTR_malloc_00032358" * (cast_expression "(code *)PTR_malloc_00032358" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x18)" ( number_literal ))))) ;) (if_statement "if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }" if (parenthesized_expression "(puVar1 != (undefined4 *)0x0)" ( (binary_expression "puVar1 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }" { (expression_statement "uVar5 = param_3[0x17];" (assignment_expression "uVar5 = param_3[0x17]" identifier = (subscript_expression "param_3[0x17]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_3[0x16];" (assignment_expression "uVar2 = param_3[0x16]" identifier = (subscript_expression "param_3[0x16]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = *param_2;" (assignment_expression "uVar6 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "puVar1[1] = param_3[0x12];" (assignment_expression "puVar1[1] = param_3[0x12]" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = (subscript_expression "param_3[0x12]" identifier [ number_literal ])) ;) (expression_statement "*puVar1 = 0;" (assignment_expression "*puVar1 = 0" (pointer_expression "*puVar1" * identifier) = number_literal) ;) (expression_statement "puVar1[3] = uVar5;" (assignment_expression "puVar1[3] = uVar5" (subscript_expression "puVar1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar1[2] = uVar2;" (assignment_expression "puVar1[2] = uVar2" (subscript_expression "puVar1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar1[4] = param_3;" (assignment_expression "puVar1[4] = param_3" (subscript_expression "puVar1[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);" (assignment_expression "puVar3 = (undefined4 *)hash_insert(uVar6,puVar1)" identifier = (cast_expression "(undefined4 *)hash_insert(uVar6,puVar1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "hash_insert(uVar6,puVar1)" identifier (argument_list "(uVar6,puVar1)" ( identifier , identifier ))))) ;) (if_statement "if (puVar1 == puVar3) {\n      return 1;\n    }" if (parenthesized_expression "(puVar1 == puVar3)" ( (binary_expression "puVar1 == puVar3" identifier == identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "(*(code *)PTR_free_000323b4)(puVar1);" (call_expression "(*(code *)PTR_free_000323b4)(puVar1)" (parenthesized_expression "(*(code *)PTR_free_000323b4)" ( (pointer_expression "*(code *)PTR_free_000323b4" * (cast_expression "(code *)PTR_free_000323b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar1)" ( identifier ))) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }" { (expression_statement "uVar2 = puVar3[4];" (assignment_expression "uVar2 = puVar3[4]" identifier = (subscript_expression "puVar3[4]" identifier [ number_literal ])) ;) (expression_statement "*(undefined2 *)(param_3 + 0xf) = 2;" (assignment_expression "*(undefined2 *)(param_3 + 0xf) = 2" (pointer_expression "*(undefined2 *)(param_3 + 0xf)" * (cast_expression "(undefined2 *)(param_3 + 0xf)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0xf)" ( (binary_expression "param_3 + 0xf" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*param_3 = uVar2;" (assignment_expression "*param_3 = uVar2" (pointer_expression "*param_3" * identifier) = identifier) ;) (return_statement "return 1;" return number_literal ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return LIT ;) })) })) (return_statement return LIT ;) })))
(function_definition "int FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)\n\n{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  \n  if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }\n  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }\n  return 0;\n}" (primitive_type "int") (function_declarator "FUN_00019530(uint param_1,undefined4 *param_2,undefined4 *param_3)" (identifier "FUN_00019530") (parameter_list "(uint param_1,undefined4 *param_2,undefined4 *param_3)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 *param_3" (type_identifier "undefined4") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  undefined4 *puVar1;\n  undefined4 uVar2;\n  undefined4 *puVar3;\n  int iVar4;\n  undefined4 uVar5;\n  undefined4 uVar6;\n  \n  if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }\n  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);\n  if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "undefined4 *puVar1;" (type_identifier "undefined4") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "undefined4 uVar5;" (type_identifier "undefined4") (identifier "uVar5") (; ";")) (declaration "undefined4 uVar6;" (type_identifier "undefined4") (identifier "uVar6") (; ";")) (if_statement "if ((param_1 & 0x102) == 0) {\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }" (if "if") (parenthesized_expression "((param_1 & 0x102) == 0)" (( "(") (binary_expression "(param_1 & 0x102) == 0" (parenthesized_expression "(param_1 & 0x102)" (( "(") (binary_expression "param_1 & 0x102" (identifier "param_1") (& "&") (number_literal "0x102")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar4 = cycle_check(*param_2,param_3 + 0x12);\n    if (iVar4 == 0) {\n      return 1;\n    }\n    *param_3 = param_3;\n    *(undefined2 *)(param_3 + 0xf) = 2;\n    return iVar4;\n  }" ({ "{") (expression_statement "iVar4 = cycle_check(*param_2,param_3 + 0x12);" (assignment_expression "iVar4 = cycle_check(*param_2,param_3 + 0x12)" (identifier "iVar4") (= "=") (call_expression "cycle_check(*param_2,param_3 + 0x12)" (identifier "cycle_check") (argument_list "(*param_2,param_3 + 0x12)" (( "(") (pointer_expression "*param_2" (* "*") (identifier "param_2")) (, ",") (binary_expression "param_3 + 0x12" (identifier "param_3") (+ "+") (number_literal "0x12")) () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n      return 1;\n    }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "*param_3 = param_3;" (assignment_expression "*param_3 = param_3" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "*(undefined2 *)(param_3 + 0xf) = 2;" (assignment_expression "*(undefined2 *)(param_3 + 0xf) = 2" (pointer_expression "*(undefined2 *)(param_3 + 0xf)" (* "*") (cast_expression "(undefined2 *)(param_3 + 0xf)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0xf)" (( "(") (binary_expression "param_3 + 0xf" (identifier "param_3") (+ "+") (number_literal "0xf")) () ")")))) (= "=") (number_literal "2")) (; ";")) (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (expression_statement "puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);" (assignment_expression "puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18)" (identifier "puVar1") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_malloc_00032358)(0x18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_malloc_00032358)(0x18)" (parenthesized_expression "(*(code *)PTR_malloc_00032358)" (( "(") (pointer_expression "*(code *)PTR_malloc_00032358" (* "*") (cast_expression "(code *)PTR_malloc_00032358" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_malloc_00032358"))) () ")")) (argument_list "(0x18)" (( "(") (number_literal "0x18") () ")"))))) (; ";")) (if_statement "if (puVar1 != (undefined4 *)0x0) {\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }" (if "if") (parenthesized_expression "(puVar1 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar1 != (undefined4 *)0x0" (identifier "puVar1") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    uVar5 = param_3[0x17];\n    uVar2 = param_3[0x16];\n    uVar6 = *param_2;\n    puVar1[1] = param_3[0x12];\n    *puVar1 = 0;\n    puVar1[3] = uVar5;\n    puVar1[2] = uVar2;\n    puVar1[4] = param_3;\n    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);\n    if (puVar1 == puVar3) {\n      return 1;\n    }\n    (*(code *)PTR_free_000323b4)(puVar1);\n    if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }\n  }" ({ "{") (expression_statement "uVar5 = param_3[0x17];" (assignment_expression "uVar5 = param_3[0x17]" (identifier "uVar5") (= "=") (subscript_expression "param_3[0x17]" (identifier "param_3") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "uVar2 = param_3[0x16];" (assignment_expression "uVar2 = param_3[0x16]" (identifier "uVar2") (= "=") (subscript_expression "param_3[0x16]" (identifier "param_3") ([ "[") (number_literal "0x16") (] "]"))) (; ";")) (expression_statement "uVar6 = *param_2;" (assignment_expression "uVar6 = *param_2" (identifier "uVar6") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "puVar1[1] = param_3[0x12];" (assignment_expression "puVar1[1] = param_3[0x12]" (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "param_3[0x12]" (identifier "param_3") ([ "[") (number_literal "0x12") (] "]"))) (; ";")) (expression_statement "*puVar1 = 0;" (assignment_expression "*puVar1 = 0" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar1[3] = uVar5;" (assignment_expression "puVar1[3] = uVar5" (subscript_expression "puVar1[3]" (identifier "puVar1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "puVar1[2] = uVar2;" (assignment_expression "puVar1[2] = uVar2" (subscript_expression "puVar1[2]" (identifier "puVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "puVar1[4] = param_3;" (assignment_expression "puVar1[4] = param_3" (subscript_expression "puVar1[4]" (identifier "puVar1") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);" (assignment_expression "puVar3 = (undefined4 *)hash_insert(uVar6,puVar1)" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)hash_insert(uVar6,puVar1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "hash_insert(uVar6,puVar1)" (identifier "hash_insert") (argument_list "(uVar6,puVar1)" (( "(") (identifier "uVar6") (, ",") (identifier "puVar1") () ")"))))) (; ";")) (if_statement "if (puVar1 == puVar3) {\n      return 1;\n    }" (if "if") (parenthesized_expression "(puVar1 == puVar3)" (( "(") (binary_expression "puVar1 == puVar3" (identifier "puVar1") (== "==") (identifier "puVar3")) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_free_000323b4)(puVar1);" (call_expression "(*(code *)PTR_free_000323b4)(puVar1)" (parenthesized_expression "(*(code *)PTR_free_000323b4)" (( "(") (pointer_expression "*(code *)PTR_free_000323b4" (* "*") (cast_expression "(code *)PTR_free_000323b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_000323b4"))) () ")")) (argument_list "(puVar1)" (( "(") (identifier "puVar1") () ")"))) (; ";")) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }" (if "if") (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar3 != (undefined4 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      uVar2 = puVar3[4];\n      *(undefined2 *)(param_3 + 0xf) = 2;\n      *param_3 = uVar2;\n      return 1;\n    }" ({ "{") (expression_statement "uVar2 = puVar3[4];" (assignment_expression "uVar2 = puVar3[4]" (identifier "uVar2") (= "=") (subscript_expression "puVar3[4]" (identifier "puVar3") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "*(undefined2 *)(param_3 + 0xf) = 2;" (assignment_expression "*(undefined2 *)(param_3 + 0xf) = 2" (pointer_expression "*(undefined2 *)(param_3 + 0xf)" (* "*") (cast_expression "(undefined2 *)(param_3 + 0xf)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0xf)" (( "(") (binary_expression "param_3 + 0xf" (identifier "param_3") (+ "+") (number_literal "0xf")) () ")")))) (= "=") (number_literal "2")) (; ";")) (expression_statement "*param_3 = uVar2;" (assignment_expression "*param_3 = uVar2" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "uVar2")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* DWARF original prototype: _Bool enter_dir(FTS * fts, FTSENT * ent, FTS * fts) */

type_1 function_1(type_2 *fts,type_3 *ent,type_2 *fts_1)

{
  type_4 extraout_var;
  type_5 *var_3;
  type_5 uVar1;
  type_5 *var_5;
  type_1 _Var3;
  type_5 uVar4;
  type_6 *p_Var5;
  
  if (((type_7)fts & 0x102) == 0) {
    _Var3 = var_1((type_8 *)ent->fts_cycle,
                        (type_9 *)((fts_1->fts_fd_ring).ir_data + 3));
    if (var_2(extraout_var,_Var3) == 0) {
      return true;
    }
    fts_1->fts_cur = (type_6 *)fts_1;
    *(type_10 *)(fts_1->fts_fd_ring).ir_data = 2;
    return _Var3;
  }
  var_3 = (type_5 *)(*(type_11 *)PTR_malloc_00032358)(0x18);
  if (var_3 != (type_5 *)0x0) {
    uVar4 = *(type_5 *)&fts_1->field_0x5c;
    uVar1 = *(type_5 *)&(fts_1->fts_fd_ring).ir_empty;
    p_Var5 = ent->fts_cycle;
    var_3[1] = (fts_1->fts_fd_ring).ir_data[3];
    *var_3 = 0;
    var_3[3] = uVar4;
    var_3[2] = uVar1;
    var_3[4] = fts_1;
    var_5 = (type_5 *)var_4((type_12 *)p_Var5,var_3);
    if (var_3 == var_5) {
      return true;
    }
    (*(type_11 *)PTR_free_000323b4)(var_3);
    if (var_5 != (type_5 *)0x0) {
      p_Var5 = (type_6 *)var_5[4];
      *(type_10 *)(fts_1->fts_fd_ring).ir_data = 2;
      fts_1->fts_cur = p_Var5;
      return true;
    }
  }
  return false;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (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: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (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: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (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 (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (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)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (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)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement (number_literal)))))) (return_statement (number_literal)))))

int MASKED(uint param_1,undefined4 *param_2,undefined4 *param_3)

{
  undefined4 *puVar1;
  undefined4 uVar2;
  undefined4 *puVar3;
  int iVar4;
  undefined4 uVar5;
  undefined4 uVar6;
  
  if ((param_1 & 0x102) == 0) {
    iVar4 = cycle_check(*param_2,param_3 + 0x12);
    if (iVar4 == 0) {
      return 1;
    }
    *param_3 = param_3;
    *(undefined2 *)(param_3 + 0xf) = 2;
    return iVar4;
  }
  puVar1 = (undefined4 *)(*(code *)PTR_malloc_00032358)(0x18);
  if (puVar1 != (undefined4 *)0x0) {
    uVar5 = param_3[0x17];
    uVar2 = param_3[0x16];
    uVar6 = *param_2;
    puVar1[1] = param_3[0x12];
    *puVar1 = 0;
    puVar1[3] = uVar5;
    puVar1[2] = uVar2;
    puVar1[4] = param_3;
    puVar3 = (undefined4 *)hash_insert(uVar6,puVar1);
    if (puVar1 == puVar3) {
      return 1;
    }
    (*(code *)PTR_free_000323b4)(puVar1);
    if (puVar3 != (undefined4 *)0x0) {
      uVar2 = puVar3[4];
      *(undefined2 *)(param_3 + 0xf) = 2;
      *param_3 = uVar2;
      return 1;
    }
  }
  return 0;
}

