
demangle_component * d_expr_primary(d_info *di)

{
  char cVar1;
  char *pcVar2;
  demangle_component *pdVar3;
  undefined1 uVar5;
  demangle_component *pdVar4;
  int iVar6;
  demangle_component_type type;
  demangle_component *right;
  demangle_component *pdVar7;
  
  pcVar2 = di->n;
  if (*pcVar2 != 'L') {
    return (demangle_component *)0x0;
  }
  di->n = pcVar2 + 1;
  if ((pcVar2[1] == '_') || (pcVar2[1] == 'Z')) {
    pdVar3 = cplus_demangle_mangled_name(di,0);
    pcVar2 = di->n;
    cVar1 = *pcVar2;
  }
  else {
    pdVar3 = cplus_demangle_type(di);
    if (pdVar3 == (demangle_component *)0x0) {
      return (demangle_component *)0x0;
    }
    if ((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&
       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)) {
      di->expansion = di->expansion - pdVar4->d_printing;
    }
    pdVar7 = (demangle_component *)di->n;
    uVar5 = *(undefined1 *)&pdVar7->type;
    pdVar4 = (demangle_component *)((int)&pdVar7->type + 1);
    if (uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)) {
      type = DEMANGLE_COMPONENT_LITERAL_NEG;
      di->n = (char *)pdVar4;
      uVar5 = *(byte *)((int)&pdVar7->type + 1);
    }
    else {
      type = DEMANGLE_COMPONENT_LITERAL;
      pdVar4 = pdVar7;
    }
    pdVar7 = pdVar4;
    if (uVar5 == DEMANGLE_COMPONENT_LAMBDA) {
      pdVar7 = (demangle_component *)0x0;
    }
    else {
      do {
        if (uVar5 == DEMANGLE_COMPONENT_NAME) {
          return (demangle_component *)0x0;
        }
        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);
        di->n = (char *)pdVar7;
        uVar5 = *(undefined1 *)&pdVar7->type;
      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);
      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);
    }
    iVar6 = di->next_comp;
    right = (demangle_component *)0x0;
    if (iVar6 < di->num_comps) {
      right = di->comps + iVar6;
      right->d_printing = 0;
      di->next_comp = iVar6 + 1;
      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {
        right = (demangle_component *)0x0;
      }
      else {
        right->d_printing = 0;
        right->type = DEMANGLE_COMPONENT_NAME;
        (right->u).s_fixed.length = pdVar4;
        (right->u).s_extended_operator.name = pdVar7;
      }
    }
    pdVar3 = d_make_comp(di,type,pdVar3,right);
    pcVar2 = di->n;
    cVar1 = *pcVar2;
  }
  if (cVar1 != 'E') {
    return (demangle_component *)0x0;
  }
  di->n = pcVar2 + 1;
  return pdVar3;
}



undefined4 FUN_0032498c(int param_1)

{
  char *pcVar1;
  undefined4 uVar2;
  int *piVar3;
  char cVar5;
  int iVar4;
  int iVar6;
  undefined4 *puVar7;
  char *pcVar8;
  
  pcVar1 = *(char **)(param_1 + 0xc);
  if (*pcVar1 != 'L') {
    return 0;
  }
  *(char **)(param_1 + 0xc) = pcVar1 + 1;
  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {
    uVar2 = cplus_demangle_mangled_name(param_1,0);
    pcVar1 = *(char **)(param_1 + 0xc);
    cVar5 = *pcVar1;
  }
  else {
    piVar3 = (int *)cplus_demangle_type();
    if (piVar3 == (int *)0x0) {
      return 0;
    }
    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {
      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);
    }
    pcVar8 = *(char **)(param_1 + 0xc);
    cVar5 = *pcVar8;
    pcVar1 = pcVar8 + 1;
    if (cVar5 == 'n') {
      uVar2 = 0x3d;
      *(char **)(param_1 + 0xc) = pcVar1;
      cVar5 = pcVar8[1];
    }
    else {
      uVar2 = 0x3c;
      pcVar1 = pcVar8;
    }
    pcVar8 = pcVar1;
    if (cVar5 == 'E') {
      iVar4 = 0;
    }
    else {
      do {
        if (cVar5 == '\0') {
          return 0;
        }
        pcVar8 = pcVar8 + 1;
        *(char **)(param_1 + 0xc) = pcVar8;
        cVar5 = *pcVar8;
      } while (cVar5 != 'E');
      iVar4 = (int)pcVar8 - (int)pcVar1;
    }
    iVar6 = *(int *)(param_1 + 0x14);
    puVar7 = (undefined4 *)0x0;
    if (iVar6 < *(int *)(param_1 + 0x18)) {
      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);
      puVar7[1] = 0;
      *(int *)(param_1 + 0x14) = iVar6 + 1;
      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {
        puVar7 = (undefined4 *)0x0;
      }
      else {
        puVar7[1] = 0;
        *puVar7 = 0;
        puVar7[2] = pcVar1;
        puVar7[3] = iVar4;
      }
    }
    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);
    pcVar1 = *(char **)(param_1 + 0xc);
    cVar5 = *pcVar1;
  }
  if (cVar5 != 'E') {
    return 0;
  }
  *(char **)(param_1 + 0xc) = pcVar1 + 1;
  return uVar2;
}


lui gp,0x1a
addiu gp,gp,0x48b4
addu gp,gp,t9
lw v0,0xc(a0)
li v1,0x4c
lb a1,0x0(v0)
bne a1,v1,0x00324b44
_nop
addiu sp,sp,-0x20
addiu a1,v0,0x1
li v1,0x5f
sw gp,0x10(sp)
sw s0,0x18(sp)
sw ra,0x1c(sp)
sw a1,0xc(a0)
lb v0,0x1(v0)
beq v0,v1,0x003249e0
_or s0,a0,zero
li v1,0x5a
bne v0,v1,0x00324a18
_lw t9,-0x41e8(gp)
lw t9,-0x41e0(gp)
or a1,zero,zero
bal 0x00324778
_or a0,s0,zero
li a0,0x45
lw v1,0xc(s0)
lb a1,0x0(v1)
bne a1,a0,0x00324afc
_lw ra,0x1c(sp)
addiu v1,v1,0x1
sw v1,0xc(s0)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x20
bal 0x00322090
_nop
beq v0,zero,0x00324af8
_lw gp,0x10(sp)
lw a0,0x0(v0)
li v1,0x27
beq a0,v1,0x00324b20
_nop
lw t0,0xc(s0)
li a0,0x6e
lb v1,0x0(t0)
beq v1,a0,0x00324b0c
_addiu a0,t0,0x1
li a1,0x3c
li a0,0x45
beq v1,a0,0x00324b54
_nop
beq v1,zero,0x00324af8
_li a3,0x45
b 0x00324a74
_addiu v1,t0,0x1
beq a0,zero,0x00324af8
_addiu v1,v1,0x1
sw v1,0xc(s0)
lb a0,0x0(v1)
bne a0,a3,0x00324a6c
_nop
subu v1,v1,t0
lw a0,0x14(s0)
lw a2,0x18(s0)
slt a2,a0,a2
beq a2,zero,0x00324ad0
_or a3,zero,zero
lw a3,0x10(s0)
sll a2,a0,0x4
addiu a0,a0,0x1
addu a3,a3,a2
sw zero,0x4(a3)
beq t0,zero,0x00324b4c
_sw a0,0x14(s0)
beq v1,zero,0x00324b4c
_nop
sw zero,0x4(a3)
sw zero,0x0(a3)
sw t0,0x8(a3)
sw v1,0xc(a3)
lw t9,-0x41f8(gp)
or a0,s0,zero
addiu t9,t9,-0x5860
bal 0x0031a7a0
_or a2,v0,zero
li a0,0x45
lw v1,0xc(s0)
lb a1,0x0(v1)
beq a1,a0,0x00324a04
_lw ra,0x1c(sp)
lw ra,0x1c(sp)
or v0,zero,zero
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x20
li a1,0x3d
sw a0,0xc(s0)
lb v1,0x1(t0)
b 0x00324a50
_or t0,a0,zero
lw v1,0x8(v0)
lw a0,0x10(v1)
beq a0,zero,0x00324a38
_nop
lw a0,0x2c(s0)
lw v1,0x4(v1)
subu v1,a0,v1
b 0x00324a38
_sw v1,0x2c(s0)
jr ra
_or v0,zero,zero
b 0x00324ad0
_or a3,zero,zero
b 0x00324a88
_or v1,zero,zero
(translation_unit "undefined4 FUN_0032498c(int param_1)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  char cVar5;\n  int iVar4;\n  int iVar6;\n  undefined4 *puVar7;\n  char *pcVar8;\n  \n  pcVar1 = *(char **)(param_1 + 0xc);\n  if (*pcVar1 != 'L') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  if (cVar5 != 'E') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  return uVar2;\n}\n\n" (function_definition "undefined4 FUN_0032498c(int param_1)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  char cVar5;\n  int iVar4;\n  int iVar6;\n  undefined4 *puVar7;\n  char *pcVar8;\n  \n  pcVar1 = *(char **)(param_1 + 0xc);\n  if (*pcVar1 != 'L') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  if (cVar5 != 'E') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  return uVar2;\n}" type_identifier (function_declarator "FUN_0032498c(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  char *pcVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  char cVar5;\n  int iVar4;\n  int iVar6;\n  undefined4 *puVar7;\n  char *pcVar8;\n  \n  pcVar1 = *(char **)(param_1 + 0xc);\n  if (*pcVar1 != 'L') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  if (cVar5 != 'E') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  return uVar2;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "char cVar5;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (*pcVar1 != 'L') {\n    return 0;\n  }" if (parenthesized_expression "(*pcVar1 != 'L')" ( (binary_expression "*pcVar1 != 'L'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'L'" ' character ')) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1 + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "pcVar1 + 1" identifier + number_literal)) ;) (if_statement "if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" if (parenthesized_expression "((pcVar1[1] == '_') || (pcVar1[1] == 'Z'))" ( (binary_expression "(pcVar1[1] == '_') || (pcVar1[1] == 'Z')" (parenthesized_expression "(pcVar1[1] == '_')" ( (binary_expression "pcVar1[1] == '_'" (subscript_expression "pcVar1[1]" identifier [ number_literal ]) == (char_literal "'_'" ' character ')) )) || (parenthesized_expression "(pcVar1[1] == 'Z')" ( (binary_expression "pcVar1[1] == 'Z'" (subscript_expression "pcVar1[1]" identifier [ number_literal ]) == (char_literal "'Z'" ' character ')) ))) )) (compound_statement "{\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" { (expression_statement "uVar2 = cplus_demangle_mangled_name(param_1,0);" (assignment_expression "uVar2 = cplus_demangle_mangled_name(param_1,0)" identifier = (call_expression "cplus_demangle_mangled_name(param_1,0)" identifier (argument_list "(param_1,0)" ( identifier , number_literal )))) ;) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "cVar5 = *pcVar1;" (assignment_expression "cVar5 = *pcVar1" identifier = (pointer_expression "*pcVar1" * identifier)) ;) }) (else_clause "else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" else (compound_statement "{\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" { (expression_statement "piVar3 = (int *)cplus_demangle_type();" (assignment_expression "piVar3 = (int *)cplus_demangle_type()" identifier = (cast_expression "(int *)cplus_demangle_type()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "cplus_demangle_type()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (piVar3 == (int *)0x0) {\n      return 0;\n    }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }" if (parenthesized_expression "((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0))" ( (binary_expression "(*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)" (parenthesized_expression "(*piVar3 == 0x27)" ( (binary_expression "*piVar3 == 0x27" (pointer_expression "*piVar3" * identifier) == number_literal) )) && (parenthesized_expression "(*(int *)(piVar3[2] + 0x10) != 0)" ( (binary_expression "*(int *)(piVar3[2] + 0x10) != 0" (pointer_expression "*(int *)(piVar3[2] + 0x10)" * (cast_expression "(int *)(piVar3[2] + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[2] + 0x10)" ( (binary_expression "piVar3[2] + 0x10" (subscript_expression "piVar3[2]" identifier [ number_literal ]) + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }" { (expression_statement "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);" (assignment_expression "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) - (pointer_expression "*(int *)(piVar3[2] + 4)" * (cast_expression "(int *)(piVar3[2] + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[2] + 4)" ( (binary_expression "piVar3[2] + 4" (subscript_expression "piVar3[2]" identifier [ number_literal ]) + number_literal) )))))) ;) })) (expression_statement "pcVar8 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar8 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "cVar5 = *pcVar8;" (assignment_expression "cVar5 = *pcVar8" identifier = (pointer_expression "*pcVar8" * identifier)) ;) (expression_statement "pcVar1 = pcVar8 + 1;" (assignment_expression "pcVar1 = pcVar8 + 1" identifier = (binary_expression "pcVar8 + 1" identifier + number_literal)) ;) (if_statement "if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" if (parenthesized_expression "(cVar5 == 'n')" ( (binary_expression "cVar5 == 'n'" identifier == (char_literal "'n'" ' character ')) )) (compound_statement "{\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }" { (expression_statement "uVar2 = 0x3d;" (assignment_expression "uVar2 = 0x3d" identifier = number_literal) ;) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "cVar5 = pcVar8[1];" (assignment_expression "cVar5 = pcVar8[1]" identifier = (subscript_expression "pcVar8[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" else (compound_statement "{\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" { (expression_statement "uVar2 = 0x3c;" (assignment_expression "uVar2 = 0x3c" identifier = number_literal) ;) (expression_statement "pcVar1 = pcVar8;" (assignment_expression "pcVar1 = pcVar8" identifier = identifier) ;) }))) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" identifier = identifier) ;) (if_statement "if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" if (parenthesized_expression "(cVar5 == 'E')" ( (binary_expression "cVar5 == 'E'" identifier == (char_literal "'E'" ' character ')) )) (compound_statement "{\n      iVar4 = 0;\n    }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" else (compound_statement "{\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" { (do_statement "do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');" do (compound_statement "{\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      }" { (if_statement "if (cVar5 == '\0') {\n          return 0;\n        }" if (parenthesized_expression "(cVar5 == '\0')" ( (binary_expression "cVar5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar8 = pcVar8 + 1;" (assignment_expression "pcVar8 = pcVar8 + 1" identifier = (binary_expression "pcVar8 + 1" identifier + number_literal)) ;) (expression_statement "*(char **)(param_1 + 0xc) = pcVar8;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar8" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "cVar5 = *pcVar8;" (assignment_expression "cVar5 = *pcVar8" identifier = (pointer_expression "*pcVar8" * identifier)) ;) }) while (parenthesized_expression "(cVar5 != 'E')" ( (binary_expression "cVar5 != 'E'" identifier != (char_literal "'E'" ' character ')) )) ;) (expression_statement "iVar4 = (int)pcVar8 - (int)pcVar1;" (assignment_expression "iVar4 = (int)pcVar8 - (int)pcVar1" identifier = (binary_expression "(int)pcVar8 - (int)pcVar1" (cast_expression "(int)pcVar8" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier))) ;) }))) (expression_statement "iVar6 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar6 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "puVar7 = (undefined4 *)0x0;" (assignment_expression "puVar7 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }" if (parenthesized_expression "(iVar6 < *(int *)(param_1 + 0x18))" ( (binary_expression "iVar6 < *(int *)(param_1 + 0x18)" identifier < (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) )) (compound_statement "{\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }" { (expression_statement "puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);" (assignment_expression "puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" identifier = (cast_expression "(undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" ( (binary_expression "*(int *)(param_1 + 0x10) + iVar6 * 0x10" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + (binary_expression "iVar6 * 0x10" identifier * number_literal)) )))) ;) (expression_statement "puVar7[1] = 0;" (assignment_expression "puVar7[1] = 0" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar6 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar6 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" if (parenthesized_expression "((pcVar1 == (char *)0x0) || (iVar4 == 0))" ( (binary_expression "(pcVar1 == (char *)0x0) || (iVar4 == 0)" (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) ))) )) (compound_statement "{\n        puVar7 = (undefined4 *)0x0;\n      }" { (expression_statement "puVar7 = (undefined4 *)0x0;" (assignment_expression "puVar7 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" else (compound_statement "{\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" { (expression_statement "puVar7[1] = 0;" (assignment_expression "puVar7[1] = 0" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "puVar7[2] = pcVar1;" (assignment_expression "puVar7[2] = pcVar1" (subscript_expression "puVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[3] = iVar4;" (assignment_expression "puVar7[3] = iVar4" (subscript_expression "puVar7[3]" identifier [ number_literal ]) = identifier) ;) }))) })) (expression_statement "uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);" (assignment_expression "uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7)" identifier = (call_expression "FUN_0031a7a0(param_1,uVar2,piVar3,puVar7)" identifier (argument_list "(param_1,uVar2,piVar3,puVar7)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "cVar5 = *pcVar1;" (assignment_expression "cVar5 = *pcVar1" identifier = (pointer_expression "*pcVar1" * identifier)) ;) }))) (if_statement "if (cVar5 != 'E') {\n    return 0;\n  }" if (parenthesized_expression "(cVar5 != 'E')" ( (binary_expression "cVar5 != 'E'" identifier != (char_literal "'E'" ' character ')) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1 + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "pcVar1 + 1" identifier + number_literal)) ;) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "demangle_component * d_expr_primary(d_info *di)\n\n{\n  char cVar1;\n  char *pcVar2;\n  demangle_component *pdVar3;\n  undefined1 uVar5;\n  demangle_component *pdVar4;\n  int iVar6;\n  demangle_component_type type;\n  demangle_component *right;\n  demangle_component *pdVar7;\n  \n  pcVar2 = di->n;\n  if (*pcVar2 != 'L') {\n    return (demangle_component *)0x0;\n  }\n  di->n = pcVar2 + 1;\n  if ((pcVar2[1] == '_') || (pcVar2[1] == 'Z')) {\n    pdVar3 = cplus_demangle_mangled_name(di,0);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }\n  else {\n    pdVar3 = cplus_demangle_type(di);\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    if ((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)) {\n      di->expansion = di->expansion - pdVar4->d_printing;\n    }\n    pdVar7 = (demangle_component *)di->n;\n    uVar5 = *(undefined1 *)&pdVar7->type;\n    pdVar4 = (demangle_component *)((int)&pdVar7->type + 1);\n    if (uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)) {\n      type = DEMANGLE_COMPONENT_LITERAL_NEG;\n      di->n = (char *)pdVar4;\n      uVar5 = *(byte *)((int)&pdVar7->type + 1);\n    }\n    else {\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }\n    pdVar7 = pdVar4;\n    if (uVar5 == DEMANGLE_COMPONENT_LAMBDA) {\n      pdVar7 = (demangle_component *)0x0;\n    }\n    else {\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }\n    iVar6 = di->next_comp;\n    right = (demangle_component *)0x0;\n    if (iVar6 < di->num_comps) {\n      right = di->comps + iVar6;\n      right->d_printing = 0;\n      di->next_comp = iVar6 + 1;\n      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }\n    }\n    pdVar3 = d_make_comp(di,type,pdVar3,right);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }\n  if (cVar1 != 'E') {\n    return (demangle_component *)0x0;\n  }\n  di->n = pcVar2 + 1;\n  return pdVar3;\n}\n\n" (function_definition "demangle_component * d_expr_primary(d_info *di)\n\n{\n  char cVar1;\n  char *pcVar2;\n  demangle_component *pdVar3;\n  undefined1 uVar5;\n  demangle_component *pdVar4;\n  int iVar6;\n  demangle_component_type type;\n  demangle_component *right;\n  demangle_component *pdVar7;\n  \n  pcVar2 = di->n;\n  if (*pcVar2 != 'L') {\n    return (demangle_component *)0x0;\n  }\n  di->n = pcVar2 + 1;\n  if ((pcVar2[1] == '_') || (pcVar2[1] == 'Z')) {\n    pdVar3 = cplus_demangle_mangled_name(di,0);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }\n  else {\n    pdVar3 = cplus_demangle_type(di);\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    if ((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)) {\n      di->expansion = di->expansion - pdVar4->d_printing;\n    }\n    pdVar7 = (demangle_component *)di->n;\n    uVar5 = *(undefined1 *)&pdVar7->type;\n    pdVar4 = (demangle_component *)((int)&pdVar7->type + 1);\n    if (uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)) {\n      type = DEMANGLE_COMPONENT_LITERAL_NEG;\n      di->n = (char *)pdVar4;\n      uVar5 = *(byte *)((int)&pdVar7->type + 1);\n    }\n    else {\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }\n    pdVar7 = pdVar4;\n    if (uVar5 == DEMANGLE_COMPONENT_LAMBDA) {\n      pdVar7 = (demangle_component *)0x0;\n    }\n    else {\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }\n    iVar6 = di->next_comp;\n    right = (demangle_component *)0x0;\n    if (iVar6 < di->num_comps) {\n      right = di->comps + iVar6;\n      right->d_printing = 0;\n      di->next_comp = iVar6 + 1;\n      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }\n    }\n    pdVar3 = d_make_comp(di,type,pdVar3,right);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }\n  if (cVar1 != 'E') {\n    return (demangle_component *)0x0;\n  }\n  di->n = pcVar2 + 1;\n  return pdVar3;\n}" type_identifier (pointer_declarator "* d_expr_primary(d_info *di)" * (function_declarator "d_expr_primary(d_info *di)" identifier (parameter_list "(d_info *di)" ( (parameter_declaration "d_info *di" type_identifier (pointer_declarator "*di" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  char *pcVar2;\n  demangle_component *pdVar3;\n  undefined1 uVar5;\n  demangle_component *pdVar4;\n  int iVar6;\n  demangle_component_type type;\n  demangle_component *right;\n  demangle_component *pdVar7;\n  \n  pcVar2 = di->n;\n  if (*pcVar2 != 'L') {\n    return (demangle_component *)0x0;\n  }\n  di->n = pcVar2 + 1;\n  if ((pcVar2[1] == '_') || (pcVar2[1] == 'Z')) {\n    pdVar3 = cplus_demangle_mangled_name(di,0);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }\n  else {\n    pdVar3 = cplus_demangle_type(di);\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    if ((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)) {\n      di->expansion = di->expansion - pdVar4->d_printing;\n    }\n    pdVar7 = (demangle_component *)di->n;\n    uVar5 = *(undefined1 *)&pdVar7->type;\n    pdVar4 = (demangle_component *)((int)&pdVar7->type + 1);\n    if (uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)) {\n      type = DEMANGLE_COMPONENT_LITERAL_NEG;\n      di->n = (char *)pdVar4;\n      uVar5 = *(byte *)((int)&pdVar7->type + 1);\n    }\n    else {\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }\n    pdVar7 = pdVar4;\n    if (uVar5 == DEMANGLE_COMPONENT_LAMBDA) {\n      pdVar7 = (demangle_component *)0x0;\n    }\n    else {\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }\n    iVar6 = di->next_comp;\n    right = (demangle_component *)0x0;\n    if (iVar6 < di->num_comps) {\n      right = di->comps + iVar6;\n      right->d_printing = 0;\n      di->next_comp = iVar6 + 1;\n      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }\n    }\n    pdVar3 = d_make_comp(di,type,pdVar3,right);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }\n  if (cVar1 != 'E') {\n    return (demangle_component *)0x0;\n  }\n  di->n = pcVar2 + 1;\n  return pdVar3;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "demangle_component *pdVar3;" type_identifier (pointer_declarator "*pdVar3" * identifier) ;) (declaration "undefined1 uVar5;" type_identifier identifier ;) (declaration "demangle_component *pdVar4;" type_identifier (pointer_declarator "*pdVar4" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "demangle_component_type type;" type_identifier identifier ;) (declaration "demangle_component *right;" type_identifier (pointer_declarator "*right" * identifier) ;) (declaration "demangle_component *pdVar7;" type_identifier (pointer_declarator "*pdVar7" * identifier) ;) (expression_statement "pcVar2 = di->n;" (assignment_expression "pcVar2 = di->n" identifier = (field_expression "di->n" identifier -> field_identifier)) ;) (if_statement "if (*pcVar2 != 'L') {\n    return (demangle_component *)0x0;\n  }" if (parenthesized_expression "(*pcVar2 != 'L')" ( (binary_expression "*pcVar2 != 'L'" (pointer_expression "*pcVar2" * identifier) != (char_literal "'L'" ' character ')) )) (compound_statement "{\n    return (demangle_component *)0x0;\n  }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "di->n = pcVar2 + 1;" (assignment_expression "di->n = pcVar2 + 1" (field_expression "di->n" identifier -> field_identifier) = (binary_expression "pcVar2 + 1" identifier + number_literal)) ;) (if_statement "if ((pcVar2[1] == '_') || (pcVar2[1] == 'Z')) {\n    pdVar3 = cplus_demangle_mangled_name(di,0);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }\n  else {\n    pdVar3 = cplus_demangle_type(di);\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    if ((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)) {\n      di->expansion = di->expansion - pdVar4->d_printing;\n    }\n    pdVar7 = (demangle_component *)di->n;\n    uVar5 = *(undefined1 *)&pdVar7->type;\n    pdVar4 = (demangle_component *)((int)&pdVar7->type + 1);\n    if (uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)) {\n      type = DEMANGLE_COMPONENT_LITERAL_NEG;\n      di->n = (char *)pdVar4;\n      uVar5 = *(byte *)((int)&pdVar7->type + 1);\n    }\n    else {\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }\n    pdVar7 = pdVar4;\n    if (uVar5 == DEMANGLE_COMPONENT_LAMBDA) {\n      pdVar7 = (demangle_component *)0x0;\n    }\n    else {\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }\n    iVar6 = di->next_comp;\n    right = (demangle_component *)0x0;\n    if (iVar6 < di->num_comps) {\n      right = di->comps + iVar6;\n      right->d_printing = 0;\n      di->next_comp = iVar6 + 1;\n      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }\n    }\n    pdVar3 = d_make_comp(di,type,pdVar3,right);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }" if (parenthesized_expression "((pcVar2[1] == '_') || (pcVar2[1] == 'Z'))" ( (binary_expression "(pcVar2[1] == '_') || (pcVar2[1] == 'Z')" (parenthesized_expression "(pcVar2[1] == '_')" ( (binary_expression "pcVar2[1] == '_'" (subscript_expression "pcVar2[1]" identifier [ number_literal ]) == (char_literal "'_'" ' character ')) )) || (parenthesized_expression "(pcVar2[1] == 'Z')" ( (binary_expression "pcVar2[1] == 'Z'" (subscript_expression "pcVar2[1]" identifier [ number_literal ]) == (char_literal "'Z'" ' character ')) ))) )) (compound_statement "{\n    pdVar3 = cplus_demangle_mangled_name(di,0);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }" { (expression_statement "pdVar3 = cplus_demangle_mangled_name(di,0);" (assignment_expression "pdVar3 = cplus_demangle_mangled_name(di,0)" identifier = (call_expression "cplus_demangle_mangled_name(di,0)" identifier (argument_list "(di,0)" ( identifier , number_literal )))) ;) (expression_statement "pcVar2 = di->n;" (assignment_expression "pcVar2 = di->n" identifier = (field_expression "di->n" identifier -> field_identifier)) ;) (expression_statement "cVar1 = *pcVar2;" (assignment_expression "cVar1 = *pcVar2" identifier = (pointer_expression "*pcVar2" * identifier)) ;) }) (else_clause "else {\n    pdVar3 = cplus_demangle_type(di);\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    if ((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)) {\n      di->expansion = di->expansion - pdVar4->d_printing;\n    }\n    pdVar7 = (demangle_component *)di->n;\n    uVar5 = *(undefined1 *)&pdVar7->type;\n    pdVar4 = (demangle_component *)((int)&pdVar7->type + 1);\n    if (uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)) {\n      type = DEMANGLE_COMPONENT_LITERAL_NEG;\n      di->n = (char *)pdVar4;\n      uVar5 = *(byte *)((int)&pdVar7->type + 1);\n    }\n    else {\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }\n    pdVar7 = pdVar4;\n    if (uVar5 == DEMANGLE_COMPONENT_LAMBDA) {\n      pdVar7 = (demangle_component *)0x0;\n    }\n    else {\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }\n    iVar6 = di->next_comp;\n    right = (demangle_component *)0x0;\n    if (iVar6 < di->num_comps) {\n      right = di->comps + iVar6;\n      right->d_printing = 0;\n      di->next_comp = iVar6 + 1;\n      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }\n    }\n    pdVar3 = d_make_comp(di,type,pdVar3,right);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }" else (compound_statement "{\n    pdVar3 = cplus_demangle_type(di);\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    if ((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)) {\n      di->expansion = di->expansion - pdVar4->d_printing;\n    }\n    pdVar7 = (demangle_component *)di->n;\n    uVar5 = *(undefined1 *)&pdVar7->type;\n    pdVar4 = (demangle_component *)((int)&pdVar7->type + 1);\n    if (uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)) {\n      type = DEMANGLE_COMPONENT_LITERAL_NEG;\n      di->n = (char *)pdVar4;\n      uVar5 = *(byte *)((int)&pdVar7->type + 1);\n    }\n    else {\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }\n    pdVar7 = pdVar4;\n    if (uVar5 == DEMANGLE_COMPONENT_LAMBDA) {\n      pdVar7 = (demangle_component *)0x0;\n    }\n    else {\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }\n    iVar6 = di->next_comp;\n    right = (demangle_component *)0x0;\n    if (iVar6 < di->num_comps) {\n      right = di->comps + iVar6;\n      right->d_printing = 0;\n      di->next_comp = iVar6 + 1;\n      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }\n    }\n    pdVar3 = d_make_comp(di,type,pdVar3,right);\n    pcVar2 = di->n;\n    cVar1 = *pcVar2;\n  }" { (expression_statement "pdVar3 = cplus_demangle_type(di);" (assignment_expression "pdVar3 = cplus_demangle_type(di)" identifier = (call_expression "cplus_demangle_type(di)" identifier (argument_list "(di)" ( identifier )))) ;) (if_statement "if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }" if (parenthesized_expression "(pdVar3 == (demangle_component *)0x0)" ( (binary_expression "pdVar3 == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (demangle_component *)0x0;\n    }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if ((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)) {\n      di->expansion = di->expansion - pdVar4->d_printing;\n    }" if (parenthesized_expression "((pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME))" ( (binary_expression "(pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) &&\n       (pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)" (parenthesized_expression "(pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)" ( (binary_expression "pdVar3->type == DEMANGLE_COMPONENT_BUILTIN_TYPE" (field_expression "pdVar3->type" identifier -> field_identifier) == identifier) )) && (parenthesized_expression "(pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME)" ( (comma_expression "pdVar4 = (pdVar3->u).s_fixed.length, pdVar4[1].type != DEMANGLE_COMPONENT_NAME" (assignment_expression "pdVar4 = (pdVar3->u).s_fixed.length" identifier = (field_expression "(pdVar3->u).s_fixed.length" (field_expression "(pdVar3->u).s_fixed" (parenthesized_expression "(pdVar3->u)" ( (field_expression "pdVar3->u" identifier -> field_identifier) )) . field_identifier) . field_identifier)) , (binary_expression "pdVar4[1].type != DEMANGLE_COMPONENT_NAME" (field_expression "pdVar4[1].type" (subscript_expression "pdVar4[1]" identifier [ number_literal ]) . field_identifier) != identifier)) ))) )) (compound_statement "{\n      di->expansion = di->expansion - pdVar4->d_printing;\n    }" { (expression_statement "di->expansion = di->expansion - pdVar4->d_printing;" (assignment_expression "di->expansion = di->expansion - pdVar4->d_printing" (field_expression "di->expansion" identifier -> field_identifier) = (binary_expression "di->expansion - pdVar4->d_printing" (field_expression "di->expansion" identifier -> field_identifier) - (field_expression "pdVar4->d_printing" identifier -> field_identifier))) ;) })) (expression_statement "pdVar7 = (demangle_component *)di->n;" (assignment_expression "pdVar7 = (demangle_component *)di->n" identifier = (cast_expression "(demangle_component *)di->n" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "di->n" identifier -> field_identifier))) ;) (expression_statement "uVar5 = *(undefined1 *)&pdVar7->type;" (assignment_expression "uVar5 = *(undefined1 *)&pdVar7->type" identifier = (pointer_expression "*(undefined1 *)&pdVar7->type" * (cast_expression "(undefined1 *)&pdVar7->type" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pdVar7->type" & (field_expression "pdVar7->type" identifier -> field_identifier))))) ;) (expression_statement "pdVar4 = (demangle_component *)((int)&pdVar7->type + 1);" (assignment_expression "pdVar4 = (demangle_component *)((int)&pdVar7->type + 1)" identifier = (cast_expression "(demangle_component *)((int)&pdVar7->type + 1)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pdVar7->type + 1)" ( (binary_expression "(int)&pdVar7->type + 1" (cast_expression "(int)&pdVar7->type" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pdVar7->type" & (field_expression "pdVar7->type" identifier -> field_identifier))) + number_literal) )))) ;) (if_statement "if (uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)) {\n      type = DEMANGLE_COMPONENT_LITERAL_NEG;\n      di->n = (char *)pdVar4;\n      uVar5 = *(byte *)((int)&pdVar7->type + 1);\n    }\n    else {\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }" if (parenthesized_expression "(uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST))" ( (binary_expression "uVar5 == (DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)" identifier == (parenthesized_expression "(DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST)" ( (binary_expression "DEMANGLE_COMPONENT_CHARACTER|DEMANGLE_COMPONENT_ARGLIST" identifier | identifier) ))) )) (compound_statement "{\n      type = DEMANGLE_COMPONENT_LITERAL_NEG;\n      di->n = (char *)pdVar4;\n      uVar5 = *(byte *)((int)&pdVar7->type + 1);\n    }" { (expression_statement "type = DEMANGLE_COMPONENT_LITERAL_NEG;" (assignment_expression "type = DEMANGLE_COMPONENT_LITERAL_NEG" identifier = identifier) ;) (expression_statement "di->n = (char *)pdVar4;" (assignment_expression "di->n = (char *)pdVar4" (field_expression "di->n" identifier -> field_identifier) = (cast_expression "(char *)pdVar4" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "uVar5 = *(byte *)((int)&pdVar7->type + 1);" (assignment_expression "uVar5 = *(byte *)((int)&pdVar7->type + 1)" identifier = (pointer_expression "*(byte *)((int)&pdVar7->type + 1)" * (cast_expression "(byte *)((int)&pdVar7->type + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pdVar7->type + 1)" ( (binary_expression "(int)&pdVar7->type + 1" (cast_expression "(int)&pdVar7->type" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pdVar7->type" & (field_expression "pdVar7->type" identifier -> field_identifier))) + number_literal) ))))) ;) }) (else_clause "else {\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }" else (compound_statement "{\n      type = DEMANGLE_COMPONENT_LITERAL;\n      pdVar4 = pdVar7;\n    }" { (expression_statement "type = DEMANGLE_COMPONENT_LITERAL;" (assignment_expression "type = DEMANGLE_COMPONENT_LITERAL" identifier = identifier) ;) (expression_statement "pdVar4 = pdVar7;" (assignment_expression "pdVar4 = pdVar7" identifier = identifier) ;) }))) (expression_statement "pdVar7 = pdVar4;" (assignment_expression "pdVar7 = pdVar4" identifier = identifier) ;) (if_statement "if (uVar5 == DEMANGLE_COMPONENT_LAMBDA) {\n      pdVar7 = (demangle_component *)0x0;\n    }\n    else {\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }" if (parenthesized_expression "(uVar5 == DEMANGLE_COMPONENT_LAMBDA)" ( (binary_expression "uVar5 == DEMANGLE_COMPONENT_LAMBDA" identifier == identifier) )) (compound_statement "{\n      pdVar7 = (demangle_component *)0x0;\n    }" { (expression_statement "pdVar7 = (demangle_component *)0x0;" (assignment_expression "pdVar7 = (demangle_component *)0x0" identifier = (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }" else (compound_statement "{\n      do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);\n      pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);\n    }" { (do_statement "do {\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      } while (uVar5 != DEMANGLE_COMPONENT_LAMBDA);" do (compound_statement "{\n        if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }\n        pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);\n        di->n = (char *)pdVar7;\n        uVar5 = *(undefined1 *)&pdVar7->type;\n      }" { (if_statement "if (uVar5 == DEMANGLE_COMPONENT_NAME) {\n          return (demangle_component *)0x0;\n        }" if (parenthesized_expression "(uVar5 == DEMANGLE_COMPONENT_NAME)" ( (binary_expression "uVar5 == DEMANGLE_COMPONENT_NAME" identifier == identifier) )) (compound_statement "{\n          return (demangle_component *)0x0;\n        }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "pdVar7 = (demangle_component *)((int)&pdVar7->type + 1);" (assignment_expression "pdVar7 = (demangle_component *)((int)&pdVar7->type + 1)" identifier = (cast_expression "(demangle_component *)((int)&pdVar7->type + 1)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pdVar7->type + 1)" ( (binary_expression "(int)&pdVar7->type + 1" (cast_expression "(int)&pdVar7->type" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pdVar7->type" & (field_expression "pdVar7->type" identifier -> field_identifier))) + number_literal) )))) ;) (expression_statement "di->n = (char *)pdVar7;" (assignment_expression "di->n = (char *)pdVar7" (field_expression "di->n" identifier -> field_identifier) = (cast_expression "(char *)pdVar7" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "uVar5 = *(undefined1 *)&pdVar7->type;" (assignment_expression "uVar5 = *(undefined1 *)&pdVar7->type" identifier = (pointer_expression "*(undefined1 *)&pdVar7->type" * (cast_expression "(undefined1 *)&pdVar7->type" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pdVar7->type" & (field_expression "pdVar7->type" identifier -> field_identifier))))) ;) }) while (parenthesized_expression "(uVar5 != DEMANGLE_COMPONENT_LAMBDA)" ( (binary_expression "uVar5 != DEMANGLE_COMPONENT_LAMBDA" identifier != identifier) )) ;) (expression_statement "pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4);" (assignment_expression "pdVar7 = (demangle_component *)((int)pdVar7 - (int)pdVar4)" identifier = (cast_expression "(demangle_component *)((int)pdVar7 - (int)pdVar4)" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pdVar7 - (int)pdVar4)" ( (binary_expression "(int)pdVar7 - (int)pdVar4" (cast_expression "(int)pdVar7" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pdVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) }))) (expression_statement "iVar6 = di->next_comp;" (assignment_expression "iVar6 = di->next_comp" identifier = (field_expression "di->next_comp" identifier -> field_identifier)) ;) (expression_statement "right = (demangle_component *)0x0;" (assignment_expression "right = (demangle_component *)0x0" identifier = (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (iVar6 < di->num_comps) {\n      right = di->comps + iVar6;\n      right->d_printing = 0;\n      di->next_comp = iVar6 + 1;\n      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }\n    }" if (parenthesized_expression "(iVar6 < di->num_comps)" ( (binary_expression "iVar6 < di->num_comps" identifier < (field_expression "di->num_comps" identifier -> field_identifier)) )) (compound_statement "{\n      right = di->comps + iVar6;\n      right->d_printing = 0;\n      di->next_comp = iVar6 + 1;\n      if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }\n    }" { (expression_statement "right = di->comps + iVar6;" (assignment_expression "right = di->comps + iVar6" identifier = (binary_expression "di->comps + iVar6" (field_expression "di->comps" identifier -> field_identifier) + identifier)) ;) (expression_statement "right->d_printing = 0;" (assignment_expression "right->d_printing = 0" (field_expression "right->d_printing" identifier -> field_identifier) = number_literal) ;) (expression_statement "di->next_comp = iVar6 + 1;" (assignment_expression "di->next_comp = iVar6 + 1" (field_expression "di->next_comp" identifier -> field_identifier) = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if ((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)) {\n        right = (demangle_component *)0x0;\n      }\n      else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }" if (parenthesized_expression "((pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0))" ( (binary_expression "(pdVar4 == (demangle_component *)0x0) || (pdVar7 == (demangle_component *)0x0)" (parenthesized_expression "(pdVar4 == (demangle_component *)0x0)" ( (binary_expression "pdVar4 == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(pdVar7 == (demangle_component *)0x0)" ( (binary_expression "pdVar7 == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n        right = (demangle_component *)0x0;\n      }" { (expression_statement "right = (demangle_component *)0x0;" (assignment_expression "right = (demangle_component *)0x0" identifier = (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }" else (compound_statement "{\n        right->d_printing = 0;\n        right->type = DEMANGLE_COMPONENT_NAME;\n        (right->u).s_fixed.length = pdVar4;\n        (right->u).s_extended_operator.name = pdVar7;\n      }" { (expression_statement "right->d_printing = 0;" (assignment_expression "right->d_printing = 0" (field_expression "right->d_printing" identifier -> field_identifier) = number_literal) ;) (expression_statement "right->type = DEMANGLE_COMPONENT_NAME;" (assignment_expression "right->type = DEMANGLE_COMPONENT_NAME" (field_expression "right->type" identifier -> field_identifier) = identifier) ;) (expression_statement "(right->u).s_fixed.length = pdVar4;" (assignment_expression "(right->u).s_fixed.length = pdVar4" (field_expression "(right->u).s_fixed.length" (field_expression "(right->u).s_fixed" (parenthesized_expression "(right->u)" ( (field_expression "right->u" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "(right->u).s_extended_operator.name = pdVar7;" (assignment_expression "(right->u).s_extended_operator.name = pdVar7" (field_expression "(right->u).s_extended_operator.name" (field_expression "(right->u).s_extended_operator" (parenthesized_expression "(right->u)" ( (field_expression "right->u" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) }))) })) (expression_statement "pdVar3 = d_make_comp(di,type,pdVar3,right);" (assignment_expression "pdVar3 = d_make_comp(di,type,pdVar3,right)" identifier = (call_expression "d_make_comp(di,type,pdVar3,right)" identifier (argument_list "(di,type,pdVar3,right)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "pcVar2 = di->n;" (assignment_expression "pcVar2 = di->n" identifier = (field_expression "di->n" identifier -> field_identifier)) ;) (expression_statement "cVar1 = *pcVar2;" (assignment_expression "cVar1 = *pcVar2" identifier = (pointer_expression "*pcVar2" * identifier)) ;) }))) (if_statement "if (cVar1 != 'E') {\n    return (demangle_component *)0x0;\n  }" if (parenthesized_expression "(cVar1 != 'E')" ( (binary_expression "cVar1 != 'E'" identifier != (char_literal "'E'" ' character ')) )) (compound_statement "{\n    return (demangle_component *)0x0;\n  }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "di->n = pcVar2 + 1;" (assignment_expression "di->n = pcVar2 + 1" (field_expression "di->n" identifier -> field_identifier) = (binary_expression "pcVar2 + 1" identifier + number_literal)) ;) (return_statement "return pdVar3;" return identifier ;) })))
(translation_unit "undefined4 FUN_0032498c(int param_1)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  char cVar5;\n  int iVar4;\n  int iVar6;\n  undefined4 *puVar7;\n  char *pcVar8;\n  \n  pcVar1 = *(char **)(param_1 + 0xc);\n  if (*pcVar1 != 'L') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  if (cVar5 != 'E') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  return uVar2;\n}\n\n" (function_definition "undefined4 FUN_0032498c(int param_1)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  char cVar5;\n  int iVar4;\n  int iVar6;\n  undefined4 *puVar7;\n  char *pcVar8;\n  \n  pcVar1 = *(char **)(param_1 + 0xc);\n  if (*pcVar1 != 'L') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  if (cVar5 != 'E') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  return uVar2;\n}" type_identifier (function_declarator "FUN_0032498c(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  char *pcVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  char cVar5;\n  int iVar4;\n  int iVar6;\n  undefined4 *puVar7;\n  char *pcVar8;\n  \n  pcVar1 = *(char **)(param_1 + 0xc);\n  if (*pcVar1 != 'L') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  if (cVar5 != 'E') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  return uVar2;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "char cVar5;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (*pcVar1 != 'L') {\n    return 0;\n  }" if (parenthesized_expression "(*pcVar1 != 'L')" ( (binary_expression "*pcVar1 != 'L'" (pointer_expression "*pcVar1" * identifier) != (char_literal "'L'" ' character ')) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1 + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "pcVar1 + 1" identifier + number_literal)) ;) (if_statement "if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" if (parenthesized_expression "((pcVar1[1] == '_') || (pcVar1[1] == 'Z'))" ( (binary_expression "(pcVar1[1] == '_') || (pcVar1[1] == 'Z')" (parenthesized_expression "(pcVar1[1] == '_')" ( (binary_expression "pcVar1[1] == '_'" (subscript_expression "pcVar1[1]" identifier [ number_literal ]) == (char_literal "'_'" ' character ')) )) || (parenthesized_expression "(pcVar1[1] == 'Z')" ( (binary_expression "pcVar1[1] == 'Z'" (subscript_expression "pcVar1[1]" identifier [ number_literal ]) == (char_literal "'Z'" ' character ')) ))) )) (compound_statement "{\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" { (expression_statement "uVar2 = cplus_demangle_mangled_name(param_1,0);" (assignment_expression "uVar2 = cplus_demangle_mangled_name(param_1,0)" identifier = (call_expression "cplus_demangle_mangled_name(param_1,0)" identifier (argument_list "(param_1,0)" ( identifier , number_literal )))) ;) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "cVar5 = *pcVar1;" (assignment_expression "cVar5 = *pcVar1" identifier = (pointer_expression "*pcVar1" * identifier)) ;) }) (else_clause "else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" else (compound_statement "{\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" { (expression_statement "piVar3 = (int *)cplus_demangle_type();" (assignment_expression "piVar3 = (int *)cplus_demangle_type()" identifier = (cast_expression "(int *)cplus_demangle_type()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "cplus_demangle_type()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (piVar3 == (int *)0x0) {\n      return 0;\n    }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }" if (parenthesized_expression "((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0))" ( (binary_expression "(*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)" (parenthesized_expression "(*piVar3 == 0x27)" ( (binary_expression "*piVar3 == 0x27" (pointer_expression "*piVar3" * identifier) == number_literal) )) && (parenthesized_expression "(*(int *)(piVar3[2] + 0x10) != 0)" ( (binary_expression "*(int *)(piVar3[2] + 0x10) != 0" (pointer_expression "*(int *)(piVar3[2] + 0x10)" * (cast_expression "(int *)(piVar3[2] + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[2] + 0x10)" ( (binary_expression "piVar3[2] + 0x10" (subscript_expression "piVar3[2]" identifier [ number_literal ]) + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }" { (expression_statement "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);" (assignment_expression "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) - (pointer_expression "*(int *)(piVar3[2] + 4)" * (cast_expression "(int *)(piVar3[2] + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[2] + 4)" ( (binary_expression "piVar3[2] + 4" (subscript_expression "piVar3[2]" identifier [ number_literal ]) + number_literal) )))))) ;) })) (expression_statement "pcVar8 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar8 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "cVar5 = *pcVar8;" (assignment_expression "cVar5 = *pcVar8" identifier = (pointer_expression "*pcVar8" * identifier)) ;) (expression_statement "pcVar1 = pcVar8 + 1;" (assignment_expression "pcVar1 = pcVar8 + 1" identifier = (binary_expression "pcVar8 + 1" identifier + number_literal)) ;) (if_statement "if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" if (parenthesized_expression "(cVar5 == 'n')" ( (binary_expression "cVar5 == 'n'" identifier == (char_literal "'n'" ' character ')) )) (compound_statement "{\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }" { (expression_statement "uVar2 = 0x3d;" (assignment_expression "uVar2 = 0x3d" identifier = number_literal) ;) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "cVar5 = pcVar8[1];" (assignment_expression "cVar5 = pcVar8[1]" identifier = (subscript_expression "pcVar8[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" else (compound_statement "{\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" { (expression_statement "uVar2 = 0x3c;" (assignment_expression "uVar2 = 0x3c" identifier = number_literal) ;) (expression_statement "pcVar1 = pcVar8;" (assignment_expression "pcVar1 = pcVar8" identifier = identifier) ;) }))) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" identifier = identifier) ;) (if_statement "if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" if (parenthesized_expression "(cVar5 == 'E')" ( (binary_expression "cVar5 == 'E'" identifier == (char_literal "'E'" ' character ')) )) (compound_statement "{\n      iVar4 = 0;\n    }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" else (compound_statement "{\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" { (do_statement "do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');" do (compound_statement "{\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      }" { (if_statement "if (cVar5 == '\0') {\n          return 0;\n        }" if (parenthesized_expression "(cVar5 == '\0')" ( (binary_expression "cVar5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar8 = pcVar8 + 1;" (assignment_expression "pcVar8 = pcVar8 + 1" identifier = (binary_expression "pcVar8 + 1" identifier + number_literal)) ;) (expression_statement "*(char **)(param_1 + 0xc) = pcVar8;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar8" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "cVar5 = *pcVar8;" (assignment_expression "cVar5 = *pcVar8" identifier = (pointer_expression "*pcVar8" * identifier)) ;) }) while (parenthesized_expression "(cVar5 != 'E')" ( (binary_expression "cVar5 != 'E'" identifier != (char_literal "'E'" ' character ')) )) ;) (expression_statement "iVar4 = (int)pcVar8 - (int)pcVar1;" (assignment_expression "iVar4 = (int)pcVar8 - (int)pcVar1" identifier = (binary_expression "(int)pcVar8 - (int)pcVar1" (cast_expression "(int)pcVar8" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier))) ;) }))) (expression_statement "iVar6 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar6 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "puVar7 = (undefined4 *)0x0;" (assignment_expression "puVar7 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }" if (parenthesized_expression "(iVar6 < *(int *)(param_1 + 0x18))" ( (binary_expression "iVar6 < *(int *)(param_1 + 0x18)" identifier < (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) )) (compound_statement "{\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }" { (expression_statement "puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);" (assignment_expression "puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" identifier = (cast_expression "(undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" ( (binary_expression "*(int *)(param_1 + 0x10) + iVar6 * 0x10" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + (binary_expression "iVar6 * 0x10" identifier * number_literal)) )))) ;) (expression_statement "puVar7[1] = 0;" (assignment_expression "puVar7[1] = 0" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar6 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar6 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" if (parenthesized_expression "((pcVar1 == (char *)0x0) || (iVar4 == 0))" ( (binary_expression "(pcVar1 == (char *)0x0) || (iVar4 == 0)" (parenthesized_expression "(pcVar1 == (char *)0x0)" ( (binary_expression "pcVar1 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) ))) )) (compound_statement "{\n        puVar7 = (undefined4 *)0x0;\n      }" { (expression_statement "puVar7 = (undefined4 *)0x0;" (assignment_expression "puVar7 = (undefined4 *)0x0" identifier = (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" else (compound_statement "{\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" { (expression_statement "puVar7[1] = 0;" (assignment_expression "puVar7[1] = 0" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "puVar7[2] = pcVar1;" (assignment_expression "puVar7[2] = pcVar1" (subscript_expression "puVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar7[3] = iVar4;" (assignment_expression "puVar7[3] = iVar4" (subscript_expression "puVar7[3]" identifier [ number_literal ]) = identifier) ;) }))) })) (expression_statement "uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);" (assignment_expression "uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7)" identifier = (call_expression "FUN_0031a7a0(param_1,uVar2,piVar3,puVar7)" identifier (argument_list "(param_1,uVar2,piVar3,puVar7)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "cVar5 = *pcVar1;" (assignment_expression "cVar5 = *pcVar1" identifier = (pointer_expression "*pcVar1" * identifier)) ;) }))) (if_statement "if (cVar5 != 'E') {\n    return 0;\n  }" if (parenthesized_expression "(cVar5 != 'E')" ( (binary_expression "cVar5 != 'E'" identifier != (char_literal "'E'" ' character ')) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1 + 1" (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = (binary_expression "pcVar1 + 1" identifier + number_literal)) ;) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (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 (pointer_expression * IDENT) != (char_literal ' character ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (char_literal ' character ')) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (char_literal ' character ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , 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) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + 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) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }))) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (return_statement return IDENT ;) })))
(function_definition "undefined4 FUN_0032498c(int param_1)\n\n{\n  char *pcVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  char cVar5;\n  int iVar4;\n  int iVar6;\n  undefined4 *puVar7;\n  char *pcVar8;\n  \n  pcVar1 = *(char **)(param_1 + 0xc);\n  if (*pcVar1 != 'L') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  if (cVar5 != 'E') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  return uVar2;\n}" (type_identifier "undefined4") (function_declarator "FUN_0032498c(int param_1)" (identifier "FUN_0032498c") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  char *pcVar1;\n  undefined4 uVar2;\n  int *piVar3;\n  char cVar5;\n  int iVar4;\n  int iVar6;\n  undefined4 *puVar7;\n  char *pcVar8;\n  \n  pcVar1 = *(char **)(param_1 + 0xc);\n  if (*pcVar1 != 'L') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  if (cVar5 != 'E') {\n    return 0;\n  }\n  *(char **)(param_1 + 0xc) = pcVar1 + 1;\n  return uVar2;\n}" ({ "{") (declaration "char *pcVar1;" (primitive_type "char") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "char cVar5;" (primitive_type "char") (identifier "cVar5") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined4 *puVar7;" (type_identifier "undefined4") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "char *pcVar8;" (primitive_type "char") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" (identifier "pcVar1") (= "=") (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (if_statement "if (*pcVar1 != 'L') {\n    return 0;\n  }" (if "if") (parenthesized_expression "(*pcVar1 != 'L')" (( "(") (binary_expression "*pcVar1 != 'L'" (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) (!= "!=") (char_literal "'L'" (' "'") (character "L") (' "'"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1 + 1" (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (binary_expression "pcVar1 + 1" (identifier "pcVar1") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }\n  else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" (if "if") (parenthesized_expression "((pcVar1[1] == '_') || (pcVar1[1] == 'Z'))" (( "(") (binary_expression "(pcVar1[1] == '_') || (pcVar1[1] == 'Z')" (parenthesized_expression "(pcVar1[1] == '_')" (( "(") (binary_expression "pcVar1[1] == '_'" (subscript_expression "pcVar1[1]" (identifier "pcVar1") ([ "[") (number_literal "1") (] "]")) (== "==") (char_literal "'_'" (' "'") (character "_") (' "'"))) () ")")) (|| "||") (parenthesized_expression "(pcVar1[1] == 'Z')" (( "(") (binary_expression "pcVar1[1] == 'Z'" (subscript_expression "pcVar1[1]" (identifier "pcVar1") ([ "[") (number_literal "1") (] "]")) (== "==") (char_literal "'Z'" (' "'") (character "Z") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    uVar2 = cplus_demangle_mangled_name(param_1,0);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" ({ "{") (expression_statement "uVar2 = cplus_demangle_mangled_name(param_1,0);" (assignment_expression "uVar2 = cplus_demangle_mangled_name(param_1,0)" (identifier "uVar2") (= "=") (call_expression "cplus_demangle_mangled_name(param_1,0)" (identifier "cplus_demangle_mangled_name") (argument_list "(param_1,0)" (( "(") (identifier "param_1") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" (identifier "pcVar1") (= "=") (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "cVar5 = *pcVar1;" (assignment_expression "cVar5 = *pcVar1" (identifier "cVar5") (= "=") (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1"))) (; ";")) (} "}")) (else_clause "else {\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" (else "else") (compound_statement "{\n    piVar3 = (int *)cplus_demangle_type();\n    if (piVar3 == (int *)0x0) {\n      return 0;\n    }\n    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }\n    pcVar8 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar8;\n    pcVar1 = pcVar8 + 1;\n    if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }\n    pcVar8 = pcVar1;\n    if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }\n    iVar6 = *(int *)(param_1 + 0x14);\n    puVar7 = (undefined4 *)0x0;\n    if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }\n    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);\n    pcVar1 = *(char **)(param_1 + 0xc);\n    cVar5 = *pcVar1;\n  }" ({ "{") (expression_statement "piVar3 = (int *)cplus_demangle_type();" (assignment_expression "piVar3 = (int *)cplus_demangle_type()" (identifier "piVar3") (= "=") (cast_expression "(int *)cplus_demangle_type()" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "cplus_demangle_type()" (identifier "cplus_demangle_type") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (piVar3 == (int *)0x0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(piVar3 == (int *)0x0)" (( "(") (binary_expression "piVar3 == (int *)0x0" (identifier "piVar3") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }" (if "if") (parenthesized_expression "((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0))" (( "(") (binary_expression "(*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)" (parenthesized_expression "(*piVar3 == 0x27)" (( "(") (binary_expression "*piVar3 == 0x27" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (== "==") (number_literal "0x27")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(piVar3[2] + 0x10) != 0)" (( "(") (binary_expression "*(int *)(piVar3[2] + 0x10) != 0" (pointer_expression "*(int *)(piVar3[2] + 0x10)" (* "*") (cast_expression "(int *)(piVar3[2] + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3[2] + 0x10)" (( "(") (binary_expression "piVar3[2] + 0x10" (subscript_expression "piVar3[2]" (identifier "piVar3") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);\n    }" ({ "{") (expression_statement "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);" (assignment_expression "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" (* "*") (cast_expression "(int *)(param_1 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" (* "*") (cast_expression "(int *)(param_1 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")")))) (- "-") (pointer_expression "*(int *)(piVar3[2] + 4)" (* "*") (cast_expression "(int *)(piVar3[2] + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3[2] + 4)" (( "(") (binary_expression "piVar3[2] + 4" (subscript_expression "piVar3[2]" (identifier "piVar3") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "4")) () ")")))))) (; ";")) (} "}"))) (expression_statement "pcVar8 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar8 = *(char **)(param_1 + 0xc)" (identifier "pcVar8") (= "=") (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "cVar5 = *pcVar8;" (assignment_expression "cVar5 = *pcVar8" (identifier "cVar5") (= "=") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8"))) (; ";")) (expression_statement "pcVar1 = pcVar8 + 1;" (assignment_expression "pcVar1 = pcVar8 + 1" (identifier "pcVar1") (= "=") (binary_expression "pcVar8 + 1" (identifier "pcVar8") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (cVar5 == 'n') {\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }\n    else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" (if "if") (parenthesized_expression "(cVar5 == 'n')" (( "(") (binary_expression "cVar5 == 'n'" (identifier "cVar5") (== "==") (char_literal "'n'" (' "'") (character "n") (' "'"))) () ")")) (compound_statement "{\n      uVar2 = 0x3d;\n      *(char **)(param_1 + 0xc) = pcVar1;\n      cVar5 = pcVar8[1];\n    }" ({ "{") (expression_statement "uVar2 = 0x3d;" (assignment_expression "uVar2 = 0x3d" (identifier "uVar2") (= "=") (number_literal "0x3d")) (; ";")) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1" (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (identifier "pcVar1")) (; ";")) (expression_statement "cVar5 = pcVar8[1];" (assignment_expression "cVar5 = pcVar8[1]" (identifier "cVar5") (= "=") (subscript_expression "pcVar8[1]" (identifier "pcVar8") ([ "[") (number_literal "1") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" (else "else") (compound_statement "{\n      uVar2 = 0x3c;\n      pcVar1 = pcVar8;\n    }" ({ "{") (expression_statement "uVar2 = 0x3c;" (assignment_expression "uVar2 = 0x3c" (identifier "uVar2") (= "=") (number_literal "0x3c")) (; ";")) (expression_statement "pcVar1 = pcVar8;" (assignment_expression "pcVar1 = pcVar8" (identifier "pcVar1") (= "=") (identifier "pcVar8")) (; ";")) (} "}")))) (expression_statement "pcVar8 = pcVar1;" (assignment_expression "pcVar8 = pcVar1" (identifier "pcVar8") (= "=") (identifier "pcVar1")) (; ";")) (if_statement "if (cVar5 == 'E') {\n      iVar4 = 0;\n    }\n    else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" (if "if") (parenthesized_expression "(cVar5 == 'E')" (( "(") (binary_expression "cVar5 == 'E'" (identifier "cVar5") (== "==") (char_literal "'E'" (' "'") (character "E") (' "'"))) () ")")) (compound_statement "{\n      iVar4 = 0;\n    }" ({ "{") (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" (else "else") (compound_statement "{\n      do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');\n      iVar4 = (int)pcVar8 - (int)pcVar1;\n    }" ({ "{") (do_statement "do {\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      } while (cVar5 != 'E');" (do "do") (compound_statement "{\n        if (cVar5 == '\0') {\n          return 0;\n        }\n        pcVar8 = pcVar8 + 1;\n        *(char **)(param_1 + 0xc) = pcVar8;\n        cVar5 = *pcVar8;\n      }" ({ "{") (if_statement "if (cVar5 == '\0') {\n          return 0;\n        }" (if "if") (parenthesized_expression "(cVar5 == '\0')" (( "(") (binary_expression "cVar5 == '\0'" (identifier "cVar5") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pcVar8 = pcVar8 + 1;" (assignment_expression "pcVar8 = pcVar8 + 1" (identifier "pcVar8") (= "=") (binary_expression "pcVar8 + 1" (identifier "pcVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char **)(param_1 + 0xc) = pcVar8;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar8" (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (identifier "pcVar8")) (; ";")) (expression_statement "cVar5 = *pcVar8;" (assignment_expression "cVar5 = *pcVar8" (identifier "cVar5") (= "=") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(cVar5 != 'E')" (( "(") (binary_expression "cVar5 != 'E'" (identifier "cVar5") (!= "!=") (char_literal "'E'" (' "'") (character "E") (' "'"))) () ")")) (; ";")) (expression_statement "iVar4 = (int)pcVar8 - (int)pcVar1;" (assignment_expression "iVar4 = (int)pcVar8 - (int)pcVar1" (identifier "iVar4") (= "=") (binary_expression "(int)pcVar8 - (int)pcVar1" (cast_expression "(int)pcVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar8")) (- "-") (cast_expression "(int)pcVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar1")))) (; ";")) (} "}")))) (expression_statement "iVar6 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar6 = *(int *)(param_1 + 0x14)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "puVar7 = (undefined4 *)0x0;" (assignment_expression "puVar7 = (undefined4 *)0x0" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (iVar6 < *(int *)(param_1 + 0x18)) {\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }" (if "if") (parenthesized_expression "(iVar6 < *(int *)(param_1 + 0x18))" (( "(") (binary_expression "iVar6 < *(int *)(param_1 + 0x18)" (identifier "iVar6") (< "<") (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (compound_statement "{\n      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);\n      puVar7[1] = 0;\n      *(int *)(param_1 + 0x14) = iVar6 + 1;\n      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }\n    }" ({ "{") (expression_statement "puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);" (assignment_expression "puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x10) + iVar6 * 0x10)" (( "(") (binary_expression "*(int *)(param_1 + 0x10) + iVar6 * 0x10" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (binary_expression "iVar6 * 0x10" (identifier "iVar6") (* "*") (number_literal "0x10"))) () ")")))) (; ";")) (expression_statement "puVar7[1] = 0;" (assignment_expression "puVar7[1] = 0" (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar6 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar6 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {\n        puVar7 = (undefined4 *)0x0;\n      }\n      else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" (if "if") (parenthesized_expression "((pcVar1 == (char *)0x0) || (iVar4 == 0))" (( "(") (binary_expression "(pcVar1 == (char *)0x0) || (iVar4 == 0)" (parenthesized_expression "(pcVar1 == (char *)0x0)" (( "(") (binary_expression "pcVar1 == (char *)0x0" (identifier "pcVar1") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n        puVar7 = (undefined4 *)0x0;\n      }" ({ "{") (expression_statement "puVar7 = (undefined4 *)0x0;" (assignment_expression "puVar7 = (undefined4 *)0x0" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" (else "else") (compound_statement "{\n        puVar7[1] = 0;\n        *puVar7 = 0;\n        puVar7[2] = pcVar1;\n        puVar7[3] = iVar4;\n      }" ({ "{") (expression_statement "puVar7[1] = 0;" (assignment_expression "puVar7[1] = 0" (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar7[2] = pcVar1;" (assignment_expression "puVar7[2] = pcVar1" (subscript_expression "puVar7[2]" (identifier "puVar7") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "pcVar1")) (; ";")) (expression_statement "puVar7[3] = iVar4;" (assignment_expression "puVar7[3] = iVar4" (subscript_expression "puVar7[3]" (identifier "puVar7") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "iVar4")) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);" (assignment_expression "uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7)" (identifier "uVar2") (= "=") (call_expression "FUN_0031a7a0(param_1,uVar2,piVar3,puVar7)" (identifier "FUN_0031a7a0") (argument_list "(param_1,uVar2,piVar3,puVar7)" (( "(") (identifier "param_1") (, ",") (identifier "uVar2") (, ",") (identifier "piVar3") (, ",") (identifier "puVar7") () ")")))) (; ";")) (expression_statement "pcVar1 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar1 = *(char **)(param_1 + 0xc)" (identifier "pcVar1") (= "=") (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "cVar5 = *pcVar1;" (assignment_expression "cVar5 = *pcVar1" (identifier "cVar5") (= "=") (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1"))) (; ";")) (} "}")))) (if_statement "if (cVar5 != 'E') {\n    return 0;\n  }" (if "if") (parenthesized_expression "(cVar5 != 'E')" (( "(") (binary_expression "cVar5 != 'E'" (identifier "cVar5") (!= "!=") (char_literal "'E'" (' "'") (character "E") (' "'"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*(char **)(param_1 + 0xc) = pcVar1 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar1 + 1" (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (binary_expression "pcVar1 + 1" (identifier "pcVar1") (+ "+") (number_literal "1"))) (; ";")) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

type_1 * function_1(type_2 *di)

{
  char var_15;
  char *var_1;
  type_1 *var_4;
  type_3 var_7;
  type_1 *var_12;
  int var_11;
  type_4 type;
  type_1 *right;
  type_1 *var_13;
  
  var_1 = di->n;
  if (*var_1 != 'L') {
    return (type_1 *)0x0;
  }
  di->n = var_1 + 1;
  if ((var_1[1] == '_') || (var_1[1] == 'Z')) {
    var_4 = var_2(di,0);
    var_1 = di->n;
    var_15 = *var_1;
  }
  else {
    var_4 = var_3(di);
    if (var_4 == (type_1 *)0x0) {
      return (type_1 *)0x0;
    }
    if ((var_4->type == var_5) &&
       (var_12 = (var_4->u).s_fixed.length, var_12[1].type != var_6)) {
      di->expansion = di->expansion - var_12->d_printing;
    }
    var_13 = (type_1 *)di->n;
    var_7 = *(type_3 *)&var_13->type;
    var_12 = (type_1 *)((int)&var_13->type + 1);
    if (var_7 == (var_8|var_9)) {
      type = DEMANGLE_COMPONENT_LITERAL_NEG;
      di->n = (char *)var_12;
      var_7 = *(type_5 *)((int)&var_13->type + 1);
    }
    else {
      type = DEMANGLE_COMPONENT_LITERAL;
      var_12 = var_13;
    }
    var_13 = var_12;
    if (var_7 == var_10) {
      var_13 = (type_1 *)0x0;
    }
    else {
      do {
        if (var_7 == var_6) {
          return (type_1 *)0x0;
        }
        var_13 = (type_1 *)((int)&var_13->type + 1);
        di->n = (char *)var_13;
        var_7 = *(type_3 *)&var_13->type;
      } while (var_7 != var_10);
      var_13 = (type_1 *)((int)var_13 - (int)var_12);
    }
    var_11 = di->next_comp;
    right = (type_1 *)0x0;
    if (var_11 < di->num_comps) {
      right = di->comps + var_11;
      right->d_printing = 0;
      di->next_comp = var_11 + 1;
      if ((var_12 == (type_1 *)0x0) || (var_13 == (type_1 *)0x0)) {
        right = (type_1 *)0x0;
      }
      else {
        right->d_printing = 0;
        right->type = var_6;
        (right->u).s_fixed.length = var_12;
        (right->u).s_extended_operator.name = var_13;
      }
    }
    var_4 = var_14(di,type,var_4,right);
    var_1 = di->n;
    var_15 = *var_1;
  }
  if (var_15 != 'E') {
    return (type_1 *)0x0;
  }
  di->n = var_1 + 1;
  return var_4;
}


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

undefined4 MASKED(int param_1)

{
  char *pcVar1;
  undefined4 uVar2;
  int *piVar3;
  char cVar5;
  int iVar4;
  int iVar6;
  undefined4 *puVar7;
  char *pcVar8;
  
  pcVar1 = *(char **)(param_1 + 0xc);
  if (*pcVar1 != 'L') {
    return 0;
  }
  *(char **)(param_1 + 0xc) = pcVar1 + 1;
  if ((pcVar1[1] == '_') || (pcVar1[1] == 'Z')) {
    uVar2 = cplus_demangle_mangled_name(param_1,0);
    pcVar1 = *(char **)(param_1 + 0xc);
    cVar5 = *pcVar1;
  }
  else {
    piVar3 = (int *)cplus_demangle_type();
    if (piVar3 == (int *)0x0) {
      return 0;
    }
    if ((*piVar3 == 0x27) && (*(int *)(piVar3[2] + 0x10) != 0)) {
      *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(piVar3[2] + 4);
    }
    pcVar8 = *(char **)(param_1 + 0xc);
    cVar5 = *pcVar8;
    pcVar1 = pcVar8 + 1;
    if (cVar5 == 'n') {
      uVar2 = 0x3d;
      *(char **)(param_1 + 0xc) = pcVar1;
      cVar5 = pcVar8[1];
    }
    else {
      uVar2 = 0x3c;
      pcVar1 = pcVar8;
    }
    pcVar8 = pcVar1;
    if (cVar5 == 'E') {
      iVar4 = 0;
    }
    else {
      do {
        if (cVar5 == '\0') {
          return 0;
        }
        pcVar8 = pcVar8 + 1;
        *(char **)(param_1 + 0xc) = pcVar8;
        cVar5 = *pcVar8;
      } while (cVar5 != 'E');
      iVar4 = (int)pcVar8 - (int)pcVar1;
    }
    iVar6 = *(int *)(param_1 + 0x14);
    puVar7 = (undefined4 *)0x0;
    if (iVar6 < *(int *)(param_1 + 0x18)) {
      puVar7 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar6 * 0x10);
      puVar7[1] = 0;
      *(int *)(param_1 + 0x14) = iVar6 + 1;
      if ((pcVar1 == (char *)0x0) || (iVar4 == 0)) {
        puVar7 = (undefined4 *)0x0;
      }
      else {
        puVar7[1] = 0;
        *puVar7 = 0;
        puVar7[2] = pcVar1;
        puVar7[3] = iVar4;
      }
    }
    uVar2 = FUN_0031a7a0(param_1,uVar2,piVar3,puVar7);
    pcVar1 = *(char **)(param_1 + 0xc);
    cVar5 = *pcVar1;
  }
  if (cVar5 != 'E') {
    return 0;
  }
  *(char **)(param_1 + 0xc) = pcVar1 + 1;
  return uVar2;
}

