
/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

int _tr_tally(deflate_state *s,uint dist,uint lc)

{
  byte bVar1;
  uInt uVar2;
  
  uVar2 = s->last_lit;
  s->d_buf[uVar2] = (ushf)dist;
  s->last_lit = uVar2 + 1;
  s->l_buf[uVar2] = (uchf)lc;
  if (dist == 0) {
    s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1;
  }
  else {
    bVar1 = _length_code[lc];
    s->matches = s->matches + 1;
    s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1;
    if (dist - 1 < 0x100) {
      bVar1 = _length_code[dist + 0xff];
    }
    else {
      bVar1 = (&DAT_00022640)[dist - 1 >> 7];
    }
    s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1;
  }
  return (uint)(s->lit_bufsize - 1 == s->last_lit);
}



/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

bool FUN_0001c3f0(int param_1,int param_2,int param_3)

{
  short *psVar1;
  byte bVar2;
  int iVar3;
  
  iVar3 = *(int *)(param_1 + 0x16a0);
  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;
  *(int *)(param_1 + 0x16a0) = iVar3 + 1;
  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;
  if (param_2 == 0) {
    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);
    *psVar1 = *psVar1 + 1;
  }
  else {
    bVar2 = (&DAT_00022440)[param_3];
    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;
    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);
    *psVar1 = *psVar1 + 1;
    if (param_2 - 1U < 0x100) {
      bVar2 = (&DAT_0002253f)[param_2];
    }
    else {
      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];
    }
    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);
    *psVar1 = *psVar1 + 1;
  }
  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);
}


PUSH EDI
PUSH ESI
PUSH EBX
MOV EAX,dword ptr [ESP + 0x10]
MOV ECX,dword ptr [ESP + 0x14]
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x00012603
ADD ESI,0xbbfc
MOV EDX,dword ptr [EAX + 0x16a0]
MOV EDI,dword ptr [EAX + 0x16a4]
TEST ECX,ECX
MOV word ptr [EDI + EDX*0x2],CX
LEA EDI,[EDX + 0x1]
MOV dword ptr [EAX + 0x16a0],EDI
MOV EDI,dword ptr [EAX + 0x1698]
MOV byte ptr [EDI + EDX*0x1],BL
JZ 0x0001c490
MOVZX EBX,byte ptr [ESI + EBX*0x1 + 0xffffa440]
LEA EDX,[ECX + -0x1]
ADD dword ptr [EAX + 0x16b0],0x1
ADD word ptr [EAX + EBX*0x4 + 0x498],0x1
CMP EDX,0xff
JBE 0x0001c480
SHR EDX,0x7
MOVZX EDX,byte ptr [ESI + EDX*0x1 + 0xffffa640]
ADD word ptr [EAX + EDX*0x4 + 0x988],0x1
MOV ESI,dword ptr [EAX + 0x169c]
POP EBX
LEA EDX,[ESI + -0x1]
CMP EDX,dword ptr [EAX + 0x16a0]
POP ESI
POP EDI
SETZ AL
MOVZX EAX,AL
RET
MOVZX EDX,byte ptr [ESI + ECX*0x1 + 0xffffa53f]
JMP 0x0001c45e
ADD word ptr [EAX + EBX*0x4 + 0x94],0x1
JMP 0x0001c467
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n\nbool FUN_0001c3f0(int param_1,int param_2,int param_3)\n\n{\n  short *psVar1;\n  byte bVar2;\n  int iVar3;\n  \n  iVar3 = *(int *)(param_1 + 0x16a0);\n  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;\n  *(int *)(param_1 + 0x16a0) = iVar3 + 1;\n  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;\n  if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);\n}\n\n" comment (function_definition "bool FUN_0001c3f0(int param_1,int param_2,int param_3)\n\n{\n  short *psVar1;\n  byte bVar2;\n  int iVar3;\n  \n  iVar3 = *(int *)(param_1 + 0x16a0);\n  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;\n  *(int *)(param_1 + 0x16a0) = iVar3 + 1;\n  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;\n  if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);\n}" primitive_type (function_declarator "FUN_0001c3f0(int param_1,int param_2,int param_3)" identifier (parameter_list "(int param_1,int param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  short *psVar1;\n  byte bVar2;\n  int iVar3;\n  \n  iVar3 = *(int *)(param_1 + 0x16a0);\n  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;\n  *(int *)(param_1 + 0x16a0) = iVar3 + 1;\n  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;\n  if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);\n}" { (declaration "short *psVar1;" (sized_type_specifier "short" short) (pointer_declarator "*psVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x16a0);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x16a0)" identifier = (pointer_expression "*(int *)(param_1 + 0x16a0)" * (cast_expression "(int *)(param_1 + 0x16a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) ))))) ;) (expression_statement "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;" (assignment_expression "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2" (pointer_expression "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" * (cast_expression "(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" ( (binary_expression "*(int *)(param_1 + 0x16a4) + iVar3 * 2" (pointer_expression "*(int *)(param_1 + 0x16a4)" * (cast_expression "(int *)(param_1 + 0x16a4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a4)" ( (binary_expression "param_1 + 0x16a4" identifier + number_literal) )))) + (binary_expression "iVar3 * 2" identifier * number_literal)) )))) = (cast_expression "(short)param_2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "*(int *)(param_1 + 0x16a0) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + 0x16a0) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + 0x16a0)" * (cast_expression "(int *)(param_1 + 0x16a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;" (assignment_expression "*(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3" (pointer_expression "*(char *)(*(int *)(param_1 + 0x1698) + iVar3)" * (cast_expression "(char *)(*(int *)(param_1 + 0x1698) + iVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1698) + iVar3)" ( (binary_expression "*(int *)(param_1 + 0x1698) + iVar3" (pointer_expression "*(int *)(param_1 + 0x1698)" * (cast_expression "(int *)(param_1 + 0x1698)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1698)" ( (binary_expression "param_1 + 0x1698" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (if_statement "if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" { (expression_statement "psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x94 + param_3 * 4)" identifier = (cast_expression "(short *)(param_1 + 0x94 + param_3 * 4)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x94 + param_3 * 4)" ( (binary_expression "param_1 + 0x94 + param_3 * 4" (binary_expression "param_1 + 0x94" identifier + number_literal) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) ;) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" * identifier) = (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" * identifier) + number_literal)) ;) }) (else_clause "else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" else (compound_statement "{\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" { (expression_statement "bVar2 = (&DAT_00022440)[param_3];" (assignment_expression "bVar2 = (&DAT_00022440)[param_3]" identifier = (subscript_expression "(&DAT_00022440)[param_3]" (parenthesized_expression "(&DAT_00022440)" ( (pointer_expression "&DAT_00022440" & identifier) )) [ identifier ])) ;) (expression_statement "*(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;" (assignment_expression "*(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1" (pointer_expression "*(int *)(param_1 + 0x16b0)" * (cast_expression "(int *)(param_1 + 0x16b0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b0)" ( (binary_expression "param_1 + 0x16b0" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x16b0) + 1" (pointer_expression "*(int *)(param_1 + 0x16b0)" * (cast_expression "(int *)(param_1 + 0x16b0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b0)" ( (binary_expression "param_1 + 0x16b0" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4)" identifier = (cast_expression "(short *)(param_1 + 0x498 + (uint)bVar2 * 4)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x498 + (uint)bVar2 * 4)" ( (binary_expression "param_1 + 0x498 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x498" identifier + number_literal) + (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) )))) ;) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" * identifier) = (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" * identifier) + number_literal)) ;) (if_statement "if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" if (parenthesized_expression "(param_2 - 1U < 0x100)" ( (binary_expression "param_2 - 1U < 0x100" (binary_expression "param_2 - 1U" identifier - number_literal) < number_literal) )) (compound_statement "{\n      bVar2 = (&DAT_0002253f)[param_2];\n    }" { (expression_statement "bVar2 = (&DAT_0002253f)[param_2];" (assignment_expression "bVar2 = (&DAT_0002253f)[param_2]" identifier = (subscript_expression "(&DAT_0002253f)[param_2]" (parenthesized_expression "(&DAT_0002253f)" ( (pointer_expression "&DAT_0002253f" & identifier) )) [ identifier ])) ;) }) (else_clause "else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" else (compound_statement "{\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" { (expression_statement "bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];" (assignment_expression "bVar2 = (&DAT_00022640)[param_2 - 1U >> 7]" identifier = (subscript_expression "(&DAT_00022640)[param_2 - 1U >> 7]" (parenthesized_expression "(&DAT_00022640)" ( (pointer_expression "&DAT_00022640" & identifier) )) [ (binary_expression "param_2 - 1U >> 7" (binary_expression "param_2 - 1U" identifier - number_literal) >> number_literal) ])) ;) }))) (expression_statement "psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4)" identifier = (cast_expression "(short *)(param_1 + 0x988 + (uint)bVar2 * 4)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x988 + (uint)bVar2 * 4)" ( (binary_expression "param_1 + 0x988 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x988" identifier + number_literal) + (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) )))) ;) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" * identifier) = (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" * identifier) + number_literal)) ;) }))) (return_statement "return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);" return (binary_expression "*(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0)" (binary_expression "*(int *)(param_1 + 0x169c) + -1" (pointer_expression "*(int *)(param_1 + 0x169c)" * (cast_expression "(int *)(param_1 + 0x169c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x169c)" ( (binary_expression "param_1 + 0x169c" identifier + number_literal) )))) + number_literal) == (pointer_expression "*(int *)(param_1 + 0x16a0)" * (cast_expression "(int *)(param_1 + 0x16a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) ))))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n\nint _tr_tally(deflate_state *s,uint dist,uint lc)\n\n{\n  byte bVar1;\n  uInt uVar2;\n  \n  uVar2 = s->last_lit;\n  s->d_buf[uVar2] = (ushf)dist;\n  s->last_lit = uVar2 + 1;\n  s->l_buf[uVar2] = (uchf)lc;\n  if (dist == 0) {\n    s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1;\n  }\n  else {\n    bVar1 = _length_code[lc];\n    s->matches = s->matches + 1;\n    s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1;\n    if (dist - 1 < 0x100) {\n      bVar1 = _length_code[dist + 0xff];\n    }\n    else {\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }\n    s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1;\n  }\n  return (uint)(s->lit_bufsize - 1 == s->last_lit);\n}\n\n" comment (function_definition "int _tr_tally(deflate_state *s,uint dist,uint lc)\n\n{\n  byte bVar1;\n  uInt uVar2;\n  \n  uVar2 = s->last_lit;\n  s->d_buf[uVar2] = (ushf)dist;\n  s->last_lit = uVar2 + 1;\n  s->l_buf[uVar2] = (uchf)lc;\n  if (dist == 0) {\n    s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1;\n  }\n  else {\n    bVar1 = _length_code[lc];\n    s->matches = s->matches + 1;\n    s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1;\n    if (dist - 1 < 0x100) {\n      bVar1 = _length_code[dist + 0xff];\n    }\n    else {\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }\n    s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1;\n  }\n  return (uint)(s->lit_bufsize - 1 == s->last_lit);\n}" primitive_type (function_declarator "_tr_tally(deflate_state *s,uint dist,uint lc)" identifier (parameter_list "(deflate_state *s,uint dist,uint lc)" ( (parameter_declaration "deflate_state *s" type_identifier (pointer_declarator "*s" * identifier)) , (parameter_declaration "uint dist" type_identifier identifier) , (parameter_declaration "uint lc" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  uInt uVar2;\n  \n  uVar2 = s->last_lit;\n  s->d_buf[uVar2] = (ushf)dist;\n  s->last_lit = uVar2 + 1;\n  s->l_buf[uVar2] = (uchf)lc;\n  if (dist == 0) {\n    s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1;\n  }\n  else {\n    bVar1 = _length_code[lc];\n    s->matches = s->matches + 1;\n    s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1;\n    if (dist - 1 < 0x100) {\n      bVar1 = _length_code[dist + 0xff];\n    }\n    else {\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }\n    s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1;\n  }\n  return (uint)(s->lit_bufsize - 1 == s->last_lit);\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uInt uVar2;" type_identifier identifier ;) (expression_statement "uVar2 = s->last_lit;" (assignment_expression "uVar2 = s->last_lit" identifier = (field_expression "s->last_lit" identifier -> field_identifier)) ;) (expression_statement "s->d_buf[uVar2] = (ushf)dist;" (assignment_expression "s->d_buf[uVar2] = (ushf)dist" (subscript_expression "s->d_buf[uVar2]" (field_expression "s->d_buf" identifier -> field_identifier) [ identifier ]) = (cast_expression "(ushf)dist" ( (type_descriptor "ushf" type_identifier) ) identifier)) ;) (expression_statement "s->last_lit = uVar2 + 1;" (assignment_expression "s->last_lit = uVar2 + 1" (field_expression "s->last_lit" identifier -> field_identifier) = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "s->l_buf[uVar2] = (uchf)lc;" (assignment_expression "s->l_buf[uVar2] = (uchf)lc" (subscript_expression "s->l_buf[uVar2]" (field_expression "s->l_buf" identifier -> field_identifier) [ identifier ]) = (cast_expression "(uchf)lc" ( (type_descriptor "uchf" type_identifier) ) identifier)) ;) (if_statement "if (dist == 0) {\n    s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1;\n  }\n  else {\n    bVar1 = _length_code[lc];\n    s->matches = s->matches + 1;\n    s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1;\n    if (dist - 1 < 0x100) {\n      bVar1 = _length_code[dist + 0xff];\n    }\n    else {\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }\n    s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1;\n  }" if (parenthesized_expression "(dist == 0)" ( (binary_expression "dist == 0" identifier == number_literal) )) (compound_statement "{\n    s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1;\n  }" { (expression_statement "s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1;" (assignment_expression "s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1" (field_expression "s->dyn_ltree[lc].fc.freq" (field_expression "s->dyn_ltree[lc].fc" (subscript_expression "s->dyn_ltree[lc]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) = (binary_expression "s->dyn_ltree[lc].fc.freq + 1" (field_expression "s->dyn_ltree[lc].fc.freq" (field_expression "s->dyn_ltree[lc].fc" (subscript_expression "s->dyn_ltree[lc]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) + number_literal)) ;) }) (else_clause "else {\n    bVar1 = _length_code[lc];\n    s->matches = s->matches + 1;\n    s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1;\n    if (dist - 1 < 0x100) {\n      bVar1 = _length_code[dist + 0xff];\n    }\n    else {\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }\n    s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1;\n  }" else (compound_statement "{\n    bVar1 = _length_code[lc];\n    s->matches = s->matches + 1;\n    s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1;\n    if (dist - 1 < 0x100) {\n      bVar1 = _length_code[dist + 0xff];\n    }\n    else {\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }\n    s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1;\n  }" { (expression_statement "bVar1 = _length_code[lc];" (assignment_expression "bVar1 = _length_code[lc]" identifier = (subscript_expression "_length_code[lc]" identifier [ identifier ])) ;) (expression_statement "s->matches = s->matches + 1;" (assignment_expression "s->matches = s->matches + 1" (field_expression "s->matches" identifier -> field_identifier) = (binary_expression "s->matches + 1" (field_expression "s->matches" identifier -> field_identifier) + number_literal)) ;) (expression_statement "s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1;" (assignment_expression "s->dyn_ltree[bVar1 + 0x101].fc.freq = s->dyn_ltree[bVar1 + 0x101].fc.freq + 1" (field_expression "s->dyn_ltree[bVar1 + 0x101].fc.freq" (field_expression "s->dyn_ltree[bVar1 + 0x101].fc" (subscript_expression "s->dyn_ltree[bVar1 + 0x101]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ (binary_expression "bVar1 + 0x101" identifier + number_literal) ]) . field_identifier) . field_identifier) = (binary_expression "s->dyn_ltree[bVar1 + 0x101].fc.freq + 1" (field_expression "s->dyn_ltree[bVar1 + 0x101].fc.freq" (field_expression "s->dyn_ltree[bVar1 + 0x101].fc" (subscript_expression "s->dyn_ltree[bVar1 + 0x101]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ (binary_expression "bVar1 + 0x101" identifier + number_literal) ]) . field_identifier) . field_identifier) + number_literal)) ;) (if_statement "if (dist - 1 < 0x100) {\n      bVar1 = _length_code[dist + 0xff];\n    }\n    else {\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }" if (parenthesized_expression "(dist - 1 < 0x100)" ( (binary_expression "dist - 1 < 0x100" (binary_expression "dist - 1" identifier - number_literal) < number_literal) )) (compound_statement "{\n      bVar1 = _length_code[dist + 0xff];\n    }" { (expression_statement "bVar1 = _length_code[dist + 0xff];" (assignment_expression "bVar1 = _length_code[dist + 0xff]" identifier = (subscript_expression "_length_code[dist + 0xff]" identifier [ (binary_expression "dist + 0xff" identifier + number_literal) ])) ;) }) (else_clause "else {\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }" else (compound_statement "{\n      bVar1 = (&DAT_00022640)[dist - 1 >> 7];\n    }" { (expression_statement "bVar1 = (&DAT_00022640)[dist - 1 >> 7];" (assignment_expression "bVar1 = (&DAT_00022640)[dist - 1 >> 7]" identifier = (subscript_expression "(&DAT_00022640)[dist - 1 >> 7]" (parenthesized_expression "(&DAT_00022640)" ( (pointer_expression "&DAT_00022640" & identifier) )) [ (binary_expression "dist - 1 >> 7" (binary_expression "dist - 1" identifier - number_literal) >> number_literal) ])) ;) }))) (expression_statement "s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1;" (assignment_expression "s->dyn_dtree[bVar1].fc.freq = s->dyn_dtree[bVar1].fc.freq + 1" (field_expression "s->dyn_dtree[bVar1].fc.freq" (field_expression "s->dyn_dtree[bVar1].fc" (subscript_expression "s->dyn_dtree[bVar1]" (field_expression "s->dyn_dtree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) = (binary_expression "s->dyn_dtree[bVar1].fc.freq + 1" (field_expression "s->dyn_dtree[bVar1].fc.freq" (field_expression "s->dyn_dtree[bVar1].fc" (subscript_expression "s->dyn_dtree[bVar1]" (field_expression "s->dyn_dtree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) + number_literal)) ;) }))) (return_statement "return (uint)(s->lit_bufsize - 1 == s->last_lit);" return (call_expression "(uint)(s->lit_bufsize - 1 == s->last_lit)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(s->lit_bufsize - 1 == s->last_lit)" ( (binary_expression "s->lit_bufsize - 1 == s->last_lit" (binary_expression "s->lit_bufsize - 1" (field_expression "s->lit_bufsize" identifier -> field_identifier) - number_literal) == (field_expression "s->last_lit" identifier -> field_identifier)) ))) ;) })))
(translation_unit "bool FUN_0001c3f0(int param_1,int param_2,int param_3)\n\n{\n  short *psVar1;\n  byte bVar2;\n  int iVar3;\n  \n  iVar3 = *(int *)(param_1 + 0x16a0);\n  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;\n  *(int *)(param_1 + 0x16a0) = iVar3 + 1;\n  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;\n  if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);\n}\n\n" (function_definition "bool FUN_0001c3f0(int param_1,int param_2,int param_3)\n\n{\n  short *psVar1;\n  byte bVar2;\n  int iVar3;\n  \n  iVar3 = *(int *)(param_1 + 0x16a0);\n  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;\n  *(int *)(param_1 + 0x16a0) = iVar3 + 1;\n  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;\n  if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);\n}" primitive_type (function_declarator "FUN_0001c3f0(int param_1,int param_2,int param_3)" identifier (parameter_list "(int param_1,int param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  short *psVar1;\n  byte bVar2;\n  int iVar3;\n  \n  iVar3 = *(int *)(param_1 + 0x16a0);\n  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;\n  *(int *)(param_1 + 0x16a0) = iVar3 + 1;\n  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;\n  if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);\n}" { (declaration "short *psVar1;" (sized_type_specifier "short" short) (pointer_declarator "*psVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x16a0);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x16a0)" identifier = (pointer_expression "*(int *)(param_1 + 0x16a0)" * (cast_expression "(int *)(param_1 + 0x16a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) ))))) ;) (expression_statement "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;" (assignment_expression "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2" (pointer_expression "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" * (cast_expression "(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" ( (binary_expression "*(int *)(param_1 + 0x16a4) + iVar3 * 2" (pointer_expression "*(int *)(param_1 + 0x16a4)" * (cast_expression "(int *)(param_1 + 0x16a4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a4)" ( (binary_expression "param_1 + 0x16a4" identifier + number_literal) )))) + (binary_expression "iVar3 * 2" identifier * number_literal)) )))) = (cast_expression "(short)param_2" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "*(int *)(param_1 + 0x16a0) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + 0x16a0) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + 0x16a0)" * (cast_expression "(int *)(param_1 + 0x16a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;" (assignment_expression "*(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3" (pointer_expression "*(char *)(*(int *)(param_1 + 0x1698) + iVar3)" * (cast_expression "(char *)(*(int *)(param_1 + 0x1698) + iVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1698) + iVar3)" ( (binary_expression "*(int *)(param_1 + 0x1698) + iVar3" (pointer_expression "*(int *)(param_1 + 0x1698)" * (cast_expression "(int *)(param_1 + 0x1698)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1698)" ( (binary_expression "param_1 + 0x1698" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (if_statement "if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" { (expression_statement "psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x94 + param_3 * 4)" identifier = (cast_expression "(short *)(param_1 + 0x94 + param_3 * 4)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x94 + param_3 * 4)" ( (binary_expression "param_1 + 0x94 + param_3 * 4" (binary_expression "param_1 + 0x94" identifier + number_literal) + (binary_expression "param_3 * 4" identifier * number_literal)) )))) ;) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" * identifier) = (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" * identifier) + number_literal)) ;) }) (else_clause "else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" else (compound_statement "{\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" { (expression_statement "bVar2 = (&DAT_00022440)[param_3];" (assignment_expression "bVar2 = (&DAT_00022440)[param_3]" identifier = (subscript_expression "(&DAT_00022440)[param_3]" (parenthesized_expression "(&DAT_00022440)" ( (pointer_expression "&DAT_00022440" & identifier) )) [ identifier ])) ;) (expression_statement "*(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;" (assignment_expression "*(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1" (pointer_expression "*(int *)(param_1 + 0x16b0)" * (cast_expression "(int *)(param_1 + 0x16b0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b0)" ( (binary_expression "param_1 + 0x16b0" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x16b0) + 1" (pointer_expression "*(int *)(param_1 + 0x16b0)" * (cast_expression "(int *)(param_1 + 0x16b0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b0)" ( (binary_expression "param_1 + 0x16b0" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4)" identifier = (cast_expression "(short *)(param_1 + 0x498 + (uint)bVar2 * 4)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x498 + (uint)bVar2 * 4)" ( (binary_expression "param_1 + 0x498 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x498" identifier + number_literal) + (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) )))) ;) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" * identifier) = (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" * identifier) + number_literal)) ;) (if_statement "if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" if (parenthesized_expression "(param_2 - 1U < 0x100)" ( (binary_expression "param_2 - 1U < 0x100" (binary_expression "param_2 - 1U" identifier - number_literal) < number_literal) )) (compound_statement "{\n      bVar2 = (&DAT_0002253f)[param_2];\n    }" { (expression_statement "bVar2 = (&DAT_0002253f)[param_2];" (assignment_expression "bVar2 = (&DAT_0002253f)[param_2]" identifier = (subscript_expression "(&DAT_0002253f)[param_2]" (parenthesized_expression "(&DAT_0002253f)" ( (pointer_expression "&DAT_0002253f" & identifier) )) [ identifier ])) ;) }) (else_clause "else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" else (compound_statement "{\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" { (expression_statement "bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];" (assignment_expression "bVar2 = (&DAT_00022640)[param_2 - 1U >> 7]" identifier = (subscript_expression "(&DAT_00022640)[param_2 - 1U >> 7]" (parenthesized_expression "(&DAT_00022640)" ( (pointer_expression "&DAT_00022640" & identifier) )) [ (binary_expression "param_2 - 1U >> 7" (binary_expression "param_2 - 1U" identifier - number_literal) >> number_literal) ])) ;) }))) (expression_statement "psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4)" identifier = (cast_expression "(short *)(param_1 + 0x988 + (uint)bVar2 * 4)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x988 + (uint)bVar2 * 4)" ( (binary_expression "param_1 + 0x988 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x988" identifier + number_literal) + (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) )))) ;) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" * identifier) = (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" * identifier) + number_literal)) ;) }))) (return_statement "return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);" return (binary_expression "*(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0)" (binary_expression "*(int *)(param_1 + 0x169c) + -1" (pointer_expression "*(int *)(param_1 + 0x169c)" * (cast_expression "(int *)(param_1 + 0x169c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x169c)" ( (binary_expression "param_1 + 0x169c" identifier + number_literal) )))) + number_literal) == (pointer_expression "*(int *)(param_1 + 0x16a0)" * (cast_expression "(int *)(param_1 + 0x16a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) ))))) ;) })))
(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 (sized_type_specifier short) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ IDENT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ IDENT ])) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (binary_expression IDENT - LIT) >> LIT) ])) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) }))) (return_statement return (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })))
(function_definition "bool FUN_0001c3f0(int param_1,int param_2,int param_3)\n\n{\n  short *psVar1;\n  byte bVar2;\n  int iVar3;\n  \n  iVar3 = *(int *)(param_1 + 0x16a0);\n  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;\n  *(int *)(param_1 + 0x16a0) = iVar3 + 1;\n  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;\n  if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);\n}" (primitive_type "bool") (function_declarator "FUN_0001c3f0(int param_1,int param_2,int param_3)" (identifier "FUN_0001c3f0") (parameter_list "(int param_1,int param_2,int param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  short *psVar1;\n  byte bVar2;\n  int iVar3;\n  \n  iVar3 = *(int *)(param_1 + 0x16a0);\n  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;\n  *(int *)(param_1 + 0x16a0) = iVar3 + 1;\n  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;\n  if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);\n}" ({ "{") (declaration "short *psVar1;" (sized_type_specifier "short" (short "short")) (pointer_declarator "*psVar1" (* "*") (identifier "psVar1")) (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x16a0);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x16a0)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x16a0)" (* "*") (cast_expression "(int *)(param_1 + 0x16a0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16a0)" (( "(") (binary_expression "param_1 + 0x16a0" (identifier "param_1") (+ "+") (number_literal "0x16a0")) () ")"))))) (; ";")) (expression_statement "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;" (assignment_expression "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2" (pointer_expression "*(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" (* "*") (cast_expression "(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x16a4) + iVar3 * 2)" (( "(") (binary_expression "*(int *)(param_1 + 0x16a4) + iVar3 * 2" (pointer_expression "*(int *)(param_1 + 0x16a4)" (* "*") (cast_expression "(int *)(param_1 + 0x16a4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16a4)" (( "(") (binary_expression "param_1 + 0x16a4" (identifier "param_1") (+ "+") (number_literal "0x16a4")) () ")")))) (+ "+") (binary_expression "iVar3 * 2" (identifier "iVar3") (* "*") (number_literal "2"))) () ")")))) (= "=") (cast_expression "(short)param_2" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "param_2"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x16a0) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + 0x16a0) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + 0x16a0)" (* "*") (cast_expression "(int *)(param_1 + 0x16a0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16a0)" (( "(") (binary_expression "param_1 + 0x16a0" (identifier "param_1") (+ "+") (number_literal "0x16a0")) () ")")))) (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;" (assignment_expression "*(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3" (pointer_expression "*(char *)(*(int *)(param_1 + 0x1698) + iVar3)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 0x1698) + iVar3)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1698) + iVar3)" (( "(") (binary_expression "*(int *)(param_1 + 0x1698) + iVar3" (pointer_expression "*(int *)(param_1 + 0x1698)" (* "*") (cast_expression "(int *)(param_1 + 0x1698)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1698)" (( "(") (binary_expression "param_1 + 0x1698" (identifier "param_1") (+ "+") (number_literal "0x1698")) () ")")))) (+ "+") (identifier "iVar3")) () ")")))) (= "=") (cast_expression "(char)param_3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "param_3"))) (; ";")) (if_statement "if (param_2 == 0) {\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }\n  else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" ({ "{") (expression_statement "psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x94 + param_3 * 4)" (identifier "psVar1") (= "=") (cast_expression "(short *)(param_1 + 0x94 + param_3 * 4)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x94 + param_3 * 4)" (( "(") (binary_expression "param_1 + 0x94 + param_3 * 4" (binary_expression "param_1 + 0x94" (identifier "param_1") (+ "+") (number_literal "0x94")) (+ "+") (binary_expression "param_3 * 4" (identifier "param_3") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" (* "*") (identifier "psVar1")) (= "=") (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" (* "*") (identifier "psVar1")) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" (else "else") (compound_statement "{\n    bVar2 = (&DAT_00022440)[param_3];\n    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;\n    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n    if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }\n    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);\n    *psVar1 = *psVar1 + 1;\n  }" ({ "{") (expression_statement "bVar2 = (&DAT_00022440)[param_3];" (assignment_expression "bVar2 = (&DAT_00022440)[param_3]" (identifier "bVar2") (= "=") (subscript_expression "(&DAT_00022440)[param_3]" (parenthesized_expression "(&DAT_00022440)" (( "(") (pointer_expression "&DAT_00022440" (& "&") (identifier "DAT_00022440")) () ")")) ([ "[") (identifier "param_3") (] "]"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;" (assignment_expression "*(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1" (pointer_expression "*(int *)(param_1 + 0x16b0)" (* "*") (cast_expression "(int *)(param_1 + 0x16b0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b0)" (( "(") (binary_expression "param_1 + 0x16b0" (identifier "param_1") (+ "+") (number_literal "0x16b0")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x16b0) + 1" (pointer_expression "*(int *)(param_1 + 0x16b0)" (* "*") (cast_expression "(int *)(param_1 + 0x16b0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b0)" (( "(") (binary_expression "param_1 + 0x16b0" (identifier "param_1") (+ "+") (number_literal "0x16b0")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4)" (identifier "psVar1") (= "=") (cast_expression "(short *)(param_1 + 0x498 + (uint)bVar2 * 4)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x498 + (uint)bVar2 * 4)" (( "(") (binary_expression "param_1 + 0x498 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x498" (identifier "param_1") (+ "+") (number_literal "0x498")) (+ "+") (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar2")) (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" (* "*") (identifier "psVar1")) (= "=") (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" (* "*") (identifier "psVar1")) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_2 - 1U < 0x100) {\n      bVar2 = (&DAT_0002253f)[param_2];\n    }\n    else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" (if "if") (parenthesized_expression "(param_2 - 1U < 0x100)" (( "(") (binary_expression "param_2 - 1U < 0x100" (binary_expression "param_2 - 1U" (identifier "param_2") (- "-") (number_literal "1U")) (< "<") (number_literal "0x100")) () ")")) (compound_statement "{\n      bVar2 = (&DAT_0002253f)[param_2];\n    }" ({ "{") (expression_statement "bVar2 = (&DAT_0002253f)[param_2];" (assignment_expression "bVar2 = (&DAT_0002253f)[param_2]" (identifier "bVar2") (= "=") (subscript_expression "(&DAT_0002253f)[param_2]" (parenthesized_expression "(&DAT_0002253f)" (( "(") (pointer_expression "&DAT_0002253f" (& "&") (identifier "DAT_0002253f")) () ")")) ([ "[") (identifier "param_2") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" (else "else") (compound_statement "{\n      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];\n    }" ({ "{") (expression_statement "bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];" (assignment_expression "bVar2 = (&DAT_00022640)[param_2 - 1U >> 7]" (identifier "bVar2") (= "=") (subscript_expression "(&DAT_00022640)[param_2 - 1U >> 7]" (parenthesized_expression "(&DAT_00022640)" (( "(") (pointer_expression "&DAT_00022640" (& "&") (identifier "DAT_00022640")) () ")")) ([ "[") (binary_expression "param_2 - 1U >> 7" (binary_expression "param_2 - 1U" (identifier "param_2") (- "-") (number_literal "1U")) (>> ">>") (number_literal "7")) (] "]"))) (; ";")) (} "}")))) (expression_statement "psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);" (assignment_expression "psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4)" (identifier "psVar1") (= "=") (cast_expression "(short *)(param_1 + 0x988 + (uint)bVar2 * 4)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x988 + (uint)bVar2 * 4)" (( "(") (binary_expression "param_1 + 0x988 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x988" (identifier "param_1") (+ "+") (number_literal "0x988")) (+ "+") (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar2")) (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" (* "*") (identifier "psVar1")) (= "=") (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" (* "*") (identifier "psVar1")) (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (return_statement "return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);" (return "return") (binary_expression "*(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0)" (binary_expression "*(int *)(param_1 + 0x169c) + -1" (pointer_expression "*(int *)(param_1 + 0x169c)" (* "*") (cast_expression "(int *)(param_1 + 0x169c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x169c)" (( "(") (binary_expression "param_1 + 0x169c" (identifier "param_1") (+ "+") (number_literal "0x169c")) () ")")))) (+ "+") (number_literal "-1")) (== "==") (pointer_expression "*(int *)(param_1 + 0x16a0)" (* "*") (cast_expression "(int *)(param_1 + 0x16a0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16a0)" (( "(") (binary_expression "param_1 + 0x16a0" (identifier "param_1") (+ "+") (number_literal "0x16a0")) () ")"))))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

int function_1(type_1 *s,type_2 var_2,type_2 lc)

{
  type_3 var_3;
  type_4 var_1;
  
  var_1 = s->last_lit;
  s->d_buf[var_1] = (type_5)var_2;
  s->last_lit = var_1 + 1;
  s->l_buf[var_1] = (type_6)lc;
  if (var_2 == 0) {
    s->dyn_ltree[lc].fc.freq = s->dyn_ltree[lc].fc.freq + 1;
  }
  else {
    var_3 = _length_code[lc];
    s->matches = s->matches + 1;
    s->dyn_ltree[var_3 + 0x101].fc.freq = s->dyn_ltree[var_3 + 0x101].fc.freq + 1;
    if (var_2 - 1 < 0x100) {
      var_3 = _length_code[var_2 + 0xff];
    }
    else {
      var_3 = (&DAT_00022640)[var_2 - 1 >> 7];
    }
    s->dyn_dtree[var_3].fc.freq = s->dyn_dtree[var_3].fc.freq + 1;
  }
  return (type_2)(s->lit_bufsize - 1 == s->last_lit);
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) (return_statement (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))

/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

bool MASKED(int param_1,int param_2,int param_3)

{
  short *psVar1;
  byte bVar2;
  int iVar3;
  
  iVar3 = *(int *)(param_1 + 0x16a0);
  *(short *)(*(int *)(param_1 + 0x16a4) + iVar3 * 2) = (short)param_2;
  *(int *)(param_1 + 0x16a0) = iVar3 + 1;
  *(char *)(*(int *)(param_1 + 0x1698) + iVar3) = (char)param_3;
  if (param_2 == 0) {
    psVar1 = (short *)(param_1 + 0x94 + param_3 * 4);
    *psVar1 = *psVar1 + 1;
  }
  else {
    bVar2 = (&DAT_00022440)[param_3];
    *(int *)(param_1 + 0x16b0) = *(int *)(param_1 + 0x16b0) + 1;
    psVar1 = (short *)(param_1 + 0x498 + (uint)bVar2 * 4);
    *psVar1 = *psVar1 + 1;
    if (param_2 - 1U < 0x100) {
      bVar2 = (&DAT_0002253f)[param_2];
    }
    else {
      bVar2 = (&DAT_00022640)[param_2 - 1U >> 7];
    }
    psVar1 = (short *)(param_1 + 0x988 + (uint)bVar2 * 4);
    *psVar1 = *psVar1 + 1;
  }
  return *(int *)(param_1 + 0x169c) + -1 == *(int *)(param_1 + 0x16a0);
}

