
/* (anonymous namespace)::pool::allocate(unsigned long) [clone .constprop.3] */

ulong * (anonymous_namespace)::pool::allocate(ulong param_1)

{
  ulong *puVar1;
  undefined *puVar2;
  int iVar3;
  ulong *puVar4;
  undefined8 *puVar5;
  ulong *puVar6;
  ulong uVar7;
  ulong uVar8;
  
  puVar2 = PTR___pthread_key_create_0043dee8;
  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&
     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {
    uVar8 = __throw_concurrence_lock_error();
                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */
    puVar6 = (ulong *)allocate(uVar8);
    return puVar6;
  }
  uVar8 = 0x10;
  if (0xf < param_1 + 0x10) {
    uVar8 = param_1 + 0x10;
  }
  uVar8 = uVar8 + 0xf & 0xfffffffffffffff0;
  if (emergency_pool._40_8_ == 0) {
    puVar6 = (ulong *)0x0;
  }
  else {
    uVar7 = *(ulong *)emergency_pool._40_8_;
    puVar6 = (ulong *)emergency_pool._40_8_;
    if (uVar7 < uVar8) {
      do {
        puVar4 = puVar6;
        puVar6 = (ulong *)puVar4[1];
        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;
        uVar7 = *puVar6;
      } while (uVar7 < uVar8);
      puVar4 = puVar4 + 1;
    }
    else {
      puVar4 = (ulong *)(emergency_pool + 0x28);
    }
    if (uVar7 - uVar8 < 0x10) {
      *puVar6 = uVar7;
      *puVar4 = puVar6[1];
    }
    else {
      puVar1 = (ulong *)((long)puVar6 + uVar8);
      puVar1[1] = puVar6[1];
      puVar6 = (ulong *)*puVar4;
      *puVar1 = uVar7 - uVar8;
      *puVar6 = uVar8;
      *puVar4 = (ulong)puVar1;
    }
    puVar6 = puVar6 + 2;
  }
LAB_002daa14:
  if ((puVar2 != (undefined *)0x0) &&
     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {
    puVar5 = (undefined8 *)__cxa_allocate_exception(8);
    *puVar5 = &PTR____concurrence_unlock_error_004384b8;
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */
    __cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,
                __concurrence_unlock_error::~__concurrence_unlock_error);
  }
  return puVar6;
}



ulong * FUN_002da9a0(long param_1)

{
  ulong *puVar1;
  undefined *puVar2;
  int iVar3;
  ulong *puVar4;
  undefined8 *puVar5;
  undefined8 uVar6;
  ulong *puVar7;
  ulong uVar8;
  ulong uVar9;
  
  puVar2 = PTR___pthread_key_create_0043dee8;
  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&
     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {
    uVar6 = FUN_002da7e0();
                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */
    puVar7 = (ulong *)FUN_0014e68e(uVar6);
    return puVar7;
  }
  uVar9 = 0x10;
  if (0xf < param_1 + 0x10U) {
    uVar9 = param_1 + 0x10U;
  }
  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;
  if (DAT_004492a8 == (ulong *)0x0) {
    puVar7 = (ulong *)0x0;
  }
  else {
    uVar8 = *DAT_004492a8;
    puVar7 = DAT_004492a8;
    if (uVar8 < uVar9) {
      do {
        puVar4 = puVar7;
        puVar7 = (ulong *)puVar4[1];
        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;
        uVar8 = *puVar7;
      } while (uVar8 < uVar9);
      puVar4 = puVar4 + 1;
    }
    else {
      puVar4 = (ulong *)&DAT_004492a8;
    }
    if (uVar8 - uVar9 < 0x10) {
      *puVar7 = uVar8;
      *puVar4 = puVar7[1];
    }
    else {
      puVar1 = (ulong *)((long)puVar7 + uVar9);
      puVar1[1] = puVar7[1];
      puVar7 = (ulong *)*puVar4;
      *puVar1 = uVar8 - uVar9;
      *puVar7 = uVar9;
      *puVar4 = (ulong)puVar1;
    }
    puVar7 = puVar7 + 2;
  }
LAB_002daa14:
  if ((puVar2 != (undefined *)0x0) &&
     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {
    puVar5 = (undefined8 *)FUN_002dab00(8);
    *puVar5 = &PTR_FUN_004384b8;
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */
    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);
  }
  return puVar7;
}


PUSH RBP
PUSH RBX
MOV RBX,RDI
SUB RSP,0x8
MOV RBP,qword ptr [0x0043dee8]
TEST RBP,RBP
JZ 0x002da9c9
LEA RDI,[0x449280]
CALL 0x001479b0
TEST EAX,EAX
JNZ 0x002daab6
LEA RDI,[RBX + 0x10]
MOV EDX,0x10
MOV RAX,qword ptr [0x004492a8]
CMP RDI,0x10
CMOVNC RDX,RDI
ADD RDX,0xf
AND RDX,-0x10
TEST RAX,RAX
JZ 0x002daa78
MOV RCX,qword ptr [RAX]
CMP RDX,RCX
JA 0x002daa0b
JMP 0x002daa7c
MOV RCX,qword ptr [RBX]
CMP RDX,RCX
JBE 0x002daa38
MOV RAX,RBX
MOV RBX,qword ptr [RAX + 0x8]
TEST RBX,RBX
JNZ 0x002daa00
TEST RBP,RBP
JZ 0x002daa29
LEA RDI,[0x449280]
CALL 0x00147a80
TEST EAX,EAX
JNZ 0x002daa88
ADD RSP,0x8
MOV RAX,RBX
POP RBX
POP RBP
RET
ADD RAX,0x8
MOV RSI,RCX
MOV RDI,qword ptr [RBX + 0x8]
SUB RSI,RDX
CMP RSI,0xf
JBE 0x002daa70
LEA RCX,[RBX + RDX*0x1]
MOV qword ptr [RCX + 0x8],RDI
MOV RBX,qword ptr [RAX]
MOV qword ptr [RCX],RSI
MOV qword ptr [RBX],RDX
MOV qword ptr [RAX],RCX
ADD RBX,0x10
JMP 0x002daa14
MOV qword ptr [RBX],RCX
MOV qword ptr [RAX],RDI
JMP 0x002daa60
XOR EBX,EBX
JMP 0x002daa14
MOV RBX,RAX
LEA RAX,[0x4492a8]
JMP 0x002daa3c
MOV EDI,0x8
CALL 0x002dab00
LEA RDX,[0x4384a8]
LEA RSI,[0x438468]
MOV RDI,RAX
ADD RDX,0x10
MOV qword ptr [RAX],RDX
LEA RDX,[0x2da760]
CALL 0x002d9820
CALL 0x002da7e0
MOV RDI,RAX
JMP 0x0014e68e
(translation_unit "ulong * FUN_002da9a0(long param_1)\n\n{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  undefined8 uVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  ulong uVar9;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }\n  uVar9 = 0x10;\n  if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }\n  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;\n  if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }\n  return puVar7;\n}\n\n" (function_definition "ulong * FUN_002da9a0(long param_1)\n\n{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  undefined8 uVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  ulong uVar9;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }\n  uVar9 = 0x10;\n  if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }\n  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;\n  if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }\n  return puVar7;\n}" type_identifier (pointer_declarator "* FUN_002da9a0(long param_1)" * (function_declarator "FUN_002da9a0(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) )))) (compound_statement "{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  undefined8 uVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  ulong uVar9;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }\n  uVar9 = 0x10;\n  if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }\n  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;\n  if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }\n  return puVar7;\n}" { (declaration "ulong *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "ulong *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "ulong uVar9;" type_identifier identifier ;) (expression_statement "puVar2 = PTR___pthread_key_create_0043dee8;" (assignment_expression "puVar2 = PTR___pthread_key_create_0043dee8" identifier = identifier) ;) (if_statement "if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }" if (parenthesized_expression "((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0))" ( (binary_expression "(PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" (parenthesized_expression "(PTR___pthread_key_create_0043dee8 != (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0043dee8 != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" ( (comma_expression "iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0" (assignment_expression "iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280)" identifier = (call_expression "pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280)" identifier (argument_list "((pthread_mutex_t *)&DAT_00449280)" ( (cast_expression "(pthread_mutex_t *)&DAT_00449280" ( (type_descriptor "pthread_mutex_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00449280" & identifier)) )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    uVar6 = FUN_002da7e0();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }" { (expression_statement "uVar6 = FUN_002da7e0();" (assignment_expression "uVar6 = FUN_002da7e0()" identifier = (call_expression "FUN_002da7e0()" identifier (argument_list "()" ( )))) ;) comment (expression_statement "puVar7 = (ulong *)FUN_0014e68e(uVar6);" (assignment_expression "puVar7 = (ulong *)FUN_0014e68e(uVar6)" identifier = (cast_expression "(ulong *)FUN_0014e68e(uVar6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0014e68e(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))))) ;) (return_statement "return puVar7;" return identifier ;) })) (expression_statement "uVar9 = 0x10;" (assignment_expression "uVar9 = 0x10" identifier = number_literal) ;) (if_statement "if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }" if (parenthesized_expression "(0xf < param_1 + 0x10U)" ( (binary_expression "0xf < param_1 + 0x10U" number_literal < (binary_expression "param_1 + 0x10U" identifier + number_literal)) )) (compound_statement "{\n    uVar9 = param_1 + 0x10U;\n  }" { (expression_statement "uVar9 = param_1 + 0x10U;" (assignment_expression "uVar9 = param_1 + 0x10U" identifier = (binary_expression "param_1 + 0x10U" identifier + number_literal)) ;) })) (expression_statement "uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;" (assignment_expression "uVar9 = uVar9 + 0xf & 0xfffffffffffffff0" identifier = (binary_expression "uVar9 + 0xf & 0xfffffffffffffff0" (binary_expression "uVar9 + 0xf" identifier + number_literal) & number_literal)) ;) (if_statement "if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" if (parenthesized_expression "(DAT_004492a8 == (ulong *)0x0)" ( (binary_expression "DAT_004492a8 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar7 = (ulong *)0x0;\n  }" { (expression_statement "puVar7 = (ulong *)0x0;" (assignment_expression "puVar7 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" else (compound_statement "{\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" { (expression_statement "uVar8 = *DAT_004492a8;" (assignment_expression "uVar8 = *DAT_004492a8" identifier = (pointer_expression "*DAT_004492a8" * identifier)) ;) (expression_statement "puVar7 = DAT_004492a8;" (assignment_expression "puVar7 = DAT_004492a8" identifier = identifier) ;) (if_statement "if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" if (parenthesized_expression "(uVar8 < uVar9)" ( (binary_expression "uVar8 < uVar9" identifier < identifier) )) (compound_statement "{\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }" { (do_statement "do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);" do (compound_statement "{\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      }" { (expression_statement "puVar4 = puVar7;" (assignment_expression "puVar4 = puVar7" identifier = identifier) ;) (expression_statement "puVar7 = (ulong *)puVar4[1];" (assignment_expression "puVar7 = (ulong *)puVar4[1]" identifier = (cast_expression "(ulong *)puVar4[1]" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ]))) ;) (if_statement "if (puVar7 == (ulong *)0x0) goto LAB_002daa14;" if (parenthesized_expression "(puVar7 == (ulong *)0x0)" ( (binary_expression "puVar7 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_002daa14;" goto statement_identifier ;)) (expression_statement "uVar8 = *puVar7;" (assignment_expression "uVar8 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) }) while (parenthesized_expression "(uVar8 < uVar9)" ( (binary_expression "uVar8 < uVar9" identifier < identifier) )) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" else (compound_statement "{\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" { (expression_statement "puVar4 = (ulong *)&DAT_004492a8;" (assignment_expression "puVar4 = (ulong *)&DAT_004492a8" identifier = (cast_expression "(ulong *)&DAT_004492a8" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_004492a8" & identifier))) ;) }))) (if_statement "if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" if (parenthesized_expression "(uVar8 - uVar9 < 0x10)" ( (binary_expression "uVar8 - uVar9 < 0x10" (binary_expression "uVar8 - uVar9" identifier - identifier) < number_literal) )) (compound_statement "{\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }" { (expression_statement "*puVar7 = uVar8;" (assignment_expression "*puVar7 = uVar8" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "*puVar4 = puVar7[1];" (assignment_expression "*puVar4 = puVar7[1]" (pointer_expression "*puVar4" * identifier) = (subscript_expression "puVar7[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" else (compound_statement "{\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" { (expression_statement "puVar1 = (ulong *)((long)puVar7 + uVar9);" (assignment_expression "puVar1 = (ulong *)((long)puVar7 + uVar9)" identifier = (cast_expression "(ulong *)((long)puVar7 + uVar9)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + uVar9)" ( (binary_expression "(long)puVar7 + uVar9" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "puVar1[1] = puVar7[1];" (assignment_expression "puVar1[1] = puVar7[1]" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = (subscript_expression "puVar7[1]" identifier [ number_literal ])) ;) (expression_statement "puVar7 = (ulong *)*puVar4;" (assignment_expression "puVar7 = (ulong *)*puVar4" identifier = (cast_expression "(ulong *)*puVar4" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier))) ;) (expression_statement "*puVar1 = uVar8 - uVar9;" (assignment_expression "*puVar1 = uVar8 - uVar9" (pointer_expression "*puVar1" * identifier) = (binary_expression "uVar8 - uVar9" identifier - identifier)) ;) (expression_statement "*puVar7 = uVar9;" (assignment_expression "*puVar7 = uVar9" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "*puVar4 = (ulong)puVar1;" (assignment_expression "*puVar4 = (ulong)puVar1" (pointer_expression "*puVar4" * identifier) = (cast_expression "(ulong)puVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }))) (expression_statement "puVar7 = puVar7 + 2;" (assignment_expression "puVar7 = puVar7 + 2" identifier = (binary_expression "puVar7 + 2" identifier + number_literal)) ;) }))) (labeled_statement "LAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" statement_identifier : (if_statement "if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" if (parenthesized_expression "((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0))" ( (binary_expression "(puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" (parenthesized_expression "(puVar2 != (undefined *)0x0)" ( (binary_expression "puVar2 != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" ( (comma_expression "iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0" (assignment_expression "iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280)" identifier = (call_expression "pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280)" identifier (argument_list "((pthread_mutex_t *)&DAT_00449280)" ( (cast_expression "(pthread_mutex_t *)&DAT_00449280" ( (type_descriptor "pthread_mutex_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00449280" & identifier)) )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" { (expression_statement "puVar5 = (undefined8 *)FUN_002dab00(8);" (assignment_expression "puVar5 = (undefined8 *)FUN_002dab00(8)" identifier = (cast_expression "(undefined8 *)FUN_002dab00(8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002dab00(8)" identifier (argument_list "(8)" ( number_literal ))))) ;) (expression_statement "*puVar5 = &PTR_FUN_004384b8;" (assignment_expression "*puVar5 = &PTR_FUN_004384b8" (pointer_expression "*puVar5" * identifier) = (pointer_expression "&PTR_FUN_004384b8" & identifier)) ;) comment comment (expression_statement "FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);" (call_expression "FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760)" identifier (argument_list "(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760)" ( identifier , (pointer_expression "&PTR_PTR_FUN_00438468" & identifier) , identifier ))) ;) }))) (return_statement "return puVar7;" return identifier ;) })))
(translation_unit "/* (anonymous namespace)::pool::allocate(unsigned long) [clone .constprop.3] */\n\nulong * (anonymous_namespace)::pool::allocate(ulong param_1)\n\n{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  ulong *puVar6;\n  ulong uVar7;\n  ulong uVar8;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    uVar8 = __throw_concurrence_lock_error();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar6 = (ulong *)allocate(uVar8);\n    return puVar6;\n  }\n  uVar8 = 0x10;\n  if (0xf < param_1 + 0x10) {\n    uVar8 = param_1 + 0x10;\n  }\n  uVar8 = uVar8 + 0xf & 0xfffffffffffffff0;\n  if (emergency_pool._40_8_ == 0) {\n    puVar6 = (ulong *)0x0;\n  }\n  else {\n    uVar7 = *(ulong *)emergency_pool._40_8_;\n    puVar6 = (ulong *)emergency_pool._40_8_;\n    if (uVar7 < uVar8) {\n      do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }\n    if (uVar7 - uVar8 < 0x10) {\n      *puVar6 = uVar7;\n      *puVar4 = puVar6[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar6 = puVar6 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    puVar5 = (undefined8 *)__cxa_allocate_exception(8);\n    *puVar5 = &PTR____concurrence_unlock_error_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    __cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error);\n  }\n  return puVar6;\n}\n\n" comment (ERROR "ulong * (anonymous_namespace)::" (binary_expression "ulong * (anonymous_namespace)" identifier * (parenthesized_expression "(anonymous_namespace)" ( identifier ))) : :) (labeled_statement "pool::allocate(ulong param_1)\n\n{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  ulong *puVar6;\n  ulong uVar7;\n  ulong uVar8;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    uVar8 = __throw_concurrence_lock_error();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar6 = (ulong *)allocate(uVar8);\n    return puVar6;\n  }\n  uVar8 = 0x10;\n  if (0xf < param_1 + 0x10) {\n    uVar8 = param_1 + 0x10;\n  }\n  uVar8 = uVar8 + 0xf & 0xfffffffffffffff0;\n  if (emergency_pool._40_8_ == 0) {\n    puVar6 = (ulong *)0x0;\n  }\n  else {\n    uVar7 = *(ulong *)emergency_pool._40_8_;\n    puVar6 = (ulong *)emergency_pool._40_8_;\n    if (uVar7 < uVar8) {\n      do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }\n    if (uVar7 - uVar8 < 0x10) {\n      *puVar6 = uVar7;\n      *puVar4 = puVar6[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar6 = puVar6 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    puVar5 = (undefined8 *)__cxa_allocate_exception(8);\n    *puVar5 = &PTR____concurrence_unlock_error_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    __cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error);\n  }\n  return puVar6;\n}" statement_identifier : (ERROR ":allocate(ulong param_1)" : (macro_type_specifier "allocate(ulong param_1)" identifier ( (ERROR "ulong" type_identifier) (type_descriptor "param_1" type_identifier) ))) (compound_statement "{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  ulong *puVar6;\n  ulong uVar7;\n  ulong uVar8;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    uVar8 = __throw_concurrence_lock_error();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar6 = (ulong *)allocate(uVar8);\n    return puVar6;\n  }\n  uVar8 = 0x10;\n  if (0xf < param_1 + 0x10) {\n    uVar8 = param_1 + 0x10;\n  }\n  uVar8 = uVar8 + 0xf & 0xfffffffffffffff0;\n  if (emergency_pool._40_8_ == 0) {\n    puVar6 = (ulong *)0x0;\n  }\n  else {\n    uVar7 = *(ulong *)emergency_pool._40_8_;\n    puVar6 = (ulong *)emergency_pool._40_8_;\n    if (uVar7 < uVar8) {\n      do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }\n    if (uVar7 - uVar8 < 0x10) {\n      *puVar6 = uVar7;\n      *puVar4 = puVar6[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar6 = puVar6 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    puVar5 = (undefined8 *)__cxa_allocate_exception(8);\n    *puVar5 = &PTR____concurrence_unlock_error_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    __cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error);\n  }\n  return puVar6;\n}" { (declaration "ulong *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "ulong *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "ulong uVar8;" type_identifier identifier ;) (expression_statement "puVar2 = PTR___pthread_key_create_0043dee8;" (assignment_expression "puVar2 = PTR___pthread_key_create_0043dee8" identifier = identifier) ;) (if_statement "if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    uVar8 = __throw_concurrence_lock_error();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar6 = (ulong *)allocate(uVar8);\n    return puVar6;\n  }" if (parenthesized_expression "((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0))" ( (binary_expression "(PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0)" (parenthesized_expression "(PTR___pthread_key_create_0043dee8 != (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0043dee8 != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0)" ( (comma_expression "iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool), iVar3 != 0" (assignment_expression "iVar3 = pthread_mutex_lock((pthread_mutex_t *)emergency_pool)" identifier = (call_expression "pthread_mutex_lock((pthread_mutex_t *)emergency_pool)" identifier (argument_list "((pthread_mutex_t *)emergency_pool)" ( (cast_expression "(pthread_mutex_t *)emergency_pool" ( (type_descriptor "pthread_mutex_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    uVar8 = __throw_concurrence_lock_error();\n                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */\n    puVar6 = (ulong *)allocate(uVar8);\n    return puVar6;\n  }" { (expression_statement "uVar8 = __throw_concurrence_lock_error();" (assignment_expression "uVar8 = __throw_concurrence_lock_error()" identifier = (call_expression "__throw_concurrence_lock_error()" identifier (argument_list "()" ( )))) ;) comment (expression_statement "puVar6 = (ulong *)allocate(uVar8);" (assignment_expression "puVar6 = (ulong *)allocate(uVar8)" identifier = (cast_expression "(ulong *)allocate(uVar8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "allocate(uVar8)" identifier (argument_list "(uVar8)" ( identifier ))))) ;) (return_statement "return puVar6;" return identifier ;) })) (expression_statement "uVar8 = 0x10;" (assignment_expression "uVar8 = 0x10" identifier = number_literal) ;) (if_statement "if (0xf < param_1 + 0x10) {\n    uVar8 = param_1 + 0x10;\n  }" if (parenthesized_expression "(0xf < param_1 + 0x10)" ( (binary_expression "0xf < param_1 + 0x10" number_literal < (binary_expression "param_1 + 0x10" identifier + number_literal)) )) (compound_statement "{\n    uVar8 = param_1 + 0x10;\n  }" { (expression_statement "uVar8 = param_1 + 0x10;" (assignment_expression "uVar8 = param_1 + 0x10" identifier = (binary_expression "param_1 + 0x10" identifier + number_literal)) ;) })) (expression_statement "uVar8 = uVar8 + 0xf & 0xfffffffffffffff0;" (assignment_expression "uVar8 = uVar8 + 0xf & 0xfffffffffffffff0" identifier = (binary_expression "uVar8 + 0xf & 0xfffffffffffffff0" (binary_expression "uVar8 + 0xf" identifier + number_literal) & number_literal)) ;) (if_statement "if (emergency_pool._40_8_ == 0) {\n    puVar6 = (ulong *)0x0;\n  }\n  else {\n    uVar7 = *(ulong *)emergency_pool._40_8_;\n    puVar6 = (ulong *)emergency_pool._40_8_;\n    if (uVar7 < uVar8) {\n      do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }\n    if (uVar7 - uVar8 < 0x10) {\n      *puVar6 = uVar7;\n      *puVar4 = puVar6[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar6 = puVar6 + 2;\n  }" if (parenthesized_expression "(emergency_pool._40_8_ == 0)" ( (binary_expression "emergency_pool._40_8_ == 0" (field_expression "emergency_pool._40_8_" identifier . field_identifier) == number_literal) )) (compound_statement "{\n    puVar6 = (ulong *)0x0;\n  }" { (expression_statement "puVar6 = (ulong *)0x0;" (assignment_expression "puVar6 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    uVar7 = *(ulong *)emergency_pool._40_8_;\n    puVar6 = (ulong *)emergency_pool._40_8_;\n    if (uVar7 < uVar8) {\n      do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }\n    if (uVar7 - uVar8 < 0x10) {\n      *puVar6 = uVar7;\n      *puVar4 = puVar6[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar6 = puVar6 + 2;\n  }" else (compound_statement "{\n    uVar7 = *(ulong *)emergency_pool._40_8_;\n    puVar6 = (ulong *)emergency_pool._40_8_;\n    if (uVar7 < uVar8) {\n      do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }\n    if (uVar7 - uVar8 < 0x10) {\n      *puVar6 = uVar7;\n      *puVar4 = puVar6[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar6 = puVar6 + 2;\n  }" { (expression_statement "uVar7 = *(ulong *)emergency_pool._40_8_;" (assignment_expression "uVar7 = *(ulong *)emergency_pool._40_8_" identifier = (pointer_expression "*(ulong *)emergency_pool._40_8_" * (cast_expression "(ulong *)emergency_pool._40_8_" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "emergency_pool._40_8_" identifier . field_identifier)))) ;) (expression_statement "puVar6 = (ulong *)emergency_pool._40_8_;" (assignment_expression "puVar6 = (ulong *)emergency_pool._40_8_" identifier = (cast_expression "(ulong *)emergency_pool._40_8_" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "emergency_pool._40_8_" identifier . field_identifier))) ;) (if_statement "if (uVar7 < uVar8) {\n      do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }" if (parenthesized_expression "(uVar7 < uVar8)" ( (binary_expression "uVar7 < uVar8" identifier < identifier) )) (compound_statement "{\n      do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);\n      puVar4 = puVar4 + 1;\n    }" { (do_statement "do {\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      } while (uVar7 < uVar8);" do (compound_statement "{\n        puVar4 = puVar6;\n        puVar6 = (ulong *)puVar4[1];\n        if (puVar6 == (ulong *)0x0) goto LAB_002daa14;\n        uVar7 = *puVar6;\n      }" { (expression_statement "puVar4 = puVar6;" (assignment_expression "puVar4 = puVar6" identifier = identifier) ;) (expression_statement "puVar6 = (ulong *)puVar4[1];" (assignment_expression "puVar6 = (ulong *)puVar4[1]" identifier = (cast_expression "(ulong *)puVar4[1]" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ]))) ;) (if_statement "if (puVar6 == (ulong *)0x0) goto LAB_002daa14;" if (parenthesized_expression "(puVar6 == (ulong *)0x0)" ( (binary_expression "puVar6 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_002daa14;" goto statement_identifier ;)) (expression_statement "uVar7 = *puVar6;" (assignment_expression "uVar7 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) }) while (parenthesized_expression "(uVar7 < uVar8)" ( (binary_expression "uVar7 < uVar8" identifier < identifier) )) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }" else (compound_statement "{\n      puVar4 = (ulong *)(emergency_pool + 0x28);\n    }" { (expression_statement "puVar4 = (ulong *)(emergency_pool + 0x28);" (assignment_expression "puVar4 = (ulong *)(emergency_pool + 0x28)" identifier = (cast_expression "(ulong *)(emergency_pool + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(emergency_pool + 0x28)" ( (binary_expression "emergency_pool + 0x28" identifier + number_literal) )))) ;) }))) (if_statement "if (uVar7 - uVar8 < 0x10) {\n      *puVar6 = uVar7;\n      *puVar4 = puVar6[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }" if (parenthesized_expression "(uVar7 - uVar8 < 0x10)" ( (binary_expression "uVar7 - uVar8 < 0x10" (binary_expression "uVar7 - uVar8" identifier - identifier) < number_literal) )) (compound_statement "{\n      *puVar6 = uVar7;\n      *puVar4 = puVar6[1];\n    }" { (expression_statement "*puVar6 = uVar7;" (assignment_expression "*puVar6 = uVar7" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "*puVar4 = puVar6[1];" (assignment_expression "*puVar4 = puVar6[1]" (pointer_expression "*puVar4" * identifier) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }" else (compound_statement "{\n      puVar1 = (ulong *)((long)puVar6 + uVar8);\n      puVar1[1] = puVar6[1];\n      puVar6 = (ulong *)*puVar4;\n      *puVar1 = uVar7 - uVar8;\n      *puVar6 = uVar8;\n      *puVar4 = (ulong)puVar1;\n    }" { (expression_statement "puVar1 = (ulong *)((long)puVar6 + uVar8);" (assignment_expression "puVar1 = (ulong *)((long)puVar6 + uVar8)" identifier = (cast_expression "(ulong *)((long)puVar6 + uVar8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar6 + uVar8)" ( (binary_expression "(long)puVar6 + uVar8" (cast_expression "(long)puVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "puVar1[1] = puVar6[1];" (assignment_expression "puVar1[1] = puVar6[1]" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = (ulong *)*puVar4;" (assignment_expression "puVar6 = (ulong *)*puVar4" identifier = (cast_expression "(ulong *)*puVar4" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier))) ;) (expression_statement "*puVar1 = uVar7 - uVar8;" (assignment_expression "*puVar1 = uVar7 - uVar8" (pointer_expression "*puVar1" * identifier) = (binary_expression "uVar7 - uVar8" identifier - identifier)) ;) (expression_statement "*puVar6 = uVar8;" (assignment_expression "*puVar6 = uVar8" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "*puVar4 = (ulong)puVar1;" (assignment_expression "*puVar4 = (ulong)puVar1" (pointer_expression "*puVar4" * identifier) = (cast_expression "(ulong)puVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }))) (expression_statement "puVar6 = puVar6 + 2;" (assignment_expression "puVar6 = puVar6 + 2" identifier = (binary_expression "puVar6 + 2" identifier + number_literal)) ;) }))) (labeled_statement "LAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    puVar5 = (undefined8 *)__cxa_allocate_exception(8);\n    *puVar5 = &PTR____concurrence_unlock_error_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    __cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error);\n  }" statement_identifier : (if_statement "if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0)) {\n    puVar5 = (undefined8 *)__cxa_allocate_exception(8);\n    *puVar5 = &PTR____concurrence_unlock_error_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    __cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error);\n  }" if (parenthesized_expression "((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0))" ( (binary_expression "(puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0)" (parenthesized_expression "(puVar2 != (undefined *)0x0)" ( (binary_expression "puVar2 != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0)" ( (comma_expression "iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool), iVar3 != 0" (assignment_expression "iVar3 = pthread_mutex_unlock((pthread_mutex_t *)emergency_pool)" identifier = (call_expression "pthread_mutex_unlock((pthread_mutex_t *)emergency_pool)" identifier (argument_list "((pthread_mutex_t *)emergency_pool)" ( (cast_expression "(pthread_mutex_t *)emergency_pool" ( (type_descriptor "pthread_mutex_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    puVar5 = (undefined8 *)__cxa_allocate_exception(8);\n    *puVar5 = &PTR____concurrence_unlock_error_004384b8;\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */\n    __cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error);\n  }" { (expression_statement "puVar5 = (undefined8 *)__cxa_allocate_exception(8);" (assignment_expression "puVar5 = (undefined8 *)__cxa_allocate_exception(8)" identifier = (cast_expression "(undefined8 *)__cxa_allocate_exception(8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__cxa_allocate_exception(8)" identifier (argument_list "(8)" ( number_literal ))))) ;) (expression_statement "*puVar5 = &PTR____concurrence_unlock_error_004384b8;" (assignment_expression "*puVar5 = &PTR____concurrence_unlock_error_004384b8" (pointer_expression "*puVar5" * identifier) = (pointer_expression "&PTR____concurrence_unlock_error_004384b8" & identifier)) ;) comment comment (expression_statement "__cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error);" (call_expression "__cxa_throw(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error)" identifier (argument_list "(puVar5,&__concurrence_unlock_error::typeinfo,\n                __concurrence_unlock_error::~__concurrence_unlock_error)" ( identifier , (pointer_expression "&__concurrence_unlock_error" & identifier) (ERROR "::typeinfo" : : identifier) , (ERROR "__concurrence_unlock_error::" identifier : :) (unary_expression "~__concurrence_unlock_error" ~ identifier) ))) ;) }))) (return_statement "return puVar6;" return identifier ;) })))
(translation_unit "ulong * FUN_002da9a0(long param_1)\n\n{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  undefined8 uVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  ulong uVar9;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }\n  uVar9 = 0x10;\n  if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }\n  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;\n  if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }\n  return puVar7;\n}\n\n" (function_definition "ulong * FUN_002da9a0(long param_1)\n\n{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  undefined8 uVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  ulong uVar9;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }\n  uVar9 = 0x10;\n  if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }\n  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;\n  if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }\n  return puVar7;\n}" type_identifier (pointer_declarator "* FUN_002da9a0(long param_1)" * (function_declarator "FUN_002da9a0(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) )))) (compound_statement "{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  undefined8 uVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  ulong uVar9;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }\n  uVar9 = 0x10;\n  if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }\n  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;\n  if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }\n  return puVar7;\n}" { (declaration "ulong *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "ulong *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "ulong uVar9;" type_identifier identifier ;) (expression_statement "puVar2 = PTR___pthread_key_create_0043dee8;" (assignment_expression "puVar2 = PTR___pthread_key_create_0043dee8" identifier = identifier) ;) (if_statement "if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }" if (parenthesized_expression "((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0))" ( (binary_expression "(PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" (parenthesized_expression "(PTR___pthread_key_create_0043dee8 != (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0043dee8 != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" ( (comma_expression "iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0" (assignment_expression "iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280)" identifier = (call_expression "pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280)" identifier (argument_list "((pthread_mutex_t *)&DAT_00449280)" ( (cast_expression "(pthread_mutex_t *)&DAT_00449280" ( (type_descriptor "pthread_mutex_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00449280" & identifier)) )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }" { (expression_statement "uVar6 = FUN_002da7e0();" (assignment_expression "uVar6 = FUN_002da7e0()" identifier = (call_expression "FUN_002da7e0()" identifier (argument_list "()" ( )))) ;) (expression_statement "puVar7 = (ulong *)FUN_0014e68e(uVar6);" (assignment_expression "puVar7 = (ulong *)FUN_0014e68e(uVar6)" identifier = (cast_expression "(ulong *)FUN_0014e68e(uVar6)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0014e68e(uVar6)" identifier (argument_list "(uVar6)" ( identifier ))))) ;) (return_statement "return puVar7;" return identifier ;) })) (expression_statement "uVar9 = 0x10;" (assignment_expression "uVar9 = 0x10" identifier = number_literal) ;) (if_statement "if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }" if (parenthesized_expression "(0xf < param_1 + 0x10U)" ( (binary_expression "0xf < param_1 + 0x10U" number_literal < (binary_expression "param_1 + 0x10U" identifier + number_literal)) )) (compound_statement "{\n    uVar9 = param_1 + 0x10U;\n  }" { (expression_statement "uVar9 = param_1 + 0x10U;" (assignment_expression "uVar9 = param_1 + 0x10U" identifier = (binary_expression "param_1 + 0x10U" identifier + number_literal)) ;) })) (expression_statement "uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;" (assignment_expression "uVar9 = uVar9 + 0xf & 0xfffffffffffffff0" identifier = (binary_expression "uVar9 + 0xf & 0xfffffffffffffff0" (binary_expression "uVar9 + 0xf" identifier + number_literal) & number_literal)) ;) (if_statement "if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" if (parenthesized_expression "(DAT_004492a8 == (ulong *)0x0)" ( (binary_expression "DAT_004492a8 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar7 = (ulong *)0x0;\n  }" { (expression_statement "puVar7 = (ulong *)0x0;" (assignment_expression "puVar7 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" else (compound_statement "{\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" { (expression_statement "uVar8 = *DAT_004492a8;" (assignment_expression "uVar8 = *DAT_004492a8" identifier = (pointer_expression "*DAT_004492a8" * identifier)) ;) (expression_statement "puVar7 = DAT_004492a8;" (assignment_expression "puVar7 = DAT_004492a8" identifier = identifier) ;) (if_statement "if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" if (parenthesized_expression "(uVar8 < uVar9)" ( (binary_expression "uVar8 < uVar9" identifier < identifier) )) (compound_statement "{\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }" { (do_statement "do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);" do (compound_statement "{\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      }" { (expression_statement "puVar4 = puVar7;" (assignment_expression "puVar4 = puVar7" identifier = identifier) ;) (expression_statement "puVar7 = (ulong *)puVar4[1];" (assignment_expression "puVar7 = (ulong *)puVar4[1]" identifier = (cast_expression "(ulong *)puVar4[1]" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ]))) ;) (if_statement "if (puVar7 == (ulong *)0x0) goto LAB_002daa14;" if (parenthesized_expression "(puVar7 == (ulong *)0x0)" ( (binary_expression "puVar7 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_002daa14;" goto statement_identifier ;)) (expression_statement "uVar8 = *puVar7;" (assignment_expression "uVar8 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) }) while (parenthesized_expression "(uVar8 < uVar9)" ( (binary_expression "uVar8 < uVar9" identifier < identifier) )) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" else (compound_statement "{\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" { (expression_statement "puVar4 = (ulong *)&DAT_004492a8;" (assignment_expression "puVar4 = (ulong *)&DAT_004492a8" identifier = (cast_expression "(ulong *)&DAT_004492a8" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_004492a8" & identifier))) ;) }))) (if_statement "if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" if (parenthesized_expression "(uVar8 - uVar9 < 0x10)" ( (binary_expression "uVar8 - uVar9 < 0x10" (binary_expression "uVar8 - uVar9" identifier - identifier) < number_literal) )) (compound_statement "{\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }" { (expression_statement "*puVar7 = uVar8;" (assignment_expression "*puVar7 = uVar8" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "*puVar4 = puVar7[1];" (assignment_expression "*puVar4 = puVar7[1]" (pointer_expression "*puVar4" * identifier) = (subscript_expression "puVar7[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" else (compound_statement "{\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" { (expression_statement "puVar1 = (ulong *)((long)puVar7 + uVar9);" (assignment_expression "puVar1 = (ulong *)((long)puVar7 + uVar9)" identifier = (cast_expression "(ulong *)((long)puVar7 + uVar9)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + uVar9)" ( (binary_expression "(long)puVar7 + uVar9" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "puVar1[1] = puVar7[1];" (assignment_expression "puVar1[1] = puVar7[1]" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = (subscript_expression "puVar7[1]" identifier [ number_literal ])) ;) (expression_statement "puVar7 = (ulong *)*puVar4;" (assignment_expression "puVar7 = (ulong *)*puVar4" identifier = (cast_expression "(ulong *)*puVar4" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier))) ;) (expression_statement "*puVar1 = uVar8 - uVar9;" (assignment_expression "*puVar1 = uVar8 - uVar9" (pointer_expression "*puVar1" * identifier) = (binary_expression "uVar8 - uVar9" identifier - identifier)) ;) (expression_statement "*puVar7 = uVar9;" (assignment_expression "*puVar7 = uVar9" (pointer_expression "*puVar7" * identifier) = identifier) ;) (expression_statement "*puVar4 = (ulong)puVar1;" (assignment_expression "*puVar4 = (ulong)puVar1" (pointer_expression "*puVar4" * identifier) = (cast_expression "(ulong)puVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) }))) (expression_statement "puVar7 = puVar7 + 2;" (assignment_expression "puVar7 = puVar7 + 2" identifier = (binary_expression "puVar7 + 2" identifier + number_literal)) ;) }))) (labeled_statement "LAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" statement_identifier : (if_statement "if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" if (parenthesized_expression "((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0))" ( (binary_expression "(puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" (parenthesized_expression "(puVar2 != (undefined *)0x0)" ( (binary_expression "puVar2 != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" ( (comma_expression "iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0" (assignment_expression "iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280)" identifier = (call_expression "pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280)" identifier (argument_list "((pthread_mutex_t *)&DAT_00449280)" ( (cast_expression "(pthread_mutex_t *)&DAT_00449280" ( (type_descriptor "pthread_mutex_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_00449280" & identifier)) )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" { (expression_statement "puVar5 = (undefined8 *)FUN_002dab00(8);" (assignment_expression "puVar5 = (undefined8 *)FUN_002dab00(8)" identifier = (cast_expression "(undefined8 *)FUN_002dab00(8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002dab00(8)" identifier (argument_list "(8)" ( number_literal ))))) ;) (expression_statement "*puVar5 = &PTR_FUN_004384b8;" (assignment_expression "*puVar5 = &PTR_FUN_004384b8" (pointer_expression "*puVar5" * identifier) = (pointer_expression "&PTR_FUN_004384b8" & identifier)) ;) (expression_statement "FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);" (call_expression "FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760)" identifier (argument_list "(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760)" ( identifier , (pointer_expression "&PTR_PTR_FUN_00438468" & identifier) , identifier ))) ;) }))) (return_statement "return puVar7;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT)) )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (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)) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT)) )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression & IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , IDENT ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "ulong * FUN_002da9a0(long param_1)\n\n{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  undefined8 uVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  ulong uVar9;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }\n  uVar9 = 0x10;\n  if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }\n  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;\n  if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }\n  return puVar7;\n}" (type_identifier "ulong") (pointer_declarator "* FUN_002da9a0(long param_1)" (* "*") (function_declarator "FUN_002da9a0(long param_1)" (identifier "FUN_002da9a0") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")")))) (compound_statement "{\n  ulong *puVar1;\n  undefined *puVar2;\n  int iVar3;\n  ulong *puVar4;\n  undefined8 *puVar5;\n  undefined8 uVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  ulong uVar9;\n  \n  puVar2 = PTR___pthread_key_create_0043dee8;\n  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }\n  uVar9 = 0x10;\n  if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }\n  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;\n  if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }\nLAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }\n  return puVar7;\n}" ({ "{") (declaration "ulong *puVar1;" (type_identifier "ulong") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "ulong *puVar4;" (type_identifier "ulong") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "undefined8 *puVar5;" (type_identifier "undefined8") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (declaration "ulong *puVar7;" (type_identifier "ulong") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "ulong uVar8;" (type_identifier "ulong") (identifier "uVar8") (; ";")) (declaration "ulong uVar9;" (type_identifier "ulong") (identifier "uVar9") (; ";")) (expression_statement "puVar2 = PTR___pthread_key_create_0043dee8;" (assignment_expression "puVar2 = PTR___pthread_key_create_0043dee8" (identifier "puVar2") (= "=") (identifier "PTR___pthread_key_create_0043dee8")) (; ";")) (if_statement "if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }" (if "if") (parenthesized_expression "((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0))" (( "(") (binary_expression "(PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" (parenthesized_expression "(PTR___pthread_key_create_0043dee8 != (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_0043dee8 != (undefined *)0x0" (identifier "PTR___pthread_key_create_0043dee8") (!= "!=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" (( "(") (comma_expression "iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0" (assignment_expression "iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280)" (identifier "iVar3") (= "=") (call_expression "pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280)" (identifier "pthread_mutex_lock") (argument_list "((pthread_mutex_t *)&DAT_00449280)" (( "(") (cast_expression "(pthread_mutex_t *)&DAT_00449280" (( "(") (type_descriptor "pthread_mutex_t *" (type_identifier "pthread_mutex_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_00449280" (& "&") (identifier "DAT_00449280"))) () ")")))) (, ",") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    uVar6 = FUN_002da7e0();\n                    \n    puVar7 = (ulong *)FUN_0014e68e(uVar6);\n    return puVar7;\n  }" ({ "{") (expression_statement "uVar6 = FUN_002da7e0();" (assignment_expression "uVar6 = FUN_002da7e0()" (identifier "uVar6") (= "=") (call_expression "FUN_002da7e0()" (identifier "FUN_002da7e0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "puVar7 = (ulong *)FUN_0014e68e(uVar6);" (assignment_expression "puVar7 = (ulong *)FUN_0014e68e(uVar6)" (identifier "puVar7") (= "=") (cast_expression "(ulong *)FUN_0014e68e(uVar6)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0014e68e(uVar6)" (identifier "FUN_0014e68e") (argument_list "(uVar6)" (( "(") (identifier "uVar6") () ")"))))) (; ";")) (return_statement "return puVar7;" (return "return") (identifier "puVar7") (; ";")) (} "}"))) (expression_statement "uVar9 = 0x10;" (assignment_expression "uVar9 = 0x10" (identifier "uVar9") (= "=") (number_literal "0x10")) (; ";")) (if_statement "if (0xf < param_1 + 0x10U) {\n    uVar9 = param_1 + 0x10U;\n  }" (if "if") (parenthesized_expression "(0xf < param_1 + 0x10U)" (( "(") (binary_expression "0xf < param_1 + 0x10U" (number_literal "0xf") (< "<") (binary_expression "param_1 + 0x10U" (identifier "param_1") (+ "+") (number_literal "0x10U"))) () ")")) (compound_statement "{\n    uVar9 = param_1 + 0x10U;\n  }" ({ "{") (expression_statement "uVar9 = param_1 + 0x10U;" (assignment_expression "uVar9 = param_1 + 0x10U" (identifier "uVar9") (= "=") (binary_expression "param_1 + 0x10U" (identifier "param_1") (+ "+") (number_literal "0x10U"))) (; ";")) (} "}"))) (expression_statement "uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;" (assignment_expression "uVar9 = uVar9 + 0xf & 0xfffffffffffffff0" (identifier "uVar9") (= "=") (binary_expression "uVar9 + 0xf & 0xfffffffffffffff0" (binary_expression "uVar9 + 0xf" (identifier "uVar9") (+ "+") (number_literal "0xf")) (& "&") (number_literal "0xfffffffffffffff0"))) (; ";")) (if_statement "if (DAT_004492a8 == (ulong *)0x0) {\n    puVar7 = (ulong *)0x0;\n  }\n  else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" (if "if") (parenthesized_expression "(DAT_004492a8 == (ulong *)0x0)" (( "(") (binary_expression "DAT_004492a8 == (ulong *)0x0" (identifier "DAT_004492a8") (== "==") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    puVar7 = (ulong *)0x0;\n  }" ({ "{") (expression_statement "puVar7 = (ulong *)0x0;" (assignment_expression "puVar7 = (ulong *)0x0" (identifier "puVar7") (= "=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" (else "else") (compound_statement "{\n    uVar8 = *DAT_004492a8;\n    puVar7 = DAT_004492a8;\n    if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }\n    if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }\n    puVar7 = puVar7 + 2;\n  }" ({ "{") (expression_statement "uVar8 = *DAT_004492a8;" (assignment_expression "uVar8 = *DAT_004492a8" (identifier "uVar8") (= "=") (pointer_expression "*DAT_004492a8" (* "*") (identifier "DAT_004492a8"))) (; ";")) (expression_statement "puVar7 = DAT_004492a8;" (assignment_expression "puVar7 = DAT_004492a8" (identifier "puVar7") (= "=") (identifier "DAT_004492a8")) (; ";")) (if_statement "if (uVar8 < uVar9) {\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }\n    else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" (if "if") (parenthesized_expression "(uVar8 < uVar9)" (( "(") (binary_expression "uVar8 < uVar9" (identifier "uVar8") (< "<") (identifier "uVar9")) () ")")) (compound_statement "{\n      do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);\n      puVar4 = puVar4 + 1;\n    }" ({ "{") (do_statement "do {\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      } while (uVar8 < uVar9);" (do "do") (compound_statement "{\n        puVar4 = puVar7;\n        puVar7 = (ulong *)puVar4[1];\n        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;\n        uVar8 = *puVar7;\n      }" ({ "{") (expression_statement "puVar4 = puVar7;" (assignment_expression "puVar4 = puVar7" (identifier "puVar4") (= "=") (identifier "puVar7")) (; ";")) (expression_statement "puVar7 = (ulong *)puVar4[1];" (assignment_expression "puVar7 = (ulong *)puVar4[1]" (identifier "puVar7") (= "=") (cast_expression "(ulong *)puVar4[1]" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")))) (; ";")) (if_statement "if (puVar7 == (ulong *)0x0) goto LAB_002daa14;" (if "if") (parenthesized_expression "(puVar7 == (ulong *)0x0)" (( "(") (binary_expression "puVar7 == (ulong *)0x0" (identifier "puVar7") (== "==") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_002daa14;" (goto "goto") (statement_identifier "LAB_002daa14") (; ";"))) (expression_statement "uVar8 = *puVar7;" (assignment_expression "uVar8 = *puVar7" (identifier "uVar8") (= "=") (pointer_expression "*puVar7" (* "*") (identifier "puVar7"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar8 < uVar9)" (( "(") (binary_expression "uVar8 < uVar9" (identifier "uVar8") (< "<") (identifier "uVar9")) () ")")) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" (else "else") (compound_statement "{\n      puVar4 = (ulong *)&DAT_004492a8;\n    }" ({ "{") (expression_statement "puVar4 = (ulong *)&DAT_004492a8;" (assignment_expression "puVar4 = (ulong *)&DAT_004492a8" (identifier "puVar4") (= "=") (cast_expression "(ulong *)&DAT_004492a8" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_004492a8" (& "&") (identifier "DAT_004492a8")))) (; ";")) (} "}")))) (if_statement "if (uVar8 - uVar9 < 0x10) {\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }\n    else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" (if "if") (parenthesized_expression "(uVar8 - uVar9 < 0x10)" (( "(") (binary_expression "uVar8 - uVar9 < 0x10" (binary_expression "uVar8 - uVar9" (identifier "uVar8") (- "-") (identifier "uVar9")) (< "<") (number_literal "0x10")) () ")")) (compound_statement "{\n      *puVar7 = uVar8;\n      *puVar4 = puVar7[1];\n    }" ({ "{") (expression_statement "*puVar7 = uVar8;" (assignment_expression "*puVar7 = uVar8" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (identifier "uVar8")) (; ";")) (expression_statement "*puVar4 = puVar7[1];" (assignment_expression "*puVar4 = puVar7[1]" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" (else "else") (compound_statement "{\n      puVar1 = (ulong *)((long)puVar7 + uVar9);\n      puVar1[1] = puVar7[1];\n      puVar7 = (ulong *)*puVar4;\n      *puVar1 = uVar8 - uVar9;\n      *puVar7 = uVar9;\n      *puVar4 = (ulong)puVar1;\n    }" ({ "{") (expression_statement "puVar1 = (ulong *)((long)puVar7 + uVar9);" (assignment_expression "puVar1 = (ulong *)((long)puVar7 + uVar9)" (identifier "puVar1") (= "=") (cast_expression "(ulong *)((long)puVar7 + uVar9)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar7 + uVar9)" (( "(") (binary_expression "(long)puVar7 + uVar9" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (+ "+") (identifier "uVar9")) () ")")))) (; ";")) (expression_statement "puVar1[1] = puVar7[1];" (assignment_expression "puVar1[1] = puVar7[1]" (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar7 = (ulong *)*puVar4;" (assignment_expression "puVar7 = (ulong *)*puVar4" (identifier "puVar7") (= "=") (cast_expression "(ulong *)*puVar4" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar4" (* "*") (identifier "puVar4")))) (; ";")) (expression_statement "*puVar1 = uVar8 - uVar9;" (assignment_expression "*puVar1 = uVar8 - uVar9" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (binary_expression "uVar8 - uVar9" (identifier "uVar8") (- "-") (identifier "uVar9"))) (; ";")) (expression_statement "*puVar7 = uVar9;" (assignment_expression "*puVar7 = uVar9" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (identifier "uVar9")) (; ";")) (expression_statement "*puVar4 = (ulong)puVar1;" (assignment_expression "*puVar4 = (ulong)puVar1" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (cast_expression "(ulong)puVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "puVar1"))) (; ";")) (} "}")))) (expression_statement "puVar7 = puVar7 + 2;" (assignment_expression "puVar7 = puVar7 + 2" (identifier "puVar7") (= "=") (binary_expression "puVar7 + 2" (identifier "puVar7") (+ "+") (number_literal "2"))) (; ";")) (} "}")))) (labeled_statement "LAB_002daa14:\n  if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" (statement_identifier "LAB_002daa14") (: ":") (if_statement "if ((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" (if "if") (parenthesized_expression "((puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0))" (( "(") (binary_expression "(puVar2 != (undefined *)0x0) &&\n     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" (parenthesized_expression "(puVar2 != (undefined *)0x0)" (( "(") (binary_expression "puVar2 != (undefined *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)" (( "(") (comma_expression "iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0" (assignment_expression "iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280)" (identifier "iVar3") (= "=") (call_expression "pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280)" (identifier "pthread_mutex_unlock") (argument_list "((pthread_mutex_t *)&DAT_00449280)" (( "(") (cast_expression "(pthread_mutex_t *)&DAT_00449280" (( "(") (type_descriptor "pthread_mutex_t *" (type_identifier "pthread_mutex_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_00449280" (& "&") (identifier "DAT_00449280"))) () ")")))) (, ",") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    puVar5 = (undefined8 *)FUN_002dab00(8);\n    *puVar5 = &PTR_FUN_004384b8;\n                    \n                    \n    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);\n  }" ({ "{") (expression_statement "puVar5 = (undefined8 *)FUN_002dab00(8);" (assignment_expression "puVar5 = (undefined8 *)FUN_002dab00(8)" (identifier "puVar5") (= "=") (cast_expression "(undefined8 *)FUN_002dab00(8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002dab00(8)" (identifier "FUN_002dab00") (argument_list "(8)" (( "(") (number_literal "8") () ")"))))) (; ";")) (expression_statement "*puVar5 = &PTR_FUN_004384b8;" (assignment_expression "*puVar5 = &PTR_FUN_004384b8" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (pointer_expression "&PTR_FUN_004384b8" (& "&") (identifier "PTR_FUN_004384b8"))) (; ";")) (expression_statement "FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);" (call_expression "FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760)" (identifier "FUN_002d9820") (argument_list "(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760)" (( "(") (identifier "puVar5") (, ",") (pointer_expression "&PTR_PTR_FUN_00438468" (& "&") (identifier "PTR_PTR_FUN_00438468")) (, ",") (identifier "FUN_002da760") () ")"))) (; ";")) (} "}")))) (return_statement "return puVar7;" (return "return") (identifier "puVar7") (; ";")) (} "}")))

/* (anonymous namespace)::pool::allocate(unsigned long) [clone .constprop.3] */

type_1 * (anonymous_namespace)::pool::var_5(type_1 var_6)

{
  type_1 *puVar1;
  type_2 *var_12;
  int var_3;
  type_1 *var_10;
  type_3 *puVar5;
  type_1 *var_9;
  type_1 var_8;
  type_1 var_7;
  
  var_12 = var_1;
  if ((var_1 != (type_2 *)0x0) &&
     (var_3 = var_2((type_4 *)var_11), var_3 != 0)) {
    var_7 = var_4();
                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */
    var_9 = (type_1 *)var_5(var_7);
    return var_9;
  }
  var_7 = 0x10;
  if (0xf < var_6 + 0x10) {
    var_7 = var_6 + 0x10;
  }
  var_7 = var_7 + 0xf & 0xfffffffffffffff0;
  if (var_11._40_8_ == 0) {
    var_9 = (type_1 *)0x0;
  }
  else {
    var_8 = *(type_1 *)var_11._40_8_;
    var_9 = (type_1 *)var_11._40_8_;
    if (var_8 < var_7) {
      do {
        var_10 = var_9;
        var_9 = (type_1 *)var_10[1];
        if (var_9 == (type_1 *)0x0) goto LAB_002daa14;
        var_8 = *var_9;
      } while (var_8 < var_7);
      var_10 = var_10 + 1;
    }
    else {
      var_10 = (type_1 *)(var_11 + 0x28);
    }
    if (var_8 - var_7 < 0x10) {
      *var_9 = var_8;
      *var_10 = var_9[1];
    }
    else {
      puVar1 = (type_1 *)((long)var_9 + var_7);
      puVar1[1] = var_9[1];
      var_9 = (type_1 *)*var_10;
      *puVar1 = var_8 - var_7;
      *var_9 = var_7;
      *var_10 = (type_1)puVar1;
    }
    var_9 = var_9 + 2;
  }
LAB_002daa14:
  if ((var_12 != (type_2 *)0x0) &&
     (var_3 = var_13((type_4 *)var_11), var_3 != 0)) {
    puVar5 = (type_3 *)var_14(8);
    *puVar5 = &PTR____concurrence_unlock_error_004384b8;
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */
    var_15(puVar5,&__concurrence_unlock_error::typeinfo,
                __concurrence_unlock_error::~__concurrence_unlock_error);
  }
  return var_9;
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (number_literal))))) alternative: (else_clause (compound_statement (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: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (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))))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (identifier))))))) (return_statement (identifier)))))

ulong * MASKED(long param_1)

{
  ulong *puVar1;
  undefined *puVar2;
  int iVar3;
  ulong *puVar4;
  undefined8 *puVar5;
  undefined8 uVar6;
  ulong *puVar7;
  ulong uVar8;
  ulong uVar9;
  
  puVar2 = PTR___pthread_key_create_0043dee8;
  if ((PTR___pthread_key_create_0043dee8 != (undefined *)0x0) &&
     (iVar3 = pthread_mutex_lock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {
    uVar6 = FUN_002da7e0();
                    /* catch() { ... } // from try @ 002daab1 with catch @ 002daabb */
    puVar7 = (ulong *)FUN_0014e68e(uVar6);
    return puVar7;
  }
  uVar9 = 0x10;
  if (0xf < param_1 + 0x10U) {
    uVar9 = param_1 + 0x10U;
  }
  uVar9 = uVar9 + 0xf & 0xfffffffffffffff0;
  if (DAT_004492a8 == (ulong *)0x0) {
    puVar7 = (ulong *)0x0;
  }
  else {
    uVar8 = *DAT_004492a8;
    puVar7 = DAT_004492a8;
    if (uVar8 < uVar9) {
      do {
        puVar4 = puVar7;
        puVar7 = (ulong *)puVar4[1];
        if (puVar7 == (ulong *)0x0) goto LAB_002daa14;
        uVar8 = *puVar7;
      } while (uVar8 < uVar9);
      puVar4 = puVar4 + 1;
    }
    else {
      puVar4 = (ulong *)&DAT_004492a8;
    }
    if (uVar8 - uVar9 < 0x10) {
      *puVar7 = uVar8;
      *puVar4 = puVar7[1];
    }
    else {
      puVar1 = (ulong *)((long)puVar7 + uVar9);
      puVar1[1] = puVar7[1];
      puVar7 = (ulong *)*puVar4;
      *puVar1 = uVar8 - uVar9;
      *puVar7 = uVar9;
      *puVar4 = (ulong)puVar1;
    }
    puVar7 = puVar7 + 2;
  }
LAB_002daa14:
  if ((puVar2 != (undefined *)0x0) &&
     (iVar3 = pthread_mutex_unlock((pthread_mutex_t *)&DAT_00449280), iVar3 != 0)) {
    puVar5 = (undefined8 *)FUN_002dab00(8);
    *puVar5 = &PTR_FUN_004384b8;
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002daab1 to 002daab5 has its CatchHandler @ 002daabb */
    FUN_002d9820(puVar5,&PTR_PTR_FUN_00438468,FUN_002da760);
  }
  return puVar7;
}

