
void * sha1_finish_ctx(sha1_ctx *ctx,void *resbuf)

{
  uchar *puVar1;
  uint uVar2;
  void *pvVar3;
  sha1_uint32 sVar4;
  uint uVar5;
  ulong uVar6;
  uint uVar7;
  uchar *puVar8;
  long lVar9;
  undefined8 *puVar10;
  size_t len;
  
  uVar2 = ctx->buflen;
  sVar4 = ctx->total[1];
  len = (-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0) + 0x80;
  uVar5 = ctx->total[0];
  uVar7 = uVar2 + ctx->total[0];
  ctx->total[0] = uVar7;
  if (CARRY4(uVar2,uVar5)) {
    sVar4 = sVar4 + 1;
    ctx->total[1] = sVar4;
  }
  uVar5 = sVar4 << 3;
  ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1e] =
       uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 |
       (uVar5 | uVar7 >> 0x1d) << 0x18;
  ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1f] =
       (uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18 | uVar7 * 0x8000000 | uVar7 * 8 >> 8 & 0xff00;
  puVar1 = (uchar *)((long)ctx->buffer + (ulong)uVar2);
  lVar9 = len - uVar2;
  uVar6 = lVar9 - 8;
  if (uVar6 < 8) {
    if ((uVar6 & 4) == 0) {
      if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {
        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);
      }
    }
    else {
      *(undefined4 *)puVar1 = fillbuf._0_4_;
      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);
    }
  }
  else {
    *(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_);
    *(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30);
    lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);
    puVar8 = fillbuf + -lVar9;
    puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);
    for (uVar6 = uVar6 + lVar9 >> 3; uVar6 != 0; uVar6 = uVar6 - 1) {
      *puVar10 = *(undefined8 *)puVar8;
      puVar8 = puVar8 + 8;
      puVar10 = puVar10 + 1;
    }
  }
  sha1_process_block(ctx->buffer,len,ctx);
  pvVar3 = sha1_read_ctx(ctx,resbuf);
  return pvVar3;
}



void FUN_002d4de0(long param_1,undefined8 param_2)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  uint uVar5;
  undefined8 *puVar6;
  long lVar7;
  undefined8 *puVar8;
  long lVar9;
  
  uVar1 = *(uint *)(param_1 + 0x1c);
  iVar2 = *(int *)(param_1 + 0x18);
  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;
  uVar3 = *(uint *)(param_1 + 0x14);
  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);
  *(uint *)(param_1 + 0x14) = uVar5;
  if (CARRY4(uVar1,uVar3)) {
    iVar2 = iVar2 + 1;
    *(int *)(param_1 + 0x18) = iVar2;
  }
  uVar3 = iVar2 << 3;
  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =
       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |
       (uVar3 | uVar5 >> 0x1d) << 0x18;
  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =
       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;
  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);
  lVar7 = lVar9 - (ulong)uVar1;
  uVar4 = lVar7 - 8;
  if (uVar4 < 8) {
    if ((uVar4 & 4) == 0) {
      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {
        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);
      }
    }
    else {
      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;
      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);
    }
  }
  else {
    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);
    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);
    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);
    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);
    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);
    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {
      *puVar8 = *puVar6;
      puVar6 = puVar6 + 1;
      puVar8 = puVar8 + 1;
    }
  }
  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);
  FUN_002d3c10(param_1,param_2);
  return;
}


PUSH RBP
MOV RBP,RSI
PUSH RBX
MOV RBX,RDI
SUB RSP,0x8
MOV EAX,dword ptr [RDI + 0x1c]
MOV ECX,dword ptr [RBX + 0x18]
CMP EAX,0x38
MOV ESI,EAX
SBB R8,R8
AND R8,-0x40
SUB R8,-0x80
CMP EAX,0x38
SBB RDI,RDI
AND RDI,-0x10
ADD RDI,0x1f
CMP EAX,0x38
SBB RDX,RDX
AND RDX,-0x10
ADD RDX,0x1e
ADD ESI,dword ptr [RBX + 0x14]
MOV dword ptr [RBX + 0x14],ESI
JNC 0x002d4e2c
ADD ECX,0x1
MOV dword ptr [RBX + 0x18],ECX
MOV R9D,ESI
SHL ECX,0x3
SHR R9D,0x1d
OR ECX,R9D
BSWAP ECX
MOV dword ptr [RBX + RDX*0x4 + 0x20],ECX
LEA ECX,[RSI*0x8]
MOV EDX,ESI
SHL EDX,0xb
MOV R9D,ECX
SHL ESI,0x1b
SHR R9D,0x18
AND EDX,0xff0000
SHR ECX,0x8
OR EDX,R9D
AND ECX,0xff00
LEA R9,[RBX + 0x20]
OR EDX,ESI
LEA RSI,[0x38f9c0]
OR EDX,ECX
MOV dword ptr [RBX + RDI*0x4 + 0x20],EDX
MOV RDI,R8
LEA RDX,[R9 + RAX*0x1]
SUB RDI,RAX
LEA RCX,[RDI + -0x8]
CMP RCX,0x8
JNC 0x002d4eb8
TEST CL,0x4
JNZ 0x002d4f08
TEST RCX,RCX
JZ 0x002d4ee4
MOVZX EAX,byte ptr [0x0038f9c0]
MOV byte ptr [RDX],AL
TEST CL,0x2
JZ 0x002d4ee4
MOVZX EAX,word ptr [RSI + RCX*0x1 + -0x2]
MOV word ptr [RDX + RCX*0x1 + -0x2],AX
JMP 0x002d4ee4
MOV RAX,qword ptr [0x0038f9c0]
LEA RDI,[RDX + 0x8]
AND RDI,-0x8
MOV qword ptr [RDX],RAX
MOV RAX,qword ptr [RSI + RCX*0x1 + -0x8]
MOV qword ptr [RDX + RCX*0x1 + -0x8],RAX
SUB RDX,RDI
ADD RCX,RDX
SUB RSI,RDX
SHR RCX,0x3
MOVSQ.REP RDI,RSI
MOV RDX,RBX
MOV RSI,R8
MOV RDI,R9
CALL 0x002d3c40
ADD RSP,0x8
MOV RSI,RBP
MOV RDI,RBX
POP RBX
POP RBP
JMP 0x002d3c10
MOV EAX,dword ptr [0x0038f9c0]
MOV dword ptr [RDX],EAX
MOV EAX,dword ptr [RSI + RCX*0x1 + -0x4]
MOV dword ptr [RDX + RCX*0x1 + -0x4],EAX
JMP 0x002d4ee4
(translation_unit "void FUN_002d4de0(long param_1,undefined8 param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong uVar4;\n  uint uVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  undefined8 *puVar8;\n  long lVar9;\n  \n  uVar1 = *(uint *)(param_1 + 0x1c);\n  iVar2 = *(int *)(param_1 + 0x18);\n  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar3 = *(uint *)(param_1 + 0x14);\n  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);\n  *(uint *)(param_1 + 0x14) = uVar5;\n  if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }\n  uVar3 = iVar2 << 3;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;\n  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);\n  lVar7 = lVar9 - (ulong)uVar1;\n  uVar4 = lVar7 - 8;\n  if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }\n  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);\n  FUN_002d3c10(param_1,param_2);\n  return;\n}\n\n" (function_definition "void FUN_002d4de0(long param_1,undefined8 param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong uVar4;\n  uint uVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  undefined8 *puVar8;\n  long lVar9;\n  \n  uVar1 = *(uint *)(param_1 + 0x1c);\n  iVar2 = *(int *)(param_1 + 0x18);\n  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar3 = *(uint *)(param_1 + 0x14);\n  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);\n  *(uint *)(param_1 + 0x14) = uVar5;\n  if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }\n  uVar3 = iVar2 << 3;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;\n  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);\n  lVar7 = lVar9 - (ulong)uVar1;\n  uVar4 = lVar7 - 8;\n  if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }\n  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);\n  FUN_002d3c10(param_1,param_2);\n  return;\n}" primitive_type (function_declarator "FUN_002d4de0(long param_1,undefined8 param_2)" identifier (parameter_list "(long param_1,undefined8 param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong uVar4;\n  uint uVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  undefined8 *puVar8;\n  long lVar9;\n  \n  uVar1 = *(uint *)(param_1 + 0x1c);\n  iVar2 = *(int *)(param_1 + 0x18);\n  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar3 = *(uint *)(param_1 + 0x14);\n  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);\n  *(uint *)(param_1 + 0x14) = uVar5;\n  if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }\n  uVar3 = iVar2 << 3;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;\n  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);\n  lVar7 = lVar9 - (ulong)uVar1;\n  uVar4 = lVar7 - 8;\n  if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }\n  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);\n  FUN_002d3c10(param_1,param_2);\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "undefined8 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = *(uint *)(param_1 + 0x1c);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x1c)" identifier = (pointer_expression "*(uint *)(param_1 + 0x1c)" * (cast_expression "(uint *)(param_1 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;" (assignment_expression "lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80" identifier = (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0)" ( (binary_expression "-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0" (unary_expression "-(ulong)(uVar1 < 0x38)" - (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 < 0x38)" ( (binary_expression "uVar1 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal)) ;) (expression_statement "uVar3 = *(uint *)(param_1 + 0x14);" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x14)" identifier = (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = uVar1 + *(uint *)(param_1 + 0x14);" (assignment_expression "uVar5 = uVar1 + *(uint *)(param_1 + 0x14)" identifier = (binary_expression "uVar1 + *(uint *)(param_1 + 0x14)" identifier + (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x14) = uVar5;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar5" (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = identifier) ;) (if_statement "if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }" if (parenthesized_expression "(CARRY4(uVar1,uVar3))" ( (call_expression "CARRY4(uVar1,uVar3)" identifier (argument_list "(uVar1,uVar3)" ( identifier , identifier ))) )) (compound_statement "{\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x18) = iVar2;" (assignment_expression "*(int *)(param_1 + 0x18) = iVar2" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "uVar3 = iVar2 << 3;" (assignment_expression "uVar3 = iVar2 << 3" identifier = (binary_expression "iVar2 << 3" identifier << number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;" (assignment_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18" (pointer_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" * (cast_expression "(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" ( (binary_expression "param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4" (binary_expression "param_1 + 0x20" identifier + number_literal) + (binary_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4" (parenthesized_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e)" ( (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0)" ( (binary_expression "-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0" (unary_expression "-(ulong)(uVar1 < 0x38)" - (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 < 0x38)" ( (binary_expression "uVar1 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal) )) * number_literal)) )))) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar3 | uVar5 >> 0x1d) << 0x18" (parenthesized_expression "(uVar3 | uVar5 >> 0x1d)" ( (binary_expression "uVar3 | uVar5 >> 0x1d" identifier | (binary_expression "uVar5 >> 0x1d" identifier >> number_literal)) )) << number_literal))) ;) (expression_statement "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;" (assignment_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00" (pointer_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" * (cast_expression "(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" ( (binary_expression "param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4" (binary_expression "param_1 + 0x20" identifier + number_literal) + (binary_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4" (parenthesized_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f)" ( (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0)" ( (binary_expression "-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0" (unary_expression "-(ulong)(uVar1 < 0x38)" - (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 < 0x38)" ( (binary_expression "uVar1 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal) )) * number_literal)) )))) = (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00" (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000" (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18" (binary_expression "(uVar5 & 0x1fe0) << 0xb" (parenthesized_expression "(uVar5 & 0x1fe0)" ( (binary_expression "uVar5 & 0x1fe0" identifier & number_literal) )) << number_literal) | (binary_expression "uVar5 * 8 >> 0x18" (binary_expression "uVar5 * 8" identifier * number_literal) >> number_literal)) | (binary_expression "uVar5 * 0x8000000" identifier * number_literal)) | (binary_expression "uVar5 * 8 >> 8 & 0xff00" (binary_expression "uVar5 * 8 >> 8" (binary_expression "uVar5 * 8" identifier * number_literal) >> number_literal) & number_literal))) ;) (expression_statement "puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);" (assignment_expression "puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1)" identifier = (cast_expression "(undefined8 *)(param_1 + 0x20 + (ulong)uVar1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20 + (ulong)uVar1)" ( (binary_expression "param_1 + 0x20 + (ulong)uVar1" (binary_expression "param_1 + 0x20" identifier + number_literal) + (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) ;) (expression_statement "lVar7 = lVar9 - (ulong)uVar1;" (assignment_expression "lVar7 = lVar9 - (ulong)uVar1" identifier = (binary_expression "lVar9 - (ulong)uVar1" identifier - (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (expression_statement "uVar4 = lVar7 - 8;" (assignment_expression "uVar4 = lVar7 - 8" identifier = (binary_expression "lVar7 - 8" identifier - number_literal)) ;) (if_statement "if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" if (parenthesized_expression "(uVar4 < 8)" ( (binary_expression "uVar4 < 8" identifier < number_literal) )) (compound_statement "{\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }" { (if_statement "if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" if (parenthesized_expression "((uVar4 & 4) == 0)" ( (binary_expression "(uVar4 & 4) == 0" (parenthesized_expression "(uVar4 & 4)" ( (binary_expression "uVar4 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }" { (if_statement "if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }" if (parenthesized_expression "((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0))" ( (binary_expression "(uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)" (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)" ( (comma_expression "*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0" (assignment_expression "*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0" (pointer_expression "*(char *)puVar8" * (cast_expression "(char *)puVar8" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(char)(undefined4)DAT_0038f9c0" ( (type_descriptor "char" primitive_type) ) (cast_expression "(undefined4)DAT_0038f9c0" ( (type_descriptor "undefined4" type_identifier) ) identifier))) , (binary_expression "(uVar4 & 2) != 0" (parenthesized_expression "(uVar4 & 2)" ( (binary_expression "uVar4 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }" { (expression_statement "*(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);" (assignment_expression "*(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7)" (pointer_expression "*(undefined2 *)((long)puVar8 + lVar7 + -10)" * (cast_expression "(undefined2 *)((long)puVar8 + lVar7 + -10)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar7 + -10)" ( (binary_expression "(long)puVar8 + lVar7 + -10" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = (pointer_expression "*(undefined2 *)(&UNK_0038f9b6 + lVar7)" * (cast_expression "(undefined2 *)(&UNK_0038f9b6 + lVar7)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&UNK_0038f9b6 + lVar7)" ( (binary_expression "&UNK_0038f9b6 + lVar7" (pointer_expression "&UNK_0038f9b6" & identifier) + identifier) ))))) ;) })) }) (else_clause "else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" else (compound_statement "{\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" { (expression_statement "*(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;" (assignment_expression "*(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0" (pointer_expression "*(undefined4 *)puVar8" * (cast_expression "(undefined4 *)puVar8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(undefined4)DAT_0038f9c0" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;) (expression_statement "*(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);" (assignment_expression "*(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7)" (pointer_expression "*(undefined4 *)((long)puVar8 + lVar7 + -0xc)" * (cast_expression "(undefined4 *)((long)puVar8 + lVar7 + -0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar7 + -0xc)" ( (binary_expression "(long)puVar8 + lVar7 + -0xc" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = (pointer_expression "*(undefined4 *)(&UNK_0038f9b4 + lVar7)" * (cast_expression "(undefined4 *)(&UNK_0038f9b4 + lVar7)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&UNK_0038f9b4 + lVar7)" ( (binary_expression "&UNK_0038f9b4 + lVar7" (pointer_expression "&UNK_0038f9b4" & identifier) + identifier) ))))) ;) }))) }) (else_clause "else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" else (compound_statement "{\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" { (expression_statement "*puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);" (assignment_expression "*puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" (pointer_expression "*puVar8" * identifier) = (call_expression "CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" identifier (argument_list "(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" ( (field_expression "DAT_0038f9c0._4_4_" identifier . field_identifier) , (cast_expression "(undefined4)DAT_0038f9c0" ( (type_descriptor "undefined4" type_identifier) ) identifier) )))) ;) (expression_statement "*(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);" (assignment_expression "*(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7)" (pointer_expression "*(undefined8 *)((long)puVar8 + lVar7 + -0x10)" * (cast_expression "(undefined8 *)((long)puVar8 + lVar7 + -0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar7 + -0x10)" ( (binary_expression "(long)puVar8 + lVar7 + -0x10" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = (pointer_expression "*(undefined8 *)(&UNK_0038f9b0 + lVar7)" * (cast_expression "(undefined8 *)(&UNK_0038f9b0 + lVar7)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&UNK_0038f9b0 + lVar7)" ( (binary_expression "&UNK_0038f9b0 + lVar7" (pointer_expression "&UNK_0038f9b0" & identifier) + identifier) ))))) ;) (expression_statement "lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);" (assignment_expression "lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" identifier = (binary_expression "(long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar8 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar8 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar8 + 1)" ( (binary_expression "puVar8 + 1" identifier + number_literal) ))) & number_literal) ))))) ;) (expression_statement "puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);" (assignment_expression "puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7)" identifier = (cast_expression "(undefined8 *)((long)&DAT_0038f9c0 - lVar7)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&DAT_0038f9c0 - lVar7)" ( (binary_expression "(long)&DAT_0038f9c0 - lVar7" (cast_expression "(long)&DAT_0038f9c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&DAT_0038f9c0" & identifier)) - identifier) )))) ;) (expression_statement "puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);" (assignment_expression "puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" identifier = (cast_expression "(undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar8 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar8 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar8 + 1)" ( (binary_expression "puVar8 + 1" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }" for ( (assignment_expression "uVar4 = uVar4 + lVar7 >> 3" identifier = (binary_expression "uVar4 + lVar7 >> 3" (binary_expression "uVar4 + lVar7" identifier + identifier) >> number_literal)) ; (binary_expression "uVar4 != 0" identifier != number_literal) ; (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ) (compound_statement "{\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }" { (expression_statement "*puVar8 = *puVar6;" (assignment_expression "*puVar8 = *puVar6" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) })) }))) (expression_statement "FUN_002d3c40(param_1 + 0x20,lVar9,param_1);" (call_expression "FUN_002d3c40(param_1 + 0x20,lVar9,param_1)" identifier (argument_list "(param_1 + 0x20,lVar9,param_1)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) , identifier , identifier ))) ;) (expression_statement "FUN_002d3c10(param_1,param_2);" (call_expression "FUN_002d3c10(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "void * sha1_finish_ctx(sha1_ctx *ctx,void *resbuf)\n\n{\n  uchar *puVar1;\n  uint uVar2;\n  void *pvVar3;\n  sha1_uint32 sVar4;\n  uint uVar5;\n  ulong uVar6;\n  uint uVar7;\n  uchar *puVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  size_t len;\n  \n  uVar2 = ctx->buflen;\n  sVar4 = ctx->total[1];\n  len = (-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar5 = ctx->total[0];\n  uVar7 = uVar2 + ctx->total[0];\n  ctx->total[0] = uVar7;\n  if (CARRY4(uVar2,uVar5)) {\n    sVar4 = sVar4 + 1;\n    ctx->total[1] = sVar4;\n  }\n  uVar5 = sVar4 << 3;\n  ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1e] =\n       uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 |\n       (uVar5 | uVar7 >> 0x1d) << 0x18;\n  ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1f] =\n       (uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18 | uVar7 * 0x8000000 | uVar7 * 8 >> 8 & 0xff00;\n  puVar1 = (uchar *)((long)ctx->buffer + (ulong)uVar2);\n  lVar9 = len - uVar2;\n  uVar6 = lVar9 - 8;\n  if (uVar6 < 8) {\n    if ((uVar6 & 4) == 0) {\n      if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }\n    }\n    else {\n      *(undefined4 *)puVar1 = fillbuf._0_4_;\n      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);\n    }\n  }\n  else {\n    *(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_);\n    *(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30);\n    lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    puVar8 = fillbuf + -lVar9;\n    puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    for (uVar6 = uVar6 + lVar9 >> 3; uVar6 != 0; uVar6 = uVar6 - 1) {\n      *puVar10 = *(undefined8 *)puVar8;\n      puVar8 = puVar8 + 8;\n      puVar10 = puVar10 + 1;\n    }\n  }\n  sha1_process_block(ctx->buffer,len,ctx);\n  pvVar3 = sha1_read_ctx(ctx,resbuf);\n  return pvVar3;\n}\n\n" (function_definition "void * sha1_finish_ctx(sha1_ctx *ctx,void *resbuf)\n\n{\n  uchar *puVar1;\n  uint uVar2;\n  void *pvVar3;\n  sha1_uint32 sVar4;\n  uint uVar5;\n  ulong uVar6;\n  uint uVar7;\n  uchar *puVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  size_t len;\n  \n  uVar2 = ctx->buflen;\n  sVar4 = ctx->total[1];\n  len = (-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar5 = ctx->total[0];\n  uVar7 = uVar2 + ctx->total[0];\n  ctx->total[0] = uVar7;\n  if (CARRY4(uVar2,uVar5)) {\n    sVar4 = sVar4 + 1;\n    ctx->total[1] = sVar4;\n  }\n  uVar5 = sVar4 << 3;\n  ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1e] =\n       uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 |\n       (uVar5 | uVar7 >> 0x1d) << 0x18;\n  ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1f] =\n       (uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18 | uVar7 * 0x8000000 | uVar7 * 8 >> 8 & 0xff00;\n  puVar1 = (uchar *)((long)ctx->buffer + (ulong)uVar2);\n  lVar9 = len - uVar2;\n  uVar6 = lVar9 - 8;\n  if (uVar6 < 8) {\n    if ((uVar6 & 4) == 0) {\n      if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }\n    }\n    else {\n      *(undefined4 *)puVar1 = fillbuf._0_4_;\n      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);\n    }\n  }\n  else {\n    *(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_);\n    *(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30);\n    lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    puVar8 = fillbuf + -lVar9;\n    puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    for (uVar6 = uVar6 + lVar9 >> 3; uVar6 != 0; uVar6 = uVar6 - 1) {\n      *puVar10 = *(undefined8 *)puVar8;\n      puVar8 = puVar8 + 8;\n      puVar10 = puVar10 + 1;\n    }\n  }\n  sha1_process_block(ctx->buffer,len,ctx);\n  pvVar3 = sha1_read_ctx(ctx,resbuf);\n  return pvVar3;\n}" primitive_type (pointer_declarator "* sha1_finish_ctx(sha1_ctx *ctx,void *resbuf)" * (function_declarator "sha1_finish_ctx(sha1_ctx *ctx,void *resbuf)" identifier (parameter_list "(sha1_ctx *ctx,void *resbuf)" ( (parameter_declaration "sha1_ctx *ctx" type_identifier (pointer_declarator "*ctx" * identifier)) , (parameter_declaration "void *resbuf" primitive_type (pointer_declarator "*resbuf" * identifier)) )))) (compound_statement "{\n  uchar *puVar1;\n  uint uVar2;\n  void *pvVar3;\n  sha1_uint32 sVar4;\n  uint uVar5;\n  ulong uVar6;\n  uint uVar7;\n  uchar *puVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  size_t len;\n  \n  uVar2 = ctx->buflen;\n  sVar4 = ctx->total[1];\n  len = (-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar5 = ctx->total[0];\n  uVar7 = uVar2 + ctx->total[0];\n  ctx->total[0] = uVar7;\n  if (CARRY4(uVar2,uVar5)) {\n    sVar4 = sVar4 + 1;\n    ctx->total[1] = sVar4;\n  }\n  uVar5 = sVar4 << 3;\n  ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1e] =\n       uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 |\n       (uVar5 | uVar7 >> 0x1d) << 0x18;\n  ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1f] =\n       (uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18 | uVar7 * 0x8000000 | uVar7 * 8 >> 8 & 0xff00;\n  puVar1 = (uchar *)((long)ctx->buffer + (ulong)uVar2);\n  lVar9 = len - uVar2;\n  uVar6 = lVar9 - 8;\n  if (uVar6 < 8) {\n    if ((uVar6 & 4) == 0) {\n      if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }\n    }\n    else {\n      *(undefined4 *)puVar1 = fillbuf._0_4_;\n      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);\n    }\n  }\n  else {\n    *(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_);\n    *(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30);\n    lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    puVar8 = fillbuf + -lVar9;\n    puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    for (uVar6 = uVar6 + lVar9 >> 3; uVar6 != 0; uVar6 = uVar6 - 1) {\n      *puVar10 = *(undefined8 *)puVar8;\n      puVar8 = puVar8 + 8;\n      puVar10 = puVar10 + 1;\n    }\n  }\n  sha1_process_block(ctx->buffer,len,ctx);\n  pvVar3 = sha1_read_ctx(ctx,resbuf);\n  return pvVar3;\n}" { (declaration "uchar *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (declaration "sha1_uint32 sVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uchar *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "size_t len;" primitive_type identifier ;) (expression_statement "uVar2 = ctx->buflen;" (assignment_expression "uVar2 = ctx->buflen" identifier = (field_expression "ctx->buflen" identifier -> field_identifier)) ;) (expression_statement "sVar4 = ctx->total[1];" (assignment_expression "sVar4 = ctx->total[1]" identifier = (subscript_expression "ctx->total[1]" (field_expression "ctx->total" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "len = (-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0) + 0x80;" (assignment_expression "len = (-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0) + 0x80" identifier = (binary_expression "(-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0) + 0x80" (parenthesized_expression "(-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0)" ( (binary_expression "-(ulong)(uVar2 < 0x38) & 0xffffffffffffffc0" (unary_expression "-(ulong)(uVar2 < 0x38)" - (call_expression "(ulong)(uVar2 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar2 < 0x38)" ( (binary_expression "uVar2 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal)) ;) (expression_statement "uVar5 = ctx->total[0];" (assignment_expression "uVar5 = ctx->total[0]" identifier = (subscript_expression "ctx->total[0]" (field_expression "ctx->total" identifier -> field_identifier) [ number_literal ])) ;) (expression_statement "uVar7 = uVar2 + ctx->total[0];" (assignment_expression "uVar7 = uVar2 + ctx->total[0]" identifier = (binary_expression "uVar2 + ctx->total[0]" identifier + (subscript_expression "ctx->total[0]" (field_expression "ctx->total" identifier -> field_identifier) [ number_literal ]))) ;) (expression_statement "ctx->total[0] = uVar7;" (assignment_expression "ctx->total[0] = uVar7" (subscript_expression "ctx->total[0]" (field_expression "ctx->total" identifier -> field_identifier) [ number_literal ]) = identifier) ;) (if_statement "if (CARRY4(uVar2,uVar5)) {\n    sVar4 = sVar4 + 1;\n    ctx->total[1] = sVar4;\n  }" if (parenthesized_expression "(CARRY4(uVar2,uVar5))" ( (call_expression "CARRY4(uVar2,uVar5)" identifier (argument_list "(uVar2,uVar5)" ( identifier , identifier ))) )) (compound_statement "{\n    sVar4 = sVar4 + 1;\n    ctx->total[1] = sVar4;\n  }" { (expression_statement "sVar4 = sVar4 + 1;" (assignment_expression "sVar4 = sVar4 + 1" identifier = (binary_expression "sVar4 + 1" identifier + number_literal)) ;) (expression_statement "ctx->total[1] = sVar4;" (assignment_expression "ctx->total[1] = sVar4" (subscript_expression "ctx->total[1]" (field_expression "ctx->total" identifier -> field_identifier) [ number_literal ]) = identifier) ;) })) (expression_statement "uVar5 = sVar4 << 3;" (assignment_expression "uVar5 = sVar4 << 3" identifier = (binary_expression "sVar4 << 3" identifier << number_literal)) ;) (expression_statement "ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1e] =\n       uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 |\n       (uVar5 | uVar7 >> 0x1d) << 0x18;" (assignment_expression "ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1e] =\n       uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 |\n       (uVar5 | uVar7 >> 0x1d) << 0x18" (subscript_expression "ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1e]" (field_expression "ctx->buffer" identifier -> field_identifier) [ (binary_expression "(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1e" (parenthesized_expression "(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0)" ( (binary_expression "-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0" (unary_expression "-(ulong)(uVar2 < 0x38)" - (call_expression "(ulong)(uVar2 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar2 < 0x38)" ( (binary_expression "uVar2 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal) ]) = (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8 |\n       (uVar5 | uVar7 >> 0x1d) << 0x18" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8 | (uVar5 & 0xff00) << 8" (binary_expression "uVar5 >> 0x18 | (uVar5 & 0xff0000) >> 8" (binary_expression "uVar5 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar5 & 0xff0000) >> 8" (parenthesized_expression "(uVar5 & 0xff0000)" ( (binary_expression "uVar5 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar5 & 0xff00) << 8" (parenthesized_expression "(uVar5 & 0xff00)" ( (binary_expression "uVar5 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar5 | uVar7 >> 0x1d) << 0x18" (parenthesized_expression "(uVar5 | uVar7 >> 0x1d)" ( (binary_expression "uVar5 | uVar7 >> 0x1d" identifier | (binary_expression "uVar7 >> 0x1d" identifier >> number_literal)) )) << number_literal))) ;) (expression_statement "ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1f] =\n       (uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18 | uVar7 * 0x8000000 | uVar7 * 8 >> 8 & 0xff00;" (assignment_expression "ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1f] =\n       (uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18 | uVar7 * 0x8000000 | uVar7 * 8 >> 8 & 0xff00" (subscript_expression "ctx->buffer[(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1f]" (field_expression "ctx->buffer" identifier -> field_identifier) [ (binary_expression "(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0) + 0x1f" (parenthesized_expression "(-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0)" ( (binary_expression "-(ulong)(uVar2 < 0x38) & 0xfffffffffffffff0" (unary_expression "-(ulong)(uVar2 < 0x38)" - (call_expression "(ulong)(uVar2 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar2 < 0x38)" ( (binary_expression "uVar2 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal) ]) = (binary_expression "(uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18 | uVar7 * 0x8000000 | uVar7 * 8 >> 8 & 0xff00" (binary_expression "(uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18 | uVar7 * 0x8000000" (binary_expression "(uVar7 & 0x1fe0) << 0xb | uVar7 * 8 >> 0x18" (binary_expression "(uVar7 & 0x1fe0) << 0xb" (parenthesized_expression "(uVar7 & 0x1fe0)" ( (binary_expression "uVar7 & 0x1fe0" identifier & number_literal) )) << number_literal) | (binary_expression "uVar7 * 8 >> 0x18" (binary_expression "uVar7 * 8" identifier * number_literal) >> number_literal)) | (binary_expression "uVar7 * 0x8000000" identifier * number_literal)) | (binary_expression "uVar7 * 8 >> 8 & 0xff00" (binary_expression "uVar7 * 8 >> 8" (binary_expression "uVar7 * 8" identifier * number_literal) >> number_literal) & number_literal))) ;) (expression_statement "puVar1 = (uchar *)((long)ctx->buffer + (ulong)uVar2);" (assignment_expression "puVar1 = (uchar *)((long)ctx->buffer + (ulong)uVar2)" identifier = (cast_expression "(uchar *)((long)ctx->buffer + (ulong)uVar2)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)ctx->buffer + (ulong)uVar2)" ( (binary_expression "(long)ctx->buffer + (ulong)uVar2" (cast_expression "(long)ctx->buffer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "ctx->buffer" identifier -> field_identifier)) + (cast_expression "(ulong)uVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) ;) (expression_statement "lVar9 = len - uVar2;" (assignment_expression "lVar9 = len - uVar2" identifier = (binary_expression "len - uVar2" identifier - identifier)) ;) (expression_statement "uVar6 = lVar9 - 8;" (assignment_expression "uVar6 = lVar9 - 8" identifier = (binary_expression "lVar9 - 8" identifier - number_literal)) ;) (if_statement "if (uVar6 < 8) {\n    if ((uVar6 & 4) == 0) {\n      if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }\n    }\n    else {\n      *(undefined4 *)puVar1 = fillbuf._0_4_;\n      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);\n    }\n  }\n  else {\n    *(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_);\n    *(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30);\n    lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    puVar8 = fillbuf + -lVar9;\n    puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    for (uVar6 = uVar6 + lVar9 >> 3; uVar6 != 0; uVar6 = uVar6 - 1) {\n      *puVar10 = *(undefined8 *)puVar8;\n      puVar8 = puVar8 + 8;\n      puVar10 = puVar10 + 1;\n    }\n  }" if (parenthesized_expression "(uVar6 < 8)" ( (binary_expression "uVar6 < 8" identifier < number_literal) )) (compound_statement "{\n    if ((uVar6 & 4) == 0) {\n      if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }\n    }\n    else {\n      *(undefined4 *)puVar1 = fillbuf._0_4_;\n      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);\n    }\n  }" { (if_statement "if ((uVar6 & 4) == 0) {\n      if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }\n    }\n    else {\n      *(undefined4 *)puVar1 = fillbuf._0_4_;\n      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);\n    }" if (parenthesized_expression "((uVar6 & 4) == 0)" ( (binary_expression "(uVar6 & 4) == 0" (parenthesized_expression "(uVar6 & 4)" ( (binary_expression "uVar6 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }\n    }" { (if_statement "if ((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)) {\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }" if (parenthesized_expression "((uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0))" ( (binary_expression "(uVar6 != 0) && (*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)" (parenthesized_expression "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) )) && (parenthesized_expression "(*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0)" ( (comma_expression "*puVar1 = (uchar)fillbuf._0_4_, (uVar6 & 2) != 0" (assignment_expression "*puVar1 = (uchar)fillbuf._0_4_" (pointer_expression "*puVar1" * identifier) = (cast_expression "(uchar)fillbuf._0_4_" ( (type_descriptor "uchar" type_identifier) ) (field_expression "fillbuf._0_4_" identifier . field_identifier))) , (binary_expression "(uVar6 & 2) != 0" (parenthesized_expression "(uVar6 & 2)" ( (binary_expression "uVar6 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        *(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);\n      }" { (expression_statement "*(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36);" (assignment_expression "*(undefined2 *)(puVar1 + lVar9 + -10) = *(undefined2 *)(fillbuf + lVar9 + 0x36)" (pointer_expression "*(undefined2 *)(puVar1 + lVar9 + -10)" * (cast_expression "(undefined2 *)(puVar1 + lVar9 + -10)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + lVar9 + -10)" ( (binary_expression "puVar1 + lVar9 + -10" (binary_expression "puVar1 + lVar9" identifier + identifier) + number_literal) )))) = (pointer_expression "*(undefined2 *)(fillbuf + lVar9 + 0x36)" * (cast_expression "(undefined2 *)(fillbuf + lVar9 + 0x36)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(fillbuf + lVar9 + 0x36)" ( (binary_expression "fillbuf + lVar9 + 0x36" (binary_expression "fillbuf + lVar9" identifier + identifier) + number_literal) ))))) ;) })) }) (else_clause "else {\n      *(undefined4 *)puVar1 = fillbuf._0_4_;\n      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);\n    }" else (compound_statement "{\n      *(undefined4 *)puVar1 = fillbuf._0_4_;\n      *(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);\n    }" { (expression_statement "*(undefined4 *)puVar1 = fillbuf._0_4_;" (assignment_expression "*(undefined4 *)puVar1 = fillbuf._0_4_" (pointer_expression "*(undefined4 *)puVar1" * (cast_expression "(undefined4 *)puVar1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (field_expression "fillbuf._0_4_" identifier . field_identifier)) ;) (expression_statement "*(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34);" (assignment_expression "*(undefined4 *)(puVar1 + lVar9 + -0xc) = *(undefined4 *)(fillbuf + lVar9 + 0x34)" (pointer_expression "*(undefined4 *)(puVar1 + lVar9 + -0xc)" * (cast_expression "(undefined4 *)(puVar1 + lVar9 + -0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + lVar9 + -0xc)" ( (binary_expression "puVar1 + lVar9 + -0xc" (binary_expression "puVar1 + lVar9" identifier + identifier) + number_literal) )))) = (pointer_expression "*(undefined4 *)(fillbuf + lVar9 + 0x34)" * (cast_expression "(undefined4 *)(fillbuf + lVar9 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(fillbuf + lVar9 + 0x34)" ( (binary_expression "fillbuf + lVar9 + 0x34" (binary_expression "fillbuf + lVar9" identifier + identifier) + number_literal) ))))) ;) }))) }) (else_clause "else {\n    *(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_);\n    *(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30);\n    lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    puVar8 = fillbuf + -lVar9;\n    puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    for (uVar6 = uVar6 + lVar9 >> 3; uVar6 != 0; uVar6 = uVar6 - 1) {\n      *puVar10 = *(undefined8 *)puVar8;\n      puVar8 = puVar8 + 8;\n      puVar10 = puVar10 + 1;\n    }\n  }" else (compound_statement "{\n    *(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_);\n    *(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30);\n    lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    puVar8 = fillbuf + -lVar9;\n    puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);\n    for (uVar6 = uVar6 + lVar9 >> 3; uVar6 != 0; uVar6 = uVar6 - 1) {\n      *puVar10 = *(undefined8 *)puVar8;\n      puVar8 = puVar8 + 8;\n      puVar10 = puVar10 + 1;\n    }\n  }" { (expression_statement "*(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_);" (assignment_expression "*(ulong *)puVar1 = CONCAT44(fillbuf._4_4_,fillbuf._0_4_)" (pointer_expression "*(ulong *)puVar1" * (cast_expression "(ulong *)puVar1" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (call_expression "CONCAT44(fillbuf._4_4_,fillbuf._0_4_)" identifier (argument_list "(fillbuf._4_4_,fillbuf._0_4_)" ( (field_expression "fillbuf._4_4_" identifier . field_identifier) , (field_expression "fillbuf._0_4_" identifier . field_identifier) )))) ;) (expression_statement "*(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30);" (assignment_expression "*(undefined8 *)(puVar1 + lVar9 + -0x10) = *(undefined8 *)(fillbuf + lVar9 + 0x30)" (pointer_expression "*(undefined8 *)(puVar1 + lVar9 + -0x10)" * (cast_expression "(undefined8 *)(puVar1 + lVar9 + -0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar1 + lVar9 + -0x10)" ( (binary_expression "puVar1 + lVar9 + -0x10" (binary_expression "puVar1 + lVar9" identifier + identifier) + number_literal) )))) = (pointer_expression "*(undefined8 *)(fillbuf + lVar9 + 0x30)" * (cast_expression "(undefined8 *)(fillbuf + lVar9 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(fillbuf + lVar9 + 0x30)" ( (binary_expression "fillbuf + lVar9 + 0x30" (binary_expression "fillbuf + lVar9" identifier + identifier) + number_literal) ))))) ;) (expression_statement "lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);" (assignment_expression "lVar9 = (long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8)" identifier = (binary_expression "(long)puVar1 - (long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8)" (cast_expression "(long)puVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)((ulong)(puVar1 + 8) & 0xfffffffffffffff8)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((ulong)(puVar1 + 8) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar1 + 8) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar1 + 8)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar1 + 8)" ( (binary_expression "puVar1 + 8" identifier + number_literal) ))) & number_literal) ))))) ;) (expression_statement "puVar8 = fillbuf + -lVar9;" (assignment_expression "puVar8 = fillbuf + -lVar9" identifier = (binary_expression "fillbuf + -lVar9" identifier + (unary_expression "-lVar9" - identifier))) ;) (expression_statement "puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8);" (assignment_expression "puVar10 = (undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8)" identifier = (cast_expression "(undefined8 *)((ulong)(puVar1 + 8) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(puVar1 + 8) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar1 + 8) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar1 + 8)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar1 + 8)" ( (binary_expression "puVar1 + 8" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar6 = uVar6 + lVar9 >> 3; uVar6 != 0; uVar6 = uVar6 - 1) {\n      *puVar10 = *(undefined8 *)puVar8;\n      puVar8 = puVar8 + 8;\n      puVar10 = puVar10 + 1;\n    }" for ( (assignment_expression "uVar6 = uVar6 + lVar9 >> 3" identifier = (binary_expression "uVar6 + lVar9 >> 3" (binary_expression "uVar6 + lVar9" identifier + identifier) >> number_literal)) ; (binary_expression "uVar6 != 0" identifier != number_literal) ; (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ) (compound_statement "{\n      *puVar10 = *(undefined8 *)puVar8;\n      puVar8 = puVar8 + 8;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = *(undefined8 *)puVar8;" (assignment_expression "*puVar10 = *(undefined8 *)puVar8" (pointer_expression "*puVar10" * identifier) = (pointer_expression "*(undefined8 *)puVar8" * (cast_expression "(undefined8 *)puVar8" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "puVar8 = puVar8 + 8;" (assignment_expression "puVar8 = puVar8 + 8" identifier = (binary_expression "puVar8 + 8" identifier + number_literal)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) })) }))) (expression_statement "sha1_process_block(ctx->buffer,len,ctx);" (call_expression "sha1_process_block(ctx->buffer,len,ctx)" identifier (argument_list "(ctx->buffer,len,ctx)" ( (field_expression "ctx->buffer" identifier -> field_identifier) , identifier , identifier ))) ;) (expression_statement "pvVar3 = sha1_read_ctx(ctx,resbuf);" (assignment_expression "pvVar3 = sha1_read_ctx(ctx,resbuf)" identifier = (call_expression "sha1_read_ctx(ctx,resbuf)" identifier (argument_list "(ctx,resbuf)" ( identifier , identifier )))) ;) (return_statement "return pvVar3;" return identifier ;) })))
(translation_unit "void FUN_002d4de0(long param_1,undefined8 param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong uVar4;\n  uint uVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  undefined8 *puVar8;\n  long lVar9;\n  \n  uVar1 = *(uint *)(param_1 + 0x1c);\n  iVar2 = *(int *)(param_1 + 0x18);\n  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar3 = *(uint *)(param_1 + 0x14);\n  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);\n  *(uint *)(param_1 + 0x14) = uVar5;\n  if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }\n  uVar3 = iVar2 << 3;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;\n  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);\n  lVar7 = lVar9 - (ulong)uVar1;\n  uVar4 = lVar7 - 8;\n  if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }\n  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);\n  FUN_002d3c10(param_1,param_2);\n  return;\n}\n\n" (function_definition "void FUN_002d4de0(long param_1,undefined8 param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong uVar4;\n  uint uVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  undefined8 *puVar8;\n  long lVar9;\n  \n  uVar1 = *(uint *)(param_1 + 0x1c);\n  iVar2 = *(int *)(param_1 + 0x18);\n  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar3 = *(uint *)(param_1 + 0x14);\n  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);\n  *(uint *)(param_1 + 0x14) = uVar5;\n  if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }\n  uVar3 = iVar2 << 3;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;\n  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);\n  lVar7 = lVar9 - (ulong)uVar1;\n  uVar4 = lVar7 - 8;\n  if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }\n  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);\n  FUN_002d3c10(param_1,param_2);\n  return;\n}" primitive_type (function_declarator "FUN_002d4de0(long param_1,undefined8 param_2)" identifier (parameter_list "(long param_1,undefined8 param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong uVar4;\n  uint uVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  undefined8 *puVar8;\n  long lVar9;\n  \n  uVar1 = *(uint *)(param_1 + 0x1c);\n  iVar2 = *(int *)(param_1 + 0x18);\n  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar3 = *(uint *)(param_1 + 0x14);\n  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);\n  *(uint *)(param_1 + 0x14) = uVar5;\n  if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }\n  uVar3 = iVar2 << 3;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;\n  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);\n  lVar7 = lVar9 - (ulong)uVar1;\n  uVar4 = lVar7 - 8;\n  if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }\n  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);\n  FUN_002d3c10(param_1,param_2);\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "undefined8 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = *(uint *)(param_1 + 0x1c);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x1c)" identifier = (pointer_expression "*(uint *)(param_1 + 0x1c)" * (cast_expression "(uint *)(param_1 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;" (assignment_expression "lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80" identifier = (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0)" ( (binary_expression "-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0" (unary_expression "-(ulong)(uVar1 < 0x38)" - (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 < 0x38)" ( (binary_expression "uVar1 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal)) ;) (expression_statement "uVar3 = *(uint *)(param_1 + 0x14);" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x14)" identifier = (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = uVar1 + *(uint *)(param_1 + 0x14);" (assignment_expression "uVar5 = uVar1 + *(uint *)(param_1 + 0x14)" identifier = (binary_expression "uVar1 + *(uint *)(param_1 + 0x14)" identifier + (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x14) = uVar5;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar5" (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = identifier) ;) (if_statement "if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }" if (parenthesized_expression "(CARRY4(uVar1,uVar3))" ( (call_expression "CARRY4(uVar1,uVar3)" identifier (argument_list "(uVar1,uVar3)" ( identifier , identifier ))) )) (compound_statement "{\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x18) = iVar2;" (assignment_expression "*(int *)(param_1 + 0x18) = iVar2" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "uVar3 = iVar2 << 3;" (assignment_expression "uVar3 = iVar2 << 3" identifier = (binary_expression "iVar2 << 3" identifier << number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;" (assignment_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18" (pointer_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" * (cast_expression "(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" ( (binary_expression "param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4" (binary_expression "param_1 + 0x20" identifier + number_literal) + (binary_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4" (parenthesized_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e)" ( (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0)" ( (binary_expression "-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0" (unary_expression "-(ulong)(uVar1 < 0x38)" - (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 < 0x38)" ( (binary_expression "uVar1 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal) )) * number_literal)) )))) = (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar3 | uVar5 >> 0x1d) << 0x18" (parenthesized_expression "(uVar3 | uVar5 >> 0x1d)" ( (binary_expression "uVar3 | uVar5 >> 0x1d" identifier | (binary_expression "uVar5 >> 0x1d" identifier >> number_literal)) )) << number_literal))) ;) (expression_statement "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;" (assignment_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00" (pointer_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" * (cast_expression "(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" ( (binary_expression "param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4" (binary_expression "param_1 + 0x20" identifier + number_literal) + (binary_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4" (parenthesized_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f)" ( (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0)" ( (binary_expression "-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0" (unary_expression "-(ulong)(uVar1 < 0x38)" - (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 < 0x38)" ( (binary_expression "uVar1 < 0x38" identifier < number_literal) )))) & number_literal) )) + number_literal) )) * number_literal)) )))) = (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00" (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000" (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18" (binary_expression "(uVar5 & 0x1fe0) << 0xb" (parenthesized_expression "(uVar5 & 0x1fe0)" ( (binary_expression "uVar5 & 0x1fe0" identifier & number_literal) )) << number_literal) | (binary_expression "uVar5 * 8 >> 0x18" (binary_expression "uVar5 * 8" identifier * number_literal) >> number_literal)) | (binary_expression "uVar5 * 0x8000000" identifier * number_literal)) | (binary_expression "uVar5 * 8 >> 8 & 0xff00" (binary_expression "uVar5 * 8 >> 8" (binary_expression "uVar5 * 8" identifier * number_literal) >> number_literal) & number_literal))) ;) (expression_statement "puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);" (assignment_expression "puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1)" identifier = (cast_expression "(undefined8 *)(param_1 + 0x20 + (ulong)uVar1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20 + (ulong)uVar1)" ( (binary_expression "param_1 + 0x20 + (ulong)uVar1" (binary_expression "param_1 + 0x20" identifier + number_literal) + (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) ;) (expression_statement "lVar7 = lVar9 - (ulong)uVar1;" (assignment_expression "lVar7 = lVar9 - (ulong)uVar1" identifier = (binary_expression "lVar9 - (ulong)uVar1" identifier - (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier))) ;) (expression_statement "uVar4 = lVar7 - 8;" (assignment_expression "uVar4 = lVar7 - 8" identifier = (binary_expression "lVar7 - 8" identifier - number_literal)) ;) (if_statement "if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" if (parenthesized_expression "(uVar4 < 8)" ( (binary_expression "uVar4 < 8" identifier < number_literal) )) (compound_statement "{\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }" { (if_statement "if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" if (parenthesized_expression "((uVar4 & 4) == 0)" ( (binary_expression "(uVar4 & 4) == 0" (parenthesized_expression "(uVar4 & 4)" ( (binary_expression "uVar4 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }" { (if_statement "if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }" if (parenthesized_expression "((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0))" ( (binary_expression "(uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)" (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)" ( (comma_expression "*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0" (assignment_expression "*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0" (pointer_expression "*(char *)puVar8" * (cast_expression "(char *)puVar8" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(char)(undefined4)DAT_0038f9c0" ( (type_descriptor "char" primitive_type) ) (cast_expression "(undefined4)DAT_0038f9c0" ( (type_descriptor "undefined4" type_identifier) ) identifier))) , (binary_expression "(uVar4 & 2) != 0" (parenthesized_expression "(uVar4 & 2)" ( (binary_expression "uVar4 & 2" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }" { (expression_statement "*(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);" (assignment_expression "*(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7)" (pointer_expression "*(undefined2 *)((long)puVar8 + lVar7 + -10)" * (cast_expression "(undefined2 *)((long)puVar8 + lVar7 + -10)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar7 + -10)" ( (binary_expression "(long)puVar8 + lVar7 + -10" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = (pointer_expression "*(undefined2 *)(&UNK_0038f9b6 + lVar7)" * (cast_expression "(undefined2 *)(&UNK_0038f9b6 + lVar7)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&UNK_0038f9b6 + lVar7)" ( (binary_expression "&UNK_0038f9b6 + lVar7" (pointer_expression "&UNK_0038f9b6" & identifier) + identifier) ))))) ;) })) }) (else_clause "else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" else (compound_statement "{\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" { (expression_statement "*(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;" (assignment_expression "*(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0" (pointer_expression "*(undefined4 *)puVar8" * (cast_expression "(undefined4 *)puVar8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(undefined4)DAT_0038f9c0" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;) (expression_statement "*(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);" (assignment_expression "*(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7)" (pointer_expression "*(undefined4 *)((long)puVar8 + lVar7 + -0xc)" * (cast_expression "(undefined4 *)((long)puVar8 + lVar7 + -0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar7 + -0xc)" ( (binary_expression "(long)puVar8 + lVar7 + -0xc" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = (pointer_expression "*(undefined4 *)(&UNK_0038f9b4 + lVar7)" * (cast_expression "(undefined4 *)(&UNK_0038f9b4 + lVar7)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&UNK_0038f9b4 + lVar7)" ( (binary_expression "&UNK_0038f9b4 + lVar7" (pointer_expression "&UNK_0038f9b4" & identifier) + identifier) ))))) ;) }))) }) (else_clause "else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" else (compound_statement "{\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" { (expression_statement "*puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);" (assignment_expression "*puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" (pointer_expression "*puVar8" * identifier) = (call_expression "CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" identifier (argument_list "(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" ( (field_expression "DAT_0038f9c0._4_4_" identifier . field_identifier) , (cast_expression "(undefined4)DAT_0038f9c0" ( (type_descriptor "undefined4" type_identifier) ) identifier) )))) ;) (expression_statement "*(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);" (assignment_expression "*(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7)" (pointer_expression "*(undefined8 *)((long)puVar8 + lVar7 + -0x10)" * (cast_expression "(undefined8 *)((long)puVar8 + lVar7 + -0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar7 + -0x10)" ( (binary_expression "(long)puVar8 + lVar7 + -0x10" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) = (pointer_expression "*(undefined8 *)(&UNK_0038f9b0 + lVar7)" * (cast_expression "(undefined8 *)(&UNK_0038f9b0 + lVar7)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&UNK_0038f9b0 + lVar7)" ( (binary_expression "&UNK_0038f9b0 + lVar7" (pointer_expression "&UNK_0038f9b0" & identifier) + identifier) ))))) ;) (expression_statement "lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);" (assignment_expression "lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" identifier = (binary_expression "(long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar8 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar8 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar8 + 1)" ( (binary_expression "puVar8 + 1" identifier + number_literal) ))) & number_literal) ))))) ;) (expression_statement "puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);" (assignment_expression "puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7)" identifier = (cast_expression "(undefined8 *)((long)&DAT_0038f9c0 - lVar7)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&DAT_0038f9c0 - lVar7)" ( (binary_expression "(long)&DAT_0038f9c0 - lVar7" (cast_expression "(long)&DAT_0038f9c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&DAT_0038f9c0" & identifier)) - identifier) )))) ;) (expression_statement "puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);" (assignment_expression "puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" identifier = (cast_expression "(undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" ( (binary_expression "(ulong)(puVar8 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar8 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(puVar8 + 1)" ( (binary_expression "puVar8 + 1" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }" for ( (assignment_expression "uVar4 = uVar4 + lVar7 >> 3" identifier = (binary_expression "uVar4 + lVar7 >> 3" (binary_expression "uVar4 + lVar7" identifier + identifier) >> number_literal)) ; (binary_expression "uVar4 != 0" identifier != number_literal) ; (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ) (compound_statement "{\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }" { (expression_statement "*puVar8 = *puVar6;" (assignment_expression "*puVar8 = *puVar6" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) })) }))) (expression_statement "FUN_002d3c40(param_1 + 0x20,lVar9,param_1);" (call_expression "FUN_002d3c40(param_1 + 0x20,lVar9,param_1)" identifier (argument_list "(param_1 + 0x20,lVar9,param_1)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) , identifier , identifier ))) ;) (expression_statement "FUN_002d3c10(param_1,param_2);" (call_expression "FUN_002d3c10(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) 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 IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < LIT) )))) & LIT) )) + LIT)) ;) (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 IDENT = (binary_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 TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (call_expression IDENT (argument_list ( IDENT , IDENT ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < LIT) )))) & LIT) )) + LIT) )) * LIT)) )))) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT | (binary_expression IDENT >> LIT)) )) << LIT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < LIT) )))) & LIT) )) + LIT) )) * LIT)) )))) = (binary_expression (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT) | (binary_expression (binary_expression IDENT * LIT) >> LIT)) | (binary_expression IDENT * LIT)) | (binary_expression (binary_expression (binary_expression IDENT * LIT) >> LIT) & LIT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT))) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) ))))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) ))))) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (call_expression IDENT (argument_list ( (field_expression IDENT . field_identifier) , (cast_expression ( (type_descriptor TYPE) ) IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) - IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) )))) ;) (for_statement for ( (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT - LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) }))) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return ;) })))
(function_definition "void FUN_002d4de0(long param_1,undefined8 param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong uVar4;\n  uint uVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  undefined8 *puVar8;\n  long lVar9;\n  \n  uVar1 = *(uint *)(param_1 + 0x1c);\n  iVar2 = *(int *)(param_1 + 0x18);\n  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar3 = *(uint *)(param_1 + 0x14);\n  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);\n  *(uint *)(param_1 + 0x14) = uVar5;\n  if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }\n  uVar3 = iVar2 << 3;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;\n  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);\n  lVar7 = lVar9 - (ulong)uVar1;\n  uVar4 = lVar7 - 8;\n  if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }\n  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);\n  FUN_002d3c10(param_1,param_2);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_002d4de0(long param_1,undefined8 param_2)" (identifier "FUN_002d4de0") (parameter_list "(long param_1,undefined8 param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  uint uVar3;\n  ulong uVar4;\n  uint uVar5;\n  undefined8 *puVar6;\n  long lVar7;\n  undefined8 *puVar8;\n  long lVar9;\n  \n  uVar1 = *(uint *)(param_1 + 0x1c);\n  iVar2 = *(int *)(param_1 + 0x18);\n  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;\n  uVar3 = *(uint *)(param_1 + 0x14);\n  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);\n  *(uint *)(param_1 + 0x14) = uVar5;\n  if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }\n  uVar3 = iVar2 << 3;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;\n  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;\n  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);\n  lVar7 = lVar9 - (ulong)uVar1;\n  uVar4 = lVar7 - 8;\n  if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }\n  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);\n  FUN_002d3c10(param_1,param_2);\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "undefined8 *puVar6;" (type_identifier "undefined8") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "undefined8 *puVar8;" (type_identifier "undefined8") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (expression_statement "uVar1 = *(uint *)(param_1 + 0x1c);" (assignment_expression "uVar1 = *(uint *)(param_1 + 0x1c)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)(param_1 + 0x1c)" (* "*") (cast_expression "(uint *)(param_1 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x18)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;" (assignment_expression "lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80" (identifier "lVar9") (= "=") (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0)" (( "(") (binary_expression "-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0" (unary_expression "-(ulong)(uVar1 < 0x38)" (- "-") (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar1 < 0x38)" (( "(") (binary_expression "uVar1 < 0x38" (identifier "uVar1") (< "<") (number_literal "0x38")) () ")")))) (& "&") (number_literal "0xffffffffffffffc0")) () ")")) (+ "+") (number_literal "0x80"))) (; ";")) (expression_statement "uVar3 = *(uint *)(param_1 + 0x14);" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x14)" (identifier "uVar3") (= "=") (pointer_expression "*(uint *)(param_1 + 0x14)" (* "*") (cast_expression "(uint *)(param_1 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "uVar5 = uVar1 + *(uint *)(param_1 + 0x14);" (assignment_expression "uVar5 = uVar1 + *(uint *)(param_1 + 0x14)" (identifier "uVar5") (= "=") (binary_expression "uVar1 + *(uint *)(param_1 + 0x14)" (identifier "uVar1") (+ "+") (pointer_expression "*(uint *)(param_1 + 0x14)" (* "*") (cast_expression "(uint *)(param_1 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x14) = uVar5;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar5" (pointer_expression "*(uint *)(param_1 + 0x14)" (* "*") (cast_expression "(uint *)(param_1 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (CARRY4(uVar1,uVar3)) {\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }" (if "if") (parenthesized_expression "(CARRY4(uVar1,uVar3))" (( "(") (call_expression "CARRY4(uVar1,uVar3)" (identifier "CARRY4") (argument_list "(uVar1,uVar3)" (( "(") (identifier "uVar1") (, ",") (identifier "uVar3") () ")"))) () ")")) (compound_statement "{\n    iVar2 = iVar2 + 1;\n    *(int *)(param_1 + 0x18) = iVar2;\n  }" ({ "{") (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x18) = iVar2;" (assignment_expression "*(int *)(param_1 + 0x18) = iVar2" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "iVar2")) (; ";")) (} "}"))) (expression_statement "uVar3 = iVar2 << 3;" (assignment_expression "uVar3 = iVar2 << 3" (identifier "uVar3") (= "=") (binary_expression "iVar2 << 3" (identifier "iVar2") (<< "<<") (number_literal "3"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18;" (assignment_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =\n       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18" (pointer_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" (* "*") (cast_expression "(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4)" (( "(") (binary_expression "param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4" (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) (+ "+") (binary_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4" (parenthesized_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e)" (( "(") (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0)" (( "(") (binary_expression "-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0" (unary_expression "-(ulong)(uVar1 < 0x38)" (- "-") (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar1 < 0x38)" (( "(") (binary_expression "uVar1 < 0x38" (identifier "uVar1") (< "<") (number_literal "0x38")) () ")")))) (& "&") (number_literal "0xfffffffffffffff0")) () ")")) (+ "+") (number_literal "0x1e")) () ")")) (* "*") (number_literal "4"))) () ")")))) (= "=") (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |\n       (uVar3 | uVar5 >> 0x1d) << 0x18" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8" (binary_expression "uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8" (binary_expression "uVar3 >> 0x18" (identifier "uVar3") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar3 & 0xff0000) >> 8" (parenthesized_expression "(uVar3 & 0xff0000)" (( "(") (binary_expression "uVar3 & 0xff0000" (identifier "uVar3") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar3 & 0xff00) << 8" (parenthesized_expression "(uVar3 & 0xff00)" (( "(") (binary_expression "uVar3 & 0xff00" (identifier "uVar3") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "(uVar3 | uVar5 >> 0x1d) << 0x18" (parenthesized_expression "(uVar3 | uVar5 >> 0x1d)" (( "(") (binary_expression "uVar3 | uVar5 >> 0x1d" (identifier "uVar3") (| "|") (binary_expression "uVar5 >> 0x1d" (identifier "uVar5") (>> ">>") (number_literal "0x1d"))) () ")")) (<< "<<") (number_literal "0x18")))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;" (assignment_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =\n       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00" (pointer_expression "*(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" (* "*") (cast_expression "(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4)" (( "(") (binary_expression "param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4" (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) (+ "+") (binary_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4" (parenthesized_expression "((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f)" (( "(") (binary_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f" (parenthesized_expression "(-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0)" (( "(") (binary_expression "-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0" (unary_expression "-(ulong)(uVar1 < 0x38)" (- "-") (call_expression "(ulong)(uVar1 < 0x38)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar1 < 0x38)" (( "(") (binary_expression "uVar1 < 0x38" (identifier "uVar1") (< "<") (number_literal "0x38")) () ")")))) (& "&") (number_literal "0xfffffffffffffff0")) () ")")) (+ "+") (number_literal "0x1f")) () ")")) (* "*") (number_literal "4"))) () ")")))) (= "=") (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00" (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000" (binary_expression "(uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18" (binary_expression "(uVar5 & 0x1fe0) << 0xb" (parenthesized_expression "(uVar5 & 0x1fe0)" (( "(") (binary_expression "uVar5 & 0x1fe0" (identifier "uVar5") (& "&") (number_literal "0x1fe0")) () ")")) (<< "<<") (number_literal "0xb")) (| "|") (binary_expression "uVar5 * 8 >> 0x18" (binary_expression "uVar5 * 8" (identifier "uVar5") (* "*") (number_literal "8")) (>> ">>") (number_literal "0x18"))) (| "|") (binary_expression "uVar5 * 0x8000000" (identifier "uVar5") (* "*") (number_literal "0x8000000"))) (| "|") (binary_expression "uVar5 * 8 >> 8 & 0xff00" (binary_expression "uVar5 * 8 >> 8" (binary_expression "uVar5 * 8" (identifier "uVar5") (* "*") (number_literal "8")) (>> ">>") (number_literal "8")) (& "&") (number_literal "0xff00")))) (; ";")) (expression_statement "puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);" (assignment_expression "puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1)" (identifier "puVar8") (= "=") (cast_expression "(undefined8 *)(param_1 + 0x20 + (ulong)uVar1)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20 + (ulong)uVar1)" (( "(") (binary_expression "param_1 + 0x20 + (ulong)uVar1" (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) (+ "+") (cast_expression "(ulong)uVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar1"))) () ")")))) (; ";")) (expression_statement "lVar7 = lVar9 - (ulong)uVar1;" (assignment_expression "lVar7 = lVar9 - (ulong)uVar1" (identifier "lVar7") (= "=") (binary_expression "lVar9 - (ulong)uVar1" (identifier "lVar9") (- "-") (cast_expression "(ulong)uVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar1")))) (; ";")) (expression_statement "uVar4 = lVar7 - 8;" (assignment_expression "uVar4 = lVar7 - 8" (identifier "uVar4") (= "=") (binary_expression "lVar7 - 8" (identifier "lVar7") (- "-") (number_literal "8"))) (; ";")) (if_statement "if (uVar4 < 8) {\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }\n  else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" (if "if") (parenthesized_expression "(uVar4 < 8)" (( "(") (binary_expression "uVar4 < 8" (identifier "uVar4") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n    if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }\n  }" ({ "{") (if_statement "if ((uVar4 & 4) == 0) {\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }\n    else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" (if "if") (parenthesized_expression "((uVar4 & 4) == 0)" (( "(") (binary_expression "(uVar4 & 4) == 0" (parenthesized_expression "(uVar4 & 4)" (( "(") (binary_expression "uVar4 & 4" (identifier "uVar4") (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }\n    }" ({ "{") (if_statement "if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }" (if "if") (parenthesized_expression "((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0))" (( "(") (binary_expression "(uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)" (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)" (( "(") (comma_expression "*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0" (assignment_expression "*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0" (pointer_expression "*(char *)puVar8" (* "*") (cast_expression "(char *)puVar8" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar8"))) (= "=") (cast_expression "(char)(undefined4)DAT_0038f9c0" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (cast_expression "(undefined4)DAT_0038f9c0" (( "(") (type_descriptor "undefined4" (type_identifier "undefined4")) () ")") (identifier "DAT_0038f9c0")))) (, ",") (binary_expression "(uVar4 & 2) != 0" (parenthesized_expression "(uVar4 & 2)" (( "(") (binary_expression "uVar4 & 2" (identifier "uVar4") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);\n      }" ({ "{") (expression_statement "*(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);" (assignment_expression "*(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7)" (pointer_expression "*(undefined2 *)((long)puVar8 + lVar7 + -10)" (* "*") (cast_expression "(undefined2 *)((long)puVar8 + lVar7 + -10)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + lVar7 + -10)" (( "(") (binary_expression "(long)puVar8 + lVar7 + -10" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (identifier "lVar7")) (+ "+") (number_literal "-10")) () ")")))) (= "=") (pointer_expression "*(undefined2 *)(&UNK_0038f9b6 + lVar7)" (* "*") (cast_expression "(undefined2 *)(&UNK_0038f9b6 + lVar7)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&UNK_0038f9b6 + lVar7)" (( "(") (binary_expression "&UNK_0038f9b6 + lVar7" (pointer_expression "&UNK_0038f9b6" (& "&") (identifier "UNK_0038f9b6")) (+ "+") (identifier "lVar7")) () ")"))))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" (else "else") (compound_statement "{\n      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;\n      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);\n    }" ({ "{") (expression_statement "*(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;" (assignment_expression "*(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0" (pointer_expression "*(undefined4 *)puVar8" (* "*") (cast_expression "(undefined4 *)puVar8" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar8"))) (= "=") (cast_expression "(undefined4)DAT_0038f9c0" (( "(") (type_descriptor "undefined4" (type_identifier "undefined4")) () ")") (identifier "DAT_0038f9c0"))) (; ";")) (expression_statement "*(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);" (assignment_expression "*(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7)" (pointer_expression "*(undefined4 *)((long)puVar8 + lVar7 + -0xc)" (* "*") (cast_expression "(undefined4 *)((long)puVar8 + lVar7 + -0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + lVar7 + -0xc)" (( "(") (binary_expression "(long)puVar8 + lVar7 + -0xc" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (identifier "lVar7")) (+ "+") (number_literal "-0xc")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(&UNK_0038f9b4 + lVar7)" (* "*") (cast_expression "(undefined4 *)(&UNK_0038f9b4 + lVar7)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&UNK_0038f9b4 + lVar7)" (( "(") (binary_expression "&UNK_0038f9b4 + lVar7" (pointer_expression "&UNK_0038f9b4" (& "&") (identifier "UNK_0038f9b4")) (+ "+") (identifier "lVar7")) () ")"))))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" (else "else") (compound_statement "{\n    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);\n    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);\n    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);\n    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);\n    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }\n  }" ({ "{") (expression_statement "*puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);" (assignment_expression "*puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (call_expression "CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" (identifier "CONCAT44") (argument_list "(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0)" (( "(") (field_expression "DAT_0038f9c0._4_4_" (identifier "DAT_0038f9c0") (. ".") (field_identifier "_4_4_")) (, ",") (cast_expression "(undefined4)DAT_0038f9c0" (( "(") (type_descriptor "undefined4" (type_identifier "undefined4")) () ")") (identifier "DAT_0038f9c0")) () ")")))) (; ";")) (expression_statement "*(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);" (assignment_expression "*(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7)" (pointer_expression "*(undefined8 *)((long)puVar8 + lVar7 + -0x10)" (* "*") (cast_expression "(undefined8 *)((long)puVar8 + lVar7 + -0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + lVar7 + -0x10)" (( "(") (binary_expression "(long)puVar8 + lVar7 + -0x10" (binary_expression "(long)puVar8 + lVar7" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (identifier "lVar7")) (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)(&UNK_0038f9b0 + lVar7)" (* "*") (cast_expression "(undefined8 *)(&UNK_0038f9b0 + lVar7)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&UNK_0038f9b0 + lVar7)" (( "(") (binary_expression "&UNK_0038f9b0 + lVar7" (pointer_expression "&UNK_0038f9b0" (& "&") (identifier "UNK_0038f9b0")) (+ "+") (identifier "lVar7")) () ")"))))) (; ";")) (expression_statement "lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);" (assignment_expression "lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (identifier "lVar7") (= "=") (binary_expression "(long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (- "-") (cast_expression "(long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (( "(") (binary_expression "(ulong)(puVar8 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar8 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(puVar8 + 1)" (( "(") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1")) () ")"))) (& "&") (number_literal "0xfffffffffffffff8")) () ")"))))) (; ";")) (expression_statement "puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);" (assignment_expression "puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7)" (identifier "puVar6") (= "=") (cast_expression "(undefined8 *)((long)&DAT_0038f9c0 - lVar7)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&DAT_0038f9c0 - lVar7)" (( "(") (binary_expression "(long)&DAT_0038f9c0 - lVar7" (cast_expression "(long)&DAT_0038f9c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&DAT_0038f9c0" (& "&") (identifier "DAT_0038f9c0"))) (- "-") (identifier "lVar7")) () ")")))) (; ";")) (expression_statement "puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);" (assignment_expression "puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (identifier "puVar8") (= "=") (cast_expression "(undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)(puVar8 + 1) & 0xfffffffffffffff8)" (( "(") (binary_expression "(ulong)(puVar8 + 1) & 0xfffffffffffffff8" (call_expression "(ulong)(puVar8 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(puVar8 + 1)" (( "(") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1")) () ")"))) (& "&") (number_literal "0xfffffffffffffff8")) () ")")))) (; ";")) (for_statement "for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }" (for "for") (( "(") (assignment_expression "uVar4 = uVar4 + lVar7 >> 3" (identifier "uVar4") (= "=") (binary_expression "uVar4 + lVar7 >> 3" (binary_expression "uVar4 + lVar7" (identifier "uVar4") (+ "+") (identifier "lVar7")) (>> ">>") (number_literal "3"))) (; ";") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "uVar4 = uVar4 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) () ")") (compound_statement "{\n      *puVar8 = *puVar6;\n      puVar6 = puVar6 + 1;\n      puVar8 = puVar8 + 1;\n    }" ({ "{") (expression_statement "*puVar8 = *puVar6;" (assignment_expression "*puVar8 = *puVar6" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" (identifier "puVar6") (= "=") (binary_expression "puVar6 + 1" (identifier "puVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "FUN_002d3c40(param_1 + 0x20,lVar9,param_1);" (call_expression "FUN_002d3c40(param_1 + 0x20,lVar9,param_1)" (identifier "FUN_002d3c40") (argument_list "(param_1 + 0x20,lVar9,param_1)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) (, ",") (identifier "lVar9") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "FUN_002d3c10(param_1,param_2);" (call_expression "FUN_002d3c10(param_1,param_2)" (identifier "FUN_002d3c10") (argument_list "(param_1,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

void * function_1(type_1 *ctx,void *resbuf)

{
  type_2 *var_9;
  type_3 var_1;
  void *pvVar3;
  type_4 var_3;
  type_3 var_4;
  type_5 var_8;
  type_3 var_5;
  type_2 *var_12;
  long var_7;
  type_6 *var_13;
  size_t var_6;
  
  var_1 = ctx->buflen;
  var_3 = ctx->total[1];
  var_6 = (-(type_5)(var_1 < 0x38) & 0xffffffffffffffc0) + 0x80;
  var_4 = ctx->total[0];
  var_5 = var_1 + ctx->total[0];
  ctx->total[0] = var_5;
  if (var_2(var_1,var_4)) {
    var_3 = var_3 + 1;
    ctx->total[1] = var_3;
  }
  var_4 = var_3 << 3;
  ctx->buffer[(-(type_5)(var_1 < 0x38) & 0xfffffffffffffff0) + 0x1e] =
       var_4 >> 0x18 | (var_4 & 0xff0000) >> 8 | (var_4 & 0xff00) << 8 |
       (var_4 | var_5 >> 0x1d) << 0x18;
  ctx->buffer[(-(type_5)(var_1 < 0x38) & 0xfffffffffffffff0) + 0x1f] =
       (var_5 & 0x1fe0) << 0xb | var_5 * 8 >> 0x18 | var_5 * 0x8000000 | var_5 * 8 >> 8 & 0xff00;
  var_9 = (type_2 *)((long)ctx->buffer + (type_5)var_1);
  var_7 = var_6 - var_1;
  var_8 = var_7 - 8;
  if (var_8 < 8) {
    if ((var_8 & 4) == 0) {
      if ((var_8 != 0) && (*var_9 = (type_2)var_10._0_4_, (var_8 & 2) != 0)) {
        *(type_7 *)(var_9 + var_7 + -10) = *(type_7 *)(var_10 + var_7 + 0x36);
      }
    }
    else {
      *(type_8 *)var_9 = var_10._0_4_;
      *(type_8 *)(var_9 + var_7 + -0xc) = *(type_8 *)(var_10 + var_7 + 0x34);
    }
  }
  else {
    *(type_5 *)var_9 = var_11(var_10._4_4_,var_10._0_4_);
    *(type_6 *)(var_9 + var_7 + -0x10) = *(type_6 *)(var_10 + var_7 + 0x30);
    var_7 = (long)var_9 - (long)((type_5)(var_9 + 8) & 0xfffffffffffffff8);
    var_12 = var_10 + -var_7;
    var_13 = (type_6 *)((type_5)(var_9 + 8) & 0xfffffffffffffff8);
    for (var_8 = var_8 + var_7 >> 3; var_8 != 0; var_8 = var_8 - 1) {
      *var_13 = *(type_6 *)var_12;
      var_12 = var_12 + 8;
      var_13 = var_13 + 1;
    }
  }
  var_14(ctx->buffer,var_6,ctx);
  pvVar3 = var_15(ctx,resbuf);
  return pvVar3;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (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: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) 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: (identifier) right: (number_literal))))) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) right: (number_literal)))))) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) right: (number_literal)))))) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (call_expression function: (identifier) arguments: (argument_list (field_expression argument: (identifier) field: (field_identifier)) (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (pointer_expression argument: (identifier))) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))))) (for_statement initializer: (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))) condition: (binary_expression left: (identifier) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (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))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (return_statement))))

void MASKED(long param_1,undefined8 param_2)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  ulong uVar4;
  uint uVar5;
  undefined8 *puVar6;
  long lVar7;
  undefined8 *puVar8;
  long lVar9;
  
  uVar1 = *(uint *)(param_1 + 0x1c);
  iVar2 = *(int *)(param_1 + 0x18);
  lVar9 = (-(ulong)(uVar1 < 0x38) & 0xffffffffffffffc0) + 0x80;
  uVar3 = *(uint *)(param_1 + 0x14);
  uVar5 = uVar1 + *(uint *)(param_1 + 0x14);
  *(uint *)(param_1 + 0x14) = uVar5;
  if (CARRY4(uVar1,uVar3)) {
    iVar2 = iVar2 + 1;
    *(int *)(param_1 + 0x18) = iVar2;
  }
  uVar3 = iVar2 << 3;
  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1e) * 4) =
       uVar3 >> 0x18 | (uVar3 & 0xff0000) >> 8 | (uVar3 & 0xff00) << 8 |
       (uVar3 | uVar5 >> 0x1d) << 0x18;
  *(uint *)(param_1 + 0x20 + ((-(ulong)(uVar1 < 0x38) & 0xfffffffffffffff0) + 0x1f) * 4) =
       (uVar5 & 0x1fe0) << 0xb | uVar5 * 8 >> 0x18 | uVar5 * 0x8000000 | uVar5 * 8 >> 8 & 0xff00;
  puVar8 = (undefined8 *)(param_1 + 0x20 + (ulong)uVar1);
  lVar7 = lVar9 - (ulong)uVar1;
  uVar4 = lVar7 - 8;
  if (uVar4 < 8) {
    if ((uVar4 & 4) == 0) {
      if ((uVar4 != 0) && (*(char *)puVar8 = (char)(undefined4)DAT_0038f9c0, (uVar4 & 2) != 0)) {
        *(undefined2 *)((long)puVar8 + lVar7 + -10) = *(undefined2 *)(&UNK_0038f9b6 + lVar7);
      }
    }
    else {
      *(undefined4 *)puVar8 = (undefined4)DAT_0038f9c0;
      *(undefined4 *)((long)puVar8 + lVar7 + -0xc) = *(undefined4 *)(&UNK_0038f9b4 + lVar7);
    }
  }
  else {
    *puVar8 = CONCAT44(DAT_0038f9c0._4_4_,(undefined4)DAT_0038f9c0);
    *(undefined8 *)((long)puVar8 + lVar7 + -0x10) = *(undefined8 *)(&UNK_0038f9b0 + lVar7);
    lVar7 = (long)puVar8 - (long)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);
    puVar6 = (undefined8 *)((long)&DAT_0038f9c0 - lVar7);
    puVar8 = (undefined8 *)((ulong)(puVar8 + 1) & 0xfffffffffffffff8);
    for (uVar4 = uVar4 + lVar7 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {
      *puVar8 = *puVar6;
      puVar6 = puVar6 + 1;
      puVar8 = puVar8 + 1;
    }
  }
  FUN_002d3c40(param_1 + 0x20,lVar9,param_1);
  FUN_002d3c10(param_1,param_2);
  return;
}

