
int is_ctor_or_dtor(char *mangled,gnu_v3_ctor_kinds *ctor_kind,gnu_v3_dtor_kinds *dtor_kind)

{
  demangle_component_type dVar1;
  long lVar2;
  long lVar3;
  size_t sVar4;
  demangle_component *pdVar5;
  demangle_component *pdStack_90;
  d_info di;
  
  *ctor_kind = 0;
  *dtor_kind = 0;
  pdStack_90 = (demangle_component *)0x2d2797;
  sVar4 = strlen(mangled);
  di.num_subs = (int)sVar4;
  di.num_comps = di.num_subs * 2;
  di.send = mangled + sVar4;
  di.options = 0x4000;
  lVar2 = (long)di.num_comps * -0x18;
  di.comps = (demangle_component *)((long)&di + lVar2);
  lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);
  di.subs = (demangle_component **)((long)&di + lVar3 + lVar2);
  di.next_comp = 0;
  di.next_sub = 0;
  di.last_name = (demangle_component *)0x0;
  di.expansion = 0;
  di.is_expression = 0;
  di.is_conversion = 0;
  di.s = mangled;
  di.n = mangled;
  *(undefined8 *)((long)&pdStack_90 + lVar3 + lVar2) = 0x2d2814;
  pdVar5 = cplus_demangle_mangled_name(&di,1);
  if (pdVar5 != (demangle_component *)0x0) {
    dVar1 = pdVar5->type;
    while (dVar1 < DEMANGLE_COMPONENT_VTABLE) {
      switch((long)&switchD_002d282e::switchdataD_0038f428 +
             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {
      case 0x2d2830:
        *dtor_kind = (pdVar5->u).s_extended_operator.args;
        pdVar5 = (demangle_component *)0x1;
        goto LAB_002d283c;
      case 0x2d2850:
        *ctor_kind = (pdVar5->u).s_extended_operator.args;
        return 1;
      case 0x2d2870:
        pdVar5 = (pdVar5->u).s_fixed.length;
        break;
      default:
        goto switchD_002d282e_caseD_2d287e;
      case 0x2d2890:
        pdVar5 = (pdVar5->u).s_extended_operator.name;
      }
      if (pdVar5 == (demangle_component *)0x0) {
LAB_002d283c:
        return (int)pdVar5;
      }
      dVar1 = pdVar5->type;
    }
  }
switchD_002d282e_caseD_2d287e:
  return 0;
}



undefined8 FUN_002d2770(char *param_1,uint *param_2,uint *param_3)

{
  uint uVar1;
  long lVar2;
  long lVar3;
  size_t sVar4;
  uint *puVar5;
  undefined8 uStack_90;
  char *local_88 [2];
  undefined4 local_78;
  char *local_70;
  undefined1 *local_68;
  undefined4 local_60;
  int local_5c;
  undefined1 *local_58;
  undefined4 local_50;
  int local_4c;
  undefined8 local_48;
  undefined8 local_40;
  undefined4 local_38;
  
  *param_2 = 0;
  *param_3 = 0;
  uStack_90 = 0x2d2797;
  sVar4 = strlen(param_1);
  local_4c = (int)sVar4;
  local_5c = local_4c * 2;
  local_88[1] = param_1 + sVar4;
  local_78 = 0x4000;
  lVar2 = (long)local_5c * -0x18;
  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);
  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);
  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);
  local_60 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_88[0] = param_1;
  local_70 = param_1;
  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;
  puVar5 = (uint *)FUN_002d19a0(local_88,1);
  if (puVar5 != (uint *)0x0) {
    uVar1 = *puVar5;
    while (uVar1 < 9) {
      switch((long)&switchD_002d282e::switchdataD_0038f428 +
             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {
      case 0x2d2830:
        *param_3 = puVar5[2];
        return 1;
      case 0x2d2850:
        *param_2 = puVar5[2];
        return 1;
      case 0x2d2870:
        puVar5 = *(uint **)(puVar5 + 2);
        break;
      case 0x2d287e:
        goto switchD_002d282e_caseD_2d287e;
      case 0x2d2890:
        puVar5 = *(uint **)(puVar5 + 4);
      }
      if (puVar5 == (uint *)0x0) {
        return 0;
      }
      uVar1 = *puVar5;
    }
  }
switchD_002d282e_caseD_2d287e:
  return 0;
}


PUSH RBP
MOV RBP,RSP
PUSH R13
MOV R13,RDX
PUSH R12
MOV R12,RSI
PUSH RBX
MOV RBX,RDI
SUB RSP,0x68
MOV dword ptr [RSI],0x0
MOV dword ptr [RDX],0x0
CALL 0x00147490
LEA RDI,[RBP + -0x80]
MOV qword ptr [RBP + -0x80],RBX
MOV ESI,0x1
LEA ECX,[RAX + RAX*0x1]
LEA RDX,[RBX + RAX*0x1]
MOV dword ptr [RBP + -0x44],EAX
CDQE
MOV dword ptr [RBP + -0x54],ECX
MOVSXD RCX,ECX
LEA RAX,[0xf + RAX*0x8]
MOV qword ptr [RBP + -0x78],RDX
LEA RDX,[RCX + RCX*0x2]
AND RAX,-0x10
SHL RDX,0x3
MOV dword ptr [RBP + -0x70],0x4000
SUB RSP,RDX
MOV qword ptr [RBP + -0x68],RBX
MOV RDX,RSP
SUB RSP,RAX
MOV dword ptr [RBP + -0x58],0x0
MOV dword ptr [RBP + -0x48],0x0
MOV qword ptr [RBP + -0x40],0x0
MOV qword ptr [RBP + -0x38],0x0
MOV dword ptr [RBP + -0x30],0x0
MOV qword ptr [RBP + -0x60],RDX
MOV qword ptr [RBP + -0x50],RSP
CALL 0x002d19a0
TEST RAX,RAX
JZ 0x002d287e
CMP dword ptr [RAX],0x8
LEA RDX,[0x38f428]
JA 0x002d287e
MOV ECX,dword ptr [RAX]
MOVSXD RCX,dword ptr [RDX + RCX*0x4]
ADD RCX,RDX
JMP RCX
MOV EAX,dword ptr [RAX + 0x8]
MOV dword ptr [R13],EAX
MOV EAX,0x1
LEA RSP,[RBP + -0x18]
POP RBX
POP R12
POP R13
POP RBP
RET
MOV EAX,dword ptr [RAX + 0x8]
MOV dword ptr [R12],EAX
LEA RSP,[RBP + -0x18]
MOV EAX,0x1
POP RBX
POP R12
POP R13
POP RBP
RET
MOV RAX,qword ptr [RAX + 0x8]
TEST RAX,RAX
JZ 0x002d283c
CMP dword ptr [RAX],0x8
JBE 0x002d2825
LEA RSP,[RBP + -0x18]
XOR EAX,EAX
POP RBX
POP R12
POP R13
POP RBP
RET
MOV RAX,qword ptr [RAX + 0x10]
JMP 0x002d2874
(translation_unit "undefined8 FUN_002d2770(char *param_1,uint *param_2,uint *param_3)\n\n{\n  uint uVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  uint *puVar5;\n  undefined8 uStack_90;\n  char *local_88 [2];\n  undefined4 local_78;\n  char *local_70;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined1 *local_58;\n  undefined4 local_50;\n  int local_4c;\n  undefined8 local_48;\n  undefined8 local_40;\n  undefined4 local_38;\n  \n  *param_2 = 0;\n  *param_3 = 0;\n  uStack_90 = 0x2d2797;\n  sVar4 = strlen(param_1);\n  local_4c = (int)sVar4;\n  local_5c = local_4c * 2;\n  local_88[1] = param_1 + sVar4;\n  local_78 = 0x4000;\n  lVar2 = (long)local_5c * -0x18;\n  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);\n  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);\n  local_60 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_40 = 0;\n  local_38 = 0;\n  local_88[0] = param_1;\n  local_70 = param_1;\n  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;\n  puVar5 = (uint *)FUN_002d19a0(local_88,1);\n  if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_002d2770(char *param_1,uint *param_2,uint *param_3)\n\n{\n  uint uVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  uint *puVar5;\n  undefined8 uStack_90;\n  char *local_88 [2];\n  undefined4 local_78;\n  char *local_70;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined1 *local_58;\n  undefined4 local_50;\n  int local_4c;\n  undefined8 local_48;\n  undefined8 local_40;\n  undefined4 local_38;\n  \n  *param_2 = 0;\n  *param_3 = 0;\n  uStack_90 = 0x2d2797;\n  sVar4 = strlen(param_1);\n  local_4c = (int)sVar4;\n  local_5c = local_4c * 2;\n  local_88[1] = param_1 + sVar4;\n  local_78 = 0x4000;\n  lVar2 = (long)local_5c * -0x18;\n  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);\n  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);\n  local_60 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_40 = 0;\n  local_38 = 0;\n  local_88[0] = param_1;\n  local_70 = param_1;\n  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;\n  puVar5 = (uint *)FUN_002d19a0(local_88,1);\n  if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}" type_identifier (function_declarator "FUN_002d2770(char *param_1,uint *param_2,uint *param_3)" identifier (parameter_list "(char *param_1,uint *param_2,uint *param_3)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  uint *puVar5;\n  undefined8 uStack_90;\n  char *local_88 [2];\n  undefined4 local_78;\n  char *local_70;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined1 *local_58;\n  undefined4 local_50;\n  int local_4c;\n  undefined8 local_48;\n  undefined8 local_40;\n  undefined4 local_38;\n  \n  *param_2 = 0;\n  *param_3 = 0;\n  uStack_90 = 0x2d2797;\n  sVar4 = strlen(param_1);\n  local_4c = (int)sVar4;\n  local_5c = local_4c * 2;\n  local_88[1] = param_1 + sVar4;\n  local_78 = 0x4000;\n  lVar2 = (long)local_5c * -0x18;\n  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);\n  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);\n  local_60 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_40 = 0;\n  local_38 = 0;\n  local_88[0] = param_1;\n  local_70 = param_1;\n  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;\n  puVar5 = (uint *)FUN_002d19a0(local_88,1);\n  if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined8 uStack_90;" type_identifier identifier ;) (declaration "char *local_88 [2];" primitive_type (pointer_declarator "*local_88 [2]" * (array_declarator "local_88 [2]" identifier [ number_literal ])) ;) (declaration "undefined4 local_78;" type_identifier identifier ;) (declaration "char *local_70;" primitive_type (pointer_declarator "*local_70" * identifier) ;) (declaration "undefined1 *local_68;" type_identifier (pointer_declarator "*local_68" * identifier) ;) (declaration "undefined4 local_60;" type_identifier identifier ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "undefined4 local_50;" type_identifier identifier ;) (declaration "int local_4c;" primitive_type identifier ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (declaration "undefined8 local_40;" type_identifier identifier ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" * identifier) = number_literal) ;) (expression_statement "uStack_90 = 0x2d2797;" (assignment_expression "uStack_90 = 0x2d2797" identifier = number_literal) ;) (expression_statement "sVar4 = strlen(param_1);" (assignment_expression "sVar4 = strlen(param_1)" identifier = (call_expression "strlen(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "local_4c = (int)sVar4;" (assignment_expression "local_4c = (int)sVar4" identifier = (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "local_5c = local_4c * 2;" (assignment_expression "local_5c = local_4c * 2" identifier = (binary_expression "local_4c * 2" identifier * number_literal)) ;) (expression_statement "local_88[1] = param_1 + sVar4;" (assignment_expression "local_88[1] = param_1 + sVar4" (subscript_expression "local_88[1]" identifier [ number_literal ]) = (binary_expression "param_1 + sVar4" identifier + identifier)) ;) (expression_statement "local_78 = 0x4000;" (assignment_expression "local_78 = 0x4000" identifier = number_literal) ;) (expression_statement "lVar2 = (long)local_5c * -0x18;" (assignment_expression "lVar2 = (long)local_5c * -0x18" identifier = (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 = (undefined1 *)(local_88 + (long)local_5c * -3);" (assignment_expression "local_68 = (undefined1 *)(local_88 + (long)local_5c * -3)" identifier = (cast_expression "(undefined1 *)(local_88 + (long)local_5c * -3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_88 + (long)local_5c * -3)" ( (binary_expression "local_88 + (long)local_5c * -3" identifier + (binary_expression "(long)local_5c * -3" (cast_expression "(long)local_5c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) )))) ;) (expression_statement "lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);" (assignment_expression "lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" identifier = (unary_expression "-((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" - (parenthesized_expression "((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" ( (binary_expression "(long)local_4c * 8 + 0xfU & 0xfffffffffffffff0" (binary_expression "(long)local_4c * 8 + 0xfU" (binary_expression "(long)local_4c * 8" (cast_expression "(long)local_4c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);" (assignment_expression "local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2)" identifier = (cast_expression "(undefined1 *)((long)local_88 + lVar3 + lVar2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)local_88 + lVar3 + lVar2)" ( (binary_expression "(long)local_88 + lVar3 + lVar2" (binary_expression "(long)local_88 + lVar3" (cast_expression "(long)local_88" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" identifier = number_literal) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "local_38 = 0;" (assignment_expression "local_38 = 0" identifier = number_literal) ;) (expression_statement "local_88[0] = param_1;" (assignment_expression "local_88[0] = param_1" (subscript_expression "local_88[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_70 = param_1;" (assignment_expression "local_70 = param_1" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;" (assignment_expression "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814" (pointer_expression "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2)" * (cast_expression "(undefined8 *)((long)&uStack_90 + lVar3 + lVar2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_90 + lVar3 + lVar2)" ( (binary_expression "(long)&uStack_90 + lVar3 + lVar2" (binary_expression "(long)&uStack_90 + lVar3" (cast_expression "(long)&uStack_90" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_90" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "puVar5 = (uint *)FUN_002d19a0(local_88,1);" (assignment_expression "puVar5 = (uint *)FUN_002d19a0(local_88,1)" identifier = (cast_expression "(uint *)FUN_002d19a0(local_88,1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002d19a0(local_88,1)" identifier (argument_list "(local_88,1)" ( identifier , number_literal ))))) ;) (if_statement "if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }" if (parenthesized_expression "(puVar5 != (uint *)0x0)" ( (binary_expression "puVar5 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }" { (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (while_statement "while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }" while (parenthesized_expression "(uVar1 < 9)" ( (binary_expression "uVar1 < 9" identifier < number_literal) )) (compound_statement "{\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }" { (switch_statement "switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }" switch (parenthesized_expression "((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5])" ( (binary_expression "(long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" (cast_expression "(long)&switchD_002d282e" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&switchD_002d282e" & identifier)) (ERROR "::switchdataD_0038f428" : : identifier) + (cast_expression "(long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" (parenthesized_expression "(&switchD_002d282e::switchdataD_0038f428)" ( (ERROR "&switchD_002d282e::" (pointer_expression "&switchD_002d282e" & identifier) : :) identifier )) [ (pointer_expression "*puVar5" * identifier) ])))) )) (compound_statement "{\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }" { (case_statement "case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;" case number_literal : (expression_statement "*param_3 = puVar5[2];" (assignment_expression "*param_3 = puVar5[2]" (pointer_expression "*param_3" * identifier) = (subscript_expression "puVar5[2]" identifier [ number_literal ])) ;) (return_statement "return 1;" return number_literal ;)) (case_statement "case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;" case number_literal : (expression_statement "*param_2 = puVar5[2];" (assignment_expression "*param_2 = puVar5[2]" (pointer_expression "*param_2" * identifier) = (subscript_expression "puVar5[2]" identifier [ number_literal ])) ;) (return_statement "return 1;" return number_literal ;)) (case_statement "case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;" case number_literal : (expression_statement "puVar5 = *(uint **)(puVar5 + 2);" (assignment_expression "puVar5 = *(uint **)(puVar5 + 2)" identifier = (pointer_expression "*(uint **)(puVar5 + 2)" * (cast_expression "(uint **)(puVar5 + 2)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5 + 2)" ( (binary_expression "puVar5 + 2" identifier + number_literal) ))))) ;) (break_statement "break;" break ;)) (case_statement "case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;" case number_literal : (goto_statement "goto switchD_002d282e_caseD_2d287e;" goto statement_identifier ;)) (case_statement "case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);" case number_literal : (expression_statement "puVar5 = *(uint **)(puVar5 + 4);" (assignment_expression "puVar5 = *(uint **)(puVar5 + 4)" identifier = (pointer_expression "*(uint **)(puVar5 + 4)" * (cast_expression "(uint **)(puVar5 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) ))))) ;)) })) (if_statement "if (puVar5 == (uint *)0x0) {\n        return 0;\n      }" if (parenthesized_expression "(puVar5 == (uint *)0x0)" ( (binary_expression "puVar5 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) })) })) (labeled_statement "switchD_002d282e_caseD_2d287e:\n  return 0;" statement_identifier : (return_statement "return 0;" return number_literal ;)) })))
(translation_unit "int is_ctor_or_dtor(char *mangled,gnu_v3_ctor_kinds *ctor_kind,gnu_v3_dtor_kinds *dtor_kind)\n\n{\n  demangle_component_type dVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  demangle_component *pdVar5;\n  demangle_component *pdStack_90;\n  d_info di;\n  \n  *ctor_kind = 0;\n  *dtor_kind = 0;\n  pdStack_90 = (demangle_component *)0x2d2797;\n  sVar4 = strlen(mangled);\n  di.num_subs = (int)sVar4;\n  di.num_comps = di.num_subs * 2;\n  di.send = mangled + sVar4;\n  di.options = 0x4000;\n  lVar2 = (long)di.num_comps * -0x18;\n  di.comps = (demangle_component *)((long)&di + lVar2);\n  lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);\n  di.subs = (demangle_component **)((long)&di + lVar3 + lVar2);\n  di.next_comp = 0;\n  di.next_sub = 0;\n  di.last_name = (demangle_component *)0x0;\n  di.expansion = 0;\n  di.is_expression = 0;\n  di.is_conversion = 0;\n  di.s = mangled;\n  di.n = mangled;\n  *(undefined8 *)((long)&pdStack_90 + lVar3 + lVar2) = 0x2d2814;\n  pdVar5 = cplus_demangle_mangled_name(&di,1);\n  if (pdVar5 != (demangle_component *)0x0) {\n    dVar1 = pdVar5->type;\n    while (dVar1 < DEMANGLE_COMPONENT_VTABLE) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }\n      if (pdVar5 == (demangle_component *)0x0) {\nLAB_002d283c:\n        return (int)pdVar5;\n      }\n      dVar1 = pdVar5->type;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}\n\n" (function_definition "int is_ctor_or_dtor(char *mangled,gnu_v3_ctor_kinds *ctor_kind,gnu_v3_dtor_kinds *dtor_kind)\n\n{\n  demangle_component_type dVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  demangle_component *pdVar5;\n  demangle_component *pdStack_90;\n  d_info di;\n  \n  *ctor_kind = 0;\n  *dtor_kind = 0;\n  pdStack_90 = (demangle_component *)0x2d2797;\n  sVar4 = strlen(mangled);\n  di.num_subs = (int)sVar4;\n  di.num_comps = di.num_subs * 2;\n  di.send = mangled + sVar4;\n  di.options = 0x4000;\n  lVar2 = (long)di.num_comps * -0x18;\n  di.comps = (demangle_component *)((long)&di + lVar2);\n  lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);\n  di.subs = (demangle_component **)((long)&di + lVar3 + lVar2);\n  di.next_comp = 0;\n  di.next_sub = 0;\n  di.last_name = (demangle_component *)0x0;\n  di.expansion = 0;\n  di.is_expression = 0;\n  di.is_conversion = 0;\n  di.s = mangled;\n  di.n = mangled;\n  *(undefined8 *)((long)&pdStack_90 + lVar3 + lVar2) = 0x2d2814;\n  pdVar5 = cplus_demangle_mangled_name(&di,1);\n  if (pdVar5 != (demangle_component *)0x0) {\n    dVar1 = pdVar5->type;\n    while (dVar1 < DEMANGLE_COMPONENT_VTABLE) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }\n      if (pdVar5 == (demangle_component *)0x0) {\nLAB_002d283c:\n        return (int)pdVar5;\n      }\n      dVar1 = pdVar5->type;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}" primitive_type (function_declarator "is_ctor_or_dtor(char *mangled,gnu_v3_ctor_kinds *ctor_kind,gnu_v3_dtor_kinds *dtor_kind)" identifier (parameter_list "(char *mangled,gnu_v3_ctor_kinds *ctor_kind,gnu_v3_dtor_kinds *dtor_kind)" ( (parameter_declaration "char *mangled" primitive_type (pointer_declarator "*mangled" * identifier)) , (parameter_declaration "gnu_v3_ctor_kinds *ctor_kind" type_identifier (pointer_declarator "*ctor_kind" * identifier)) , (parameter_declaration "gnu_v3_dtor_kinds *dtor_kind" type_identifier (pointer_declarator "*dtor_kind" * identifier)) ))) (compound_statement "{\n  demangle_component_type dVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  demangle_component *pdVar5;\n  demangle_component *pdStack_90;\n  d_info di;\n  \n  *ctor_kind = 0;\n  *dtor_kind = 0;\n  pdStack_90 = (demangle_component *)0x2d2797;\n  sVar4 = strlen(mangled);\n  di.num_subs = (int)sVar4;\n  di.num_comps = di.num_subs * 2;\n  di.send = mangled + sVar4;\n  di.options = 0x4000;\n  lVar2 = (long)di.num_comps * -0x18;\n  di.comps = (demangle_component *)((long)&di + lVar2);\n  lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);\n  di.subs = (demangle_component **)((long)&di + lVar3 + lVar2);\n  di.next_comp = 0;\n  di.next_sub = 0;\n  di.last_name = (demangle_component *)0x0;\n  di.expansion = 0;\n  di.is_expression = 0;\n  di.is_conversion = 0;\n  di.s = mangled;\n  di.n = mangled;\n  *(undefined8 *)((long)&pdStack_90 + lVar3 + lVar2) = 0x2d2814;\n  pdVar5 = cplus_demangle_mangled_name(&di,1);\n  if (pdVar5 != (demangle_component *)0x0) {\n    dVar1 = pdVar5->type;\n    while (dVar1 < DEMANGLE_COMPONENT_VTABLE) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }\n      if (pdVar5 == (demangle_component *)0x0) {\nLAB_002d283c:\n        return (int)pdVar5;\n      }\n      dVar1 = pdVar5->type;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}" { (declaration "demangle_component_type dVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "demangle_component *pdVar5;" type_identifier (pointer_declarator "*pdVar5" * identifier) ;) (declaration "demangle_component *pdStack_90;" type_identifier (pointer_declarator "*pdStack_90" * identifier) ;) (declaration "d_info di;" type_identifier identifier ;) (expression_statement "*ctor_kind = 0;" (assignment_expression "*ctor_kind = 0" (pointer_expression "*ctor_kind" * identifier) = number_literal) ;) (expression_statement "*dtor_kind = 0;" (assignment_expression "*dtor_kind = 0" (pointer_expression "*dtor_kind" * identifier) = number_literal) ;) (expression_statement "pdStack_90 = (demangle_component *)0x2d2797;" (assignment_expression "pdStack_90 = (demangle_component *)0x2d2797" identifier = (cast_expression "(demangle_component *)0x2d2797" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "sVar4 = strlen(mangled);" (assignment_expression "sVar4 = strlen(mangled)" identifier = (call_expression "strlen(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (expression_statement "di.num_subs = (int)sVar4;" (assignment_expression "di.num_subs = (int)sVar4" (field_expression "di.num_subs" identifier . field_identifier) = (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "di.num_comps = di.num_subs * 2;" (assignment_expression "di.num_comps = di.num_subs * 2" (field_expression "di.num_comps" identifier . field_identifier) = (binary_expression "di.num_subs * 2" (field_expression "di.num_subs" identifier . field_identifier) * number_literal)) ;) (expression_statement "di.send = mangled + sVar4;" (assignment_expression "di.send = mangled + sVar4" (field_expression "di.send" identifier . field_identifier) = (binary_expression "mangled + sVar4" identifier + identifier)) ;) (expression_statement "di.options = 0x4000;" (assignment_expression "di.options = 0x4000" (field_expression "di.options" identifier . field_identifier) = number_literal) ;) (expression_statement "lVar2 = (long)di.num_comps * -0x18;" (assignment_expression "lVar2 = (long)di.num_comps * -0x18" identifier = (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 = (demangle_component *)((long)&di + lVar2);" (assignment_expression "di.comps = (demangle_component *)((long)&di + lVar2)" (field_expression "di.comps" identifier . field_identifier) = (cast_expression "(demangle_component *)((long)&di + lVar2)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&di + lVar2)" ( (binary_expression "(long)&di + lVar2" (cast_expression "(long)&di" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&di" & identifier)) + identifier) )))) ;) (expression_statement "lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);" (assignment_expression "lVar3 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0)" identifier = (unary_expression "-((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0)" - (parenthesized_expression "((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0)" ( (binary_expression "(long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0" (binary_expression "(long)di.num_subs * 8 + 0xfU" (binary_expression "(long)di.num_subs * 8" (cast_expression "(long)di.num_subs" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "di.num_subs" identifier . field_identifier)) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "di.subs = (demangle_component **)((long)&di + lVar3 + lVar2);" (assignment_expression "di.subs = (demangle_component **)((long)&di + lVar3 + lVar2)" (field_expression "di.subs" identifier . field_identifier) = (cast_expression "(demangle_component **)((long)&di + lVar3 + lVar2)" ( (type_descriptor "demangle_component **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)&di + lVar3 + lVar2)" ( (binary_expression "(long)&di + lVar3 + lVar2" (binary_expression "(long)&di + lVar3" (cast_expression "(long)&di" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&di" & identifier)) + identifier) + identifier) )))) ;) (expression_statement "di.next_comp = 0;" (assignment_expression "di.next_comp = 0" (field_expression "di.next_comp" identifier . field_identifier) = number_literal) ;) (expression_statement "di.next_sub = 0;" (assignment_expression "di.next_sub = 0" (field_expression "di.next_sub" identifier . field_identifier) = number_literal) ;) (expression_statement "di.last_name = (demangle_component *)0x0;" (assignment_expression "di.last_name = (demangle_component *)0x0" (field_expression "di.last_name" identifier . field_identifier) = (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "di.expansion = 0;" (assignment_expression "di.expansion = 0" (field_expression "di.expansion" identifier . field_identifier) = number_literal) ;) (expression_statement "di.is_expression = 0;" (assignment_expression "di.is_expression = 0" (field_expression "di.is_expression" identifier . field_identifier) = number_literal) ;) (expression_statement "di.is_conversion = 0;" (assignment_expression "di.is_conversion = 0" (field_expression "di.is_conversion" identifier . field_identifier) = number_literal) ;) (expression_statement "di.s = mangled;" (assignment_expression "di.s = mangled" (field_expression "di.s" identifier . field_identifier) = identifier) ;) (expression_statement "di.n = mangled;" (assignment_expression "di.n = mangled" (field_expression "di.n" identifier . field_identifier) = identifier) ;) (expression_statement "*(undefined8 *)((long)&pdStack_90 + lVar3 + lVar2) = 0x2d2814;" (assignment_expression "*(undefined8 *)((long)&pdStack_90 + lVar3 + lVar2) = 0x2d2814" (pointer_expression "*(undefined8 *)((long)&pdStack_90 + lVar3 + lVar2)" * (cast_expression "(undefined8 *)((long)&pdStack_90 + lVar3 + lVar2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pdStack_90 + lVar3 + lVar2)" ( (binary_expression "(long)&pdStack_90 + lVar3 + lVar2" (binary_expression "(long)&pdStack_90 + lVar3" (cast_expression "(long)&pdStack_90" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pdStack_90" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "pdVar5 = cplus_demangle_mangled_name(&di,1);" (assignment_expression "pdVar5 = cplus_demangle_mangled_name(&di,1)" identifier = (call_expression "cplus_demangle_mangled_name(&di,1)" identifier (argument_list "(&di,1)" ( (pointer_expression "&di" & identifier) , number_literal )))) ;) (if_statement "if (pdVar5 != (demangle_component *)0x0) {\n    dVar1 = pdVar5->type;\n    while (dVar1 < DEMANGLE_COMPONENT_VTABLE) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }\n      if (pdVar5 == (demangle_component *)0x0) {\nLAB_002d283c:\n        return (int)pdVar5;\n      }\n      dVar1 = pdVar5->type;\n    }\n  }" if (parenthesized_expression "(pdVar5 != (demangle_component *)0x0)" ( (binary_expression "pdVar5 != (demangle_component *)0x0" identifier != (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    dVar1 = pdVar5->type;\n    while (dVar1 < DEMANGLE_COMPONENT_VTABLE) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }\n      if (pdVar5 == (demangle_component *)0x0) {\nLAB_002d283c:\n        return (int)pdVar5;\n      }\n      dVar1 = pdVar5->type;\n    }\n  }" { (expression_statement "dVar1 = pdVar5->type;" (assignment_expression "dVar1 = pdVar5->type" identifier = (field_expression "pdVar5->type" identifier -> field_identifier)) ;) (while_statement "while (dVar1 < DEMANGLE_COMPONENT_VTABLE) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }\n      if (pdVar5 == (demangle_component *)0x0) {\nLAB_002d283c:\n        return (int)pdVar5;\n      }\n      dVar1 = pdVar5->type;\n    }" while (parenthesized_expression "(dVar1 < DEMANGLE_COMPONENT_VTABLE)" ( (binary_expression "dVar1 < DEMANGLE_COMPONENT_VTABLE" identifier < identifier) )) (compound_statement "{\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }\n      if (pdVar5 == (demangle_component *)0x0) {\nLAB_002d283c:\n        return (int)pdVar5;\n      }\n      dVar1 = pdVar5->type;\n    }" { (switch_statement "switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]) {\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }" switch (parenthesized_expression "((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type])" ( (binary_expression "(long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]" (cast_expression "(long)&switchD_002d282e" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&switchD_002d282e" & identifier)) (ERROR "::switchdataD_0038f428" : : identifier) + (cast_expression "(long)(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "(&switchD_002d282e::switchdataD_0038f428)[pdVar5->type]" (parenthesized_expression "(&switchD_002d282e::switchdataD_0038f428)" ( (ERROR "&switchD_002d282e::" (pointer_expression "&switchD_002d282e" & identifier) : :) identifier )) [ (field_expression "pdVar5->type" identifier -> field_identifier) ])))) )) (compound_statement "{\n      case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;\n      case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;\n      case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;\n      default:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;\n      }" { (case_statement "case 0x2d2830:\n        *dtor_kind = (pdVar5->u).s_extended_operator.args;\n        pdVar5 = (demangle_component *)0x1;\n        goto LAB_002d283c;" case number_literal : (expression_statement "*dtor_kind = (pdVar5->u).s_extended_operator.args;" (assignment_expression "*dtor_kind = (pdVar5->u).s_extended_operator.args" (pointer_expression "*dtor_kind" * identifier) = (field_expression "(pdVar5->u).s_extended_operator.args" (field_expression "(pdVar5->u).s_extended_operator" (parenthesized_expression "(pdVar5->u)" ( (field_expression "pdVar5->u" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "pdVar5 = (demangle_component *)0x1;" (assignment_expression "pdVar5 = (demangle_component *)0x1" identifier = (cast_expression "(demangle_component *)0x1" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_002d283c;" goto statement_identifier ;)) (case_statement "case 0x2d2850:\n        *ctor_kind = (pdVar5->u).s_extended_operator.args;\n        return 1;" case number_literal : (expression_statement "*ctor_kind = (pdVar5->u).s_extended_operator.args;" (assignment_expression "*ctor_kind = (pdVar5->u).s_extended_operator.args" (pointer_expression "*ctor_kind" * identifier) = (field_expression "(pdVar5->u).s_extended_operator.args" (field_expression "(pdVar5->u).s_extended_operator" (parenthesized_expression "(pdVar5->u)" ( (field_expression "pdVar5->u" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (return_statement "return 1;" return number_literal ;)) (case_statement "case 0x2d2870:\n        pdVar5 = (pdVar5->u).s_fixed.length;\n        break;" case number_literal : (expression_statement "pdVar5 = (pdVar5->u).s_fixed.length;" (assignment_expression "pdVar5 = (pdVar5->u).s_fixed.length" identifier = (field_expression "(pdVar5->u).s_fixed.length" (field_expression "(pdVar5->u).s_fixed" (parenthesized_expression "(pdVar5->u)" ( (field_expression "pdVar5->u" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (break_statement "break;" break ;)) (case_statement "default:\n        goto switchD_002d282e_caseD_2d287e;" default : (goto_statement "goto switchD_002d282e_caseD_2d287e;" goto statement_identifier ;)) (case_statement "case 0x2d2890:\n        pdVar5 = (pdVar5->u).s_extended_operator.name;" case number_literal : (expression_statement "pdVar5 = (pdVar5->u).s_extended_operator.name;" (assignment_expression "pdVar5 = (pdVar5->u).s_extended_operator.name" identifier = (field_expression "(pdVar5->u).s_extended_operator.name" (field_expression "(pdVar5->u).s_extended_operator" (parenthesized_expression "(pdVar5->u)" ( (field_expression "pdVar5->u" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;)) })) (if_statement "if (pdVar5 == (demangle_component *)0x0) {\nLAB_002d283c:\n        return (int)pdVar5;\n      }" if (parenthesized_expression "(pdVar5 == (demangle_component *)0x0)" ( (binary_expression "pdVar5 == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_002d283c:\n        return (int)pdVar5;\n      }" { (labeled_statement "LAB_002d283c:\n        return (int)pdVar5;" statement_identifier : (return_statement "return (int)pdVar5;" return (cast_expression "(int)pdVar5" ( (type_descriptor "int" primitive_type) ) identifier) ;)) })) (expression_statement "dVar1 = pdVar5->type;" (assignment_expression "dVar1 = pdVar5->type" identifier = (field_expression "pdVar5->type" identifier -> field_identifier)) ;) })) })) (labeled_statement "switchD_002d282e_caseD_2d287e:\n  return 0;" statement_identifier : (return_statement "return 0;" return number_literal ;)) })))
(translation_unit "undefined8 FUN_002d2770(char *param_1,uint *param_2,uint *param_3)\n\n{\n  uint uVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  uint *puVar5;\n  undefined8 uStack_90;\n  char *local_88 [2];\n  undefined4 local_78;\n  char *local_70;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined1 *local_58;\n  undefined4 local_50;\n  int local_4c;\n  undefined8 local_48;\n  undefined8 local_40;\n  undefined4 local_38;\n  \n  *param_2 = 0;\n  *param_3 = 0;\n  uStack_90 = 0x2d2797;\n  sVar4 = strlen(param_1);\n  local_4c = (int)sVar4;\n  local_5c = local_4c * 2;\n  local_88[1] = param_1 + sVar4;\n  local_78 = 0x4000;\n  lVar2 = (long)local_5c * -0x18;\n  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);\n  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);\n  local_60 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_40 = 0;\n  local_38 = 0;\n  local_88[0] = param_1;\n  local_70 = param_1;\n  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;\n  puVar5 = (uint *)FUN_002d19a0(local_88,1);\n  if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_002d2770(char *param_1,uint *param_2,uint *param_3)\n\n{\n  uint uVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  uint *puVar5;\n  undefined8 uStack_90;\n  char *local_88 [2];\n  undefined4 local_78;\n  char *local_70;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined1 *local_58;\n  undefined4 local_50;\n  int local_4c;\n  undefined8 local_48;\n  undefined8 local_40;\n  undefined4 local_38;\n  \n  *param_2 = 0;\n  *param_3 = 0;\n  uStack_90 = 0x2d2797;\n  sVar4 = strlen(param_1);\n  local_4c = (int)sVar4;\n  local_5c = local_4c * 2;\n  local_88[1] = param_1 + sVar4;\n  local_78 = 0x4000;\n  lVar2 = (long)local_5c * -0x18;\n  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);\n  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);\n  local_60 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_40 = 0;\n  local_38 = 0;\n  local_88[0] = param_1;\n  local_70 = param_1;\n  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;\n  puVar5 = (uint *)FUN_002d19a0(local_88,1);\n  if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}" type_identifier (function_declarator "FUN_002d2770(char *param_1,uint *param_2,uint *param_3)" identifier (parameter_list "(char *param_1,uint *param_2,uint *param_3)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  uint *puVar5;\n  undefined8 uStack_90;\n  char *local_88 [2];\n  undefined4 local_78;\n  char *local_70;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined1 *local_58;\n  undefined4 local_50;\n  int local_4c;\n  undefined8 local_48;\n  undefined8 local_40;\n  undefined4 local_38;\n  \n  *param_2 = 0;\n  *param_3 = 0;\n  uStack_90 = 0x2d2797;\n  sVar4 = strlen(param_1);\n  local_4c = (int)sVar4;\n  local_5c = local_4c * 2;\n  local_88[1] = param_1 + sVar4;\n  local_78 = 0x4000;\n  lVar2 = (long)local_5c * -0x18;\n  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);\n  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);\n  local_60 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_40 = 0;\n  local_38 = 0;\n  local_88[0] = param_1;\n  local_70 = param_1;\n  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;\n  puVar5 = (uint *)FUN_002d19a0(local_88,1);\n  if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined8 uStack_90;" type_identifier identifier ;) (declaration "char *local_88 [2];" primitive_type (pointer_declarator "*local_88 [2]" * (array_declarator "local_88 [2]" identifier [ number_literal ])) ;) (declaration "undefined4 local_78;" type_identifier identifier ;) (declaration "char *local_70;" primitive_type (pointer_declarator "*local_70" * identifier) ;) (declaration "undefined1 *local_68;" type_identifier (pointer_declarator "*local_68" * identifier) ;) (declaration "undefined4 local_60;" type_identifier identifier ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "undefined4 local_50;" type_identifier identifier ;) (declaration "int local_4c;" primitive_type identifier ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (declaration "undefined8 local_40;" type_identifier identifier ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" * identifier) = number_literal) ;) (expression_statement "uStack_90 = 0x2d2797;" (assignment_expression "uStack_90 = 0x2d2797" identifier = number_literal) ;) (expression_statement "sVar4 = strlen(param_1);" (assignment_expression "sVar4 = strlen(param_1)" identifier = (call_expression "strlen(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "local_4c = (int)sVar4;" (assignment_expression "local_4c = (int)sVar4" identifier = (cast_expression "(int)sVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "local_5c = local_4c * 2;" (assignment_expression "local_5c = local_4c * 2" identifier = (binary_expression "local_4c * 2" identifier * number_literal)) ;) (expression_statement "local_88[1] = param_1 + sVar4;" (assignment_expression "local_88[1] = param_1 + sVar4" (subscript_expression "local_88[1]" identifier [ number_literal ]) = (binary_expression "param_1 + sVar4" identifier + identifier)) ;) (expression_statement "local_78 = 0x4000;" (assignment_expression "local_78 = 0x4000" identifier = number_literal) ;) (expression_statement "lVar2 = (long)local_5c * -0x18;" (assignment_expression "lVar2 = (long)local_5c * -0x18" identifier = (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 = (undefined1 *)(local_88 + (long)local_5c * -3);" (assignment_expression "local_68 = (undefined1 *)(local_88 + (long)local_5c * -3)" identifier = (cast_expression "(undefined1 *)(local_88 + (long)local_5c * -3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_88 + (long)local_5c * -3)" ( (binary_expression "local_88 + (long)local_5c * -3" identifier + (binary_expression "(long)local_5c * -3" (cast_expression "(long)local_5c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) )))) ;) (expression_statement "lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);" (assignment_expression "lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" identifier = (unary_expression "-((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" - (parenthesized_expression "((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" ( (binary_expression "(long)local_4c * 8 + 0xfU & 0xfffffffffffffff0" (binary_expression "(long)local_4c * 8 + 0xfU" (binary_expression "(long)local_4c * 8" (cast_expression "(long)local_4c" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + number_literal) & number_literal) )))) ;) (expression_statement "local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);" (assignment_expression "local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2)" identifier = (cast_expression "(undefined1 *)((long)local_88 + lVar3 + lVar2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)local_88 + lVar3 + lVar2)" ( (binary_expression "(long)local_88 + lVar3 + lVar2" (binary_expression "(long)local_88 + lVar3" (cast_expression "(long)local_88" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" identifier = number_literal) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" identifier = number_literal) ;) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "local_38 = 0;" (assignment_expression "local_38 = 0" identifier = number_literal) ;) (expression_statement "local_88[0] = param_1;" (assignment_expression "local_88[0] = param_1" (subscript_expression "local_88[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "local_70 = param_1;" (assignment_expression "local_70 = param_1" identifier = identifier) ;) (expression_statement "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;" (assignment_expression "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814" (pointer_expression "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2)" * (cast_expression "(undefined8 *)((long)&uStack_90 + lVar3 + lVar2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&uStack_90 + lVar3 + lVar2)" ( (binary_expression "(long)&uStack_90 + lVar3 + lVar2" (binary_expression "(long)&uStack_90 + lVar3" (cast_expression "(long)&uStack_90" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&uStack_90" & identifier)) + identifier) + identifier) )))) = number_literal) ;) (expression_statement "puVar5 = (uint *)FUN_002d19a0(local_88,1);" (assignment_expression "puVar5 = (uint *)FUN_002d19a0(local_88,1)" identifier = (cast_expression "(uint *)FUN_002d19a0(local_88,1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002d19a0(local_88,1)" identifier (argument_list "(local_88,1)" ( identifier , number_literal ))))) ;) (if_statement "if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }" if (parenthesized_expression "(puVar5 != (uint *)0x0)" ( (binary_expression "puVar5 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }" { (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (while_statement "while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }" while (parenthesized_expression "(uVar1 < 9)" ( (binary_expression "uVar1 < 9" identifier < number_literal) )) (compound_statement "{\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }" { (switch_statement "switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }" switch (parenthesized_expression "((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5])" ( (binary_expression "(long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" (cast_expression "(long)&switchD_002d282e" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&switchD_002d282e" & identifier)) (ERROR "::switchdataD_0038f428" : : identifier) + (cast_expression "(long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" (parenthesized_expression "(&switchD_002d282e::switchdataD_0038f428)" ( (ERROR "&switchD_002d282e::" (pointer_expression "&switchD_002d282e" & identifier) : :) identifier )) [ (pointer_expression "*puVar5" * identifier) ])))) )) (compound_statement "{\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }" { (case_statement "case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;" case number_literal : (expression_statement "*param_3 = puVar5[2];" (assignment_expression "*param_3 = puVar5[2]" (pointer_expression "*param_3" * identifier) = (subscript_expression "puVar5[2]" identifier [ number_literal ])) ;) (return_statement "return 1;" return number_literal ;)) (case_statement "case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;" case number_literal : (expression_statement "*param_2 = puVar5[2];" (assignment_expression "*param_2 = puVar5[2]" (pointer_expression "*param_2" * identifier) = (subscript_expression "puVar5[2]" identifier [ number_literal ])) ;) (return_statement "return 1;" return number_literal ;)) (case_statement "case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;" case number_literal : (expression_statement "puVar5 = *(uint **)(puVar5 + 2);" (assignment_expression "puVar5 = *(uint **)(puVar5 + 2)" identifier = (pointer_expression "*(uint **)(puVar5 + 2)" * (cast_expression "(uint **)(puVar5 + 2)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5 + 2)" ( (binary_expression "puVar5 + 2" identifier + number_literal) ))))) ;) (break_statement "break;" break ;)) (case_statement "case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;" case number_literal : (goto_statement "goto switchD_002d282e_caseD_2d287e;" goto statement_identifier ;)) (case_statement "case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);" case number_literal : (expression_statement "puVar5 = *(uint **)(puVar5 + 4);" (assignment_expression "puVar5 = *(uint **)(puVar5 + 4)" identifier = (pointer_expression "*(uint **)(puVar5 + 4)" * (cast_expression "(uint **)(puVar5 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) ))))) ;)) })) (if_statement "if (puVar5 == (uint *)0x0) {\n        return 0;\n      }" if (parenthesized_expression "(puVar5 == (uint *)0x0)" ( (binary_expression "puVar5 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) })) })) (labeled_statement "switchD_002d282e_caseD_2d287e:\n  return 0;" statement_identifier : (return_statement "return 0;" return number_literal ;)) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (unary_expression - (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT) + LIT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (switch_statement switch (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) (ERROR : : IDENT) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression (parenthesized_expression ( (ERROR (pointer_expression & IDENT) : :) IDENT )) [ (pointer_expression * IDENT) ])))) )) (compound_statement { (case_statement case LIT : (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (return_statement return LIT ;)) (case_statement case LIT : (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (return_statement return LIT ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (break_statement break ;)) (case_statement case LIT : (goto_statement goto statement_identifier ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) })) (labeled_statement statement_identifier : (return_statement return LIT ;)) })))
(function_definition "undefined8 FUN_002d2770(char *param_1,uint *param_2,uint *param_3)\n\n{\n  uint uVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  uint *puVar5;\n  undefined8 uStack_90;\n  char *local_88 [2];\n  undefined4 local_78;\n  char *local_70;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined1 *local_58;\n  undefined4 local_50;\n  int local_4c;\n  undefined8 local_48;\n  undefined8 local_40;\n  undefined4 local_38;\n  \n  *param_2 = 0;\n  *param_3 = 0;\n  uStack_90 = 0x2d2797;\n  sVar4 = strlen(param_1);\n  local_4c = (int)sVar4;\n  local_5c = local_4c * 2;\n  local_88[1] = param_1 + sVar4;\n  local_78 = 0x4000;\n  lVar2 = (long)local_5c * -0x18;\n  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);\n  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);\n  local_60 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_40 = 0;\n  local_38 = 0;\n  local_88[0] = param_1;\n  local_70 = param_1;\n  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;\n  puVar5 = (uint *)FUN_002d19a0(local_88,1);\n  if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_002d2770(char *param_1,uint *param_2,uint *param_3)" (identifier "FUN_002d2770") (parameter_list "(char *param_1,uint *param_2,uint *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") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  uint uVar1;\n  long lVar2;\n  long lVar3;\n  size_t sVar4;\n  uint *puVar5;\n  undefined8 uStack_90;\n  char *local_88 [2];\n  undefined4 local_78;\n  char *local_70;\n  undefined1 *local_68;\n  undefined4 local_60;\n  int local_5c;\n  undefined1 *local_58;\n  undefined4 local_50;\n  int local_4c;\n  undefined8 local_48;\n  undefined8 local_40;\n  undefined4 local_38;\n  \n  *param_2 = 0;\n  *param_3 = 0;\n  uStack_90 = 0x2d2797;\n  sVar4 = strlen(param_1);\n  local_4c = (int)sVar4;\n  local_5c = local_4c * 2;\n  local_88[1] = param_1 + sVar4;\n  local_78 = 0x4000;\n  lVar2 = (long)local_5c * -0x18;\n  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);\n  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);\n  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);\n  local_60 = 0;\n  local_50 = 0;\n  local_48 = 0;\n  local_40 = 0;\n  local_38 = 0;\n  local_88[0] = param_1;\n  local_70 = param_1;\n  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;\n  puVar5 = (uint *)FUN_002d19a0(local_88,1);\n  if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }\nswitchD_002d282e_caseD_2d287e:\n  return 0;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "size_t sVar4;" (primitive_type "size_t") (identifier "sVar4") (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "undefined8 uStack_90;" (type_identifier "undefined8") (identifier "uStack_90") (; ";")) (declaration "char *local_88 [2];" (primitive_type "char") (pointer_declarator "*local_88 [2]" (* "*") (array_declarator "local_88 [2]" (identifier "local_88") ([ "[") (number_literal "2") (] "]"))) (; ";")) (declaration "undefined4 local_78;" (type_identifier "undefined4") (identifier "local_78") (; ";")) (declaration "char *local_70;" (primitive_type "char") (pointer_declarator "*local_70" (* "*") (identifier "local_70")) (; ";")) (declaration "undefined1 *local_68;" (type_identifier "undefined1") (pointer_declarator "*local_68" (* "*") (identifier "local_68")) (; ";")) (declaration "undefined4 local_60;" (type_identifier "undefined4") (identifier "local_60") (; ";")) (declaration "int local_5c;" (primitive_type "int") (identifier "local_5c") (; ";")) (declaration "undefined1 *local_58;" (type_identifier "undefined1") (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (declaration "undefined4 local_50;" (type_identifier "undefined4") (identifier "local_50") (; ";")) (declaration "int local_4c;" (primitive_type "int") (identifier "local_4c") (; ";")) (declaration "undefined8 local_48;" (type_identifier "undefined8") (identifier "local_48") (; ";")) (declaration "undefined8 local_40;" (type_identifier "undefined8") (identifier "local_40") (; ";")) (declaration "undefined4 local_38;" (type_identifier "undefined4") (identifier "local_38") (; ";")) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uStack_90 = 0x2d2797;" (assignment_expression "uStack_90 = 0x2d2797" (identifier "uStack_90") (= "=") (number_literal "0x2d2797")) (; ";")) (expression_statement "sVar4 = strlen(param_1);" (assignment_expression "sVar4 = strlen(param_1)" (identifier "sVar4") (= "=") (call_expression "strlen(param_1)" (identifier "strlen") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "local_4c = (int)sVar4;" (assignment_expression "local_4c = (int)sVar4" (identifier "local_4c") (= "=") (cast_expression "(int)sVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar4"))) (; ";")) (expression_statement "local_5c = local_4c * 2;" (assignment_expression "local_5c = local_4c * 2" (identifier "local_5c") (= "=") (binary_expression "local_4c * 2" (identifier "local_4c") (* "*") (number_literal "2"))) (; ";")) (expression_statement "local_88[1] = param_1 + sVar4;" (assignment_expression "local_88[1] = param_1 + sVar4" (subscript_expression "local_88[1]" (identifier "local_88") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "param_1 + sVar4" (identifier "param_1") (+ "+") (identifier "sVar4"))) (; ";")) (expression_statement "local_78 = 0x4000;" (assignment_expression "local_78 = 0x4000" (identifier "local_78") (= "=") (number_literal "0x4000")) (; ";")) (expression_statement "lVar2 = (long)local_5c * -0x18;" (assignment_expression "lVar2 = (long)local_5c * -0x18" (identifier "lVar2") (= "=") (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 = (undefined1 *)(local_88 + (long)local_5c * -3);" (assignment_expression "local_68 = (undefined1 *)(local_88 + (long)local_5c * -3)" (identifier "local_68") (= "=") (cast_expression "(undefined1 *)(local_88 + (long)local_5c * -3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_88 + (long)local_5c * -3)" (( "(") (binary_expression "local_88 + (long)local_5c * -3" (identifier "local_88") (+ "+") (binary_expression "(long)local_5c * -3" (cast_expression "(long)local_5c" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_5c")) (* "*") (number_literal "-3"))) () ")")))) (; ";")) (expression_statement "lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);" (assignment_expression "lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" (identifier "lVar3") (= "=") (unary_expression "-((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" (- "-") (parenthesized_expression "((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0)" (( "(") (binary_expression "(long)local_4c * 8 + 0xfU & 0xfffffffffffffff0" (binary_expression "(long)local_4c * 8 + 0xfU" (binary_expression "(long)local_4c * 8" (cast_expression "(long)local_4c" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_4c")) (* "*") (number_literal "8")) (+ "+") (number_literal "0xfU")) (& "&") (number_literal "0xfffffffffffffff0")) () ")")))) (; ";")) (expression_statement "local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);" (assignment_expression "local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2)" (identifier "local_58") (= "=") (cast_expression "(undefined1 *)((long)local_88 + lVar3 + lVar2)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)local_88 + lVar3 + lVar2)" (( "(") (binary_expression "(long)local_88 + lVar3 + lVar2" (binary_expression "(long)local_88 + lVar3" (cast_expression "(long)local_88" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_88")) (+ "+") (identifier "lVar3")) (+ "+") (identifier "lVar2")) () ")")))) (; ";")) (expression_statement "local_60 = 0;" (assignment_expression "local_60 = 0" (identifier "local_60") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" (identifier "local_50") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_48 = 0;" (assignment_expression "local_48 = 0" (identifier "local_48") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" (identifier "local_40") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_38 = 0;" (assignment_expression "local_38 = 0" (identifier "local_38") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_88[0] = param_1;" (assignment_expression "local_88[0] = param_1" (subscript_expression "local_88[0]" (identifier "local_88") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "param_1")) (; ";")) (expression_statement "local_70 = param_1;" (assignment_expression "local_70 = param_1" (identifier "local_70") (= "=") (identifier "param_1")) (; ";")) (expression_statement "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;" (assignment_expression "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814" (pointer_expression "*(undefined8 *)((long)&uStack_90 + lVar3 + lVar2)" (* "*") (cast_expression "(undefined8 *)((long)&uStack_90 + lVar3 + lVar2)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&uStack_90 + lVar3 + lVar2)" (( "(") (binary_expression "(long)&uStack_90 + lVar3 + lVar2" (binary_expression "(long)&uStack_90 + lVar3" (cast_expression "(long)&uStack_90" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&uStack_90" (& "&") (identifier "uStack_90"))) (+ "+") (identifier "lVar3")) (+ "+") (identifier "lVar2")) () ")")))) (= "=") (number_literal "0x2d2814")) (; ";")) (expression_statement "puVar5 = (uint *)FUN_002d19a0(local_88,1);" (assignment_expression "puVar5 = (uint *)FUN_002d19a0(local_88,1)" (identifier "puVar5") (= "=") (cast_expression "(uint *)FUN_002d19a0(local_88,1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002d19a0(local_88,1)" (identifier "FUN_002d19a0") (argument_list "(local_88,1)" (( "(") (identifier "local_88") (, ",") (number_literal "1") () ")"))))) (; ";")) (if_statement "if (puVar5 != (uint *)0x0) {\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }" (if "if") (parenthesized_expression "(puVar5 != (uint *)0x0)" (( "(") (binary_expression "puVar5 != (uint *)0x0" (identifier "puVar5") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    uVar1 = *puVar5;\n    while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }\n  }" ({ "{") (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" (identifier "uVar1") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (while_statement "while (uVar1 < 9) {\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }" (while "while") (parenthesized_expression "(uVar1 < 9)" (( "(") (binary_expression "uVar1 < 9" (identifier "uVar1") (< "<") (number_literal "9")) () ")")) (compound_statement "{\n      switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }\n      if (puVar5 == (uint *)0x0) {\n        return 0;\n      }\n      uVar1 = *puVar5;\n    }" ({ "{") (switch_statement "switch((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }" (switch "switch") (parenthesized_expression "((long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5])" (( "(") (binary_expression "(long)&switchD_002d282e::switchdataD_0038f428 +\n             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" (cast_expression "(long)&switchD_002d282e" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&switchD_002d282e" (& "&") (identifier "switchD_002d282e"))) (ERROR "::switchdataD_0038f428" (: ":") (: ":") (identifier "switchdataD_0038f428")) (+ "+") (cast_expression "(long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "(&switchD_002d282e::switchdataD_0038f428)[*puVar5]" (parenthesized_expression "(&switchD_002d282e::switchdataD_0038f428)" (( "(") (ERROR "&switchD_002d282e::" (pointer_expression "&switchD_002d282e" (& "&") (identifier "switchD_002d282e")) (: ":") (: ":")) (identifier "switchdataD_0038f428") () ")")) ([ "[") (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (] "]"))))) () ")")) (compound_statement "{\n      case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;\n      case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;\n      case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;\n      case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;\n      case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);\n      }" ({ "{") (case_statement "case 0x2d2830:\n        *param_3 = puVar5[2];\n        return 1;" (case "case") (number_literal "0x2d2830") (: ":") (expression_statement "*param_3 = puVar5[2];" (assignment_expression "*param_3 = puVar5[2]" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";"))) (case_statement "case 0x2d2850:\n        *param_2 = puVar5[2];\n        return 1;" (case "case") (number_literal "0x2d2850") (: ":") (expression_statement "*param_2 = puVar5[2];" (assignment_expression "*param_2 = puVar5[2]" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";"))) (case_statement "case 0x2d2870:\n        puVar5 = *(uint **)(puVar5 + 2);\n        break;" (case "case") (number_literal "0x2d2870") (: ":") (expression_statement "puVar5 = *(uint **)(puVar5 + 2);" (assignment_expression "puVar5 = *(uint **)(puVar5 + 2)" (identifier "puVar5") (= "=") (pointer_expression "*(uint **)(puVar5 + 2)" (* "*") (cast_expression "(uint **)(puVar5 + 2)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar5 + 2)" (( "(") (binary_expression "puVar5 + 2" (identifier "puVar5") (+ "+") (number_literal "2")) () ")"))))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0x2d287e:\n        goto switchD_002d282e_caseD_2d287e;" (case "case") (number_literal "0x2d287e") (: ":") (goto_statement "goto switchD_002d282e_caseD_2d287e;" (goto "goto") (statement_identifier "switchD_002d282e_caseD_2d287e") (; ";"))) (case_statement "case 0x2d2890:\n        puVar5 = *(uint **)(puVar5 + 4);" (case "case") (number_literal "0x2d2890") (: ":") (expression_statement "puVar5 = *(uint **)(puVar5 + 4);" (assignment_expression "puVar5 = *(uint **)(puVar5 + 4)" (identifier "puVar5") (= "=") (pointer_expression "*(uint **)(puVar5 + 4)" (* "*") (cast_expression "(uint **)(puVar5 + 4)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar5 + 4)" (( "(") (binary_expression "puVar5 + 4" (identifier "puVar5") (+ "+") (number_literal "4")) () ")"))))) (; ";"))) (} "}"))) (if_statement "if (puVar5 == (uint *)0x0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(puVar5 == (uint *)0x0)" (( "(") (binary_expression "puVar5 == (uint *)0x0" (identifier "puVar5") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar1 = *puVar5;" (assignment_expression "uVar1 = *puVar5" (identifier "uVar1") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (} "}"))) (} "}"))) (labeled_statement "switchD_002d282e_caseD_2d287e:\n  return 0;" (statement_identifier "switchD_002d282e_caseD_2d287e") (: ":") (return_statement "return 0;" (return "return") (number_literal "0") (; ";"))) (} "}")))

int function_1(char *var_2,type_1 *ctor_kind,type_2 *dtor_kind)

{
  type_3 var_8;
  long var_4;
  long var_5;
  size_t var_3;
  type_4 *var_7;
  type_4 *pdStack_90;
  type_5 di;
  
  *ctor_kind = 0;
  *dtor_kind = 0;
  pdStack_90 = (type_4 *)0x2d2797;
  var_3 = var_1(var_2);
  di.num_subs = (int)var_3;
  di.num_comps = di.num_subs * 2;
  di.send = var_2 + var_3;
  di.options = 0x4000;
  var_4 = (long)di.num_comps * -0x18;
  di.comps = (type_4 *)((long)&di + var_4);
  var_5 = -((long)di.num_subs * 8 + 0xfU & 0xfffffffffffffff0);
  di.subs = (type_4 **)((long)&di + var_5 + var_4);
  di.next_comp = 0;
  di.next_sub = 0;
  di.last_name = (type_4 *)0x0;
  di.expansion = 0;
  di.is_expression = 0;
  di.is_conversion = 0;
  di.s = var_2;
  di.n = var_2;
  *(type_6 *)((long)&pdStack_90 + var_5 + var_4) = 0x2d2814;
  var_7 = var_6(&di,1);
  if (var_7 != (type_4 *)0x0) {
    var_8 = var_7->type;
    while (var_8 < var_9) {
      switch((long)&switchD_002d282e::switchdataD_0038f428 +
             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[var_7->type]) {
      case 0x2d2830:
        *dtor_kind = (var_7->u).s_extended_operator.args;
        var_7 = (type_4 *)0x1;
        goto LAB_002d283c;
      case 0x2d2850:
        *ctor_kind = (var_7->u).s_extended_operator.args;
        return 1;
      case 0x2d2870:
        var_7 = (var_7->u).s_fixed.length;
        break;
      default:
        goto switchD_002d282e_caseD_2d287e;
      case 0x2d2890:
        var_7 = (var_7->u).s_extended_operator.name;
      }
      if (var_7 == (type_4 *)0x0) {
LAB_002d283c:
        return (int)var_7;
      }
      var_8 = var_7->type;
    }
  }
switchD_002d282e_caseD_2d287e:
  return 0;
}


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

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

{
  uint uVar1;
  long lVar2;
  long lVar3;
  size_t sVar4;
  uint *puVar5;
  undefined8 uStack_90;
  char *local_88 [2];
  undefined4 local_78;
  char *local_70;
  undefined1 *local_68;
  undefined4 local_60;
  int local_5c;
  undefined1 *local_58;
  undefined4 local_50;
  int local_4c;
  undefined8 local_48;
  undefined8 local_40;
  undefined4 local_38;
  
  *param_2 = 0;
  *param_3 = 0;
  uStack_90 = 0x2d2797;
  sVar4 = strlen(param_1);
  local_4c = (int)sVar4;
  local_5c = local_4c * 2;
  local_88[1] = param_1 + sVar4;
  local_78 = 0x4000;
  lVar2 = (long)local_5c * -0x18;
  local_68 = (undefined1 *)(local_88 + (long)local_5c * -3);
  lVar3 = -((long)local_4c * 8 + 0xfU & 0xfffffffffffffff0);
  local_58 = (undefined1 *)((long)local_88 + lVar3 + lVar2);
  local_60 = 0;
  local_50 = 0;
  local_48 = 0;
  local_40 = 0;
  local_38 = 0;
  local_88[0] = param_1;
  local_70 = param_1;
  *(undefined8 *)((long)&uStack_90 + lVar3 + lVar2) = 0x2d2814;
  puVar5 = (uint *)FUN_002d19a0(local_88,1);
  if (puVar5 != (uint *)0x0) {
    uVar1 = *puVar5;
    while (uVar1 < 9) {
      switch((long)&switchD_002d282e::switchdataD_0038f428 +
             (long)(int)(&switchD_002d282e::switchdataD_0038f428)[*puVar5]) {
      case 0x2d2830:
        *param_3 = puVar5[2];
        return 1;
      case 0x2d2850:
        *param_2 = puVar5[2];
        return 1;
      case 0x2d2870:
        puVar5 = *(uint **)(puVar5 + 2);
        break;
      case 0x2d287e:
        goto switchD_002d282e_caseD_2d287e;
      case 0x2d2890:
        puVar5 = *(uint **)(puVar5 + 4);
      }
      if (puVar5 == (uint *)0x0) {
        return 0;
      }
      uVar1 = *puVar5;
    }
  }
switchD_002d282e_caseD_2d287e:
  return 0;
}

