
Hash_table *
hash_initialize(size_t candidate,Hash_tuning *tuning,Hash_hasher hasher,Hash_comparator comparator,
               Hash_data_freer data_freer)

{
  undefined3 extraout_var;
  undefined3 extraout_var_00;
  Hash_table *pHVar1;
  _Bool _Var4;
  size_t sVar2;
  hash_entry *phVar3;
  code *pcVar5;
  double dVar6;
  float fVar7;
  
  if (hasher == (Hash_hasher)0x0) {
    hasher = (Hash_hasher)(PTR_LAB_00046280 + 0x568);
  }
  if (comparator == (Hash_comparator)0x0) {
    comparator = (Hash_comparator)(PTR_LAB_00046280 + 0x57c);
  }
  pHVar1 = (Hash_table *)(*(code *)PTR_malloc_000465f0)(0x28);
  if (pHVar1 == (Hash_table *)0x0) {
    return (Hash_table *)0x0;
  }
  if (tuning == (Hash_tuning *)0x0) {
    pHVar1->tuning = (Hash_tuning *)(PTR_LAB_00046148 + 0x3e50);
    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);
    pcVar5 = (code *)PTR_free_000466a8;
    if (CONCAT31(extraout_var_00,_Var4) == 0) goto LAB_00021104;
    fVar7 = *(float *)(PTR_LAB_00046148 + 16000);
LAB_00021174:
    dVar6 = (double)(int)candidate;
    if ((int)candidate < 0) {
      dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);
    }
    fVar7 = (float)dVar6 / fVar7;
    pcVar5 = (code *)PTR_free_000466a8;
    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7) goto LAB_00021104;
    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7) {
      candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;
    }
    else {
      candidate = (size_t)fVar7;
    }
  }
  else {
    pHVar1->tuning = tuning;
    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);
    pcVar5 = (code *)PTR_free_000466a8;
    if (CONCAT31(extraout_var,_Var4) == 0) goto LAB_00021104;
    if (tuning->is_n_buckets == false) {
      fVar7 = tuning->growth_threshold;
      goto LAB_00021174;
    }
  }
  sVar2 = next_prime(candidate);
  pcVar5 = (code *)PTR_free_000466a8;
  if (((-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0)) && (pHVar1->n_buckets = sVar2, sVar2 != 0))
  {
    phVar3 = (hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8);
    pHVar1->bucket = phVar3;
    pcVar5 = (code *)PTR_free_000466a8;
    if (phVar3 != (hash_entry *)0x0) {
      pHVar1->hasher = hasher;
      pHVar1->comparator = comparator;
      pHVar1->bucket_limit = phVar3 + sVar2;
      pHVar1->data_freer = data_freer;
      pHVar1->n_buckets_used = 0;
      pHVar1->n_entries = 0;
      pHVar1->free_entry_list = (hash_entry *)0x0;
      return pHVar1;
    }
  }
LAB_00021104:
  (*pcVar5)(pHVar1);
  return (Hash_table *)0x0;
}



int * hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)

{
  int *piVar1;
  int iVar2;
  uint uVar3;
  code *pcVar4;
  double dVar5;
  float fVar6;
  
  if (param_3 == (undefined *)0x0) {
    param_3 = PTR_LAB_00046280 + 0x568;
  }
  if (param_4 == (undefined *)0x0) {
    param_4 = PTR_LAB_00046280 + 0x57c;
  }
  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);
  if (piVar1 == (int *)0x0) {
    return (int *)0x0;
  }
  if (param_2 == 0) {
    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);
    iVar2 = FUN_00020738(piVar1 + 5);
    pcVar4 = (code *)PTR_free_000466a8;
    if (iVar2 == 0) goto LAB_00021104;
    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);
LAB_00021174:
    dVar5 = (double)(int)param_1;
    if ((int)param_1 < 0) {
      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);
    }
    fVar6 = (float)dVar5 / fVar6;
    pcVar4 = (code *)PTR_free_000466a8;
    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;
    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {
      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;
    }
    else {
      param_1 = (uint)fVar6;
    }
  }
  else {
    piVar1[5] = param_2;
    iVar2 = FUN_00020738(piVar1 + 5);
    pcVar4 = (code *)PTR_free_000466a8;
    if (iVar2 == 0) goto LAB_00021104;
    if (*(char *)(param_2 + 0x10) == '\0') {
      fVar6 = *(float *)(param_2 + 8);
      goto LAB_00021174;
    }
  }
  uVar3 = FUN_000204c0(param_1);
  pcVar4 = (code *)PTR_free_000466a8;
  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {
    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);
    *piVar1 = iVar2;
    pcVar4 = (code *)PTR_free_000466a8;
    if (iVar2 != 0) {
      piVar1[6] = (int)param_3;
      piVar1[7] = (int)param_4;
      piVar1[1] = iVar2 + uVar3 * 8;
      piVar1[8] = param_5;
      piVar1[3] = 0;
      piVar1[4] = 0;
      piVar1[9] = 0;
      return piVar1;
    }
  }
LAB_00021104:
  (*pcVar4)(piVar1);
  return (int *)0x0;
}


lui gp,0x3
addiu gp,gp,-0x2ec4
addu gp,gp,t9
addiu sp,sp,-0x30
sw gp,0x10(sp)
sw s4,0x28(sp)
or s4,a0,zero
sw s3,0x24(sp)
or s3,a3,zero
sw s1,0x1c(sp)
or s1,a1,zero
sw ra,0x2c(sp)
sw s2,0x20(sp)
beq a2,zero,0x00021140
_sw s0,0x18(sp)
or s2,a2,zero
beq s3,zero,0x00021134
_nop
lw t9,-0x7b20(gp)
jalr t9
_li a0,0x28
lw gp,0x10(sp)
beq v0,zero,0x00021110
_or s0,v0,zero
beq s1,zero,0x0002114c
_addiu a0,v0,0x14
lw t9,-0x7e90(gp)
addiu t9,t9,0x738
bal 0x00020738
_sw s1,0x14(v0)
beq v0,zero,0x00021100
_lw gp,0x10(sp)
lbu v0,0x10(s1)
beq v0,zero,0x000211d0
_nop
lw t9,-0x7e90(gp)
addiu t9,t9,0x4c0
bal 0x000204c0
_or a0,s4,zero
or s1,v0,zero
lw gp,0x10(sp)
srl v0,v0,0x1e
sll v1,s1,0x2
bltz v1,0x00021100
_sltu v0,zero,v0
bne v0,zero,0x00021104
_lw t9,-0x7a68(gp)
beq s1,zero,0x00021104
_sw s1,0x8(s0)
lw t9,-0x7cb4(gp)
li a1,0x8
jalr t9
_or a0,s1,zero
lw gp,0x10(sp)
beq v0,zero,0x00021100
_sw v0,0x0(s0)
sll s1,s1,0x3
lw ra,0x2c(sp)
lw s4,0x28(sp)
addu s1,v0,s1
lw v0,0x40(sp)
sw s2,0x18(s0)
sw s3,0x1c(s0)
sw s1,0x4(s0)
sw v0,0x20(s0)
or v0,s0,zero
sw zero,0xc(s0)
sw zero,0x10(s0)
sw zero,0x24(s0)
lw s3,0x24(sp)
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x30
lw t9,-0x7a68(gp)
or a0,s0,zero
jalr t9
_or s0,zero,zero
lw ra,0x2c(sp)
or v0,s0,zero
lw s4,0x28(sp)
lw s3,0x24(sp)
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x30
lw s3,-0x7e90(gp)
b 0x0002101c
_addiu s3,s3,0x57c
lw s2,-0x7e90(gp)
b 0x00021014
_addiu s2,s2,0x568
lw v0,-0x7fc8(gp)
lw t9,-0x7e90(gp)
addiu v0,v0,0x3e50
addiu t9,t9,0x738
bal 0x00020738
_sw v0,0x14(s0)
beq v0,zero,0x00021100
_lw gp,0x10(sp)
lw v0,-0x7fc8(gp)
lwc1 f2,0x3e80(v0)
mtc1 s4,f0
bgez s4,0x0002118c
_cvt.d.W f0,f0
lw v0,-0x7fc8(gp)
ldc1 f4,0x3e90(v0)
add.D f0,f0,f4
lw v0,-0x7fc8(gp)
cvt.s.D f0,f0
div.S f0,f0,f2
lwc1 f2,0x3e88(v0)
c.le.S f2,f0
bc1t 0x00021100
_lw v0,-0x7fc8(gp)
lwc1 f2,0x3e8c(v0)
c.le.S f2,f0
bc1f 0x1,0x000211d8
_nop
sub.S S f0,f0,f2
lui v0,0x8000
trunc.w.S f0,f0
mfc1 s4,f0
b 0x00021060
_or s4,s4,v0
b 0x00021174
_lwc1 f2,0x8(s1)
trunc.w.S f0,f0
b 0x00021060
_mfc1 s4,f0
(translation_unit "int * hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  code *pcVar4;\n  double dVar5;\n  float fVar6;\n  \n  if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }\n  if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }\n  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }\n  if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }\n  uVar3 = FUN_000204c0(param_1);\n  pcVar4 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar4)(piVar1);\n  return (int *)0x0;\n}\n\n" (function_definition "int * hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  code *pcVar4;\n  double dVar5;\n  float fVar6;\n  \n  if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }\n  if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }\n  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }\n  if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }\n  uVar3 = FUN_000204c0(param_1);\n  pcVar4 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar4)(piVar1);\n  return (int *)0x0;\n}" primitive_type (pointer_declarator "* hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" * (function_declarator "hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" identifier (parameter_list "(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int param_5" primitive_type identifier) )))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  code *pcVar4;\n  double dVar5;\n  float fVar6;\n  \n  if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }\n  if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }\n  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }\n  if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }\n  uVar3 = FUN_000204c0(param_1);\n  pcVar4 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar4)(piVar1);\n  return (int *)0x0;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "double dVar5;" primitive_type identifier ;) (declaration "float fVar6;" primitive_type identifier ;) (if_statement "if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }" if (parenthesized_expression "(param_3 == (undefined *)0x0)" ( (binary_expression "param_3 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }" { (expression_statement "param_3 = PTR_LAB_00046280 + 0x568;" (assignment_expression "param_3 = PTR_LAB_00046280 + 0x568" identifier = (binary_expression "PTR_LAB_00046280 + 0x568" identifier + number_literal)) ;) })) (if_statement "if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }" if (parenthesized_expression "(param_4 == (undefined *)0x0)" ( (binary_expression "param_4 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }" { (expression_statement "param_4 = PTR_LAB_00046280 + 0x57c;" (assignment_expression "param_4 = PTR_LAB_00046280 + 0x57c" identifier = (binary_expression "PTR_LAB_00046280 + 0x57c" identifier + number_literal)) ;) })) (expression_statement "piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);" (assignment_expression "piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28)" identifier = (cast_expression "(int *)(*(code *)PTR_malloc_000465f0)(0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_000465f0)(0x28)" (parenthesized_expression "(*(code *)PTR_malloc_000465f0)" ( (pointer_expression "*(code *)PTR_malloc_000465f0" * (cast_expression "(code *)PTR_malloc_000465f0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x28)" ( number_literal ))))) ;) (if_statement "if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }" if (parenthesized_expression "(piVar1 == (int *)0x0)" ( (binary_expression "piVar1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (int *)0x0;\n  }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }" { (expression_statement "piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);" (assignment_expression "piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50)" (subscript_expression "piVar1[5]" identifier [ number_literal ]) = (cast_expression "(int)(PTR_LAB_00046148 + 0x3e50)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e50)" ( (binary_expression "PTR_LAB_00046148 + 0x3e50" identifier + number_literal) )))) ;) (expression_statement "iVar2 = FUN_00020738(piVar1 + 5);" (assignment_expression "iVar2 = FUN_00020738(piVar1 + 5)" identifier = (call_expression "FUN_00020738(piVar1 + 5)" identifier (argument_list "(piVar1 + 5)" ( (binary_expression "piVar1 + 5" identifier + number_literal) )))) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (iVar2 == 0) goto LAB_00021104;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (expression_statement "fVar6 = *(float *)(PTR_LAB_00046148 + 16000);" (assignment_expression "fVar6 = *(float *)(PTR_LAB_00046148 + 16000)" identifier = (pointer_expression "*(float *)(PTR_LAB_00046148 + 16000)" * (cast_expression "(float *)(PTR_LAB_00046148 + 16000)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 16000)" ( (binary_expression "PTR_LAB_00046148 + 16000" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00021174:\n    dVar5 = (double)(int)param_1;" statement_identifier : (expression_statement "dVar5 = (double)(int)param_1;" (assignment_expression "dVar5 = (double)(int)param_1" identifier = (cast_expression "(double)(int)param_1" ( (type_descriptor "double" primitive_type) ) (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier))) ;)) (if_statement "if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }" if (parenthesized_expression "((int)param_1 < 0)" ( (binary_expression "(int)param_1 < 0" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }" { (expression_statement "dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);" (assignment_expression "dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90)" identifier = (binary_expression "dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90)" identifier + (pointer_expression "*(double *)(PTR_LAB_00046148 + 0x3e90)" * (cast_expression "(double *)(PTR_LAB_00046148 + 0x3e90)" ( (type_descriptor "double *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e90)" ( (binary_expression "PTR_LAB_00046148 + 0x3e90" identifier + number_literal) )))))) ;) })) (expression_statement "fVar6 = (float)dVar5 / fVar6;" (assignment_expression "fVar6 = (float)dVar5 / fVar6" identifier = (binary_expression "(float)dVar5 / fVar6" (cast_expression "(float)dVar5" ( (type_descriptor "float" primitive_type) ) identifier) / identifier)) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;" if (parenthesized_expression "(*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6)" ( (binary_expression "*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6" (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e88)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e88)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e88)" ( (binary_expression "PTR_LAB_00046148 + 0x3e88" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (if_statement "if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }" if (parenthesized_expression "(*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6)" ( (binary_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6" (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e8c)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e8c)" ( (binary_expression "PTR_LAB_00046148 + 0x3e8c" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }" { (expression_statement "param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;" (assignment_expression "param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000" identifier = (binary_expression "(int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000" (cast_expression "(int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c))" ( (binary_expression "fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)" identifier - (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e8c)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e8c)" ( (binary_expression "PTR_LAB_00046148 + 0x3e8c" identifier + number_literal) ))))) ))) | number_literal)) ;) }) (else_clause "else {\n      param_1 = (uint)fVar6;\n    }" else (compound_statement "{\n      param_1 = (uint)fVar6;\n    }" { (expression_statement "param_1 = (uint)fVar6;" (assignment_expression "param_1 = (uint)fVar6" identifier = (cast_expression "(uint)fVar6" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) }))) }) (else_clause "else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" else (compound_statement "{\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" { (expression_statement "piVar1[5] = param_2;" (assignment_expression "piVar1[5] = param_2" (subscript_expression "piVar1[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar2 = FUN_00020738(piVar1 + 5);" (assignment_expression "iVar2 = FUN_00020738(piVar1 + 5)" identifier = (call_expression "FUN_00020738(piVar1 + 5)" identifier (argument_list "(piVar1 + 5)" ( (binary_expression "piVar1 + 5" identifier + number_literal) )))) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (iVar2 == 0) goto LAB_00021104;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (if_statement "if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }" if (parenthesized_expression "(*(char *)(param_2 + 0x10) == '\0')" ( (binary_expression "*(char *)(param_2 + 0x10) == '\0'" (pointer_expression "*(char *)(param_2 + 0x10)" * (cast_expression "(char *)(param_2 + 0x10)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }" { (expression_statement "fVar6 = *(float *)(param_2 + 8);" (assignment_expression "fVar6 = *(float *)(param_2 + 8)" identifier = (pointer_expression "*(float *)(param_2 + 8)" * (cast_expression "(float *)(param_2 + 8)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) (goto_statement "goto LAB_00021174;" goto statement_identifier ;) })) }))) (expression_statement "uVar3 = FUN_000204c0(param_1);" (assignment_expression "uVar3 = FUN_000204c0(param_1)" identifier = (call_expression "FUN_000204c0(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }" if (parenthesized_expression "(((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0))" ( (binary_expression "((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)" (parenthesized_expression "((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0))" ( (binary_expression "(-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)" (parenthesized_expression "(-1 < (int)(uVar3 << 2))" ( (binary_expression "-1 < (int)(uVar3 << 2)" number_literal < (cast_expression "(int)(uVar3 << 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar3 << 2)" ( (binary_expression "uVar3 << 2" identifier << number_literal) )))) )) && (parenthesized_expression "(uVar3 >> 0x1e == 0)" ( (binary_expression "uVar3 >> 0x1e == 0" (binary_expression "uVar3 >> 0x1e" identifier >> number_literal) == number_literal) ))) )) && (parenthesized_expression "(piVar1[2] = uVar3, uVar3 != 0)" ( (comma_expression "piVar1[2] = uVar3, uVar3 != 0" (assignment_expression "piVar1[2] = uVar3" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = identifier) , (binary_expression "uVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }" { (expression_statement "iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);" (assignment_expression "iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8)" identifier = (call_expression "(*(code *)PTR_calloc_0004645c)(uVar3,8)" (parenthesized_expression "(*(code *)PTR_calloc_0004645c)" ( (pointer_expression "*(code *)PTR_calloc_0004645c" * (cast_expression "(code *)PTR_calloc_0004645c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar3,8)" ( identifier , number_literal )))) ;) (expression_statement "*piVar1 = iVar2;" (assignment_expression "*piVar1 = iVar2" (pointer_expression "*piVar1" * identifier) = identifier) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }" { (expression_statement "piVar1[6] = (int)param_3;" (assignment_expression "piVar1[6] = (int)param_3" (subscript_expression "piVar1[6]" identifier [ number_literal ]) = (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar1[7] = (int)param_4;" (assignment_expression "piVar1[7] = (int)param_4" (subscript_expression "piVar1[7]" identifier [ number_literal ]) = (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar1[1] = iVar2 + uVar3 * 8;" (assignment_expression "piVar1[1] = iVar2 + uVar3 * 8" (subscript_expression "piVar1[1]" identifier [ number_literal ]) = (binary_expression "iVar2 + uVar3 * 8" identifier + (binary_expression "uVar3 * 8" identifier * number_literal))) ;) (expression_statement "piVar1[8] = param_5;" (assignment_expression "piVar1[8] = param_5" (subscript_expression "piVar1[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar1[3] = 0;" (assignment_expression "piVar1[3] = 0" (subscript_expression "piVar1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar1[4] = 0;" (assignment_expression "piVar1[4] = 0" (subscript_expression "piVar1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar1[9] = 0;" (assignment_expression "piVar1[9] = 0" (subscript_expression "piVar1[9]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return piVar1;" return identifier ;) })) })) (labeled_statement "LAB_00021104:\n  (*pcVar4)(piVar1);" statement_identifier : (expression_statement "(*pcVar4)(piVar1);" (call_expression "(*pcVar4)(piVar1)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(piVar1)" ( identifier ))) ;)) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "Hash_table *\nhash_initialize(size_t candidate,Hash_tuning *tuning,Hash_hasher hasher,Hash_comparator comparator,\n               Hash_data_freer data_freer)\n\n{\n  undefined3 extraout_var;\n  undefined3 extraout_var_00;\n  Hash_table *pHVar1;\n  _Bool _Var4;\n  size_t sVar2;\n  hash_entry *phVar3;\n  code *pcVar5;\n  double dVar6;\n  float fVar7;\n  \n  if (hasher == (Hash_hasher)0x0) {\n    hasher = (Hash_hasher)(PTR_LAB_00046280 + 0x568);\n  }\n  if (comparator == (Hash_comparator)0x0) {\n    comparator = (Hash_comparator)(PTR_LAB_00046280 + 0x57c);\n  }\n  pHVar1 = (Hash_table *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (pHVar1 == (Hash_table *)0x0) {\n    return (Hash_table *)0x0;\n  }\n  if (tuning == (Hash_tuning *)0x0) {\n    pHVar1->tuning = (Hash_tuning *)(PTR_LAB_00046148 + 0x3e50);\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var_00,_Var4) == 0) goto LAB_00021104;\n    fVar7 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar6 = (double)(int)candidate;\n    if ((int)candidate < 0) {\n      dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar7 = (float)dVar6 / fVar7;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7) {\n      candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      candidate = (size_t)fVar7;\n    }\n  }\n  else {\n    pHVar1->tuning = tuning;\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var,_Var4) == 0) goto LAB_00021104;\n    if (tuning->is_n_buckets == false) {\n      fVar7 = tuning->growth_threshold;\n      goto LAB_00021174;\n    }\n  }\n  sVar2 = next_prime(candidate);\n  pcVar5 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0)) && (pHVar1->n_buckets = sVar2, sVar2 != 0))\n  {\n    phVar3 = (hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8);\n    pHVar1->bucket = phVar3;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (phVar3 != (hash_entry *)0x0) {\n      pHVar1->hasher = hasher;\n      pHVar1->comparator = comparator;\n      pHVar1->bucket_limit = phVar3 + sVar2;\n      pHVar1->data_freer = data_freer;\n      pHVar1->n_buckets_used = 0;\n      pHVar1->n_entries = 0;\n      pHVar1->free_entry_list = (hash_entry *)0x0;\n      return pHVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar5)(pHVar1);\n  return (Hash_table *)0x0;\n}\n\n" (function_definition "Hash_table *\nhash_initialize(size_t candidate,Hash_tuning *tuning,Hash_hasher hasher,Hash_comparator comparator,\n               Hash_data_freer data_freer)\n\n{\n  undefined3 extraout_var;\n  undefined3 extraout_var_00;\n  Hash_table *pHVar1;\n  _Bool _Var4;\n  size_t sVar2;\n  hash_entry *phVar3;\n  code *pcVar5;\n  double dVar6;\n  float fVar7;\n  \n  if (hasher == (Hash_hasher)0x0) {\n    hasher = (Hash_hasher)(PTR_LAB_00046280 + 0x568);\n  }\n  if (comparator == (Hash_comparator)0x0) {\n    comparator = (Hash_comparator)(PTR_LAB_00046280 + 0x57c);\n  }\n  pHVar1 = (Hash_table *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (pHVar1 == (Hash_table *)0x0) {\n    return (Hash_table *)0x0;\n  }\n  if (tuning == (Hash_tuning *)0x0) {\n    pHVar1->tuning = (Hash_tuning *)(PTR_LAB_00046148 + 0x3e50);\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var_00,_Var4) == 0) goto LAB_00021104;\n    fVar7 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar6 = (double)(int)candidate;\n    if ((int)candidate < 0) {\n      dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar7 = (float)dVar6 / fVar7;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7) {\n      candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      candidate = (size_t)fVar7;\n    }\n  }\n  else {\n    pHVar1->tuning = tuning;\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var,_Var4) == 0) goto LAB_00021104;\n    if (tuning->is_n_buckets == false) {\n      fVar7 = tuning->growth_threshold;\n      goto LAB_00021174;\n    }\n  }\n  sVar2 = next_prime(candidate);\n  pcVar5 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0)) && (pHVar1->n_buckets = sVar2, sVar2 != 0))\n  {\n    phVar3 = (hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8);\n    pHVar1->bucket = phVar3;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (phVar3 != (hash_entry *)0x0) {\n      pHVar1->hasher = hasher;\n      pHVar1->comparator = comparator;\n      pHVar1->bucket_limit = phVar3 + sVar2;\n      pHVar1->data_freer = data_freer;\n      pHVar1->n_buckets_used = 0;\n      pHVar1->n_entries = 0;\n      pHVar1->free_entry_list = (hash_entry *)0x0;\n      return pHVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar5)(pHVar1);\n  return (Hash_table *)0x0;\n}" type_identifier (pointer_declarator "*\nhash_initialize(size_t candidate,Hash_tuning *tuning,Hash_hasher hasher,Hash_comparator comparator,\n               Hash_data_freer data_freer)" * (function_declarator "hash_initialize(size_t candidate,Hash_tuning *tuning,Hash_hasher hasher,Hash_comparator comparator,\n               Hash_data_freer data_freer)" identifier (parameter_list "(size_t candidate,Hash_tuning *tuning,Hash_hasher hasher,Hash_comparator comparator,\n               Hash_data_freer data_freer)" ( (parameter_declaration "size_t candidate" primitive_type identifier) , (parameter_declaration "Hash_tuning *tuning" type_identifier (pointer_declarator "*tuning" * identifier)) , (parameter_declaration "Hash_hasher hasher" type_identifier identifier) , (parameter_declaration "Hash_comparator comparator" type_identifier identifier) , (parameter_declaration "Hash_data_freer data_freer" type_identifier identifier) )))) (compound_statement "{\n  undefined3 extraout_var;\n  undefined3 extraout_var_00;\n  Hash_table *pHVar1;\n  _Bool _Var4;\n  size_t sVar2;\n  hash_entry *phVar3;\n  code *pcVar5;\n  double dVar6;\n  float fVar7;\n  \n  if (hasher == (Hash_hasher)0x0) {\n    hasher = (Hash_hasher)(PTR_LAB_00046280 + 0x568);\n  }\n  if (comparator == (Hash_comparator)0x0) {\n    comparator = (Hash_comparator)(PTR_LAB_00046280 + 0x57c);\n  }\n  pHVar1 = (Hash_table *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (pHVar1 == (Hash_table *)0x0) {\n    return (Hash_table *)0x0;\n  }\n  if (tuning == (Hash_tuning *)0x0) {\n    pHVar1->tuning = (Hash_tuning *)(PTR_LAB_00046148 + 0x3e50);\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var_00,_Var4) == 0) goto LAB_00021104;\n    fVar7 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar6 = (double)(int)candidate;\n    if ((int)candidate < 0) {\n      dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar7 = (float)dVar6 / fVar7;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7) {\n      candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      candidate = (size_t)fVar7;\n    }\n  }\n  else {\n    pHVar1->tuning = tuning;\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var,_Var4) == 0) goto LAB_00021104;\n    if (tuning->is_n_buckets == false) {\n      fVar7 = tuning->growth_threshold;\n      goto LAB_00021174;\n    }\n  }\n  sVar2 = next_prime(candidate);\n  pcVar5 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0)) && (pHVar1->n_buckets = sVar2, sVar2 != 0))\n  {\n    phVar3 = (hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8);\n    pHVar1->bucket = phVar3;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (phVar3 != (hash_entry *)0x0) {\n      pHVar1->hasher = hasher;\n      pHVar1->comparator = comparator;\n      pHVar1->bucket_limit = phVar3 + sVar2;\n      pHVar1->data_freer = data_freer;\n      pHVar1->n_buckets_used = 0;\n      pHVar1->n_entries = 0;\n      pHVar1->free_entry_list = (hash_entry *)0x0;\n      return pHVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar5)(pHVar1);\n  return (Hash_table *)0x0;\n}" { (declaration "undefined3 extraout_var;" type_identifier identifier ;) (declaration "undefined3 extraout_var_00;" type_identifier identifier ;) (declaration "Hash_table *pHVar1;" type_identifier (pointer_declarator "*pHVar1" * identifier) ;) (declaration "_Bool _Var4;" type_identifier identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "hash_entry *phVar3;" type_identifier (pointer_declarator "*phVar3" * identifier) ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "double dVar6;" primitive_type identifier ;) (declaration "float fVar7;" primitive_type identifier ;) (if_statement "if (hasher == (Hash_hasher)0x0) {\n    hasher = (Hash_hasher)(PTR_LAB_00046280 + 0x568);\n  }" if (parenthesized_expression "(hasher == (Hash_hasher)0x0)" ( (binary_expression "hasher == (Hash_hasher)0x0" identifier == (cast_expression "(Hash_hasher)0x0" ( (type_descriptor "Hash_hasher" type_identifier) ) number_literal)) )) (compound_statement "{\n    hasher = (Hash_hasher)(PTR_LAB_00046280 + 0x568);\n  }" { (expression_statement "hasher = (Hash_hasher)(PTR_LAB_00046280 + 0x568);" (assignment_expression "hasher = (Hash_hasher)(PTR_LAB_00046280 + 0x568)" identifier = (call_expression "(Hash_hasher)(PTR_LAB_00046280 + 0x568)" (parenthesized_expression "(Hash_hasher)" ( identifier )) (argument_list "(PTR_LAB_00046280 + 0x568)" ( (binary_expression "PTR_LAB_00046280 + 0x568" identifier + number_literal) )))) ;) })) (if_statement "if (comparator == (Hash_comparator)0x0) {\n    comparator = (Hash_comparator)(PTR_LAB_00046280 + 0x57c);\n  }" if (parenthesized_expression "(comparator == (Hash_comparator)0x0)" ( (binary_expression "comparator == (Hash_comparator)0x0" identifier == (cast_expression "(Hash_comparator)0x0" ( (type_descriptor "Hash_comparator" type_identifier) ) number_literal)) )) (compound_statement "{\n    comparator = (Hash_comparator)(PTR_LAB_00046280 + 0x57c);\n  }" { (expression_statement "comparator = (Hash_comparator)(PTR_LAB_00046280 + 0x57c);" (assignment_expression "comparator = (Hash_comparator)(PTR_LAB_00046280 + 0x57c)" identifier = (call_expression "(Hash_comparator)(PTR_LAB_00046280 + 0x57c)" (parenthesized_expression "(Hash_comparator)" ( identifier )) (argument_list "(PTR_LAB_00046280 + 0x57c)" ( (binary_expression "PTR_LAB_00046280 + 0x57c" identifier + number_literal) )))) ;) })) (expression_statement "pHVar1 = (Hash_table *)(*(code *)PTR_malloc_000465f0)(0x28);" (assignment_expression "pHVar1 = (Hash_table *)(*(code *)PTR_malloc_000465f0)(0x28)" identifier = (cast_expression "(Hash_table *)(*(code *)PTR_malloc_000465f0)(0x28)" ( (type_descriptor "Hash_table *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_000465f0)(0x28)" (parenthesized_expression "(*(code *)PTR_malloc_000465f0)" ( (pointer_expression "*(code *)PTR_malloc_000465f0" * (cast_expression "(code *)PTR_malloc_000465f0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x28)" ( number_literal ))))) ;) (if_statement "if (pHVar1 == (Hash_table *)0x0) {\n    return (Hash_table *)0x0;\n  }" if (parenthesized_expression "(pHVar1 == (Hash_table *)0x0)" ( (binary_expression "pHVar1 == (Hash_table *)0x0" identifier == (cast_expression "(Hash_table *)0x0" ( (type_descriptor "Hash_table *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (Hash_table *)0x0;\n  }" { (return_statement "return (Hash_table *)0x0;" return (cast_expression "(Hash_table *)0x0" ( (type_descriptor "Hash_table *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (tuning == (Hash_tuning *)0x0) {\n    pHVar1->tuning = (Hash_tuning *)(PTR_LAB_00046148 + 0x3e50);\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var_00,_Var4) == 0) goto LAB_00021104;\n    fVar7 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar6 = (double)(int)candidate;\n    if ((int)candidate < 0) {\n      dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar7 = (float)dVar6 / fVar7;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7) {\n      candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      candidate = (size_t)fVar7;\n    }\n  }\n  else {\n    pHVar1->tuning = tuning;\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var,_Var4) == 0) goto LAB_00021104;\n    if (tuning->is_n_buckets == false) {\n      fVar7 = tuning->growth_threshold;\n      goto LAB_00021174;\n    }\n  }" if (parenthesized_expression "(tuning == (Hash_tuning *)0x0)" ( (binary_expression "tuning == (Hash_tuning *)0x0" identifier == (cast_expression "(Hash_tuning *)0x0" ( (type_descriptor "Hash_tuning *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pHVar1->tuning = (Hash_tuning *)(PTR_LAB_00046148 + 0x3e50);\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var_00,_Var4) == 0) goto LAB_00021104;\n    fVar7 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar6 = (double)(int)candidate;\n    if ((int)candidate < 0) {\n      dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar7 = (float)dVar6 / fVar7;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7) {\n      candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      candidate = (size_t)fVar7;\n    }\n  }" { (expression_statement "pHVar1->tuning = (Hash_tuning *)(PTR_LAB_00046148 + 0x3e50);" (assignment_expression "pHVar1->tuning = (Hash_tuning *)(PTR_LAB_00046148 + 0x3e50)" (field_expression "pHVar1->tuning" identifier -> field_identifier) = (cast_expression "(Hash_tuning *)(PTR_LAB_00046148 + 0x3e50)" ( (type_descriptor "Hash_tuning *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e50)" ( (binary_expression "PTR_LAB_00046148 + 0x3e50" identifier + number_literal) )))) ;) (expression_statement "_Var4 = check_tuning((Hash_table *)&pHVar1->tuning);" (assignment_expression "_Var4 = check_tuning((Hash_table *)&pHVar1->tuning)" identifier = (call_expression "check_tuning((Hash_table *)&pHVar1->tuning)" identifier (argument_list "((Hash_table *)&pHVar1->tuning)" ( (cast_expression "(Hash_table *)&pHVar1->tuning" ( (type_descriptor "Hash_table *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pHVar1->tuning" & (field_expression "pHVar1->tuning" identifier -> field_identifier))) )))) ;) (expression_statement "pcVar5 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar5 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (CONCAT31(extraout_var_00,_Var4) == 0) goto LAB_00021104;" if (parenthesized_expression "(CONCAT31(extraout_var_00,_Var4) == 0)" ( (binary_expression "CONCAT31(extraout_var_00,_Var4) == 0" (call_expression "CONCAT31(extraout_var_00,_Var4)" identifier (argument_list "(extraout_var_00,_Var4)" ( identifier , identifier ))) == number_literal) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (expression_statement "fVar7 = *(float *)(PTR_LAB_00046148 + 16000);" (assignment_expression "fVar7 = *(float *)(PTR_LAB_00046148 + 16000)" identifier = (pointer_expression "*(float *)(PTR_LAB_00046148 + 16000)" * (cast_expression "(float *)(PTR_LAB_00046148 + 16000)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 16000)" ( (binary_expression "PTR_LAB_00046148 + 16000" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00021174:\n    dVar6 = (double)(int)candidate;" statement_identifier : (expression_statement "dVar6 = (double)(int)candidate;" (assignment_expression "dVar6 = (double)(int)candidate" identifier = (cast_expression "(double)(int)candidate" ( (type_descriptor "double" primitive_type) ) (cast_expression "(int)candidate" ( (type_descriptor "int" primitive_type) ) identifier))) ;)) (if_statement "if ((int)candidate < 0) {\n      dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }" if (parenthesized_expression "((int)candidate < 0)" ( (binary_expression "(int)candidate < 0" (cast_expression "(int)candidate" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }" { (expression_statement "dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90);" (assignment_expression "dVar6 = dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90)" identifier = (binary_expression "dVar6 + *(double *)(PTR_LAB_00046148 + 0x3e90)" identifier + (pointer_expression "*(double *)(PTR_LAB_00046148 + 0x3e90)" * (cast_expression "(double *)(PTR_LAB_00046148 + 0x3e90)" ( (type_descriptor "double *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e90)" ( (binary_expression "PTR_LAB_00046148 + 0x3e90" identifier + number_literal) )))))) ;) })) (expression_statement "fVar7 = (float)dVar6 / fVar7;" (assignment_expression "fVar7 = (float)dVar6 / fVar7" identifier = (binary_expression "(float)dVar6 / fVar7" (cast_expression "(float)dVar6" ( (type_descriptor "float" primitive_type) ) identifier) / identifier)) ;) (expression_statement "pcVar5 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar5 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7) goto LAB_00021104;" if (parenthesized_expression "(*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7)" ( (binary_expression "*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar7" (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e88)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e88)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e88)" ( (binary_expression "PTR_LAB_00046148 + 0x3e88" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (if_statement "if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7) {\n      candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      candidate = (size_t)fVar7;\n    }" if (parenthesized_expression "(*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7)" ( (binary_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar7" (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e8c)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e8c)" ( (binary_expression "PTR_LAB_00046148 + 0x3e8c" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n      candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }" { (expression_statement "candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;" (assignment_expression "candidate = (int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000" identifier = (binary_expression "(int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000" (cast_expression "(int)(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c))" ( (binary_expression "fVar7 - *(float *)(PTR_LAB_00046148 + 0x3e8c)" identifier - (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e8c)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e8c)" ( (binary_expression "PTR_LAB_00046148 + 0x3e8c" identifier + number_literal) ))))) ))) | number_literal)) ;) }) (else_clause "else {\n      candidate = (size_t)fVar7;\n    }" else (compound_statement "{\n      candidate = (size_t)fVar7;\n    }" { (expression_statement "candidate = (size_t)fVar7;" (assignment_expression "candidate = (size_t)fVar7" identifier = (cast_expression "(size_t)fVar7" ( (type_descriptor "size_t" primitive_type) ) identifier)) ;) }))) }) (else_clause "else {\n    pHVar1->tuning = tuning;\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var,_Var4) == 0) goto LAB_00021104;\n    if (tuning->is_n_buckets == false) {\n      fVar7 = tuning->growth_threshold;\n      goto LAB_00021174;\n    }\n  }" else (compound_statement "{\n    pHVar1->tuning = tuning;\n    _Var4 = check_tuning((Hash_table *)&pHVar1->tuning);\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (CONCAT31(extraout_var,_Var4) == 0) goto LAB_00021104;\n    if (tuning->is_n_buckets == false) {\n      fVar7 = tuning->growth_threshold;\n      goto LAB_00021174;\n    }\n  }" { (expression_statement "pHVar1->tuning = tuning;" (assignment_expression "pHVar1->tuning = tuning" (field_expression "pHVar1->tuning" identifier -> field_identifier) = identifier) ;) (expression_statement "_Var4 = check_tuning((Hash_table *)&pHVar1->tuning);" (assignment_expression "_Var4 = check_tuning((Hash_table *)&pHVar1->tuning)" identifier = (call_expression "check_tuning((Hash_table *)&pHVar1->tuning)" identifier (argument_list "((Hash_table *)&pHVar1->tuning)" ( (cast_expression "(Hash_table *)&pHVar1->tuning" ( (type_descriptor "Hash_table *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pHVar1->tuning" & (field_expression "pHVar1->tuning" identifier -> field_identifier))) )))) ;) (expression_statement "pcVar5 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar5 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (CONCAT31(extraout_var,_Var4) == 0) goto LAB_00021104;" if (parenthesized_expression "(CONCAT31(extraout_var,_Var4) == 0)" ( (binary_expression "CONCAT31(extraout_var,_Var4) == 0" (call_expression "CONCAT31(extraout_var,_Var4)" identifier (argument_list "(extraout_var,_Var4)" ( identifier , identifier ))) == number_literal) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (if_statement "if (tuning->is_n_buckets == false) {\n      fVar7 = tuning->growth_threshold;\n      goto LAB_00021174;\n    }" if (parenthesized_expression "(tuning->is_n_buckets == false)" ( (binary_expression "tuning->is_n_buckets == false" (field_expression "tuning->is_n_buckets" identifier -> field_identifier) == false) )) (compound_statement "{\n      fVar7 = tuning->growth_threshold;\n      goto LAB_00021174;\n    }" { (expression_statement "fVar7 = tuning->growth_threshold;" (assignment_expression "fVar7 = tuning->growth_threshold" identifier = (field_expression "tuning->growth_threshold" identifier -> field_identifier)) ;) (goto_statement "goto LAB_00021174;" goto statement_identifier ;) })) }))) (expression_statement "sVar2 = next_prime(candidate);" (assignment_expression "sVar2 = next_prime(candidate)" identifier = (call_expression "next_prime(candidate)" identifier (argument_list "(candidate)" ( identifier )))) ;) (expression_statement "pcVar5 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar5 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (((-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0)) && (pHVar1->n_buckets = sVar2, sVar2 != 0))\n  {\n    phVar3 = (hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8);\n    pHVar1->bucket = phVar3;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (phVar3 != (hash_entry *)0x0) {\n      pHVar1->hasher = hasher;\n      pHVar1->comparator = comparator;\n      pHVar1->bucket_limit = phVar3 + sVar2;\n      pHVar1->data_freer = data_freer;\n      pHVar1->n_buckets_used = 0;\n      pHVar1->n_entries = 0;\n      pHVar1->free_entry_list = (hash_entry *)0x0;\n      return pHVar1;\n    }\n  }" if (parenthesized_expression "(((-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0)) && (pHVar1->n_buckets = sVar2, sVar2 != 0))" ( (binary_expression "((-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0)) && (pHVar1->n_buckets = sVar2, sVar2 != 0)" (parenthesized_expression "((-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0))" ( (binary_expression "(-1 < (int)(sVar2 << 2)) && (sVar2 >> 0x1e == 0)" (parenthesized_expression "(-1 < (int)(sVar2 << 2))" ( (binary_expression "-1 < (int)(sVar2 << 2)" number_literal < (cast_expression "(int)(sVar2 << 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(sVar2 << 2)" ( (binary_expression "sVar2 << 2" identifier << number_literal) )))) )) && (parenthesized_expression "(sVar2 >> 0x1e == 0)" ( (binary_expression "sVar2 >> 0x1e == 0" (binary_expression "sVar2 >> 0x1e" identifier >> number_literal) == number_literal) ))) )) && (parenthesized_expression "(pHVar1->n_buckets = sVar2, sVar2 != 0)" ( (comma_expression "pHVar1->n_buckets = sVar2, sVar2 != 0" (assignment_expression "pHVar1->n_buckets = sVar2" (field_expression "pHVar1->n_buckets" identifier -> field_identifier) = identifier) , (binary_expression "sVar2 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    phVar3 = (hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8);\n    pHVar1->bucket = phVar3;\n    pcVar5 = (code *)PTR_free_000466a8;\n    if (phVar3 != (hash_entry *)0x0) {\n      pHVar1->hasher = hasher;\n      pHVar1->comparator = comparator;\n      pHVar1->bucket_limit = phVar3 + sVar2;\n      pHVar1->data_freer = data_freer;\n      pHVar1->n_buckets_used = 0;\n      pHVar1->n_entries = 0;\n      pHVar1->free_entry_list = (hash_entry *)0x0;\n      return pHVar1;\n    }\n  }" { (expression_statement "phVar3 = (hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8);" (assignment_expression "phVar3 = (hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8)" identifier = (cast_expression "(hash_entry *)(*(code *)PTR_calloc_0004645c)(sVar2,8)" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_calloc_0004645c)(sVar2,8)" (parenthesized_expression "(*(code *)PTR_calloc_0004645c)" ( (pointer_expression "*(code *)PTR_calloc_0004645c" * (cast_expression "(code *)PTR_calloc_0004645c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(sVar2,8)" ( identifier , number_literal ))))) ;) (expression_statement "pHVar1->bucket = phVar3;" (assignment_expression "pHVar1->bucket = phVar3" (field_expression "pHVar1->bucket" identifier -> field_identifier) = identifier) ;) (expression_statement "pcVar5 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar5 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (phVar3 != (hash_entry *)0x0) {\n      pHVar1->hasher = hasher;\n      pHVar1->comparator = comparator;\n      pHVar1->bucket_limit = phVar3 + sVar2;\n      pHVar1->data_freer = data_freer;\n      pHVar1->n_buckets_used = 0;\n      pHVar1->n_entries = 0;\n      pHVar1->free_entry_list = (hash_entry *)0x0;\n      return pHVar1;\n    }" if (parenthesized_expression "(phVar3 != (hash_entry *)0x0)" ( (binary_expression "phVar3 != (hash_entry *)0x0" identifier != (cast_expression "(hash_entry *)0x0" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pHVar1->hasher = hasher;\n      pHVar1->comparator = comparator;\n      pHVar1->bucket_limit = phVar3 + sVar2;\n      pHVar1->data_freer = data_freer;\n      pHVar1->n_buckets_used = 0;\n      pHVar1->n_entries = 0;\n      pHVar1->free_entry_list = (hash_entry *)0x0;\n      return pHVar1;\n    }" { (expression_statement "pHVar1->hasher = hasher;" (assignment_expression "pHVar1->hasher = hasher" (field_expression "pHVar1->hasher" identifier -> field_identifier) = identifier) ;) (expression_statement "pHVar1->comparator = comparator;" (assignment_expression "pHVar1->comparator = comparator" (field_expression "pHVar1->comparator" identifier -> field_identifier) = identifier) ;) (expression_statement "pHVar1->bucket_limit = phVar3 + sVar2;" (assignment_expression "pHVar1->bucket_limit = phVar3 + sVar2" (field_expression "pHVar1->bucket_limit" identifier -> field_identifier) = (binary_expression "phVar3 + sVar2" identifier + identifier)) ;) (expression_statement "pHVar1->data_freer = data_freer;" (assignment_expression "pHVar1->data_freer = data_freer" (field_expression "pHVar1->data_freer" identifier -> field_identifier) = identifier) ;) (expression_statement "pHVar1->n_buckets_used = 0;" (assignment_expression "pHVar1->n_buckets_used = 0" (field_expression "pHVar1->n_buckets_used" identifier -> field_identifier) = number_literal) ;) (expression_statement "pHVar1->n_entries = 0;" (assignment_expression "pHVar1->n_entries = 0" (field_expression "pHVar1->n_entries" identifier -> field_identifier) = number_literal) ;) (expression_statement "pHVar1->free_entry_list = (hash_entry *)0x0;" (assignment_expression "pHVar1->free_entry_list = (hash_entry *)0x0" (field_expression "pHVar1->free_entry_list" identifier -> field_identifier) = (cast_expression "(hash_entry *)0x0" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (return_statement "return pHVar1;" return identifier ;) })) })) (labeled_statement "LAB_00021104:\n  (*pcVar5)(pHVar1);" statement_identifier : (expression_statement "(*pcVar5)(pHVar1);" (call_expression "(*pcVar5)(pHVar1)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(pHVar1)" ( identifier ))) ;)) (return_statement "return (Hash_table *)0x0;" return (cast_expression "(Hash_table *)0x0" ( (type_descriptor "Hash_table *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "int * hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  code *pcVar4;\n  double dVar5;\n  float fVar6;\n  \n  if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }\n  if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }\n  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }\n  if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }\n  uVar3 = FUN_000204c0(param_1);\n  pcVar4 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar4)(piVar1);\n  return (int *)0x0;\n}\n\n" (function_definition "int * hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  code *pcVar4;\n  double dVar5;\n  float fVar6;\n  \n  if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }\n  if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }\n  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }\n  if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }\n  uVar3 = FUN_000204c0(param_1);\n  pcVar4 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar4)(piVar1);\n  return (int *)0x0;\n}" primitive_type (pointer_declarator "* hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" * (function_declarator "hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" identifier (parameter_list "(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int param_5" primitive_type identifier) )))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  code *pcVar4;\n  double dVar5;\n  float fVar6;\n  \n  if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }\n  if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }\n  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }\n  if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }\n  uVar3 = FUN_000204c0(param_1);\n  pcVar4 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar4)(piVar1);\n  return (int *)0x0;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "double dVar5;" primitive_type identifier ;) (declaration "float fVar6;" primitive_type identifier ;) (if_statement "if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }" if (parenthesized_expression "(param_3 == (undefined *)0x0)" ( (binary_expression "param_3 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }" { (expression_statement "param_3 = PTR_LAB_00046280 + 0x568;" (assignment_expression "param_3 = PTR_LAB_00046280 + 0x568" identifier = (binary_expression "PTR_LAB_00046280 + 0x568" identifier + number_literal)) ;) })) (if_statement "if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }" if (parenthesized_expression "(param_4 == (undefined *)0x0)" ( (binary_expression "param_4 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }" { (expression_statement "param_4 = PTR_LAB_00046280 + 0x57c;" (assignment_expression "param_4 = PTR_LAB_00046280 + 0x57c" identifier = (binary_expression "PTR_LAB_00046280 + 0x57c" identifier + number_literal)) ;) })) (expression_statement "piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);" (assignment_expression "piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28)" identifier = (cast_expression "(int *)(*(code *)PTR_malloc_000465f0)(0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_000465f0)(0x28)" (parenthesized_expression "(*(code *)PTR_malloc_000465f0)" ( (pointer_expression "*(code *)PTR_malloc_000465f0" * (cast_expression "(code *)PTR_malloc_000465f0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x28)" ( number_literal ))))) ;) (if_statement "if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }" if (parenthesized_expression "(piVar1 == (int *)0x0)" ( (binary_expression "piVar1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (int *)0x0;\n  }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }" { (expression_statement "piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);" (assignment_expression "piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50)" (subscript_expression "piVar1[5]" identifier [ number_literal ]) = (cast_expression "(int)(PTR_LAB_00046148 + 0x3e50)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e50)" ( (binary_expression "PTR_LAB_00046148 + 0x3e50" identifier + number_literal) )))) ;) (expression_statement "iVar2 = FUN_00020738(piVar1 + 5);" (assignment_expression "iVar2 = FUN_00020738(piVar1 + 5)" identifier = (call_expression "FUN_00020738(piVar1 + 5)" identifier (argument_list "(piVar1 + 5)" ( (binary_expression "piVar1 + 5" identifier + number_literal) )))) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (iVar2 == 0) goto LAB_00021104;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (expression_statement "fVar6 = *(float *)(PTR_LAB_00046148 + 16000);" (assignment_expression "fVar6 = *(float *)(PTR_LAB_00046148 + 16000)" identifier = (pointer_expression "*(float *)(PTR_LAB_00046148 + 16000)" * (cast_expression "(float *)(PTR_LAB_00046148 + 16000)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 16000)" ( (binary_expression "PTR_LAB_00046148 + 16000" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00021174:\n    dVar5 = (double)(int)param_1;" statement_identifier : (expression_statement "dVar5 = (double)(int)param_1;" (assignment_expression "dVar5 = (double)(int)param_1" identifier = (cast_expression "(double)(int)param_1" ( (type_descriptor "double" primitive_type) ) (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier))) ;)) (if_statement "if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }" if (parenthesized_expression "((int)param_1 < 0)" ( (binary_expression "(int)param_1 < 0" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }" { (expression_statement "dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);" (assignment_expression "dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90)" identifier = (binary_expression "dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90)" identifier + (pointer_expression "*(double *)(PTR_LAB_00046148 + 0x3e90)" * (cast_expression "(double *)(PTR_LAB_00046148 + 0x3e90)" ( (type_descriptor "double *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e90)" ( (binary_expression "PTR_LAB_00046148 + 0x3e90" identifier + number_literal) )))))) ;) })) (expression_statement "fVar6 = (float)dVar5 / fVar6;" (assignment_expression "fVar6 = (float)dVar5 / fVar6" identifier = (binary_expression "(float)dVar5 / fVar6" (cast_expression "(float)dVar5" ( (type_descriptor "float" primitive_type) ) identifier) / identifier)) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;" if (parenthesized_expression "(*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6)" ( (binary_expression "*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6" (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e88)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e88)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e88)" ( (binary_expression "PTR_LAB_00046148 + 0x3e88" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (if_statement "if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }" if (parenthesized_expression "(*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6)" ( (binary_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6" (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e8c)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e8c)" ( (binary_expression "PTR_LAB_00046148 + 0x3e8c" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }" { (expression_statement "param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;" (assignment_expression "param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000" identifier = (binary_expression "(int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000" (cast_expression "(int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c))" ( (binary_expression "fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)" identifier - (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c)" * (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e8c)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_00046148 + 0x3e8c)" ( (binary_expression "PTR_LAB_00046148 + 0x3e8c" identifier + number_literal) ))))) ))) | number_literal)) ;) }) (else_clause "else {\n      param_1 = (uint)fVar6;\n    }" else (compound_statement "{\n      param_1 = (uint)fVar6;\n    }" { (expression_statement "param_1 = (uint)fVar6;" (assignment_expression "param_1 = (uint)fVar6" identifier = (cast_expression "(uint)fVar6" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) }))) }) (else_clause "else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" else (compound_statement "{\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" { (expression_statement "piVar1[5] = param_2;" (assignment_expression "piVar1[5] = param_2" (subscript_expression "piVar1[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar2 = FUN_00020738(piVar1 + 5);" (assignment_expression "iVar2 = FUN_00020738(piVar1 + 5)" identifier = (call_expression "FUN_00020738(piVar1 + 5)" identifier (argument_list "(piVar1 + 5)" ( (binary_expression "piVar1 + 5" identifier + number_literal) )))) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (iVar2 == 0) goto LAB_00021104;" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00021104;" goto statement_identifier ;)) (if_statement "if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }" if (parenthesized_expression "(*(char *)(param_2 + 0x10) == '\0')" ( (binary_expression "*(char *)(param_2 + 0x10) == '\0'" (pointer_expression "*(char *)(param_2 + 0x10)" * (cast_expression "(char *)(param_2 + 0x10)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }" { (expression_statement "fVar6 = *(float *)(param_2 + 8);" (assignment_expression "fVar6 = *(float *)(param_2 + 8)" identifier = (pointer_expression "*(float *)(param_2 + 8)" * (cast_expression "(float *)(param_2 + 8)" ( (type_descriptor "float *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) (goto_statement "goto LAB_00021174;" goto statement_identifier ;) })) }))) (expression_statement "uVar3 = FUN_000204c0(param_1);" (assignment_expression "uVar3 = FUN_000204c0(param_1)" identifier = (call_expression "FUN_000204c0(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }" if (parenthesized_expression "(((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0))" ( (binary_expression "((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)" (parenthesized_expression "((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0))" ( (binary_expression "(-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)" (parenthesized_expression "(-1 < (int)(uVar3 << 2))" ( (binary_expression "-1 < (int)(uVar3 << 2)" number_literal < (cast_expression "(int)(uVar3 << 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar3 << 2)" ( (binary_expression "uVar3 << 2" identifier << number_literal) )))) )) && (parenthesized_expression "(uVar3 >> 0x1e == 0)" ( (binary_expression "uVar3 >> 0x1e == 0" (binary_expression "uVar3 >> 0x1e" identifier >> number_literal) == number_literal) ))) )) && (parenthesized_expression "(piVar1[2] = uVar3, uVar3 != 0)" ( (comma_expression "piVar1[2] = uVar3, uVar3 != 0" (assignment_expression "piVar1[2] = uVar3" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = identifier) , (binary_expression "uVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }" { (expression_statement "iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);" (assignment_expression "iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8)" identifier = (call_expression "(*(code *)PTR_calloc_0004645c)(uVar3,8)" (parenthesized_expression "(*(code *)PTR_calloc_0004645c)" ( (pointer_expression "*(code *)PTR_calloc_0004645c" * (cast_expression "(code *)PTR_calloc_0004645c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar3,8)" ( identifier , number_literal )))) ;) (expression_statement "*piVar1 = iVar2;" (assignment_expression "*piVar1 = iVar2" (pointer_expression "*piVar1" * identifier) = identifier) ;) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" identifier = (cast_expression "(code *)PTR_free_000466a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }" { (expression_statement "piVar1[6] = (int)param_3;" (assignment_expression "piVar1[6] = (int)param_3" (subscript_expression "piVar1[6]" identifier [ number_literal ]) = (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar1[7] = (int)param_4;" (assignment_expression "piVar1[7] = (int)param_4" (subscript_expression "piVar1[7]" identifier [ number_literal ]) = (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar1[1] = iVar2 + uVar3 * 8;" (assignment_expression "piVar1[1] = iVar2 + uVar3 * 8" (subscript_expression "piVar1[1]" identifier [ number_literal ]) = (binary_expression "iVar2 + uVar3 * 8" identifier + (binary_expression "uVar3 * 8" identifier * number_literal))) ;) (expression_statement "piVar1[8] = param_5;" (assignment_expression "piVar1[8] = param_5" (subscript_expression "piVar1[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar1[3] = 0;" (assignment_expression "piVar1[3] = 0" (subscript_expression "piVar1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar1[4] = 0;" (assignment_expression "piVar1[4] = 0" (subscript_expression "piVar1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar1[9] = 0;" (assignment_expression "piVar1[9] = 0" (subscript_expression "piVar1[9]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return piVar1;" return identifier ;) })) })) (labeled_statement "LAB_00021104:\n  (*pcVar4)(piVar1);" statement_identifier : (expression_statement "(*pcVar4)(piVar1);" (call_expression "(*pcVar4)(piVar1)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(piVar1)" ( identifier ))) ;)) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE 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 = (binary_expression IDENT + 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 = (binary_expression IDENT + LIT)) ;) })) (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 { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) | LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT << LIT) )))) )) && (parenthesized_expression ( (binary_expression (binary_expression IDENT >> LIT) == LIT) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return IDENT ;) })) })) (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT ))) ;)) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "int * hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)\n\n{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  code *pcVar4;\n  double dVar5;\n  float fVar6;\n  \n  if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }\n  if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }\n  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }\n  if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }\n  uVar3 = FUN_000204c0(param_1);\n  pcVar4 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar4)(piVar1);\n  return (int *)0x0;\n}" (primitive_type "int") (pointer_declarator "* hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" (* "*") (function_declarator "hash_initialize(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" (identifier "hash_initialize") (parameter_list "(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "undefined *param_3" (type_identifier "undefined") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined *param_4" (type_identifier "undefined") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")")))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  uint uVar3;\n  code *pcVar4;\n  double dVar5;\n  float fVar6;\n  \n  if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }\n  if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }\n  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);\n  if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }\n  if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }\n  uVar3 = FUN_000204c0(param_1);\n  pcVar4 = (code *)PTR_free_000466a8;\n  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }\nLAB_00021104:\n  (*pcVar4)(piVar1);\n  return (int *)0x0;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "code *pcVar4;" (type_identifier "code") (pointer_declarator "*pcVar4" (* "*") (identifier "pcVar4")) (; ";")) (declaration "double dVar5;" (primitive_type "double") (identifier "dVar5") (; ";")) (declaration "float fVar6;" (primitive_type "float") (identifier "fVar6") (; ";")) (if_statement "if (param_3 == (undefined *)0x0) {\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }" (if "if") (parenthesized_expression "(param_3 == (undefined *)0x0)" (( "(") (binary_expression "param_3 == (undefined *)0x0" (identifier "param_3") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    param_3 = PTR_LAB_00046280 + 0x568;\n  }" ({ "{") (expression_statement "param_3 = PTR_LAB_00046280 + 0x568;" (assignment_expression "param_3 = PTR_LAB_00046280 + 0x568" (identifier "param_3") (= "=") (binary_expression "PTR_LAB_00046280 + 0x568" (identifier "PTR_LAB_00046280") (+ "+") (number_literal "0x568"))) (; ";")) (} "}"))) (if_statement "if (param_4 == (undefined *)0x0) {\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }" (if "if") (parenthesized_expression "(param_4 == (undefined *)0x0)" (( "(") (binary_expression "param_4 == (undefined *)0x0" (identifier "param_4") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    param_4 = PTR_LAB_00046280 + 0x57c;\n  }" ({ "{") (expression_statement "param_4 = PTR_LAB_00046280 + 0x57c;" (assignment_expression "param_4 = PTR_LAB_00046280 + 0x57c" (identifier "param_4") (= "=") (binary_expression "PTR_LAB_00046280 + 0x57c" (identifier "PTR_LAB_00046280") (+ "+") (number_literal "0x57c"))) (; ";")) (} "}"))) (expression_statement "piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);" (assignment_expression "piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28)" (identifier "piVar1") (= "=") (cast_expression "(int *)(*(code *)PTR_malloc_000465f0)(0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_malloc_000465f0)(0x28)" (parenthesized_expression "(*(code *)PTR_malloc_000465f0)" (( "(") (pointer_expression "*(code *)PTR_malloc_000465f0" (* "*") (cast_expression "(code *)PTR_malloc_000465f0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_malloc_000465f0"))) () ")")) (argument_list "(0x28)" (( "(") (number_literal "0x28") () ")"))))) (; ";")) (if_statement "if (piVar1 == (int *)0x0) {\n    return (int *)0x0;\n  }" (if "if") (parenthesized_expression "(piVar1 == (int *)0x0)" (( "(") (binary_expression "piVar1 == (int *)0x0" (identifier "piVar1") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return (int *)0x0;\n  }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (if_statement "if (param_2 == 0) {\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }\n  else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);\nLAB_00021174:\n    dVar5 = (double)(int)param_1;\n    if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }\n    fVar6 = (float)dVar5 / fVar6;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;\n    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }\n  }" ({ "{") (expression_statement "piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);" (assignment_expression "piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50)" (subscript_expression "piVar1[5]" (identifier "piVar1") ([ "[") (number_literal "5") (] "]")) (= "=") (cast_expression "(int)(PTR_LAB_00046148 + 0x3e50)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(PTR_LAB_00046148 + 0x3e50)" (( "(") (binary_expression "PTR_LAB_00046148 + 0x3e50" (identifier "PTR_LAB_00046148") (+ "+") (number_literal "0x3e50")) () ")")))) (; ";")) (expression_statement "iVar2 = FUN_00020738(piVar1 + 5);" (assignment_expression "iVar2 = FUN_00020738(piVar1 + 5)" (identifier "iVar2") (= "=") (call_expression "FUN_00020738(piVar1 + 5)" (identifier "FUN_00020738") (argument_list "(piVar1 + 5)" (( "(") (binary_expression "piVar1 + 5" (identifier "piVar1") (+ "+") (number_literal "5")) () ")")))) (; ";")) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" (identifier "pcVar4") (= "=") (cast_expression "(code *)PTR_free_000466a8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_000466a8"))) (; ";")) (if_statement "if (iVar2 == 0) goto LAB_00021104;" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00021104;" (goto "goto") (statement_identifier "LAB_00021104") (; ";"))) (expression_statement "fVar6 = *(float *)(PTR_LAB_00046148 + 16000);" (assignment_expression "fVar6 = *(float *)(PTR_LAB_00046148 + 16000)" (identifier "fVar6") (= "=") (pointer_expression "*(float *)(PTR_LAB_00046148 + 16000)" (* "*") (cast_expression "(float *)(PTR_LAB_00046148 + 16000)" (( "(") (type_descriptor "float *" (primitive_type "float") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_00046148 + 16000)" (( "(") (binary_expression "PTR_LAB_00046148 + 16000" (identifier "PTR_LAB_00046148") (+ "+") (number_literal "16000")) () ")"))))) (; ";")) (labeled_statement "LAB_00021174:\n    dVar5 = (double)(int)param_1;" (statement_identifier "LAB_00021174") (: ":") (expression_statement "dVar5 = (double)(int)param_1;" (assignment_expression "dVar5 = (double)(int)param_1" (identifier "dVar5") (= "=") (cast_expression "(double)(int)param_1" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")))) (; ";"))) (if_statement "if ((int)param_1 < 0) {\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }" (if "if") (parenthesized_expression "((int)param_1 < 0)" (( "(") (binary_expression "(int)param_1 < 0" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);\n    }" ({ "{") (expression_statement "dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);" (assignment_expression "dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90)" (identifier "dVar5") (= "=") (binary_expression "dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90)" (identifier "dVar5") (+ "+") (pointer_expression "*(double *)(PTR_LAB_00046148 + 0x3e90)" (* "*") (cast_expression "(double *)(PTR_LAB_00046148 + 0x3e90)" (( "(") (type_descriptor "double *" (primitive_type "double") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_00046148 + 0x3e90)" (( "(") (binary_expression "PTR_LAB_00046148 + 0x3e90" (identifier "PTR_LAB_00046148") (+ "+") (number_literal "0x3e90")) () ")")))))) (; ";")) (} "}"))) (expression_statement "fVar6 = (float)dVar5 / fVar6;" (assignment_expression "fVar6 = (float)dVar5 / fVar6" (identifier "fVar6") (= "=") (binary_expression "(float)dVar5 / fVar6" (cast_expression "(float)dVar5" (( "(") (type_descriptor "float" (primitive_type "float")) () ")") (identifier "dVar5")) (/ "/") (identifier "fVar6"))) (; ";")) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" (identifier "pcVar4") (= "=") (cast_expression "(code *)PTR_free_000466a8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_000466a8"))) (; ";")) (if_statement "if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;" (if "if") (parenthesized_expression "(*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6)" (( "(") (binary_expression "*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6" (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e88)" (* "*") (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e88)" (( "(") (type_descriptor "float *" (primitive_type "float") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_00046148 + 0x3e88)" (( "(") (binary_expression "PTR_LAB_00046148 + 0x3e88" (identifier "PTR_LAB_00046148") (+ "+") (number_literal "0x3e88")) () ")")))) (<= "<=") (identifier "fVar6")) () ")")) (goto_statement "goto LAB_00021104;" (goto "goto") (statement_identifier "LAB_00021104") (; ";"))) (if_statement "if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }\n    else {\n      param_1 = (uint)fVar6;\n    }" (if "if") (parenthesized_expression "(*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6)" (( "(") (binary_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6" (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c)" (* "*") (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e8c)" (( "(") (type_descriptor "float *" (primitive_type "float") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_00046148 + 0x3e8c)" (( "(") (binary_expression "PTR_LAB_00046148 + 0x3e8c" (identifier "PTR_LAB_00046148") (+ "+") (number_literal "0x3e8c")) () ")")))) (<= "<=") (identifier "fVar6")) () ")")) (compound_statement "{\n      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;\n    }" ({ "{") (expression_statement "param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;" (assignment_expression "param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000" (identifier "param_1") (= "=") (binary_expression "(int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000" (cast_expression "(int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c))" (( "(") (binary_expression "fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)" (identifier "fVar6") (- "-") (pointer_expression "*(float *)(PTR_LAB_00046148 + 0x3e8c)" (* "*") (cast_expression "(float *)(PTR_LAB_00046148 + 0x3e8c)" (( "(") (type_descriptor "float *" (primitive_type "float") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_00046148 + 0x3e8c)" (( "(") (binary_expression "PTR_LAB_00046148 + 0x3e8c" (identifier "PTR_LAB_00046148") (+ "+") (number_literal "0x3e8c")) () ")"))))) () ")"))) (| "|") (number_literal "0x80000000"))) (; ";")) (} "}")) (else_clause "else {\n      param_1 = (uint)fVar6;\n    }" (else "else") (compound_statement "{\n      param_1 = (uint)fVar6;\n    }" ({ "{") (expression_statement "param_1 = (uint)fVar6;" (assignment_expression "param_1 = (uint)fVar6" (identifier "param_1") (= "=") (cast_expression "(uint)fVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "fVar6"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" (else "else") (compound_statement "{\n    piVar1[5] = param_2;\n    iVar2 = FUN_00020738(piVar1 + 5);\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 == 0) goto LAB_00021104;\n    if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }\n  }" ({ "{") (expression_statement "piVar1[5] = param_2;" (assignment_expression "piVar1[5] = param_2" (subscript_expression "piVar1[5]" (identifier "piVar1") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "iVar2 = FUN_00020738(piVar1 + 5);" (assignment_expression "iVar2 = FUN_00020738(piVar1 + 5)" (identifier "iVar2") (= "=") (call_expression "FUN_00020738(piVar1 + 5)" (identifier "FUN_00020738") (argument_list "(piVar1 + 5)" (( "(") (binary_expression "piVar1 + 5" (identifier "piVar1") (+ "+") (number_literal "5")) () ")")))) (; ";")) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" (identifier "pcVar4") (= "=") (cast_expression "(code *)PTR_free_000466a8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_000466a8"))) (; ";")) (if_statement "if (iVar2 == 0) goto LAB_00021104;" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00021104;" (goto "goto") (statement_identifier "LAB_00021104") (; ";"))) (if_statement "if (*(char *)(param_2 + 0x10) == '\0') {\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }" (if "if") (parenthesized_expression "(*(char *)(param_2 + 0x10) == '\0')" (( "(") (binary_expression "*(char *)(param_2 + 0x10) == '\0'" (pointer_expression "*(char *)(param_2 + 0x10)" (* "*") (cast_expression "(char *)(param_2 + 0x10)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      fVar6 = *(float *)(param_2 + 8);\n      goto LAB_00021174;\n    }" ({ "{") (expression_statement "fVar6 = *(float *)(param_2 + 8);" (assignment_expression "fVar6 = *(float *)(param_2 + 8)" (identifier "fVar6") (= "=") (pointer_expression "*(float *)(param_2 + 8)" (* "*") (cast_expression "(float *)(param_2 + 8)" (( "(") (type_descriptor "float *" (primitive_type "float") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (goto_statement "goto LAB_00021174;" (goto "goto") (statement_identifier "LAB_00021174") (; ";")) (} "}"))) (} "}")))) (expression_statement "uVar3 = FUN_000204c0(param_1);" (assignment_expression "uVar3 = FUN_000204c0(param_1)" (identifier "uVar3") (= "=") (call_expression "FUN_000204c0(param_1)" (identifier "FUN_000204c0") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" (identifier "pcVar4") (= "=") (cast_expression "(code *)PTR_free_000466a8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_000466a8"))) (; ";")) (if_statement "if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }" (if "if") (parenthesized_expression "(((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0))" (( "(") (binary_expression "((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)" (parenthesized_expression "((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0))" (( "(") (binary_expression "(-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)" (parenthesized_expression "(-1 < (int)(uVar3 << 2))" (( "(") (binary_expression "-1 < (int)(uVar3 << 2)" (number_literal "-1") (< "<") (cast_expression "(int)(uVar3 << 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar3 << 2)" (( "(") (binary_expression "uVar3 << 2" (identifier "uVar3") (<< "<<") (number_literal "2")) () ")")))) () ")")) (&& "&&") (parenthesized_expression "(uVar3 >> 0x1e == 0)" (( "(") (binary_expression "uVar3 >> 0x1e == 0" (binary_expression "uVar3 >> 0x1e" (identifier "uVar3") (>> ">>") (number_literal "0x1e")) (== "==") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(piVar1[2] = uVar3, uVar3 != 0)" (( "(") (comma_expression "piVar1[2] = uVar3, uVar3 != 0" (assignment_expression "piVar1[2] = uVar3" (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar3")) (, ",") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);\n    *piVar1 = iVar2;\n    pcVar4 = (code *)PTR_free_000466a8;\n    if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }\n  }" ({ "{") (expression_statement "iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);" (assignment_expression "iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8)" (identifier "iVar2") (= "=") (call_expression "(*(code *)PTR_calloc_0004645c)(uVar3,8)" (parenthesized_expression "(*(code *)PTR_calloc_0004645c)" (( "(") (pointer_expression "*(code *)PTR_calloc_0004645c" (* "*") (cast_expression "(code *)PTR_calloc_0004645c" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_calloc_0004645c"))) () ")")) (argument_list "(uVar3,8)" (( "(") (identifier "uVar3") (, ",") (number_literal "8") () ")")))) (; ";")) (expression_statement "*piVar1 = iVar2;" (assignment_expression "*piVar1 = iVar2" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "pcVar4 = (code *)PTR_free_000466a8;" (assignment_expression "pcVar4 = (code *)PTR_free_000466a8" (identifier "pcVar4") (= "=") (cast_expression "(code *)PTR_free_000466a8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_000466a8"))) (; ";")) (if_statement "if (iVar2 != 0) {\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      piVar1[6] = (int)param_3;\n      piVar1[7] = (int)param_4;\n      piVar1[1] = iVar2 + uVar3 * 8;\n      piVar1[8] = param_5;\n      piVar1[3] = 0;\n      piVar1[4] = 0;\n      piVar1[9] = 0;\n      return piVar1;\n    }" ({ "{") (expression_statement "piVar1[6] = (int)param_3;" (assignment_expression "piVar1[6] = (int)param_3" (subscript_expression "piVar1[6]" (identifier "piVar1") ([ "[") (number_literal "6") (] "]")) (= "=") (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3"))) (; ";")) (expression_statement "piVar1[7] = (int)param_4;" (assignment_expression "piVar1[7] = (int)param_4" (subscript_expression "piVar1[7]" (identifier "piVar1") ([ "[") (number_literal "7") (] "]")) (= "=") (cast_expression "(int)param_4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_4"))) (; ";")) (expression_statement "piVar1[1] = iVar2 + uVar3 * 8;" (assignment_expression "piVar1[1] = iVar2 + uVar3 * 8" (subscript_expression "piVar1[1]" (identifier "piVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "iVar2 + uVar3 * 8" (identifier "iVar2") (+ "+") (binary_expression "uVar3 * 8" (identifier "uVar3") (* "*") (number_literal "8")))) (; ";")) (expression_statement "piVar1[8] = param_5;" (assignment_expression "piVar1[8] = param_5" (subscript_expression "piVar1[8]" (identifier "piVar1") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "param_5")) (; ";")) (expression_statement "piVar1[3] = 0;" (assignment_expression "piVar1[3] = 0" (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar1[4] = 0;" (assignment_expression "piVar1[4] = 0" (subscript_expression "piVar1[4]" (identifier "piVar1") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar1[9] = 0;" (assignment_expression "piVar1[9] = 0" (subscript_expression "piVar1[9]" (identifier "piVar1") ([ "[") (number_literal "9") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return piVar1;" (return "return") (identifier "piVar1") (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_00021104:\n  (*pcVar4)(piVar1);" (statement_identifier "LAB_00021104") (: ":") (expression_statement "(*pcVar4)(piVar1);" (call_expression "(*pcVar4)(piVar1)" (parenthesized_expression "(*pcVar4)" (( "(") (pointer_expression "*pcVar4" (* "*") (identifier "pcVar4")) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")"))) (; ";"))) (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (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: (binary_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) 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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (goto_statement label: (statement_identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))) 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: (identifier)))) arguments: (argument_list (identifier) (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (binary_expression left: (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: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (return_statement (identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier))))) (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))))

int * MASKED(uint param_1,int param_2,undefined *param_3,undefined *param_4,int param_5)

{
  int *piVar1;
  int iVar2;
  uint uVar3;
  code *pcVar4;
  double dVar5;
  float fVar6;
  
  if (param_3 == (undefined *)0x0) {
    param_3 = PTR_LAB_00046280 + 0x568;
  }
  if (param_4 == (undefined *)0x0) {
    param_4 = PTR_LAB_00046280 + 0x57c;
  }
  piVar1 = (int *)(*(code *)PTR_malloc_000465f0)(0x28);
  if (piVar1 == (int *)0x0) {
    return (int *)0x0;
  }
  if (param_2 == 0) {
    piVar1[5] = (int)(PTR_LAB_00046148 + 0x3e50);
    iVar2 = FUN_00020738(piVar1 + 5);
    pcVar4 = (code *)PTR_free_000466a8;
    if (iVar2 == 0) goto LAB_00021104;
    fVar6 = *(float *)(PTR_LAB_00046148 + 16000);
LAB_00021174:
    dVar5 = (double)(int)param_1;
    if ((int)param_1 < 0) {
      dVar5 = dVar5 + *(double *)(PTR_LAB_00046148 + 0x3e90);
    }
    fVar6 = (float)dVar5 / fVar6;
    pcVar4 = (code *)PTR_free_000466a8;
    if (*(float *)(PTR_LAB_00046148 + 0x3e88) <= fVar6) goto LAB_00021104;
    if (*(float *)(PTR_LAB_00046148 + 0x3e8c) <= fVar6) {
      param_1 = (int)(fVar6 - *(float *)(PTR_LAB_00046148 + 0x3e8c)) | 0x80000000;
    }
    else {
      param_1 = (uint)fVar6;
    }
  }
  else {
    piVar1[5] = param_2;
    iVar2 = FUN_00020738(piVar1 + 5);
    pcVar4 = (code *)PTR_free_000466a8;
    if (iVar2 == 0) goto LAB_00021104;
    if (*(char *)(param_2 + 0x10) == '\0') {
      fVar6 = *(float *)(param_2 + 8);
      goto LAB_00021174;
    }
  }
  uVar3 = FUN_000204c0(param_1);
  pcVar4 = (code *)PTR_free_000466a8;
  if (((-1 < (int)(uVar3 << 2)) && (uVar3 >> 0x1e == 0)) && (piVar1[2] = uVar3, uVar3 != 0)) {
    iVar2 = (*(code *)PTR_calloc_0004645c)(uVar3,8);
    *piVar1 = iVar2;
    pcVar4 = (code *)PTR_free_000466a8;
    if (iVar2 != 0) {
      piVar1[6] = (int)param_3;
      piVar1[7] = (int)param_4;
      piVar1[1] = iVar2 + uVar3 * 8;
      piVar1[8] = param_5;
      piVar1[3] = 0;
      piVar1[4] = 0;
      piVar1[9] = 0;
      return piVar1;
    }
  }
LAB_00021104:
  (*pcVar4)(piVar1);
  return (int *)0x0;
}

