
/* std::__cow_string::__cow_string(std::string const&) */

void __thiscall std::__cow_string::__cow_string(__cow_string *this,string *param_1)

{
  long lVar1;
  undefined8 uVar2;
  allocator aStack_9;
  
  lVar1 = *(long *)param_1;
  if (-1 < *(int *)(lVar1 + -8)) {
    if ((_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38) {
      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {
        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;
      }
      else {
        LOCK();
        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;
        UNLOCK();
      }
    }
    *(long *)this = lVar1;
    return;
  }
  uVar2 = std::string::_Rep::_M_clone((_Rep *)(lVar1 + -0x18),&aStack_9,0);
  *(undefined8 *)this = uVar2;
  return;
}



void thunk_FUN_0030edc0(long *param_1,long *param_2)

{
  long lVar1;
  undefined1 uStack_9;
  
  lVar1 = *param_2;
  if (-1 < *(int *)(lVar1 + -8)) {
    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {
      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {
        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;
      }
      else {
        LOCK();
        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;
        UNLOCK();
      }
    }
    *param_1 = lVar1;
    return;
  }
  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);
  *param_1 = lVar1;
  return;
}


JMP 0x0030edc0
(translation_unit "void thunk_FUN_0030edc0(long *param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined1 uStack_9;\n  \n  lVar1 = *param_2;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }\n  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);\n  *param_1 = lVar1;\n  return;\n}\n\n" (function_definition "void thunk_FUN_0030edc0(long *param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined1 uStack_9;\n  \n  lVar1 = *param_2;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }\n  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);\n  *param_1 = lVar1;\n  return;\n}" primitive_type (function_declarator "thunk_FUN_0030edc0(long *param_1,long *param_2)" identifier (parameter_list "(long *param_1,long *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  undefined1 uStack_9;\n  \n  lVar1 = *param_2;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }\n  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);\n  *param_1 = lVar1;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 uStack_9;" type_identifier identifier ;) (expression_statement "lVar1 = *param_2;" (assignment_expression "lVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }" if (parenthesized_expression "(-1 < *(int *)(lVar1 + -8))" ( (binary_expression "-1 < *(int *)(lVar1 + -8)" number_literal < (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) ))))) )) (compound_statement "{\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }" { (if_statement "if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }" if (parenthesized_expression "((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38)" ( (binary_expression "(undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38" (cast_expression "(undefined *)(lVar1 + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -0x18)" ( (binary_expression "lVar1 + -0x18" identifier + number_literal) ))) != identifier) )) (compound_statement "{\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" if (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)) )) (compound_statement "{\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }" { (expression_statement "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;" (assignment_expression "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" else (compound_statement "{\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;" (assignment_expression "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) })) (expression_statement "*param_1 = lVar1;" (assignment_expression "*param_1 = lVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (return_statement "return;" return ;) })) (expression_statement "lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);" (assignment_expression "lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0)" identifier = (call_expression "FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0)" identifier (argument_list "((undefined *)(lVar1 + -0x18),&uStack_9,0)" ( (cast_expression "(undefined *)(lVar1 + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -0x18)" ( (binary_expression "lVar1 + -0x18" identifier + number_literal) ))) , (pointer_expression "&uStack_9" & identifier) , number_literal )))) ;) (expression_statement "*param_1 = lVar1;" (assignment_expression "*param_1 = lVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* std::__cow_string::__cow_string(std::string const&) */\n\nvoid __thiscall std::__cow_string::__cow_string(__cow_string *this,string *param_1)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  allocator aStack_9;\n  \n  lVar1 = *(long *)param_1;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *(long *)this = lVar1;\n    return;\n  }\n  uVar2 = std::string::_Rep::_M_clone((_Rep *)(lVar1 + -0x18),&aStack_9,0);\n  *(undefined8 *)this = uVar2;\n  return;\n}\n\n" comment (function_definition "void __thiscall std::__cow_string::__cow_string(__cow_string *this,string *param_1)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  allocator aStack_9;\n  \n  lVar1 = *(long *)param_1;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *(long *)this = lVar1;\n    return;\n  }\n  uVar2 = std::string::_Rep::_M_clone((_Rep *)(lVar1 + -0x18),&aStack_9,0);\n  *(undefined8 *)this = uVar2;\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::__cow_string::" identifier : : identifier : :) (function_declarator "__cow_string(__cow_string *this,string *param_1)" identifier (parameter_list "(__cow_string *this,string *param_1)" ( (parameter_declaration "__cow_string *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "string *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  undefined8 uVar2;\n  allocator aStack_9;\n  \n  lVar1 = *(long *)param_1;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *(long *)this = lVar1;\n    return;\n  }\n  uVar2 = std::string::_Rep::_M_clone((_Rep *)(lVar1 + -0x18),&aStack_9,0);\n  *(undefined8 *)this = uVar2;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "allocator aStack_9;" type_identifier identifier ;) (expression_statement "lVar1 = *(long *)param_1;" (assignment_expression "lVar1 = *(long *)param_1" identifier = (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (-1 < *(int *)(lVar1 + -8)) {\n    if ((_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *(long *)this = lVar1;\n    return;\n  }" if (parenthesized_expression "(-1 < *(int *)(lVar1 + -8))" ( (binary_expression "-1 < *(int *)(lVar1 + -8)" number_literal < (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) ))))) )) (compound_statement "{\n    if ((_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *(long *)this = lVar1;\n    return;\n  }" { (if_statement "if ((_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }" if (parenthesized_expression "((_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38)" ( (binary_expression "(_Rep *)(lVar1 + -0x18) != (_Rep *)PTR__S_empty_rep_storage_0043dc38" (cast_expression "(_Rep *)(lVar1 + -0x18)" ( (type_descriptor "_Rep *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -0x18)" ( (binary_expression "lVar1 + -0x18" identifier + number_literal) ))) != (cast_expression "(_Rep *)PTR__S_empty_rep_storage_0043dc38" ( (type_descriptor "_Rep *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" if (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)) )) (compound_statement "{\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }" { (expression_statement "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;" (assignment_expression "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" else (compound_statement "{\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;" (assignment_expression "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) })) (expression_statement "*(long *)this = lVar1;" (assignment_expression "*(long *)this = lVar1" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (return_statement "return;" return ;) })) (ERROR "uVar2 = std::" (assignment_expression "uVar2 = std" identifier = identifier) : :) (labeled_statement "string::_Rep::_M_clone((_Rep *)(lVar1 + -0x18),&aStack_9,0);" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_clone((_Rep *)(lVar1 + -0x18),&aStack_9,0);" statement_identifier : (ERROR ":" :) (expression_statement "_M_clone((_Rep *)(lVar1 + -0x18),&aStack_9,0);" (call_expression "_M_clone((_Rep *)(lVar1 + -0x18),&aStack_9,0)" identifier (argument_list "((_Rep *)(lVar1 + -0x18),&aStack_9,0)" ( (cast_expression "(_Rep *)(lVar1 + -0x18)" ( (type_descriptor "_Rep *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -0x18)" ( (binary_expression "lVar1 + -0x18" identifier + number_literal) ))) , (pointer_expression "&aStack_9" & identifier) , number_literal ))) ;))) (expression_statement "*(undefined8 *)this = uVar2;" (assignment_expression "*(undefined8 *)this = uVar2" (pointer_expression "*(undefined8 *)this" * (cast_expression "(undefined8 *)this" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "void thunk_FUN_0030edc0(long *param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined1 uStack_9;\n  \n  lVar1 = *param_2;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }\n  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);\n  *param_1 = lVar1;\n  return;\n}\n\n" (function_definition "void thunk_FUN_0030edc0(long *param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined1 uStack_9;\n  \n  lVar1 = *param_2;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }\n  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);\n  *param_1 = lVar1;\n  return;\n}" primitive_type (function_declarator "thunk_FUN_0030edc0(long *param_1,long *param_2)" identifier (parameter_list "(long *param_1,long *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  undefined1 uStack_9;\n  \n  lVar1 = *param_2;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }\n  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);\n  *param_1 = lVar1;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 uStack_9;" type_identifier identifier ;) (expression_statement "lVar1 = *param_2;" (assignment_expression "lVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }" if (parenthesized_expression "(-1 < *(int *)(lVar1 + -8))" ( (binary_expression "-1 < *(int *)(lVar1 + -8)" number_literal < (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) ))))) )) (compound_statement "{\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }" { (if_statement "if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }" if (parenthesized_expression "((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38)" ( (binary_expression "(undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38" (cast_expression "(undefined *)(lVar1 + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -0x18)" ( (binary_expression "lVar1 + -0x18" identifier + number_literal) ))) != identifier) )) (compound_statement "{\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" if (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)) )) (compound_statement "{\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }" { (expression_statement "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;" (assignment_expression "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" else (compound_statement "{\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;" (assignment_expression "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" * (cast_expression "(int *)(lVar1 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -8)" ( (binary_expression "lVar1 + -8" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) })) (expression_statement "*param_1 = lVar1;" (assignment_expression "*param_1 = lVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (return_statement "return;" return ;) })) (expression_statement "lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);" (assignment_expression "lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0)" identifier = (call_expression "FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0)" identifier (argument_list "((undefined *)(lVar1 + -0x18),&uStack_9,0)" ( (cast_expression "(undefined *)(lVar1 + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + -0x18)" ( (binary_expression "lVar1 + -0x18" identifier + number_literal) ))) , (pointer_expression "&uStack_9" & identifier) , number_literal )))) ;) (expression_statement "*param_1 = lVar1;" (assignment_expression "*param_1 = lVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) != IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (pointer_expression & IDENT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return ;) })))
(function_definition "void thunk_FUN_0030edc0(long *param_1,long *param_2)\n\n{\n  long lVar1;\n  undefined1 uStack_9;\n  \n  lVar1 = *param_2;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }\n  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);\n  *param_1 = lVar1;\n  return;\n}" (primitive_type "void") (function_declarator "thunk_FUN_0030edc0(long *param_1,long *param_2)" (identifier "thunk_FUN_0030edc0") (parameter_list "(long *param_1,long *param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined1 uStack_9;\n  \n  lVar1 = *param_2;\n  if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }\n  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);\n  *param_1 = lVar1;\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined1 uStack_9;" (type_identifier "undefined1") (identifier "uStack_9") (; ";")) (expression_statement "lVar1 = *param_2;" (assignment_expression "lVar1 = *param_2" (identifier "lVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if (-1 < *(int *)(lVar1 + -8)) {\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }" (if "if") (parenthesized_expression "(-1 < *(int *)(lVar1 + -8))" (( "(") (binary_expression "-1 < *(int *)(lVar1 + -8)" (number_literal "-1") (< "<") (pointer_expression "*(int *)(lVar1 + -8)" (* "*") (cast_expression "(int *)(lVar1 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + -8)" (( "(") (binary_expression "lVar1 + -8" (identifier "lVar1") (+ "+") (number_literal "-8")) () ")"))))) () ")")) (compound_statement "{\n    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }\n    *param_1 = lVar1;\n    return;\n  }" ({ "{") (if_statement "if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }" (if "if") (parenthesized_expression "((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38)" (( "(") (binary_expression "(undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38" (cast_expression "(undefined *)(lVar1 + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + -0x18)" (( "(") (binary_expression "lVar1 + -0x18" (identifier "lVar1") (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (identifier "PTR_DAT_0043dc38")) () ")")) (compound_statement "{\n      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }\n    }" ({ "{") (if_statement "if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }\n      else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" (if "if") (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"))) () ")")) (compound_statement "{\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n      }" ({ "{") (expression_statement "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;" (assignment_expression "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" (* "*") (cast_expression "(int *)(lVar1 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + -8)" (( "(") (binary_expression "lVar1 + -8" (identifier "lVar1") (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "*(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" (* "*") (cast_expression "(int *)(lVar1 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + -8)" (( "(") (binary_expression "lVar1 + -8" (identifier "lVar1") (+ "+") (number_literal "-8")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" (else "else") (compound_statement "{\n        LOCK();\n        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;\n        UNLOCK();\n      }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;" (assignment_expression "*(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" (* "*") (cast_expression "(int *)(lVar1 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + -8)" (( "(") (binary_expression "lVar1 + -8" (identifier "lVar1") (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "*(int *)(lVar1 + -8) + 1" (pointer_expression "*(int *)(lVar1 + -8)" (* "*") (cast_expression "(int *)(lVar1 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + -8)" (( "(") (binary_expression "lVar1 + -8" (identifier "lVar1") (+ "+") (number_literal "-8")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "*param_1 = lVar1;" (assignment_expression "*param_1 = lVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "lVar1")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);" (assignment_expression "lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0)" (identifier "lVar1") (= "=") (call_expression "FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0)" (identifier "FUN_0030e700") (argument_list "((undefined *)(lVar1 + -0x18),&uStack_9,0)" (( "(") (cast_expression "(undefined *)(lVar1 + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + -0x18)" (( "(") (binary_expression "lVar1 + -0x18" (identifier "lVar1") (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&uStack_9" (& "&") (identifier "uStack_9")) (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "*param_1 = lVar1;" (assignment_expression "*param_1 = lVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "lVar1")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* std::__cow_string::__cow_string(std::string const&) */

void __thiscall std::function_1::function_1(function_1 *this,type_1 *param_1)

{
  long var_1;
  type_2 uVar2;
  type_3 aStack_9;
  
  var_1 = *(long *)param_1;
  if (-1 < *(int *)(var_1 + -8)) {
    if ((type_4 *)(var_1 + -0x18) != (type_4 *)PTR__S_empty_rep_storage_0043dc38) {
      if (var_2 == (type_5 *)0x0) {
        *(int *)(var_1 + -8) = *(int *)(var_1 + -8) + 1;
      }
      else {
        var_3();
        *(int *)(var_1 + -8) = *(int *)(var_1 + -8) + 1;
        var_4();
      }
    }
    *(long *)this = var_1;
    return;
  }
  uVar2 = std::string::_Rep::var_5((type_4 *)(var_1 + -0x18),&aStack_9,0);
  *(type_2 *)this = uVar2;
  return;
}


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

void MASKED(long *param_1,long *param_2)

{
  long lVar1;
  undefined1 uStack_9;
  
  lVar1 = *param_2;
  if (-1 < *(int *)(lVar1 + -8)) {
    if ((undefined *)(lVar1 + -0x18) != PTR_DAT_0043dc38) {
      if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {
        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;
      }
      else {
        LOCK();
        *(int *)(lVar1 + -8) = *(int *)(lVar1 + -8) + 1;
        UNLOCK();
      }
    }
    *param_1 = lVar1;
    return;
  }
  lVar1 = FUN_0030e700((undefined *)(lVar1 + -0x18),&uStack_9,0);
  *param_1 = lVar1;
  return;
}

