
/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */
/* WARNING: Unknown calling convention */

Bignum_conflict biggcd(Bignum_conflict av,Bignum_conflict bv)

{
  BignumInt BVar1;
  Bignum_conflict p;
  Bignum_conflict result;
  int iVar2;
  uint uVar3;
  Bignum_conflict a;
  
  p = copybn(av);
  result = copybn(bv);
  do {
    a = result;
    iVar2 = bignum_cmp(a,Zero);
    if (iVar2 == 0) {
      freebn(a);
      return p;
    }
    result = newbn(*a);
    bigdivmod(p,a,result,(Bignum_conflict)0x0);
    uVar3 = *result;
    if (1 < uVar3) {
      BVar1 = result[uVar3];
      while (BVar1 == 0) {
        uVar3 = uVar3 - 1;
        *result = uVar3;
        if (uVar3 == 1) break;
        BVar1 = result[uVar3];
      }
    }
    freebn(p);
    p = a;
  } while( true );
}



uint * FUN_00042d90(undefined4 param_1,undefined4 param_2)

{
  uint uVar1;
  uint *puVar2;
  uint *puVar3;
  int iVar4;
  uint uVar5;
  int unaff_EBP;
  uint *puVar6;
  
  FUN_0003eac7();
  puVar2 = (uint *)FUN_000411a0(param_1);
  puVar3 = (uint *)FUN_000411a0(param_2);
  do {
    puVar6 = puVar3;
    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));
    if (iVar4 == 0) {
      FUN_000411f0(puVar6);
      return puVar2;
    }
    puVar3 = (uint *)FUN_000408e0();
    FUN_000406d0(0);
    uVar5 = *puVar3;
    if (1 < uVar5) {
      uVar1 = puVar3[uVar5];
      while (uVar1 == 0) {
        uVar5 = uVar5 - 1;
        *puVar3 = uVar5;
        if (uVar5 == 1) break;
        uVar1 = puVar3[uVar5];
      }
    }
    FUN_000411f0(puVar2);
    puVar2 = puVar6;
  } while( true );
}


PUSH EBP
CALL 0x0003eac7
ADD EBP,0x61fda
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x18
PUSH dword ptr [ESP + 0x2c]
CALL 0x000411a0
POP EBX
PUSH dword ptr [ESP + 0x30]
MOV EDI,EAX
CALL 0x000411a0
ADD ESP,0x10
MOV ESI,EAX
LEA ESI,[ESI]
SUB ESP,0x8
PUSH dword ptr [EBP + 0x458]
PUSH ESI
CALL 0x00041b70
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00042e30
MOV EAX,dword ptr [ESI]
CALL 0x000408e0
SUB ESP,0xc
MOV EDX,ESI
PUSH 0x0
MOV EBX,EAX
MOV ECX,EAX
MOV EAX,EDI
CALL 0x000406d0
MOV EAX,dword ptr [EBX]
ADD ESP,0x10
CMP EAX,0x1
JBE 0x00042e1a
MOV ECX,dword ptr [EBX + EAX*0x4]
TEST ECX,ECX
JNZ 0x00042e1a
SUB EAX,0x1
JMP 0x00042e13
SUB EAX,0x1
MOV EDX,dword ptr [EBX + EAX*0x4 + 0x4]
TEST EDX,EDX
JNZ 0x00042e1a
MOV dword ptr [EBX],EAX
CMP EAX,0x1
JNZ 0x00042e08
SUB ESP,0xc
PUSH EDI
MOV EDI,ESI
MOV ESI,EBX
CALL 0x000411f0
ADD ESP,0x10
JMP 0x00042dc0
SUB ESP,0xc
PUSH ESI
CALL 0x000411f0
ADD ESP,0x1c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "uint * FUN_00042d90(undefined4 param_1,undefined4 param_2)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint *puVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EBP;\n  uint *puVar6;\n  \n  FUN_0003eac7();\n  puVar2 = (uint *)FUN_000411a0(param_1);\n  puVar3 = (uint *)FUN_000411a0(param_2);\n  do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );\n}\n\n" (function_definition "uint * FUN_00042d90(undefined4 param_1,undefined4 param_2)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint *puVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EBP;\n  uint *puVar6;\n  \n  FUN_0003eac7();\n  puVar2 = (uint *)FUN_000411a0(param_1);\n  puVar3 = (uint *)FUN_000411a0(param_2);\n  do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );\n}" type_identifier (pointer_declarator "* FUN_00042d90(undefined4 param_1,undefined4 param_2)" * (function_declarator "FUN_00042d90(undefined4 param_1,undefined4 param_2)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) )))) (compound_statement "{\n  uint uVar1;\n  uint *puVar2;\n  uint *puVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EBP;\n  uint *puVar6;\n  \n  FUN_0003eac7();\n  puVar2 = (uint *)FUN_000411a0(param_1);\n  puVar3 = (uint *)FUN_000411a0(param_2);\n  do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int unaff_EBP;" primitive_type identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (expression_statement "FUN_0003eac7();" (call_expression "FUN_0003eac7()" identifier (argument_list "()" ( ))) ;) (expression_statement "puVar2 = (uint *)FUN_000411a0(param_1);" (assignment_expression "puVar2 = (uint *)FUN_000411a0(param_1)" identifier = (cast_expression "(uint *)FUN_000411a0(param_1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000411a0(param_1)" identifier (argument_list "(param_1)" ( identifier ))))) ;) (expression_statement "puVar3 = (uint *)FUN_000411a0(param_2);" (assignment_expression "puVar3 = (uint *)FUN_000411a0(param_2)" identifier = (cast_expression "(uint *)FUN_000411a0(param_2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000411a0(param_2)" identifier (argument_list "(param_2)" ( identifier ))))) ;) (do_statement "do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );" do (compound_statement "{\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  }" { (expression_statement "puVar6 = puVar3;" (assignment_expression "puVar6 = puVar3" identifier = identifier) ;) (expression_statement "iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));" (assignment_expression "iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" identifier = (call_expression "FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" identifier (argument_list "(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" ( identifier , (pointer_expression "*(undefined4 *)(unaff_EBP + 0x62432)" * (cast_expression "(undefined4 *)(unaff_EBP + 0x62432)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBP + 0x62432)" ( (binary_expression "unaff_EBP + 0x62432" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }" { (expression_statement "FUN_000411f0(puVar6);" (call_expression "FUN_000411f0(puVar6)" identifier (argument_list "(puVar6)" ( identifier ))) ;) (return_statement "return puVar2;" return identifier ;) })) (expression_statement "puVar3 = (uint *)FUN_000408e0();" (assignment_expression "puVar3 = (uint *)FUN_000408e0()" identifier = (cast_expression "(uint *)FUN_000408e0()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000408e0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "FUN_000406d0(0);" (call_expression "FUN_000406d0(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "uVar5 = *puVar3;" (assignment_expression "uVar5 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (if_statement "if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }" { (expression_statement "uVar1 = puVar3[uVar5];" (assignment_expression "uVar1 = puVar3[uVar5]" identifier = (subscript_expression "puVar3[uVar5]" identifier [ identifier ])) ;) (while_statement "while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }" while (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "*puVar3 = uVar5;" (assignment_expression "*puVar3 = uVar5" (pointer_expression "*puVar3" * identifier) = identifier) ;) (if_statement "if (uVar5 == 1) break;" if (parenthesized_expression "(uVar5 == 1)" ( (binary_expression "uVar5 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar1 = puVar3[uVar5];" (assignment_expression "uVar1 = puVar3[uVar5]" identifier = (subscript_expression "puVar3[uVar5]" identifier [ identifier ])) ;) })) })) (expression_statement "FUN_000411f0(puVar2);" (call_expression "FUN_000411f0(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "puVar2 = puVar6;" (assignment_expression "puVar2 = puVar6" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */\n/* WARNING: Unknown calling convention */\n\nBignum_conflict biggcd(Bignum_conflict av,Bignum_conflict bv)\n\n{\n  BignumInt BVar1;\n  Bignum_conflict p;\n  Bignum_conflict result;\n  int iVar2;\n  uint uVar3;\n  Bignum_conflict a;\n  \n  p = copybn(av);\n  result = copybn(bv);\n  do {\n    a = result;\n    iVar2 = bignum_cmp(a,Zero);\n    if (iVar2 == 0) {\n      freebn(a);\n      return p;\n    }\n    result = newbn(*a);\n    bigdivmod(p,a,result,(Bignum_conflict)0x0);\n    uVar3 = *result;\n    if (1 < uVar3) {\n      BVar1 = result[uVar3];\n      while (BVar1 == 0) {\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }\n    }\n    freebn(p);\n    p = a;\n  } while( true );\n}\n\n" comment comment (function_definition "Bignum_conflict biggcd(Bignum_conflict av,Bignum_conflict bv)\n\n{\n  BignumInt BVar1;\n  Bignum_conflict p;\n  Bignum_conflict result;\n  int iVar2;\n  uint uVar3;\n  Bignum_conflict a;\n  \n  p = copybn(av);\n  result = copybn(bv);\n  do {\n    a = result;\n    iVar2 = bignum_cmp(a,Zero);\n    if (iVar2 == 0) {\n      freebn(a);\n      return p;\n    }\n    result = newbn(*a);\n    bigdivmod(p,a,result,(Bignum_conflict)0x0);\n    uVar3 = *result;\n    if (1 < uVar3) {\n      BVar1 = result[uVar3];\n      while (BVar1 == 0) {\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }\n    }\n    freebn(p);\n    p = a;\n  } while( true );\n}" type_identifier (function_declarator "biggcd(Bignum_conflict av,Bignum_conflict bv)" identifier (parameter_list "(Bignum_conflict av,Bignum_conflict bv)" ( (parameter_declaration "Bignum_conflict av" type_identifier identifier) , (parameter_declaration "Bignum_conflict bv" type_identifier identifier) ))) (compound_statement "{\n  BignumInt BVar1;\n  Bignum_conflict p;\n  Bignum_conflict result;\n  int iVar2;\n  uint uVar3;\n  Bignum_conflict a;\n  \n  p = copybn(av);\n  result = copybn(bv);\n  do {\n    a = result;\n    iVar2 = bignum_cmp(a,Zero);\n    if (iVar2 == 0) {\n      freebn(a);\n      return p;\n    }\n    result = newbn(*a);\n    bigdivmod(p,a,result,(Bignum_conflict)0x0);\n    uVar3 = *result;\n    if (1 < uVar3) {\n      BVar1 = result[uVar3];\n      while (BVar1 == 0) {\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }\n    }\n    freebn(p);\n    p = a;\n  } while( true );\n}" { (declaration "BignumInt BVar1;" type_identifier identifier ;) (declaration "Bignum_conflict p;" type_identifier identifier ;) (declaration "Bignum_conflict result;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "Bignum_conflict a;" type_identifier identifier ;) (expression_statement "p = copybn(av);" (assignment_expression "p = copybn(av)" identifier = (call_expression "copybn(av)" identifier (argument_list "(av)" ( identifier )))) ;) (expression_statement "result = copybn(bv);" (assignment_expression "result = copybn(bv)" identifier = (call_expression "copybn(bv)" identifier (argument_list "(bv)" ( identifier )))) ;) (do_statement "do {\n    a = result;\n    iVar2 = bignum_cmp(a,Zero);\n    if (iVar2 == 0) {\n      freebn(a);\n      return p;\n    }\n    result = newbn(*a);\n    bigdivmod(p,a,result,(Bignum_conflict)0x0);\n    uVar3 = *result;\n    if (1 < uVar3) {\n      BVar1 = result[uVar3];\n      while (BVar1 == 0) {\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }\n    }\n    freebn(p);\n    p = a;\n  } while( true );" do (compound_statement "{\n    a = result;\n    iVar2 = bignum_cmp(a,Zero);\n    if (iVar2 == 0) {\n      freebn(a);\n      return p;\n    }\n    result = newbn(*a);\n    bigdivmod(p,a,result,(Bignum_conflict)0x0);\n    uVar3 = *result;\n    if (1 < uVar3) {\n      BVar1 = result[uVar3];\n      while (BVar1 == 0) {\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }\n    }\n    freebn(p);\n    p = a;\n  }" { (expression_statement "a = result;" (assignment_expression "a = result" identifier = identifier) ;) (expression_statement "iVar2 = bignum_cmp(a,Zero);" (assignment_expression "iVar2 = bignum_cmp(a,Zero)" identifier = (call_expression "bignum_cmp(a,Zero)" identifier (argument_list "(a,Zero)" ( identifier , identifier )))) ;) (if_statement "if (iVar2 == 0) {\n      freebn(a);\n      return p;\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      freebn(a);\n      return p;\n    }" { (expression_statement "freebn(a);" (call_expression "freebn(a)" identifier (argument_list "(a)" ( identifier ))) ;) (return_statement "return p;" return identifier ;) })) (expression_statement "result = newbn(*a);" (assignment_expression "result = newbn(*a)" identifier = (call_expression "newbn(*a)" identifier (argument_list "(*a)" ( (pointer_expression "*a" * identifier) )))) ;) (expression_statement "bigdivmod(p,a,result,(Bignum_conflict)0x0);" (call_expression "bigdivmod(p,a,result,(Bignum_conflict)0x0)" identifier (argument_list "(p,a,result,(Bignum_conflict)0x0)" ( identifier , identifier , identifier , (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal) ))) ;) (expression_statement "uVar3 = *result;" (assignment_expression "uVar3 = *result" identifier = (pointer_expression "*result" * identifier)) ;) (if_statement "if (1 < uVar3) {\n      BVar1 = result[uVar3];\n      while (BVar1 == 0) {\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }\n    }" if (parenthesized_expression "(1 < uVar3)" ( (binary_expression "1 < uVar3" number_literal < identifier) )) (compound_statement "{\n      BVar1 = result[uVar3];\n      while (BVar1 == 0) {\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }\n    }" { (expression_statement "BVar1 = result[uVar3];" (assignment_expression "BVar1 = result[uVar3]" identifier = (subscript_expression "result[uVar3]" identifier [ identifier ])) ;) (while_statement "while (BVar1 == 0) {\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }" while (parenthesized_expression "(BVar1 == 0)" ( (binary_expression "BVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar3 = uVar3 - 1;\n        *result = uVar3;\n        if (uVar3 == 1) break;\n        BVar1 = result[uVar3];\n      }" { (expression_statement "uVar3 = uVar3 - 1;" (assignment_expression "uVar3 = uVar3 - 1" identifier = (binary_expression "uVar3 - 1" identifier - number_literal)) ;) (expression_statement "*result = uVar3;" (assignment_expression "*result = uVar3" (pointer_expression "*result" * identifier) = identifier) ;) (if_statement "if (uVar3 == 1) break;" if (parenthesized_expression "(uVar3 == 1)" ( (binary_expression "uVar3 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "BVar1 = result[uVar3];" (assignment_expression "BVar1 = result[uVar3]" identifier = (subscript_expression "result[uVar3]" identifier [ identifier ])) ;) })) })) (expression_statement "freebn(p);" (call_expression "freebn(p)" identifier (argument_list "(p)" ( identifier ))) ;) (expression_statement "p = a;" (assignment_expression "p = a" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "uint * FUN_00042d90(undefined4 param_1,undefined4 param_2)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint *puVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EBP;\n  uint *puVar6;\n  \n  FUN_0003eac7();\n  puVar2 = (uint *)FUN_000411a0(param_1);\n  puVar3 = (uint *)FUN_000411a0(param_2);\n  do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );\n}\n\n" (function_definition "uint * FUN_00042d90(undefined4 param_1,undefined4 param_2)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint *puVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EBP;\n  uint *puVar6;\n  \n  FUN_0003eac7();\n  puVar2 = (uint *)FUN_000411a0(param_1);\n  puVar3 = (uint *)FUN_000411a0(param_2);\n  do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );\n}" type_identifier (pointer_declarator "* FUN_00042d90(undefined4 param_1,undefined4 param_2)" * (function_declarator "FUN_00042d90(undefined4 param_1,undefined4 param_2)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) )))) (compound_statement "{\n  uint uVar1;\n  uint *puVar2;\n  uint *puVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EBP;\n  uint *puVar6;\n  \n  FUN_0003eac7();\n  puVar2 = (uint *)FUN_000411a0(param_1);\n  puVar3 = (uint *)FUN_000411a0(param_2);\n  do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int unaff_EBP;" primitive_type identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (expression_statement "FUN_0003eac7();" (call_expression "FUN_0003eac7()" identifier (argument_list "()" ( ))) ;) (expression_statement "puVar2 = (uint *)FUN_000411a0(param_1);" (assignment_expression "puVar2 = (uint *)FUN_000411a0(param_1)" identifier = (cast_expression "(uint *)FUN_000411a0(param_1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000411a0(param_1)" identifier (argument_list "(param_1)" ( identifier ))))) ;) (expression_statement "puVar3 = (uint *)FUN_000411a0(param_2);" (assignment_expression "puVar3 = (uint *)FUN_000411a0(param_2)" identifier = (cast_expression "(uint *)FUN_000411a0(param_2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000411a0(param_2)" identifier (argument_list "(param_2)" ( identifier ))))) ;) (do_statement "do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );" do (compound_statement "{\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  }" { (expression_statement "puVar6 = puVar3;" (assignment_expression "puVar6 = puVar3" identifier = identifier) ;) (expression_statement "iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));" (assignment_expression "iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" identifier = (call_expression "FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" identifier (argument_list "(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" ( identifier , (pointer_expression "*(undefined4 *)(unaff_EBP + 0x62432)" * (cast_expression "(undefined4 *)(unaff_EBP + 0x62432)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBP + 0x62432)" ( (binary_expression "unaff_EBP + 0x62432" identifier + number_literal) )))) )))) ;) (if_statement "if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }" { (expression_statement "FUN_000411f0(puVar6);" (call_expression "FUN_000411f0(puVar6)" identifier (argument_list "(puVar6)" ( identifier ))) ;) (return_statement "return puVar2;" return identifier ;) })) (expression_statement "puVar3 = (uint *)FUN_000408e0();" (assignment_expression "puVar3 = (uint *)FUN_000408e0()" identifier = (cast_expression "(uint *)FUN_000408e0()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000408e0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "FUN_000406d0(0);" (call_expression "FUN_000406d0(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "uVar5 = *puVar3;" (assignment_expression "uVar5 = *puVar3" identifier = (pointer_expression "*puVar3" * identifier)) ;) (if_statement "if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }" { (expression_statement "uVar1 = puVar3[uVar5];" (assignment_expression "uVar1 = puVar3[uVar5]" identifier = (subscript_expression "puVar3[uVar5]" identifier [ identifier ])) ;) (while_statement "while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }" while (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "*puVar3 = uVar5;" (assignment_expression "*puVar3 = uVar5" (pointer_expression "*puVar3" * identifier) = identifier) ;) (if_statement "if (uVar5 == 1) break;" if (parenthesized_expression "(uVar5 == 1)" ( (binary_expression "uVar5 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar1 = puVar3[uVar5];" (assignment_expression "uVar1 = puVar3[uVar5]" identifier = (subscript_expression "puVar3[uVar5]" identifier [ identifier ])) ;) })) })) (expression_statement "FUN_000411f0(puVar2);" (call_expression "FUN_000411f0(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "puVar2 = puVar6;" (assignment_expression "puVar2 = puVar6" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) })) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "uint * FUN_00042d90(undefined4 param_1,undefined4 param_2)\n\n{\n  uint uVar1;\n  uint *puVar2;\n  uint *puVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EBP;\n  uint *puVar6;\n  \n  FUN_0003eac7();\n  puVar2 = (uint *)FUN_000411a0(param_1);\n  puVar3 = (uint *)FUN_000411a0(param_2);\n  do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );\n}" (type_identifier "uint") (pointer_declarator "* FUN_00042d90(undefined4 param_1,undefined4 param_2)" (* "*") (function_declarator "FUN_00042d90(undefined4 param_1,undefined4 param_2)" (identifier "FUN_00042d90") (parameter_list "(undefined4 param_1,undefined4 param_2)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) () ")")))) (compound_statement "{\n  uint uVar1;\n  uint *puVar2;\n  uint *puVar3;\n  int iVar4;\n  uint uVar5;\n  int unaff_EBP;\n  uint *puVar6;\n  \n  FUN_0003eac7();\n  puVar2 = (uint *)FUN_000411a0(param_1);\n  puVar3 = (uint *)FUN_000411a0(param_2);\n  do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int unaff_EBP;" (primitive_type "int") (identifier "unaff_EBP") (; ";")) (declaration "uint *puVar6;" (type_identifier "uint") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (expression_statement "FUN_0003eac7();" (call_expression "FUN_0003eac7()" (identifier "FUN_0003eac7") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "puVar2 = (uint *)FUN_000411a0(param_1);" (assignment_expression "puVar2 = (uint *)FUN_000411a0(param_1)" (identifier "puVar2") (= "=") (cast_expression "(uint *)FUN_000411a0(param_1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000411a0(param_1)" (identifier "FUN_000411a0") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))))) (; ";")) (expression_statement "puVar3 = (uint *)FUN_000411a0(param_2);" (assignment_expression "puVar3 = (uint *)FUN_000411a0(param_2)" (identifier "puVar3") (= "=") (cast_expression "(uint *)FUN_000411a0(param_2)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000411a0(param_2)" (identifier "FUN_000411a0") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")"))))) (; ";")) (do_statement "do {\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  } while( true );" (do "do") (compound_statement "{\n    puVar6 = puVar3;\n    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));\n    if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }\n    puVar3 = (uint *)FUN_000408e0();\n    FUN_000406d0(0);\n    uVar5 = *puVar3;\n    if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }\n    FUN_000411f0(puVar2);\n    puVar2 = puVar6;\n  }" ({ "{") (expression_statement "puVar6 = puVar3;" (assignment_expression "puVar6 = puVar3" (identifier "puVar6") (= "=") (identifier "puVar3")) (; ";")) (expression_statement "iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));" (assignment_expression "iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" (identifier "iVar4") (= "=") (call_expression "FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" (identifier "FUN_00041b70") (argument_list "(puVar6,*(undefined4 *)(unaff_EBP + 0x62432))" (( "(") (identifier "puVar6") (, ",") (pointer_expression "*(undefined4 *)(unaff_EBP + 0x62432)" (* "*") (cast_expression "(undefined4 *)(unaff_EBP + 0x62432)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EBP + 0x62432)" (( "(") (binary_expression "unaff_EBP + 0x62432" (identifier "unaff_EBP") (+ "+") (number_literal "0x62432")) () ")")))) () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_000411f0(puVar6);\n      return puVar2;\n    }" ({ "{") (expression_statement "FUN_000411f0(puVar6);" (call_expression "FUN_000411f0(puVar6)" (identifier "FUN_000411f0") (argument_list "(puVar6)" (( "(") (identifier "puVar6") () ")"))) (; ";")) (return_statement "return puVar2;" (return "return") (identifier "puVar2") (; ";")) (} "}"))) (expression_statement "puVar3 = (uint *)FUN_000408e0();" (assignment_expression "puVar3 = (uint *)FUN_000408e0()" (identifier "puVar3") (= "=") (cast_expression "(uint *)FUN_000408e0()" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000408e0()" (identifier "FUN_000408e0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "FUN_000406d0(0);" (call_expression "FUN_000406d0(0)" (identifier "FUN_000406d0") (argument_list "(0)" (( "(") (number_literal "0") () ")"))) (; ";")) (expression_statement "uVar5 = *puVar3;" (assignment_expression "uVar5 = *puVar3" (identifier "uVar5") (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (if_statement "if (1 < uVar5) {\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }" (if "if") (parenthesized_expression "(1 < uVar5)" (( "(") (binary_expression "1 < uVar5" (number_literal "1") (< "<") (identifier "uVar5")) () ")")) (compound_statement "{\n      uVar1 = puVar3[uVar5];\n      while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }\n    }" ({ "{") (expression_statement "uVar1 = puVar3[uVar5];" (assignment_expression "uVar1 = puVar3[uVar5]" (identifier "uVar1") (= "=") (subscript_expression "puVar3[uVar5]" (identifier "puVar3") ([ "[") (identifier "uVar5") (] "]"))) (; ";")) (while_statement "while (uVar1 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }" (while "while") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar5 = uVar5 - 1;\n        *puVar3 = uVar5;\n        if (uVar5 == 1) break;\n        uVar1 = puVar3[uVar5];\n      }" ({ "{") (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" (identifier "uVar5") (= "=") (binary_expression "uVar5 - 1" (identifier "uVar5") (- "-") (number_literal "1"))) (; ";")) (expression_statement "*puVar3 = uVar5;" (assignment_expression "*puVar3 = uVar5" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (uVar5 == 1) break;" (if "if") (parenthesized_expression "(uVar5 == 1)" (( "(") (binary_expression "uVar5 == 1" (identifier "uVar5") (== "==") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar1 = puVar3[uVar5];" (assignment_expression "uVar1 = puVar3[uVar5]" (identifier "uVar1") (= "=") (subscript_expression "puVar3[uVar5]" (identifier "puVar3") ([ "[") (identifier "uVar5") (] "]"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "FUN_000411f0(puVar2);" (call_expression "FUN_000411f0(puVar2)" (identifier "FUN_000411f0") (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (expression_statement "puVar2 = puVar6;" (assignment_expression "puVar2 = puVar6" (identifier "puVar2") (= "=") (identifier "puVar6")) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */
/* WARNING: Unknown calling convention */

type_1 function_1(type_1 av,type_1 bv)

{
  type_2 var_8;
  type_1 p;
  type_1 result;
  int var_3;
  type_3 var_7;
  type_1 a;
  
  p = var_1(av);
  result = var_1(bv);
  do {
    a = result;
    var_3 = var_2(a,Zero);
    if (var_3 == 0) {
      var_4(a);
      return p;
    }
    result = var_5(*a);
    var_6(p,a,result,(type_1)0x0);
    var_7 = *result;
    if (1 < var_7) {
      var_8 = result[var_7];
      while (var_8 == 0) {
        var_7 = var_7 - 1;
        *result = var_7;
        if (var_7 == 1) break;
        var_8 = result[var_7];
      }
    }
    var_4(p);
    p = a;
  } while( true );
}


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

uint * MASKED(undefined4 param_1,undefined4 param_2)

{
  uint uVar1;
  uint *puVar2;
  uint *puVar3;
  int iVar4;
  uint uVar5;
  int unaff_EBP;
  uint *puVar6;
  
  FUN_0003eac7();
  puVar2 = (uint *)FUN_000411a0(param_1);
  puVar3 = (uint *)FUN_000411a0(param_2);
  do {
    puVar6 = puVar3;
    iVar4 = FUN_00041b70(puVar6,*(undefined4 *)(unaff_EBP + 0x62432));
    if (iVar4 == 0) {
      FUN_000411f0(puVar6);
      return puVar2;
    }
    puVar3 = (uint *)FUN_000408e0();
    FUN_000406d0(0);
    uVar5 = *puVar3;
    if (1 < uVar5) {
      uVar1 = puVar3[uVar5];
      while (uVar1 == 0) {
        uVar5 = uVar5 - 1;
        *puVar3 = uVar5;
        if (uVar5 == 1) break;
        uVar1 = puVar3[uVar5];
      }
    }
    FUN_000411f0(puVar2);
    puVar2 = puVar6;
  } while( true );
}

