
demangle_component * cplus_demangle_v3_components(char *mangled,int options,void **mem)

{
  demangle_component **__ptr;
  size_t sVar1;
  demangle_component *pdVar2;
  d_info di;
  
  sVar1 = strlen(mangled);
  if ((*mangled == '_') && (mangled[1] == 'Z')) {
    cplus_demangle_init_info(mangled,options,sVar1,&di);
    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);
    di.comps = pdVar2;
    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);
    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))
    goto LAB_0011cff8;
    pdVar2 = (demangle_component *)cplus_demangle_mangled_name(&di,1);
  }
  else {
    if ((options & 0x10U) == 0) {
      return (demangle_component *)0x0;
    }
    cplus_demangle_init_info(mangled,options,sVar1,&di);
    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);
    di.comps = pdVar2;
    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);
    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)) {
LAB_0011cff8:
      __ptr = di.subs;
      free(pdVar2);
      free(__ptr);
      return (demangle_component *)0x0;
    }
    pdVar2 = (demangle_component *)cplus_demangle_type(&di);
  }
  if (((options & 1U) == 0) || (*di.n == '\0')) {
    free(di.subs);
    if (pdVar2 != (demangle_component *)0x0) {
      *mem = di.comps;
      return pdVar2;
    }
  }
  else {
    free(di.subs);
  }
  free(di.comps);
  return (demangle_component *)0x0;
}



long FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)

{
  void *__ptr;
  size_t sVar1;
  void *__ptr_00;
  long lVar2;
  undefined1 local_88 [24];
  char *local_70;
  void *local_68;
  int local_5c;
  void *local_58;
  int local_4c;
  
  sVar1 = strlen(param_1);
  if ((*param_1 == '_') && (param_1[1] == 'Z')) {
    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);
    __ptr_00 = malloc((long)local_5c * 0x18);
    local_68 = __ptr_00;
    local_58 = malloc((long)local_4c << 3);
    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;
    lVar2 = cplus_demangle_mangled_name(local_88,1);
  }
  else {
    if ((param_2 & 0x10) == 0) {
      return 0;
    }
    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);
    __ptr_00 = malloc((long)local_5c * 0x18);
    local_68 = __ptr_00;
    local_58 = malloc((long)local_4c << 3);
    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {
LAB_0011cff8:
      __ptr = local_58;
      free(__ptr_00);
      free(__ptr);
      return 0;
    }
    lVar2 = cplus_demangle_type(local_88);
  }
  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {
    free(local_58);
    if (lVar2 != 0) {
      *param_3 = local_68;
      return lVar2;
    }
  }
  else {
    free(local_58);
  }
  free(local_68);
  return 0;
}


PUSH R14
PUSH R13
PUSH R12
MOV R12,RDX
PUSH RBP
MOV EBP,ESI
PUSH RBX
MOV RBX,RDI
SUB RSP,0x70
CALL 0x00104260
CMP byte ptr [RBX],0x5f
JZ 0x0011cf60
TEST BPL,0x10
JZ 0x0011d028
LEA R14,[RSP + 0x10]
MOV RDX,RAX
MOV ESI,EBP
MOV RDI,RBX
MOV RCX,R14
CALL 0x00104520
MOVSXD RAX,dword ptr [RSP + 0x3c]
LEA RDI,[RAX + RAX*0x2]
SHL RDI,0x3
CALL 0x001045c0
MOVSXD RDI,dword ptr [RSP + 0x4c]
MOV RBX,RAX
MOV R13,RAX
MOV qword ptr [RSP + 0x30],RAX
SHL RDI,0x3
CALL 0x001045c0
MOV qword ptr [RSP + 0x40],RAX
TEST RAX,RAX
JZ 0x0011cff8
TEST RBX,RBX
JZ 0x0011cff8
MOV RDI,R14
CALL 0x001046d0
MOV RBX,RAX
AND EBP,0x1
MOV RDI,qword ptr [RSP + 0x40]
JZ 0x0011cf36
MOV RAX,qword ptr [RSP + 0x28]
CMP byte ptr [RAX],0x0
JNZ 0x0011cfd0
CALL 0x00104920
TEST RBX,RBX
JZ 0x0011cfd5
MOV RAX,qword ptr [RSP + 0x30]
MOV qword ptr [R12],RAX
ADD RSP,0x70
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
CMP byte ptr [RBX + 0x1],0x5a
JNZ 0x0011ceb2
LEA R14,[RSP + 0x10]
MOV RDX,RAX
MOV ESI,EBP
MOV RDI,RBX
MOV RCX,R14
CALL 0x00104520
MOVSXD RAX,dword ptr [RSP + 0x3c]
LEA RDI,[RAX + RAX*0x2]
SHL RDI,0x3
CALL 0x001045c0
MOVSXD RDI,dword ptr [RSP + 0x4c]
MOV RBX,RAX
MOV R13,RAX
MOV qword ptr [RSP + 0x30],RAX
SHL RDI,0x3
CALL 0x001045c0
MOV qword ptr [RSP + 0x40],RAX
TEST RAX,RAX
JZ 0x0011cff8
TEST RBX,RBX
JZ 0x0011cff8
MOV ESI,0x1
MOV RDI,R14
CALL 0x00104710
MOV RBX,RAX
JMP 0x0011cf1e
CALL 0x00104920
MOV RDI,qword ptr [RSP + 0x30]
XOR EBX,EBX
CALL 0x00104920
ADD RSP,0x70
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
MOV RDI,R13
MOV qword ptr [RSP + 0x8],RAX
XOR EBX,EBX
CALL 0x00104920
MOV RAX,qword ptr [RSP + 0x8]
MOV RDI,RAX
CALL 0x00104920
ADD RSP,0x70
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
ADD RSP,0x70
XOR EBX,EBX
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
(translation_unit "long FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)\n\n{\n  void *__ptr;\n  size_t sVar1;\n  void *__ptr_00;\n  long lVar2;\n  undefined1 local_88 [24];\n  char *local_70;\n  void *local_68;\n  int local_5c;\n  void *local_58;\n  int local_4c;\n  \n  sVar1 = strlen(param_1);\n  if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }\n  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }\n  free(local_68);\n  return 0;\n}\n\n" (function_definition "long FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)\n\n{\n  void *__ptr;\n  size_t sVar1;\n  void *__ptr_00;\n  long lVar2;\n  undefined1 local_88 [24];\n  char *local_70;\n  void *local_68;\n  int local_5c;\n  void *local_58;\n  int local_4c;\n  \n  sVar1 = strlen(param_1);\n  if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }\n  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }\n  free(local_68);\n  return 0;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)" identifier (parameter_list "(char *param_1,uint param_2,undefined8 *param_3)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  void *__ptr;\n  size_t sVar1;\n  void *__ptr_00;\n  long lVar2;\n  undefined1 local_88 [24];\n  char *local_70;\n  void *local_68;\n  int local_5c;\n  void *local_58;\n  int local_4c;\n  \n  sVar1 = strlen(param_1);\n  if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }\n  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }\n  free(local_68);\n  return 0;\n}" { (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "void *__ptr_00;" primitive_type (pointer_declarator "*__ptr_00" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_88 [24];" type_identifier (array_declarator "local_88 [24]" identifier [ number_literal ]) ;) (declaration "char *local_70;" primitive_type (pointer_declarator "*local_70" * identifier) ;) (declaration "void *local_68;" primitive_type (pointer_declarator "*local_68" * identifier) ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "void *local_58;" primitive_type (pointer_declarator "*local_58" * identifier) ;) (declaration "int local_4c;" primitive_type identifier ;) (expression_statement "sVar1 = strlen(param_1);" (assignment_expression "sVar1 = strlen(param_1)" identifier = (call_expression "strlen(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" if (parenthesized_expression "((*param_1 == '_') && (param_1[1] == 'Z'))" ( (binary_expression "(*param_1 == '_') && (param_1[1] == 'Z')" (parenthesized_expression "(*param_1 == '_')" ( (binary_expression "*param_1 == '_'" (pointer_expression "*param_1" * identifier) == (char_literal "'_'" ' character ')) )) && (parenthesized_expression "(param_1[1] == 'Z')" ( (binary_expression "param_1[1] == 'Z'" (subscript_expression "param_1[1]" identifier [ number_literal ]) == (char_literal "'Z'" ' character ')) ))) )) (compound_statement "{\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }" { (expression_statement "cplus_demangle_init_info(param_1,param_2,sVar1,local_88);" (call_expression "cplus_demangle_init_info(param_1,param_2,sVar1,local_88)" identifier (argument_list "(param_1,param_2,sVar1,local_88)" ( identifier , identifier , identifier , identifier ))) ;) (expression_statement "__ptr_00 = malloc((long)local_5c * 0x18);" (assignment_expression "__ptr_00 = malloc((long)local_5c * 0x18)" identifier = (call_expression "malloc((long)local_5c * 0x18)" identifier (argument_list "((long)local_5c * 0x18)" ( (binary_expression "(long)local_5c * 0x18" (cast_expression "(long)local_5c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) )))) ;) (expression_statement "local_68 = __ptr_00;" (assignment_expression "local_68 = __ptr_00" identifier = identifier) ;) (expression_statement "local_58 = malloc((long)local_4c << 3);" (assignment_expression "local_58 = malloc((long)local_4c << 3)" identifier = (call_expression "malloc((long)local_4c << 3)" identifier (argument_list "((long)local_4c << 3)" ( (binary_expression "(long)local_4c << 3" (cast_expression "(long)local_4c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) << number_literal) )))) ;) (if_statement "if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;" if (parenthesized_expression "((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0))" ( (binary_expression "(local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)" (parenthesized_expression "(local_58 == (void *)0x0)" ( (binary_expression "local_58 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(__ptr_00 == (void *)0x0)" ( (binary_expression "__ptr_00 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (goto_statement "goto LAB_0011cff8;" goto statement_identifier ;)) (expression_statement "lVar2 = cplus_demangle_mangled_name(local_88,1);" (assignment_expression "lVar2 = cplus_demangle_mangled_name(local_88,1)" identifier = (call_expression "cplus_demangle_mangled_name(local_88,1)" identifier (argument_list "(local_88,1)" ( identifier , number_literal )))) ;) }) (else_clause "else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" else (compound_statement "{\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" { (if_statement "if ((param_2 & 0x10) == 0) {\n      return 0;\n    }" if (parenthesized_expression "((param_2 & 0x10) == 0)" ( (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "cplus_demangle_init_info(param_1,param_2,sVar1,local_88);" (call_expression "cplus_demangle_init_info(param_1,param_2,sVar1,local_88)" identifier (argument_list "(param_1,param_2,sVar1,local_88)" ( identifier , identifier , identifier , identifier ))) ;) (expression_statement "__ptr_00 = malloc((long)local_5c * 0x18);" (assignment_expression "__ptr_00 = malloc((long)local_5c * 0x18)" identifier = (call_expression "malloc((long)local_5c * 0x18)" identifier (argument_list "((long)local_5c * 0x18)" ( (binary_expression "(long)local_5c * 0x18" (cast_expression "(long)local_5c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) )))) ;) (expression_statement "local_68 = __ptr_00;" (assignment_expression "local_68 = __ptr_00" identifier = identifier) ;) (expression_statement "local_58 = malloc((long)local_4c << 3);" (assignment_expression "local_58 = malloc((long)local_4c << 3)" identifier = (call_expression "malloc((long)local_4c << 3)" identifier (argument_list "((long)local_4c << 3)" ( (binary_expression "(long)local_4c << 3" (cast_expression "(long)local_4c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) << number_literal) )))) ;) (if_statement "if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }" if (parenthesized_expression "((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0))" ( (binary_expression "(local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)" (parenthesized_expression "(local_58 == (void *)0x0)" ( (binary_expression "local_58 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(__ptr_00 == (void *)0x0)" ( (binary_expression "__ptr_00 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }" { (labeled_statement "LAB_0011cff8:\n      __ptr = local_58;" statement_identifier : (expression_statement "__ptr = local_58;" (assignment_expression "__ptr = local_58" identifier = identifier) ;)) (expression_statement "free(__ptr_00);" (call_expression "free(__ptr_00)" identifier (argument_list "(__ptr_00)" ( identifier ))) ;) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "lVar2 = cplus_demangle_type(local_88);" (assignment_expression "lVar2 = cplus_demangle_type(local_88)" identifier = (call_expression "cplus_demangle_type(local_88)" identifier (argument_list "(local_88)" ( identifier )))) ;) }))) (if_statement "if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }" if (parenthesized_expression "(((param_2 & 1) == 0) || (*local_70 == '\0'))" ( (binary_expression "((param_2 & 1) == 0) || (*local_70 == '\0')" (parenthesized_expression "((param_2 & 1) == 0)" ( (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" ( (binary_expression "param_2 & 1" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(*local_70 == '\0')" ( (binary_expression "*local_70 == '\0'" (pointer_expression "*local_70" * identifier) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) (if_statement "if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      *param_3 = local_68;\n      return lVar2;\n    }" { (expression_statement "*param_3 = local_68;" (assignment_expression "*param_3 = local_68" (pointer_expression "*param_3" * identifier) = identifier) ;) (return_statement "return lVar2;" return identifier ;) })) }) (else_clause "else {\n    free(local_58);\n  }" else (compound_statement "{\n    free(local_58);\n  }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) }))) (expression_statement "free(local_68);" (call_expression "free(local_68)" identifier (argument_list "(local_68)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "demangle_component * cplus_demangle_v3_components(char *mangled,int options,void **mem)\n\n{\n  demangle_component **__ptr;\n  size_t sVar1;\n  demangle_component *pdVar2;\n  d_info di;\n  \n  sVar1 = strlen(mangled);\n  if ((*mangled == '_') && (mangled[1] == 'Z')) {\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))\n    goto LAB_0011cff8;\n    pdVar2 = (demangle_component *)cplus_demangle_mangled_name(&di,1);\n  }\n  else {\n    if ((options & 0x10U) == 0) {\n      return (demangle_component *)0x0;\n    }\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)) {\nLAB_0011cff8:\n      __ptr = di.subs;\n      free(pdVar2);\n      free(__ptr);\n      return (demangle_component *)0x0;\n    }\n    pdVar2 = (demangle_component *)cplus_demangle_type(&di);\n  }\n  if (((options & 1U) == 0) || (*di.n == '\0')) {\n    free(di.subs);\n    if (pdVar2 != (demangle_component *)0x0) {\n      *mem = di.comps;\n      return pdVar2;\n    }\n  }\n  else {\n    free(di.subs);\n  }\n  free(di.comps);\n  return (demangle_component *)0x0;\n}\n\n" (function_definition "demangle_component * cplus_demangle_v3_components(char *mangled,int options,void **mem)\n\n{\n  demangle_component **__ptr;\n  size_t sVar1;\n  demangle_component *pdVar2;\n  d_info di;\n  \n  sVar1 = strlen(mangled);\n  if ((*mangled == '_') && (mangled[1] == 'Z')) {\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))\n    goto LAB_0011cff8;\n    pdVar2 = (demangle_component *)cplus_demangle_mangled_name(&di,1);\n  }\n  else {\n    if ((options & 0x10U) == 0) {\n      return (demangle_component *)0x0;\n    }\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)) {\nLAB_0011cff8:\n      __ptr = di.subs;\n      free(pdVar2);\n      free(__ptr);\n      return (demangle_component *)0x0;\n    }\n    pdVar2 = (demangle_component *)cplus_demangle_type(&di);\n  }\n  if (((options & 1U) == 0) || (*di.n == '\0')) {\n    free(di.subs);\n    if (pdVar2 != (demangle_component *)0x0) {\n      *mem = di.comps;\n      return pdVar2;\n    }\n  }\n  else {\n    free(di.subs);\n  }\n  free(di.comps);\n  return (demangle_component *)0x0;\n}" type_identifier (pointer_declarator "* cplus_demangle_v3_components(char *mangled,int options,void **mem)" * (function_declarator "cplus_demangle_v3_components(char *mangled,int options,void **mem)" identifier (parameter_list "(char *mangled,int options,void **mem)" ( (parameter_declaration "char *mangled" primitive_type (pointer_declarator "*mangled" * identifier)) , (parameter_declaration "int options" primitive_type identifier) , (parameter_declaration "void **mem" primitive_type (pointer_declarator "**mem" * (pointer_declarator "*mem" * identifier))) )))) (compound_statement "{\n  demangle_component **__ptr;\n  size_t sVar1;\n  demangle_component *pdVar2;\n  d_info di;\n  \n  sVar1 = strlen(mangled);\n  if ((*mangled == '_') && (mangled[1] == 'Z')) {\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))\n    goto LAB_0011cff8;\n    pdVar2 = (demangle_component *)cplus_demangle_mangled_name(&di,1);\n  }\n  else {\n    if ((options & 0x10U) == 0) {\n      return (demangle_component *)0x0;\n    }\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)) {\nLAB_0011cff8:\n      __ptr = di.subs;\n      free(pdVar2);\n      free(__ptr);\n      return (demangle_component *)0x0;\n    }\n    pdVar2 = (demangle_component *)cplus_demangle_type(&di);\n  }\n  if (((options & 1U) == 0) || (*di.n == '\0')) {\n    free(di.subs);\n    if (pdVar2 != (demangle_component *)0x0) {\n      *mem = di.comps;\n      return pdVar2;\n    }\n  }\n  else {\n    free(di.subs);\n  }\n  free(di.comps);\n  return (demangle_component *)0x0;\n}" { (declaration "demangle_component **__ptr;" type_identifier (pointer_declarator "**__ptr" * (pointer_declarator "*__ptr" * identifier)) ;) (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "demangle_component *pdVar2;" type_identifier (pointer_declarator "*pdVar2" * identifier) ;) (declaration "d_info di;" type_identifier identifier ;) (expression_statement "sVar1 = strlen(mangled);" (assignment_expression "sVar1 = strlen(mangled)" identifier = (call_expression "strlen(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if ((*mangled == '_') && (mangled[1] == 'Z')) {\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))\n    goto LAB_0011cff8;\n    pdVar2 = (demangle_component *)cplus_demangle_mangled_name(&di,1);\n  }\n  else {\n    if ((options & 0x10U) == 0) {\n      return (demangle_component *)0x0;\n    }\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)) {\nLAB_0011cff8:\n      __ptr = di.subs;\n      free(pdVar2);\n      free(__ptr);\n      return (demangle_component *)0x0;\n    }\n    pdVar2 = (demangle_component *)cplus_demangle_type(&di);\n  }" if (parenthesized_expression "((*mangled == '_') && (mangled[1] == 'Z'))" ( (binary_expression "(*mangled == '_') && (mangled[1] == 'Z')" (parenthesized_expression "(*mangled == '_')" ( (binary_expression "*mangled == '_'" (pointer_expression "*mangled" * identifier) == (char_literal "'_'" ' character ')) )) && (parenthesized_expression "(mangled[1] == 'Z')" ( (binary_expression "mangled[1] == 'Z'" (subscript_expression "mangled[1]" identifier [ number_literal ]) == (char_literal "'Z'" ' character ')) ))) )) (compound_statement "{\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))\n    goto LAB_0011cff8;\n    pdVar2 = (demangle_component *)cplus_demangle_mangled_name(&di,1);\n  }" { (expression_statement "cplus_demangle_init_info(mangled,options,sVar1,&di);" (call_expression "cplus_demangle_init_info(mangled,options,sVar1,&di)" identifier (argument_list "(mangled,options,sVar1,&di)" ( identifier , identifier , identifier , (pointer_expression "&di" & identifier) ))) ;) (expression_statement "pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);" (assignment_expression "pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18)" identifier = (cast_expression "(demangle_component *)malloc((long)di.num_comps * 0x18)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc((long)di.num_comps * 0x18)" identifier (argument_list "((long)di.num_comps * 0x18)" ( (binary_expression "(long)di.num_comps * 0x18" (cast_expression "(long)di.num_comps" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "di.num_comps" identifier . field_identifier)) * number_literal) ))))) ;) (expression_statement "di.comps = pdVar2;" (assignment_expression "di.comps = pdVar2" (field_expression "di.comps" identifier . field_identifier) = identifier) ;) (expression_statement "di.subs = (demangle_component **)malloc((long)di.num_subs << 3);" (assignment_expression "di.subs = (demangle_component **)malloc((long)di.num_subs << 3)" (field_expression "di.subs" identifier . field_identifier) = (cast_expression "(demangle_component **)malloc((long)di.num_subs << 3)" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "malloc((long)di.num_subs << 3)" identifier (argument_list "((long)di.num_subs << 3)" ( (binary_expression "(long)di.num_subs << 3" (cast_expression "(long)di.num_subs" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "di.num_subs" identifier . field_identifier)) << number_literal) ))))) ;) (if_statement "if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))\n    goto LAB_0011cff8;" if (parenthesized_expression "((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))" ( (binary_expression "(di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)" (parenthesized_expression "(di.subs == (demangle_component **)0x0)" ( (binary_expression "di.subs == (demangle_component **)0x0" (field_expression "di.subs" identifier . field_identifier) == (cast_expression "(demangle_component **)0x0" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) || (parenthesized_expression "(pdVar2 == (demangle_component *)0x0)" ( (binary_expression "pdVar2 == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (goto_statement "goto LAB_0011cff8;" goto statement_identifier ;)) (expression_statement "pdVar2 = (demangle_component *)cplus_demangle_mangled_name(&di,1);" (assignment_expression "pdVar2 = (demangle_component *)cplus_demangle_mangled_name(&di,1)" identifier = (cast_expression "(demangle_component *)cplus_demangle_mangled_name(&di,1)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "cplus_demangle_mangled_name(&di,1)" identifier (argument_list "(&di,1)" ( (pointer_expression "&di" & identifier) , number_literal ))))) ;) }) (else_clause "else {\n    if ((options & 0x10U) == 0) {\n      return (demangle_component *)0x0;\n    }\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)) {\nLAB_0011cff8:\n      __ptr = di.subs;\n      free(pdVar2);\n      free(__ptr);\n      return (demangle_component *)0x0;\n    }\n    pdVar2 = (demangle_component *)cplus_demangle_type(&di);\n  }" else (compound_statement "{\n    if ((options & 0x10U) == 0) {\n      return (demangle_component *)0x0;\n    }\n    cplus_demangle_init_info(mangled,options,sVar1,&di);\n    pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);\n    di.comps = pdVar2;\n    di.subs = (demangle_component **)malloc((long)di.num_subs << 3);\n    if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)) {\nLAB_0011cff8:\n      __ptr = di.subs;\n      free(pdVar2);\n      free(__ptr);\n      return (demangle_component *)0x0;\n    }\n    pdVar2 = (demangle_component *)cplus_demangle_type(&di);\n  }" { (if_statement "if ((options & 0x10U) == 0) {\n      return (demangle_component *)0x0;\n    }" if (parenthesized_expression "((options & 0x10U) == 0)" ( (binary_expression "(options & 0x10U) == 0" (parenthesized_expression "(options & 0x10U)" ( (binary_expression "options & 0x10U" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      return (demangle_component *)0x0;\n    }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "cplus_demangle_init_info(mangled,options,sVar1,&di);" (call_expression "cplus_demangle_init_info(mangled,options,sVar1,&di)" identifier (argument_list "(mangled,options,sVar1,&di)" ( identifier , identifier , identifier , (pointer_expression "&di" & identifier) ))) ;) (expression_statement "pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18);" (assignment_expression "pdVar2 = (demangle_component *)malloc((long)di.num_comps * 0x18)" identifier = (cast_expression "(demangle_component *)malloc((long)di.num_comps * 0x18)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc((long)di.num_comps * 0x18)" identifier (argument_list "((long)di.num_comps * 0x18)" ( (binary_expression "(long)di.num_comps * 0x18" (cast_expression "(long)di.num_comps" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "di.num_comps" identifier . field_identifier)) * number_literal) ))))) ;) (expression_statement "di.comps = pdVar2;" (assignment_expression "di.comps = pdVar2" (field_expression "di.comps" identifier . field_identifier) = identifier) ;) (expression_statement "di.subs = (demangle_component **)malloc((long)di.num_subs << 3);" (assignment_expression "di.subs = (demangle_component **)malloc((long)di.num_subs << 3)" (field_expression "di.subs" identifier . field_identifier) = (cast_expression "(demangle_component **)malloc((long)di.num_subs << 3)" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "malloc((long)di.num_subs << 3)" identifier (argument_list "((long)di.num_subs << 3)" ( (binary_expression "(long)di.num_subs << 3" (cast_expression "(long)di.num_subs" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "di.num_subs" identifier . field_identifier)) << number_literal) ))))) ;) (if_statement "if ((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)) {\nLAB_0011cff8:\n      __ptr = di.subs;\n      free(pdVar2);\n      free(__ptr);\n      return (demangle_component *)0x0;\n    }" if (parenthesized_expression "((di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0))" ( (binary_expression "(di.subs == (demangle_component **)0x0) || (pdVar2 == (demangle_component *)0x0)" (parenthesized_expression "(di.subs == (demangle_component **)0x0)" ( (binary_expression "di.subs == (demangle_component **)0x0" (field_expression "di.subs" identifier . field_identifier) == (cast_expression "(demangle_component **)0x0" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) || (parenthesized_expression "(pdVar2 == (demangle_component *)0x0)" ( (binary_expression "pdVar2 == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\nLAB_0011cff8:\n      __ptr = di.subs;\n      free(pdVar2);\n      free(__ptr);\n      return (demangle_component *)0x0;\n    }" { (labeled_statement "LAB_0011cff8:\n      __ptr = di.subs;" statement_identifier : (expression_statement "__ptr = di.subs;" (assignment_expression "__ptr = di.subs" identifier = (field_expression "di.subs" identifier . field_identifier)) ;)) (expression_statement "free(pdVar2);" (call_expression "free(pdVar2)" identifier (argument_list "(pdVar2)" ( identifier ))) ;) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "pdVar2 = (demangle_component *)cplus_demangle_type(&di);" (assignment_expression "pdVar2 = (demangle_component *)cplus_demangle_type(&di)" identifier = (cast_expression "(demangle_component *)cplus_demangle_type(&di)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "cplus_demangle_type(&di)" identifier (argument_list "(&di)" ( (pointer_expression "&di" & identifier) ))))) ;) }))) (if_statement "if (((options & 1U) == 0) || (*di.n == '\0')) {\n    free(di.subs);\n    if (pdVar2 != (demangle_component *)0x0) {\n      *mem = di.comps;\n      return pdVar2;\n    }\n  }\n  else {\n    free(di.subs);\n  }" if (parenthesized_expression "(((options & 1U) == 0) || (*di.n == '\0'))" ( (binary_expression "((options & 1U) == 0) || (*di.n == '\0')" (parenthesized_expression "((options & 1U) == 0)" ( (binary_expression "(options & 1U) == 0" (parenthesized_expression "(options & 1U)" ( (binary_expression "options & 1U" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(*di.n == '\0')" ( (binary_expression "*di.n == '\0'" (pointer_expression "*di.n" * (field_expression "di.n" identifier . field_identifier)) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    free(di.subs);\n    if (pdVar2 != (demangle_component *)0x0) {\n      *mem = di.comps;\n      return pdVar2;\n    }\n  }" { (expression_statement "free(di.subs);" (call_expression "free(di.subs)" identifier (argument_list "(di.subs)" ( (field_expression "di.subs" identifier . field_identifier) ))) ;) (if_statement "if (pdVar2 != (demangle_component *)0x0) {\n      *mem = di.comps;\n      return pdVar2;\n    }" if (parenthesized_expression "(pdVar2 != (demangle_component *)0x0)" ( (binary_expression "pdVar2 != (demangle_component *)0x0" identifier != (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *mem = di.comps;\n      return pdVar2;\n    }" { (expression_statement "*mem = di.comps;" (assignment_expression "*mem = di.comps" (pointer_expression "*mem" * identifier) = (field_expression "di.comps" identifier . field_identifier)) ;) (return_statement "return pdVar2;" return identifier ;) })) }) (else_clause "else {\n    free(di.subs);\n  }" else (compound_statement "{\n    free(di.subs);\n  }" { (expression_statement "free(di.subs);" (call_expression "free(di.subs)" identifier (argument_list "(di.subs)" ( (field_expression "di.subs" identifier . field_identifier) ))) ;) }))) (expression_statement "free(di.comps);" (call_expression "free(di.comps)" identifier (argument_list "(di.comps)" ( (field_expression "di.comps" identifier . field_identifier) ))) ;) (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "long FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)\n\n{\n  void *__ptr;\n  size_t sVar1;\n  void *__ptr_00;\n  long lVar2;\n  undefined1 local_88 [24];\n  char *local_70;\n  void *local_68;\n  int local_5c;\n  void *local_58;\n  int local_4c;\n  \n  sVar1 = strlen(param_1);\n  if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }\n  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }\n  free(local_68);\n  return 0;\n}\n\n" (function_definition "long FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)\n\n{\n  void *__ptr;\n  size_t sVar1;\n  void *__ptr_00;\n  long lVar2;\n  undefined1 local_88 [24];\n  char *local_70;\n  void *local_68;\n  int local_5c;\n  void *local_58;\n  int local_4c;\n  \n  sVar1 = strlen(param_1);\n  if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }\n  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }\n  free(local_68);\n  return 0;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)" identifier (parameter_list "(char *param_1,uint param_2,undefined8 *param_3)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  void *__ptr;\n  size_t sVar1;\n  void *__ptr_00;\n  long lVar2;\n  undefined1 local_88 [24];\n  char *local_70;\n  void *local_68;\n  int local_5c;\n  void *local_58;\n  int local_4c;\n  \n  sVar1 = strlen(param_1);\n  if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }\n  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }\n  free(local_68);\n  return 0;\n}" { (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "void *__ptr_00;" primitive_type (pointer_declarator "*__ptr_00" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_88 [24];" type_identifier (array_declarator "local_88 [24]" identifier [ number_literal ]) ;) (declaration "char *local_70;" primitive_type (pointer_declarator "*local_70" * identifier) ;) (declaration "void *local_68;" primitive_type (pointer_declarator "*local_68" * identifier) ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "void *local_58;" primitive_type (pointer_declarator "*local_58" * identifier) ;) (declaration "int local_4c;" primitive_type identifier ;) (expression_statement "sVar1 = strlen(param_1);" (assignment_expression "sVar1 = strlen(param_1)" identifier = (call_expression "strlen(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" if (parenthesized_expression "((*param_1 == '_') && (param_1[1] == 'Z'))" ( (binary_expression "(*param_1 == '_') && (param_1[1] == 'Z')" (parenthesized_expression "(*param_1 == '_')" ( (binary_expression "*param_1 == '_'" (pointer_expression "*param_1" * identifier) == (char_literal "'_'" ' character ')) )) && (parenthesized_expression "(param_1[1] == 'Z')" ( (binary_expression "param_1[1] == 'Z'" (subscript_expression "param_1[1]" identifier [ number_literal ]) == (char_literal "'Z'" ' character ')) ))) )) (compound_statement "{\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }" { (expression_statement "cplus_demangle_init_info(param_1,param_2,sVar1,local_88);" (call_expression "cplus_demangle_init_info(param_1,param_2,sVar1,local_88)" identifier (argument_list "(param_1,param_2,sVar1,local_88)" ( identifier , identifier , identifier , identifier ))) ;) (expression_statement "__ptr_00 = malloc((long)local_5c * 0x18);" (assignment_expression "__ptr_00 = malloc((long)local_5c * 0x18)" identifier = (call_expression "malloc((long)local_5c * 0x18)" identifier (argument_list "((long)local_5c * 0x18)" ( (binary_expression "(long)local_5c * 0x18" (cast_expression "(long)local_5c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) )))) ;) (expression_statement "local_68 = __ptr_00;" (assignment_expression "local_68 = __ptr_00" identifier = identifier) ;) (expression_statement "local_58 = malloc((long)local_4c << 3);" (assignment_expression "local_58 = malloc((long)local_4c << 3)" identifier = (call_expression "malloc((long)local_4c << 3)" identifier (argument_list "((long)local_4c << 3)" ( (binary_expression "(long)local_4c << 3" (cast_expression "(long)local_4c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) << number_literal) )))) ;) (if_statement "if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;" if (parenthesized_expression "((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0))" ( (binary_expression "(local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)" (parenthesized_expression "(local_58 == (void *)0x0)" ( (binary_expression "local_58 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(__ptr_00 == (void *)0x0)" ( (binary_expression "__ptr_00 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (goto_statement "goto LAB_0011cff8;" goto statement_identifier ;)) (expression_statement "lVar2 = cplus_demangle_mangled_name(local_88,1);" (assignment_expression "lVar2 = cplus_demangle_mangled_name(local_88,1)" identifier = (call_expression "cplus_demangle_mangled_name(local_88,1)" identifier (argument_list "(local_88,1)" ( identifier , number_literal )))) ;) }) (else_clause "else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" else (compound_statement "{\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" { (if_statement "if ((param_2 & 0x10) == 0) {\n      return 0;\n    }" if (parenthesized_expression "((param_2 & 0x10) == 0)" ( (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "cplus_demangle_init_info(param_1,param_2,sVar1,local_88);" (call_expression "cplus_demangle_init_info(param_1,param_2,sVar1,local_88)" identifier (argument_list "(param_1,param_2,sVar1,local_88)" ( identifier , identifier , identifier , identifier ))) ;) (expression_statement "__ptr_00 = malloc((long)local_5c * 0x18);" (assignment_expression "__ptr_00 = malloc((long)local_5c * 0x18)" identifier = (call_expression "malloc((long)local_5c * 0x18)" identifier (argument_list "((long)local_5c * 0x18)" ( (binary_expression "(long)local_5c * 0x18" (cast_expression "(long)local_5c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) )))) ;) (expression_statement "local_68 = __ptr_00;" (assignment_expression "local_68 = __ptr_00" identifier = identifier) ;) (expression_statement "local_58 = malloc((long)local_4c << 3);" (assignment_expression "local_58 = malloc((long)local_4c << 3)" identifier = (call_expression "malloc((long)local_4c << 3)" identifier (argument_list "((long)local_4c << 3)" ( (binary_expression "(long)local_4c << 3" (cast_expression "(long)local_4c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) << number_literal) )))) ;) (if_statement "if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }" if (parenthesized_expression "((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0))" ( (binary_expression "(local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)" (parenthesized_expression "(local_58 == (void *)0x0)" ( (binary_expression "local_58 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(__ptr_00 == (void *)0x0)" ( (binary_expression "__ptr_00 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }" { (labeled_statement "LAB_0011cff8:\n      __ptr = local_58;" statement_identifier : (expression_statement "__ptr = local_58;" (assignment_expression "__ptr = local_58" identifier = identifier) ;)) (expression_statement "free(__ptr_00);" (call_expression "free(__ptr_00)" identifier (argument_list "(__ptr_00)" ( identifier ))) ;) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "lVar2 = cplus_demangle_type(local_88);" (assignment_expression "lVar2 = cplus_demangle_type(local_88)" identifier = (call_expression "cplus_demangle_type(local_88)" identifier (argument_list "(local_88)" ( identifier )))) ;) }))) (if_statement "if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }" if (parenthesized_expression "(((param_2 & 1) == 0) || (*local_70 == '\0'))" ( (binary_expression "((param_2 & 1) == 0) || (*local_70 == '\0')" (parenthesized_expression "((param_2 & 1) == 0)" ( (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" ( (binary_expression "param_2 & 1" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(*local_70 == '\0')" ( (binary_expression "*local_70 == '\0'" (pointer_expression "*local_70" * identifier) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) (if_statement "if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      *param_3 = local_68;\n      return lVar2;\n    }" { (expression_statement "*param_3 = local_68;" (assignment_expression "*param_3 = local_68" (pointer_expression "*param_3" * identifier) = identifier) ;) (return_statement "return lVar2;" return identifier ;) })) }) (else_clause "else {\n    free(local_58);\n  }" else (compound_statement "{\n    free(local_58);\n  }" { (expression_statement "free(local_58);" (call_expression "free(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) }))) (expression_statement "free(local_68);" (call_expression "free(local_68)" identifier (argument_list "(local_68)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' character ')) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (char_literal ' character ')) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) << LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) << LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return IDENT ;) })) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return LIT ;) })))
(function_definition "long FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)\n\n{\n  void *__ptr;\n  size_t sVar1;\n  void *__ptr_00;\n  long lVar2;\n  undefined1 local_88 [24];\n  char *local_70;\n  void *local_68;\n  int local_5c;\n  void *local_58;\n  int local_4c;\n  \n  sVar1 = strlen(param_1);\n  if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }\n  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }\n  free(local_68);\n  return 0;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_0011ce90(char *param_1,uint param_2,undefined8 *param_3)" (identifier "FUN_0011ce90") (parameter_list "(char *param_1,uint param_2,undefined8 *param_3)" (( "(") (parameter_declaration "char *param_1" (primitive_type "char") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 *param_3" (type_identifier "undefined8") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  void *__ptr;\n  size_t sVar1;\n  void *__ptr_00;\n  long lVar2;\n  undefined1 local_88 [24];\n  char *local_70;\n  void *local_68;\n  int local_5c;\n  void *local_58;\n  int local_4c;\n  \n  sVar1 = strlen(param_1);\n  if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }\n  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }\n  free(local_68);\n  return 0;\n}" ({ "{") (declaration "void *__ptr;" (primitive_type "void") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (declaration "size_t sVar1;" (primitive_type "size_t") (identifier "sVar1") (; ";")) (declaration "void *__ptr_00;" (primitive_type "void") (pointer_declarator "*__ptr_00" (* "*") (identifier "__ptr_00")) (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "undefined1 local_88 [24];" (type_identifier "undefined1") (array_declarator "local_88 [24]" (identifier "local_88") ([ "[") (number_literal "24") (] "]")) (; ";")) (declaration "char *local_70;" (primitive_type "char") (pointer_declarator "*local_70" (* "*") (identifier "local_70")) (; ";")) (declaration "void *local_68;" (primitive_type "void") (pointer_declarator "*local_68" (* "*") (identifier "local_68")) (; ";")) (declaration "int local_5c;" (primitive_type "int") (identifier "local_5c") (; ";")) (declaration "void *local_58;" (primitive_type "void") (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (declaration "int local_4c;" (primitive_type "int") (identifier "local_4c") (; ";")) (expression_statement "sVar1 = strlen(param_1);" (assignment_expression "sVar1 = strlen(param_1)" (identifier "sVar1") (= "=") (call_expression "strlen(param_1)" (identifier "strlen") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if ((*param_1 == '_') && (param_1[1] == 'Z')) {\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }\n  else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" (if "if") (parenthesized_expression "((*param_1 == '_') && (param_1[1] == 'Z'))" (( "(") (binary_expression "(*param_1 == '_') && (param_1[1] == 'Z')" (parenthesized_expression "(*param_1 == '_')" (( "(") (binary_expression "*param_1 == '_'" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (char_literal "'_'" (' "'") (character "_") (' "'"))) () ")")) (&& "&&") (parenthesized_expression "(param_1[1] == 'Z')" (( "(") (binary_expression "param_1[1] == 'Z'" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (== "==") (char_literal "'Z'" (' "'") (character "Z") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;\n    lVar2 = cplus_demangle_mangled_name(local_88,1);\n  }" ({ "{") (expression_statement "cplus_demangle_init_info(param_1,param_2,sVar1,local_88);" (call_expression "cplus_demangle_init_info(param_1,param_2,sVar1,local_88)" (identifier "cplus_demangle_init_info") (argument_list "(param_1,param_2,sVar1,local_88)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "sVar1") (, ",") (identifier "local_88") () ")"))) (; ";")) (expression_statement "__ptr_00 = malloc((long)local_5c * 0x18);" (assignment_expression "__ptr_00 = malloc((long)local_5c * 0x18)" (identifier "__ptr_00") (= "=") (call_expression "malloc((long)local_5c * 0x18)" (identifier "malloc") (argument_list "((long)local_5c * 0x18)" (( "(") (binary_expression "(long)local_5c * 0x18" (cast_expression "(long)local_5c" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_5c")) (* "*") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "local_68 = __ptr_00;" (assignment_expression "local_68 = __ptr_00" (identifier "local_68") (= "=") (identifier "__ptr_00")) (; ";")) (expression_statement "local_58 = malloc((long)local_4c << 3);" (assignment_expression "local_58 = malloc((long)local_4c << 3)" (identifier "local_58") (= "=") (call_expression "malloc((long)local_4c << 3)" (identifier "malloc") (argument_list "((long)local_4c << 3)" (( "(") (binary_expression "(long)local_4c << 3" (cast_expression "(long)local_4c" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_4c")) (<< "<<") (number_literal "3")) () ")")))) (; ";")) (if_statement "if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;" (if "if") (parenthesized_expression "((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0))" (( "(") (binary_expression "(local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)" (parenthesized_expression "(local_58 == (void *)0x0)" (( "(") (binary_expression "local_58 == (void *)0x0" (identifier "local_58") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(__ptr_00 == (void *)0x0)" (( "(") (binary_expression "__ptr_00 == (void *)0x0" (identifier "__ptr_00") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (goto_statement "goto LAB_0011cff8;" (goto "goto") (statement_identifier "LAB_0011cff8") (; ";"))) (expression_statement "lVar2 = cplus_demangle_mangled_name(local_88,1);" (assignment_expression "lVar2 = cplus_demangle_mangled_name(local_88,1)" (identifier "lVar2") (= "=") (call_expression "cplus_demangle_mangled_name(local_88,1)" (identifier "cplus_demangle_mangled_name") (argument_list "(local_88,1)" (( "(") (identifier "local_88") (, ",") (number_literal "1") () ")")))) (; ";")) (} "}")) (else_clause "else {\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" (else "else") (compound_statement "{\n    if ((param_2 & 0x10) == 0) {\n      return 0;\n    }\n    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);\n    __ptr_00 = malloc((long)local_5c * 0x18);\n    local_68 = __ptr_00;\n    local_58 = malloc((long)local_4c << 3);\n    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }\n    lVar2 = cplus_demangle_type(local_88);\n  }" ({ "{") (if_statement "if ((param_2 & 0x10) == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "((param_2 & 0x10) == 0)" (( "(") (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" (( "(") (binary_expression "param_2 & 0x10" (identifier "param_2") (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "cplus_demangle_init_info(param_1,param_2,sVar1,local_88);" (call_expression "cplus_demangle_init_info(param_1,param_2,sVar1,local_88)" (identifier "cplus_demangle_init_info") (argument_list "(param_1,param_2,sVar1,local_88)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "sVar1") (, ",") (identifier "local_88") () ")"))) (; ";")) (expression_statement "__ptr_00 = malloc((long)local_5c * 0x18);" (assignment_expression "__ptr_00 = malloc((long)local_5c * 0x18)" (identifier "__ptr_00") (= "=") (call_expression "malloc((long)local_5c * 0x18)" (identifier "malloc") (argument_list "((long)local_5c * 0x18)" (( "(") (binary_expression "(long)local_5c * 0x18" (cast_expression "(long)local_5c" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_5c")) (* "*") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "local_68 = __ptr_00;" (assignment_expression "local_68 = __ptr_00" (identifier "local_68") (= "=") (identifier "__ptr_00")) (; ";")) (expression_statement "local_58 = malloc((long)local_4c << 3);" (assignment_expression "local_58 = malloc((long)local_4c << 3)" (identifier "local_58") (= "=") (call_expression "malloc((long)local_4c << 3)" (identifier "malloc") (argument_list "((long)local_4c << 3)" (( "(") (binary_expression "(long)local_4c << 3" (cast_expression "(long)local_4c" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_4c")) (<< "<<") (number_literal "3")) () ")")))) (; ";")) (if_statement "if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }" (if "if") (parenthesized_expression "((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0))" (( "(") (binary_expression "(local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)" (parenthesized_expression "(local_58 == (void *)0x0)" (( "(") (binary_expression "local_58 == (void *)0x0" (identifier "local_58") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(__ptr_00 == (void *)0x0)" (( "(") (binary_expression "__ptr_00 == (void *)0x0" (identifier "__ptr_00") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\nLAB_0011cff8:\n      __ptr = local_58;\n      free(__ptr_00);\n      free(__ptr);\n      return 0;\n    }" ({ "{") (labeled_statement "LAB_0011cff8:\n      __ptr = local_58;" (statement_identifier "LAB_0011cff8") (: ":") (expression_statement "__ptr = local_58;" (assignment_expression "__ptr = local_58" (identifier "__ptr") (= "=") (identifier "local_58")) (; ";"))) (expression_statement "free(__ptr_00);" (call_expression "free(__ptr_00)" (identifier "free") (argument_list "(__ptr_00)" (( "(") (identifier "__ptr_00") () ")"))) (; ";")) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" (identifier "free") (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "lVar2 = cplus_demangle_type(local_88);" (assignment_expression "lVar2 = cplus_demangle_type(local_88)" (identifier "lVar2") (= "=") (call_expression "cplus_demangle_type(local_88)" (identifier "cplus_demangle_type") (argument_list "(local_88)" (( "(") (identifier "local_88") () ")")))) (; ";")) (} "}")))) (if_statement "if (((param_2 & 1) == 0) || (*local_70 == '\0')) {\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }\n  else {\n    free(local_58);\n  }" (if "if") (parenthesized_expression "(((param_2 & 1) == 0) || (*local_70 == '\0'))" (( "(") (binary_expression "((param_2 & 1) == 0) || (*local_70 == '\0')" (parenthesized_expression "((param_2 & 1) == 0)" (( "(") (binary_expression "(param_2 & 1) == 0" (parenthesized_expression "(param_2 & 1)" (( "(") (binary_expression "param_2 & 1" (identifier "param_2") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(*local_70 == '\0')" (( "(") (binary_expression "*local_70 == '\0'" (pointer_expression "*local_70" (* "*") (identifier "local_70")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    free(local_58);\n    if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }\n  }" ({ "{") (expression_statement "free(local_58);" (call_expression "free(local_58)" (identifier "free") (argument_list "(local_58)" (( "(") (identifier "local_58") () ")"))) (; ";")) (if_statement "if (lVar2 != 0) {\n      *param_3 = local_68;\n      return lVar2;\n    }" (if "if") (parenthesized_expression "(lVar2 != 0)" (( "(") (binary_expression "lVar2 != 0" (identifier "lVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      *param_3 = local_68;\n      return lVar2;\n    }" ({ "{") (expression_statement "*param_3 = local_68;" (assignment_expression "*param_3 = local_68" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "local_68")) (; ";")) (return_statement "return lVar2;" (return "return") (identifier "lVar2") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    free(local_58);\n  }" (else "else") (compound_statement "{\n    free(local_58);\n  }" ({ "{") (expression_statement "free(local_58);" (call_expression "free(local_58)" (identifier "free") (argument_list "(local_58)" (( "(") (identifier "local_58") () ")"))) (; ";")) (} "}")))) (expression_statement "free(local_68);" (call_expression "free(local_68)" (identifier "free") (argument_list "(local_68)" (( "(") (identifier "local_68") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

type_1 * function_1(char *mangled,int var_6,void **mem)

{
  type_1 **__ptr;
  size_t sVar1;
  type_1 *var_4;
  type_2 di;
  
  sVar1 = var_1(mangled);
  if ((*mangled == '_') && (mangled[1] == 'Z')) {
    var_2(mangled,var_6,sVar1,&di);
    var_4 = (type_1 *)var_3((long)di.num_comps * 0x18);
    di.comps = var_4;
    di.subs = (type_1 **)var_3((long)di.num_subs << 3);
    if ((di.subs == (type_1 **)0x0) || (var_4 == (type_1 *)0x0))
    goto LAB_0011cff8;
    var_4 = (type_1 *)var_5(&di,1);
  }
  else {
    if ((var_6 & 0x10U) == 0) {
      return (type_1 *)0x0;
    }
    var_2(mangled,var_6,sVar1,&di);
    var_4 = (type_1 *)var_3((long)di.num_comps * 0x18);
    di.comps = var_4;
    di.subs = (type_1 **)var_3((long)di.num_subs << 3);
    if ((di.subs == (type_1 **)0x0) || (var_4 == (type_1 *)0x0)) {
LAB_0011cff8:
      __ptr = di.subs;
      var_7(var_4);
      var_7(__ptr);
      return (type_1 *)0x0;
    }
    var_4 = (type_1 *)var_8(&di);
  }
  if (((var_6 & 1U) == 0) || (*di.n == '\0')) {
    var_7(di.subs);
    if (var_4 != (type_1 *)0x0) {
      *mem = di.comps;
      return var_4;
    }
  }
  else {
    var_7(di.subs);
  }
  var_7(di.comps);
  return (type_1 *)0x0;
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (character)))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (character)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (escape_sequence)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (number_literal)))))

long MASKED(char *param_1,uint param_2,undefined8 *param_3)

{
  void *__ptr;
  size_t sVar1;
  void *__ptr_00;
  long lVar2;
  undefined1 local_88 [24];
  char *local_70;
  void *local_68;
  int local_5c;
  void *local_58;
  int local_4c;
  
  sVar1 = strlen(param_1);
  if ((*param_1 == '_') && (param_1[1] == 'Z')) {
    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);
    __ptr_00 = malloc((long)local_5c * 0x18);
    local_68 = __ptr_00;
    local_58 = malloc((long)local_4c << 3);
    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) goto LAB_0011cff8;
    lVar2 = cplus_demangle_mangled_name(local_88,1);
  }
  else {
    if ((param_2 & 0x10) == 0) {
      return 0;
    }
    cplus_demangle_init_info(param_1,param_2,sVar1,local_88);
    __ptr_00 = malloc((long)local_5c * 0x18);
    local_68 = __ptr_00;
    local_58 = malloc((long)local_4c << 3);
    if ((local_58 == (void *)0x0) || (__ptr_00 == (void *)0x0)) {
LAB_0011cff8:
      __ptr = local_58;
      free(__ptr_00);
      free(__ptr);
      return 0;
    }
    lVar2 = cplus_demangle_type(local_88);
  }
  if (((param_2 & 1) == 0) || (*local_70 == '\0')) {
    free(local_58);
    if (lVar2 != 0) {
      *param_3 = local_68;
      return lVar2;
    }
  }
  else {
    free(local_58);
  }
  free(local_68);
  return 0;
}

