
void MD5Simple(void *p,uint len,uchar *output)

{
  undefined *puVar1;
  int iVar2;
  byte *pbVar3;
  MD5Context *s_00;
  byte *pbVar4;
  byte *pbVar5;
  undefined1 *keyv;
  uint uVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  undefined *puVar10;
  byte abStack_f4 [64];
  int iStack_b4;
  MD5Context *pMStack_ac;
  undefined *puStack_a8;
  uchar *puStack_a4;
  void *pvStack_a0;
  uint uStack_9c;
  MD5Context s;
  
  puVar1 = PTR___stack_chk_guard_000bef2c;
  iVar2 = *(int *)PTR___stack_chk_guard_000bef2c;
  MD5Init(&s);
  uVar6 = len;
  MD5Update(&s,(uchar *)p,len);
  MD5Final(output,&s);
  pbVar4 = &DAT_0000005c;
  s_00 = &s;
  (*(code *)PTR_smemclr_000be404)();
  if (iVar2 == *(int *)puVar1) {
    return;
  }
  puVar10 = PTR___stack_chk_fail_000bef04;
  (*(code *)PTR___stack_chk_fail_000bef04)();
  puStack_a8 = puVar1;
  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);
  pMStack_ac = &s;
  puStack_a4 = output;
  pvStack_a0 = p;
  uStack_9c = len;
  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);
  if ((int)uVar6 < 1) {
    MD5Init(s_00);
    MD5Update(s_00,abStack_f4,0x40);
    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);
  }
  else {
    pbVar7 = abStack_f4;
    pbVar8 = pbVar4 + (uVar6 - 1);
    pbVar9 = pbVar4 + 0x40;
    pbVar3 = pbVar7;
    pbVar5 = pbVar4;
    do {
      *pbVar3 = *pbVar3 ^ *pbVar5;
      if (pbVar5 == pbVar8) break;
      pbVar5 = pbVar5 + 1;
      pbVar3 = pbVar3 + 1;
    } while (pbVar5 != pbVar9);
    MD5Init(s_00);
    MD5Update(s_00,abStack_f4,0x40);
    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);
    do {
      *pbVar7 = *pbVar7 ^ *pbVar4;
      if (pbVar4 == pbVar8) break;
      pbVar4 = pbVar4 + 1;
      pbVar7 = pbVar7 + 1;
    } while (pbVar4 != pbVar9);
  }
  MD5Init(s_00 + 1);
  pbVar4 = abStack_f4;
  MD5Update(s_00 + 1,pbVar4,0x40);
  keyv = &DAT_00000040;
  (**(code **)(puVar10 + 0x4b1e4))();
  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {
    (**(code **)(puVar10 + 0x4bce4))();
    hmacmd5_key(pbVar4,keyv,0x10);
    return;
  }
  return;
}



void MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)

{
  undefined *puVar1;
  byte *pbVar2;
  undefined1 *puVar3;
  byte *pbVar4;
  byte *pbVar5;
  int iVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  undefined *puVar10;
  byte abStack_f4 [64];
  int iStack_b4;
  undefined1 *puStack_ac;
  undefined *puStack_a8;
  undefined4 uStack_a4;
  undefined4 uStack_a0;
  int iStack_9c;
  undefined1 auStack_78 [92];
  int local_1c;
  
  puVar1 = PTR___stack_chk_guard_000bef2c;
  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;
  MD5Init(auStack_78);
  iVar6 = param_2;
  MD5Update(auStack_78,param_1);
  MD5Final(param_3,auStack_78);
  pbVar4 = &DAT_0000005c;
  puVar3 = auStack_78;
  (*(code *)PTR_smemclr_000be404)(auStack_78);
  if (local_1c == *(int *)puVar1) {
    return;
  }
  puVar10 = PTR___stack_chk_fail_000bef04;
  (*(code *)PTR___stack_chk_fail_000bef04)();
  puStack_a8 = puVar1;
  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);
  puStack_ac = auStack_78;
  uStack_a4 = param_3;
  uStack_a0 = param_1;
  iStack_9c = param_2;
  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);
  if (iVar6 < 1) {
    MD5Init(puVar3);
    MD5Update(puVar3,abStack_f4,0x40);
    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);
  }
  else {
    pbVar7 = abStack_f4;
    pbVar8 = pbVar4 + iVar6 + -1;
    pbVar9 = pbVar4 + 0x40;
    pbVar2 = pbVar7;
    pbVar5 = pbVar4;
    do {
      *pbVar2 = *pbVar2 ^ *pbVar5;
      if (pbVar5 == pbVar8) break;
      pbVar5 = pbVar5 + 1;
      pbVar2 = pbVar2 + 1;
    } while (pbVar5 != pbVar9);
    MD5Init(puVar3);
    MD5Update(puVar3,abStack_f4,0x40);
    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);
    do {
      *pbVar7 = *pbVar7 ^ *pbVar4;
      if (pbVar4 == pbVar8) break;
      pbVar4 = pbVar4 + 1;
      pbVar7 = pbVar7 + 1;
    } while (pbVar4 != pbVar9);
  }
  MD5Init(puVar3 + 0x5c);
  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);
  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);
  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {
    (**(code **)(puVar10 + 0x4bce4))();
    hmacmd5_key();
    return;
  }
  return;
}


lui gp,0x5
addiu gp,gp,0x3230
addu gp,gp,t9
addiu sp,sp,-0x90
sw ra,0x8c(sp)
sw s4,0x88(sp)
sw s3,0x84(sp)
sw s2,0x80(sp)
sw s1,0x7c(sp)
sw s0,0x78(sp)
sw gp,0x10(sp)
or s3,a0,zero
or s4,a1,zero
or s2,a2,zero
lw s1,-0x7444(gp)
lw v0,0x0(s1)
sw v0,0x74(sp)
addiu s0,sp,0x18
or a0,s0,zero
lw t9,-0x795c(gp)
bal 0x00071ec8
_nop
lw gp,0x10(sp)
or a2,s4,zero
or a1,s3,zero
or a0,s0,zero
lw t9,-0x7958(gp)
bal 0x00071f08
_nop
lw gp,0x10(sp)
or a1,s0,zero
or a0,s2,zero
lw t9,-0x7954(gp)
bal 0x00072b78
_nop
lw gp,0x10(sp)
li a1,0x5c
or a0,s0,zero
lw t9,-0x7f6c(gp)
jalr t9
_nop
lw gp,0x10(sp)
lw v1,0x74(sp)
lw v0,0x0(s1)
bne v1,v0,0x00073214
_lw ra,0x8c(sp)
lw s4,0x88(sp)
lw s3,0x84(sp)
lw s2,0x80(sp)
lw s1,0x7c(sp)
lw s0,0x78(sp)
jr ra
_addiu sp,sp,0x90
lw t9,-0x746c(gp)
jalr t9
_nop
(translation_unit "void MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  byte *pbVar2;\n  undefined1 *puVar3;\n  byte *pbVar4;\n  byte *pbVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  undefined1 *puStack_ac;\n  undefined *puStack_a8;\n  undefined4 uStack_a4;\n  undefined4 uStack_a0;\n  int iStack_9c;\n  undefined1 auStack_78 [92];\n  int local_1c;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(auStack_78);\n  iVar6 = param_2;\n  MD5Update(auStack_78,param_1);\n  MD5Final(param_3,auStack_78);\n  pbVar4 = &DAT_0000005c;\n  puVar3 = auStack_78;\n  (*(code *)PTR_smemclr_000be404)(auStack_78);\n  if (local_1c == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  puStack_ac = auStack_78;\n  uStack_a4 = param_3;\n  uStack_a0 = param_1;\n  iStack_9c = param_2;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(puVar3 + 0x5c);\n  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);\n  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }\n  return;\n}\n\n" (function_definition "void MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  byte *pbVar2;\n  undefined1 *puVar3;\n  byte *pbVar4;\n  byte *pbVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  undefined1 *puStack_ac;\n  undefined *puStack_a8;\n  undefined4 uStack_a4;\n  undefined4 uStack_a0;\n  int iStack_9c;\n  undefined1 auStack_78 [92];\n  int local_1c;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(auStack_78);\n  iVar6 = param_2;\n  MD5Update(auStack_78,param_1);\n  MD5Final(param_3,auStack_78);\n  pbVar4 = &DAT_0000005c;\n  puVar3 = auStack_78;\n  (*(code *)PTR_smemclr_000be404)(auStack_78);\n  if (local_1c == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  puStack_ac = auStack_78;\n  uStack_a4 = param_3;\n  uStack_a0 = param_1;\n  iStack_9c = param_2;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(puVar3 + 0x5c);\n  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);\n  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)" identifier (parameter_list "(undefined4 param_1,int param_2,undefined4 param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  byte *pbVar2;\n  undefined1 *puVar3;\n  byte *pbVar4;\n  byte *pbVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  undefined1 *puStack_ac;\n  undefined *puStack_a8;\n  undefined4 uStack_a4;\n  undefined4 uStack_a0;\n  int iStack_9c;\n  undefined1 auStack_78 [92];\n  int local_1c;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(auStack_78);\n  iVar6 = param_2;\n  MD5Update(auStack_78,param_1);\n  MD5Final(param_3,auStack_78);\n  pbVar4 = &DAT_0000005c;\n  puVar3 = auStack_78;\n  (*(code *)PTR_smemclr_000be404)(auStack_78);\n  if (local_1c == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  puStack_ac = auStack_78;\n  uStack_a4 = param_3;\n  uStack_a0 = param_1;\n  iStack_9c = param_2;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(puVar3 + 0x5c);\n  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);\n  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "undefined1 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "undefined *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "byte abStack_f4 [64];" type_identifier (array_declarator "abStack_f4 [64]" identifier [ number_literal ]) ;) (declaration "int iStack_b4;" primitive_type identifier ;) (declaration "undefined1 *puStack_ac;" type_identifier (pointer_declarator "*puStack_ac" * identifier) ;) (declaration "undefined *puStack_a8;" type_identifier (pointer_declarator "*puStack_a8" * identifier) ;) (declaration "undefined4 uStack_a4;" type_identifier identifier ;) (declaration "undefined4 uStack_a0;" type_identifier identifier ;) (declaration "int iStack_9c;" primitive_type identifier ;) (declaration "undefined1 auStack_78 [92];" type_identifier (array_declarator "auStack_78 [92]" identifier [ number_literal ]) ;) (declaration "int local_1c;" primitive_type identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_000bef2c;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000bef2c" identifier = identifier) ;) (expression_statement "local_1c = *(int *)PTR___stack_chk_guard_000bef2c;" (assignment_expression "local_1c = *(int *)PTR___stack_chk_guard_000bef2c" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000bef2c" * (cast_expression "(int *)PTR___stack_chk_guard_000bef2c" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "MD5Init(auStack_78);" (call_expression "MD5Init(auStack_78)" identifier (argument_list "(auStack_78)" ( identifier ))) ;) (expression_statement "iVar6 = param_2;" (assignment_expression "iVar6 = param_2" identifier = identifier) ;) (expression_statement "MD5Update(auStack_78,param_1);" (call_expression "MD5Update(auStack_78,param_1)" identifier (argument_list "(auStack_78,param_1)" ( identifier , identifier ))) ;) (expression_statement "MD5Final(param_3,auStack_78);" (call_expression "MD5Final(param_3,auStack_78)" identifier (argument_list "(param_3,auStack_78)" ( identifier , identifier ))) ;) (expression_statement "pbVar4 = &DAT_0000005c;" (assignment_expression "pbVar4 = &DAT_0000005c" identifier = (pointer_expression "&DAT_0000005c" & identifier)) ;) (expression_statement "puVar3 = auStack_78;" (assignment_expression "puVar3 = auStack_78" identifier = identifier) ;) (expression_statement "(*(code *)PTR_smemclr_000be404)(auStack_78);" (call_expression "(*(code *)PTR_smemclr_000be404)(auStack_78)" (parenthesized_expression "(*(code *)PTR_smemclr_000be404)" ( (pointer_expression "*(code *)PTR_smemclr_000be404" * (cast_expression "(code *)PTR_smemclr_000be404" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(auStack_78)" ( identifier ))) ;) (if_statement "if (local_1c == *(int *)puVar1) {\n    return;\n  }" if (parenthesized_expression "(local_1c == *(int *)puVar1)" ( (binary_expression "local_1c == *(int *)puVar1" identifier == (pointer_expression "*(int *)puVar1" * (cast_expression "(int *)puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "puVar10 = PTR___stack_chk_fail_000bef04;" (assignment_expression "puVar10 = PTR___stack_chk_fail_000bef04" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000bef04)();" (call_expression "(*(code *)PTR___stack_chk_fail_000bef04)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000bef04)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000bef04" * (cast_expression "(code *)PTR___stack_chk_fail_000bef04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puStack_a8 = puVar1;" (assignment_expression "puStack_a8 = puVar1" identifier = identifier) ;) (expression_statement "iStack_b4 = **(int **)(puVar10 + 0x4bd0c);" (assignment_expression "iStack_b4 = **(int **)(puVar10 + 0x4bd0c)" identifier = (pointer_expression "**(int **)(puVar10 + 0x4bd0c)" * (pointer_expression "*(int **)(puVar10 + 0x4bd0c)" * (cast_expression "(int **)(puVar10 + 0x4bd0c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bd0c)" ( (binary_expression "puVar10 + 0x4bd0c" identifier + number_literal) )))))) ;) (expression_statement "puStack_ac = auStack_78;" (assignment_expression "puStack_ac = auStack_78" identifier = identifier) ;) (expression_statement "uStack_a4 = param_3;" (assignment_expression "uStack_a4 = param_3" identifier = identifier) ;) (expression_statement "uStack_a0 = param_1;" (assignment_expression "uStack_a0 = param_1" identifier = identifier) ;) (expression_statement "iStack_9c = param_2;" (assignment_expression "iStack_9c = param_2" identifier = identifier) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x36,0x40)" ( identifier , number_literal , number_literal ))) ;) (if_statement "if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" if (parenthesized_expression "(iVar6 < 1)" ( (binary_expression "iVar6 < 1" identifier < number_literal) )) (compound_statement "{\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }" { (expression_statement "MD5Init(puVar3);" (call_expression "MD5Init(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "MD5Update(puVar3,abStack_f4,0x40);" (call_expression "MD5Update(puVar3,abStack_f4,0x40)" identifier (argument_list "(puVar3,abStack_f4,0x40)" ( identifier , identifier , number_literal ))) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x5c,0x40)" ( identifier , number_literal , number_literal ))) ;) }) (else_clause "else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" else (compound_statement "{\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" { (expression_statement "pbVar7 = abStack_f4;" (assignment_expression "pbVar7 = abStack_f4" identifier = identifier) ;) (expression_statement "pbVar8 = pbVar4 + iVar6 + -1;" (assignment_expression "pbVar8 = pbVar4 + iVar6 + -1" identifier = (binary_expression "pbVar4 + iVar6 + -1" (binary_expression "pbVar4 + iVar6" identifier + identifier) + number_literal)) ;) (expression_statement "pbVar9 = pbVar4 + 0x40;" (assignment_expression "pbVar9 = pbVar4 + 0x40" identifier = (binary_expression "pbVar4 + 0x40" identifier + number_literal)) ;) (expression_statement "pbVar2 = pbVar7;" (assignment_expression "pbVar2 = pbVar7" identifier = identifier) ;) (expression_statement "pbVar5 = pbVar4;" (assignment_expression "pbVar5 = pbVar4" identifier = identifier) ;) (do_statement "do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);" do (compound_statement "{\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    }" { (expression_statement "*pbVar2 = *pbVar2 ^ *pbVar5;" (assignment_expression "*pbVar2 = *pbVar2 ^ *pbVar5" (pointer_expression "*pbVar2" * identifier) = (binary_expression "*pbVar2 ^ *pbVar5" (pointer_expression "*pbVar2" * identifier) ^ (pointer_expression "*pbVar5" * identifier))) ;) (if_statement "if (pbVar5 == pbVar8) break;" if (parenthesized_expression "(pbVar5 == pbVar8)" ( (binary_expression "pbVar5 == pbVar8" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" identifier = (binary_expression "pbVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pbVar5 != pbVar9)" ( (binary_expression "pbVar5 != pbVar9" identifier != identifier) )) ;) (expression_statement "MD5Init(puVar3);" (call_expression "MD5Init(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "MD5Update(puVar3,abStack_f4,0x40);" (call_expression "MD5Update(puVar3,abStack_f4,0x40)" identifier (argument_list "(puVar3,abStack_f4,0x40)" ( identifier , identifier , number_literal ))) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x5c,0x40)" ( identifier , number_literal , number_literal ))) ;) (do_statement "do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);" do (compound_statement "{\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    }" { (expression_statement "*pbVar7 = *pbVar7 ^ *pbVar4;" (assignment_expression "*pbVar7 = *pbVar7 ^ *pbVar4" (pointer_expression "*pbVar7" * identifier) = (binary_expression "*pbVar7 ^ *pbVar4" (pointer_expression "*pbVar7" * identifier) ^ (pointer_expression "*pbVar4" * identifier))) ;) (if_statement "if (pbVar4 == pbVar8) break;" if (parenthesized_expression "(pbVar4 == pbVar8)" ( (binary_expression "pbVar4 == pbVar8" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "pbVar4 = pbVar4 + 1;" (assignment_expression "pbVar4 = pbVar4 + 1" identifier = (binary_expression "pbVar4 + 1" identifier + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pbVar4 != pbVar9)" ( (binary_expression "pbVar4 != pbVar9" identifier != identifier) )) ;) }))) (expression_statement "MD5Init(puVar3 + 0x5c);" (call_expression "MD5Init(puVar3 + 0x5c)" identifier (argument_list "(puVar3 + 0x5c)" ( (binary_expression "puVar3 + 0x5c" identifier + number_literal) ))) ;) (expression_statement "MD5Update(puVar3 + 0x5c,abStack_f4,0x40);" (call_expression "MD5Update(puVar3 + 0x5c,abStack_f4,0x40)" identifier (argument_list "(puVar3 + 0x5c,abStack_f4,0x40)" ( (binary_expression "puVar3 + 0x5c" identifier + number_literal) , identifier , number_literal ))) ;) (expression_statement "(**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);" (call_expression "(**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4b1e4))" ( (pointer_expression "**(code **)(puVar10 + 0x4b1e4)" * (pointer_expression "*(code **)(puVar10 + 0x4b1e4)" * (cast_expression "(code **)(puVar10 + 0x4b1e4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4b1e4)" ( (binary_expression "puVar10 + 0x4b1e4" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x40)" ( identifier , number_literal ))) ;) (if_statement "if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }" if (parenthesized_expression "(iStack_b4 != **(int **)(puVar10 + 0x4bd0c))" ( (binary_expression "iStack_b4 != **(int **)(puVar10 + 0x4bd0c)" identifier != (pointer_expression "**(int **)(puVar10 + 0x4bd0c)" * (pointer_expression "*(int **)(puVar10 + 0x4bd0c)" * (cast_expression "(int **)(puVar10 + 0x4bd0c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bd0c)" ( (binary_expression "puVar10 + 0x4bd0c" identifier + number_literal) )))))) )) (compound_statement "{\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }" { (expression_statement "(**(code **)(puVar10 + 0x4bce4))();" (call_expression "(**(code **)(puVar10 + 0x4bce4))()" (parenthesized_expression "(**(code **)(puVar10 + 0x4bce4))" ( (pointer_expression "**(code **)(puVar10 + 0x4bce4)" * (pointer_expression "*(code **)(puVar10 + 0x4bce4)" * (cast_expression "(code **)(puVar10 + 0x4bce4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bce4)" ( (binary_expression "puVar10 + 0x4bce4" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "hmacmd5_key();" (call_expression "hmacmd5_key()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void MD5Simple(void *p,uint len,uchar *output)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  byte *pbVar3;\n  MD5Context *s_00;\n  byte *pbVar4;\n  byte *pbVar5;\n  undefined1 *keyv;\n  uint uVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  MD5Context *pMStack_ac;\n  undefined *puStack_a8;\n  uchar *puStack_a4;\n  void *pvStack_a0;\n  uint uStack_9c;\n  MD5Context s;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  iVar2 = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(&s);\n  uVar6 = len;\n  MD5Update(&s,(uchar *)p,len);\n  MD5Final(output,&s);\n  pbVar4 = &DAT_0000005c;\n  s_00 = &s;\n  (*(code *)PTR_smemclr_000be404)();\n  if (iVar2 == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  pMStack_ac = &s;\n  puStack_a4 = output;\n  pvStack_a0 = p;\n  uStack_9c = len;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if ((int)uVar6 < 1) {\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + (uVar6 - 1);\n    pbVar9 = pbVar4 + 0x40;\n    pbVar3 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar3 = *pbVar3 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar3 = pbVar3 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(s_00 + 1);\n  pbVar4 = abStack_f4;\n  MD5Update(s_00 + 1,pbVar4,0x40);\n  keyv = &DAT_00000040;\n  (**(code **)(puVar10 + 0x4b1e4))();\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key(pbVar4,keyv,0x10);\n    return;\n  }\n  return;\n}\n\n" (function_definition "void MD5Simple(void *p,uint len,uchar *output)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  byte *pbVar3;\n  MD5Context *s_00;\n  byte *pbVar4;\n  byte *pbVar5;\n  undefined1 *keyv;\n  uint uVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  MD5Context *pMStack_ac;\n  undefined *puStack_a8;\n  uchar *puStack_a4;\n  void *pvStack_a0;\n  uint uStack_9c;\n  MD5Context s;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  iVar2 = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(&s);\n  uVar6 = len;\n  MD5Update(&s,(uchar *)p,len);\n  MD5Final(output,&s);\n  pbVar4 = &DAT_0000005c;\n  s_00 = &s;\n  (*(code *)PTR_smemclr_000be404)();\n  if (iVar2 == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  pMStack_ac = &s;\n  puStack_a4 = output;\n  pvStack_a0 = p;\n  uStack_9c = len;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if ((int)uVar6 < 1) {\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + (uVar6 - 1);\n    pbVar9 = pbVar4 + 0x40;\n    pbVar3 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar3 = *pbVar3 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar3 = pbVar3 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(s_00 + 1);\n  pbVar4 = abStack_f4;\n  MD5Update(s_00 + 1,pbVar4,0x40);\n  keyv = &DAT_00000040;\n  (**(code **)(puVar10 + 0x4b1e4))();\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key(pbVar4,keyv,0x10);\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "MD5Simple(void *p,uint len,uchar *output)" identifier (parameter_list "(void *p,uint len,uchar *output)" ( (parameter_declaration "void *p" primitive_type (pointer_declarator "*p" * identifier)) , (parameter_declaration "uint len" type_identifier identifier) , (parameter_declaration "uchar *output" type_identifier (pointer_declarator "*output" * identifier)) ))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  byte *pbVar3;\n  MD5Context *s_00;\n  byte *pbVar4;\n  byte *pbVar5;\n  undefined1 *keyv;\n  uint uVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  MD5Context *pMStack_ac;\n  undefined *puStack_a8;\n  uchar *puStack_a4;\n  void *pvStack_a0;\n  uint uStack_9c;\n  MD5Context s;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  iVar2 = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(&s);\n  uVar6 = len;\n  MD5Update(&s,(uchar *)p,len);\n  MD5Final(output,&s);\n  pbVar4 = &DAT_0000005c;\n  s_00 = &s;\n  (*(code *)PTR_smemclr_000be404)();\n  if (iVar2 == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  pMStack_ac = &s;\n  puStack_a4 = output;\n  pvStack_a0 = p;\n  uStack_9c = len;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if ((int)uVar6 < 1) {\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + (uVar6 - 1);\n    pbVar9 = pbVar4 + 0x40;\n    pbVar3 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar3 = *pbVar3 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar3 = pbVar3 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(s_00 + 1);\n  pbVar4 = abStack_f4;\n  MD5Update(s_00 + 1,pbVar4,0x40);\n  keyv = &DAT_00000040;\n  (**(code **)(puVar10 + 0x4b1e4))();\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key(pbVar4,keyv,0x10);\n    return;\n  }\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "MD5Context *s_00;" type_identifier (pointer_declarator "*s_00" * identifier) ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "undefined1 *keyv;" type_identifier (pointer_declarator "*keyv" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "undefined *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "byte abStack_f4 [64];" type_identifier (array_declarator "abStack_f4 [64]" identifier [ number_literal ]) ;) (declaration "int iStack_b4;" primitive_type identifier ;) (declaration "MD5Context *pMStack_ac;" type_identifier (pointer_declarator "*pMStack_ac" * identifier) ;) (declaration "undefined *puStack_a8;" type_identifier (pointer_declarator "*puStack_a8" * identifier) ;) (declaration "uchar *puStack_a4;" type_identifier (pointer_declarator "*puStack_a4" * identifier) ;) (declaration "void *pvStack_a0;" primitive_type (pointer_declarator "*pvStack_a0" * identifier) ;) (declaration "uint uStack_9c;" type_identifier identifier ;) (declaration "MD5Context s;" type_identifier identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_000bef2c;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000bef2c" identifier = identifier) ;) (expression_statement "iVar2 = *(int *)PTR___stack_chk_guard_000bef2c;" (assignment_expression "iVar2 = *(int *)PTR___stack_chk_guard_000bef2c" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000bef2c" * (cast_expression "(int *)PTR___stack_chk_guard_000bef2c" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "MD5Init(&s);" (call_expression "MD5Init(&s)" identifier (argument_list "(&s)" ( (pointer_expression "&s" & identifier) ))) ;) (expression_statement "uVar6 = len;" (assignment_expression "uVar6 = len" identifier = identifier) ;) (expression_statement "MD5Update(&s,(uchar *)p,len);" (call_expression "MD5Update(&s,(uchar *)p,len)" identifier (argument_list "(&s,(uchar *)p,len)" ( (pointer_expression "&s" & identifier) , (cast_expression "(uchar *)p" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "MD5Final(output,&s);" (call_expression "MD5Final(output,&s)" identifier (argument_list "(output,&s)" ( identifier , (pointer_expression "&s" & identifier) ))) ;) (expression_statement "pbVar4 = &DAT_0000005c;" (assignment_expression "pbVar4 = &DAT_0000005c" identifier = (pointer_expression "&DAT_0000005c" & identifier)) ;) (expression_statement "s_00 = &s;" (assignment_expression "s_00 = &s" identifier = (pointer_expression "&s" & identifier)) ;) (expression_statement "(*(code *)PTR_smemclr_000be404)();" (call_expression "(*(code *)PTR_smemclr_000be404)()" (parenthesized_expression "(*(code *)PTR_smemclr_000be404)" ( (pointer_expression "*(code *)PTR_smemclr_000be404" * (cast_expression "(code *)PTR_smemclr_000be404" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (iVar2 == *(int *)puVar1) {\n    return;\n  }" if (parenthesized_expression "(iVar2 == *(int *)puVar1)" ( (binary_expression "iVar2 == *(int *)puVar1" identifier == (pointer_expression "*(int *)puVar1" * (cast_expression "(int *)puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "puVar10 = PTR___stack_chk_fail_000bef04;" (assignment_expression "puVar10 = PTR___stack_chk_fail_000bef04" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000bef04)();" (call_expression "(*(code *)PTR___stack_chk_fail_000bef04)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000bef04)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000bef04" * (cast_expression "(code *)PTR___stack_chk_fail_000bef04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puStack_a8 = puVar1;" (assignment_expression "puStack_a8 = puVar1" identifier = identifier) ;) (expression_statement "iStack_b4 = **(int **)(puVar10 + 0x4bd0c);" (assignment_expression "iStack_b4 = **(int **)(puVar10 + 0x4bd0c)" identifier = (pointer_expression "**(int **)(puVar10 + 0x4bd0c)" * (pointer_expression "*(int **)(puVar10 + 0x4bd0c)" * (cast_expression "(int **)(puVar10 + 0x4bd0c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bd0c)" ( (binary_expression "puVar10 + 0x4bd0c" identifier + number_literal) )))))) ;) (expression_statement "pMStack_ac = &s;" (assignment_expression "pMStack_ac = &s" identifier = (pointer_expression "&s" & identifier)) ;) (expression_statement "puStack_a4 = output;" (assignment_expression "puStack_a4 = output" identifier = identifier) ;) (expression_statement "pvStack_a0 = p;" (assignment_expression "pvStack_a0 = p" identifier = identifier) ;) (expression_statement "uStack_9c = len;" (assignment_expression "uStack_9c = len" identifier = identifier) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x36,0x40)" ( identifier , number_literal , number_literal ))) ;) (if_statement "if ((int)uVar6 < 1) {\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + (uVar6 - 1);\n    pbVar9 = pbVar4 + 0x40;\n    pbVar3 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar3 = *pbVar3 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar3 = pbVar3 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" if (parenthesized_expression "((int)uVar6 < 1)" ( (binary_expression "(int)uVar6 < 1" (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }" { (expression_statement "MD5Init(s_00);" (call_expression "MD5Init(s_00)" identifier (argument_list "(s_00)" ( identifier ))) ;) (expression_statement "MD5Update(s_00,abStack_f4,0x40);" (call_expression "MD5Update(s_00,abStack_f4,0x40)" identifier (argument_list "(s_00,abStack_f4,0x40)" ( identifier , identifier , number_literal ))) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x5c,0x40)" ( identifier , number_literal , number_literal ))) ;) }) (else_clause "else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + (uVar6 - 1);\n    pbVar9 = pbVar4 + 0x40;\n    pbVar3 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar3 = *pbVar3 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar3 = pbVar3 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" else (compound_statement "{\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + (uVar6 - 1);\n    pbVar9 = pbVar4 + 0x40;\n    pbVar3 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar3 = *pbVar3 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar3 = pbVar3 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(s_00);\n    MD5Update(s_00,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" { (expression_statement "pbVar7 = abStack_f4;" (assignment_expression "pbVar7 = abStack_f4" identifier = identifier) ;) (expression_statement "pbVar8 = pbVar4 + (uVar6 - 1);" (assignment_expression "pbVar8 = pbVar4 + (uVar6 - 1)" identifier = (binary_expression "pbVar4 + (uVar6 - 1)" identifier + (parenthesized_expression "(uVar6 - 1)" ( (binary_expression "uVar6 - 1" identifier - number_literal) )))) ;) (expression_statement "pbVar9 = pbVar4 + 0x40;" (assignment_expression "pbVar9 = pbVar4 + 0x40" identifier = (binary_expression "pbVar4 + 0x40" identifier + number_literal)) ;) (expression_statement "pbVar3 = pbVar7;" (assignment_expression "pbVar3 = pbVar7" identifier = identifier) ;) (expression_statement "pbVar5 = pbVar4;" (assignment_expression "pbVar5 = pbVar4" identifier = identifier) ;) (do_statement "do {\n      *pbVar3 = *pbVar3 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar3 = pbVar3 + 1;\n    } while (pbVar5 != pbVar9);" do (compound_statement "{\n      *pbVar3 = *pbVar3 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar3 = pbVar3 + 1;\n    }" { (expression_statement "*pbVar3 = *pbVar3 ^ *pbVar5;" (assignment_expression "*pbVar3 = *pbVar3 ^ *pbVar5" (pointer_expression "*pbVar3" * identifier) = (binary_expression "*pbVar3 ^ *pbVar5" (pointer_expression "*pbVar3" * identifier) ^ (pointer_expression "*pbVar5" * identifier))) ;) (if_statement "if (pbVar5 == pbVar8) break;" if (parenthesized_expression "(pbVar5 == pbVar8)" ( (binary_expression "pbVar5 == pbVar8" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) (expression_statement "pbVar3 = pbVar3 + 1;" (assignment_expression "pbVar3 = pbVar3 + 1" identifier = (binary_expression "pbVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pbVar5 != pbVar9)" ( (binary_expression "pbVar5 != pbVar9" identifier != identifier) )) ;) (expression_statement "MD5Init(s_00);" (call_expression "MD5Init(s_00)" identifier (argument_list "(s_00)" ( identifier ))) ;) (expression_statement "MD5Update(s_00,abStack_f4,0x40);" (call_expression "MD5Update(s_00,abStack_f4,0x40)" identifier (argument_list "(s_00,abStack_f4,0x40)" ( identifier , identifier , number_literal ))) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x5c,0x40)" ( identifier , number_literal , number_literal ))) ;) (do_statement "do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);" do (compound_statement "{\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    }" { (expression_statement "*pbVar7 = *pbVar7 ^ *pbVar4;" (assignment_expression "*pbVar7 = *pbVar7 ^ *pbVar4" (pointer_expression "*pbVar7" * identifier) = (binary_expression "*pbVar7 ^ *pbVar4" (pointer_expression "*pbVar7" * identifier) ^ (pointer_expression "*pbVar4" * identifier))) ;) (if_statement "if (pbVar4 == pbVar8) break;" if (parenthesized_expression "(pbVar4 == pbVar8)" ( (binary_expression "pbVar4 == pbVar8" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "pbVar4 = pbVar4 + 1;" (assignment_expression "pbVar4 = pbVar4 + 1" identifier = (binary_expression "pbVar4 + 1" identifier + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pbVar4 != pbVar9)" ( (binary_expression "pbVar4 != pbVar9" identifier != identifier) )) ;) }))) (expression_statement "MD5Init(s_00 + 1);" (call_expression "MD5Init(s_00 + 1)" identifier (argument_list "(s_00 + 1)" ( (binary_expression "s_00 + 1" identifier + number_literal) ))) ;) (expression_statement "pbVar4 = abStack_f4;" (assignment_expression "pbVar4 = abStack_f4" identifier = identifier) ;) (expression_statement "MD5Update(s_00 + 1,pbVar4,0x40);" (call_expression "MD5Update(s_00 + 1,pbVar4,0x40)" identifier (argument_list "(s_00 + 1,pbVar4,0x40)" ( (binary_expression "s_00 + 1" identifier + number_literal) , identifier , number_literal ))) ;) (expression_statement "keyv = &DAT_00000040;" (assignment_expression "keyv = &DAT_00000040" identifier = (pointer_expression "&DAT_00000040" & identifier)) ;) (expression_statement "(**(code **)(puVar10 + 0x4b1e4))();" (call_expression "(**(code **)(puVar10 + 0x4b1e4))()" (parenthesized_expression "(**(code **)(puVar10 + 0x4b1e4))" ( (pointer_expression "**(code **)(puVar10 + 0x4b1e4)" * (pointer_expression "*(code **)(puVar10 + 0x4b1e4)" * (cast_expression "(code **)(puVar10 + 0x4b1e4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4b1e4)" ( (binary_expression "puVar10 + 0x4b1e4" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (if_statement "if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key(pbVar4,keyv,0x10);\n    return;\n  }" if (parenthesized_expression "(iStack_b4 != **(int **)(puVar10 + 0x4bd0c))" ( (binary_expression "iStack_b4 != **(int **)(puVar10 + 0x4bd0c)" identifier != (pointer_expression "**(int **)(puVar10 + 0x4bd0c)" * (pointer_expression "*(int **)(puVar10 + 0x4bd0c)" * (cast_expression "(int **)(puVar10 + 0x4bd0c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bd0c)" ( (binary_expression "puVar10 + 0x4bd0c" identifier + number_literal) )))))) )) (compound_statement "{\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key(pbVar4,keyv,0x10);\n    return;\n  }" { (expression_statement "(**(code **)(puVar10 + 0x4bce4))();" (call_expression "(**(code **)(puVar10 + 0x4bce4))()" (parenthesized_expression "(**(code **)(puVar10 + 0x4bce4))" ( (pointer_expression "**(code **)(puVar10 + 0x4bce4)" * (pointer_expression "*(code **)(puVar10 + 0x4bce4)" * (cast_expression "(code **)(puVar10 + 0x4bce4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bce4)" ( (binary_expression "puVar10 + 0x4bce4" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "hmacmd5_key(pbVar4,keyv,0x10);" (call_expression "hmacmd5_key(pbVar4,keyv,0x10)" identifier (argument_list "(pbVar4,keyv,0x10)" ( identifier , identifier , number_literal ))) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  byte *pbVar2;\n  undefined1 *puVar3;\n  byte *pbVar4;\n  byte *pbVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  undefined1 *puStack_ac;\n  undefined *puStack_a8;\n  undefined4 uStack_a4;\n  undefined4 uStack_a0;\n  int iStack_9c;\n  undefined1 auStack_78 [92];\n  int local_1c;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(auStack_78);\n  iVar6 = param_2;\n  MD5Update(auStack_78,param_1);\n  MD5Final(param_3,auStack_78);\n  pbVar4 = &DAT_0000005c;\n  puVar3 = auStack_78;\n  (*(code *)PTR_smemclr_000be404)(auStack_78);\n  if (local_1c == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  puStack_ac = auStack_78;\n  uStack_a4 = param_3;\n  uStack_a0 = param_1;\n  iStack_9c = param_2;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(puVar3 + 0x5c);\n  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);\n  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }\n  return;\n}\n\n" (function_definition "void MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  byte *pbVar2;\n  undefined1 *puVar3;\n  byte *pbVar4;\n  byte *pbVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  undefined1 *puStack_ac;\n  undefined *puStack_a8;\n  undefined4 uStack_a4;\n  undefined4 uStack_a0;\n  int iStack_9c;\n  undefined1 auStack_78 [92];\n  int local_1c;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(auStack_78);\n  iVar6 = param_2;\n  MD5Update(auStack_78,param_1);\n  MD5Final(param_3,auStack_78);\n  pbVar4 = &DAT_0000005c;\n  puVar3 = auStack_78;\n  (*(code *)PTR_smemclr_000be404)(auStack_78);\n  if (local_1c == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  puStack_ac = auStack_78;\n  uStack_a4 = param_3;\n  uStack_a0 = param_1;\n  iStack_9c = param_2;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(puVar3 + 0x5c);\n  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);\n  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)" identifier (parameter_list "(undefined4 param_1,int param_2,undefined4 param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  byte *pbVar2;\n  undefined1 *puVar3;\n  byte *pbVar4;\n  byte *pbVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  undefined1 *puStack_ac;\n  undefined *puStack_a8;\n  undefined4 uStack_a4;\n  undefined4 uStack_a0;\n  int iStack_9c;\n  undefined1 auStack_78 [92];\n  int local_1c;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(auStack_78);\n  iVar6 = param_2;\n  MD5Update(auStack_78,param_1);\n  MD5Final(param_3,auStack_78);\n  pbVar4 = &DAT_0000005c;\n  puVar3 = auStack_78;\n  (*(code *)PTR_smemclr_000be404)(auStack_78);\n  if (local_1c == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  puStack_ac = auStack_78;\n  uStack_a4 = param_3;\n  uStack_a0 = param_1;\n  iStack_9c = param_2;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(puVar3 + 0x5c);\n  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);\n  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "undefined1 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "undefined *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "byte abStack_f4 [64];" type_identifier (array_declarator "abStack_f4 [64]" identifier [ number_literal ]) ;) (declaration "int iStack_b4;" primitive_type identifier ;) (declaration "undefined1 *puStack_ac;" type_identifier (pointer_declarator "*puStack_ac" * identifier) ;) (declaration "undefined *puStack_a8;" type_identifier (pointer_declarator "*puStack_a8" * identifier) ;) (declaration "undefined4 uStack_a4;" type_identifier identifier ;) (declaration "undefined4 uStack_a0;" type_identifier identifier ;) (declaration "int iStack_9c;" primitive_type identifier ;) (declaration "undefined1 auStack_78 [92];" type_identifier (array_declarator "auStack_78 [92]" identifier [ number_literal ]) ;) (declaration "int local_1c;" primitive_type identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_000bef2c;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000bef2c" identifier = identifier) ;) (expression_statement "local_1c = *(int *)PTR___stack_chk_guard_000bef2c;" (assignment_expression "local_1c = *(int *)PTR___stack_chk_guard_000bef2c" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000bef2c" * (cast_expression "(int *)PTR___stack_chk_guard_000bef2c" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "MD5Init(auStack_78);" (call_expression "MD5Init(auStack_78)" identifier (argument_list "(auStack_78)" ( identifier ))) ;) (expression_statement "iVar6 = param_2;" (assignment_expression "iVar6 = param_2" identifier = identifier) ;) (expression_statement "MD5Update(auStack_78,param_1);" (call_expression "MD5Update(auStack_78,param_1)" identifier (argument_list "(auStack_78,param_1)" ( identifier , identifier ))) ;) (expression_statement "MD5Final(param_3,auStack_78);" (call_expression "MD5Final(param_3,auStack_78)" identifier (argument_list "(param_3,auStack_78)" ( identifier , identifier ))) ;) (expression_statement "pbVar4 = &DAT_0000005c;" (assignment_expression "pbVar4 = &DAT_0000005c" identifier = (pointer_expression "&DAT_0000005c" & identifier)) ;) (expression_statement "puVar3 = auStack_78;" (assignment_expression "puVar3 = auStack_78" identifier = identifier) ;) (expression_statement "(*(code *)PTR_smemclr_000be404)(auStack_78);" (call_expression "(*(code *)PTR_smemclr_000be404)(auStack_78)" (parenthesized_expression "(*(code *)PTR_smemclr_000be404)" ( (pointer_expression "*(code *)PTR_smemclr_000be404" * (cast_expression "(code *)PTR_smemclr_000be404" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(auStack_78)" ( identifier ))) ;) (if_statement "if (local_1c == *(int *)puVar1) {\n    return;\n  }" if (parenthesized_expression "(local_1c == *(int *)puVar1)" ( (binary_expression "local_1c == *(int *)puVar1" identifier == (pointer_expression "*(int *)puVar1" * (cast_expression "(int *)puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "puVar10 = PTR___stack_chk_fail_000bef04;" (assignment_expression "puVar10 = PTR___stack_chk_fail_000bef04" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000bef04)();" (call_expression "(*(code *)PTR___stack_chk_fail_000bef04)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000bef04)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000bef04" * (cast_expression "(code *)PTR___stack_chk_fail_000bef04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puStack_a8 = puVar1;" (assignment_expression "puStack_a8 = puVar1" identifier = identifier) ;) (expression_statement "iStack_b4 = **(int **)(puVar10 + 0x4bd0c);" (assignment_expression "iStack_b4 = **(int **)(puVar10 + 0x4bd0c)" identifier = (pointer_expression "**(int **)(puVar10 + 0x4bd0c)" * (pointer_expression "*(int **)(puVar10 + 0x4bd0c)" * (cast_expression "(int **)(puVar10 + 0x4bd0c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bd0c)" ( (binary_expression "puVar10 + 0x4bd0c" identifier + number_literal) )))))) ;) (expression_statement "puStack_ac = auStack_78;" (assignment_expression "puStack_ac = auStack_78" identifier = identifier) ;) (expression_statement "uStack_a4 = param_3;" (assignment_expression "uStack_a4 = param_3" identifier = identifier) ;) (expression_statement "uStack_a0 = param_1;" (assignment_expression "uStack_a0 = param_1" identifier = identifier) ;) (expression_statement "iStack_9c = param_2;" (assignment_expression "iStack_9c = param_2" identifier = identifier) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x36,0x40)" ( identifier , number_literal , number_literal ))) ;) (if_statement "if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" if (parenthesized_expression "(iVar6 < 1)" ( (binary_expression "iVar6 < 1" identifier < number_literal) )) (compound_statement "{\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }" { (expression_statement "MD5Init(puVar3);" (call_expression "MD5Init(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "MD5Update(puVar3,abStack_f4,0x40);" (call_expression "MD5Update(puVar3,abStack_f4,0x40)" identifier (argument_list "(puVar3,abStack_f4,0x40)" ( identifier , identifier , number_literal ))) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x5c,0x40)" ( identifier , number_literal , number_literal ))) ;) }) (else_clause "else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" else (compound_statement "{\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" { (expression_statement "pbVar7 = abStack_f4;" (assignment_expression "pbVar7 = abStack_f4" identifier = identifier) ;) (expression_statement "pbVar8 = pbVar4 + iVar6 + -1;" (assignment_expression "pbVar8 = pbVar4 + iVar6 + -1" identifier = (binary_expression "pbVar4 + iVar6 + -1" (binary_expression "pbVar4 + iVar6" identifier + identifier) + number_literal)) ;) (expression_statement "pbVar9 = pbVar4 + 0x40;" (assignment_expression "pbVar9 = pbVar4 + 0x40" identifier = (binary_expression "pbVar4 + 0x40" identifier + number_literal)) ;) (expression_statement "pbVar2 = pbVar7;" (assignment_expression "pbVar2 = pbVar7" identifier = identifier) ;) (expression_statement "pbVar5 = pbVar4;" (assignment_expression "pbVar5 = pbVar4" identifier = identifier) ;) (do_statement "do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);" do (compound_statement "{\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    }" { (expression_statement "*pbVar2 = *pbVar2 ^ *pbVar5;" (assignment_expression "*pbVar2 = *pbVar2 ^ *pbVar5" (pointer_expression "*pbVar2" * identifier) = (binary_expression "*pbVar2 ^ *pbVar5" (pointer_expression "*pbVar2" * identifier) ^ (pointer_expression "*pbVar5" * identifier))) ;) (if_statement "if (pbVar5 == pbVar8) break;" if (parenthesized_expression "(pbVar5 == pbVar8)" ( (binary_expression "pbVar5 == pbVar8" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" identifier = (binary_expression "pbVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pbVar5 != pbVar9)" ( (binary_expression "pbVar5 != pbVar9" identifier != identifier) )) ;) (expression_statement "MD5Init(puVar3);" (call_expression "MD5Init(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "MD5Update(puVar3,abStack_f4,0x40);" (call_expression "MD5Update(puVar3,abStack_f4,0x40)" identifier (argument_list "(puVar3,abStack_f4,0x40)" ( identifier , identifier , number_literal ))) ;) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" ( (pointer_expression "**(code **)(puVar10 + 0x4bc30)" * (pointer_expression "*(code **)(puVar10 + 0x4bc30)" * (cast_expression "(code **)(puVar10 + 0x4bc30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bc30)" ( (binary_expression "puVar10 + 0x4bc30" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x5c,0x40)" ( identifier , number_literal , number_literal ))) ;) (do_statement "do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);" do (compound_statement "{\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    }" { (expression_statement "*pbVar7 = *pbVar7 ^ *pbVar4;" (assignment_expression "*pbVar7 = *pbVar7 ^ *pbVar4" (pointer_expression "*pbVar7" * identifier) = (binary_expression "*pbVar7 ^ *pbVar4" (pointer_expression "*pbVar7" * identifier) ^ (pointer_expression "*pbVar4" * identifier))) ;) (if_statement "if (pbVar4 == pbVar8) break;" if (parenthesized_expression "(pbVar4 == pbVar8)" ( (binary_expression "pbVar4 == pbVar8" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "pbVar4 = pbVar4 + 1;" (assignment_expression "pbVar4 = pbVar4 + 1" identifier = (binary_expression "pbVar4 + 1" identifier + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pbVar4 != pbVar9)" ( (binary_expression "pbVar4 != pbVar9" identifier != identifier) )) ;) }))) (expression_statement "MD5Init(puVar3 + 0x5c);" (call_expression "MD5Init(puVar3 + 0x5c)" identifier (argument_list "(puVar3 + 0x5c)" ( (binary_expression "puVar3 + 0x5c" identifier + number_literal) ))) ;) (expression_statement "MD5Update(puVar3 + 0x5c,abStack_f4,0x40);" (call_expression "MD5Update(puVar3 + 0x5c,abStack_f4,0x40)" identifier (argument_list "(puVar3 + 0x5c,abStack_f4,0x40)" ( (binary_expression "puVar3 + 0x5c" identifier + number_literal) , identifier , number_literal ))) ;) (expression_statement "(**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);" (call_expression "(**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4b1e4))" ( (pointer_expression "**(code **)(puVar10 + 0x4b1e4)" * (pointer_expression "*(code **)(puVar10 + 0x4b1e4)" * (cast_expression "(code **)(puVar10 + 0x4b1e4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4b1e4)" ( (binary_expression "puVar10 + 0x4b1e4" identifier + number_literal) ))))) )) (argument_list "(abStack_f4,0x40)" ( identifier , number_literal ))) ;) (if_statement "if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }" if (parenthesized_expression "(iStack_b4 != **(int **)(puVar10 + 0x4bd0c))" ( (binary_expression "iStack_b4 != **(int **)(puVar10 + 0x4bd0c)" identifier != (pointer_expression "**(int **)(puVar10 + 0x4bd0c)" * (pointer_expression "*(int **)(puVar10 + 0x4bd0c)" * (cast_expression "(int **)(puVar10 + 0x4bd0c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bd0c)" ( (binary_expression "puVar10 + 0x4bd0c" identifier + number_literal) )))))) )) (compound_statement "{\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }" { (expression_statement "(**(code **)(puVar10 + 0x4bce4))();" (call_expression "(**(code **)(puVar10 + 0x4bce4))()" (parenthesized_expression "(**(code **)(puVar10 + 0x4bce4))" ( (pointer_expression "**(code **)(puVar10 + 0x4bce4)" * (pointer_expression "*(code **)(puVar10 + 0x4bce4)" * (cast_expression "(code **)(puVar10 + 0x4bce4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar10 + 0x4bce4)" ( (binary_expression "puVar10 + 0x4bce4" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "hmacmd5_key();" (call_expression "hmacmd5_key()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , LIT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , LIT , LIT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) ^ (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , LIT , LIT ))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) ^ (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) }))) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , LIT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) })) (return_statement return ;) })))
(function_definition "void MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)\n\n{\n  undefined *puVar1;\n  byte *pbVar2;\n  undefined1 *puVar3;\n  byte *pbVar4;\n  byte *pbVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  undefined1 *puStack_ac;\n  undefined *puStack_a8;\n  undefined4 uStack_a4;\n  undefined4 uStack_a0;\n  int iStack_9c;\n  undefined1 auStack_78 [92];\n  int local_1c;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(auStack_78);\n  iVar6 = param_2;\n  MD5Update(auStack_78,param_1);\n  MD5Final(param_3,auStack_78);\n  pbVar4 = &DAT_0000005c;\n  puVar3 = auStack_78;\n  (*(code *)PTR_smemclr_000be404)(auStack_78);\n  if (local_1c == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  puStack_ac = auStack_78;\n  uStack_a4 = param_3;\n  uStack_a0 = param_1;\n  iStack_9c = param_2;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(puVar3 + 0x5c);\n  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);\n  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "MD5Simple(undefined4 param_1,int param_2,undefined4 param_3)" (identifier "MD5Simple") (parameter_list "(undefined4 param_1,int param_2,undefined4 param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined *puVar1;\n  byte *pbVar2;\n  undefined1 *puVar3;\n  byte *pbVar4;\n  byte *pbVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  byte *pbVar9;\n  undefined *puVar10;\n  byte abStack_f4 [64];\n  int iStack_b4;\n  undefined1 *puStack_ac;\n  undefined *puStack_a8;\n  undefined4 uStack_a4;\n  undefined4 uStack_a0;\n  int iStack_9c;\n  undefined1 auStack_78 [92];\n  int local_1c;\n  \n  puVar1 = PTR___stack_chk_guard_000bef2c;\n  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;\n  MD5Init(auStack_78);\n  iVar6 = param_2;\n  MD5Update(auStack_78,param_1);\n  MD5Final(param_3,auStack_78);\n  pbVar4 = &DAT_0000005c;\n  puVar3 = auStack_78;\n  (*(code *)PTR_smemclr_000be404)(auStack_78);\n  if (local_1c == *(int *)puVar1) {\n    return;\n  }\n  puVar10 = PTR___stack_chk_fail_000bef04;\n  (*(code *)PTR___stack_chk_fail_000bef04)();\n  puStack_a8 = puVar1;\n  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);\n  puStack_ac = auStack_78;\n  uStack_a4 = param_3;\n  uStack_a0 = param_1;\n  iStack_9c = param_2;\n  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);\n  if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }\n  MD5Init(puVar3 + 0x5c);\n  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);\n  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);\n  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }\n  return;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "byte *pbVar2;" (type_identifier "byte") (pointer_declarator "*pbVar2" (* "*") (identifier "pbVar2")) (; ";")) (declaration "undefined1 *puVar3;" (type_identifier "undefined1") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "byte *pbVar4;" (type_identifier "byte") (pointer_declarator "*pbVar4" (* "*") (identifier "pbVar4")) (; ";")) (declaration "byte *pbVar5;" (type_identifier "byte") (pointer_declarator "*pbVar5" (* "*") (identifier "pbVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "byte *pbVar7;" (type_identifier "byte") (pointer_declarator "*pbVar7" (* "*") (identifier "pbVar7")) (; ";")) (declaration "byte *pbVar8;" (type_identifier "byte") (pointer_declarator "*pbVar8" (* "*") (identifier "pbVar8")) (; ";")) (declaration "byte *pbVar9;" (type_identifier "byte") (pointer_declarator "*pbVar9" (* "*") (identifier "pbVar9")) (; ";")) (declaration "undefined *puVar10;" (type_identifier "undefined") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "byte abStack_f4 [64];" (type_identifier "byte") (array_declarator "abStack_f4 [64]" (identifier "abStack_f4") ([ "[") (number_literal "64") (] "]")) (; ";")) (declaration "int iStack_b4;" (primitive_type "int") (identifier "iStack_b4") (; ";")) (declaration "undefined1 *puStack_ac;" (type_identifier "undefined1") (pointer_declarator "*puStack_ac" (* "*") (identifier "puStack_ac")) (; ";")) (declaration "undefined *puStack_a8;" (type_identifier "undefined") (pointer_declarator "*puStack_a8" (* "*") (identifier "puStack_a8")) (; ";")) (declaration "undefined4 uStack_a4;" (type_identifier "undefined4") (identifier "uStack_a4") (; ";")) (declaration "undefined4 uStack_a0;" (type_identifier "undefined4") (identifier "uStack_a0") (; ";")) (declaration "int iStack_9c;" (primitive_type "int") (identifier "iStack_9c") (; ";")) (declaration "undefined1 auStack_78 [92];" (type_identifier "undefined1") (array_declarator "auStack_78 [92]" (identifier "auStack_78") ([ "[") (number_literal "92") (] "]")) (; ";")) (declaration "int local_1c;" (primitive_type "int") (identifier "local_1c") (; ";")) (expression_statement "puVar1 = PTR___stack_chk_guard_000bef2c;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000bef2c" (identifier "puVar1") (= "=") (identifier "PTR___stack_chk_guard_000bef2c")) (; ";")) (expression_statement "local_1c = *(int *)PTR___stack_chk_guard_000bef2c;" (assignment_expression "local_1c = *(int *)PTR___stack_chk_guard_000bef2c" (identifier "local_1c") (= "=") (pointer_expression "*(int *)PTR___stack_chk_guard_000bef2c" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_000bef2c" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000bef2c")))) (; ";")) (expression_statement "MD5Init(auStack_78);" (call_expression "MD5Init(auStack_78)" (identifier "MD5Init") (argument_list "(auStack_78)" (( "(") (identifier "auStack_78") () ")"))) (; ";")) (expression_statement "iVar6 = param_2;" (assignment_expression "iVar6 = param_2" (identifier "iVar6") (= "=") (identifier "param_2")) (; ";")) (expression_statement "MD5Update(auStack_78,param_1);" (call_expression "MD5Update(auStack_78,param_1)" (identifier "MD5Update") (argument_list "(auStack_78,param_1)" (( "(") (identifier "auStack_78") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "MD5Final(param_3,auStack_78);" (call_expression "MD5Final(param_3,auStack_78)" (identifier "MD5Final") (argument_list "(param_3,auStack_78)" (( "(") (identifier "param_3") (, ",") (identifier "auStack_78") () ")"))) (; ";")) (expression_statement "pbVar4 = &DAT_0000005c;" (assignment_expression "pbVar4 = &DAT_0000005c" (identifier "pbVar4") (= "=") (pointer_expression "&DAT_0000005c" (& "&") (identifier "DAT_0000005c"))) (; ";")) (expression_statement "puVar3 = auStack_78;" (assignment_expression "puVar3 = auStack_78" (identifier "puVar3") (= "=") (identifier "auStack_78")) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000be404)(auStack_78);" (call_expression "(*(code *)PTR_smemclr_000be404)(auStack_78)" (parenthesized_expression "(*(code *)PTR_smemclr_000be404)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000be404" (* "*") (cast_expression "(code *)PTR_smemclr_000be404" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000be404"))) () ")")) (argument_list "(auStack_78)" (( "(") (identifier "auStack_78") () ")"))) (; ";")) (if_statement "if (local_1c == *(int *)puVar1) {\n    return;\n  }" (if "if") (parenthesized_expression "(local_1c == *(int *)puVar1)" (( "(") (binary_expression "local_1c == *(int *)puVar1" (identifier "local_1c") (== "==") (pointer_expression "*(int *)puVar1" (* "*") (cast_expression "(int *)puVar1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1")))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "puVar10 = PTR___stack_chk_fail_000bef04;" (assignment_expression "puVar10 = PTR___stack_chk_fail_000bef04" (identifier "puVar10") (= "=") (identifier "PTR___stack_chk_fail_000bef04")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_000bef04)();" (call_expression "(*(code *)PTR___stack_chk_fail_000bef04)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000bef04)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000bef04" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000bef04" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000bef04"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "puStack_a8 = puVar1;" (assignment_expression "puStack_a8 = puVar1" (identifier "puStack_a8") (= "=") (identifier "puVar1")) (; ";")) (expression_statement "iStack_b4 = **(int **)(puVar10 + 0x4bd0c);" (assignment_expression "iStack_b4 = **(int **)(puVar10 + 0x4bd0c)" (identifier "iStack_b4") (= "=") (pointer_expression "**(int **)(puVar10 + 0x4bd0c)" (* "*") (pointer_expression "*(int **)(puVar10 + 0x4bd0c)" (* "*") (cast_expression "(int **)(puVar10 + 0x4bd0c)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar10 + 0x4bd0c)" (( "(") (binary_expression "puVar10 + 0x4bd0c" (identifier "puVar10") (+ "+") (number_literal "0x4bd0c")) () ")")))))) (; ";")) (expression_statement "puStack_ac = auStack_78;" (assignment_expression "puStack_ac = auStack_78" (identifier "puStack_ac") (= "=") (identifier "auStack_78")) (; ";")) (expression_statement "uStack_a4 = param_3;" (assignment_expression "uStack_a4 = param_3" (identifier "uStack_a4") (= "=") (identifier "param_3")) (; ";")) (expression_statement "uStack_a0 = param_1;" (assignment_expression "uStack_a0 = param_1" (identifier "uStack_a0") (= "=") (identifier "param_1")) (; ";")) (expression_statement "iStack_9c = param_2;" (assignment_expression "iStack_9c = param_2" (identifier "iStack_9c") (= "=") (identifier "param_2")) (; ";")) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" (( "(") (pointer_expression "**(code **)(puVar10 + 0x4bc30)" (* "*") (pointer_expression "*(code **)(puVar10 + 0x4bc30)" (* "*") (cast_expression "(code **)(puVar10 + 0x4bc30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar10 + 0x4bc30)" (( "(") (binary_expression "puVar10 + 0x4bc30" (identifier "puVar10") (+ "+") (number_literal "0x4bc30")) () ")"))))) () ")")) (argument_list "(abStack_f4,0x36,0x40)" (( "(") (identifier "abStack_f4") (, ",") (number_literal "0x36") (, ",") (number_literal "0x40") () ")"))) (; ";")) (if_statement "if (iVar6 < 1) {\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }\n  else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" (if "if") (parenthesized_expression "(iVar6 < 1)" (( "(") (binary_expression "iVar6 < 1" (identifier "iVar6") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n  }" ({ "{") (expression_statement "MD5Init(puVar3);" (call_expression "MD5Init(puVar3)" (identifier "MD5Init") (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (expression_statement "MD5Update(puVar3,abStack_f4,0x40);" (call_expression "MD5Update(puVar3,abStack_f4,0x40)" (identifier "MD5Update") (argument_list "(puVar3,abStack_f4,0x40)" (( "(") (identifier "puVar3") (, ",") (identifier "abStack_f4") (, ",") (number_literal "0x40") () ")"))) (; ";")) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" (( "(") (pointer_expression "**(code **)(puVar10 + 0x4bc30)" (* "*") (pointer_expression "*(code **)(puVar10 + 0x4bc30)" (* "*") (cast_expression "(code **)(puVar10 + 0x4bc30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar10 + 0x4bc30)" (( "(") (binary_expression "puVar10 + 0x4bc30" (identifier "puVar10") (+ "+") (number_literal "0x4bc30")) () ")"))))) () ")")) (argument_list "(abStack_f4,0x5c,0x40)" (( "(") (identifier "abStack_f4") (, ",") (number_literal "0x5c") (, ",") (number_literal "0x40") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" (else "else") (compound_statement "{\n    pbVar7 = abStack_f4;\n    pbVar8 = pbVar4 + iVar6 + -1;\n    pbVar9 = pbVar4 + 0x40;\n    pbVar2 = pbVar7;\n    pbVar5 = pbVar4;\n    do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);\n    MD5Init(puVar3);\n    MD5Update(puVar3,abStack_f4,0x40);\n    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);\n    do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);\n  }" ({ "{") (expression_statement "pbVar7 = abStack_f4;" (assignment_expression "pbVar7 = abStack_f4" (identifier "pbVar7") (= "=") (identifier "abStack_f4")) (; ";")) (expression_statement "pbVar8 = pbVar4 + iVar6 + -1;" (assignment_expression "pbVar8 = pbVar4 + iVar6 + -1" (identifier "pbVar8") (= "=") (binary_expression "pbVar4 + iVar6 + -1" (binary_expression "pbVar4 + iVar6" (identifier "pbVar4") (+ "+") (identifier "iVar6")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "pbVar9 = pbVar4 + 0x40;" (assignment_expression "pbVar9 = pbVar4 + 0x40" (identifier "pbVar9") (= "=") (binary_expression "pbVar4 + 0x40" (identifier "pbVar4") (+ "+") (number_literal "0x40"))) (; ";")) (expression_statement "pbVar2 = pbVar7;" (assignment_expression "pbVar2 = pbVar7" (identifier "pbVar2") (= "=") (identifier "pbVar7")) (; ";")) (expression_statement "pbVar5 = pbVar4;" (assignment_expression "pbVar5 = pbVar4" (identifier "pbVar5") (= "=") (identifier "pbVar4")) (; ";")) (do_statement "do {\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    } while (pbVar5 != pbVar9);" (do "do") (compound_statement "{\n      *pbVar2 = *pbVar2 ^ *pbVar5;\n      if (pbVar5 == pbVar8) break;\n      pbVar5 = pbVar5 + 1;\n      pbVar2 = pbVar2 + 1;\n    }" ({ "{") (expression_statement "*pbVar2 = *pbVar2 ^ *pbVar5;" (assignment_expression "*pbVar2 = *pbVar2 ^ *pbVar5" (pointer_expression "*pbVar2" (* "*") (identifier "pbVar2")) (= "=") (binary_expression "*pbVar2 ^ *pbVar5" (pointer_expression "*pbVar2" (* "*") (identifier "pbVar2")) (^ "^") (pointer_expression "*pbVar5" (* "*") (identifier "pbVar5")))) (; ";")) (if_statement "if (pbVar5 == pbVar8) break;" (if "if") (parenthesized_expression "(pbVar5 == pbVar8)" (( "(") (binary_expression "pbVar5 == pbVar8" (identifier "pbVar5") (== "==") (identifier "pbVar8")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" (identifier "pbVar5") (= "=") (binary_expression "pbVar5 + 1" (identifier "pbVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar2 = pbVar2 + 1;" (assignment_expression "pbVar2 = pbVar2 + 1" (identifier "pbVar2") (= "=") (binary_expression "pbVar2 + 1" (identifier "pbVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pbVar5 != pbVar9)" (( "(") (binary_expression "pbVar5 != pbVar9" (identifier "pbVar5") (!= "!=") (identifier "pbVar9")) () ")")) (; ";")) (expression_statement "MD5Init(puVar3);" (call_expression "MD5Init(puVar3)" (identifier "MD5Init") (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (expression_statement "MD5Update(puVar3,abStack_f4,0x40);" (call_expression "MD5Update(puVar3,abStack_f4,0x40)" (identifier "MD5Update") (argument_list "(puVar3,abStack_f4,0x40)" (( "(") (identifier "puVar3") (, ",") (identifier "abStack_f4") (, ",") (number_literal "0x40") () ")"))) (; ";")) (expression_statement "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);" (call_expression "(**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4bc30))" (( "(") (pointer_expression "**(code **)(puVar10 + 0x4bc30)" (* "*") (pointer_expression "*(code **)(puVar10 + 0x4bc30)" (* "*") (cast_expression "(code **)(puVar10 + 0x4bc30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar10 + 0x4bc30)" (( "(") (binary_expression "puVar10 + 0x4bc30" (identifier "puVar10") (+ "+") (number_literal "0x4bc30")) () ")"))))) () ")")) (argument_list "(abStack_f4,0x5c,0x40)" (( "(") (identifier "abStack_f4") (, ",") (number_literal "0x5c") (, ",") (number_literal "0x40") () ")"))) (; ";")) (do_statement "do {\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    } while (pbVar4 != pbVar9);" (do "do") (compound_statement "{\n      *pbVar7 = *pbVar7 ^ *pbVar4;\n      if (pbVar4 == pbVar8) break;\n      pbVar4 = pbVar4 + 1;\n      pbVar7 = pbVar7 + 1;\n    }" ({ "{") (expression_statement "*pbVar7 = *pbVar7 ^ *pbVar4;" (assignment_expression "*pbVar7 = *pbVar7 ^ *pbVar4" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (= "=") (binary_expression "*pbVar7 ^ *pbVar4" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (^ "^") (pointer_expression "*pbVar4" (* "*") (identifier "pbVar4")))) (; ";")) (if_statement "if (pbVar4 == pbVar8) break;" (if "if") (parenthesized_expression "(pbVar4 == pbVar8)" (( "(") (binary_expression "pbVar4 == pbVar8" (identifier "pbVar4") (== "==") (identifier "pbVar8")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "pbVar4 = pbVar4 + 1;" (assignment_expression "pbVar4 = pbVar4 + 1" (identifier "pbVar4") (= "=") (binary_expression "pbVar4 + 1" (identifier "pbVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" (identifier "pbVar7") (= "=") (binary_expression "pbVar7 + 1" (identifier "pbVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pbVar4 != pbVar9)" (( "(") (binary_expression "pbVar4 != pbVar9" (identifier "pbVar4") (!= "!=") (identifier "pbVar9")) () ")")) (; ";")) (} "}")))) (expression_statement "MD5Init(puVar3 + 0x5c);" (call_expression "MD5Init(puVar3 + 0x5c)" (identifier "MD5Init") (argument_list "(puVar3 + 0x5c)" (( "(") (binary_expression "puVar3 + 0x5c" (identifier "puVar3") (+ "+") (number_literal "0x5c")) () ")"))) (; ";")) (expression_statement "MD5Update(puVar3 + 0x5c,abStack_f4,0x40);" (call_expression "MD5Update(puVar3 + 0x5c,abStack_f4,0x40)" (identifier "MD5Update") (argument_list "(puVar3 + 0x5c,abStack_f4,0x40)" (( "(") (binary_expression "puVar3 + 0x5c" (identifier "puVar3") (+ "+") (number_literal "0x5c")) (, ",") (identifier "abStack_f4") (, ",") (number_literal "0x40") () ")"))) (; ";")) (expression_statement "(**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);" (call_expression "(**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40)" (parenthesized_expression "(**(code **)(puVar10 + 0x4b1e4))" (( "(") (pointer_expression "**(code **)(puVar10 + 0x4b1e4)" (* "*") (pointer_expression "*(code **)(puVar10 + 0x4b1e4)" (* "*") (cast_expression "(code **)(puVar10 + 0x4b1e4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar10 + 0x4b1e4)" (( "(") (binary_expression "puVar10 + 0x4b1e4" (identifier "puVar10") (+ "+") (number_literal "0x4b1e4")) () ")"))))) () ")")) (argument_list "(abStack_f4,0x40)" (( "(") (identifier "abStack_f4") (, ",") (number_literal "0x40") () ")"))) (; ";")) (if_statement "if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }" (if "if") (parenthesized_expression "(iStack_b4 != **(int **)(puVar10 + 0x4bd0c))" (( "(") (binary_expression "iStack_b4 != **(int **)(puVar10 + 0x4bd0c)" (identifier "iStack_b4") (!= "!=") (pointer_expression "**(int **)(puVar10 + 0x4bd0c)" (* "*") (pointer_expression "*(int **)(puVar10 + 0x4bd0c)" (* "*") (cast_expression "(int **)(puVar10 + 0x4bd0c)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar10 + 0x4bd0c)" (( "(") (binary_expression "puVar10 + 0x4bd0c" (identifier "puVar10") (+ "+") (number_literal "0x4bd0c")) () ")")))))) () ")")) (compound_statement "{\n    (**(code **)(puVar10 + 0x4bce4))();\n    hmacmd5_key();\n    return;\n  }" ({ "{") (expression_statement "(**(code **)(puVar10 + 0x4bce4))();" (call_expression "(**(code **)(puVar10 + 0x4bce4))()" (parenthesized_expression "(**(code **)(puVar10 + 0x4bce4))" (( "(") (pointer_expression "**(code **)(puVar10 + 0x4bce4)" (* "*") (pointer_expression "*(code **)(puVar10 + 0x4bce4)" (* "*") (cast_expression "(code **)(puVar10 + 0x4bce4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar10 + 0x4bce4)" (( "(") (binary_expression "puVar10 + 0x4bce4" (identifier "puVar10") (+ "+") (number_literal "0x4bce4")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "hmacmd5_key();" (call_expression "hmacmd5_key()" (identifier "hmacmd5_key") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) consequence: (compound_statement (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (number_literal) (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)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (number_literal) (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (number_literal) (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (return_statement))) (return_statement))))

void MASKED(undefined4 param_1,int param_2,undefined4 param_3)

{
  undefined *puVar1;
  byte *pbVar2;
  undefined1 *puVar3;
  byte *pbVar4;
  byte *pbVar5;
  int iVar6;
  byte *pbVar7;
  byte *pbVar8;
  byte *pbVar9;
  undefined *puVar10;
  byte abStack_f4 [64];
  int iStack_b4;
  undefined1 *puStack_ac;
  undefined *puStack_a8;
  undefined4 uStack_a4;
  undefined4 uStack_a0;
  int iStack_9c;
  undefined1 auStack_78 [92];
  int local_1c;
  
  puVar1 = PTR___stack_chk_guard_000bef2c;
  local_1c = *(int *)PTR___stack_chk_guard_000bef2c;
  MD5Init(auStack_78);
  iVar6 = param_2;
  MD5Update(auStack_78,param_1);
  MD5Final(param_3,auStack_78);
  pbVar4 = &DAT_0000005c;
  puVar3 = auStack_78;
  (*(code *)PTR_smemclr_000be404)(auStack_78);
  if (local_1c == *(int *)puVar1) {
    return;
  }
  puVar10 = PTR___stack_chk_fail_000bef04;
  (*(code *)PTR___stack_chk_fail_000bef04)();
  puStack_a8 = puVar1;
  iStack_b4 = **(int **)(puVar10 + 0x4bd0c);
  puStack_ac = auStack_78;
  uStack_a4 = param_3;
  uStack_a0 = param_1;
  iStack_9c = param_2;
  (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x36,0x40);
  if (iVar6 < 1) {
    MD5Init(puVar3);
    MD5Update(puVar3,abStack_f4,0x40);
    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);
  }
  else {
    pbVar7 = abStack_f4;
    pbVar8 = pbVar4 + iVar6 + -1;
    pbVar9 = pbVar4 + 0x40;
    pbVar2 = pbVar7;
    pbVar5 = pbVar4;
    do {
      *pbVar2 = *pbVar2 ^ *pbVar5;
      if (pbVar5 == pbVar8) break;
      pbVar5 = pbVar5 + 1;
      pbVar2 = pbVar2 + 1;
    } while (pbVar5 != pbVar9);
    MD5Init(puVar3);
    MD5Update(puVar3,abStack_f4,0x40);
    (**(code **)(puVar10 + 0x4bc30))(abStack_f4,0x5c,0x40);
    do {
      *pbVar7 = *pbVar7 ^ *pbVar4;
      if (pbVar4 == pbVar8) break;
      pbVar4 = pbVar4 + 1;
      pbVar7 = pbVar7 + 1;
    } while (pbVar4 != pbVar9);
  }
  MD5Init(puVar3 + 0x5c);
  MD5Update(puVar3 + 0x5c,abStack_f4,0x40);
  (**(code **)(puVar10 + 0x4b1e4))(abStack_f4,0x40);
  if (iStack_b4 != **(int **)(puVar10 + 0x4bd0c)) {
    (**(code **)(puVar10 + 0x4bce4))();
    hmacmd5_key();
    return;
  }
  return;
}

