
void gold::options::parse_choices
               (char *option_name,char *arg,char **retval,char **choices,int num_choices)

{
  _Alloc_hider _Var1;
  size_type sVar2;
  int iVar3;
  size_t sVar4;
  char *pcVar5;
  int unaff_EDI;
  bool bVar6;
  int local_40;
  string choices_list;
  
  __x86_get_pc_thunk_di();
  if (num_choices < 1) {
    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;
    choices_list._M_string_length = 0;
    choices_list.field_2._M_local_buf[0] = '\0';
  }
  else {
    local_40 = 0;
    iVar3 = local_40;
    do {
      local_40 = iVar3;
      iVar3 = strcmp(choices[local_40],arg);
      if (iVar3 == 0) {
        *retval = arg;
        return;
      }
      iVar3 = local_40 + 1;
    } while (num_choices != local_40 + 1);
    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;
    choices_list._M_string_length = 0;
    choices_list.field_2._M_local_buf[0] = '\0';
    iVar3 = 0;
    do {
      sVar2 = choices_list._M_string_length;
      pcVar5 = choices[iVar3];
      sVar4 = strlen(pcVar5);
      if (0x7fffffff - sVar2 < sVar4) {
                    /* WARNING: Subroutine does not return */
        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));
      }
                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */
      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);
      if (iVar3 != local_40) {
        if (0x7fffffff - choices_list._M_string_length < 2) {
                    /* WARNING: Subroutine does not return */
          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));
        }
        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);
      }
      bVar6 = iVar3 != local_40;
      iVar3 = iVar3 + 1;
    } while (bVar6);
  }
  _Var1._M_p = choices_list._M_dataplus._M_p;
  pcVar5 = (char *)gettext(unaff_EDI + 0x1b181f);
                    /* WARNING: Subroutine does not return */
  gold_fatal(pcVar5,option_name,_Var1._M_p);
}



void FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)

{
  char *__s;
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  size_t sVar4;
  undefined4 uVar5;
  int unaff_EDI;
  bool bVar6;
  int local_40;
  undefined1 *local_34;
  int local_30;
  undefined1 local_2c [28];
  
  FUN_000559ee();
  if (param_5 < 1) {
    local_34 = local_2c;
    local_30 = 0;
    local_2c[0] = 0;
  }
  else {
    local_40 = 0;
    iVar3 = local_40;
    do {
      local_40 = iVar3;
      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);
      if (iVar3 == 0) {
        *param_3 = param_2;
        return;
      }
      iVar3 = local_40 + 1;
    } while (param_5 != local_40 + 1);
    local_34 = local_2c;
    local_30 = 0;
    local_2c[0] = 0;
    iVar3 = 0;
    do {
      iVar2 = local_30;
      __s = *(char **)(param_4 + iVar3 * 4);
      sVar4 = strlen(__s);
      if (0x7fffffffU - iVar2 < sVar4) {
                    /* WARNING: Subroutine does not return */
        FUN_0022c7b0(unaff_EDI + 0x1a95d9);
      }
                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */
      FUN_001f05d0(&local_34,__s,sVar4);
      if (iVar3 != local_40) {
        if (0x7fffffffU - local_30 < 2) {
                    /* WARNING: Subroutine does not return */
          FUN_0022c7b0(unaff_EDI + 0x1a95d9);
        }
        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);
      }
      bVar6 = iVar3 != local_40;
      iVar3 = iVar3 + 1;
    } while (bVar6);
  }
  puVar1 = local_34;
  uVar5 = gettext(unaff_EDI + 0x1b181f);
                    /* WARNING: Subroutine does not return */
  FUN_00065450(uVar5,param_1,puVar1);
}


PUSH EBP
MOV EBP,ESP
PUSH EDI
CALL 0x000559ee
ADD EDI,0x2b19f7
PUSH ESI
PUSH EBX
SUB ESP,0x4c
MOV EAX,dword ptr [EBP + 0x18]
MOV ESI,dword ptr [EBP + 0xc]
TEST EAX,EAX
JLE 0x000dd709
XOR EDX,EDX
MOV dword ptr [EBP + -0x3c],EDX
JMP 0x000dd637
MOV EAX,dword ptr [EBP + -0x3c]
ADD EAX,0x1
CMP dword ptr [EBP + 0x18],EAX
JZ 0x000dd65f
MOV dword ptr [EBP + -0x3c],EAX
MOV EAX,dword ptr [EBP + 0x14]
MOV EDX,dword ptr [EBP + -0x3c]
SUB ESP,0x8
MOV EBX,EDI
PUSH ESI
PUSH dword ptr [EAX + EDX*0x4]
CALL 0x00029b10
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x000dd629
MOV EAX,dword ptr [EBP + 0x10]
MOV dword ptr [EAX],ESI
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
LEA EAX,[EBP + -0x28]
MOV dword ptr [EBP + -0x2c],0x0
XOR ESI,ESI
MOV dword ptr [EBP + -0x4c],EAX
MOV dword ptr [EBP + -0x30],EAX
LEA EAX,[EBP + -0x30]
MOV byte ptr [EBP + -0x28],0x0
MOV dword ptr [EBP + -0x44],0x0
MOV dword ptr [EBP + -0x48],EAX
JMP 0x000dd6d7
SUB ESP,0x4
PUSH EAX
PUSH dword ptr [EBP + -0x40]
PUSH dword ptr [EBP + -0x48]
CALL 0x001f05d0
ADD ESP,0x10
CMP ESI,dword ptr [EBP + -0x3c]
JZ 0x000dd6c7
MOV EAX,0x7fffffff
SUB EAX,dword ptr [EBP + -0x2c]
CMP EAX,0x1
JBE 0x000dd73e
SUB ESP,0x4
LEA EAX,[EDI + 0xfff0ff27]
PUSH 0x2
PUSH EAX
PUSH dword ptr [EBP + -0x48]
CALL 0x001f05d0
ADD ESP,0x10
LEA EAX,[ESI + 0x1]
CMP ESI,dword ptr [EBP + -0x3c]
JZ 0x000dd71d
MOV EBX,dword ptr [EBP + -0x2c]
MOV ESI,EAX
MOV dword ptr [EBP + -0x44],EBX
MOV EAX,dword ptr [EBP + 0x14]
SUB ESP,0xc
MOV EBX,EDI
MOV EAX,dword ptr [EAX + ESI*0x4]
PUSH EAX
MOV dword ptr [EBP + -0x40],EAX
CALL 0x000295f0
MOV ECX,0x7fffffff
SUB ECX,dword ptr [EBP + -0x44]
ADD ESP,0x10
CMP EAX,ECX
JBE 0x000dd688
SUB ESP,0xc
LEA EAX,[EDI + 0xffef7be2]
PUSH EAX
CALL 0x0022c7b0
LEA EAX,[EBP + -0x28]
MOV dword ptr [EBP + -0x2c],0x0
MOV dword ptr [EBP + -0x4c],EAX
MOV dword ptr [EBP + -0x30],EAX
MOV byte ptr [EBP + -0x28],0x0
SUB ESP,0xc
LEA EAX,[EDI + 0xffeffe28]
MOV ESI,dword ptr [EBP + -0x30]
MOV EBX,EDI
PUSH EAX
CALL 0x000293b0
ADD ESP,0xc
PUSH ESI
PUSH dword ptr [EBP + 0x8]
PUSH EAX
CALL 0x00065450
SUB ESP,0xc
LEA EAX,[EDI + 0xffef7be2]
PUSH EAX
CALL 0x0022c7b0
(translation_unit "void FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)\n\n{\n  char *__s;\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  size_t sVar4;\n  undefined4 uVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  puVar1 = local_34;\n  uVar5 = gettext(unaff_EDI + 0x1b181f);\n                    /* WARNING: Subroutine does not return */\n  FUN_00065450(uVar5,param_1,puVar1);\n}\n\n" (function_definition "void FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)\n\n{\n  char *__s;\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  size_t sVar4;\n  undefined4 uVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  puVar1 = local_34;\n  uVar5 = gettext(unaff_EDI + 0x1b181f);\n                    /* WARNING: Subroutine does not return */\n  FUN_00065450(uVar5,param_1,puVar1);\n}" primitive_type (function_declarator "FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)" identifier (parameter_list "(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  char *__s;\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  size_t sVar4;\n  undefined4 uVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  puVar1 = local_34;\n  uVar5 = gettext(unaff_EDI + 0x1b181f);\n                    /* WARNING: Subroutine does not return */\n  FUN_00065450(uVar5,param_1,puVar1);\n}" { (declaration "char *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "undefined1 *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "undefined1 local_2c [28];" type_identifier (array_declarator "local_2c [28]" identifier [ number_literal ]) ;) (expression_statement "FUN_000559ee();" (call_expression "FUN_000559ee()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" if (parenthesized_expression "(param_5 < 1)" ( (binary_expression "param_5 < 1" identifier < number_literal) )) (compound_statement "{\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }" { (expression_statement "local_34 = local_2c;" (assignment_expression "local_34 = local_2c" identifier = identifier) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_2c[0] = 0;" (assignment_expression "local_2c[0] = 0" (subscript_expression "local_2c[0]" identifier [ number_literal ]) = number_literal) ;) }) (else_clause "else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" else (compound_statement "{\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" { (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "iVar3 = local_40;" (assignment_expression "iVar3 = local_40" identifier = identifier) ;) (do_statement "do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);" do (compound_statement "{\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    }" { (expression_statement "local_40 = iVar3;" (assignment_expression "local_40 = iVar3" identifier = identifier) ;) (expression_statement "iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);" (assignment_expression "iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2)" identifier = (call_expression "strcmp(*(char **)(param_4 + local_40 * 4),param_2)" identifier (argument_list "(*(char **)(param_4 + local_40 * 4),param_2)" ( (pointer_expression "*(char **)(param_4 + local_40 * 4)" * (cast_expression "(char **)(param_4 + local_40 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + local_40 * 4)" ( (binary_expression "param_4 + local_40 * 4" identifier + (binary_expression "local_40 * 4" identifier * number_literal)) )))) , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        *param_3 = param_2;\n        return;\n      }" { (expression_statement "*param_3 = param_2;" (assignment_expression "*param_3 = param_2" (pointer_expression "*param_3" * identifier) = identifier) ;) (return_statement "return;" return ;) })) (expression_statement "iVar3 = local_40 + 1;" (assignment_expression "iVar3 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_5 != local_40 + 1)" ( (binary_expression "param_5 != local_40 + 1" identifier != (binary_expression "local_40 + 1" identifier + number_literal)) )) ;) (expression_statement "local_34 = local_2c;" (assignment_expression "local_34 = local_2c" identifier = identifier) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_2c[0] = 0;" (assignment_expression "local_2c[0] = 0" (subscript_expression "local_2c[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);" do (compound_statement "{\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    }" { (expression_statement "iVar2 = local_30;" (assignment_expression "iVar2 = local_30" identifier = identifier) ;) (expression_statement "__s = *(char **)(param_4 + iVar3 * 4);" (assignment_expression "__s = *(char **)(param_4 + iVar3 * 4)" identifier = (pointer_expression "*(char **)(param_4 + iVar3 * 4)" * (cast_expression "(char **)(param_4 + iVar3 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + iVar3 * 4)" ( (binary_expression "param_4 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (expression_statement "sVar4 = strlen(__s);" (assignment_expression "sVar4 = strlen(__s)" identifier = (call_expression "strlen(__s)" identifier (argument_list "(__s)" ( identifier )))) ;) (if_statement "if (0x7fffffffU - iVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }" if (parenthesized_expression "(0x7fffffffU - iVar2 < sVar4)" ( (binary_expression "0x7fffffffU - iVar2 < sVar4" (binary_expression "0x7fffffffU - iVar2" number_literal - identifier) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }" { comment (expression_statement "FUN_0022c7b0(unaff_EDI + 0x1a95d9);" (call_expression "FUN_0022c7b0(unaff_EDI + 0x1a95d9)" identifier (argument_list "(unaff_EDI + 0x1a95d9)" ( (binary_expression "unaff_EDI + 0x1a95d9" identifier + number_literal) ))) ;) })) comment (expression_statement "FUN_001f05d0(&local_34,__s,sVar4);" (call_expression "FUN_001f05d0(&local_34,__s,sVar4)" identifier (argument_list "(&local_34,__s,sVar4)" ( (pointer_expression "&local_34" & identifier) , identifier , identifier ))) ;) (if_statement "if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }" if (parenthesized_expression "(iVar3 != local_40)" ( (binary_expression "iVar3 != local_40" identifier != identifier) )) (compound_statement "{\n        if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }" { (if_statement "if (0x7fffffffU - local_30 < 2) {\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }" if (parenthesized_expression "(0x7fffffffU - local_30 < 2)" ( (binary_expression "0x7fffffffU - local_30 < 2" (binary_expression "0x7fffffffU - local_30" number_literal - identifier) < number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }" { comment (expression_statement "FUN_0022c7b0(unaff_EDI + 0x1a95d9);" (call_expression "FUN_0022c7b0(unaff_EDI + 0x1a95d9)" identifier (argument_list "(unaff_EDI + 0x1a95d9)" ( (binary_expression "unaff_EDI + 0x1a95d9" identifier + number_literal) ))) ;) })) (expression_statement "FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);" (call_expression "FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2)" identifier (argument_list "(&local_34,&UNK_001c191e + unaff_EDI,2)" ( (pointer_expression "&local_34" & identifier) , (binary_expression "&UNK_001c191e + unaff_EDI" (pointer_expression "&UNK_001c191e" & identifier) + identifier) , number_literal ))) ;) })) (expression_statement "bVar6 = iVar3 != local_40;" (assignment_expression "bVar6 = iVar3 != local_40" identifier = (binary_expression "iVar3 != local_40" identifier != identifier)) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar6)" ( identifier )) ;) }))) (expression_statement "puVar1 = local_34;" (assignment_expression "puVar1 = local_34" identifier = identifier) ;) (expression_statement "uVar5 = gettext(unaff_EDI + 0x1b181f);" (assignment_expression "uVar5 = gettext(unaff_EDI + 0x1b181f)" identifier = (call_expression "gettext(unaff_EDI + 0x1b181f)" identifier (argument_list "(unaff_EDI + 0x1b181f)" ( (binary_expression "unaff_EDI + 0x1b181f" identifier + number_literal) )))) ;) comment (expression_statement "FUN_00065450(uVar5,param_1,puVar1);" (call_expression "FUN_00065450(uVar5,param_1,puVar1)" identifier (argument_list "(uVar5,param_1,puVar1)" ( identifier , identifier , identifier ))) ;) })))
(translation_unit "void gold::options::parse_choices\n               (char *option_name,char *arg,char **retval,char **choices,int num_choices)\n\n{\n  _Alloc_hider _Var1;\n  size_type sVar2;\n  int iVar3;\n  size_t sVar4;\n  char *pcVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  string choices_list;\n  \n  __x86_get_pc_thunk_di();\n  if (num_choices < 1) {\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(choices[local_40],arg);\n      if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (num_choices != local_40 + 1);\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n    iVar3 = 0;\n    do {\n      sVar2 = choices_list._M_string_length;\n      pcVar5 = choices[iVar3];\n      sVar4 = strlen(pcVar5);\n      if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  _Var1._M_p = choices_list._M_dataplus._M_p;\n  pcVar5 = (char *)gettext(unaff_EDI + 0x1b181f);\n                    /* WARNING: Subroutine does not return */\n  gold_fatal(pcVar5,option_name,_Var1._M_p);\n}\n\n" (function_definition "void gold::options::parse_choices\n               (char *option_name,char *arg,char **retval,char **choices,int num_choices)\n\n{\n  _Alloc_hider _Var1;\n  size_type sVar2;\n  int iVar3;\n  size_t sVar4;\n  char *pcVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  string choices_list;\n  \n  __x86_get_pc_thunk_di();\n  if (num_choices < 1) {\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(choices[local_40],arg);\n      if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (num_choices != local_40 + 1);\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n    iVar3 = 0;\n    do {\n      sVar2 = choices_list._M_string_length;\n      pcVar5 = choices[iVar3];\n      sVar4 = strlen(pcVar5);\n      if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  _Var1._M_p = choices_list._M_dataplus._M_p;\n  pcVar5 = (char *)gettext(unaff_EDI + 0x1b181f);\n                    /* WARNING: Subroutine does not return */\n  gold_fatal(pcVar5,option_name,_Var1._M_p);\n}" primitive_type (ERROR "gold::options::" identifier : : identifier : :) (function_declarator "parse_choices\n               (char *option_name,char *arg,char **retval,char **choices,int num_choices)" identifier (parameter_list "(char *option_name,char *arg,char **retval,char **choices,int num_choices)" ( (parameter_declaration "char *option_name" primitive_type (pointer_declarator "*option_name" * identifier)) , (parameter_declaration "char *arg" primitive_type (pointer_declarator "*arg" * identifier)) , (parameter_declaration "char **retval" primitive_type (pointer_declarator "**retval" * (pointer_declarator "*retval" * identifier))) , (parameter_declaration "char **choices" primitive_type (pointer_declarator "**choices" * (pointer_declarator "*choices" * identifier))) , (parameter_declaration "int num_choices" primitive_type identifier) ))) (compound_statement "{\n  _Alloc_hider _Var1;\n  size_type sVar2;\n  int iVar3;\n  size_t sVar4;\n  char *pcVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  string choices_list;\n  \n  __x86_get_pc_thunk_di();\n  if (num_choices < 1) {\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(choices[local_40],arg);\n      if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (num_choices != local_40 + 1);\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n    iVar3 = 0;\n    do {\n      sVar2 = choices_list._M_string_length;\n      pcVar5 = choices[iVar3];\n      sVar4 = strlen(pcVar5);\n      if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  _Var1._M_p = choices_list._M_dataplus._M_p;\n  pcVar5 = (char *)gettext(unaff_EDI + 0x1b181f);\n                    /* WARNING: Subroutine does not return */\n  gold_fatal(pcVar5,option_name,_Var1._M_p);\n}" { (declaration "_Alloc_hider _Var1;" type_identifier identifier ;) (declaration "size_type sVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "string choices_list;" type_identifier identifier ;) (expression_statement "__x86_get_pc_thunk_di();" (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( ))) ;) (if_statement "if (num_choices < 1) {\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(choices[local_40],arg);\n      if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (num_choices != local_40 + 1);\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n    iVar3 = 0;\n    do {\n      sVar2 = choices_list._M_string_length;\n      pcVar5 = choices[iVar3];\n      sVar4 = strlen(pcVar5);\n      if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" if (parenthesized_expression "(num_choices < 1)" ( (binary_expression "num_choices < 1" identifier < number_literal) )) (compound_statement "{\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n  }" { (expression_statement "choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;" (assignment_expression "choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2" (field_expression "choices_list._M_dataplus._M_p" (field_expression "choices_list._M_dataplus" identifier . field_identifier) . field_identifier) = (binary_expression "(pointer)&choices_list.field_2" (parenthesized_expression "(pointer)" ( identifier )) & (field_expression "choices_list.field_2" identifier . field_identifier))) ;) (expression_statement "choices_list._M_string_length = 0;" (assignment_expression "choices_list._M_string_length = 0" (field_expression "choices_list._M_string_length" identifier . field_identifier) = number_literal) ;) (expression_statement "choices_list.field_2._M_local_buf[0] = '\0';" (assignment_expression "choices_list.field_2._M_local_buf[0] = '\0'" (subscript_expression "choices_list.field_2._M_local_buf[0]" (field_expression "choices_list.field_2._M_local_buf" (field_expression "choices_list.field_2" identifier . field_identifier) . field_identifier) [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) }) (else_clause "else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(choices[local_40],arg);\n      if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (num_choices != local_40 + 1);\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n    iVar3 = 0;\n    do {\n      sVar2 = choices_list._M_string_length;\n      pcVar5 = choices[iVar3];\n      sVar4 = strlen(pcVar5);\n      if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" else (compound_statement "{\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(choices[local_40],arg);\n      if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (num_choices != local_40 + 1);\n    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;\n    choices_list._M_string_length = 0;\n    choices_list.field_2._M_local_buf[0] = '\0';\n    iVar3 = 0;\n    do {\n      sVar2 = choices_list._M_string_length;\n      pcVar5 = choices[iVar3];\n      sVar4 = strlen(pcVar5);\n      if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" { (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "iVar3 = local_40;" (assignment_expression "iVar3 = local_40" identifier = identifier) ;) (do_statement "do {\n      local_40 = iVar3;\n      iVar3 = strcmp(choices[local_40],arg);\n      if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (num_choices != local_40 + 1);" do (compound_statement "{\n      local_40 = iVar3;\n      iVar3 = strcmp(choices[local_40],arg);\n      if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    }" { (expression_statement "local_40 = iVar3;" (assignment_expression "local_40 = iVar3" identifier = identifier) ;) (expression_statement "iVar3 = strcmp(choices[local_40],arg);" (assignment_expression "iVar3 = strcmp(choices[local_40],arg)" identifier = (call_expression "strcmp(choices[local_40],arg)" identifier (argument_list "(choices[local_40],arg)" ( (subscript_expression "choices[local_40]" identifier [ identifier ]) , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n        *retval = arg;\n        return;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        *retval = arg;\n        return;\n      }" { (expression_statement "*retval = arg;" (assignment_expression "*retval = arg" (pointer_expression "*retval" * identifier) = identifier) ;) (return_statement "return;" return ;) })) (expression_statement "iVar3 = local_40 + 1;" (assignment_expression "iVar3 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(num_choices != local_40 + 1)" ( (binary_expression "num_choices != local_40 + 1" identifier != (binary_expression "local_40 + 1" identifier + number_literal)) )) ;) (expression_statement "choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;" (assignment_expression "choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2" (field_expression "choices_list._M_dataplus._M_p" (field_expression "choices_list._M_dataplus" identifier . field_identifier) . field_identifier) = (binary_expression "(pointer)&choices_list.field_2" (parenthesized_expression "(pointer)" ( identifier )) & (field_expression "choices_list.field_2" identifier . field_identifier))) ;) (expression_statement "choices_list._M_string_length = 0;" (assignment_expression "choices_list._M_string_length = 0" (field_expression "choices_list._M_string_length" identifier . field_identifier) = number_literal) ;) (expression_statement "choices_list.field_2._M_local_buf[0] = '\0';" (assignment_expression "choices_list.field_2._M_local_buf[0] = '\0'" (subscript_expression "choices_list.field_2._M_local_buf[0]" (field_expression "choices_list.field_2._M_local_buf" (field_expression "choices_list.field_2" identifier . field_identifier) . field_identifier) [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      sVar2 = choices_list._M_string_length;\n      pcVar5 = choices[iVar3];\n      sVar4 = strlen(pcVar5);\n      if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);" do (compound_statement "{\n      sVar2 = choices_list._M_string_length;\n      pcVar5 = choices[iVar3];\n      sVar4 = strlen(pcVar5);\n      if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }\n                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */\n      std::string::_M_append((string *)&choices_list,pcVar5,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    }" { (expression_statement "sVar2 = choices_list._M_string_length;" (assignment_expression "sVar2 = choices_list._M_string_length" identifier = (field_expression "choices_list._M_string_length" identifier . field_identifier)) ;) (expression_statement "pcVar5 = choices[iVar3];" (assignment_expression "pcVar5 = choices[iVar3]" identifier = (subscript_expression "choices[iVar3]" identifier [ identifier ])) ;) (expression_statement "sVar4 = strlen(pcVar5);" (assignment_expression "sVar4 = strlen(pcVar5)" identifier = (call_expression "strlen(pcVar5)" identifier (argument_list "(pcVar5)" ( identifier )))) ;) (if_statement "if (0x7fffffff - sVar2 < sVar4) {\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }" if (parenthesized_expression "(0x7fffffff - sVar2 < sVar4)" ( (binary_expression "0x7fffffff - sVar2 < sVar4" (binary_expression "0x7fffffff - sVar2" number_literal - identifier) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n      }" { comment (labeled_statement "std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));" statement_identifier : (ERROR ":" :) (expression_statement "__throw_length_error((char *)(unaff_EDI + 0x1a95d9));" (call_expression "__throw_length_error((char *)(unaff_EDI + 0x1a95d9))" identifier (argument_list "((char *)(unaff_EDI + 0x1a95d9))" ( (cast_expression "(char *)(unaff_EDI + 0x1a95d9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x1a95d9)" ( (binary_expression "unaff_EDI + 0x1a95d9" identifier + number_literal) ))) ))) ;)) })) comment (labeled_statement "std::string::_M_append((string *)&choices_list,pcVar5,sVar4);" statement_identifier : (ERROR ":" :) (labeled_statement "string::_M_append((string *)&choices_list,pcVar5,sVar4);" statement_identifier : (ERROR ":" :) (expression_statement "_M_append((string *)&choices_list,pcVar5,sVar4);" (call_expression "_M_append((string *)&choices_list,pcVar5,sVar4)" identifier (argument_list "((string *)&choices_list,pcVar5,sVar4)" ( (cast_expression "(string *)&choices_list" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&choices_list" & identifier)) , identifier , identifier ))) ;))) (if_statement "if (iVar3 != local_40) {\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }" if (parenthesized_expression "(iVar3 != local_40)" ( (binary_expression "iVar3 != local_40" identifier != identifier) )) (compound_statement "{\n        if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }\n        std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);\n      }" { (if_statement "if (0x7fffffff - choices_list._M_string_length < 2) {\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }" if (parenthesized_expression "(0x7fffffff - choices_list._M_string_length < 2)" ( (binary_expression "0x7fffffff - choices_list._M_string_length < 2" (binary_expression "0x7fffffff - choices_list._M_string_length" number_literal - (field_expression "choices_list._M_string_length" identifier . field_identifier)) < number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));\n        }" { comment (labeled_statement "std::__throw_length_error((char *)(unaff_EDI + 0x1a95d9));" statement_identifier : (ERROR ":" :) (expression_statement "__throw_length_error((char *)(unaff_EDI + 0x1a95d9));" (call_expression "__throw_length_error((char *)(unaff_EDI + 0x1a95d9))" identifier (argument_list "((char *)(unaff_EDI + 0x1a95d9))" ( (cast_expression "(char *)(unaff_EDI + 0x1a95d9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x1a95d9)" ( (binary_expression "unaff_EDI + 0x1a95d9" identifier + number_literal) ))) ))) ;)) })) (labeled_statement "std::string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);" statement_identifier : (ERROR ":" :) (labeled_statement "string::_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);" statement_identifier : (ERROR ":" :) (expression_statement "_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2);" (call_expression "_M_append((string *)&choices_list,&UNK_001c191e + unaff_EDI,2)" identifier (argument_list "((string *)&choices_list,&UNK_001c191e + unaff_EDI,2)" ( (cast_expression "(string *)&choices_list" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&choices_list" & identifier)) , (binary_expression "&UNK_001c191e + unaff_EDI" (pointer_expression "&UNK_001c191e" & identifier) + identifier) , number_literal ))) ;))) })) (expression_statement "bVar6 = iVar3 != local_40;" (assignment_expression "bVar6 = iVar3 != local_40" identifier = (binary_expression "iVar3 != local_40" identifier != identifier)) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar6)" ( identifier )) ;) }))) (expression_statement "_Var1._M_p = choices_list._M_dataplus._M_p;" (assignment_expression "_Var1._M_p = choices_list._M_dataplus._M_p" (field_expression "_Var1._M_p" identifier . field_identifier) = (field_expression "choices_list._M_dataplus._M_p" (field_expression "choices_list._M_dataplus" identifier . field_identifier) . field_identifier)) ;) (expression_statement "pcVar5 = (char *)gettext(unaff_EDI + 0x1b181f);" (assignment_expression "pcVar5 = (char *)gettext(unaff_EDI + 0x1b181f)" identifier = (cast_expression "(char *)gettext(unaff_EDI + 0x1b181f)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext(unaff_EDI + 0x1b181f)" identifier (argument_list "(unaff_EDI + 0x1b181f)" ( (binary_expression "unaff_EDI + 0x1b181f" identifier + number_literal) ))))) ;) comment (expression_statement "gold_fatal(pcVar5,option_name,_Var1._M_p);" (call_expression "gold_fatal(pcVar5,option_name,_Var1._M_p)" identifier (argument_list "(pcVar5,option_name,_Var1._M_p)" ( identifier , identifier , (field_expression "_Var1._M_p" identifier . field_identifier) ))) ;) })))
(translation_unit "void FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)\n\n{\n  char *__s;\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  size_t sVar4;\n  undefined4 uVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  puVar1 = local_34;\n  uVar5 = gettext(unaff_EDI + 0x1b181f);\n                    \n  FUN_00065450(uVar5,param_1,puVar1);\n}\n\n" (function_definition "void FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)\n\n{\n  char *__s;\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  size_t sVar4;\n  undefined4 uVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  puVar1 = local_34;\n  uVar5 = gettext(unaff_EDI + 0x1b181f);\n                    \n  FUN_00065450(uVar5,param_1,puVar1);\n}" primitive_type (function_declarator "FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)" identifier (parameter_list "(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  char *__s;\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  size_t sVar4;\n  undefined4 uVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  puVar1 = local_34;\n  uVar5 = gettext(unaff_EDI + 0x1b181f);\n                    \n  FUN_00065450(uVar5,param_1,puVar1);\n}" { (declaration "char *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "undefined1 *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "undefined1 local_2c [28];" type_identifier (array_declarator "local_2c [28]" identifier [ number_literal ]) ;) (expression_statement "FUN_000559ee();" (call_expression "FUN_000559ee()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" if (parenthesized_expression "(param_5 < 1)" ( (binary_expression "param_5 < 1" identifier < number_literal) )) (compound_statement "{\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }" { (expression_statement "local_34 = local_2c;" (assignment_expression "local_34 = local_2c" identifier = identifier) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_2c[0] = 0;" (assignment_expression "local_2c[0] = 0" (subscript_expression "local_2c[0]" identifier [ number_literal ]) = number_literal) ;) }) (else_clause "else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" else (compound_statement "{\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" { (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;) (expression_statement "iVar3 = local_40;" (assignment_expression "iVar3 = local_40" identifier = identifier) ;) (do_statement "do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);" do (compound_statement "{\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    }" { (expression_statement "local_40 = iVar3;" (assignment_expression "local_40 = iVar3" identifier = identifier) ;) (expression_statement "iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);" (assignment_expression "iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2)" identifier = (call_expression "strcmp(*(char **)(param_4 + local_40 * 4),param_2)" identifier (argument_list "(*(char **)(param_4 + local_40 * 4),param_2)" ( (pointer_expression "*(char **)(param_4 + local_40 * 4)" * (cast_expression "(char **)(param_4 + local_40 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + local_40 * 4)" ( (binary_expression "param_4 + local_40 * 4" identifier + (binary_expression "local_40 * 4" identifier * number_literal)) )))) , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        *param_3 = param_2;\n        return;\n      }" { (expression_statement "*param_3 = param_2;" (assignment_expression "*param_3 = param_2" (pointer_expression "*param_3" * identifier) = identifier) ;) (return_statement "return;" return ;) })) (expression_statement "iVar3 = local_40 + 1;" (assignment_expression "iVar3 = local_40 + 1" identifier = (binary_expression "local_40 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_5 != local_40 + 1)" ( (binary_expression "param_5 != local_40 + 1" identifier != (binary_expression "local_40 + 1" identifier + number_literal)) )) ;) (expression_statement "local_34 = local_2c;" (assignment_expression "local_34 = local_2c" identifier = identifier) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_2c[0] = 0;" (assignment_expression "local_2c[0] = 0" (subscript_expression "local_2c[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);" do (compound_statement "{\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    }" { (expression_statement "iVar2 = local_30;" (assignment_expression "iVar2 = local_30" identifier = identifier) ;) (expression_statement "__s = *(char **)(param_4 + iVar3 * 4);" (assignment_expression "__s = *(char **)(param_4 + iVar3 * 4)" identifier = (pointer_expression "*(char **)(param_4 + iVar3 * 4)" * (cast_expression "(char **)(param_4 + iVar3 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + iVar3 * 4)" ( (binary_expression "param_4 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (expression_statement "sVar4 = strlen(__s);" (assignment_expression "sVar4 = strlen(__s)" identifier = (call_expression "strlen(__s)" identifier (argument_list "(__s)" ( identifier )))) ;) (if_statement "if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }" if (parenthesized_expression "(0x7fffffffU - iVar2 < sVar4)" ( (binary_expression "0x7fffffffU - iVar2 < sVar4" (binary_expression "0x7fffffffU - iVar2" number_literal - identifier) < identifier) )) (compound_statement "{\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }" { (expression_statement "FUN_0022c7b0(unaff_EDI + 0x1a95d9);" (call_expression "FUN_0022c7b0(unaff_EDI + 0x1a95d9)" identifier (argument_list "(unaff_EDI + 0x1a95d9)" ( (binary_expression "unaff_EDI + 0x1a95d9" identifier + number_literal) ))) ;) })) (expression_statement "FUN_001f05d0(&local_34,__s,sVar4);" (call_expression "FUN_001f05d0(&local_34,__s,sVar4)" identifier (argument_list "(&local_34,__s,sVar4)" ( (pointer_expression "&local_34" & identifier) , identifier , identifier ))) ;) (if_statement "if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }" if (parenthesized_expression "(iVar3 != local_40)" ( (binary_expression "iVar3 != local_40" identifier != identifier) )) (compound_statement "{\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }" { (if_statement "if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }" if (parenthesized_expression "(0x7fffffffU - local_30 < 2)" ( (binary_expression "0x7fffffffU - local_30 < 2" (binary_expression "0x7fffffffU - local_30" number_literal - identifier) < number_literal) )) (compound_statement "{\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }" { (expression_statement "FUN_0022c7b0(unaff_EDI + 0x1a95d9);" (call_expression "FUN_0022c7b0(unaff_EDI + 0x1a95d9)" identifier (argument_list "(unaff_EDI + 0x1a95d9)" ( (binary_expression "unaff_EDI + 0x1a95d9" identifier + number_literal) ))) ;) })) (expression_statement "FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);" (call_expression "FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2)" identifier (argument_list "(&local_34,&UNK_001c191e + unaff_EDI,2)" ( (pointer_expression "&local_34" & identifier) , (binary_expression "&UNK_001c191e + unaff_EDI" (pointer_expression "&UNK_001c191e" & identifier) + identifier) , number_literal ))) ;) })) (expression_statement "bVar6 = iVar3 != local_40;" (assignment_expression "bVar6 = iVar3 != local_40" identifier = (binary_expression "iVar3 != local_40" identifier != identifier)) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar6)" ( identifier )) ;) }))) (expression_statement "puVar1 = local_34;" (assignment_expression "puVar1 = local_34" identifier = identifier) ;) (expression_statement "uVar5 = gettext(unaff_EDI + 0x1b181f);" (assignment_expression "uVar5 = gettext(unaff_EDI + 0x1b181f)" identifier = (call_expression "gettext(unaff_EDI + 0x1b181f)" identifier (argument_list "(unaff_EDI + 0x1b181f)" ( (binary_expression "unaff_EDI + 0x1b181f" identifier + number_literal) )))) ;) (expression_statement "FUN_00065450(uVar5,param_1,puVar1);" (call_expression "FUN_00065450(uVar5,param_1,puVar1)" identifier (argument_list "(uVar5,param_1,puVar1)" ( identifier , identifier , identifier ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) )) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression 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 + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression (pointer_expression & IDENT) + IDENT) , LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) })))
(function_definition "void FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)\n\n{\n  char *__s;\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  size_t sVar4;\n  undefined4 uVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  puVar1 = local_34;\n  uVar5 = gettext(unaff_EDI + 0x1b181f);\n                    \n  FUN_00065450(uVar5,param_1,puVar1);\n}" (primitive_type "void") (function_declarator "FUN_000dd600(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)" (identifier "FUN_000dd600") (parameter_list "(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 *param_3" (type_identifier "undefined4") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")"))) (compound_statement "{\n  char *__s;\n  undefined1 *puVar1;\n  int iVar2;\n  int iVar3;\n  size_t sVar4;\n  undefined4 uVar5;\n  int unaff_EDI;\n  bool bVar6;\n  int local_40;\n  undefined1 *local_34;\n  int local_30;\n  undefined1 local_2c [28];\n  \n  FUN_000559ee();\n  if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }\n  puVar1 = local_34;\n  uVar5 = gettext(unaff_EDI + 0x1b181f);\n                    \n  FUN_00065450(uVar5,param_1,puVar1);\n}" ({ "{") (declaration "char *__s;" (primitive_type "char") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "undefined1 *puVar1;" (type_identifier "undefined1") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "size_t sVar4;" (primitive_type "size_t") (identifier "sVar4") (; ";")) (declaration "undefined4 uVar5;" (type_identifier "undefined4") (identifier "uVar5") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (declaration "bool bVar6;" (primitive_type "bool") (identifier "bVar6") (; ";")) (declaration "int local_40;" (primitive_type "int") (identifier "local_40") (; ";")) (declaration "undefined1 *local_34;" (type_identifier "undefined1") (pointer_declarator "*local_34" (* "*") (identifier "local_34")) (; ";")) (declaration "int local_30;" (primitive_type "int") (identifier "local_30") (; ";")) (declaration "undefined1 local_2c [28];" (type_identifier "undefined1") (array_declarator "local_2c [28]" (identifier "local_2c") ([ "[") (number_literal "28") (] "]")) (; ";")) (expression_statement "FUN_000559ee();" (call_expression "FUN_000559ee()" (identifier "FUN_000559ee") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (param_5 < 1) {\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }\n  else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" (if "if") (parenthesized_expression "(param_5 < 1)" (( "(") (binary_expression "param_5 < 1" (identifier "param_5") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n  }" ({ "{") (expression_statement "local_34 = local_2c;" (assignment_expression "local_34 = local_2c" (identifier "local_34") (= "=") (identifier "local_2c")) (; ";")) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" (identifier "local_30") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_2c[0] = 0;" (assignment_expression "local_2c[0] = 0" (subscript_expression "local_2c[0]" (identifier "local_2c") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" (else "else") (compound_statement "{\n    local_40 = 0;\n    iVar3 = local_40;\n    do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);\n    local_34 = local_2c;\n    local_30 = 0;\n    local_2c[0] = 0;\n    iVar3 = 0;\n    do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);\n  }" ({ "{") (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" (identifier "local_40") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar3 = local_40;" (assignment_expression "iVar3 = local_40" (identifier "iVar3") (= "=") (identifier "local_40")) (; ";")) (do_statement "do {\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    } while (param_5 != local_40 + 1);" (do "do") (compound_statement "{\n      local_40 = iVar3;\n      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);\n      if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }\n      iVar3 = local_40 + 1;\n    }" ({ "{") (expression_statement "local_40 = iVar3;" (assignment_expression "local_40 = iVar3" (identifier "local_40") (= "=") (identifier "iVar3")) (; ";")) (expression_statement "iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);" (assignment_expression "iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2)" (identifier "iVar3") (= "=") (call_expression "strcmp(*(char **)(param_4 + local_40 * 4),param_2)" (identifier "strcmp") (argument_list "(*(char **)(param_4 + local_40 * 4),param_2)" (( "(") (pointer_expression "*(char **)(param_4 + local_40 * 4)" (* "*") (cast_expression "(char **)(param_4 + local_40 * 4)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_4 + local_40 * 4)" (( "(") (binary_expression "param_4 + local_40 * 4" (identifier "param_4") (+ "+") (binary_expression "local_40 * 4" (identifier "local_40") (* "*") (number_literal "4"))) () ")")))) (, ",") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n        *param_3 = param_2;\n        return;\n      }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        *param_3 = param_2;\n        return;\n      }" ({ "{") (expression_statement "*param_3 = param_2;" (assignment_expression "*param_3 = param_2" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "param_2")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "iVar3 = local_40 + 1;" (assignment_expression "iVar3 = local_40 + 1" (identifier "iVar3") (= "=") (binary_expression "local_40 + 1" (identifier "local_40") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_5 != local_40 + 1)" (( "(") (binary_expression "param_5 != local_40 + 1" (identifier "param_5") (!= "!=") (binary_expression "local_40 + 1" (identifier "local_40") (+ "+") (number_literal "1"))) () ")")) (; ";")) (expression_statement "local_34 = local_2c;" (assignment_expression "local_34 = local_2c" (identifier "local_34") (= "=") (identifier "local_2c")) (; ";")) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" (identifier "local_30") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_2c[0] = 0;" (assignment_expression "local_2c[0] = 0" (subscript_expression "local_2c[0]" (identifier "local_2c") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    } while (bVar6);" (do "do") (compound_statement "{\n      iVar2 = local_30;\n      __s = *(char **)(param_4 + iVar3 * 4);\n      sVar4 = strlen(__s);\n      if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }\n                    \n      FUN_001f05d0(&local_34,__s,sVar4);\n      if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }\n      bVar6 = iVar3 != local_40;\n      iVar3 = iVar3 + 1;\n    }" ({ "{") (expression_statement "iVar2 = local_30;" (assignment_expression "iVar2 = local_30" (identifier "iVar2") (= "=") (identifier "local_30")) (; ";")) (expression_statement "__s = *(char **)(param_4 + iVar3 * 4);" (assignment_expression "__s = *(char **)(param_4 + iVar3 * 4)" (identifier "__s") (= "=") (pointer_expression "*(char **)(param_4 + iVar3 * 4)" (* "*") (cast_expression "(char **)(param_4 + iVar3 * 4)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_4 + iVar3 * 4)" (( "(") (binary_expression "param_4 + iVar3 * 4" (identifier "param_4") (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "sVar4 = strlen(__s);" (assignment_expression "sVar4 = strlen(__s)" (identifier "sVar4") (= "=") (call_expression "strlen(__s)" (identifier "strlen") (argument_list "(__s)" (( "(") (identifier "__s") () ")")))) (; ";")) (if_statement "if (0x7fffffffU - iVar2 < sVar4) {\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }" (if "if") (parenthesized_expression "(0x7fffffffU - iVar2 < sVar4)" (( "(") (binary_expression "0x7fffffffU - iVar2 < sVar4" (binary_expression "0x7fffffffU - iVar2" (number_literal "0x7fffffffU") (- "-") (identifier "iVar2")) (< "<") (identifier "sVar4")) () ")")) (compound_statement "{\n                    \n        FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n      }" ({ "{") (expression_statement "FUN_0022c7b0(unaff_EDI + 0x1a95d9);" (call_expression "FUN_0022c7b0(unaff_EDI + 0x1a95d9)" (identifier "FUN_0022c7b0") (argument_list "(unaff_EDI + 0x1a95d9)" (( "(") (binary_expression "unaff_EDI + 0x1a95d9" (identifier "unaff_EDI") (+ "+") (number_literal "0x1a95d9")) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_001f05d0(&local_34,__s,sVar4);" (call_expression "FUN_001f05d0(&local_34,__s,sVar4)" (identifier "FUN_001f05d0") (argument_list "(&local_34,__s,sVar4)" (( "(") (pointer_expression "&local_34" (& "&") (identifier "local_34")) (, ",") (identifier "__s") (, ",") (identifier "sVar4") () ")"))) (; ";")) (if_statement "if (iVar3 != local_40) {\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }" (if "if") (parenthesized_expression "(iVar3 != local_40)" (( "(") (binary_expression "iVar3 != local_40" (identifier "iVar3") (!= "!=") (identifier "local_40")) () ")")) (compound_statement "{\n        if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }\n        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);\n      }" ({ "{") (if_statement "if (0x7fffffffU - local_30 < 2) {\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }" (if "if") (parenthesized_expression "(0x7fffffffU - local_30 < 2)" (( "(") (binary_expression "0x7fffffffU - local_30 < 2" (binary_expression "0x7fffffffU - local_30" (number_literal "0x7fffffffU") (- "-") (identifier "local_30")) (< "<") (number_literal "2")) () ")")) (compound_statement "{\n                    \n          FUN_0022c7b0(unaff_EDI + 0x1a95d9);\n        }" ({ "{") (expression_statement "FUN_0022c7b0(unaff_EDI + 0x1a95d9);" (call_expression "FUN_0022c7b0(unaff_EDI + 0x1a95d9)" (identifier "FUN_0022c7b0") (argument_list "(unaff_EDI + 0x1a95d9)" (( "(") (binary_expression "unaff_EDI + 0x1a95d9" (identifier "unaff_EDI") (+ "+") (number_literal "0x1a95d9")) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);" (call_expression "FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2)" (identifier "FUN_001f05d0") (argument_list "(&local_34,&UNK_001c191e + unaff_EDI,2)" (( "(") (pointer_expression "&local_34" (& "&") (identifier "local_34")) (, ",") (binary_expression "&UNK_001c191e + unaff_EDI" (pointer_expression "&UNK_001c191e" (& "&") (identifier "UNK_001c191e")) (+ "+") (identifier "unaff_EDI")) (, ",") (number_literal "2") () ")"))) (; ";")) (} "}"))) (expression_statement "bVar6 = iVar3 != local_40;" (assignment_expression "bVar6 = iVar3 != local_40" (identifier "bVar6") (= "=") (binary_expression "iVar3 != local_40" (identifier "iVar3") (!= "!=") (identifier "local_40"))) (; ";")) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar6)" (( "(") (identifier "bVar6") () ")")) (; ";")) (} "}")))) (expression_statement "puVar1 = local_34;" (assignment_expression "puVar1 = local_34" (identifier "puVar1") (= "=") (identifier "local_34")) (; ";")) (expression_statement "uVar5 = gettext(unaff_EDI + 0x1b181f);" (assignment_expression "uVar5 = gettext(unaff_EDI + 0x1b181f)" (identifier "uVar5") (= "=") (call_expression "gettext(unaff_EDI + 0x1b181f)" (identifier "gettext") (argument_list "(unaff_EDI + 0x1b181f)" (( "(") (binary_expression "unaff_EDI + 0x1b181f" (identifier "unaff_EDI") (+ "+") (number_literal "0x1b181f")) () ")")))) (; ";")) (expression_statement "FUN_00065450(uVar5,param_1,puVar1);" (call_expression "FUN_00065450(uVar5,param_1,puVar1)" (identifier "FUN_00065450") (argument_list "(uVar5,param_1,puVar1)" (( "(") (identifier "uVar5") (, ",") (identifier "param_1") (, ",") (identifier "puVar1") () ")"))) (; ";")) (} "}")))

void gold::options::function_1
               (char *option_name,char *arg,char **retval,char **choices,int var_2)

{
  type_1 _Var1;
  type_2 var_7;
  int var_4;
  size_t var_8;
  char *pcVar5;
  int var_10;
  bool bVar6;
  int var_5;
  type_3 choices_list;
  
  var_1();
  if (var_2 < 1) {
    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;
    choices_list._M_string_length = 0;
    choices_list.field_2._M_local_buf[0] = '\0';
  }
  else {
    var_5 = 0;
    var_4 = var_5;
    do {
      var_5 = var_4;
      var_4 = var_3(choices[var_5],arg);
      if (var_4 == 0) {
        *retval = arg;
        return;
      }
      var_4 = var_5 + 1;
    } while (var_2 != var_5 + 1);
    choices_list._M_dataplus._M_p = (pointer)&choices_list.field_2;
    choices_list._M_string_length = 0;
    choices_list.field_2._M_local_buf[0] = '\0';
    var_4 = 0;
    do {
      var_7 = choices_list._M_string_length;
      pcVar5 = choices[var_4];
      var_8 = var_6(pcVar5);
      if (0x7fffffff - var_7 < var_8) {
                    /* WARNING: Subroutine does not return */
        std::var_9((char *)(var_10 + 0x1a95d9));
      }
                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */
      std::string::var_11((type_3 *)&choices_list,pcVar5,var_8);
      if (var_4 != var_5) {
        if (0x7fffffff - choices_list._M_string_length < 2) {
                    /* WARNING: Subroutine does not return */
          std::var_9((char *)(var_10 + 0x1a95d9));
        }
        std::string::var_11((type_3 *)&choices_list,&UNK_001c191e + var_10,2);
      }
      bVar6 = var_4 != var_5;
      var_4 = var_4 + 1;
    } while (bVar6);
  }
  _Var1._M_p = choices_list._M_dataplus._M_p;
  pcVar5 = (char *)var_12(var_10 + 0x1b181f);
                    /* WARNING: Subroutine does not return */
  var_13(pcVar5,option_name,_Var1._M_p);
}


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

void MASKED(undefined4 param_1,char *param_2,undefined4 *param_3,int param_4,int param_5)

{
  char *__s;
  undefined1 *puVar1;
  int iVar2;
  int iVar3;
  size_t sVar4;
  undefined4 uVar5;
  int unaff_EDI;
  bool bVar6;
  int local_40;
  undefined1 *local_34;
  int local_30;
  undefined1 local_2c [28];
  
  FUN_000559ee();
  if (param_5 < 1) {
    local_34 = local_2c;
    local_30 = 0;
    local_2c[0] = 0;
  }
  else {
    local_40 = 0;
    iVar3 = local_40;
    do {
      local_40 = iVar3;
      iVar3 = strcmp(*(char **)(param_4 + local_40 * 4),param_2);
      if (iVar3 == 0) {
        *param_3 = param_2;
        return;
      }
      iVar3 = local_40 + 1;
    } while (param_5 != local_40 + 1);
    local_34 = local_2c;
    local_30 = 0;
    local_2c[0] = 0;
    iVar3 = 0;
    do {
      iVar2 = local_30;
      __s = *(char **)(param_4 + iVar3 * 4);
      sVar4 = strlen(__s);
      if (0x7fffffffU - iVar2 < sVar4) {
                    /* WARNING: Subroutine does not return */
        FUN_0022c7b0(unaff_EDI + 0x1a95d9);
      }
                    /* try { // try from 000dd692 to 000dd74c has its CatchHandler @ 000dd74d */
      FUN_001f05d0(&local_34,__s,sVar4);
      if (iVar3 != local_40) {
        if (0x7fffffffU - local_30 < 2) {
                    /* WARNING: Subroutine does not return */
          FUN_0022c7b0(unaff_EDI + 0x1a95d9);
        }
        FUN_001f05d0(&local_34,&UNK_001c191e + unaff_EDI,2);
      }
      bVar6 = iVar3 != local_40;
      iVar3 = iVar3 + 1;
    } while (bVar6);
  }
  puVar1 = local_34;
  uVar5 = gettext(unaff_EDI + 0x1b181f);
                    /* WARNING: Subroutine does not return */
  FUN_00065450(uVar5,param_1,puVar1);
}

