
/* WARNING: Type propagation algorithm not settling */

int setup_archive(archive_info *arch,char *file_name,FILE *file,bfd_boolean is_thin_archive,
                 bfd_boolean read_symbols)

{
  char cVar1;
  int iVar2;
  char *pcVar3;
  size_t sVar4;
  ulong uVar5;
  long lVar6;
  ar_hdr *paVar7;
  ar_hdr *__ptr;
  byte *pbVar8;
  bool bVar9;
  bool bVar10;
  undefined1 uVar11;
  bool bVar12;
  undefined1 uVar13;
  byte bVar14;
  
  bVar14 = 0;
  pcVar3 = strdup(file_name);
  arch->file = file;
  arch->file_name = pcVar3;
  arch->index_num = 0;
  arch->index_array = (elf_vma *)0x0;
  arch->sym_table = (char *)0x0;
  arch->sym_size = 0;
  arch->longnames = (char *)0x0;
  arch->longnames_size = 0;
  arch->nested_member_origin = 0;
  arch->is_thin_archive = is_thin_archive;
  arch->uses_64bit_indicies = 0;
  arch->next_arhdr_offset = 8;
  iVar2 = fseek((FILE *)file,8,0);
  pcVar3 = "%s: failed to seek to first archive header\n";
  if (iVar2 != 0) goto LAB_0015579c;
  __ptr = &arch->arhdr;
  sVar4 = fread(__ptr,1,0x3c,(FILE *)file);
  bVar9 = sVar4 < 0x3c;
  bVar12 = sVar4 == 0x3c;
  if (!bVar12) {
    if (sVar4 == 0) {
      return 0;
    }
    pcVar3 = "%s: failed to read archive header\n";
    goto LAB_0015579c;
  }
  lVar6 = 0x10;
  paVar7 = __ptr;
  pbVar8 = (byte *)"/               ";
  do {
    if (lVar6 == 0) break;
    lVar6 = lVar6 + -1;
    bVar9 = (byte)paVar7->ar_name[0] < *pbVar8;
    bVar12 = paVar7->ar_name[0] == *pbVar8;
    paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);
    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;
  } while (bVar12);
  bVar10 = false;
  bVar9 = (!bVar9 && !bVar12) == bVar9;
  if (bVar9) {
    iVar2 = process_archive_index_and_symbols(arch,4,read_symbols);
joined_r0x001557d2:
    uVar13 = iVar2 == 0;
    uVar11 = 0;
    if ((bool)uVar13) {
      return 1;
    }
  }
  else {
    lVar6 = 0x10;
    paVar7 = __ptr;
    pbVar8 = (byte *)"/SYM64/         ";
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;
      bVar9 = paVar7->ar_name[0] == *pbVar8;
      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);
      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;
    } while (bVar9);
    if ((!bVar10 && !bVar9) == bVar10) {
      arch->uses_64bit_indicies = 1;
      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);
      goto joined_r0x001557d2;
    }
    uVar11 = 0;
    uVar13 = read_symbols == 0;
    if (!(bool)uVar13) {
      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);
      uVar11 = 0;
      uVar13 = 1;
      printf(pcVar3,file_name);
    }
  }
  lVar6 = 0x10;
  pbVar8 = (byte *)"//              ";
  do {
    if (lVar6 == 0) break;
    lVar6 = lVar6 + -1;
    uVar11 = (byte)__ptr->ar_name[0] < *pbVar8;
    uVar13 = __ptr->ar_name[0] == *pbVar8;
    __ptr = (ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1);
    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;
  } while ((bool)uVar13);
  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {
    return 0;
  }
  cVar1 = (arch->arhdr).ar_fmag[0];
  (arch->arhdr).ar_fmag[0] = '\0';
  uVar5 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);
  (arch->arhdr).ar_fmag[0] = cVar1;
  pcVar3 = "%s: long name table is too small, (size = %ld)\n";
  arch->longnames_size = uVar5;
  if (7 < uVar5) {
    if (-1 < (long)uVar5) {
      arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;
      pcVar3 = (char *)malloc(uVar5 + 1);
      arch->longnames = pcVar3;
      if (pcVar3 == (char *)0x0) {
        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);
        error(pcVar3);
        return 1;
      }
      sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);
      if (sVar4 == 1) {
        uVar5 = arch->longnames_size;
        if ((uVar5 & 1) != 0) {
          getc((FILE *)file);
          uVar5 = arch->longnames_size;
        }
        arch->longnames[uVar5] = '\0';
        return 0;
      }
      free(arch->longnames);
      arch->longnames = (char *)0x0;
      pcVar3 = "%s: failed to read long symbol name string table\n";
LAB_0015579c:
      pcVar3 = (char *)dcgettext(0,pcVar3,5);
      error(pcVar3,file_name);
      return 1;
    }
    pcVar3 = "%s: long name table is too big, (size = 0x%lx)\n";
  }
  pcVar3 = (char *)dcgettext(0,pcVar3,5);
  error(pcVar3,file_name,uVar5);
  return 1;
}



undefined4
FUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)

{
  int iVar1;
  char *pcVar2;
  size_t sVar3;
  ulong uVar4;
  void *__ptr;
  undefined8 uVar5;
  long lVar6;
  byte *pbVar7;
  byte *__ptr_00;
  byte *pbVar8;
  bool bVar9;
  bool bVar10;
  undefined1 uVar11;
  bool bVar12;
  undefined1 uVar13;
  byte bVar14;
  
  bVar14 = 0;
  pcVar2 = strdup(param_2);
  param_1[1] = param_3;
  *param_1 = pcVar2;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  *(undefined4 *)(param_1 + 10) = param_4;
  *(undefined4 *)((long)param_1 + 0x54) = 0;
  param_1[9] = 8;
  iVar1 = fseek(param_3,8,0);
  pcVar2 = "%s: failed to seek to first archive header\n";
  if (iVar1 != 0) goto LAB_0015579c;
  __ptr_00 = (byte *)(param_1 + 0xb);
  sVar3 = fread(__ptr_00,1,0x3c,param_3);
  bVar9 = sVar3 < 0x3c;
  bVar12 = sVar3 == 0x3c;
  if (!bVar12) {
    if (sVar3 == 0) {
      return 0;
    }
    pcVar2 = "%s: failed to read archive header\n";
    goto LAB_0015579c;
  }
  lVar6 = 0x10;
  pbVar7 = __ptr_00;
  pbVar8 = (byte *)"/               ";
  do {
    if (lVar6 == 0) break;
    lVar6 = lVar6 + -1;
    bVar9 = *pbVar7 < *pbVar8;
    bVar12 = *pbVar7 == *pbVar8;
    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;
    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;
  } while (bVar12);
  bVar10 = false;
  bVar9 = (!bVar9 && !bVar12) == bVar9;
  if (bVar9) {
    iVar1 = FUN_00154d60(param_1,4,param_5);
joined_r0x001557d2:
    uVar13 = iVar1 == 0;
    uVar11 = 0;
    if ((bool)uVar13) {
      return 1;
    }
  }
  else {
    lVar6 = 0x10;
    pbVar7 = __ptr_00;
    pbVar8 = (byte *)"/SYM64/         ";
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      bVar10 = *pbVar7 < *pbVar8;
      bVar9 = *pbVar7 == *pbVar8;
      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;
      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;
    } while (bVar9);
    if ((!bVar10 && !bVar9) == bVar10) {
      *(undefined4 *)((long)param_1 + 0x54) = 1;
      iVar1 = FUN_00154d60(param_1,8,param_5);
      goto joined_r0x001557d2;
    }
    uVar11 = 0;
    uVar13 = param_5 == 0;
    if (!(bool)uVar13) {
      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);
      uVar11 = 0;
      uVar13 = 1;
      printf(pcVar2,param_2);
    }
  }
  lVar6 = 0x10;
  pbVar7 = (byte *)"//              ";
  do {
    if (lVar6 == 0) break;
    lVar6 = lVar6 + -1;
    uVar11 = *__ptr_00 < *pbVar7;
    uVar13 = *__ptr_00 == *pbVar7;
    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;
    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;
  } while ((bool)uVar13);
  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {
    return 0;
  }
  uVar11 = *(undefined1 *)((long)param_1 + 0x92);
  *(undefined1 *)((long)param_1 + 0x92) = 0;
  uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);
  *(undefined1 *)((long)param_1 + 0x92) = uVar11;
  pcVar2 = "%s: long name table is too small, (size = %ld)\n";
  param_1[7] = uVar4;
  if (7 < uVar4) {
    if (-1 < (long)uVar4) {
      param_1[9] = uVar4 + 0x3c + param_1[9];
      __ptr = malloc(uVar4 + 1);
      param_1[6] = __ptr;
      if (__ptr == (void *)0x0) {
        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);
        error(uVar5);
        return 1;
      }
      sVar3 = fread(__ptr,uVar4,1,param_3);
      if (sVar3 == 1) {
        uVar4 = param_1[7];
        if ((uVar4 & 1) != 0) {
          getc(param_3);
          uVar4 = param_1[7];
        }
        *(undefined1 *)(param_1[6] + uVar4) = 0;
        return 0;
      }
      free((void *)param_1[6]);
      param_1[6] = 0;
      pcVar2 = "%s: failed to read long symbol name string table\n";
LAB_0015579c:
      uVar5 = dcgettext(0,pcVar2,5);
      error(uVar5,param_2);
      return 1;
    }
    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";
  }
  uVar5 = dcgettext(0,pcVar2,5);
  error(uVar5,param_2,uVar4);
  return 1;
}


PUSH R15
MOV R15D,R8D
PUSH R14
PUSH R13
MOV R13,RSI
PUSH R12
MOV R12D,ECX
PUSH RBP
MOV RBP,RDX
PUSH RBX
MOV RBX,RDI
MOV RDI,RSI
SUB RSP,0x8
CALL 0x001073f0
MOV qword ptr [RBX + 0x8],RBP
XOR EDX,EDX
MOV ESI,0x8
MOV qword ptr [RBX],RAX
MOV RDI,RBP
MOV qword ptr [RBX + 0x10],0x0
MOV qword ptr [RBX + 0x18],0x0
MOV qword ptr [RBX + 0x20],0x0
MOV qword ptr [RBX + 0x28],0x0
MOV qword ptr [RBX + 0x30],0x0
MOV qword ptr [RBX + 0x38],0x0
MOV qword ptr [RBX + 0x40],0x0
MOV dword ptr [RBX + 0x50],R12D
MOV dword ptr [RBX + 0x54],0x0
MOV qword ptr [RBX + 0x48],0x8
CALL 0x00107300
MOV EDX,0x5
LEA RSI,[0x1849a8]
TEST EAX,EAX
JNZ 0x0015579c
LEA R14,[RBX + 0x58]
MOV RCX,RBP
MOV EDX,0x3c
MOV R12D,EAX
MOV ESI,0x1
MOV RDI,R14
CALL 0x001070e0
CMP RAX,0x3c
JZ 0x00155680
TEST RAX,RAX
JNZ 0x00155790
ADD RSP,0x8
MOV EAX,R12D
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV ECX,0x10
LEA RDI,[0x1845e4]
MOV RSI,R14
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x001557c0
MOV ECX,0x10
LEA RDI,[0x1845f5]
MOV RSI,R14
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x00155810
TEST R15D,R15D
JNZ 0x00155838
MOV ECX,0x10
LEA RDI,[0x18461f]
MOV RSI,R14
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x00155665
MOVZX R14D,byte ptr [RBX + 0x92]
MOV byte ptr [RBX + 0x92],0x0
XOR ESI,ESI
MOV EDX,0xa
LEA RDI,[RBX + 0x88]
CALL 0x00107390
MOV byte ptr [RBX + 0x92],R14B
MOV EDX,0x5
LEA RSI,[0x1849d8]
MOV R12,RAX
MOV qword ptr [RBX + 0x38],RAX
CMP RAX,0x7
JBE 0x001557f4
TEST RAX,RAX
JS 0x001557e8
MOV RAX,qword ptr [RBX + 0x48]
LEA RDI,[R12 + 0x1]
LEA RAX,[R12 + RAX*0x1 + 0x3c]
MOV qword ptr [RBX + 0x48],RAX
CALL 0x001072e0
MOV qword ptr [RBX + 0x30],RAX
TEST RAX,RAX
JZ 0x0015587f
MOV RCX,RBP
MOV EDX,0x1
MOV RSI,R12
MOV RDI,RAX
CALL 0x001070e0
CMP RAX,0x1
JNZ 0x0015585d
MOV RAX,qword ptr [RBX + 0x38]
TEST AL,0x1
JNZ 0x001558a1
MOV RDX,qword ptr [RBX + 0x30]
XOR R12D,R12D
MOV byte ptr [RDX + RAX*0x1],0x0
JMP 0x00155665
MOV EDX,0x5
LEA RSI,[0x1744e0]
XOR EDI,EDI
MOV R12D,0x1
CALL 0x00107130
MOV RSI,R13
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00154b80
JMP 0x00155665
MOV EDX,R15D
MOV ESI,0x4
MOV RDI,RBX
CALL 0x00154d60
TEST EAX,EAX
JNZ 0x001556c5
MOV R12D,0x1
JMP 0x00155665
MOV EDX,0x5
LEA RSI,[0x184a08]
XOR EDI,EDI
CALL 0x00107130
MOV RDX,R12
MOV RSI,R13
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00154b80
JMP 0x001557d8
MOV dword ptr [RBX + 0x54],0x1
MOV EDX,R15D
MOV ESI,0x8
MOV RDI,RBX
CALL 0x00154d60
TEST EAX,EAX
JNZ 0x001556c5
JMP 0x001557d8
XOR EDI,EDI
MOV EDX,0x5
LEA RSI,[0x184606]
CALL 0x00107130
MOV RSI,R13
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00107190
JMP 0x001556c5
MOV RDI,qword ptr [RBX + 0x30]
CALL 0x00107030
MOV qword ptr [RBX + 0x30],0x0
MOV EDX,0x5
LEA RSI,[0x184a70]
JMP 0x0015579c
XOR EDI,EDI
MOV EDX,0x5
LEA RSI,[0x184a38]
CALL 0x00107130
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00154b80
JMP 0x001557d8
MOV RDI,RBP
CALL 0x00107410
MOV RAX,qword ptr [RBX + 0x38]
JMP 0x0015577b
(translation_unit "undefined4\nFUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)\n\n{\n  int iVar1;\n  char *pcVar2;\n  size_t sVar3;\n  ulong uVar4;\n  void *__ptr;\n  undefined8 uVar5;\n  long lVar6;\n  byte *pbVar7;\n  byte *__ptr_00;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar2 = strdup(param_2);\n  param_1[1] = param_3;\n  *param_1 = pcVar2;\n  param_1[2] = 0;\n  param_1[3] = 0;\n  param_1[4] = 0;\n  param_1[5] = 0;\n  param_1[6] = 0;\n  param_1[7] = 0;\n  param_1[8] = 0;\n  *(undefined4 *)(param_1 + 10) = param_4;\n  *(undefined4 *)((long)param_1 + 0x54) = 0;\n  param_1[9] = 8;\n  iVar1 = fseek(param_3,8,0);\n  pcVar2 = "%s: failed to seek to first archive header\n";\n  if (iVar1 != 0) goto LAB_0015579c;\n  __ptr_00 = (byte *)(param_1 + 0xb);\n  sVar3 = fread(__ptr_00,1,0x3c,param_3);\n  bVar9 = sVar3 < 0x3c;\n  bVar12 = sVar3 == 0x3c;\n  if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  pbVar7 = __ptr_00;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar7 = (byte *)"//              ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);\n  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }\n  uVar11 = *(undefined1 *)((long)param_1 + 0x92);\n  *(undefined1 *)((long)param_1 + 0x92) = 0;\n  uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);\n  *(undefined1 *)((long)param_1 + 0x92) = uVar11;\n  pcVar2 = "%s: long name table is too small, (size = %ld)\n";\n  param_1[7] = uVar4;\n  if (7 < uVar4) {\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }\n  uVar5 = dcgettext(0,pcVar2,5);\n  error(uVar5,param_2,uVar4);\n  return 1;\n}\n\n" (function_definition "undefined4\nFUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)\n\n{\n  int iVar1;\n  char *pcVar2;\n  size_t sVar3;\n  ulong uVar4;\n  void *__ptr;\n  undefined8 uVar5;\n  long lVar6;\n  byte *pbVar7;\n  byte *__ptr_00;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar2 = strdup(param_2);\n  param_1[1] = param_3;\n  *param_1 = pcVar2;\n  param_1[2] = 0;\n  param_1[3] = 0;\n  param_1[4] = 0;\n  param_1[5] = 0;\n  param_1[6] = 0;\n  param_1[7] = 0;\n  param_1[8] = 0;\n  *(undefined4 *)(param_1 + 10) = param_4;\n  *(undefined4 *)((long)param_1 + 0x54) = 0;\n  param_1[9] = 8;\n  iVar1 = fseek(param_3,8,0);\n  pcVar2 = "%s: failed to seek to first archive header\n";\n  if (iVar1 != 0) goto LAB_0015579c;\n  __ptr_00 = (byte *)(param_1 + 0xb);\n  sVar3 = fread(__ptr_00,1,0x3c,param_3);\n  bVar9 = sVar3 < 0x3c;\n  bVar12 = sVar3 == 0x3c;\n  if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  pbVar7 = __ptr_00;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar7 = (byte *)"//              ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);\n  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }\n  uVar11 = *(undefined1 *)((long)param_1 + 0x92);\n  *(undefined1 *)((long)param_1 + 0x92) = 0;\n  uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);\n  *(undefined1 *)((long)param_1 + 0x92) = uVar11;\n  pcVar2 = "%s: long name table is too small, (size = %ld)\n";\n  param_1[7] = uVar4;\n  if (7 < uVar4) {\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }\n  uVar5 = dcgettext(0,pcVar2,5);\n  error(uVar5,param_2,uVar4);\n  return 1;\n}" type_identifier (function_declarator "FUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)" identifier (parameter_list "(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "FILE *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  char *pcVar2;\n  size_t sVar3;\n  ulong uVar4;\n  void *__ptr;\n  undefined8 uVar5;\n  long lVar6;\n  byte *pbVar7;\n  byte *__ptr_00;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar2 = strdup(param_2);\n  param_1[1] = param_3;\n  *param_1 = pcVar2;\n  param_1[2] = 0;\n  param_1[3] = 0;\n  param_1[4] = 0;\n  param_1[5] = 0;\n  param_1[6] = 0;\n  param_1[7] = 0;\n  param_1[8] = 0;\n  *(undefined4 *)(param_1 + 10) = param_4;\n  *(undefined4 *)((long)param_1 + 0x54) = 0;\n  param_1[9] = 8;\n  iVar1 = fseek(param_3,8,0);\n  pcVar2 = "%s: failed to seek to first archive header\n";\n  if (iVar1 != 0) goto LAB_0015579c;\n  __ptr_00 = (byte *)(param_1 + 0xb);\n  sVar3 = fread(__ptr_00,1,0x3c,param_3);\n  bVar9 = sVar3 < 0x3c;\n  bVar12 = sVar3 == 0x3c;\n  if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  pbVar7 = __ptr_00;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar7 = (byte *)"//              ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);\n  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }\n  uVar11 = *(undefined1 *)((long)param_1 + 0x92);\n  *(undefined1 *)((long)param_1 + 0x92) = 0;\n  uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);\n  *(undefined1 *)((long)param_1 + 0x92) = uVar11;\n  pcVar2 = "%s: long name table is too small, (size = %ld)\n";\n  param_1[7] = uVar4;\n  if (7 < uVar4) {\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }\n  uVar5 = dcgettext(0,pcVar2,5);\n  error(uVar5,param_2,uVar4);\n  return 1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "byte *__ptr_00;" type_identifier (pointer_declarator "*__ptr_00" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "undefined1 uVar11;" type_identifier identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined1 uVar13;" type_identifier identifier ;) (declaration "byte bVar14;" type_identifier identifier ;) (expression_statement "bVar14 = 0;" (assignment_expression "bVar14 = 0" identifier = number_literal) ;) (expression_statement "pcVar2 = strdup(param_2);" (assignment_expression "pcVar2 = strdup(param_2)" identifier = (call_expression "strdup(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "param_1[1] = param_3;" (assignment_expression "param_1[1] = param_3" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*param_1 = pcVar2;" (assignment_expression "*param_1 = pcVar2" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = 0;" (assignment_expression "param_1[7] = 0" (subscript_expression "param_1[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 10) = param_4;" (assignment_expression "*(undefined4 *)(param_1 + 10) = param_4" (pointer_expression "*(undefined4 *)(param_1 + 10)" * (cast_expression "(undefined4 *)(param_1 + 10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)((long)param_1 + 0x54) = 0;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x54) = 0" (pointer_expression "*(undefined4 *)((long)param_1 + 0x54)" * (cast_expression "(undefined4 *)((long)param_1 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x54)" ( (binary_expression "(long)param_1 + 0x54" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "param_1[9] = 8;" (assignment_expression "param_1[9] = 8" (subscript_expression "param_1[9]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar1 = fseek(param_3,8,0);" (assignment_expression "iVar1 = fseek(param_3,8,0)" identifier = (call_expression "fseek(param_3,8,0)" identifier (argument_list "(param_3,8,0)" ( identifier , number_literal , number_literal )))) ;) (expression_statement "pcVar2 = "%s: failed to seek to first archive header\n";" (assignment_expression "pcVar2 = "%s: failed to seek to first archive header\n"" identifier = (string_literal ""%s: failed to seek to first archive header\n"" " string_content escape_sequence ")) ;) (if_statement "if (iVar1 != 0) goto LAB_0015579c;" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015579c;" goto statement_identifier ;)) (expression_statement "__ptr_00 = (byte *)(param_1 + 0xb);" (assignment_expression "__ptr_00 = (byte *)(param_1 + 0xb)" identifier = (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) ;) (expression_statement "sVar3 = fread(__ptr_00,1,0x3c,param_3);" (assignment_expression "sVar3 = fread(__ptr_00,1,0x3c,param_3)" identifier = (call_expression "fread(__ptr_00,1,0x3c,param_3)" identifier (argument_list "(__ptr_00,1,0x3c,param_3)" ( identifier , number_literal , number_literal , identifier )))) ;) (expression_statement "bVar9 = sVar3 < 0x3c;" (assignment_expression "bVar9 = sVar3 < 0x3c" identifier = (binary_expression "sVar3 < 0x3c" identifier < number_literal)) ;) (expression_statement "bVar12 = sVar3 == 0x3c;" (assignment_expression "bVar12 = sVar3 == 0x3c" identifier = (binary_expression "sVar3 == 0x3c" identifier == number_literal)) ;) (if_statement "if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }" if (parenthesized_expression "(!bVar12)" ( (unary_expression "!bVar12" ! identifier) )) (compound_statement "{\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }" { (if_statement "if (sVar3 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(sVar3 == 0)" ( (binary_expression "sVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar2 = "%s: failed to read archive header\n";" (assignment_expression "pcVar2 = "%s: failed to read archive header\n"" identifier = (string_literal ""%s: failed to read archive header\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0015579c;" goto statement_identifier ;) })) (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "pbVar7 = __ptr_00;" (assignment_expression "pbVar7 = __ptr_00" identifier = identifier) ;) (expression_statement "pbVar8 = (byte *)"/               ";" (assignment_expression "pbVar8 = (byte *)"/               "" identifier = (cast_expression "(byte *)"/               "" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""/               "" " string_content "))) ;) (do_statement "do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);" do (compound_statement "{\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar9 = *pbVar7 < *pbVar8;" (assignment_expression "bVar9 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar12 = *pbVar7 == *pbVar8;" (assignment_expression "bVar12 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" identifier = false) ;) (expression_statement "bVar9 = (!bVar9 && !bVar12) == bVar9;" (assignment_expression "bVar9 = (!bVar9 && !bVar12) == bVar9" identifier = (binary_expression "(!bVar9 && !bVar12) == bVar9" (parenthesized_expression "(!bVar9 && !bVar12)" ( (binary_expression "!bVar9 && !bVar12" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" if (parenthesized_expression "(bVar9)" ( identifier )) (compound_statement "{\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }" { (expression_statement "iVar1 = FUN_00154d60(param_1,4,param_5);" (assignment_expression "iVar1 = FUN_00154d60(param_1,4,param_5)" identifier = (call_expression "FUN_00154d60(param_1,4,param_5)" identifier (argument_list "(param_1,4,param_5)" ( identifier , number_literal , identifier )))) ;) (labeled_statement "joined_r0x001557d2:\n    uVar13 = iVar1 == 0;" statement_identifier : (expression_statement "uVar13 = iVar1 == 0;" (assignment_expression "uVar13 = iVar1 == 0" identifier = (binary_expression "iVar1 == 0" identifier == number_literal)) ;)) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (if_statement "if ((bool)uVar13) {\n      return 1;\n    }" if (parenthesized_expression "((bool)uVar13)" ( (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" else (compound_statement "{\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" { (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "pbVar7 = __ptr_00;" (assignment_expression "pbVar7 = __ptr_00" identifier = identifier) ;) (expression_statement "pbVar8 = (byte *)"/SYM64/         ";" (assignment_expression "pbVar8 = (byte *)"/SYM64/         "" identifier = (cast_expression "(byte *)"/SYM64/         "" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""/SYM64/         "" " string_content "))) ;) (do_statement "do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);" do (compound_statement "{\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = *pbVar7 < *pbVar8;" (assignment_expression "bVar10 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar9 = *pbVar7 == *pbVar8;" (assignment_expression "bVar9 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar9)" ( identifier )) ;) (if_statement "if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }" if (parenthesized_expression "((!bVar10 && !bVar9) == bVar10)" ( (binary_expression "(!bVar10 && !bVar9) == bVar10" (parenthesized_expression "(!bVar10 && !bVar9)" ( (binary_expression "!bVar10 && !bVar9" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar9" ! identifier)) )) == identifier) )) (compound_statement "{\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }" { (expression_statement "*(undefined4 *)((long)param_1 + 0x54) = 1;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x54) = 1" (pointer_expression "*(undefined4 *)((long)param_1 + 0x54)" * (cast_expression "(undefined4 *)((long)param_1 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x54)" ( (binary_expression "(long)param_1 + 0x54" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar1 = FUN_00154d60(param_1,8,param_5);" (assignment_expression "iVar1 = FUN_00154d60(param_1,8,param_5)" identifier = (call_expression "FUN_00154d60(param_1,8,param_5)" identifier (argument_list "(param_1,8,param_5)" ( identifier , number_literal , identifier )))) ;) (goto_statement "goto joined_r0x001557d2;" goto statement_identifier ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = param_5 == 0;" (assignment_expression "uVar13 = param_5 == 0" identifier = (binary_expression "param_5 == 0" identifier == number_literal)) ;) (if_statement "if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }" if (parenthesized_expression "(!(bool)uVar13)" ( (unary_expression "!(bool)uVar13" ! (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }" { (expression_statement "pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s has no archive index\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s has no archive index\n",5)" identifier (argument_list "(0,"%s has no archive index\n",5)" ( number_literal , (string_literal ""%s has no archive index\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 1;" (assignment_expression "uVar13 = 1" identifier = number_literal) ;) (expression_statement "printf(pcVar2,param_2);" (call_expression "printf(pcVar2,param_2)" identifier (argument_list "(pcVar2,param_2)" ( identifier , identifier ))) ;) })) }))) (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "pbVar7 = (byte *)"//              ";" (assignment_expression "pbVar7 = (byte *)"//              "" identifier = (cast_expression "(byte *)"//              "" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""//              "" " string_content "))) ;) (do_statement "do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);" do (compound_statement "{\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = *__ptr_00 < *pbVar7;" (assignment_expression "uVar11 = *__ptr_00 < *pbVar7" identifier = (binary_expression "*__ptr_00 < *pbVar7" (pointer_expression "*__ptr_00" * identifier) < (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "uVar13 = *__ptr_00 == *pbVar7;" (assignment_expression "uVar13 = *__ptr_00 == *pbVar7" identifier = (binary_expression "*__ptr_00 == *pbVar7" (pointer_expression "*__ptr_00" * identifier) == (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "__ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;" (assignment_expression "__ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "__ptr_00 + (ulong)bVar14 * -2 + 1" (binary_expression "__ptr_00 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar13)" ( (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (if_statement "if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }" if (parenthesized_expression "((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11)" ( (binary_expression "(!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11" (parenthesized_expression "(!(bool)uVar11 && !(bool)uVar13)" ( (binary_expression "!(bool)uVar11 && !(bool)uVar13" (unary_expression "!(bool)uVar11" ! (cast_expression "(bool)uVar11" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar13" ! (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier))) )) != (cast_expression "(bool)uVar11" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar11 = *(undefined1 *)((long)param_1 + 0x92);" (assignment_expression "uVar11 = *(undefined1 *)((long)param_1 + 0x92)" identifier = (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" * (cast_expression "(undefined1 *)((long)param_1 + 0x92)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x92)" ( (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "*(undefined1 *)((long)param_1 + 0x92) = 0;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = 0" (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" * (cast_expression "(undefined1 *)((long)param_1 + 0x92)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x92)" ( (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);" (assignment_expression "uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10)" identifier = (call_expression "strtoul((char *)(param_1 + 0x11),(char **)0x0,10)" identifier (argument_list "((char *)(param_1 + 0x11),(char **)0x0,10)" ( (cast_expression "(char *)(param_1 + 0x11)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x11)" ( (binary_expression "param_1 + 0x11" identifier + number_literal) ))) , (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal) , number_literal )))) ;) (expression_statement "*(undefined1 *)((long)param_1 + 0x92) = uVar11;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = uVar11" (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" * (cast_expression "(undefined1 *)((long)param_1 + 0x92)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x92)" ( (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "pcVar2 = "%s: long name table is too small, (size = %ld)\n";" (assignment_expression "pcVar2 = "%s: long name table is too small, (size = %ld)\n"" identifier = (string_literal ""%s: long name table is too small, (size = %ld)\n"" " string_content escape_sequence ")) ;) (expression_statement "param_1[7] = uVar4;" (assignment_expression "param_1[7] = uVar4" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (7 < uVar4) {\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }" if (parenthesized_expression "(7 < uVar4)" ( (binary_expression "7 < uVar4" number_literal < identifier) )) (compound_statement "{\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }" { (if_statement "if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }" if (parenthesized_expression "(-1 < (long)uVar4)" ( (binary_expression "-1 < (long)uVar4" number_literal < (cast_expression "(long)uVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (compound_statement "{\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }" { (expression_statement "param_1[9] = uVar4 + 0x3c + param_1[9];" (assignment_expression "param_1[9] = uVar4 + 0x3c + param_1[9]" (subscript_expression "param_1[9]" identifier [ number_literal ]) = (binary_expression "uVar4 + 0x3c + param_1[9]" (binary_expression "uVar4 + 0x3c" identifier + number_literal) + (subscript_expression "param_1[9]" identifier [ number_literal ]))) ;) (expression_statement "__ptr = malloc(uVar4 + 1);" (assignment_expression "__ptr = malloc(uVar4 + 1)" identifier = (call_expression "malloc(uVar4 + 1)" identifier (argument_list "(uVar4 + 1)" ( (binary_expression "uVar4 + 1" identifier + number_literal) )))) ;) (expression_statement "param_1[6] = __ptr;" (assignment_expression "param_1[6] = __ptr" (subscript_expression "param_1[6]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }" if (parenthesized_expression "(__ptr == (void *)0x0)" ( (binary_expression "__ptr == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }" { (expression_statement "uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);" (assignment_expression "uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" identifier = (call_expression "dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" identifier (argument_list "(0,"Out of memory reading long symbol names in archive\n",5)" ( number_literal , (string_literal ""Out of memory reading long symbol names in archive\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar5);" (call_expression "error(uVar5)" identifier (argument_list "(uVar5)" ( identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "sVar3 = fread(__ptr,uVar4,1,param_3);" (assignment_expression "sVar3 = fread(__ptr,uVar4,1,param_3)" identifier = (call_expression "fread(__ptr,uVar4,1,param_3)" identifier (argument_list "(__ptr,uVar4,1,param_3)" ( identifier , identifier , number_literal , identifier )))) ;) (if_statement "if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }" if (parenthesized_expression "(sVar3 == 1)" ( (binary_expression "sVar3 == 1" identifier == number_literal) )) (compound_statement "{\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }" { (expression_statement "uVar4 = param_1[7];" (assignment_expression "uVar4 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (if_statement "if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }" if (parenthesized_expression "((uVar4 & 1) != 0)" ( (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          getc(param_3);\n          uVar4 = param_1[7];\n        }" { (expression_statement "getc(param_3);" (call_expression "getc(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) (expression_statement "uVar4 = param_1[7];" (assignment_expression "uVar4 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) })) (expression_statement "*(undefined1 *)(param_1[6] + uVar4) = 0;" (assignment_expression "*(undefined1 *)(param_1[6] + uVar4) = 0" (pointer_expression "*(undefined1 *)(param_1[6] + uVar4)" * (cast_expression "(undefined1 *)(param_1[6] + uVar4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[6] + uVar4)" ( (binary_expression "param_1[6] + uVar4" (subscript_expression "param_1[6]" identifier [ number_literal ]) + identifier) )))) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "free((void *)param_1[6]);" (call_expression "free((void *)param_1[6])" identifier (argument_list "((void *)param_1[6])" ( (cast_expression "(void *)param_1[6]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) ))) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "pcVar2 = "%s: failed to read long symbol name string table\n";" (assignment_expression "pcVar2 = "%s: failed to read long symbol name string table\n"" identifier = (string_literal ""%s: failed to read long symbol name string table\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);" statement_identifier : (expression_statement "uVar5 = dcgettext(0,pcVar2,5);" (assignment_expression "uVar5 = dcgettext(0,pcVar2,5)" identifier = (call_expression "dcgettext(0,pcVar2,5)" identifier (argument_list "(0,pcVar2,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar5,param_2);" (call_expression "error(uVar5,param_2)" identifier (argument_list "(uVar5,param_2)" ( identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";" (assignment_expression "pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n"" identifier = (string_literal ""%s: long name table is too big, (size = 0x%lx)\n"" " string_content escape_sequence ")) ;) })) (expression_statement "uVar5 = dcgettext(0,pcVar2,5);" (assignment_expression "uVar5 = dcgettext(0,pcVar2,5)" identifier = (call_expression "dcgettext(0,pcVar2,5)" identifier (argument_list "(0,pcVar2,5)" ( number_literal , identifier , number_literal )))) ;) (expression_statement "error(uVar5,param_2,uVar4);" (call_expression "error(uVar5,param_2,uVar4)" identifier (argument_list "(uVar5,param_2,uVar4)" ( identifier , identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n\nint setup_archive(archive_info *arch,char *file_name,FILE *file,bfd_boolean is_thin_archive,\n                 bfd_boolean read_symbols)\n\n{\n  char cVar1;\n  int iVar2;\n  char *pcVar3;\n  size_t sVar4;\n  ulong uVar5;\n  long lVar6;\n  ar_hdr *paVar7;\n  ar_hdr *__ptr;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar3 = strdup(file_name);\n  arch->file = file;\n  arch->file_name = pcVar3;\n  arch->index_num = 0;\n  arch->index_array = (elf_vma *)0x0;\n  arch->sym_table = (char *)0x0;\n  arch->sym_size = 0;\n  arch->longnames = (char *)0x0;\n  arch->longnames_size = 0;\n  arch->nested_member_origin = 0;\n  arch->is_thin_archive = is_thin_archive;\n  arch->uses_64bit_indicies = 0;\n  arch->next_arhdr_offset = 8;\n  iVar2 = fseek((FILE *)file,8,0);\n  pcVar3 = "%s: failed to seek to first archive header\n";\n  if (iVar2 != 0) goto LAB_0015579c;\n  __ptr = &arch->arhdr;\n  sVar4 = fread(__ptr,1,0x3c,(FILE *)file);\n  bVar9 = sVar4 < 0x3c;\n  bVar12 = sVar4 == 0x3c;\n  if (!bVar12) {\n    if (sVar4 == 0) {\n      return 0;\n    }\n    pcVar3 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  paVar7 = __ptr;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = (byte)paVar7->ar_name[0] < *pbVar8;\n    bVar12 = paVar7->ar_name[0] == *pbVar8;\n    paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar2 = process_archive_index_and_symbols(arch,4,read_symbols);\njoined_r0x001557d2:\n    uVar13 = iVar2 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    paVar7 = __ptr;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;\n      bVar9 = paVar7->ar_name[0] == *pbVar8;\n      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      arch->uses_64bit_indicies = 1;\n      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = read_symbols == 0;\n    if (!(bool)uVar13) {\n      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar3,file_name);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar8 = (byte *)"//              ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = (byte)__ptr->ar_name[0] < *pbVar8;\n    uVar13 = __ptr->ar_name[0] == *pbVar8;\n    __ptr = (ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);\n  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }\n  cVar1 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar5 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar1;\n  pcVar3 = "%s: long name table is too small, (size = %ld)\n";\n  arch->longnames_size = uVar5;\n  if (7 < uVar5) {\n    if (-1 < (long)uVar5) {\n      arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;\n      pcVar3 = (char *)malloc(uVar5 + 1);\n      arch->longnames = pcVar3;\n      if (pcVar3 == (char *)0x0) {\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }\n      sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);\n      if (sVar4 == 1) {\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }\n      free(arch->longnames);\n      arch->longnames = (char *)0x0;\n      pcVar3 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      pcVar3 = (char *)dcgettext(0,pcVar3,5);\n      error(pcVar3,file_name);\n      return 1;\n    }\n    pcVar3 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }\n  pcVar3 = (char *)dcgettext(0,pcVar3,5);\n  error(pcVar3,file_name,uVar5);\n  return 1;\n}\n\n" comment (function_definition "int setup_archive(archive_info *arch,char *file_name,FILE *file,bfd_boolean is_thin_archive,\n                 bfd_boolean read_symbols)\n\n{\n  char cVar1;\n  int iVar2;\n  char *pcVar3;\n  size_t sVar4;\n  ulong uVar5;\n  long lVar6;\n  ar_hdr *paVar7;\n  ar_hdr *__ptr;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar3 = strdup(file_name);\n  arch->file = file;\n  arch->file_name = pcVar3;\n  arch->index_num = 0;\n  arch->index_array = (elf_vma *)0x0;\n  arch->sym_table = (char *)0x0;\n  arch->sym_size = 0;\n  arch->longnames = (char *)0x0;\n  arch->longnames_size = 0;\n  arch->nested_member_origin = 0;\n  arch->is_thin_archive = is_thin_archive;\n  arch->uses_64bit_indicies = 0;\n  arch->next_arhdr_offset = 8;\n  iVar2 = fseek((FILE *)file,8,0);\n  pcVar3 = "%s: failed to seek to first archive header\n";\n  if (iVar2 != 0) goto LAB_0015579c;\n  __ptr = &arch->arhdr;\n  sVar4 = fread(__ptr,1,0x3c,(FILE *)file);\n  bVar9 = sVar4 < 0x3c;\n  bVar12 = sVar4 == 0x3c;\n  if (!bVar12) {\n    if (sVar4 == 0) {\n      return 0;\n    }\n    pcVar3 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  paVar7 = __ptr;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = (byte)paVar7->ar_name[0] < *pbVar8;\n    bVar12 = paVar7->ar_name[0] == *pbVar8;\n    paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar2 = process_archive_index_and_symbols(arch,4,read_symbols);\njoined_r0x001557d2:\n    uVar13 = iVar2 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    paVar7 = __ptr;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;\n      bVar9 = paVar7->ar_name[0] == *pbVar8;\n      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      arch->uses_64bit_indicies = 1;\n      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = read_symbols == 0;\n    if (!(bool)uVar13) {\n      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar3,file_name);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar8 = (byte *)"//              ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = (byte)__ptr->ar_name[0] < *pbVar8;\n    uVar13 = __ptr->ar_name[0] == *pbVar8;\n    __ptr = (ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);\n  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }\n  cVar1 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar5 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar1;\n  pcVar3 = "%s: long name table is too small, (size = %ld)\n";\n  arch->longnames_size = uVar5;\n  if (7 < uVar5) {\n    if (-1 < (long)uVar5) {\n      arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;\n      pcVar3 = (char *)malloc(uVar5 + 1);\n      arch->longnames = pcVar3;\n      if (pcVar3 == (char *)0x0) {\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }\n      sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);\n      if (sVar4 == 1) {\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }\n      free(arch->longnames);\n      arch->longnames = (char *)0x0;\n      pcVar3 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      pcVar3 = (char *)dcgettext(0,pcVar3,5);\n      error(pcVar3,file_name);\n      return 1;\n    }\n    pcVar3 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }\n  pcVar3 = (char *)dcgettext(0,pcVar3,5);\n  error(pcVar3,file_name,uVar5);\n  return 1;\n}" primitive_type (function_declarator "setup_archive(archive_info *arch,char *file_name,FILE *file,bfd_boolean is_thin_archive,\n                 bfd_boolean read_symbols)" identifier (parameter_list "(archive_info *arch,char *file_name,FILE *file,bfd_boolean is_thin_archive,\n                 bfd_boolean read_symbols)" ( (parameter_declaration "archive_info *arch" type_identifier (pointer_declarator "*arch" * identifier)) , (parameter_declaration "char *file_name" primitive_type (pointer_declarator "*file_name" * identifier)) , (parameter_declaration "FILE *file" type_identifier (pointer_declarator "*file" * identifier)) , (parameter_declaration "bfd_boolean is_thin_archive" type_identifier identifier) , (parameter_declaration "bfd_boolean read_symbols" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  char *pcVar3;\n  size_t sVar4;\n  ulong uVar5;\n  long lVar6;\n  ar_hdr *paVar7;\n  ar_hdr *__ptr;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar3 = strdup(file_name);\n  arch->file = file;\n  arch->file_name = pcVar3;\n  arch->index_num = 0;\n  arch->index_array = (elf_vma *)0x0;\n  arch->sym_table = (char *)0x0;\n  arch->sym_size = 0;\n  arch->longnames = (char *)0x0;\n  arch->longnames_size = 0;\n  arch->nested_member_origin = 0;\n  arch->is_thin_archive = is_thin_archive;\n  arch->uses_64bit_indicies = 0;\n  arch->next_arhdr_offset = 8;\n  iVar2 = fseek((FILE *)file,8,0);\n  pcVar3 = "%s: failed to seek to first archive header\n";\n  if (iVar2 != 0) goto LAB_0015579c;\n  __ptr = &arch->arhdr;\n  sVar4 = fread(__ptr,1,0x3c,(FILE *)file);\n  bVar9 = sVar4 < 0x3c;\n  bVar12 = sVar4 == 0x3c;\n  if (!bVar12) {\n    if (sVar4 == 0) {\n      return 0;\n    }\n    pcVar3 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  paVar7 = __ptr;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = (byte)paVar7->ar_name[0] < *pbVar8;\n    bVar12 = paVar7->ar_name[0] == *pbVar8;\n    paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar2 = process_archive_index_and_symbols(arch,4,read_symbols);\njoined_r0x001557d2:\n    uVar13 = iVar2 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    paVar7 = __ptr;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;\n      bVar9 = paVar7->ar_name[0] == *pbVar8;\n      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      arch->uses_64bit_indicies = 1;\n      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = read_symbols == 0;\n    if (!(bool)uVar13) {\n      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar3,file_name);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar8 = (byte *)"//              ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = (byte)__ptr->ar_name[0] < *pbVar8;\n    uVar13 = __ptr->ar_name[0] == *pbVar8;\n    __ptr = (ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);\n  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }\n  cVar1 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar5 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar1;\n  pcVar3 = "%s: long name table is too small, (size = %ld)\n";\n  arch->longnames_size = uVar5;\n  if (7 < uVar5) {\n    if (-1 < (long)uVar5) {\n      arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;\n      pcVar3 = (char *)malloc(uVar5 + 1);\n      arch->longnames = pcVar3;\n      if (pcVar3 == (char *)0x0) {\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }\n      sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);\n      if (sVar4 == 1) {\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }\n      free(arch->longnames);\n      arch->longnames = (char *)0x0;\n      pcVar3 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      pcVar3 = (char *)dcgettext(0,pcVar3,5);\n      error(pcVar3,file_name);\n      return 1;\n    }\n    pcVar3 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }\n  pcVar3 = (char *)dcgettext(0,pcVar3,5);\n  error(pcVar3,file_name,uVar5);\n  return 1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "ar_hdr *paVar7;" type_identifier (pointer_declarator "*paVar7" * identifier) ;) (declaration "ar_hdr *__ptr;" type_identifier (pointer_declarator "*__ptr" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "undefined1 uVar11;" type_identifier identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined1 uVar13;" type_identifier identifier ;) (declaration "byte bVar14;" type_identifier identifier ;) (expression_statement "bVar14 = 0;" (assignment_expression "bVar14 = 0" identifier = number_literal) ;) (expression_statement "pcVar3 = strdup(file_name);" (assignment_expression "pcVar3 = strdup(file_name)" identifier = (call_expression "strdup(file_name)" identifier (argument_list "(file_name)" ( identifier )))) ;) (expression_statement "arch->file = file;" (assignment_expression "arch->file = file" (field_expression "arch->file" identifier -> field_identifier) = identifier) ;) (expression_statement "arch->file_name = pcVar3;" (assignment_expression "arch->file_name = pcVar3" (field_expression "arch->file_name" identifier -> field_identifier) = identifier) ;) (expression_statement "arch->index_num = 0;" (assignment_expression "arch->index_num = 0" (field_expression "arch->index_num" identifier -> field_identifier) = number_literal) ;) (expression_statement "arch->index_array = (elf_vma *)0x0;" (assignment_expression "arch->index_array = (elf_vma *)0x0" (field_expression "arch->index_array" identifier -> field_identifier) = (cast_expression "(elf_vma *)0x0" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "arch->sym_table = (char *)0x0;" (assignment_expression "arch->sym_table = (char *)0x0" (field_expression "arch->sym_table" identifier -> field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "arch->sym_size = 0;" (assignment_expression "arch->sym_size = 0" (field_expression "arch->sym_size" identifier -> field_identifier) = number_literal) ;) (expression_statement "arch->longnames = (char *)0x0;" (assignment_expression "arch->longnames = (char *)0x0" (field_expression "arch->longnames" identifier -> field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "arch->longnames_size = 0;" (assignment_expression "arch->longnames_size = 0" (field_expression "arch->longnames_size" identifier -> field_identifier) = number_literal) ;) (expression_statement "arch->nested_member_origin = 0;" (assignment_expression "arch->nested_member_origin = 0" (field_expression "arch->nested_member_origin" identifier -> field_identifier) = number_literal) ;) (expression_statement "arch->is_thin_archive = is_thin_archive;" (assignment_expression "arch->is_thin_archive = is_thin_archive" (field_expression "arch->is_thin_archive" identifier -> field_identifier) = identifier) ;) (expression_statement "arch->uses_64bit_indicies = 0;" (assignment_expression "arch->uses_64bit_indicies = 0" (field_expression "arch->uses_64bit_indicies" identifier -> field_identifier) = number_literal) ;) (expression_statement "arch->next_arhdr_offset = 8;" (assignment_expression "arch->next_arhdr_offset = 8" (field_expression "arch->next_arhdr_offset" identifier -> field_identifier) = number_literal) ;) (expression_statement "iVar2 = fseek((FILE *)file,8,0);" (assignment_expression "iVar2 = fseek((FILE *)file,8,0)" identifier = (call_expression "fseek((FILE *)file,8,0)" identifier (argument_list "((FILE *)file,8,0)" ( (cast_expression "(FILE *)file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal , number_literal )))) ;) (expression_statement "pcVar3 = "%s: failed to seek to first archive header\n";" (assignment_expression "pcVar3 = "%s: failed to seek to first archive header\n"" identifier = (string_literal ""%s: failed to seek to first archive header\n"" " string_content escape_sequence ")) ;) (if_statement "if (iVar2 != 0) goto LAB_0015579c;" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015579c;" goto statement_identifier ;)) (expression_statement "__ptr = &arch->arhdr;" (assignment_expression "__ptr = &arch->arhdr" identifier = (pointer_expression "&arch->arhdr" & (field_expression "arch->arhdr" identifier -> field_identifier))) ;) (expression_statement "sVar4 = fread(__ptr,1,0x3c,(FILE *)file);" (assignment_expression "sVar4 = fread(__ptr,1,0x3c,(FILE *)file)" identifier = (call_expression "fread(__ptr,1,0x3c,(FILE *)file)" identifier (argument_list "(__ptr,1,0x3c,(FILE *)file)" ( identifier , number_literal , number_literal , (cast_expression "(FILE *)file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "bVar9 = sVar4 < 0x3c;" (assignment_expression "bVar9 = sVar4 < 0x3c" identifier = (binary_expression "sVar4 < 0x3c" identifier < number_literal)) ;) (expression_statement "bVar12 = sVar4 == 0x3c;" (assignment_expression "bVar12 = sVar4 == 0x3c" identifier = (binary_expression "sVar4 == 0x3c" identifier == number_literal)) ;) (if_statement "if (!bVar12) {\n    if (sVar4 == 0) {\n      return 0;\n    }\n    pcVar3 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }" if (parenthesized_expression "(!bVar12)" ( (unary_expression "!bVar12" ! identifier) )) (compound_statement "{\n    if (sVar4 == 0) {\n      return 0;\n    }\n    pcVar3 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }" { (if_statement "if (sVar4 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(sVar4 == 0)" ( (binary_expression "sVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar3 = "%s: failed to read archive header\n";" (assignment_expression "pcVar3 = "%s: failed to read archive header\n"" identifier = (string_literal ""%s: failed to read archive header\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0015579c;" goto statement_identifier ;) })) (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "paVar7 = __ptr;" (assignment_expression "paVar7 = __ptr" identifier = identifier) ;) (expression_statement "pbVar8 = (byte *)"/               ";" (assignment_expression "pbVar8 = (byte *)"/               "" identifier = (cast_expression "(byte *)"/               "" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""/               "" " string_content "))) ;) (do_statement "do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = (byte)paVar7->ar_name[0] < *pbVar8;\n    bVar12 = paVar7->ar_name[0] == *pbVar8;\n    paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);" do (compound_statement "{\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = (byte)paVar7->ar_name[0] < *pbVar8;\n    bVar12 = paVar7->ar_name[0] == *pbVar8;\n    paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar9 = (byte)paVar7->ar_name[0] < *pbVar8;" (assignment_expression "bVar9 = (byte)paVar7->ar_name[0] < *pbVar8" identifier = (binary_expression "(byte)paVar7->ar_name[0] < *pbVar8" (cast_expression "(byte)paVar7->ar_name[0]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "paVar7->ar_name[0]" (field_expression "paVar7->ar_name" identifier -> field_identifier) [ number_literal ])) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar12 = paVar7->ar_name[0] == *pbVar8;" (assignment_expression "bVar12 = paVar7->ar_name[0] == *pbVar8" identifier = (binary_expression "paVar7->ar_name[0] == *pbVar8" (subscript_expression "paVar7->ar_name[0]" (field_expression "paVar7->ar_name" identifier -> field_identifier) [ number_literal ]) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);" (assignment_expression "paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1)" identifier = (cast_expression "(ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1)" ( (type_descriptor "ar_hdr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)paVar7 + (ulong)bVar14 * -2 + 1)" ( (binary_expression "(long)paVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "(long)paVar7 + (ulong)bVar14 * -2" (cast_expression "(long)paVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal) )))) ;) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" identifier = false) ;) (expression_statement "bVar9 = (!bVar9 && !bVar12) == bVar9;" (assignment_expression "bVar9 = (!bVar9 && !bVar12) == bVar9" identifier = (binary_expression "(!bVar9 && !bVar12) == bVar9" (parenthesized_expression "(!bVar9 && !bVar12)" ( (binary_expression "!bVar9 && !bVar12" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar9) {\n    iVar2 = process_archive_index_and_symbols(arch,4,read_symbols);\njoined_r0x001557d2:\n    uVar13 = iVar2 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    paVar7 = __ptr;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;\n      bVar9 = paVar7->ar_name[0] == *pbVar8;\n      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      arch->uses_64bit_indicies = 1;\n      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = read_symbols == 0;\n    if (!(bool)uVar13) {\n      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar3,file_name);\n    }\n  }" if (parenthesized_expression "(bVar9)" ( identifier )) (compound_statement "{\n    iVar2 = process_archive_index_and_symbols(arch,4,read_symbols);\njoined_r0x001557d2:\n    uVar13 = iVar2 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }" { (expression_statement "iVar2 = process_archive_index_and_symbols(arch,4,read_symbols);" (assignment_expression "iVar2 = process_archive_index_and_symbols(arch,4,read_symbols)" identifier = (call_expression "process_archive_index_and_symbols(arch,4,read_symbols)" identifier (argument_list "(arch,4,read_symbols)" ( identifier , number_literal , identifier )))) ;) (labeled_statement "joined_r0x001557d2:\n    uVar13 = iVar2 == 0;" statement_identifier : (expression_statement "uVar13 = iVar2 == 0;" (assignment_expression "uVar13 = iVar2 == 0" identifier = (binary_expression "iVar2 == 0" identifier == number_literal)) ;)) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (if_statement "if ((bool)uVar13) {\n      return 1;\n    }" if (parenthesized_expression "((bool)uVar13)" ( (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else {\n    lVar6 = 0x10;\n    paVar7 = __ptr;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;\n      bVar9 = paVar7->ar_name[0] == *pbVar8;\n      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      arch->uses_64bit_indicies = 1;\n      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = read_symbols == 0;\n    if (!(bool)uVar13) {\n      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar3,file_name);\n    }\n  }" else (compound_statement "{\n    lVar6 = 0x10;\n    paVar7 = __ptr;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;\n      bVar9 = paVar7->ar_name[0] == *pbVar8;\n      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      arch->uses_64bit_indicies = 1;\n      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = read_symbols == 0;\n    if (!(bool)uVar13) {\n      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar3,file_name);\n    }\n  }" { (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "paVar7 = __ptr;" (assignment_expression "paVar7 = __ptr" identifier = identifier) ;) (expression_statement "pbVar8 = (byte *)"/SYM64/         ";" (assignment_expression "pbVar8 = (byte *)"/SYM64/         "" identifier = (cast_expression "(byte *)"/SYM64/         "" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""/SYM64/         "" " string_content "))) ;) (do_statement "do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;\n      bVar9 = paVar7->ar_name[0] == *pbVar8;\n      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);" do (compound_statement "{\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;\n      bVar9 = paVar7->ar_name[0] == *pbVar8;\n      paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = (byte)paVar7->ar_name[0] < *pbVar8;" (assignment_expression "bVar10 = (byte)paVar7->ar_name[0] < *pbVar8" identifier = (binary_expression "(byte)paVar7->ar_name[0] < *pbVar8" (cast_expression "(byte)paVar7->ar_name[0]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "paVar7->ar_name[0]" (field_expression "paVar7->ar_name" identifier -> field_identifier) [ number_literal ])) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar9 = paVar7->ar_name[0] == *pbVar8;" (assignment_expression "bVar9 = paVar7->ar_name[0] == *pbVar8" identifier = (binary_expression "paVar7->ar_name[0] == *pbVar8" (subscript_expression "paVar7->ar_name[0]" (field_expression "paVar7->ar_name" identifier -> field_identifier) [ number_literal ]) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1);" (assignment_expression "paVar7 = (ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1)" identifier = (cast_expression "(ar_hdr *)((long)paVar7 + (ulong)bVar14 * -2 + 1)" ( (type_descriptor "ar_hdr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)paVar7 + (ulong)bVar14 * -2 + 1)" ( (binary_expression "(long)paVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "(long)paVar7 + (ulong)bVar14 * -2" (cast_expression "(long)paVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal) )))) ;) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar9)" ( identifier )) ;) (if_statement "if ((!bVar10 && !bVar9) == bVar10) {\n      arch->uses_64bit_indicies = 1;\n      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);\n      goto joined_r0x001557d2;\n    }" if (parenthesized_expression "((!bVar10 && !bVar9) == bVar10)" ( (binary_expression "(!bVar10 && !bVar9) == bVar10" (parenthesized_expression "(!bVar10 && !bVar9)" ( (binary_expression "!bVar10 && !bVar9" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar9" ! identifier)) )) == identifier) )) (compound_statement "{\n      arch->uses_64bit_indicies = 1;\n      iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);\n      goto joined_r0x001557d2;\n    }" { (expression_statement "arch->uses_64bit_indicies = 1;" (assignment_expression "arch->uses_64bit_indicies = 1" (field_expression "arch->uses_64bit_indicies" identifier -> field_identifier) = number_literal) ;) (expression_statement "iVar2 = process_archive_index_and_symbols(arch,8,read_symbols);" (assignment_expression "iVar2 = process_archive_index_and_symbols(arch,8,read_symbols)" identifier = (call_expression "process_archive_index_and_symbols(arch,8,read_symbols)" identifier (argument_list "(arch,8,read_symbols)" ( identifier , number_literal , identifier )))) ;) (goto_statement "goto joined_r0x001557d2;" goto statement_identifier ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = read_symbols == 0;" (assignment_expression "uVar13 = read_symbols == 0" identifier = (binary_expression "read_symbols == 0" identifier == number_literal)) ;) (if_statement "if (!(bool)uVar13) {\n      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar3,file_name);\n    }" if (parenthesized_expression "(!(bool)uVar13)" ( (unary_expression "!(bool)uVar13" ! (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n      pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar3,file_name);\n    }" { (expression_statement "pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5);" (assignment_expression "pcVar3 = (char *)dcgettext(0,"%s has no archive index\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s has no archive index\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s has no archive index\n",5)" identifier (argument_list "(0,"%s has no archive index\n",5)" ( number_literal , (string_literal ""%s has no archive index\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 1;" (assignment_expression "uVar13 = 1" identifier = number_literal) ;) (expression_statement "printf(pcVar3,file_name);" (call_expression "printf(pcVar3,file_name)" identifier (argument_list "(pcVar3,file_name)" ( identifier , identifier ))) ;) })) }))) (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "pbVar8 = (byte *)"//              ";" (assignment_expression "pbVar8 = (byte *)"//              "" identifier = (cast_expression "(byte *)"//              "" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""//              "" " string_content "))) ;) (do_statement "do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = (byte)__ptr->ar_name[0] < *pbVar8;\n    uVar13 = __ptr->ar_name[0] == *pbVar8;\n    __ptr = (ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);" do (compound_statement "{\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = (byte)__ptr->ar_name[0] < *pbVar8;\n    uVar13 = __ptr->ar_name[0] == *pbVar8;\n    __ptr = (ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1);\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar11 = (byte)__ptr->ar_name[0] < *pbVar8;" (assignment_expression "uVar11 = (byte)__ptr->ar_name[0] < *pbVar8" identifier = (binary_expression "(byte)__ptr->ar_name[0] < *pbVar8" (cast_expression "(byte)__ptr->ar_name[0]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "__ptr->ar_name[0]" (field_expression "__ptr->ar_name" identifier -> field_identifier) [ number_literal ])) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "uVar13 = __ptr->ar_name[0] == *pbVar8;" (assignment_expression "uVar13 = __ptr->ar_name[0] == *pbVar8" identifier = (binary_expression "__ptr->ar_name[0] == *pbVar8" (subscript_expression "__ptr->ar_name[0]" (field_expression "__ptr->ar_name" identifier -> field_identifier) [ number_literal ]) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "__ptr = (ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1);" (assignment_expression "__ptr = (ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1)" identifier = (cast_expression "(ar_hdr *)((long)__ptr + (ulong)bVar14 * -2 + 1)" ( (type_descriptor "ar_hdr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__ptr + (ulong)bVar14 * -2 + 1)" ( (binary_expression "(long)__ptr + (ulong)bVar14 * -2 + 1" (binary_expression "(long)__ptr + (ulong)bVar14 * -2" (cast_expression "(long)__ptr" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal) )))) ;) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar13)" ( (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (if_statement "if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }" if (parenthesized_expression "((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11)" ( (binary_expression "(!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11" (parenthesized_expression "(!(bool)uVar11 && !(bool)uVar13)" ( (binary_expression "!(bool)uVar11 && !(bool)uVar13" (unary_expression "!(bool)uVar11" ! (cast_expression "(bool)uVar11" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar13" ! (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier))) )) != (cast_expression "(bool)uVar11" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "cVar1 = (arch->arhdr).ar_fmag[0];" (assignment_expression "cVar1 = (arch->arhdr).ar_fmag[0]" identifier = (subscript_expression "(arch->arhdr).ar_fmag[0]" (field_expression "(arch->arhdr).ar_fmag" (parenthesized_expression "(arch->arhdr)" ( (field_expression "arch->arhdr" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "(arch->arhdr).ar_fmag[0] = '\0';" (assignment_expression "(arch->arhdr).ar_fmag[0] = '\0'" (subscript_expression "(arch->arhdr).ar_fmag[0]" (field_expression "(arch->arhdr).ar_fmag" (parenthesized_expression "(arch->arhdr)" ( (field_expression "arch->arhdr" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "uVar5 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);" (assignment_expression "uVar5 = strtoul((arch->arhdr).ar_size,(char **)0x0,10)" identifier = (call_expression "strtoul((arch->arhdr).ar_size,(char **)0x0,10)" identifier (argument_list "((arch->arhdr).ar_size,(char **)0x0,10)" ( (field_expression "(arch->arhdr).ar_size" (parenthesized_expression "(arch->arhdr)" ( (field_expression "arch->arhdr" identifier -> field_identifier) )) . field_identifier) , (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal) , number_literal )))) ;) (expression_statement "(arch->arhdr).ar_fmag[0] = cVar1;" (assignment_expression "(arch->arhdr).ar_fmag[0] = cVar1" (subscript_expression "(arch->arhdr).ar_fmag[0]" (field_expression "(arch->arhdr).ar_fmag" (parenthesized_expression "(arch->arhdr)" ( (field_expression "arch->arhdr" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = identifier) ;) (expression_statement "pcVar3 = "%s: long name table is too small, (size = %ld)\n";" (assignment_expression "pcVar3 = "%s: long name table is too small, (size = %ld)\n"" identifier = (string_literal ""%s: long name table is too small, (size = %ld)\n"" " string_content escape_sequence ")) ;) (expression_statement "arch->longnames_size = uVar5;" (assignment_expression "arch->longnames_size = uVar5" (field_expression "arch->longnames_size" identifier -> field_identifier) = identifier) ;) (if_statement "if (7 < uVar5) {\n    if (-1 < (long)uVar5) {\n      arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;\n      pcVar3 = (char *)malloc(uVar5 + 1);\n      arch->longnames = pcVar3;\n      if (pcVar3 == (char *)0x0) {\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }\n      sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);\n      if (sVar4 == 1) {\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }\n      free(arch->longnames);\n      arch->longnames = (char *)0x0;\n      pcVar3 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      pcVar3 = (char *)dcgettext(0,pcVar3,5);\n      error(pcVar3,file_name);\n      return 1;\n    }\n    pcVar3 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }" if (parenthesized_expression "(7 < uVar5)" ( (binary_expression "7 < uVar5" number_literal < identifier) )) (compound_statement "{\n    if (-1 < (long)uVar5) {\n      arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;\n      pcVar3 = (char *)malloc(uVar5 + 1);\n      arch->longnames = pcVar3;\n      if (pcVar3 == (char *)0x0) {\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }\n      sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);\n      if (sVar4 == 1) {\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }\n      free(arch->longnames);\n      arch->longnames = (char *)0x0;\n      pcVar3 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      pcVar3 = (char *)dcgettext(0,pcVar3,5);\n      error(pcVar3,file_name);\n      return 1;\n    }\n    pcVar3 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }" { (if_statement "if (-1 < (long)uVar5) {\n      arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;\n      pcVar3 = (char *)malloc(uVar5 + 1);\n      arch->longnames = pcVar3;\n      if (pcVar3 == (char *)0x0) {\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }\n      sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);\n      if (sVar4 == 1) {\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }\n      free(arch->longnames);\n      arch->longnames = (char *)0x0;\n      pcVar3 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      pcVar3 = (char *)dcgettext(0,pcVar3,5);\n      error(pcVar3,file_name);\n      return 1;\n    }" if (parenthesized_expression "(-1 < (long)uVar5)" ( (binary_expression "-1 < (long)uVar5" number_literal < (cast_expression "(long)uVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (compound_statement "{\n      arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;\n      pcVar3 = (char *)malloc(uVar5 + 1);\n      arch->longnames = pcVar3;\n      if (pcVar3 == (char *)0x0) {\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }\n      sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);\n      if (sVar4 == 1) {\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }\n      free(arch->longnames);\n      arch->longnames = (char *)0x0;\n      pcVar3 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      pcVar3 = (char *)dcgettext(0,pcVar3,5);\n      error(pcVar3,file_name);\n      return 1;\n    }" { (expression_statement "arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset;" (assignment_expression "arch->next_arhdr_offset = uVar5 + 0x3c + arch->next_arhdr_offset" (field_expression "arch->next_arhdr_offset" identifier -> field_identifier) = (binary_expression "uVar5 + 0x3c + arch->next_arhdr_offset" (binary_expression "uVar5 + 0x3c" identifier + number_literal) + (field_expression "arch->next_arhdr_offset" identifier -> field_identifier))) ;) (expression_statement "pcVar3 = (char *)malloc(uVar5 + 1);" (assignment_expression "pcVar3 = (char *)malloc(uVar5 + 1)" identifier = (cast_expression "(char *)malloc(uVar5 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(uVar5 + 1)" identifier (argument_list "(uVar5 + 1)" ( (binary_expression "uVar5 + 1" identifier + number_literal) ))))) ;) (expression_statement "arch->longnames = pcVar3;" (assignment_expression "arch->longnames = pcVar3" (field_expression "arch->longnames" identifier -> field_identifier) = identifier) ;) (if_statement "if (pcVar3 == (char *)0x0) {\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }" if (parenthesized_expression "(pcVar3 == (char *)0x0)" ( (binary_expression "pcVar3 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(pcVar3);\n        return 1;\n      }" { (expression_statement "pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5);" (assignment_expression "pcVar3 = (char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" identifier (argument_list "(0,"Out of memory reading long symbol names in archive\n",5)" ( number_literal , (string_literal ""Out of memory reading long symbol names in archive\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "error(pcVar3);" (call_expression "error(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "sVar4 = fread(pcVar3,uVar5,1,(FILE *)file);" (assignment_expression "sVar4 = fread(pcVar3,uVar5,1,(FILE *)file)" identifier = (call_expression "fread(pcVar3,uVar5,1,(FILE *)file)" identifier (argument_list "(pcVar3,uVar5,1,(FILE *)file)" ( identifier , identifier , number_literal , (cast_expression "(FILE *)file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if (sVar4 == 1) {\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }" if (parenthesized_expression "(sVar4 == 1)" ( (binary_expression "sVar4 == 1" identifier == number_literal) )) (compound_statement "{\n        uVar5 = arch->longnames_size;\n        if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }\n        arch->longnames[uVar5] = '\0';\n        return 0;\n      }" { (expression_statement "uVar5 = arch->longnames_size;" (assignment_expression "uVar5 = arch->longnames_size" identifier = (field_expression "arch->longnames_size" identifier -> field_identifier)) ;) (if_statement "if ((uVar5 & 1) != 0) {\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }" if (parenthesized_expression "((uVar5 & 1) != 0)" ( (binary_expression "(uVar5 & 1) != 0" (parenthesized_expression "(uVar5 & 1)" ( (binary_expression "uVar5 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          getc((FILE *)file);\n          uVar5 = arch->longnames_size;\n        }" { (expression_statement "getc((FILE *)file);" (call_expression "getc((FILE *)file)" identifier (argument_list "((FILE *)file)" ( (cast_expression "(FILE *)file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "uVar5 = arch->longnames_size;" (assignment_expression "uVar5 = arch->longnames_size" identifier = (field_expression "arch->longnames_size" identifier -> field_identifier)) ;) })) (expression_statement "arch->longnames[uVar5] = '\0';" (assignment_expression "arch->longnames[uVar5] = '\0'" (subscript_expression "arch->longnames[uVar5]" (field_expression "arch->longnames" identifier -> field_identifier) [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "free(arch->longnames);" (call_expression "free(arch->longnames)" identifier (argument_list "(arch->longnames)" ( (field_expression "arch->longnames" identifier -> field_identifier) ))) ;) (expression_statement "arch->longnames = (char *)0x0;" (assignment_expression "arch->longnames = (char *)0x0" (field_expression "arch->longnames" identifier -> field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pcVar3 = "%s: failed to read long symbol name string table\n";" (assignment_expression "pcVar3 = "%s: failed to read long symbol name string table\n"" identifier = (string_literal ""%s: failed to read long symbol name string table\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_0015579c:\n      pcVar3 = (char *)dcgettext(0,pcVar3,5);" statement_identifier : (expression_statement "pcVar3 = (char *)dcgettext(0,pcVar3,5);" (assignment_expression "pcVar3 = (char *)dcgettext(0,pcVar3,5)" identifier = (cast_expression "(char *)dcgettext(0,pcVar3,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar3,5)" identifier (argument_list "(0,pcVar3,5)" ( number_literal , identifier , number_literal ))))) ;)) (expression_statement "error(pcVar3,file_name);" (call_expression "error(pcVar3,file_name)" identifier (argument_list "(pcVar3,file_name)" ( identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar3 = "%s: long name table is too big, (size = 0x%lx)\n";" (assignment_expression "pcVar3 = "%s: long name table is too big, (size = 0x%lx)\n"" identifier = (string_literal ""%s: long name table is too big, (size = 0x%lx)\n"" " string_content escape_sequence ")) ;) })) (expression_statement "pcVar3 = (char *)dcgettext(0,pcVar3,5);" (assignment_expression "pcVar3 = (char *)dcgettext(0,pcVar3,5)" identifier = (cast_expression "(char *)dcgettext(0,pcVar3,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar3,5)" identifier (argument_list "(0,pcVar3,5)" ( number_literal , identifier , number_literal ))))) ;) (expression_statement "error(pcVar3,file_name,uVar5);" (call_expression "error(pcVar3,file_name,uVar5)" identifier (argument_list "(pcVar3,file_name,uVar5)" ( identifier , identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "undefined4\nFUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)\n\n{\n  int iVar1;\n  char *pcVar2;\n  size_t sVar3;\n  ulong uVar4;\n  void *__ptr;\n  undefined8 uVar5;\n  long lVar6;\n  byte *pbVar7;\n  byte *__ptr_00;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar2 = strdup(param_2);\n  param_1[1] = param_3;\n  *param_1 = pcVar2;\n  param_1[2] = 0;\n  param_1[3] = 0;\n  param_1[4] = 0;\n  param_1[5] = 0;\n  param_1[6] = 0;\n  param_1[7] = 0;\n  param_1[8] = 0;\n  *(undefined4 *)(param_1 + 10) = param_4;\n  *(undefined4 *)((long)param_1 + 0x54) = 0;\n  param_1[9] = 8;\n  iVar1 = fseek(param_3,8,0);\n  pcVar2 = "%s: failed to seek to first archive header\n";\n  if (iVar1 != 0) goto LAB_0015579c;\n  __ptr_00 = (byte *)(param_1 + 0xb);\n  sVar3 = fread(__ptr_00,1,0x3c,param_3);\n  bVar9 = sVar3 < 0x3c;\n  bVar12 = sVar3 == 0x3c;\n  if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  pbVar7 = __ptr_00;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  } while ((bool)uVar13);\n  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }\n  uVar11 = *(undefined1 *)((long)param_1 + 0x92);\n  *(undefined1 *)((long)param_1 + 0x92) = 0;\n  uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);\n  *(undefined1 *)((long)param_1 + 0x92) = uVar11;\n  pcVar2 = "%s: long name table is too small, (size = %ld)\n";\n  param_1[7] = uVar4;\n  if (7 < uVar4) {\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }\n  uVar5 = dcgettext(0,pcVar2,5);\n  error(uVar5,param_2,uVar4);\n  return 1;\n}\n\n" (function_definition "undefined4\nFUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)\n\n{\n  int iVar1;\n  char *pcVar2;\n  size_t sVar3;\n  ulong uVar4;\n  void *__ptr;\n  undefined8 uVar5;\n  long lVar6;\n  byte *pbVar7;\n  byte *__ptr_00;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar2 = strdup(param_2);\n  param_1[1] = param_3;\n  *param_1 = pcVar2;\n  param_1[2] = 0;\n  param_1[3] = 0;\n  param_1[4] = 0;\n  param_1[5] = 0;\n  param_1[6] = 0;\n  param_1[7] = 0;\n  param_1[8] = 0;\n  *(undefined4 *)(param_1 + 10) = param_4;\n  *(undefined4 *)((long)param_1 + 0x54) = 0;\n  param_1[9] = 8;\n  iVar1 = fseek(param_3,8,0);\n  pcVar2 = "%s: failed to seek to first archive header\n";\n  if (iVar1 != 0) goto LAB_0015579c;\n  __ptr_00 = (byte *)(param_1 + 0xb);\n  sVar3 = fread(__ptr_00,1,0x3c,param_3);\n  bVar9 = sVar3 < 0x3c;\n  bVar12 = sVar3 == 0x3c;\n  if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  pbVar7 = __ptr_00;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  }" type_identifier (function_declarator "FUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)" identifier (parameter_list "(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "FILE *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  char *pcVar2;\n  size_t sVar3;\n  ulong uVar4;\n  void *__ptr;\n  undefined8 uVar5;\n  long lVar6;\n  byte *pbVar7;\n  byte *__ptr_00;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar2 = strdup(param_2);\n  param_1[1] = param_3;\n  *param_1 = pcVar2;\n  param_1[2] = 0;\n  param_1[3] = 0;\n  param_1[4] = 0;\n  param_1[5] = 0;\n  param_1[6] = 0;\n  param_1[7] = 0;\n  param_1[8] = 0;\n  *(undefined4 *)(param_1 + 10) = param_4;\n  *(undefined4 *)((long)param_1 + 0x54) = 0;\n  param_1[9] = 8;\n  iVar1 = fseek(param_3,8,0);\n  pcVar2 = "%s: failed to seek to first archive header\n";\n  if (iVar1 != 0) goto LAB_0015579c;\n  __ptr_00 = (byte *)(param_1 + 0xb);\n  sVar3 = fread(__ptr_00,1,0x3c,param_3);\n  bVar9 = sVar3 < 0x3c;\n  bVar12 = sVar3 == 0x3c;\n  if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  pbVar7 = __ptr_00;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  }" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "byte *__ptr_00;" type_identifier (pointer_declarator "*__ptr_00" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "undefined1 uVar11;" type_identifier identifier ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined1 uVar13;" type_identifier identifier ;) (declaration "byte bVar14;" type_identifier identifier ;) (expression_statement "bVar14 = 0;" (assignment_expression "bVar14 = 0" identifier = number_literal) ;) (expression_statement "pcVar2 = strdup(param_2);" (assignment_expression "pcVar2 = strdup(param_2)" identifier = (call_expression "strdup(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "param_1[1] = param_3;" (assignment_expression "param_1[1] = param_3" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*param_1 = pcVar2;" (assignment_expression "*param_1 = pcVar2" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[7] = 0;" (assignment_expression "param_1[7] = 0" (subscript_expression "param_1[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 10) = param_4;" (assignment_expression "*(undefined4 *)(param_1 + 10) = param_4" (pointer_expression "*(undefined4 *)(param_1 + 10)" * (cast_expression "(undefined4 *)(param_1 + 10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)((long)param_1 + 0x54) = 0;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x54) = 0" (pointer_expression "*(undefined4 *)((long)param_1 + 0x54)" * (cast_expression "(undefined4 *)((long)param_1 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x54)" ( (binary_expression "(long)param_1 + 0x54" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "param_1[9] = 8;" (assignment_expression "param_1[9] = 8" (subscript_expression "param_1[9]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar1 = fseek(param_3,8,0);" (assignment_expression "iVar1 = fseek(param_3,8,0)" identifier = (call_expression "fseek(param_3,8,0)" identifier (argument_list "(param_3,8,0)" ( identifier , number_literal , number_literal )))) ;) (expression_statement "pcVar2 = "%s: failed to seek to first archive header\n";" (assignment_expression "pcVar2 = "%s: failed to seek to first archive header\n"" identifier = (string_literal ""%s: failed to seek to first archive header\n"" " string_content escape_sequence ")) ;) (if_statement "if (iVar1 != 0) goto LAB_0015579c;" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015579c;" goto statement_identifier ;)) (expression_statement "__ptr_00 = (byte *)(param_1 + 0xb);" (assignment_expression "__ptr_00 = (byte *)(param_1 + 0xb)" identifier = (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) ;) (expression_statement "sVar3 = fread(__ptr_00,1,0x3c,param_3);" (assignment_expression "sVar3 = fread(__ptr_00,1,0x3c,param_3)" identifier = (call_expression "fread(__ptr_00,1,0x3c,param_3)" identifier (argument_list "(__ptr_00,1,0x3c,param_3)" ( identifier , number_literal , number_literal , identifier )))) ;) (expression_statement "bVar9 = sVar3 < 0x3c;" (assignment_expression "bVar9 = sVar3 < 0x3c" identifier = (binary_expression "sVar3 < 0x3c" identifier < number_literal)) ;) (expression_statement "bVar12 = sVar3 == 0x3c;" (assignment_expression "bVar12 = sVar3 == 0x3c" identifier = (binary_expression "sVar3 == 0x3c" identifier == number_literal)) ;) (if_statement "if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }" if (parenthesized_expression "(!bVar12)" ( (unary_expression "!bVar12" ! identifier) )) (compound_statement "{\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }" { (if_statement "if (sVar3 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(sVar3 == 0)" ( (binary_expression "sVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar2 = "%s: failed to read archive header\n";" (assignment_expression "pcVar2 = "%s: failed to read archive header\n"" identifier = (string_literal ""%s: failed to read archive header\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0015579c;" goto statement_identifier ;) })) (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "pbVar7 = __ptr_00;" (assignment_expression "pbVar7 = __ptr_00" identifier = identifier) ;) (expression_statement "pbVar8 = (byte *)"/               ";" (assignment_expression "pbVar8 = (byte *)"/               "" identifier = (cast_expression "(byte *)"/               "" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""/               "" " string_content "))) ;) (do_statement "do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);" do (compound_statement "{\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar9 = *pbVar7 < *pbVar8;" (assignment_expression "bVar9 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar12 = *pbVar7 == *pbVar8;" (assignment_expression "bVar12 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar12)" ( identifier )) ;) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" identifier = false) ;) (expression_statement "bVar9 = (!bVar9 && !bVar12) == bVar9;" (assignment_expression "bVar9 = (!bVar9 && !bVar12) == bVar9" identifier = (binary_expression "(!bVar9 && !bVar12) == bVar9" (parenthesized_expression "(!bVar9 && !bVar12)" ( (binary_expression "!bVar9 && !bVar12" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar12" ! identifier)) )) == identifier)) ;) (if_statement "if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" if (parenthesized_expression "(bVar9)" ( identifier )) (compound_statement "{\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }" { (expression_statement "iVar1 = FUN_00154d60(param_1,4,param_5);" (assignment_expression "iVar1 = FUN_00154d60(param_1,4,param_5)" identifier = (call_expression "FUN_00154d60(param_1,4,param_5)" identifier (argument_list "(param_1,4,param_5)" ( identifier , number_literal , identifier )))) ;) (labeled_statement "joined_r0x001557d2:\n    uVar13 = iVar1 == 0;" statement_identifier : (expression_statement "uVar13 = iVar1 == 0;" (assignment_expression "uVar13 = iVar1 == 0" identifier = (binary_expression "iVar1 == 0" identifier == number_literal)) ;)) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (if_statement "if ((bool)uVar13) {\n      return 1;\n    }" if (parenthesized_expression "((bool)uVar13)" ( (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" else (compound_statement "{\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" { (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "pbVar7 = __ptr_00;" (assignment_expression "pbVar7 = __ptr_00" identifier = identifier) ;) (expression_statement "pbVar8 = (byte *)"/SYM64/         ";" (assignment_expression "pbVar8 = (byte *)"/SYM64/         "" identifier = (cast_expression "(byte *)"/SYM64/         "" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""/SYM64/         "" " string_content "))) ;) (do_statement "do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);" do (compound_statement "{\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    }" { (if_statement "if (lVar6 == 0) break;" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = *pbVar7 < *pbVar8;" (assignment_expression "bVar10 = *pbVar7 < *pbVar8" identifier = (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" * identifier) < (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "bVar9 = *pbVar7 == *pbVar8;" (assignment_expression "bVar9 = *pbVar7 == *pbVar8" identifier = (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" * identifier) == (pointer_expression "*pbVar8" * identifier))) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar9)" ( identifier )) ;) (if_statement "if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }" if (parenthesized_expression "((!bVar10 && !bVar9) == bVar10)" ( (binary_expression "(!bVar10 && !bVar9) == bVar10" (parenthesized_expression "(!bVar10 && !bVar9)" ( (binary_expression "!bVar10 && !bVar9" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar9" ! identifier)) )) == identifier) )) (compound_statement "{\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }" { (expression_statement "*(undefined4 *)((long)param_1 + 0x54) = 1;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x54) = 1" (pointer_expression "*(undefined4 *)((long)param_1 + 0x54)" * (cast_expression "(undefined4 *)((long)param_1 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x54)" ( (binary_expression "(long)param_1 + 0x54" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar1 = FUN_00154d60(param_1,8,param_5);" (assignment_expression "iVar1 = FUN_00154d60(param_1,8,param_5)" identifier = (call_expression "FUN_00154d60(param_1,8,param_5)" identifier (argument_list "(param_1,8,param_5)" ( identifier , number_literal , identifier )))) ;) (goto_statement "goto joined_r0x001557d2;" goto statement_identifier ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = param_5 == 0;" (assignment_expression "uVar13 = param_5 == 0" identifier = (binary_expression "param_5 == 0" identifier == number_literal)) ;) (if_statement "if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }" if (parenthesized_expression "(!(bool)uVar13)" ( (unary_expression "!(bool)uVar13" ! (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }" { (expression_statement "pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s has no archive index\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s has no archive index\n",5)" identifier (argument_list "(0,"%s has no archive index\n",5)" ( number_literal , (string_literal ""%s has no archive index\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (expression_statement "uVar13 = 1;" (assignment_expression "uVar13 = 1" identifier = number_literal) ;) (expression_statement "printf(pcVar2,param_2);" (call_expression "printf(pcVar2,param_2)" identifier (argument_list "(pcVar2,param_2)" ( identifier , identifier ))) ;) })) }))) (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" identifier = number_literal) ;) (expression_statement "pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" identifier = (compound_literal_expression "(byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (ERROR ""\n  do" " identifier) (initializer_list "{\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" { (ERROR "if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;" (call_expression "if (lVar6 == 0)" identifier (argument_list "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) ))) identifier ; (assignment_expression "lVar6 = lVar6 + -1" identifier = (binary_expression "lVar6 + -1" identifier + number_literal)) ; (assignment_expression "uVar11 = *__ptr_00 < *pbVar7" identifier = (binary_expression "*__ptr_00 < *pbVar7" (pointer_expression "*__ptr_00" * identifier) < (pointer_expression "*pbVar7" * identifier))) ; (assignment_expression "uVar13 = *__ptr_00 == *pbVar7" identifier = (binary_expression "*__ptr_00 == *pbVar7" (pointer_expression "*__ptr_00" * identifier) == (pointer_expression "*pbVar7" * identifier))) ; (assignment_expression "__ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "__ptr_00 + (ulong)bVar14 * -2 + 1" (binary_expression "__ptr_00 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" identifier + (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) }))) ;) })) (while_statement "while ((bool)uVar13);" while (parenthesized_expression "((bool)uVar13)" ( (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier) )) (expression_statement ";" ;)) (if_statement "if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }" if (parenthesized_expression "((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11)" ( (binary_expression "(!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11" (parenthesized_expression "(!(bool)uVar11 && !(bool)uVar13)" ( (binary_expression "!(bool)uVar11 && !(bool)uVar13" (unary_expression "!(bool)uVar11" ! (cast_expression "(bool)uVar11" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar13" ! (cast_expression "(bool)uVar13" ( (type_descriptor "bool" primitive_type) ) identifier))) )) != (cast_expression "(bool)uVar11" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar11 = *(undefined1 *)((long)param_1 + 0x92);" (assignment_expression "uVar11 = *(undefined1 *)((long)param_1 + 0x92)" identifier = (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" * (cast_expression "(undefined1 *)((long)param_1 + 0x92)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x92)" ( (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "*(undefined1 *)((long)param_1 + 0x92) = 0;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = 0" (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" * (cast_expression "(undefined1 *)((long)param_1 + 0x92)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x92)" ( (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);" (assignment_expression "uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10)" identifier = (call_expression "strtoul((char *)(param_1 + 0x11),(char **)0x0,10)" identifier (argument_list "((char *)(param_1 + 0x11),(char **)0x0,10)" ( (cast_expression "(char *)(param_1 + 0x11)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x11)" ( (binary_expression "param_1 + 0x11" identifier + number_literal) ))) , (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal) , number_literal )))) ;) (expression_statement "*(undefined1 *)((long)param_1 + 0x92) = uVar11;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = uVar11" (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" * (cast_expression "(undefined1 *)((long)param_1 + 0x92)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x92)" ( (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "pcVar2 = "%s: long name table is too small, (size = %ld)\n";" (assignment_expression "pcVar2 = "%s: long name table is too small, (size = %ld)\n"" identifier = (string_literal ""%s: long name table is too small, (size = %ld)\n"" " string_content escape_sequence ")) ;) (expression_statement "param_1[7] = uVar4;" (assignment_expression "param_1[7] = uVar4" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (7 < uVar4) {\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }" if (parenthesized_expression "(7 < uVar4)" ( (binary_expression "7 < uVar4" number_literal < identifier) )) (compound_statement "{\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }" { (if_statement "if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }" if (parenthesized_expression "(-1 < (long)uVar4)" ( (binary_expression "-1 < (long)uVar4" number_literal < (cast_expression "(long)uVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (compound_statement "{\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }" { (expression_statement "param_1[9] = uVar4 + 0x3c + param_1[9];" (assignment_expression "param_1[9] = uVar4 + 0x3c + param_1[9]" (subscript_expression "param_1[9]" identifier [ number_literal ]) = (binary_expression "uVar4 + 0x3c + param_1[9]" (binary_expression "uVar4 + 0x3c" identifier + number_literal) + (subscript_expression "param_1[9]" identifier [ number_literal ]))) ;) (expression_statement "__ptr = malloc(uVar4 + 1);" (assignment_expression "__ptr = malloc(uVar4 + 1)" identifier = (call_expression "malloc(uVar4 + 1)" identifier (argument_list "(uVar4 + 1)" ( (binary_expression "uVar4 + 1" identifier + number_literal) )))) ;) (expression_statement "param_1[6] = __ptr;" (assignment_expression "param_1[6] = __ptr" (subscript_expression "param_1[6]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }" if (parenthesized_expression "(__ptr == (void *)0x0)" ( (binary_expression "__ptr == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }" { (expression_statement "uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);" (assignment_expression "uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" identifier = (call_expression "dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" identifier (argument_list "(0,"Out of memory reading long symbol names in archive\n",5)" ( number_literal , (string_literal ""Out of memory reading long symbol names in archive\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar5);" (call_expression "error(uVar5)" identifier (argument_list "(uVar5)" ( identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "sVar3 = fread(__ptr,uVar4,1,param_3);" (assignment_expression "sVar3 = fread(__ptr,uVar4,1,param_3)" identifier = (call_expression "fread(__ptr,uVar4,1,param_3)" identifier (argument_list "(__ptr,uVar4,1,param_3)" ( identifier , identifier , number_literal , identifier )))) ;) (if_statement "if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }" if (parenthesized_expression "(sVar3 == 1)" ( (binary_expression "sVar3 == 1" identifier == number_literal) )) (compound_statement "{\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }" { (expression_statement "uVar4 = param_1[7];" (assignment_expression "uVar4 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (if_statement "if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }" if (parenthesized_expression "((uVar4 & 1) != 0)" ( (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          getc(param_3);\n          uVar4 = param_1[7];\n        }" { (expression_statement "getc(param_3);" (call_expression "getc(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) (expression_statement "uVar4 = param_1[7];" (assignment_expression "uVar4 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) })) (expression_statement "*(undefined1 *)(param_1[6] + uVar4) = 0;" (assignment_expression "*(undefined1 *)(param_1[6] + uVar4) = 0" (pointer_expression "*(undefined1 *)(param_1[6] + uVar4)" * (cast_expression "(undefined1 *)(param_1[6] + uVar4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[6] + uVar4)" ( (binary_expression "param_1[6] + uVar4" (subscript_expression "param_1[6]" identifier [ number_literal ]) + identifier) )))) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "free((void *)param_1[6]);" (call_expression "free((void *)param_1[6])" identifier (argument_list "((void *)param_1[6])" ( (cast_expression "(void *)param_1[6]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) ))) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "pcVar2 = "%s: failed to read long symbol name string table\n";" (assignment_expression "pcVar2 = "%s: failed to read long symbol name string table\n"" identifier = (string_literal ""%s: failed to read long symbol name string table\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);" statement_identifier : (expression_statement "uVar5 = dcgettext(0,pcVar2,5);" (assignment_expression "uVar5 = dcgettext(0,pcVar2,5)" identifier = (call_expression "dcgettext(0,pcVar2,5)" identifier (argument_list "(0,pcVar2,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar5,param_2);" (call_expression "error(uVar5,param_2)" identifier (argument_list "(uVar5,param_2)" ( identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";" (assignment_expression "pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n"" identifier = (string_literal ""%s: long name table is too big, (size = 0x%lx)\n"" " string_content escape_sequence ")) ;) })) (expression_statement "uVar5 = dcgettext(0,pcVar2,5);" (assignment_expression "uVar5 = dcgettext(0,pcVar2,5)" identifier = (call_expression "dcgettext(0,pcVar2,5)" identifier (argument_list "(0,pcVar2,5)" ( number_literal , identifier , number_literal )))) ;) (expression_statement "error(uVar5,param_2,uVar4);" (call_expression "error(uVar5,param_2,uVar4)" identifier (argument_list "(uVar5,param_2,uVar4)" ( identifier , identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) (ERROR "}" }))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (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 ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (compound_literal_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (ERROR " IDENT) (initializer_list { (ERROR (call_expression IDENT (argument_list ( (binary_expression IDENT == LIT) ))) IDENT ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ; (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ; (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ; (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) }))) ;) })) (while_statement while (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )) (expression_statement ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) && (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT))) )) != (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression IDENT + LIT) + (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) = LIT) ;) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , LIT )))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (return_statement return LIT ;) (ERROR }))
(function_definition "undefined4\nFUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)\n\n{\n  int iVar1;\n  char *pcVar2;\n  size_t sVar3;\n  ulong uVar4;\n  void *__ptr;\n  undefined8 uVar5;\n  long lVar6;\n  byte *pbVar7;\n  byte *__ptr_00;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar2 = strdup(param_2);\n  param_1[1] = param_3;\n  *param_1 = pcVar2;\n  param_1[2] = 0;\n  param_1[3] = 0;\n  param_1[4] = 0;\n  param_1[5] = 0;\n  param_1[6] = 0;\n  param_1[7] = 0;\n  param_1[8] = 0;\n  *(undefined4 *)(param_1 + 10) = param_4;\n  *(undefined4 *)((long)param_1 + 0x54) = 0;\n  param_1[9] = 8;\n  iVar1 = fseek(param_3,8,0);\n  pcVar2 = "%s: failed to seek to first archive header\n";\n  if (iVar1 != 0) goto LAB_0015579c;\n  __ptr_00 = (byte *)(param_1 + 0xb);\n  sVar3 = fread(__ptr_00,1,0x3c,param_3);\n  bVar9 = sVar3 < 0x3c;\n  bVar12 = sVar3 == 0x3c;\n  if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  pbVar7 = __ptr_00;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  }" (type_identifier "undefined4") (function_declarator "FUN_001555a0(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)" (identifier "FUN_001555a0") (parameter_list "(undefined8 *param_1,char *param_2,FILE *param_3,undefined4 param_4,int param_5)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "FILE *param_3" (type_identifier "FILE") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")"))) (compound_statement "{\n  int iVar1;\n  char *pcVar2;\n  size_t sVar3;\n  ulong uVar4;\n  void *__ptr;\n  undefined8 uVar5;\n  long lVar6;\n  byte *pbVar7;\n  byte *__ptr_00;\n  byte *pbVar8;\n  bool bVar9;\n  bool bVar10;\n  undefined1 uVar11;\n  bool bVar12;\n  undefined1 uVar13;\n  byte bVar14;\n  \n  bVar14 = 0;\n  pcVar2 = strdup(param_2);\n  param_1[1] = param_3;\n  *param_1 = pcVar2;\n  param_1[2] = 0;\n  param_1[3] = 0;\n  param_1[4] = 0;\n  param_1[5] = 0;\n  param_1[6] = 0;\n  param_1[7] = 0;\n  param_1[8] = 0;\n  *(undefined4 *)(param_1 + 10) = param_4;\n  *(undefined4 *)((long)param_1 + 0x54) = 0;\n  param_1[9] = 8;\n  iVar1 = fseek(param_3,8,0);\n  pcVar2 = "%s: failed to seek to first archive header\n";\n  if (iVar1 != 0) goto LAB_0015579c;\n  __ptr_00 = (byte *)(param_1 + 0xb);\n  sVar3 = fread(__ptr_00,1,0x3c,param_3);\n  bVar9 = sVar3 < 0x3c;\n  bVar12 = sVar3 == 0x3c;\n  if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }\n  lVar6 = 0x10;\n  pbVar7 = __ptr_00;\n  pbVar8 = (byte *)"/               ";\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);\n  bVar10 = false;\n  bVar9 = (!bVar9 && !bVar12) == bVar9;\n  if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }\n  lVar6 = 0x10;\n  pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n  }" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "char *pcVar2;" (primitive_type "char") (pointer_declarator "*pcVar2" (* "*") (identifier "pcVar2")) (; ";")) (declaration "size_t sVar3;" (primitive_type "size_t") (identifier "sVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "void *__ptr;" (primitive_type "void") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "byte *pbVar7;" (type_identifier "byte") (pointer_declarator "*pbVar7" (* "*") (identifier "pbVar7")) (; ";")) (declaration "byte *__ptr_00;" (type_identifier "byte") (pointer_declarator "*__ptr_00" (* "*") (identifier "__ptr_00")) (; ";")) (declaration "byte *pbVar8;" (type_identifier "byte") (pointer_declarator "*pbVar8" (* "*") (identifier "pbVar8")) (; ";")) (declaration "bool bVar9;" (primitive_type "bool") (identifier "bVar9") (; ";")) (declaration "bool bVar10;" (primitive_type "bool") (identifier "bVar10") (; ";")) (declaration "undefined1 uVar11;" (type_identifier "undefined1") (identifier "uVar11") (; ";")) (declaration "bool bVar12;" (primitive_type "bool") (identifier "bVar12") (; ";")) (declaration "undefined1 uVar13;" (type_identifier "undefined1") (identifier "uVar13") (; ";")) (declaration "byte bVar14;" (type_identifier "byte") (identifier "bVar14") (; ";")) (expression_statement "bVar14 = 0;" (assignment_expression "bVar14 = 0" (identifier "bVar14") (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar2 = strdup(param_2);" (assignment_expression "pcVar2 = strdup(param_2)" (identifier "pcVar2") (= "=") (call_expression "strdup(param_2)" (identifier "strdup") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (expression_statement "param_1[1] = param_3;" (assignment_expression "param_1[1] = param_3" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "*param_1 = pcVar2;" (assignment_expression "*param_1 = pcVar2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "pcVar2")) (; ";")) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[7] = 0;" (assignment_expression "param_1[7] = 0" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 10) = param_4;" (assignment_expression "*(undefined4 *)(param_1 + 10) = param_4" (pointer_expression "*(undefined4 *)(param_1 + 10)" (* "*") (cast_expression "(undefined4 *)(param_1 + 10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 10)" (( "(") (binary_expression "param_1 + 10" (identifier "param_1") (+ "+") (number_literal "10")) () ")")))) (= "=") (identifier "param_4")) (; ";")) (expression_statement "*(undefined4 *)((long)param_1 + 0x54) = 0;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x54) = 0" (pointer_expression "*(undefined4 *)((long)param_1 + 0x54)" (* "*") (cast_expression "(undefined4 *)((long)param_1 + 0x54)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x54)" (( "(") (binary_expression "(long)param_1 + 0x54" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x54")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[9] = 8;" (assignment_expression "param_1[9] = 8" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (= "=") (number_literal "8")) (; ";")) (expression_statement "iVar1 = fseek(param_3,8,0);" (assignment_expression "iVar1 = fseek(param_3,8,0)" (identifier "iVar1") (= "=") (call_expression "fseek(param_3,8,0)" (identifier "fseek") (argument_list "(param_3,8,0)" (( "(") (identifier "param_3") (, ",") (number_literal "8") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "pcVar2 = "%s: failed to seek to first archive header\n";" (assignment_expression "pcVar2 = "%s: failed to seek to first archive header\n"" (identifier "pcVar2") (= "=") (string_literal ""%s: failed to seek to first archive header\n"" (" """) (string_content "%s: failed to seek to first archive header") (escape_sequence "\n") (" """))) (; ";")) (if_statement "if (iVar1 != 0) goto LAB_0015579c;" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0015579c;" (goto "goto") (statement_identifier "LAB_0015579c") (; ";"))) (expression_statement "__ptr_00 = (byte *)(param_1 + 0xb);" (assignment_expression "__ptr_00 = (byte *)(param_1 + 0xb)" (identifier "__ptr_00") (= "=") (cast_expression "(byte *)(param_1 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb)" (( "(") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb")) () ")")))) (; ";")) (expression_statement "sVar3 = fread(__ptr_00,1,0x3c,param_3);" (assignment_expression "sVar3 = fread(__ptr_00,1,0x3c,param_3)" (identifier "sVar3") (= "=") (call_expression "fread(__ptr_00,1,0x3c,param_3)" (identifier "fread") (argument_list "(__ptr_00,1,0x3c,param_3)" (( "(") (identifier "__ptr_00") (, ",") (number_literal "1") (, ",") (number_literal "0x3c") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "bVar9 = sVar3 < 0x3c;" (assignment_expression "bVar9 = sVar3 < 0x3c" (identifier "bVar9") (= "=") (binary_expression "sVar3 < 0x3c" (identifier "sVar3") (< "<") (number_literal "0x3c"))) (; ";")) (expression_statement "bVar12 = sVar3 == 0x3c;" (assignment_expression "bVar12 = sVar3 == 0x3c" (identifier "bVar12") (= "=") (binary_expression "sVar3 == 0x3c" (identifier "sVar3") (== "==") (number_literal "0x3c"))) (; ";")) (if_statement "if (!bVar12) {\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }" (if "if") (parenthesized_expression "(!bVar12)" (( "(") (unary_expression "!bVar12" (! "!") (identifier "bVar12")) () ")")) (compound_statement "{\n    if (sVar3 == 0) {\n      return 0;\n    }\n    pcVar2 = "%s: failed to read archive header\n";\n    goto LAB_0015579c;\n  }" ({ "{") (if_statement "if (sVar3 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(sVar3 == 0)" (( "(") (binary_expression "sVar3 == 0" (identifier "sVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pcVar2 = "%s: failed to read archive header\n";" (assignment_expression "pcVar2 = "%s: failed to read archive header\n"" (identifier "pcVar2") (= "=") (string_literal ""%s: failed to read archive header\n"" (" """) (string_content "%s: failed to read archive header") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_0015579c;" (goto "goto") (statement_identifier "LAB_0015579c") (; ";")) (} "}"))) (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" (identifier "lVar6") (= "=") (number_literal "0x10")) (; ";")) (expression_statement "pbVar7 = __ptr_00;" (assignment_expression "pbVar7 = __ptr_00" (identifier "pbVar7") (= "=") (identifier "__ptr_00")) (; ";")) (expression_statement "pbVar8 = (byte *)"/               ";" (assignment_expression "pbVar8 = (byte *)"/               "" (identifier "pbVar8") (= "=") (cast_expression "(byte *)"/               "" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""/               "" (" """) (string_content "/               ") (" """)))) (; ";")) (do_statement "do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  } while (bVar12);" (do "do") (compound_statement "{\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    bVar9 = *pbVar7 < *pbVar8;\n    bVar12 = *pbVar7 == *pbVar8;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n  }" ({ "{") (if_statement "if (lVar6 == 0) break;" (if "if") (parenthesized_expression "(lVar6 == 0)" (( "(") (binary_expression "lVar6 == 0" (identifier "lVar6") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" (identifier "lVar6") (= "=") (binary_expression "lVar6 + -1" (identifier "lVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar9 = *pbVar7 < *pbVar8;" (assignment_expression "bVar9 = *pbVar7 < *pbVar8" (identifier "bVar9") (= "=") (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (< "<") (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")))) (; ";")) (expression_statement "bVar12 = *pbVar7 == *pbVar8;" (assignment_expression "bVar12 = *pbVar7 == *pbVar8" (identifier "bVar12") (= "=") (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (== "==") (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")))) (; ";")) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" (identifier "pbVar7") (= "=") (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" (identifier "pbVar7") (+ "+") (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar14")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar14")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (; ";")) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" (identifier "bVar10") (= "=") (false "false")) (; ";")) (expression_statement "bVar9 = (!bVar9 && !bVar12) == bVar9;" (assignment_expression "bVar9 = (!bVar9 && !bVar12) == bVar9" (identifier "bVar9") (= "=") (binary_expression "(!bVar9 && !bVar12) == bVar9" (parenthesized_expression "(!bVar9 && !bVar12)" (( "(") (binary_expression "!bVar9 && !bVar12" (unary_expression "!bVar9" (! "!") (identifier "bVar9")) (&& "&&") (unary_expression "!bVar12" (! "!") (identifier "bVar12"))) () ")")) (== "==") (identifier "bVar9"))) (; ";")) (if_statement "if (bVar9) {\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }\n  else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" (if "if") (parenthesized_expression "(bVar9)" (( "(") (identifier "bVar9") () ")")) (compound_statement "{\n    iVar1 = FUN_00154d60(param_1,4,param_5);\njoined_r0x001557d2:\n    uVar13 = iVar1 == 0;\n    uVar11 = 0;\n    if ((bool)uVar13) {\n      return 1;\n    }\n  }" ({ "{") (expression_statement "iVar1 = FUN_00154d60(param_1,4,param_5);" (assignment_expression "iVar1 = FUN_00154d60(param_1,4,param_5)" (identifier "iVar1") (= "=") (call_expression "FUN_00154d60(param_1,4,param_5)" (identifier "FUN_00154d60") (argument_list "(param_1,4,param_5)" (( "(") (identifier "param_1") (, ",") (number_literal "4") (, ",") (identifier "param_5") () ")")))) (; ";")) (labeled_statement "joined_r0x001557d2:\n    uVar13 = iVar1 == 0;" (statement_identifier "joined_r0x001557d2") (: ":") (expression_statement "uVar13 = iVar1 == 0;" (assignment_expression "uVar13 = iVar1 == 0" (identifier "uVar13") (= "=") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0"))) (; ";"))) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (if_statement "if ((bool)uVar13) {\n      return 1;\n    }" (if "if") (parenthesized_expression "((bool)uVar13)" (( "(") (cast_expression "(bool)uVar13" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar13")) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" (else "else") (compound_statement "{\n    lVar6 = 0x10;\n    pbVar7 = __ptr_00;\n    pbVar8 = (byte *)"/SYM64/         ";\n    do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);\n    if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }\n    uVar11 = 0;\n    uVar13 = param_5 == 0;\n    if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }\n  }" ({ "{") (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" (identifier "lVar6") (= "=") (number_literal "0x10")) (; ";")) (expression_statement "pbVar7 = __ptr_00;" (assignment_expression "pbVar7 = __ptr_00" (identifier "pbVar7") (= "=") (identifier "__ptr_00")) (; ";")) (expression_statement "pbVar8 = (byte *)"/SYM64/         ";" (assignment_expression "pbVar8 = (byte *)"/SYM64/         "" (identifier "pbVar8") (= "=") (cast_expression "(byte *)"/SYM64/         "" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""/SYM64/         "" (" """) (string_content "/SYM64/         ") (" """)))) (; ";")) (do_statement "do {\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    } while (bVar9);" (do "do") (compound_statement "{\n      if (lVar6 == 0) break;\n      lVar6 = lVar6 + -1;\n      bVar10 = *pbVar7 < *pbVar8;\n      bVar9 = *pbVar7 == *pbVar8;\n      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;\n      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;\n    }" ({ "{") (if_statement "if (lVar6 == 0) break;" (if "if") (parenthesized_expression "(lVar6 == 0)" (( "(") (binary_expression "lVar6 == 0" (identifier "lVar6") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar6 = lVar6 + -1;" (assignment_expression "lVar6 = lVar6 + -1" (identifier "lVar6") (= "=") (binary_expression "lVar6 + -1" (identifier "lVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar10 = *pbVar7 < *pbVar8;" (assignment_expression "bVar10 = *pbVar7 < *pbVar8" (identifier "bVar10") (= "=") (binary_expression "*pbVar7 < *pbVar8" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (< "<") (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")))) (; ";")) (expression_statement "bVar9 = *pbVar7 == *pbVar8;" (assignment_expression "bVar9 = *pbVar7 == *pbVar8" (identifier "bVar9") (= "=") (binary_expression "*pbVar7 == *pbVar8" (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")) (== "==") (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")))) (; ";")) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" (identifier "pbVar7") (= "=") (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" (identifier "pbVar7") (+ "+") (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar14")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar8 + (ulong)bVar14 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar14")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar9)" (( "(") (identifier "bVar9") () ")")) (; ";")) (if_statement "if ((!bVar10 && !bVar9) == bVar10) {\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }" (if "if") (parenthesized_expression "((!bVar10 && !bVar9) == bVar10)" (( "(") (binary_expression "(!bVar10 && !bVar9) == bVar10" (parenthesized_expression "(!bVar10 && !bVar9)" (( "(") (binary_expression "!bVar10 && !bVar9" (unary_expression "!bVar10" (! "!") (identifier "bVar10")) (&& "&&") (unary_expression "!bVar9" (! "!") (identifier "bVar9"))) () ")")) (== "==") (identifier "bVar10")) () ")")) (compound_statement "{\n      *(undefined4 *)((long)param_1 + 0x54) = 1;\n      iVar1 = FUN_00154d60(param_1,8,param_5);\n      goto joined_r0x001557d2;\n    }" ({ "{") (expression_statement "*(undefined4 *)((long)param_1 + 0x54) = 1;" (assignment_expression "*(undefined4 *)((long)param_1 + 0x54) = 1" (pointer_expression "*(undefined4 *)((long)param_1 + 0x54)" (* "*") (cast_expression "(undefined4 *)((long)param_1 + 0x54)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x54)" (( "(") (binary_expression "(long)param_1 + 0x54" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x54")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar1 = FUN_00154d60(param_1,8,param_5);" (assignment_expression "iVar1 = FUN_00154d60(param_1,8,param_5)" (identifier "iVar1") (= "=") (call_expression "FUN_00154d60(param_1,8,param_5)" (identifier "FUN_00154d60") (argument_list "(param_1,8,param_5)" (( "(") (identifier "param_1") (, ",") (number_literal "8") (, ",") (identifier "param_5") () ")")))) (; ";")) (goto_statement "goto joined_r0x001557d2;" (goto "goto") (statement_identifier "joined_r0x001557d2") (; ";")) (} "}"))) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar13 = param_5 == 0;" (assignment_expression "uVar13 = param_5 == 0" (identifier "uVar13") (= "=") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0"))) (; ";")) (if_statement "if (!(bool)uVar13) {\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }" (if "if") (parenthesized_expression "(!(bool)uVar13)" (( "(") (unary_expression "!(bool)uVar13" (! "!") (cast_expression "(bool)uVar13" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar13"))) () ")")) (compound_statement "{\n      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);\n      uVar11 = 0;\n      uVar13 = 1;\n      printf(pcVar2,param_2);\n    }" ({ "{") (expression_statement "pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);" (assignment_expression "pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5)" (identifier "pcVar2") (= "=") (cast_expression "(char *)dcgettext(0,"%s has no archive index\n",5)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "dcgettext(0,"%s has no archive index\n",5)" (identifier "dcgettext") (argument_list "(0,"%s has no archive index\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s has no archive index\n"" (" """) (string_content "%s has no archive index") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")"))))) (; ";")) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar13 = 1;" (assignment_expression "uVar13 = 1" (identifier "uVar13") (= "=") (number_literal "1")) (; ";")) (expression_statement "printf(pcVar2,param_2);" (call_expression "printf(pcVar2,param_2)" (identifier "printf") (argument_list "(pcVar2,param_2)" (( "(") (identifier "pcVar2") (, ",") (identifier "param_2") () ")"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "lVar6 = 0x10;" (assignment_expression "lVar6 = 0x10" (identifier "lVar6") (= "=") (number_literal "0x10")) (; ";")) (expression_statement "pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;" (assignment_expression "pbVar7 = (byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" (identifier "pbVar7") (= "=") (compound_literal_expression "(byte *)"\n  do {\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (ERROR ""\n  do" (" """) (identifier "do")) (initializer_list "{\n    if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" ({ "{") (ERROR "if (lVar6 == 0) break;\n    lVar6 = lVar6 + -1;\n    uVar11 = *__ptr_00 < *pbVar7;\n    uVar13 = *__ptr_00 == *pbVar7;\n    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;" (call_expression "if (lVar6 == 0)" (identifier "if") (argument_list "(lVar6 == 0)" (( "(") (binary_expression "lVar6 == 0" (identifier "lVar6") (== "==") (number_literal "0")) () ")"))) (identifier "break") (; ";") (assignment_expression "lVar6 = lVar6 + -1" (identifier "lVar6") (= "=") (binary_expression "lVar6 + -1" (identifier "lVar6") (+ "+") (number_literal "-1"))) (; ";") (assignment_expression "uVar11 = *__ptr_00 < *pbVar7" (identifier "uVar11") (= "=") (binary_expression "*__ptr_00 < *pbVar7" (pointer_expression "*__ptr_00" (* "*") (identifier "__ptr_00")) (< "<") (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")))) (; ";") (assignment_expression "uVar13 = *__ptr_00 == *pbVar7" (identifier "uVar13") (= "=") (binary_expression "*__ptr_00 == *pbVar7" (pointer_expression "*__ptr_00" (* "*") (identifier "__ptr_00")) (== "==") (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")))) (; ";") (assignment_expression "__ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1" (identifier "__ptr_00") (= "=") (binary_expression "__ptr_00 + (ulong)bVar14 * -2 + 1" (binary_expression "__ptr_00 + (ulong)bVar14 * -2" (identifier "__ptr_00") (+ "+") (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar14")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1" (identifier "pbVar7") (= "=") (binary_expression "pbVar7 + (ulong)bVar14 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar14 * -2" (identifier "pbVar7") (+ "+") (binary_expression "(ulong)bVar14 * -2" (cast_expression "(ulong)bVar14" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar14")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (} "")))) (; ";")) (} "}"))) (while_statement "while ((bool)uVar13);" (while "while") (parenthesized_expression "((bool)uVar13)" (( "(") (cast_expression "(bool)uVar13" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar13")) () ")")) (expression_statement ";" (; ";"))) (if_statement "if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {\n    return 0;\n  }" (if "if") (parenthesized_expression "((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11)" (( "(") (binary_expression "(!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11" (parenthesized_expression "(!(bool)uVar11 && !(bool)uVar13)" (( "(") (binary_expression "!(bool)uVar11 && !(bool)uVar13" (unary_expression "!(bool)uVar11" (! "!") (cast_expression "(bool)uVar11" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar11"))) (&& "&&") (unary_expression "!(bool)uVar13" (! "!") (cast_expression "(bool)uVar13" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar13")))) () ")")) (!= "!=") (cast_expression "(bool)uVar11" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar11"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar11 = *(undefined1 *)((long)param_1 + 0x92);" (assignment_expression "uVar11 = *(undefined1 *)((long)param_1 + 0x92)" (identifier "uVar11") (= "=") (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" (* "*") (cast_expression "(undefined1 *)((long)param_1 + 0x92)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x92)" (( "(") (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x92")) () ")"))))) (; ";")) (expression_statement "*(undefined1 *)((long)param_1 + 0x92) = 0;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = 0" (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" (* "*") (cast_expression "(undefined1 *)((long)param_1 + 0x92)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x92)" (( "(") (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x92")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);" (assignment_expression "uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10)" (identifier "uVar4") (= "=") (call_expression "strtoul((char *)(param_1 + 0x11),(char **)0x0,10)" (identifier "strtoul") (argument_list "((char *)(param_1 + 0x11),(char **)0x0,10)" (( "(") (cast_expression "(char *)(param_1 + 0x11)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x11)" (( "(") (binary_expression "param_1 + 0x11" (identifier "param_1") (+ "+") (number_literal "0x11")) () ")"))) (, ",") (cast_expression "(char **)0x0" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0")) (, ",") (number_literal "10") () ")")))) (; ";")) (expression_statement "*(undefined1 *)((long)param_1 + 0x92) = uVar11;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = uVar11" (pointer_expression "*(undefined1 *)((long)param_1 + 0x92)" (* "*") (cast_expression "(undefined1 *)((long)param_1 + 0x92)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x92)" (( "(") (binary_expression "(long)param_1 + 0x92" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x92")) () ")")))) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "pcVar2 = "%s: long name table is too small, (size = %ld)\n";" (assignment_expression "pcVar2 = "%s: long name table is too small, (size = %ld)\n"" (identifier "pcVar2") (= "=") (string_literal ""%s: long name table is too small, (size = %ld)\n"" (" """) (string_content "%s: long name table is too small, (size = %ld)") (escape_sequence "\n") (" """))) (; ";")) (expression_statement "param_1[7] = uVar4;" (assignment_expression "param_1[7] = uVar4" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (7 < uVar4) {\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }" (if "if") (parenthesized_expression "(7 < uVar4)" (( "(") (binary_expression "7 < uVar4" (number_literal "7") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n    if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }\n    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";\n  }" ({ "{") (if_statement "if (-1 < (long)uVar4) {\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }" (if "if") (parenthesized_expression "(-1 < (long)uVar4)" (( "(") (binary_expression "-1 < (long)uVar4" (number_literal "-1") (< "<") (cast_expression "(long)uVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar4"))) () ")")) (compound_statement "{\n      param_1[9] = uVar4 + 0x3c + param_1[9];\n      __ptr = malloc(uVar4 + 1);\n      param_1[6] = __ptr;\n      if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }\n      sVar3 = fread(__ptr,uVar4,1,param_3);\n      if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }\n      free((void *)param_1[6]);\n      param_1[6] = 0;\n      pcVar2 = "%s: failed to read long symbol name string table\n";\nLAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);\n      error(uVar5,param_2);\n      return 1;\n    }" ({ "{") (expression_statement "param_1[9] = uVar4 + 0x3c + param_1[9];" (assignment_expression "param_1[9] = uVar4 + 0x3c + param_1[9]" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (= "=") (binary_expression "uVar4 + 0x3c + param_1[9]" (binary_expression "uVar4 + 0x3c" (identifier "uVar4") (+ "+") (number_literal "0x3c")) (+ "+") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")))) (; ";")) (expression_statement "__ptr = malloc(uVar4 + 1);" (assignment_expression "__ptr = malloc(uVar4 + 1)" (identifier "__ptr") (= "=") (call_expression "malloc(uVar4 + 1)" (identifier "malloc") (argument_list "(uVar4 + 1)" (( "(") (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "param_1[6] = __ptr;" (assignment_expression "param_1[6] = __ptr" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "__ptr")) (; ";")) (if_statement "if (__ptr == (void *)0x0) {\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }" (if "if") (parenthesized_expression "(__ptr == (void *)0x0)" (( "(") (binary_expression "__ptr == (void *)0x0" (identifier "__ptr") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);\n        error(uVar5);\n        return 1;\n      }" ({ "{") (expression_statement "uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);" (assignment_expression "uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" (identifier "uVar5") (= "=") (call_expression "dcgettext(0,"Out of memory reading long symbol names in archive\n",5)" (identifier "dcgettext") (argument_list "(0,"Out of memory reading long symbol names in archive\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""Out of memory reading long symbol names in archive\n"" (" """) (string_content "Out of memory reading long symbol names in archive") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "error(uVar5);" (call_expression "error(uVar5)" (identifier "error") (argument_list "(uVar5)" (( "(") (identifier "uVar5") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "sVar3 = fread(__ptr,uVar4,1,param_3);" (assignment_expression "sVar3 = fread(__ptr,uVar4,1,param_3)" (identifier "sVar3") (= "=") (call_expression "fread(__ptr,uVar4,1,param_3)" (identifier "fread") (argument_list "(__ptr,uVar4,1,param_3)" (( "(") (identifier "__ptr") (, ",") (identifier "uVar4") (, ",") (number_literal "1") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (sVar3 == 1) {\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }" (if "if") (parenthesized_expression "(sVar3 == 1)" (( "(") (binary_expression "sVar3 == 1" (identifier "sVar3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        uVar4 = param_1[7];\n        if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }\n        *(undefined1 *)(param_1[6] + uVar4) = 0;\n        return 0;\n      }" ({ "{") (expression_statement "uVar4 = param_1[7];" (assignment_expression "uVar4 = param_1[7]" (identifier "uVar4") (= "=") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) (; ";")) (if_statement "if ((uVar4 & 1) != 0) {\n          getc(param_3);\n          uVar4 = param_1[7];\n        }" (if "if") (parenthesized_expression "((uVar4 & 1) != 0)" (( "(") (binary_expression "(uVar4 & 1) != 0" (parenthesized_expression "(uVar4 & 1)" (( "(") (binary_expression "uVar4 & 1" (identifier "uVar4") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          getc(param_3);\n          uVar4 = param_1[7];\n        }" ({ "{") (expression_statement "getc(param_3);" (call_expression "getc(param_3)" (identifier "getc") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")"))) (; ";")) (expression_statement "uVar4 = param_1[7];" (assignment_expression "uVar4 = param_1[7]" (identifier "uVar4") (= "=") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) (; ";")) (} "}"))) (expression_statement "*(undefined1 *)(param_1[6] + uVar4) = 0;" (assignment_expression "*(undefined1 *)(param_1[6] + uVar4) = 0" (pointer_expression "*(undefined1 *)(param_1[6] + uVar4)" (* "*") (cast_expression "(undefined1 *)(param_1[6] + uVar4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[6] + uVar4)" (( "(") (binary_expression "param_1[6] + uVar4" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (+ "+") (identifier "uVar4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "free((void *)param_1[6]);" (call_expression "free((void *)param_1[6])" (identifier "free") (argument_list "((void *)param_1[6])" (( "(") (cast_expression "(void *)param_1[6]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) () ")"))) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar2 = "%s: failed to read long symbol name string table\n";" (assignment_expression "pcVar2 = "%s: failed to read long symbol name string table\n"" (identifier "pcVar2") (= "=") (string_literal ""%s: failed to read long symbol name string table\n"" (" """) (string_content "%s: failed to read long symbol name string table") (escape_sequence "\n") (" """))) (; ";")) (labeled_statement "LAB_0015579c:\n      uVar5 = dcgettext(0,pcVar2,5);" (statement_identifier "LAB_0015579c") (: ":") (expression_statement "uVar5 = dcgettext(0,pcVar2,5);" (assignment_expression "uVar5 = dcgettext(0,pcVar2,5)" (identifier "uVar5") (= "=") (call_expression "dcgettext(0,pcVar2,5)" (identifier "dcgettext") (argument_list "(0,pcVar2,5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar2") (, ",") (number_literal "5") () ")")))) (; ";"))) (expression_statement "error(uVar5,param_2);" (call_expression "error(uVar5,param_2)" (identifier "error") (argument_list "(uVar5,param_2)" (( "(") (identifier "uVar5") (, ",") (identifier "param_2") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";" (assignment_expression "pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n"" (identifier "pcVar2") (= "=") (string_literal ""%s: long name table is too big, (size = 0x%lx)\n"" (" """) (string_content "%s: long name table is too big, (size = 0x%lx)") (escape_sequence "\n") (" """))) (; ";")) (} "}"))) (expression_statement "uVar5 = dcgettext(0,pcVar2,5);" (assignment_expression "uVar5 = dcgettext(0,pcVar2,5)" (identifier "uVar5") (= "=") (call_expression "dcgettext(0,pcVar2,5)" (identifier "dcgettext") (argument_list "(0,pcVar2,5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar2") (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "error(uVar5,param_2,uVar4);" (call_expression "error(uVar5,param_2,uVar4)" (identifier "error") (argument_list "(uVar5,param_2,uVar4)" (( "(") (identifier "uVar5") (, ",") (identifier "param_2") (, ",") (identifier "uVar4") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (ERROR "}" (} "}"))

/* WARNING: Type propagation algorithm not settling */

int function_1(type_1 *arch,char *file_name,type_2 *file,type_3 is_thin_archive,
                 type_3 var_11)

{
  char cVar1;
  int var_3;
  char *var_17;
  size_t var_5;
  type_4 var_15;
  long var_6;
  type_5 *paVar7;
  type_5 *__ptr;
  type_6 *var_7;
  bool var_8;
  bool var_10;
  type_7 uVar11;
  bool bVar12;
  type_7 uVar13;
  type_6 bVar14;
  
  bVar14 = 0;
  var_17 = var_1(file_name);
  arch->file = file;
  arch->file_name = var_17;
  arch->index_num = 0;
  arch->index_array = (type_8 *)0x0;
  arch->sym_table = (char *)0x0;
  arch->sym_size = 0;
  arch->longnames = (char *)0x0;
  arch->longnames_size = 0;
  arch->nested_member_origin = 0;
  arch->is_thin_archive = is_thin_archive;
  arch->uses_64bit_indicies = 0;
  arch->next_arhdr_offset = 8;
  var_3 = var_2((type_2 *)file,8,0);
  var_17 = "%s: failed to seek to first archive header\n";
  if (var_3 != 0) goto LAB_0015579c;
  __ptr = &arch->arhdr;
  var_5 = var_4(__ptr,1,0x3c,(type_2 *)file);
  var_8 = var_5 < 0x3c;
  bVar12 = var_5 == 0x3c;
  if (!bVar12) {
    if (var_5 == 0) {
      return 0;
    }
    var_17 = "%s: failed to read archive header\n";
    goto LAB_0015579c;
  }
  var_6 = 0x10;
  paVar7 = __ptr;
  var_7 = (type_6 *)"/               ";
  do {
    if (var_6 == 0) break;
    var_6 = var_6 + -1;
    var_8 = (type_6)paVar7->ar_name[0] < *var_7;
    bVar12 = paVar7->ar_name[0] == *var_7;
    paVar7 = (type_5 *)((long)paVar7 + (type_4)bVar14 * -2 + 1);
    var_7 = var_7 + (type_4)bVar14 * -2 + 1;
  } while (bVar12);
  var_10 = false;
  var_8 = (!var_8 && !bVar12) == var_8;
  if (var_8) {
    var_3 = var_9(arch,4,var_11);
joined_r0x001557d2:
    uVar13 = var_3 == 0;
    uVar11 = 0;
    if ((bool)uVar13) {
      return 1;
    }
  }
  else {
    var_6 = 0x10;
    paVar7 = __ptr;
    var_7 = (type_6 *)"/SYM64/         ";
    do {
      if (var_6 == 0) break;
      var_6 = var_6 + -1;
      var_10 = (type_6)paVar7->ar_name[0] < *var_7;
      var_8 = paVar7->ar_name[0] == *var_7;
      paVar7 = (type_5 *)((long)paVar7 + (type_4)bVar14 * -2 + 1);
      var_7 = var_7 + (type_4)bVar14 * -2 + 1;
    } while (var_8);
    if ((!var_10 && !var_8) == var_10) {
      arch->uses_64bit_indicies = 1;
      var_3 = var_9(arch,8,var_11);
      goto joined_r0x001557d2;
    }
    uVar11 = 0;
    uVar13 = var_11 == 0;
    if (!(bool)uVar13) {
      var_17 = (char *)var_12(0,"%s has no archive index\n",5);
      uVar11 = 0;
      uVar13 = 1;
      var_13(var_17,file_name);
    }
  }
  var_6 = 0x10;
  var_7 = (type_6 *)"//              ";
  do {
    if (var_6 == 0) break;
    var_6 = var_6 + -1;
    uVar11 = (type_6)__ptr->ar_name[0] < *var_7;
    uVar13 = __ptr->ar_name[0] == *var_7;
    __ptr = (type_5 *)((long)__ptr + (type_4)bVar14 * -2 + 1);
    var_7 = var_7 + (type_4)bVar14 * -2 + 1;
  } while ((bool)uVar13);
  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {
    return 0;
  }
  cVar1 = (arch->arhdr).ar_fmag[0];
  (arch->arhdr).ar_fmag[0] = '\0';
  var_15 = var_14((arch->arhdr).ar_size,(char **)0x0,10);
  (arch->arhdr).ar_fmag[0] = cVar1;
  var_17 = "%s: long name table is too small, (size = %ld)\n";
  arch->longnames_size = var_15;
  if (7 < var_15) {
    if (-1 < (long)var_15) {
      arch->next_arhdr_offset = var_15 + 0x3c + arch->next_arhdr_offset;
      var_17 = (char *)var_16(var_15 + 1);
      arch->longnames = var_17;
      if (var_17 == (char *)0x0) {
        var_17 = (char *)var_12(0,"Out of memory reading long symbol names in archive\n",5);
        var_18(var_17);
        return 1;
      }
      var_5 = var_4(var_17,var_15,1,(type_2 *)file);
      if (var_5 == 1) {
        var_15 = arch->longnames_size;
        if ((var_15 & 1) != 0) {
          var_19((type_2 *)file);
          var_15 = arch->longnames_size;
        }
        arch->longnames[var_15] = '\0';
        return 0;
      }
      var_20(arch->longnames);
      arch->longnames = (char *)0x0;
      var_17 = "%s: failed to read long symbol name string table\n";
LAB_0015579c:
      var_17 = (char *)var_12(0,var_17,5);
      var_18(var_17,file_name);
      return 1;
    }
    var_17 = "%s: long name table is too big, (size = 0x%lx)\n";
  }
  var_17 = (char *)var_12(0,var_17,5);
  var_18(var_17,file_name,var_15);
  return 1;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator 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: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) 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: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) 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: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier)))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) consequence: (compound_statement (return_statement (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (string_literal (string_content))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (compound_literal_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) (ERROR (identifier)) value: (initializer_list (ERROR (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) (identifier) (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))) (MISSING "}"))))))) (while_statement condition: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) body: (expression_statement)) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)) (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))))) right: (number_literal))) (return_statement (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier) (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier) (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (return_statement (number_literal)) (ERROR))

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

{
  int iVar1;
  char *pcVar2;
  size_t sVar3;
  ulong uVar4;
  void *__ptr;
  undefined8 uVar5;
  long lVar6;
  byte *pbVar7;
  byte *__ptr_00;
  byte *pbVar8;
  bool bVar9;
  bool bVar10;
  undefined1 uVar11;
  bool bVar12;
  undefined1 uVar13;
  byte bVar14;
  
  bVar14 = 0;
  pcVar2 = strdup(param_2);
  param_1[1] = param_3;
  *param_1 = pcVar2;
  param_1[2] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  *(undefined4 *)(param_1 + 10) = param_4;
  *(undefined4 *)((long)param_1 + 0x54) = 0;
  param_1[9] = 8;
  iVar1 = fseek(param_3,8,0);
  pcVar2 = "%s: failed to seek to first archive header\n";
  if (iVar1 != 0) goto LAB_0015579c;
  __ptr_00 = (byte *)(param_1 + 0xb);
  sVar3 = fread(__ptr_00,1,0x3c,param_3);
  bVar9 = sVar3 < 0x3c;
  bVar12 = sVar3 == 0x3c;
  if (!bVar12) {
    if (sVar3 == 0) {
      return 0;
    }
    pcVar2 = "%s: failed to read archive header\n";
    goto LAB_0015579c;
  }
  lVar6 = 0x10;
  pbVar7 = __ptr_00;
  pbVar8 = (byte *)"/               ";
  do {
    if (lVar6 == 0) break;
    lVar6 = lVar6 + -1;
    bVar9 = *pbVar7 < *pbVar8;
    bVar12 = *pbVar7 == *pbVar8;
    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;
    pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;
  } while (bVar12);
  bVar10 = false;
  bVar9 = (!bVar9 && !bVar12) == bVar9;
  if (bVar9) {
    iVar1 = FUN_00154d60(param_1,4,param_5);
joined_r0x001557d2:
    uVar13 = iVar1 == 0;
    uVar11 = 0;
    if ((bool)uVar13) {
      return 1;
    }
  }
  else {
    lVar6 = 0x10;
    pbVar7 = __ptr_00;
    pbVar8 = (byte *)"/SYM64/         ";
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      bVar10 = *pbVar7 < *pbVar8;
      bVar9 = *pbVar7 == *pbVar8;
      pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;
      pbVar8 = pbVar8 + (ulong)bVar14 * -2 + 1;
    } while (bVar9);
    if ((!bVar10 && !bVar9) == bVar10) {
      *(undefined4 *)((long)param_1 + 0x54) = 1;
      iVar1 = FUN_00154d60(param_1,8,param_5);
      goto joined_r0x001557d2;
    }
    uVar11 = 0;
    uVar13 = param_5 == 0;
    if (!(bool)uVar13) {
      pcVar2 = (char *)dcgettext(0,"%s has no archive index\n",5);
      uVar11 = 0;
      uVar13 = 1;
      printf(pcVar2,param_2);
    }
  }
  lVar6 = 0x10;
  pbVar7 = (byte *)"//              ";
  do {
    if (lVar6 == 0) break;
    lVar6 = lVar6 + -1;
    uVar11 = *__ptr_00 < *pbVar7;
    uVar13 = *__ptr_00 == *pbVar7;
    __ptr_00 = __ptr_00 + (ulong)bVar14 * -2 + 1;
    pbVar7 = pbVar7 + (ulong)bVar14 * -2 + 1;
  } while ((bool)uVar13);
  if ((!(bool)uVar11 && !(bool)uVar13) != (bool)uVar11) {
    return 0;
  }
  uVar11 = *(undefined1 *)((long)param_1 + 0x92);
  *(undefined1 *)((long)param_1 + 0x92) = 0;
  uVar4 = strtoul((char *)(param_1 + 0x11),(char **)0x0,10);
  *(undefined1 *)((long)param_1 + 0x92) = uVar11;
  pcVar2 = "%s: long name table is too small, (size = %ld)\n";
  param_1[7] = uVar4;
  if (7 < uVar4) {
    if (-1 < (long)uVar4) {
      param_1[9] = uVar4 + 0x3c + param_1[9];
      __ptr = malloc(uVar4 + 1);
      param_1[6] = __ptr;
      if (__ptr == (void *)0x0) {
        uVar5 = dcgettext(0,"Out of memory reading long symbol names in archive\n",5);
        error(uVar5);
        return 1;
      }
      sVar3 = fread(__ptr,uVar4,1,param_3);
      if (sVar3 == 1) {
        uVar4 = param_1[7];
        if ((uVar4 & 1) != 0) {
          getc(param_3);
          uVar4 = param_1[7];
        }
        *(undefined1 *)(param_1[6] + uVar4) = 0;
        return 0;
      }
      free((void *)param_1[6]);
      param_1[6] = 0;
      pcVar2 = "%s: failed to read long symbol name string table\n";
LAB_0015579c:
      uVar5 = dcgettext(0,pcVar2,5);
      error(uVar5,param_2);
      return 1;
    }
    pcVar2 = "%s: long name table is too big, (size = 0x%lx)\n";
  }
  uVar5 = dcgettext(0,pcVar2,5);
  error(uVar5,param_2,uVar4);
  return 1;
}

