
bfd_boolean
process_archive_index_and_symbols(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)

{
  char cVar1;
  int iVar2;
  ulong uVar3;
  size_t sVar4;
  elf_vma eVar5;
  uchar *__ptr;
  size_t sVar6;
  elf_vma *peVar7;
  uchar *field;
  char *pcVar8;
  char *pcVar9;
  ulong __n;
  uchar integer_buffer [8];
  
  cVar1 = (arch->arhdr).ar_fmag[0];
  (arch->arhdr).ar_fmag[0] = '\0';
  uVar3 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);
  (arch->arhdr).ar_fmag[0] = cVar1;
  if ((long)uVar3 < 0) {
    pcVar8 = arch->file_name;
    pcVar9 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);
    error(pcVar9,pcVar8,uVar3);
    return 0;
  }
  uVar3 = uVar3 + 1 & 0xfffffffffffffffe;
  arch->next_arhdr_offset = uVar3 + 0x3c + arch->next_arhdr_offset;
  if (read_symbols == 0) {
    iVar2 = fseek((FILE *)arch->file,uVar3,1);
    if (iVar2 != 0) {
      pcVar8 = arch->file_name;
      pcVar9 = "%s: failed to skip archive symbol table\n";
      goto LAB_0013784f;
    }
LAB_00137891:
    sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);
    if ((sVar4 == 0x3c) || (sVar4 == 0)) {
      return 1;
    }
    pcVar8 = arch->file_name;
    pcVar9 = "%s: failed to read archive header following archive index\n";
  }
  else {
    __n = (ulong)sizeof_ar_index;
    if (uVar3 < __n) {
      pcVar8 = arch->file_name;
      pcVar9 = "%s: the archive index is empty\n";
      goto LAB_0013784f;
    }
    sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file);
    if (__n == sVar4) {
      uVar3 = uVar3 - __n;
      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);
      arch->index_num = eVar5;
      sVar4 = __n * eVar5;
      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {
        pcVar8 = arch->file_name;
        pcVar9 = (char *)dcgettext(0,
                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
                                   ,5);
        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);
        return 0;
      }
      __ptr = (uchar *)malloc(sVar4);
      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";
      if (__ptr == (uchar *)0x0) {
LAB_00137990:
        pcVar8 = (char *)dcgettext(0,pcVar8,5);
        error(pcVar8);
        return 0;
      }
      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);
      sVar4 = arch->index_num;
      if (sVar4 == sVar6) {
        sVar6 = uVar3 - __n * sVar4;
        peVar7 = (elf_vma *)malloc(sVar4 * 8);
        arch->index_array = peVar7;
        if (peVar7 == (elf_vma *)0x0) {
          free(__ptr);
          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";
          goto LAB_00137990;
        }
        if (sVar4 != 0) {
          uVar3 = 0;
          field = __ptr;
          while( true ) {
            peVar7 = peVar7 + uVar3;
            eVar5 = byte_get_big_endian(field,sizeof_ar_index);
            uVar3 = uVar3 + 1;
            *peVar7 = eVar5;
            if (arch->index_num <= uVar3) break;
            peVar7 = arch->index_array;
            field = field + __n;
          }
        }
        free(__ptr);
        if (sVar6 == 0) {
          pcVar8 = arch->file_name;
          pcVar9 = "%s: the archive has an index but no symbols\n";
          goto LAB_0013784f;
        }
        pcVar8 = (char *)malloc(sVar6);
        arch->sym_table = pcVar8;
        if (pcVar8 == (char *)0x0) {
          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";
          goto LAB_00137990;
        }
        arch->sym_size = sVar6;
        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);
        if (sVar6 != sVar4) {
          pcVar8 = arch->file_name;
          pcVar9 = "%s: failed to read archive index symbol table\n";
          goto LAB_0013784f;
        }
        goto LAB_00137891;
      }
      free(__ptr);
    }
    pcVar8 = arch->file_name;
    pcVar9 = "%s: failed to read archive index\n";
  }
LAB_0013784f:
  pcVar9 = (char *)dcgettext(0,pcVar9,5);
  error(pcVar9,pcVar8);
  return 0;
}



undefined8 FUN_00137670(undefined8 *param_1,uint param_2,int param_3)

{
  long lVar1;
  undefined1 uVar2;
  int iVar3;
  ulong uVar4;
  size_t sVar5;
  ulong __n;
  void *pvVar6;
  size_t sVar7;
  void *pvVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  void *pvVar11;
  char *pcVar12;
  ulong __n_00;
  undefined1 local_40 [16];
  
  uVar2 = *(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) = uVar2;
  if ((long)uVar4 < 0) {
    uVar9 = *param_1;
    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);
    error(uVar10,uVar9,uVar4);
    return 0;
  }
  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;
  param_1[9] = uVar4 + 0x3c + param_1[9];
  if (param_3 == 0) {
    iVar3 = fseek((FILE *)param_1[1],uVar4,1);
    if (iVar3 != 0) {
      uVar9 = *param_1;
      pcVar12 = "%s: failed to skip archive symbol table\n";
      goto LAB_0013784f;
    }
LAB_00137891:
    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);
    if ((sVar5 == 0x3c) || (sVar5 == 0)) {
      return 1;
    }
    uVar9 = *param_1;
    pcVar12 = "%s: failed to read archive header following archive index\n";
  }
  else {
    __n_00 = (ulong)param_2;
    if (uVar4 < __n_00) {
      uVar9 = *param_1;
      pcVar12 = "%s: the archive index is empty\n";
      goto LAB_0013784f;
    }
    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);
    if (__n_00 == sVar5) {
      uVar4 = uVar4 - __n_00;
      __n = FUN_00137570(local_40,param_2);
      param_1[2] = __n;
      sVar5 = __n_00 * __n;
      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {
        uVar9 = *param_1;
        uVar10 = dcgettext(0,
                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
                           ,5);
        error(uVar10,uVar9,__n,param_2,uVar4);
        return 0;
      }
      pvVar6 = malloc(sVar5);
      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";
      if (pvVar6 == (void *)0x0) {
LAB_00137990:
        uVar9 = dcgettext(0,pcVar12,5);
        error(uVar9);
        return 0;
      }
      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);
      sVar5 = param_1[2];
      if (sVar5 == sVar7) {
        sVar7 = uVar4 - __n_00 * sVar5;
        pvVar8 = malloc(sVar5 * 8);
        param_1[3] = pvVar8;
        if (pvVar8 == (void *)0x0) {
          free(pvVar6);
          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";
          goto LAB_00137990;
        }
        if (sVar5 != 0) {
          uVar4 = 0;
          pvVar11 = pvVar6;
          while( true ) {
            lVar1 = uVar4 * 8;
            uVar9 = FUN_00137570(pvVar11,param_2);
            uVar4 = uVar4 + 1;
            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;
            if ((ulong)param_1[2] <= uVar4) break;
            pvVar8 = (void *)param_1[3];
            pvVar11 = (void *)((long)pvVar11 + __n_00);
          }
        }
        free(pvVar6);
        if (sVar7 == 0) {
          uVar9 = *param_1;
          pcVar12 = "%s: the archive has an index but no symbols\n";
          goto LAB_0013784f;
        }
        pvVar6 = malloc(sVar7);
        param_1[4] = pvVar6;
        if (pvVar6 == (void *)0x0) {
          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";
          goto LAB_00137990;
        }
        param_1[5] = sVar7;
        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);
        if (sVar7 != sVar5) {
          uVar9 = *param_1;
          pcVar12 = "%s: failed to read archive index symbol table\n";
          goto LAB_0013784f;
        }
        goto LAB_00137891;
      }
      free(pvVar6);
    }
    uVar9 = *param_1;
    pcVar12 = "%s: failed to read archive index\n";
  }
LAB_0013784f:
  uVar10 = dcgettext(0,pcVar12,5);
  error(uVar10,uVar9);
  return 0;
}


PUSH R15
PUSH R14
PUSH R13
MOV R13D,EDX
MOV EDX,0xa
PUSH R12
MOV R12D,ESI
XOR ESI,ESI
PUSH RBP
PUSH RBX
MOV RBX,RDI
ADD RDI,0x88
SUB RSP,0x28
MOVZX R14D,byte ptr [RDI + 0xa]
MOV byte ptr [RDI + 0xa],0x0
CALL 0x00107710
MOV byte ptr [RBX + 0x92],R14B
MOV RBP,RAX
TEST RAX,RAX
JS 0x001378e8
MOV RAX,qword ptr [RBX + 0x48]
ADD RBP,0x1
AND RBP,-0x2
LEA RAX,[RBP + RAX*0x1 + 0x3c]
MOV qword ptr [RBX + 0x48],RAX
TEST R13D,R13D
JZ 0x00137878
MOV R13D,R12D
CMP R13,RBP
JA 0x001378d0
LEA R14,[RSP + 0x18]
MOV RCX,qword ptr [RBX + 0x8]
MOV RDX,R13
MOV ESI,0x1
MOV RDI,R14
CALL 0x00107160
CMP R13,RAX
JNZ 0x00137840
MOV RDI,R14
MOV ESI,R12D
SUB RBP,R13
CALL 0x00137570
MOV RDI,R13
MOV R15,RAX
MOV qword ptr [RBX + 0x10],RAX
IMUL RDI,RAX
CMP RAX,RBP
JA 0x00137920
CMP RDI,RBP
JA 0x00137920
CALL 0x00107550
MOV EDX,0x5
LEA RSI,[0x147da0]
MOV qword ptr [RSP],RAX
TEST RAX,RAX
JZ 0x00137990
MOV R14,qword ptr [RSP]
MOV RCX,qword ptr [RBX + 0x8]
MOV RDX,R15
MOV RSI,R13
MOV RDI,R14
CALL 0x00107160
MOV R15,qword ptr [RBX + 0x10]
CMP R15,RAX
JNZ 0x00137838
MOV RAX,R13
LEA RDI,[R15*0x8]
IMUL RAX,R15
SUB RBP,RAX
MOV qword ptr [RSP + 0x8],RBP
CALL 0x00107550
MOV qword ptr [RBX + 0x18],RAX
TEST RAX,RAX
JZ 0x001379ba
TEST R15,R15
JZ 0x001377d3
MOV RBP,qword ptr [RSP]
XOR R15D,R15D
JMP 0x001377b4
MOV RAX,qword ptr [RBX + 0x18]
MOV RDI,RBP
MOV ESI,R12D
LEA R14,[RAX + R15*0x8]
ADD RBP,R13
CALL 0x00137570
ADD R15,0x1
MOV qword ptr [R14],RAX
CMP qword ptr [RBX + 0x10],R15
JA 0x001377b0
MOV RDI,qword ptr [RSP]
CALL 0x00107070
CMP qword ptr [RSP + 0x8],0x0
JZ 0x001379a6
MOV RDI,qword ptr [RSP + 0x8]
CALL 0x00107550
MOV qword ptr [RBX + 0x20],RAX
TEST RAX,RAX
JZ 0x00137984
MOV R15,qword ptr [RSP + 0x8]
MOV RCX,qword ptr [RBX + 0x8]
MOV ESI,0x1
MOV RDI,RAX
MOV qword ptr [RBX + 0x28],R15
MOV RDX,R15
CALL 0x00107160
CMP R15,RAX
JZ 0x00137891
MOV RBX,qword ptr [RBX]
MOV EDX,0x5
LEA RSI,[0x147e98]
JMP 0x0013784f
MOV RDI,R14
CALL 0x00107070
MOV RBX,qword ptr [RBX]
MOV EDX,0x5
LEA RSI,[0x147d10]
XOR EDI,EDI
CALL 0x00107230
MOV RSI,RBX
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00137490
ADD RSP,0x28
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,qword ptr [RBX + 0x8]
MOV EDX,0x1
MOV RSI,RBP
CALL 0x001075c0
TEST EAX,EAX
JNZ 0x00137958
MOV RCX,qword ptr [RBX + 0x8]
LEA RDI,[RBX + 0x58]
MOV EDX,0x3c
MOV ESI,0x1
CALL 0x00107160
CMP RAX,0x3c
JZ 0x001378b7
TEST RAX,RAX
JNZ 0x00137970
ADD RSP,0x28
MOV EAX,0x1
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RBX,qword ptr [RBX]
MOV EDX,0x5
LEA RSI,[0x147cf0]
JMP 0x0013784f
MOV RBX,qword ptr [RBX]
MOV EDX,0x5
LEA RSI,[0x147c98]
XOR EDI,EDI
CALL 0x00107230
MOV RDX,RBP
MOV RSI,RBX
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00137490
ADD RSP,0x28
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RBX,qword ptr [RBX]
XOR EDI,EDI
MOV EDX,0x5
LEA RSI,[0x147d38]
CALL 0x00107230
MOV R8,RBP
MOV ECX,R12D
MOV RDX,R15
MOV RDI,RAX
MOV RSI,RBX
XOR EAX,EAX
CALL 0x00137490
JMP 0x00137863
MOV RBX,qword ptr [RBX]
MOV EDX,0x5
LEA RSI,[0x147cc0]
JMP 0x0013784f
MOV RBX,qword ptr [RBX]
MOV EDX,0x5
LEA RSI,[0x147ec8]
JMP 0x0013784f
MOV EDX,0x5
LEA RSI,[0x147e58]
XOR EDI,EDI
CALL 0x00107230
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00137490
JMP 0x00137863
MOV RBX,qword ptr [RBX]
MOV EDX,0x5
LEA RSI,[0x147e28]
JMP 0x0013784f
MOV RDI,qword ptr [RSP]
CALL 0x00107070
MOV EDX,0x5
LEA RSI,[0x147de0]
JMP 0x00137990
(translation_unit "undefined8 FUN_00137670(undefined8 *param_1,uint param_2,int param_3)\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  int iVar3;\n  ulong uVar4;\n  size_t sVar5;\n  ulong __n;\n  void *pvVar6;\n  size_t sVar7;\n  void *pvVar8;\n  undefined8 uVar9;\n  undefined8 uVar10;\n  void *pvVar11;\n  char *pcVar12;\n  ulong __n_00;\n  undefined1 local_40 [16];\n  \n  uVar2 = *(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) = uVar2;\n  if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }\n  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;\n  param_1[9] = uVar4 + 0x3c + param_1[9];\n  if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);\n  error(uVar10,uVar9);\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_00137670(undefined8 *param_1,uint param_2,int param_3)\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  int iVar3;\n  ulong uVar4;\n  size_t sVar5;\n  ulong __n;\n  void *pvVar6;\n  size_t sVar7;\n  void *pvVar8;\n  undefined8 uVar9;\n  undefined8 uVar10;\n  void *pvVar11;\n  char *pcVar12;\n  ulong __n_00;\n  undefined1 local_40 [16];\n  \n  uVar2 = *(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) = uVar2;\n  if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }\n  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;\n  param_1[9] = uVar4 + 0x3c + param_1[9];\n  if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);\n  error(uVar10,uVar9);\n  return 0;\n}" type_identifier (function_declarator "FUN_00137670(undefined8 *param_1,uint param_2,int param_3)" identifier (parameter_list "(undefined8 *param_1,uint param_2,int param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined1 uVar2;\n  int iVar3;\n  ulong uVar4;\n  size_t sVar5;\n  ulong __n;\n  void *pvVar6;\n  size_t sVar7;\n  void *pvVar8;\n  undefined8 uVar9;\n  undefined8 uVar10;\n  void *pvVar11;\n  char *pcVar12;\n  ulong __n_00;\n  undefined1 local_40 [16];\n  \n  uVar2 = *(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) = uVar2;\n  if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }\n  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;\n  param_1[9] = uVar4 + 0x3c + param_1[9];\n  if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);\n  error(uVar10,uVar9);\n  return 0;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "void *pvVar6;" primitive_type (pointer_declarator "*pvVar6" * identifier) ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "void *pvVar8;" primitive_type (pointer_declarator "*pvVar8" * identifier) ;) (declaration "undefined8 uVar9;" type_identifier identifier ;) (declaration "undefined8 uVar10;" type_identifier identifier ;) (declaration "void *pvVar11;" primitive_type (pointer_declarator "*pvVar11" * identifier) ;) (declaration "char *pcVar12;" primitive_type (pointer_declarator "*pcVar12" * identifier) ;) (declaration "ulong __n_00;" type_identifier identifier ;) (declaration "undefined1 local_40 [16];" type_identifier (array_declarator "local_40 [16]" identifier [ number_literal ]) ;) (expression_statement "uVar2 = *(undefined1 *)((long)param_1 + 0x92);" (assignment_expression "uVar2 = *(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) = uVar2;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = uVar2" (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) ;) (if_statement "if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }" if (parenthesized_expression "((long)uVar4 < 0)" ( (binary_expression "(long)uVar4 < 0" (cast_expression "(long)uVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);" (assignment_expression "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier = (call_expression "dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier (argument_list "(0,"%s: invalid archive header size: %ld\n",5)" ( number_literal , (string_literal ""%s: invalid archive header size: %ld\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar10,uVar9,uVar4);" (call_expression "error(uVar10,uVar9,uVar4)" identifier (argument_list "(uVar10,uVar9,uVar4)" ( identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar4 = uVar4 + 1 & 0xfffffffffffffffe;" (assignment_expression "uVar4 = uVar4 + 1 & 0xfffffffffffffffe" identifier = (binary_expression "uVar4 + 1 & 0xfffffffffffffffe" (binary_expression "uVar4 + 1" identifier + number_literal) & number_literal)) ;) (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 ]))) ;) (if_statement "if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }" { (expression_statement "iVar3 = fseek((FILE *)param_1[1],uVar4,1);" (assignment_expression "iVar3 = fseek((FILE *)param_1[1],uVar4,1)" identifier = (call_expression "fseek((FILE *)param_1[1],uVar4,1)" identifier (argument_list "((FILE *)param_1[1],uVar4,1)" ( (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) , identifier , number_literal )))) ;) (if_statement "if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: failed to skip archive symbol table\n";" (assignment_expression "pcVar12 = "%s: failed to skip archive symbol table\n"" identifier = (string_literal ""%s: failed to skip archive symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (labeled_statement "LAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);" statement_identifier : (expression_statement "sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" identifier = (call_expression "fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" identifier (argument_list "(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" ( (binary_expression "param_1 + 0xb" identifier + number_literal) , number_literal , number_literal , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;)) (if_statement "if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }" if (parenthesized_expression "((sVar5 == 0x3c) || (sVar5 == 0))" ( (binary_expression "(sVar5 == 0x3c) || (sVar5 == 0)" (parenthesized_expression "(sVar5 == 0x3c)" ( (binary_expression "sVar5 == 0x3c" identifier == number_literal) )) || (parenthesized_expression "(sVar5 == 0)" ( (binary_expression "sVar5 == 0" identifier == number_literal) ))) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: failed to read archive header following archive index\n";" (assignment_expression "pcVar12 = "%s: failed to read archive header following archive index\n"" identifier = (string_literal ""%s: failed to read archive header following archive index\n"" " string_content escape_sequence ")) ;) }) (else_clause "else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" else (compound_statement "{\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" { (expression_statement "__n_00 = (ulong)param_2;" (assignment_expression "__n_00 = (ulong)param_2" identifier = (cast_expression "(ulong)param_2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }" if (parenthesized_expression "(uVar4 < __n_00)" ( (binary_expression "uVar4 < __n_00" identifier < identifier) )) (compound_statement "{\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: the archive index is empty\n";" (assignment_expression "pcVar12 = "%s: the archive index is empty\n"" identifier = (string_literal ""%s: the archive index is empty\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (expression_statement "sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1])" identifier = (call_expression "fread(local_40,1,__n_00,(FILE *)param_1[1])" identifier (argument_list "(local_40,1,__n_00,(FILE *)param_1[1])" ( identifier , number_literal , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }" if (parenthesized_expression "(__n_00 == sVar5)" ( (binary_expression "__n_00 == sVar5" identifier == identifier) )) (compound_statement "{\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }" { (expression_statement "uVar4 = uVar4 - __n_00;" (assignment_expression "uVar4 = uVar4 - __n_00" identifier = (binary_expression "uVar4 - __n_00" identifier - identifier)) ;) (expression_statement "__n = FUN_00137570(local_40,param_2);" (assignment_expression "__n = FUN_00137570(local_40,param_2)" identifier = (call_expression "FUN_00137570(local_40,param_2)" identifier (argument_list "(local_40,param_2)" ( identifier , identifier )))) ;) (expression_statement "param_1[2] = __n;" (assignment_expression "param_1[2] = __n" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar5 = __n_00 * __n;" (assignment_expression "sVar5 = __n_00 * __n" identifier = (binary_expression "__n_00 * __n" identifier * identifier)) ;) (if_statement "if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }" if (parenthesized_expression "((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0))" ( (binary_expression "(uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)" (parenthesized_expression "(uVar4 < __n)" ( (binary_expression "uVar4 < __n" identifier < identifier) )) || (parenthesized_expression "(uVar4 <= sVar5 && sVar5 - uVar4 != 0)" ( (binary_expression "uVar4 <= sVar5 && sVar5 - uVar4 != 0" (binary_expression "uVar4 <= sVar5" identifier <= identifier) && (binary_expression "sVar5 - uVar4 != 0" (binary_expression "sVar5 - uVar4" identifier - identifier) != number_literal)) ))) )) (compound_statement "{\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);" (assignment_expression "uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" identifier = (call_expression "dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" identifier (argument_list "(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" ( number_literal , (string_literal ""%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar10,uVar9,__n,param_2,uVar4);" (call_expression "error(uVar10,uVar9,__n,param_2,uVar4)" identifier (argument_list "(uVar10,uVar9,__n,param_2,uVar4)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "pvVar6 = malloc(sVar5);" (assignment_expression "pvVar6 = malloc(sVar5)" identifier = (call_expression "malloc(sVar5)" identifier (argument_list "(sVar5)" ( identifier )))) ;) (expression_statement "pcVar12 = "Out of memory whilst trying to read archive symbol index\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to read archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to read archive symbol index\n"" " string_content escape_sequence ")) ;) (if_statement "if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }" if (parenthesized_expression "(pvVar6 == (void *)0x0)" ( (binary_expression "pvVar6 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }" { (labeled_statement "LAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);" statement_identifier : (expression_statement "uVar9 = dcgettext(0,pcVar12,5);" (assignment_expression "uVar9 = dcgettext(0,pcVar12,5)" identifier = (call_expression "dcgettext(0,pcVar12,5)" identifier (argument_list "(0,pcVar12,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar9);" (call_expression "error(uVar9)" identifier (argument_list "(uVar9)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);" (assignment_expression "sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1])" identifier = (call_expression "fread(pvVar6,__n_00,__n,(FILE *)param_1[1])" identifier (argument_list "(pvVar6,__n_00,__n,(FILE *)param_1[1])" ( identifier , identifier , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (expression_statement "sVar5 = param_1[2];" (assignment_expression "sVar5 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (if_statement "if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }" if (parenthesized_expression "(sVar5 == sVar7)" ( (binary_expression "sVar5 == sVar7" identifier == identifier) )) (compound_statement "{\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }" { (expression_statement "sVar7 = uVar4 - __n_00 * sVar5;" (assignment_expression "sVar7 = uVar4 - __n_00 * sVar5" identifier = (binary_expression "uVar4 - __n_00 * sVar5" identifier - (binary_expression "__n_00 * sVar5" identifier * identifier))) ;) (expression_statement "pvVar8 = malloc(sVar5 * 8);" (assignment_expression "pvVar8 = malloc(sVar5 * 8)" identifier = (call_expression "malloc(sVar5 * 8)" identifier (argument_list "(sVar5 * 8)" ( (binary_expression "sVar5 * 8" identifier * number_literal) )))) ;) (expression_statement "param_1[3] = pvVar8;" (assignment_expression "param_1[3] = pvVar8" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }" if (parenthesized_expression "(pvVar8 == (void *)0x0)" ( (binary_expression "pvVar8 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }" { (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) (expression_statement "pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to convert the archive symbol index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00137990;" goto statement_identifier ;) })) (if_statement "if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }" if (parenthesized_expression "(sVar5 != 0)" ( (binary_expression "sVar5 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "pvVar11 = pvVar6;" (assignment_expression "pvVar11 = pvVar6" identifier = identifier) ;) (while_statement "while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }" { (expression_statement "lVar1 = uVar4 * 8;" (assignment_expression "lVar1 = uVar4 * 8" identifier = (binary_expression "uVar4 * 8" identifier * number_literal)) ;) (expression_statement "uVar9 = FUN_00137570(pvVar11,param_2);" (assignment_expression "uVar9 = FUN_00137570(pvVar11,param_2)" identifier = (call_expression "FUN_00137570(pvVar11,param_2)" identifier (argument_list "(pvVar11,param_2)" ( identifier , identifier )))) ;) (expression_statement "uVar4 = uVar4 + 1;" (assignment_expression "uVar4 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)((long)pvVar8 + lVar1) = uVar9;" (assignment_expression "*(undefined8 *)((long)pvVar8 + lVar1) = uVar9" (pointer_expression "*(undefined8 *)((long)pvVar8 + lVar1)" * (cast_expression "(undefined8 *)((long)pvVar8 + lVar1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar8 + lVar1)" ( (binary_expression "(long)pvVar8 + lVar1" (cast_expression "(long)pvVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = identifier) ;) (if_statement "if ((ulong)param_1[2] <= uVar4) break;" if (parenthesized_expression "((ulong)param_1[2] <= uVar4)" ( (binary_expression "(ulong)param_1[2] <= uVar4" (cast_expression "(ulong)param_1[2]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "pvVar8 = (void *)param_1[3];" (assignment_expression "pvVar8 = (void *)param_1[3]" identifier = (cast_expression "(void *)param_1[3]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "pvVar11 = (void *)((long)pvVar11 + __n_00);" (assignment_expression "pvVar11 = (void *)((long)pvVar11 + __n_00)" identifier = (cast_expression "(void *)((long)pvVar11 + __n_00)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar11 + __n_00)" ( (binary_expression "(long)pvVar11 + __n_00" (cast_expression "(long)pvVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) })) })) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) (if_statement "if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }" if (parenthesized_expression "(sVar7 == 0)" ( (binary_expression "sVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: the archive has an index but no symbols\n";" (assignment_expression "pcVar12 = "%s: the archive has an index but no symbols\n"" identifier = (string_literal ""%s: the archive has an index but no symbols\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (expression_statement "pvVar6 = malloc(sVar7);" (assignment_expression "pvVar6 = malloc(sVar7)" identifier = (call_expression "malloc(sVar7)" identifier (argument_list "(sVar7)" ( identifier )))) ;) (expression_statement "param_1[4] = pvVar6;" (assignment_expression "param_1[4] = pvVar6" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }" if (parenthesized_expression "(pvVar6 == (void *)0x0)" ( (binary_expression "pvVar6 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }" { (expression_statement "pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to read archive index symbol table\n"" identifier = (string_literal ""Out of memory whilst trying to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00137990;" goto statement_identifier ;) })) (expression_statement "param_1[5] = sVar7;" (assignment_expression "param_1[5] = sVar7" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1])" identifier = (call_expression "fread(pvVar6,1,sVar7,(FILE *)param_1[1])" identifier (argument_list "(pvVar6,1,sVar7,(FILE *)param_1[1])" ( identifier , number_literal , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }" if (parenthesized_expression "(sVar7 != sVar5)" ( (binary_expression "sVar7 != sVar5" identifier != identifier) )) (compound_statement "{\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: failed to read archive index symbol table\n";" (assignment_expression "pcVar12 = "%s: failed to read archive index symbol table\n"" identifier = (string_literal ""%s: failed to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (goto_statement "goto LAB_00137891;" goto statement_identifier ;) })) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) })) (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: failed to read archive index\n";" (assignment_expression "pcVar12 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) }))) (labeled_statement "LAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);" statement_identifier : (expression_statement "uVar10 = dcgettext(0,pcVar12,5);" (assignment_expression "uVar10 = dcgettext(0,pcVar12,5)" identifier = (call_expression "dcgettext(0,pcVar12,5)" identifier (argument_list "(0,pcVar12,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar10,uVar9);" (call_expression "error(uVar10,uVar9)" identifier (argument_list "(uVar10,uVar9)" ( identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "bfd_boolean\nprocess_archive_index_and_symbols(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)\n\n{\n  char cVar1;\n  int iVar2;\n  ulong uVar3;\n  size_t sVar4;\n  elf_vma eVar5;\n  uchar *__ptr;\n  size_t sVar6;\n  elf_vma *peVar7;\n  uchar *field;\n  char *pcVar8;\n  char *pcVar9;\n  ulong __n;\n  uchar integer_buffer [8];\n  \n  cVar1 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar3 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar1;\n  if ((long)uVar3 < 0) {\n    pcVar8 = arch->file_name;\n    pcVar9 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar9,pcVar8,uVar3);\n    return 0;\n  }\n  uVar3 = uVar3 + 1 & 0xfffffffffffffffe;\n  arch->next_arhdr_offset = uVar3 + 0x3c + arch->next_arhdr_offset;\n  if (read_symbols == 0) {\n    iVar2 = fseek((FILE *)arch->file,uVar3,1);\n    if (iVar2 != 0) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);\n    if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n      return 1;\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n = (ulong)sizeof_ar_index;\n    if (uVar3 < __n) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file);\n    if (__n == sVar4) {\n      uVar3 = uVar3 - __n;\n      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n      arch->index_num = eVar5;\n      sVar4 = __n * eVar5;\n      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }\n      __ptr = (uchar *)malloc(sVar4);\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\n      if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }\n      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);\n      sVar4 = arch->index_num;\n      if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(__ptr);\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  pcVar9 = (char *)dcgettext(0,pcVar9,5);\n  error(pcVar9,pcVar8);\n  return 0;\n}\n\n" (function_definition "bfd_boolean\nprocess_archive_index_and_symbols(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)\n\n{\n  char cVar1;\n  int iVar2;\n  ulong uVar3;\n  size_t sVar4;\n  elf_vma eVar5;\n  uchar *__ptr;\n  size_t sVar6;\n  elf_vma *peVar7;\n  uchar *field;\n  char *pcVar8;\n  char *pcVar9;\n  ulong __n;\n  uchar integer_buffer [8];\n  \n  cVar1 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar3 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar1;\n  if ((long)uVar3 < 0) {\n    pcVar8 = arch->file_name;\n    pcVar9 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar9,pcVar8,uVar3);\n    return 0;\n  }\n  uVar3 = uVar3 + 1 & 0xfffffffffffffffe;\n  arch->next_arhdr_offset = uVar3 + 0x3c + arch->next_arhdr_offset;\n  if (read_symbols == 0) {\n    iVar2 = fseek((FILE *)arch->file,uVar3,1);\n    if (iVar2 != 0) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);\n    if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n      return 1;\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n = (ulong)sizeof_ar_index;\n    if (uVar3 < __n) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file);\n    if (__n == sVar4) {\n      uVar3 = uVar3 - __n;\n      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n      arch->index_num = eVar5;\n      sVar4 = __n * eVar5;\n      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }\n      __ptr = (uchar *)malloc(sVar4);\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\n      if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }\n      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);\n      sVar4 = arch->index_num;\n      if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(__ptr);\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  pcVar9 = (char *)dcgettext(0,pcVar9,5);\n  error(pcVar9,pcVar8);\n  return 0;\n}" type_identifier (function_declarator "process_archive_index_and_symbols(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)" identifier (parameter_list "(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)" ( (parameter_declaration "archive_info *arch" type_identifier (pointer_declarator "*arch" * identifier)) , (parameter_declaration "uint sizeof_ar_index" type_identifier identifier) , (parameter_declaration "bfd_boolean read_symbols" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  ulong uVar3;\n  size_t sVar4;\n  elf_vma eVar5;\n  uchar *__ptr;\n  size_t sVar6;\n  elf_vma *peVar7;\n  uchar *field;\n  char *pcVar8;\n  char *pcVar9;\n  ulong __n;\n  uchar integer_buffer [8];\n  \n  cVar1 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar3 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar1;\n  if ((long)uVar3 < 0) {\n    pcVar8 = arch->file_name;\n    pcVar9 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar9,pcVar8,uVar3);\n    return 0;\n  }\n  uVar3 = uVar3 + 1 & 0xfffffffffffffffe;\n  arch->next_arhdr_offset = uVar3 + 0x3c + arch->next_arhdr_offset;\n  if (read_symbols == 0) {\n    iVar2 = fseek((FILE *)arch->file,uVar3,1);\n    if (iVar2 != 0) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);\n    if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n      return 1;\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n = (ulong)sizeof_ar_index;\n    if (uVar3 < __n) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file);\n    if (__n == sVar4) {\n      uVar3 = uVar3 - __n;\n      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n      arch->index_num = eVar5;\n      sVar4 = __n * eVar5;\n      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }\n      __ptr = (uchar *)malloc(sVar4);\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\n      if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }\n      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);\n      sVar4 = arch->index_num;\n      if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(__ptr);\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  pcVar9 = (char *)dcgettext(0,pcVar9,5);\n  error(pcVar9,pcVar8);\n  return 0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "elf_vma eVar5;" type_identifier identifier ;) (declaration "uchar *__ptr;" type_identifier (pointer_declarator "*__ptr" * identifier) ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "elf_vma *peVar7;" type_identifier (pointer_declarator "*peVar7" * identifier) ;) (declaration "uchar *field;" type_identifier (pointer_declarator "*field" * identifier) ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "uchar integer_buffer [8];" type_identifier (array_declarator "integer_buffer [8]" identifier [ 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 "uVar3 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);" (assignment_expression "uVar3 = 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) ;) (if_statement "if ((long)uVar3 < 0) {\n    pcVar8 = arch->file_name;\n    pcVar9 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar9,pcVar8,uVar3);\n    return 0;\n  }" if (parenthesized_expression "((long)uVar3 < 0)" ( (binary_expression "(long)uVar3 < 0" (cast_expression "(long)uVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    pcVar8 = arch->file_name;\n    pcVar9 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar9,pcVar8,uVar3);\n    return 0;\n  }" { (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar9 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);" (assignment_expression "pcVar9 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier (argument_list "(0,"%s: invalid archive header size: %ld\n",5)" ( number_literal , (string_literal ""%s: invalid archive header size: %ld\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "error(pcVar9,pcVar8,uVar3);" (call_expression "error(pcVar9,pcVar8,uVar3)" identifier (argument_list "(pcVar9,pcVar8,uVar3)" ( identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar3 = uVar3 + 1 & 0xfffffffffffffffe;" (assignment_expression "uVar3 = uVar3 + 1 & 0xfffffffffffffffe" identifier = (binary_expression "uVar3 + 1 & 0xfffffffffffffffe" (binary_expression "uVar3 + 1" identifier + number_literal) & number_literal)) ;) (expression_statement "arch->next_arhdr_offset = uVar3 + 0x3c + arch->next_arhdr_offset;" (assignment_expression "arch->next_arhdr_offset = uVar3 + 0x3c + arch->next_arhdr_offset" (field_expression "arch->next_arhdr_offset" identifier -> field_identifier) = (binary_expression "uVar3 + 0x3c + arch->next_arhdr_offset" (binary_expression "uVar3 + 0x3c" identifier + number_literal) + (field_expression "arch->next_arhdr_offset" identifier -> field_identifier))) ;) (if_statement "if (read_symbols == 0) {\n    iVar2 = fseek((FILE *)arch->file,uVar3,1);\n    if (iVar2 != 0) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);\n    if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n      return 1;\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n = (ulong)sizeof_ar_index;\n    if (uVar3 < __n) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file);\n    if (__n == sVar4) {\n      uVar3 = uVar3 - __n;\n      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n      arch->index_num = eVar5;\n      sVar4 = __n * eVar5;\n      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }\n      __ptr = (uchar *)malloc(sVar4);\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\n      if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }\n      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);\n      sVar4 = arch->index_num;\n      if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(__ptr);\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive index\n";\n  }" if (parenthesized_expression "(read_symbols == 0)" ( (binary_expression "read_symbols == 0" identifier == number_literal) )) (compound_statement "{\n    iVar2 = fseek((FILE *)arch->file,uVar3,1);\n    if (iVar2 != 0) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);\n    if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n      return 1;\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive header following archive index\n";\n  }" { (expression_statement "iVar2 = fseek((FILE *)arch->file,uVar3,1);" (assignment_expression "iVar2 = fseek((FILE *)arch->file,uVar3,1)" identifier = (call_expression "fseek((FILE *)arch->file,uVar3,1)" identifier (argument_list "((FILE *)arch->file,uVar3,1)" ( (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) , identifier , number_literal )))) ;) (if_statement "if (iVar2 != 0) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }" { (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar9 = "%s: failed to skip archive symbol table\n";" (assignment_expression "pcVar9 = "%s: failed to skip archive symbol table\n"" identifier = (string_literal ""%s: failed to skip archive symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (labeled_statement "LAB_00137891:\n    sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);" statement_identifier : (expression_statement "sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);" (assignment_expression "sVar4 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file)" identifier = (call_expression "fread(&arch->arhdr,1,0x3c,(FILE *)arch->file)" identifier (argument_list "(&arch->arhdr,1,0x3c,(FILE *)arch->file)" ( (pointer_expression "&arch->arhdr" & (field_expression "arch->arhdr" identifier -> field_identifier)) , number_literal , number_literal , (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) )))) ;)) (if_statement "if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n      return 1;\n    }" if (parenthesized_expression "((sVar4 == 0x3c) || (sVar4 == 0))" ( (binary_expression "(sVar4 == 0x3c) || (sVar4 == 0)" (parenthesized_expression "(sVar4 == 0x3c)" ( (binary_expression "sVar4 == 0x3c" identifier == number_literal) )) || (parenthesized_expression "(sVar4 == 0)" ( (binary_expression "sVar4 == 0" identifier == number_literal) ))) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive header following archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive header following archive index\n"" identifier = (string_literal ""%s: failed to read archive header following archive index\n"" " string_content escape_sequence ")) ;) }) (else_clause "else {\n    __n = (ulong)sizeof_ar_index;\n    if (uVar3 < __n) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file);\n    if (__n == sVar4) {\n      uVar3 = uVar3 - __n;\n      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n      arch->index_num = eVar5;\n      sVar4 = __n * eVar5;\n      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }\n      __ptr = (uchar *)malloc(sVar4);\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\n      if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }\n      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);\n      sVar4 = arch->index_num;\n      if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(__ptr);\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive index\n";\n  }" else (compound_statement "{\n    __n = (ulong)sizeof_ar_index;\n    if (uVar3 < __n) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file);\n    if (__n == sVar4) {\n      uVar3 = uVar3 - __n;\n      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n      arch->index_num = eVar5;\n      sVar4 = __n * eVar5;\n      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }\n      __ptr = (uchar *)malloc(sVar4);\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\n      if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }\n      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);\n      sVar4 = arch->index_num;\n      if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(__ptr);\n    }\n    pcVar8 = arch->file_name;\n    pcVar9 = "%s: failed to read archive index\n";\n  }" { (expression_statement "__n = (ulong)sizeof_ar_index;" (assignment_expression "__n = (ulong)sizeof_ar_index" identifier = (cast_expression "(ulong)sizeof_ar_index" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar3 < __n) {\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }" if (parenthesized_expression "(uVar3 < __n)" ( (binary_expression "uVar3 < __n" identifier < identifier) )) (compound_statement "{\n      pcVar8 = arch->file_name;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }" { (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar9 = "%s: the archive index is empty\n";" (assignment_expression "pcVar9 = "%s: the archive index is empty\n"" identifier = (string_literal ""%s: the archive index is empty\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (expression_statement "sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file);" (assignment_expression "sVar4 = fread(integer_buffer,1,__n,(FILE *)arch->file)" identifier = (call_expression "fread(integer_buffer,1,__n,(FILE *)arch->file)" identifier (argument_list "(integer_buffer,1,__n,(FILE *)arch->file)" ( identifier , number_literal , identifier , (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) )))) ;) (if_statement "if (__n == sVar4) {\n      uVar3 = uVar3 - __n;\n      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n      arch->index_num = eVar5;\n      sVar4 = __n * eVar5;\n      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }\n      __ptr = (uchar *)malloc(sVar4);\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\n      if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }\n      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);\n      sVar4 = arch->index_num;\n      if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(__ptr);\n    }" if (parenthesized_expression "(__n == sVar4)" ( (binary_expression "__n == sVar4" identifier == identifier) )) (compound_statement "{\n      uVar3 = uVar3 - __n;\n      eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n      arch->index_num = eVar5;\n      sVar4 = __n * eVar5;\n      if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }\n      __ptr = (uchar *)malloc(sVar4);\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\n      if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }\n      sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);\n      sVar4 = arch->index_num;\n      if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(__ptr);\n    }" { (expression_statement "uVar3 = uVar3 - __n;" (assignment_expression "uVar3 = uVar3 - __n" identifier = (binary_expression "uVar3 - __n" identifier - identifier)) ;) (expression_statement "eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index);" (assignment_expression "eVar5 = byte_get_big_endian(integer_buffer,sizeof_ar_index)" identifier = (call_expression "byte_get_big_endian(integer_buffer,sizeof_ar_index)" identifier (argument_list "(integer_buffer,sizeof_ar_index)" ( identifier , identifier )))) ;) (expression_statement "arch->index_num = eVar5;" (assignment_expression "arch->index_num = eVar5" (field_expression "arch->index_num" identifier -> field_identifier) = identifier) ;) (expression_statement "sVar4 = __n * eVar5;" (assignment_expression "sVar4 = __n * eVar5" identifier = (binary_expression "__n * eVar5" identifier * identifier)) ;) (if_statement "if ((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)) {\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }" if (parenthesized_expression "((uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0))" ( (binary_expression "(uVar3 < eVar5) || (uVar3 <= sVar4 && sVar4 - uVar3 != 0)" (parenthesized_expression "(uVar3 < eVar5)" ( (binary_expression "uVar3 < eVar5" identifier < identifier) )) || (parenthesized_expression "(uVar3 <= sVar4 && sVar4 - uVar3 != 0)" ( (binary_expression "uVar3 <= sVar4 && sVar4 - uVar3 != 0" (binary_expression "uVar3 <= sVar4" identifier <= identifier) && (binary_expression "sVar4 - uVar3 != 0" (binary_expression "sVar4 - uVar3" identifier - identifier) != number_literal)) ))) )) (compound_statement "{\n        pcVar8 = arch->file_name;\n        pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);\n        error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);\n        return 0;\n      }" { (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5);" (assignment_expression "pcVar9 = (char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5)" identifier = (cast_expression "(char *)dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5)" identifier (argument_list "(0,\n                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                   ,5)" ( number_literal , (string_literal ""%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3);" (call_expression "error(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3)" identifier (argument_list "(pcVar9,pcVar8,eVar5,(ulong)sizeof_ar_index,uVar3)" ( identifier , identifier , identifier , (cast_expression "(ulong)sizeof_ar_index" ( (type_descriptor "ulong" type_identifier) ) identifier) , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "__ptr = (uchar *)malloc(sVar4);" (assignment_expression "__ptr = (uchar *)malloc(sVar4)" identifier = (cast_expression "(uchar *)malloc(sVar4)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar4)" identifier (argument_list "(sVar4)" ( identifier ))))) ;) (expression_statement "pcVar8 = "Out of memory whilst trying to read archive symbol index\n";" (assignment_expression "pcVar8 = "Out of memory whilst trying to read archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to read archive symbol index\n"" " string_content escape_sequence ")) ;) (if_statement "if (__ptr == (uchar *)0x0) {\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }" if (parenthesized_expression "(__ptr == (uchar *)0x0)" ( (binary_expression "__ptr == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);\n        error(pcVar8);\n        return 0;\n      }" { (labeled_statement "LAB_00137990:\n        pcVar8 = (char *)dcgettext(0,pcVar8,5);" statement_identifier : (expression_statement "pcVar8 = (char *)dcgettext(0,pcVar8,5);" (assignment_expression "pcVar8 = (char *)dcgettext(0,pcVar8,5)" identifier = (cast_expression "(char *)dcgettext(0,pcVar8,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar8,5)" identifier (argument_list "(0,pcVar8,5)" ( number_literal , identifier , number_literal ))))) ;)) (expression_statement "error(pcVar8);" (call_expression "error(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file);" (assignment_expression "sVar6 = fread(__ptr,__n,eVar5,(FILE *)arch->file)" identifier = (call_expression "fread(__ptr,__n,eVar5,(FILE *)arch->file)" identifier (argument_list "(__ptr,__n,eVar5,(FILE *)arch->file)" ( identifier , identifier , identifier , (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) )))) ;) (expression_statement "sVar4 = arch->index_num;" (assignment_expression "sVar4 = arch->index_num" identifier = (field_expression "arch->index_num" identifier -> field_identifier)) ;) (if_statement "if (sVar4 == sVar6) {\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }" if (parenthesized_expression "(sVar4 == sVar6)" ( (binary_expression "sVar4 == sVar6" identifier == identifier) )) (compound_statement "{\n        sVar6 = uVar3 - __n * sVar4;\n        peVar7 = (elf_vma *)malloc(sVar4 * 8);\n        arch->index_array = peVar7;\n        if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }\n        free(__ptr);\n        if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pcVar8 = (char *)malloc(sVar6);\n        arch->sym_table = pcVar8;\n        if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        arch->sym_size = sVar6;\n        sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n        if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }" { (expression_statement "sVar6 = uVar3 - __n * sVar4;" (assignment_expression "sVar6 = uVar3 - __n * sVar4" identifier = (binary_expression "uVar3 - __n * sVar4" identifier - (binary_expression "__n * sVar4" identifier * identifier))) ;) (expression_statement "peVar7 = (elf_vma *)malloc(sVar4 * 8);" (assignment_expression "peVar7 = (elf_vma *)malloc(sVar4 * 8)" identifier = (cast_expression "(elf_vma *)malloc(sVar4 * 8)" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar4 * 8)" identifier (argument_list "(sVar4 * 8)" ( (binary_expression "sVar4 * 8" identifier * number_literal) ))))) ;) (expression_statement "arch->index_array = peVar7;" (assignment_expression "arch->index_array = peVar7" (field_expression "arch->index_array" identifier -> field_identifier) = identifier) ;) (if_statement "if (peVar7 == (elf_vma *)0x0) {\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }" if (parenthesized_expression "(peVar7 == (elf_vma *)0x0)" ( (binary_expression "peVar7 == (elf_vma *)0x0" identifier == (cast_expression "(elf_vma *)0x0" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(__ptr);\n          pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }" { (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (expression_statement "pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";" (assignment_expression "pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to convert the archive symbol index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00137990;" goto statement_identifier ;) })) (if_statement "if (sVar4 != 0) {\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }" if (parenthesized_expression "(sVar4 != 0)" ( (binary_expression "sVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar3 = 0;\n          field = __ptr;\n          while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }\n        }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "field = __ptr;" (assignment_expression "field = __ptr" identifier = identifier) ;) (while_statement "while( true ) {\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            peVar7 = peVar7 + uVar3;\n            eVar5 = byte_get_big_endian(field,sizeof_ar_index);\n            uVar3 = uVar3 + 1;\n            *peVar7 = eVar5;\n            if (arch->index_num <= uVar3) break;\n            peVar7 = arch->index_array;\n            field = field + __n;\n          }" { (expression_statement "peVar7 = peVar7 + uVar3;" (assignment_expression "peVar7 = peVar7 + uVar3" identifier = (binary_expression "peVar7 + uVar3" identifier + identifier)) ;) (expression_statement "eVar5 = byte_get_big_endian(field,sizeof_ar_index);" (assignment_expression "eVar5 = byte_get_big_endian(field,sizeof_ar_index)" identifier = (call_expression "byte_get_big_endian(field,sizeof_ar_index)" identifier (argument_list "(field,sizeof_ar_index)" ( identifier , identifier )))) ;) (expression_statement "uVar3 = uVar3 + 1;" (assignment_expression "uVar3 = uVar3 + 1" identifier = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) (expression_statement "*peVar7 = eVar5;" (assignment_expression "*peVar7 = eVar5" (pointer_expression "*peVar7" * identifier) = identifier) ;) (if_statement "if (arch->index_num <= uVar3) break;" if (parenthesized_expression "(arch->index_num <= uVar3)" ( (binary_expression "arch->index_num <= uVar3" (field_expression "arch->index_num" identifier -> field_identifier) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "peVar7 = arch->index_array;" (assignment_expression "peVar7 = arch->index_array" identifier = (field_expression "arch->index_array" identifier -> field_identifier)) ;) (expression_statement "field = field + __n;" (assignment_expression "field = field + __n" identifier = (binary_expression "field + __n" identifier + identifier)) ;) })) })) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (if_statement "if (sVar6 == 0) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }" if (parenthesized_expression "(sVar6 == 0)" ( (binary_expression "sVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }" { (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar9 = "%s: the archive has an index but no symbols\n";" (assignment_expression "pcVar9 = "%s: the archive has an index but no symbols\n"" identifier = (string_literal ""%s: the archive has an index but no symbols\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (expression_statement "pcVar8 = (char *)malloc(sVar6);" (assignment_expression "pcVar8 = (char *)malloc(sVar6)" identifier = (cast_expression "(char *)malloc(sVar6)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar6)" identifier (argument_list "(sVar6)" ( identifier ))))) ;) (expression_statement "arch->sym_table = pcVar8;" (assignment_expression "arch->sym_table = pcVar8" (field_expression "arch->sym_table" identifier -> field_identifier) = identifier) ;) (if_statement "if (pcVar8 == (char *)0x0) {\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }" { (expression_statement "pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";" (assignment_expression "pcVar8 = "Out of memory whilst trying to read archive index symbol table\n"" identifier = (string_literal ""Out of memory whilst trying to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00137990;" goto statement_identifier ;) })) (expression_statement "arch->sym_size = sVar6;" (assignment_expression "arch->sym_size = sVar6" (field_expression "arch->sym_size" identifier -> field_identifier) = identifier) ;) (expression_statement "sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file);" (assignment_expression "sVar4 = fread(pcVar8,1,sVar6,(FILE *)arch->file)" identifier = (call_expression "fread(pcVar8,1,sVar6,(FILE *)arch->file)" identifier (argument_list "(pcVar8,1,sVar6,(FILE *)arch->file)" ( identifier , number_literal , identifier , (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) )))) ;) (if_statement "if (sVar6 != sVar4) {\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }" if (parenthesized_expression "(sVar6 != sVar4)" ( (binary_expression "sVar6 != sVar4" identifier != identifier) )) (compound_statement "{\n          pcVar8 = arch->file_name;\n          pcVar9 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }" { (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive index symbol table\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index symbol table\n"" identifier = (string_literal ""%s: failed to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (goto_statement "goto LAB_00137891;" goto statement_identifier ;) })) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) })) (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) }))) (labeled_statement "LAB_0013784f:\n  pcVar9 = (char *)dcgettext(0,pcVar9,5);" statement_identifier : (expression_statement "pcVar9 = (char *)dcgettext(0,pcVar9,5);" (assignment_expression "pcVar9 = (char *)dcgettext(0,pcVar9,5)" identifier = (cast_expression "(char *)dcgettext(0,pcVar9,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar9,5)" identifier (argument_list "(0,pcVar9,5)" ( number_literal , identifier , number_literal ))))) ;)) (expression_statement "error(pcVar9,pcVar8);" (call_expression "error(pcVar9,pcVar8)" identifier (argument_list "(pcVar9,pcVar8)" ( identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined8 FUN_00137670(undefined8 *param_1,uint param_2,int param_3)\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  int iVar3;\n  ulong uVar4;\n  size_t sVar5;\n  ulong __n;\n  void *pvVar6;\n  size_t sVar7;\n  void *pvVar8;\n  undefined8 uVar9;\n  undefined8 uVar10;\n  void *pvVar11;\n  char *pcVar12;\n  ulong __n_00;\n  undefined1 local_40 [16];\n  \n  uVar2 = *(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) = uVar2;\n  if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }\n  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;\n  param_1[9] = uVar4 + 0x3c + param_1[9];\n  if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);\n  error(uVar10,uVar9);\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_00137670(undefined8 *param_1,uint param_2,int param_3)\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  int iVar3;\n  ulong uVar4;\n  size_t sVar5;\n  ulong __n;\n  void *pvVar6;\n  size_t sVar7;\n  void *pvVar8;\n  undefined8 uVar9;\n  undefined8 uVar10;\n  void *pvVar11;\n  char *pcVar12;\n  ulong __n_00;\n  undefined1 local_40 [16];\n  \n  uVar2 = *(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) = uVar2;\n  if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }\n  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;\n  param_1[9] = uVar4 + 0x3c + param_1[9];\n  if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);\n  error(uVar10,uVar9);\n  return 0;\n}" type_identifier (function_declarator "FUN_00137670(undefined8 *param_1,uint param_2,int param_3)" identifier (parameter_list "(undefined8 *param_1,uint param_2,int param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined1 uVar2;\n  int iVar3;\n  ulong uVar4;\n  size_t sVar5;\n  ulong __n;\n  void *pvVar6;\n  size_t sVar7;\n  void *pvVar8;\n  undefined8 uVar9;\n  undefined8 uVar10;\n  void *pvVar11;\n  char *pcVar12;\n  ulong __n_00;\n  undefined1 local_40 [16];\n  \n  uVar2 = *(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) = uVar2;\n  if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }\n  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;\n  param_1[9] = uVar4 + 0x3c + param_1[9];\n  if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);\n  error(uVar10,uVar9);\n  return 0;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "void *pvVar6;" primitive_type (pointer_declarator "*pvVar6" * identifier) ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "void *pvVar8;" primitive_type (pointer_declarator "*pvVar8" * identifier) ;) (declaration "undefined8 uVar9;" type_identifier identifier ;) (declaration "undefined8 uVar10;" type_identifier identifier ;) (declaration "void *pvVar11;" primitive_type (pointer_declarator "*pvVar11" * identifier) ;) (declaration "char *pcVar12;" primitive_type (pointer_declarator "*pcVar12" * identifier) ;) (declaration "ulong __n_00;" type_identifier identifier ;) (declaration "undefined1 local_40 [16];" type_identifier (array_declarator "local_40 [16]" identifier [ number_literal ]) ;) (expression_statement "uVar2 = *(undefined1 *)((long)param_1 + 0x92);" (assignment_expression "uVar2 = *(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) = uVar2;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = uVar2" (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) ;) (if_statement "if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }" if (parenthesized_expression "((long)uVar4 < 0)" ( (binary_expression "(long)uVar4 < 0" (cast_expression "(long)uVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);" (assignment_expression "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier = (call_expression "dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier (argument_list "(0,"%s: invalid archive header size: %ld\n",5)" ( number_literal , (string_literal ""%s: invalid archive header size: %ld\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar10,uVar9,uVar4);" (call_expression "error(uVar10,uVar9,uVar4)" identifier (argument_list "(uVar10,uVar9,uVar4)" ( identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar4 = uVar4 + 1 & 0xfffffffffffffffe;" (assignment_expression "uVar4 = uVar4 + 1 & 0xfffffffffffffffe" identifier = (binary_expression "uVar4 + 1 & 0xfffffffffffffffe" (binary_expression "uVar4 + 1" identifier + number_literal) & number_literal)) ;) (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 ]))) ;) (if_statement "if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }" { (expression_statement "iVar3 = fseek((FILE *)param_1[1],uVar4,1);" (assignment_expression "iVar3 = fseek((FILE *)param_1[1],uVar4,1)" identifier = (call_expression "fseek((FILE *)param_1[1],uVar4,1)" identifier (argument_list "((FILE *)param_1[1],uVar4,1)" ( (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) , identifier , number_literal )))) ;) (if_statement "if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: failed to skip archive symbol table\n";" (assignment_expression "pcVar12 = "%s: failed to skip archive symbol table\n"" identifier = (string_literal ""%s: failed to skip archive symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (labeled_statement "LAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);" statement_identifier : (expression_statement "sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" identifier = (call_expression "fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" identifier (argument_list "(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" ( (binary_expression "param_1 + 0xb" identifier + number_literal) , number_literal , number_literal , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;)) (if_statement "if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }" if (parenthesized_expression "((sVar5 == 0x3c) || (sVar5 == 0))" ( (binary_expression "(sVar5 == 0x3c) || (sVar5 == 0)" (parenthesized_expression "(sVar5 == 0x3c)" ( (binary_expression "sVar5 == 0x3c" identifier == number_literal) )) || (parenthesized_expression "(sVar5 == 0)" ( (binary_expression "sVar5 == 0" identifier == number_literal) ))) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: failed to read archive header following archive index\n";" (assignment_expression "pcVar12 = "%s: failed to read archive header following archive index\n"" identifier = (string_literal ""%s: failed to read archive header following archive index\n"" " string_content escape_sequence ")) ;) }) (else_clause "else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" else (compound_statement "{\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" { (expression_statement "__n_00 = (ulong)param_2;" (assignment_expression "__n_00 = (ulong)param_2" identifier = (cast_expression "(ulong)param_2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }" if (parenthesized_expression "(uVar4 < __n_00)" ( (binary_expression "uVar4 < __n_00" identifier < identifier) )) (compound_statement "{\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: the archive index is empty\n";" (assignment_expression "pcVar12 = "%s: the archive index is empty\n"" identifier = (string_literal ""%s: the archive index is empty\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (expression_statement "sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1])" identifier = (call_expression "fread(local_40,1,__n_00,(FILE *)param_1[1])" identifier (argument_list "(local_40,1,__n_00,(FILE *)param_1[1])" ( identifier , number_literal , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }" if (parenthesized_expression "(__n_00 == sVar5)" ( (binary_expression "__n_00 == sVar5" identifier == identifier) )) (compound_statement "{\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }" { (expression_statement "uVar4 = uVar4 - __n_00;" (assignment_expression "uVar4 = uVar4 - __n_00" identifier = (binary_expression "uVar4 - __n_00" identifier - identifier)) ;) (expression_statement "__n = FUN_00137570(local_40,param_2);" (assignment_expression "__n = FUN_00137570(local_40,param_2)" identifier = (call_expression "FUN_00137570(local_40,param_2)" identifier (argument_list "(local_40,param_2)" ( identifier , identifier )))) ;) (expression_statement "param_1[2] = __n;" (assignment_expression "param_1[2] = __n" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar5 = __n_00 * __n;" (assignment_expression "sVar5 = __n_00 * __n" identifier = (binary_expression "__n_00 * __n" identifier * identifier)) ;) (if_statement "if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }" if (parenthesized_expression "((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0))" ( (binary_expression "(uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)" (parenthesized_expression "(uVar4 < __n)" ( (binary_expression "uVar4 < __n" identifier < identifier) )) || (parenthesized_expression "(uVar4 <= sVar5 && sVar5 - uVar4 != 0)" ( (binary_expression "uVar4 <= sVar5 && sVar5 - uVar4 != 0" (binary_expression "uVar4 <= sVar5" identifier <= identifier) && (binary_expression "sVar5 - uVar4 != 0" (binary_expression "sVar5 - uVar4" identifier - identifier) != number_literal)) ))) )) (compound_statement "{\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);" (assignment_expression "uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" identifier = (call_expression "dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" identifier (argument_list "(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" ( number_literal , (string_literal ""%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar10,uVar9,__n,param_2,uVar4);" (call_expression "error(uVar10,uVar9,__n,param_2,uVar4)" identifier (argument_list "(uVar10,uVar9,__n,param_2,uVar4)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "pvVar6 = malloc(sVar5);" (assignment_expression "pvVar6 = malloc(sVar5)" identifier = (call_expression "malloc(sVar5)" identifier (argument_list "(sVar5)" ( identifier )))) ;) (expression_statement "pcVar12 = "Out of memory whilst trying to read archive symbol index\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to read archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to read archive symbol index\n"" " string_content escape_sequence ")) ;) (if_statement "if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }" if (parenthesized_expression "(pvVar6 == (void *)0x0)" ( (binary_expression "pvVar6 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }" { (labeled_statement "LAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);" statement_identifier : (expression_statement "uVar9 = dcgettext(0,pcVar12,5);" (assignment_expression "uVar9 = dcgettext(0,pcVar12,5)" identifier = (call_expression "dcgettext(0,pcVar12,5)" identifier (argument_list "(0,pcVar12,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar9);" (call_expression "error(uVar9)" identifier (argument_list "(uVar9)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);" (assignment_expression "sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1])" identifier = (call_expression "fread(pvVar6,__n_00,__n,(FILE *)param_1[1])" identifier (argument_list "(pvVar6,__n_00,__n,(FILE *)param_1[1])" ( identifier , identifier , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (expression_statement "sVar5 = param_1[2];" (assignment_expression "sVar5 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (if_statement "if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }" if (parenthesized_expression "(sVar5 == sVar7)" ( (binary_expression "sVar5 == sVar7" identifier == identifier) )) (compound_statement "{\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }" { (expression_statement "sVar7 = uVar4 - __n_00 * sVar5;" (assignment_expression "sVar7 = uVar4 - __n_00 * sVar5" identifier = (binary_expression "uVar4 - __n_00 * sVar5" identifier - (binary_expression "__n_00 * sVar5" identifier * identifier))) ;) (expression_statement "pvVar8 = malloc(sVar5 * 8);" (assignment_expression "pvVar8 = malloc(sVar5 * 8)" identifier = (call_expression "malloc(sVar5 * 8)" identifier (argument_list "(sVar5 * 8)" ( (binary_expression "sVar5 * 8" identifier * number_literal) )))) ;) (expression_statement "param_1[3] = pvVar8;" (assignment_expression "param_1[3] = pvVar8" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }" if (parenthesized_expression "(pvVar8 == (void *)0x0)" ( (binary_expression "pvVar8 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }" { (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) (expression_statement "pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to convert the archive symbol index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00137990;" goto statement_identifier ;) })) (if_statement "if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }" if (parenthesized_expression "(sVar5 != 0)" ( (binary_expression "sVar5 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "pvVar11 = pvVar6;" (assignment_expression "pvVar11 = pvVar6" identifier = identifier) ;) (while_statement "while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }" { (expression_statement "lVar1 = uVar4 * 8;" (assignment_expression "lVar1 = uVar4 * 8" identifier = (binary_expression "uVar4 * 8" identifier * number_literal)) ;) (expression_statement "uVar9 = FUN_00137570(pvVar11,param_2);" (assignment_expression "uVar9 = FUN_00137570(pvVar11,param_2)" identifier = (call_expression "FUN_00137570(pvVar11,param_2)" identifier (argument_list "(pvVar11,param_2)" ( identifier , identifier )))) ;) (expression_statement "uVar4 = uVar4 + 1;" (assignment_expression "uVar4 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)((long)pvVar8 + lVar1) = uVar9;" (assignment_expression "*(undefined8 *)((long)pvVar8 + lVar1) = uVar9" (pointer_expression "*(undefined8 *)((long)pvVar8 + lVar1)" * (cast_expression "(undefined8 *)((long)pvVar8 + lVar1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar8 + lVar1)" ( (binary_expression "(long)pvVar8 + lVar1" (cast_expression "(long)pvVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = identifier) ;) (if_statement "if ((ulong)param_1[2] <= uVar4) break;" if (parenthesized_expression "((ulong)param_1[2] <= uVar4)" ( (binary_expression "(ulong)param_1[2] <= uVar4" (cast_expression "(ulong)param_1[2]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "pvVar8 = (void *)param_1[3];" (assignment_expression "pvVar8 = (void *)param_1[3]" identifier = (cast_expression "(void *)param_1[3]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "pvVar11 = (void *)((long)pvVar11 + __n_00);" (assignment_expression "pvVar11 = (void *)((long)pvVar11 + __n_00)" identifier = (cast_expression "(void *)((long)pvVar11 + __n_00)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar11 + __n_00)" ( (binary_expression "(long)pvVar11 + __n_00" (cast_expression "(long)pvVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) })) })) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) (if_statement "if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }" if (parenthesized_expression "(sVar7 == 0)" ( (binary_expression "sVar7 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: the archive has an index but no symbols\n";" (assignment_expression "pcVar12 = "%s: the archive has an index but no symbols\n"" identifier = (string_literal ""%s: the archive has an index but no symbols\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (expression_statement "pvVar6 = malloc(sVar7);" (assignment_expression "pvVar6 = malloc(sVar7)" identifier = (call_expression "malloc(sVar7)" identifier (argument_list "(sVar7)" ( identifier )))) ;) (expression_statement "param_1[4] = pvVar6;" (assignment_expression "param_1[4] = pvVar6" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }" if (parenthesized_expression "(pvVar6 == (void *)0x0)" ( (binary_expression "pvVar6 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }" { (expression_statement "pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to read archive index symbol table\n"" identifier = (string_literal ""Out of memory whilst trying to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00137990;" goto statement_identifier ;) })) (expression_statement "param_1[5] = sVar7;" (assignment_expression "param_1[5] = sVar7" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1])" identifier = (call_expression "fread(pvVar6,1,sVar7,(FILE *)param_1[1])" identifier (argument_list "(pvVar6,1,sVar7,(FILE *)param_1[1])" ( identifier , number_literal , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }" if (parenthesized_expression "(sVar7 != sVar5)" ( (binary_expression "sVar7 != sVar5" identifier != identifier) )) (compound_statement "{\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }" { (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: failed to read archive index symbol table\n";" (assignment_expression "pcVar12 = "%s: failed to read archive index symbol table\n"" identifier = (string_literal ""%s: failed to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_0013784f;" goto statement_identifier ;) })) (goto_statement "goto LAB_00137891;" goto statement_identifier ;) })) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) })) (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar12 = "%s: failed to read archive index\n";" (assignment_expression "pcVar12 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) }))) (labeled_statement "LAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);" statement_identifier : (expression_statement "uVar10 = dcgettext(0,pcVar12,5);" (assignment_expression "uVar10 = dcgettext(0,pcVar12,5)" identifier = (call_expression "dcgettext(0,pcVar12,5)" identifier (argument_list "(0,pcVar12,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar10,uVar9);" (call_expression "error(uVar10,uVar9)" identifier (argument_list "(uVar10,uVar9)" ( identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ 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) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (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 , IDENT , IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression IDENT + LIT) + (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , LIT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (binary_expression (binary_expression IDENT <= IDENT) && (binary_expression (binary_expression IDENT - IDENT) != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (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 , IDENT , IDENT , IDENT , IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , 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 , IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (binary_expression IDENT * IDENT))) ;) (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 (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression 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) + IDENT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) ;) })) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (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 = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (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 ;) })))
(function_definition "undefined8 FUN_00137670(undefined8 *param_1,uint param_2,int param_3)\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  int iVar3;\n  ulong uVar4;\n  size_t sVar5;\n  ulong __n;\n  void *pvVar6;\n  size_t sVar7;\n  void *pvVar8;\n  undefined8 uVar9;\n  undefined8 uVar10;\n  void *pvVar11;\n  char *pcVar12;\n  ulong __n_00;\n  undefined1 local_40 [16];\n  \n  uVar2 = *(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) = uVar2;\n  if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }\n  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;\n  param_1[9] = uVar4 + 0x3c + param_1[9];\n  if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);\n  error(uVar10,uVar9);\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_00137670(undefined8 *param_1,uint param_2,int param_3)" (identifier "FUN_00137670") (parameter_list "(undefined8 *param_1,uint param_2,int param_3)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined1 uVar2;\n  int iVar3;\n  ulong uVar4;\n  size_t sVar5;\n  ulong __n;\n  void *pvVar6;\n  size_t sVar7;\n  void *pvVar8;\n  undefined8 uVar9;\n  undefined8 uVar10;\n  void *pvVar11;\n  char *pcVar12;\n  ulong __n_00;\n  undefined1 local_40 [16];\n  \n  uVar2 = *(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) = uVar2;\n  if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }\n  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;\n  param_1[9] = uVar4 + 0x3c + param_1[9];\n  if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }\nLAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);\n  error(uVar10,uVar9);\n  return 0;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined1 uVar2;" (type_identifier "undefined1") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "size_t sVar5;" (primitive_type "size_t") (identifier "sVar5") (; ";")) (declaration "ulong __n;" (type_identifier "ulong") (identifier "__n") (; ";")) (declaration "void *pvVar6;" (primitive_type "void") (pointer_declarator "*pvVar6" (* "*") (identifier "pvVar6")) (; ";")) (declaration "size_t sVar7;" (primitive_type "size_t") (identifier "sVar7") (; ";")) (declaration "void *pvVar8;" (primitive_type "void") (pointer_declarator "*pvVar8" (* "*") (identifier "pvVar8")) (; ";")) (declaration "undefined8 uVar9;" (type_identifier "undefined8") (identifier "uVar9") (; ";")) (declaration "undefined8 uVar10;" (type_identifier "undefined8") (identifier "uVar10") (; ";")) (declaration "void *pvVar11;" (primitive_type "void") (pointer_declarator "*pvVar11" (* "*") (identifier "pvVar11")) (; ";")) (declaration "char *pcVar12;" (primitive_type "char") (pointer_declarator "*pcVar12" (* "*") (identifier "pcVar12")) (; ";")) (declaration "ulong __n_00;" (type_identifier "ulong") (identifier "__n_00") (; ";")) (declaration "undefined1 local_40 [16];" (type_identifier "undefined1") (array_declarator "local_40 [16]" (identifier "local_40") ([ "[") (number_literal "16") (] "]")) (; ";")) (expression_statement "uVar2 = *(undefined1 *)((long)param_1 + 0x92);" (assignment_expression "uVar2 = *(undefined1 *)((long)param_1 + 0x92)" (identifier "uVar2") (= "=") (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) = uVar2;" (assignment_expression "*(undefined1 *)((long)param_1 + 0x92) = uVar2" (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 "uVar2")) (; ";")) (if_statement "if ((long)uVar4 < 0) {\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }" (if "if") (parenthesized_expression "((long)uVar4 < 0)" (( "(") (binary_expression "(long)uVar4 < 0" (cast_expression "(long)uVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar4")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    uVar9 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar9,uVar4);\n    return 0;\n  }" ({ "{") (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" (identifier "uVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);" (assignment_expression "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5)" (identifier "uVar10") (= "=") (call_expression "dcgettext(0,"%s: invalid archive header size: %ld\n",5)" (identifier "dcgettext") (argument_list "(0,"%s: invalid archive header size: %ld\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: invalid archive header size: %ld\n"" (" """) (string_content "%s: invalid archive header size: %ld") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "error(uVar10,uVar9,uVar4);" (call_expression "error(uVar10,uVar9,uVar4)" (identifier "error") (argument_list "(uVar10,uVar9,uVar4)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar9") (, ",") (identifier "uVar4") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar4 = uVar4 + 1 & 0xfffffffffffffffe;" (assignment_expression "uVar4 = uVar4 + 1 & 0xfffffffffffffffe" (identifier "uVar4") (= "=") (binary_expression "uVar4 + 1 & 0xfffffffffffffffe" (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1")) (& "&") (number_literal "0xfffffffffffffffe"))) (; ";")) (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") (] "]")))) (; ";")) (if_statement "if (param_3 == 0) {\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }\n  else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar3 = fseek((FILE *)param_1[1],uVar4,1);\n    if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }\nLAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);\n    if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive header following archive index\n";\n  }" ({ "{") (expression_statement "iVar3 = fseek((FILE *)param_1[1],uVar4,1);" (assignment_expression "iVar3 = fseek((FILE *)param_1[1],uVar4,1)" (identifier "iVar3") (= "=") (call_expression "fseek((FILE *)param_1[1],uVar4,1)" (identifier "fseek") (argument_list "((FILE *)param_1[1],uVar4,1)" (( "(") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (, ",") (identifier "uVar4") (, ",") (number_literal "1") () ")")))) (; ";")) (if_statement "if (iVar3 != 0) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar9 = *param_1;\n      pcVar12 = "%s: failed to skip archive symbol table\n";\n      goto LAB_0013784f;\n    }" ({ "{") (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" (identifier "uVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar12 = "%s: failed to skip archive symbol table\n";" (assignment_expression "pcVar12 = "%s: failed to skip archive symbol table\n"" (identifier "pcVar12") (= "=") (string_literal ""%s: failed to skip archive symbol table\n"" (" """) (string_content "%s: failed to skip archive symbol table") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_0013784f;" (goto "goto") (statement_identifier "LAB_0013784f") (; ";")) (} "}"))) (labeled_statement "LAB_00137891:\n    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);" (statement_identifier "LAB_00137891") (: ":") (expression_statement "sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" (identifier "sVar5") (= "=") (call_expression "fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" (identifier "fread") (argument_list "(param_1 + 0xb,1,0x3c,(FILE *)param_1[1])" (( "(") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb")) (, ",") (number_literal "1") (, ",") (number_literal "0x3c") (, ",") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";"))) (if_statement "if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n      return 1;\n    }" (if "if") (parenthesized_expression "((sVar5 == 0x3c) || (sVar5 == 0))" (( "(") (binary_expression "(sVar5 == 0x3c) || (sVar5 == 0)" (parenthesized_expression "(sVar5 == 0x3c)" (( "(") (binary_expression "sVar5 == 0x3c" (identifier "sVar5") (== "==") (number_literal "0x3c")) () ")")) (|| "||") (parenthesized_expression "(sVar5 == 0)" (( "(") (binary_expression "sVar5 == 0" (identifier "sVar5") (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" (identifier "uVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar12 = "%s: failed to read archive header following archive index\n";" (assignment_expression "pcVar12 = "%s: failed to read archive header following archive index\n"" (identifier "pcVar12") (= "=") (string_literal ""%s: failed to read archive header following archive index\n"" (" """) (string_content "%s: failed to read archive header following archive index") (escape_sequence "\n") (" """))) (; ";")) (} "}")) (else_clause "else {\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" (else "else") (compound_statement "{\n    __n_00 = (ulong)param_2;\n    if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }\n    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);\n    if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }\n    uVar9 = *param_1;\n    pcVar12 = "%s: failed to read archive index\n";\n  }" ({ "{") (expression_statement "__n_00 = (ulong)param_2;" (assignment_expression "__n_00 = (ulong)param_2" (identifier "__n_00") (= "=") (cast_expression "(ulong)param_2" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_2"))) (; ";")) (if_statement "if (uVar4 < __n_00) {\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }" (if "if") (parenthesized_expression "(uVar4 < __n_00)" (( "(") (binary_expression "uVar4 < __n_00" (identifier "uVar4") (< "<") (identifier "__n_00")) () ")")) (compound_statement "{\n      uVar9 = *param_1;\n      pcVar12 = "%s: the archive index is empty\n";\n      goto LAB_0013784f;\n    }" ({ "{") (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" (identifier "uVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar12 = "%s: the archive index is empty\n";" (assignment_expression "pcVar12 = "%s: the archive index is empty\n"" (identifier "pcVar12") (= "=") (string_literal ""%s: the archive index is empty\n"" (" """) (string_content "%s: the archive index is empty") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_0013784f;" (goto "goto") (statement_identifier "LAB_0013784f") (; ";")) (} "}"))) (expression_statement "sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1])" (identifier "sVar5") (= "=") (call_expression "fread(local_40,1,__n_00,(FILE *)param_1[1])" (identifier "fread") (argument_list "(local_40,1,__n_00,(FILE *)param_1[1])" (( "(") (identifier "local_40") (, ",") (number_literal "1") (, ",") (identifier "__n_00") (, ",") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";")) (if_statement "if (__n_00 == sVar5) {\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }" (if "if") (parenthesized_expression "(__n_00 == sVar5)" (( "(") (binary_expression "__n_00 == sVar5" (identifier "__n_00") (== "==") (identifier "sVar5")) () ")")) (compound_statement "{\n      uVar4 = uVar4 - __n_00;\n      __n = FUN_00137570(local_40,param_2);\n      param_1[2] = __n;\n      sVar5 = __n_00 * __n;\n      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }\n      pvVar6 = malloc(sVar5);\n      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";\n      if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }\n      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);\n      sVar5 = param_1[2];\n      if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }\n      free(pvVar6);\n    }" ({ "{") (expression_statement "uVar4 = uVar4 - __n_00;" (assignment_expression "uVar4 = uVar4 - __n_00" (identifier "uVar4") (= "=") (binary_expression "uVar4 - __n_00" (identifier "uVar4") (- "-") (identifier "__n_00"))) (; ";")) (expression_statement "__n = FUN_00137570(local_40,param_2);" (assignment_expression "__n = FUN_00137570(local_40,param_2)" (identifier "__n") (= "=") (call_expression "FUN_00137570(local_40,param_2)" (identifier "FUN_00137570") (argument_list "(local_40,param_2)" (( "(") (identifier "local_40") (, ",") (identifier "param_2") () ")")))) (; ";")) (expression_statement "param_1[2] = __n;" (assignment_expression "param_1[2] = __n" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "__n")) (; ";")) (expression_statement "sVar5 = __n_00 * __n;" (assignment_expression "sVar5 = __n_00 * __n" (identifier "sVar5") (= "=") (binary_expression "__n_00 * __n" (identifier "__n_00") (* "*") (identifier "__n"))) (; ";")) (if_statement "if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }" (if "if") (parenthesized_expression "((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0))" (( "(") (binary_expression "(uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)" (parenthesized_expression "(uVar4 < __n)" (( "(") (binary_expression "uVar4 < __n" (identifier "uVar4") (< "<") (identifier "__n")) () ")")) (|| "||") (parenthesized_expression "(uVar4 <= sVar5 && sVar5 - uVar4 != 0)" (( "(") (binary_expression "uVar4 <= sVar5 && sVar5 - uVar4 != 0" (binary_expression "uVar4 <= sVar5" (identifier "uVar4") (<= "<=") (identifier "sVar5")) (&& "&&") (binary_expression "sVar5 - uVar4 != 0" (binary_expression "sVar5 - uVar4" (identifier "sVar5") (- "-") (identifier "uVar4")) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n        uVar9 = *param_1;\n        uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);\n        error(uVar10,uVar9,__n,param_2,uVar4);\n        return 0;\n      }" ({ "{") (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" (identifier "uVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5);" (assignment_expression "uVar10 = dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" (identifier "uVar10") (= "=") (call_expression "dcgettext(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" (identifier "dcgettext") (argument_list "(0,\n                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                           ,5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"" (" """) (string_content "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "error(uVar10,uVar9,__n,param_2,uVar4);" (call_expression "error(uVar10,uVar9,__n,param_2,uVar4)" (identifier "error") (argument_list "(uVar10,uVar9,__n,param_2,uVar4)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar9") (, ",") (identifier "__n") (, ",") (identifier "param_2") (, ",") (identifier "uVar4") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pvVar6 = malloc(sVar5);" (assignment_expression "pvVar6 = malloc(sVar5)" (identifier "pvVar6") (= "=") (call_expression "malloc(sVar5)" (identifier "malloc") (argument_list "(sVar5)" (( "(") (identifier "sVar5") () ")")))) (; ";")) (expression_statement "pcVar12 = "Out of memory whilst trying to read archive symbol index\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to read archive symbol index\n"" (identifier "pcVar12") (= "=") (string_literal ""Out of memory whilst trying to read archive symbol index\n"" (" """) (string_content "Out of memory whilst trying to read archive symbol index") (escape_sequence "\n") (" """))) (; ";")) (if_statement "if (pvVar6 == (void *)0x0) {\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }" (if "if") (parenthesized_expression "(pvVar6 == (void *)0x0)" (( "(") (binary_expression "pvVar6 == (void *)0x0" (identifier "pvVar6") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);\n        error(uVar9);\n        return 0;\n      }" ({ "{") (labeled_statement "LAB_00137990:\n        uVar9 = dcgettext(0,pcVar12,5);" (statement_identifier "LAB_00137990") (: ":") (expression_statement "uVar9 = dcgettext(0,pcVar12,5);" (assignment_expression "uVar9 = dcgettext(0,pcVar12,5)" (identifier "uVar9") (= "=") (call_expression "dcgettext(0,pcVar12,5)" (identifier "dcgettext") (argument_list "(0,pcVar12,5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar12") (, ",") (number_literal "5") () ")")))) (; ";"))) (expression_statement "error(uVar9);" (call_expression "error(uVar9)" (identifier "error") (argument_list "(uVar9)" (( "(") (identifier "uVar9") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);" (assignment_expression "sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1])" (identifier "sVar7") (= "=") (call_expression "fread(pvVar6,__n_00,__n,(FILE *)param_1[1])" (identifier "fread") (argument_list "(pvVar6,__n_00,__n,(FILE *)param_1[1])" (( "(") (identifier "pvVar6") (, ",") (identifier "__n_00") (, ",") (identifier "__n") (, ",") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";")) (expression_statement "sVar5 = param_1[2];" (assignment_expression "sVar5 = param_1[2]" (identifier "sVar5") (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (sVar5 == sVar7) {\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }" (if "if") (parenthesized_expression "(sVar5 == sVar7)" (( "(") (binary_expression "sVar5 == sVar7" (identifier "sVar5") (== "==") (identifier "sVar7")) () ")")) (compound_statement "{\n        sVar7 = uVar4 - __n_00 * sVar5;\n        pvVar8 = malloc(sVar5 * 8);\n        param_1[3] = pvVar8;\n        if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }\n        if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }\n        free(pvVar6);\n        if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }\n        pvVar6 = malloc(sVar7);\n        param_1[4] = pvVar6;\n        if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }\n        param_1[5] = sVar7;\n        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);\n        if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }\n        goto LAB_00137891;\n      }" ({ "{") (expression_statement "sVar7 = uVar4 - __n_00 * sVar5;" (assignment_expression "sVar7 = uVar4 - __n_00 * sVar5" (identifier "sVar7") (= "=") (binary_expression "uVar4 - __n_00 * sVar5" (identifier "uVar4") (- "-") (binary_expression "__n_00 * sVar5" (identifier "__n_00") (* "*") (identifier "sVar5")))) (; ";")) (expression_statement "pvVar8 = malloc(sVar5 * 8);" (assignment_expression "pvVar8 = malloc(sVar5 * 8)" (identifier "pvVar8") (= "=") (call_expression "malloc(sVar5 * 8)" (identifier "malloc") (argument_list "(sVar5 * 8)" (( "(") (binary_expression "sVar5 * 8" (identifier "sVar5") (* "*") (number_literal "8")) () ")")))) (; ";")) (expression_statement "param_1[3] = pvVar8;" (assignment_expression "param_1[3] = pvVar8" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "pvVar8")) (; ";")) (if_statement "if (pvVar8 == (void *)0x0) {\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }" (if "if") (parenthesized_expression "(pvVar8 == (void *)0x0)" (( "(") (binary_expression "pvVar8 == (void *)0x0" (identifier "pvVar8") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          free(pvVar6);\n          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";\n          goto LAB_00137990;\n        }" ({ "{") (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" (identifier "free") (argument_list "(pvVar6)" (( "(") (identifier "pvVar6") () ")"))) (; ";")) (expression_statement "pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n"" (identifier "pcVar12") (= "=") (string_literal ""Out of memory whilst trying to convert the archive symbol index\n"" (" """) (string_content "Out of memory whilst trying to convert the archive symbol index") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00137990;" (goto "goto") (statement_identifier "LAB_00137990") (; ";")) (} "}"))) (if_statement "if (sVar5 != 0) {\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }" (if "if") (parenthesized_expression "(sVar5 != 0)" (( "(") (binary_expression "sVar5 != 0" (identifier "sVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar4 = 0;\n          pvVar11 = pvVar6;\n          while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }\n        }" ({ "{") (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "pvVar11 = pvVar6;" (assignment_expression "pvVar11 = pvVar6" (identifier "pvVar11") (= "=") (identifier "pvVar6")) (; ";")) (while_statement "while( true ) {\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n            lVar1 = uVar4 * 8;\n            uVar9 = FUN_00137570(pvVar11,param_2);\n            uVar4 = uVar4 + 1;\n            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;\n            if ((ulong)param_1[2] <= uVar4) break;\n            pvVar8 = (void *)param_1[3];\n            pvVar11 = (void *)((long)pvVar11 + __n_00);\n          }" ({ "{") (expression_statement "lVar1 = uVar4 * 8;" (assignment_expression "lVar1 = uVar4 * 8" (identifier "lVar1") (= "=") (binary_expression "uVar4 * 8" (identifier "uVar4") (* "*") (number_literal "8"))) (; ";")) (expression_statement "uVar9 = FUN_00137570(pvVar11,param_2);" (assignment_expression "uVar9 = FUN_00137570(pvVar11,param_2)" (identifier "uVar9") (= "=") (call_expression "FUN_00137570(pvVar11,param_2)" (identifier "FUN_00137570") (argument_list "(pvVar11,param_2)" (( "(") (identifier "pvVar11") (, ",") (identifier "param_2") () ")")))) (; ";")) (expression_statement "uVar4 = uVar4 + 1;" (assignment_expression "uVar4 = uVar4 + 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined8 *)((long)pvVar8 + lVar1) = uVar9;" (assignment_expression "*(undefined8 *)((long)pvVar8 + lVar1) = uVar9" (pointer_expression "*(undefined8 *)((long)pvVar8 + lVar1)" (* "*") (cast_expression "(undefined8 *)((long)pvVar8 + lVar1)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pvVar8 + lVar1)" (( "(") (binary_expression "(long)pvVar8 + lVar1" (cast_expression "(long)pvVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar8")) (+ "+") (identifier "lVar1")) () ")")))) (= "=") (identifier "uVar9")) (; ";")) (if_statement "if ((ulong)param_1[2] <= uVar4) break;" (if "if") (parenthesized_expression "((ulong)param_1[2] <= uVar4)" (( "(") (binary_expression "(ulong)param_1[2] <= uVar4" (cast_expression "(ulong)param_1[2]" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (<= "<=") (identifier "uVar4")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "pvVar8 = (void *)param_1[3];" (assignment_expression "pvVar8 = (void *)param_1[3]" (identifier "pvVar8") (= "=") (cast_expression "(void *)param_1[3]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "pvVar11 = (void *)((long)pvVar11 + __n_00);" (assignment_expression "pvVar11 = (void *)((long)pvVar11 + __n_00)" (identifier "pvVar11") (= "=") (cast_expression "(void *)((long)pvVar11 + __n_00)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pvVar11 + __n_00)" (( "(") (binary_expression "(long)pvVar11 + __n_00" (cast_expression "(long)pvVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar11")) (+ "+") (identifier "__n_00")) () ")")))) (; ";")) (} "}"))) (} "}"))) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" (identifier "free") (argument_list "(pvVar6)" (( "(") (identifier "pvVar6") () ")"))) (; ";")) (if_statement "if (sVar7 == 0) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }" (if "if") (parenthesized_expression "(sVar7 == 0)" (( "(") (binary_expression "sVar7 == 0" (identifier "sVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          uVar9 = *param_1;\n          pcVar12 = "%s: the archive has an index but no symbols\n";\n          goto LAB_0013784f;\n        }" ({ "{") (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" (identifier "uVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar12 = "%s: the archive has an index but no symbols\n";" (assignment_expression "pcVar12 = "%s: the archive has an index but no symbols\n"" (identifier "pcVar12") (= "=") (string_literal ""%s: the archive has an index but no symbols\n"" (" """) (string_content "%s: the archive has an index but no symbols") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_0013784f;" (goto "goto") (statement_identifier "LAB_0013784f") (; ";")) (} "}"))) (expression_statement "pvVar6 = malloc(sVar7);" (assignment_expression "pvVar6 = malloc(sVar7)" (identifier "pvVar6") (= "=") (call_expression "malloc(sVar7)" (identifier "malloc") (argument_list "(sVar7)" (( "(") (identifier "sVar7") () ")")))) (; ";")) (expression_statement "param_1[4] = pvVar6;" (assignment_expression "param_1[4] = pvVar6" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "pvVar6")) (; ";")) (if_statement "if (pvVar6 == (void *)0x0) {\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }" (if "if") (parenthesized_expression "(pvVar6 == (void *)0x0)" (( "(") (binary_expression "pvVar6 == (void *)0x0" (identifier "pvVar6") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";\n          goto LAB_00137990;\n        }" ({ "{") (expression_statement "pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";" (assignment_expression "pcVar12 = "Out of memory whilst trying to read archive index symbol table\n"" (identifier "pcVar12") (= "=") (string_literal ""Out of memory whilst trying to read archive index symbol table\n"" (" """) (string_content "Out of memory whilst trying to read archive index symbol table") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00137990;" (goto "goto") (statement_identifier "LAB_00137990") (; ";")) (} "}"))) (expression_statement "param_1[5] = sVar7;" (assignment_expression "param_1[5] = sVar7" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "sVar7")) (; ";")) (expression_statement "sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);" (assignment_expression "sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1])" (identifier "sVar5") (= "=") (call_expression "fread(pvVar6,1,sVar7,(FILE *)param_1[1])" (identifier "fread") (argument_list "(pvVar6,1,sVar7,(FILE *)param_1[1])" (( "(") (identifier "pvVar6") (, ",") (number_literal "1") (, ",") (identifier "sVar7") (, ",") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";")) (if_statement "if (sVar7 != sVar5) {\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }" (if "if") (parenthesized_expression "(sVar7 != sVar5)" (( "(") (binary_expression "sVar7 != sVar5" (identifier "sVar7") (!= "!=") (identifier "sVar5")) () ")")) (compound_statement "{\n          uVar9 = *param_1;\n          pcVar12 = "%s: failed to read archive index symbol table\n";\n          goto LAB_0013784f;\n        }" ({ "{") (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" (identifier "uVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar12 = "%s: failed to read archive index symbol table\n";" (assignment_expression "pcVar12 = "%s: failed to read archive index symbol table\n"" (identifier "pcVar12") (= "=") (string_literal ""%s: failed to read archive index symbol table\n"" (" """) (string_content "%s: failed to read archive index symbol table") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_0013784f;" (goto "goto") (statement_identifier "LAB_0013784f") (; ";")) (} "}"))) (goto_statement "goto LAB_00137891;" (goto "goto") (statement_identifier "LAB_00137891") (; ";")) (} "}"))) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" (identifier "free") (argument_list "(pvVar6)" (( "(") (identifier "pvVar6") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar9 = *param_1;" (assignment_expression "uVar9 = *param_1" (identifier "uVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar12 = "%s: failed to read archive index\n";" (assignment_expression "pcVar12 = "%s: failed to read archive index\n"" (identifier "pcVar12") (= "=") (string_literal ""%s: failed to read archive index\n"" (" """) (string_content "%s: failed to read archive index") (escape_sequence "\n") (" """))) (; ";")) (} "}")))) (labeled_statement "LAB_0013784f:\n  uVar10 = dcgettext(0,pcVar12,5);" (statement_identifier "LAB_0013784f") (: ":") (expression_statement "uVar10 = dcgettext(0,pcVar12,5);" (assignment_expression "uVar10 = dcgettext(0,pcVar12,5)" (identifier "uVar10") (= "=") (call_expression "dcgettext(0,pcVar12,5)" (identifier "dcgettext") (argument_list "(0,pcVar12,5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar12") (, ",") (number_literal "5") () ")")))) (; ";"))) (expression_statement "error(uVar10,uVar9);" (call_expression "error(uVar10,uVar9)" (identifier "error") (argument_list "(uVar10,uVar9)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar9") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

type_1
function_1(type_2 *arch,type_3 sizeof_ar_index,type_1 var_5)

{
  char cVar1;
  int var_7;
  type_4 var_4;
  size_t var_9;
  type_5 var_12;
  type_6 *var_14;
  size_t var_15;
  type_5 *var_16;
  type_6 *var_18;
  char *var_19;
  char *pcVar9;
  type_4 var_10;
  type_6 integer_buffer [8];
  
  cVar1 = (arch->arhdr).ar_fmag[0];
  (arch->arhdr).ar_fmag[0] = '\0';
  var_4 = var_1((arch->arhdr).ar_size,(char **)0x0,10);
  (arch->arhdr).ar_fmag[0] = cVar1;
  if ((long)var_4 < 0) {
    var_19 = arch->file_name;
    pcVar9 = (char *)var_2(0,"%s: invalid archive header size: %ld\n",5);
    var_3(pcVar9,var_19,var_4);
    return 0;
  }
  var_4 = var_4 + 1 & 0xfffffffffffffffe;
  arch->next_arhdr_offset = var_4 + 0x3c + arch->next_arhdr_offset;
  if (var_5 == 0) {
    var_7 = var_6((type_7 *)arch->file,var_4,1);
    if (var_7 != 0) {
      var_19 = arch->file_name;
      pcVar9 = "%s: failed to skip archive symbol table\n";
      goto LAB_0013784f;
    }
LAB_00137891:
    var_9 = var_8(&arch->arhdr,1,0x3c,(type_7 *)arch->file);
    if ((var_9 == 0x3c) || (var_9 == 0)) {
      return 1;
    }
    var_19 = arch->file_name;
    pcVar9 = "%s: failed to read archive header following archive index\n";
  }
  else {
    var_10 = (type_4)sizeof_ar_index;
    if (var_4 < var_10) {
      var_19 = arch->file_name;
      pcVar9 = "%s: the archive index is empty\n";
      goto LAB_0013784f;
    }
    var_9 = var_8(integer_buffer,1,var_10,(type_7 *)arch->file);
    if (var_10 == var_9) {
      var_4 = var_4 - var_10;
      var_12 = var_11(integer_buffer,sizeof_ar_index);
      arch->index_num = var_12;
      var_9 = var_10 * var_12;
      if ((var_4 < var_12) || (var_4 <= var_9 && var_9 - var_4 != 0)) {
        var_19 = arch->file_name;
        pcVar9 = (char *)var_2(0,
                                   "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
                                   ,5);
        var_3(pcVar9,var_19,var_12,(type_4)sizeof_ar_index,var_4);
        return 0;
      }
      var_14 = (type_6 *)var_13(var_9);
      var_19 = "Out of memory whilst trying to read archive symbol index\n";
      if (var_14 == (type_6 *)0x0) {
LAB_00137990:
        var_19 = (char *)var_2(0,var_19,5);
        var_3(var_19);
        return 0;
      }
      var_15 = var_8(var_14,var_10,var_12,(type_7 *)arch->file);
      var_9 = arch->index_num;
      if (var_9 == var_15) {
        var_15 = var_4 - var_10 * var_9;
        var_16 = (type_5 *)var_13(var_9 * 8);
        arch->index_array = var_16;
        if (var_16 == (type_5 *)0x0) {
          var_17(var_14);
          var_19 = "Out of memory whilst trying to convert the archive symbol index\n";
          goto LAB_00137990;
        }
        if (var_9 != 0) {
          var_4 = 0;
          var_18 = var_14;
          while( true ) {
            var_16 = var_16 + var_4;
            var_12 = var_11(var_18,sizeof_ar_index);
            var_4 = var_4 + 1;
            *var_16 = var_12;
            if (arch->index_num <= var_4) break;
            var_16 = arch->index_array;
            var_18 = var_18 + var_10;
          }
        }
        var_17(var_14);
        if (var_15 == 0) {
          var_19 = arch->file_name;
          pcVar9 = "%s: the archive has an index but no symbols\n";
          goto LAB_0013784f;
        }
        var_19 = (char *)var_13(var_15);
        arch->sym_table = var_19;
        if (var_19 == (char *)0x0) {
          var_19 = "Out of memory whilst trying to read archive index symbol table\n";
          goto LAB_00137990;
        }
        arch->sym_size = var_15;
        var_9 = var_8(var_19,1,var_15,(type_7 *)arch->file);
        if (var_15 != var_9) {
          var_19 = arch->file_name;
          pcVar9 = "%s: failed to read archive index symbol table\n";
          goto LAB_0013784f;
        }
        goto LAB_00137891;
      }
      var_17(var_14);
    }
    var_19 = arch->file_name;
    pcVar9 = "%s: failed to read archive index\n";
  }
LAB_0013784f:
  pcVar9 = (char *)var_2(0,pcVar9,5);
  var_3(pcVar9,var_19);
  return 0;
}


(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: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) 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: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (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))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (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) (identifier) (identifier)))) (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (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))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) (identifier) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (goto_statement label: (statement_identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal) (number_literal) (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (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: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier) (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (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) (identifier) (identifier) (identifier) (identifier)))) (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (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 (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)))) (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (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 (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (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: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (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: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (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: (string_literal (string_content) (escape_sequence)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier) (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content) (escape_sequence)))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (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)))))

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

{
  long lVar1;
  undefined1 uVar2;
  int iVar3;
  ulong uVar4;
  size_t sVar5;
  ulong __n;
  void *pvVar6;
  size_t sVar7;
  void *pvVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  void *pvVar11;
  char *pcVar12;
  ulong __n_00;
  undefined1 local_40 [16];
  
  uVar2 = *(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) = uVar2;
  if ((long)uVar4 < 0) {
    uVar9 = *param_1;
    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);
    error(uVar10,uVar9,uVar4);
    return 0;
  }
  uVar4 = uVar4 + 1 & 0xfffffffffffffffe;
  param_1[9] = uVar4 + 0x3c + param_1[9];
  if (param_3 == 0) {
    iVar3 = fseek((FILE *)param_1[1],uVar4,1);
    if (iVar3 != 0) {
      uVar9 = *param_1;
      pcVar12 = "%s: failed to skip archive symbol table\n";
      goto LAB_0013784f;
    }
LAB_00137891:
    sVar5 = fread(param_1 + 0xb,1,0x3c,(FILE *)param_1[1]);
    if ((sVar5 == 0x3c) || (sVar5 == 0)) {
      return 1;
    }
    uVar9 = *param_1;
    pcVar12 = "%s: failed to read archive header following archive index\n";
  }
  else {
    __n_00 = (ulong)param_2;
    if (uVar4 < __n_00) {
      uVar9 = *param_1;
      pcVar12 = "%s: the archive index is empty\n";
      goto LAB_0013784f;
    }
    sVar5 = fread(local_40,1,__n_00,(FILE *)param_1[1]);
    if (__n_00 == sVar5) {
      uVar4 = uVar4 - __n_00;
      __n = FUN_00137570(local_40,param_2);
      param_1[2] = __n;
      sVar5 = __n_00 * __n;
      if ((uVar4 < __n) || (uVar4 <= sVar5 && sVar5 - uVar4 != 0)) {
        uVar9 = *param_1;
        uVar10 = dcgettext(0,
                           "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
                           ,5);
        error(uVar10,uVar9,__n,param_2,uVar4);
        return 0;
      }
      pvVar6 = malloc(sVar5);
      pcVar12 = "Out of memory whilst trying to read archive symbol index\n";
      if (pvVar6 == (void *)0x0) {
LAB_00137990:
        uVar9 = dcgettext(0,pcVar12,5);
        error(uVar9);
        return 0;
      }
      sVar7 = fread(pvVar6,__n_00,__n,(FILE *)param_1[1]);
      sVar5 = param_1[2];
      if (sVar5 == sVar7) {
        sVar7 = uVar4 - __n_00 * sVar5;
        pvVar8 = malloc(sVar5 * 8);
        param_1[3] = pvVar8;
        if (pvVar8 == (void *)0x0) {
          free(pvVar6);
          pcVar12 = "Out of memory whilst trying to convert the archive symbol index\n";
          goto LAB_00137990;
        }
        if (sVar5 != 0) {
          uVar4 = 0;
          pvVar11 = pvVar6;
          while( true ) {
            lVar1 = uVar4 * 8;
            uVar9 = FUN_00137570(pvVar11,param_2);
            uVar4 = uVar4 + 1;
            *(undefined8 *)((long)pvVar8 + lVar1) = uVar9;
            if ((ulong)param_1[2] <= uVar4) break;
            pvVar8 = (void *)param_1[3];
            pvVar11 = (void *)((long)pvVar11 + __n_00);
          }
        }
        free(pvVar6);
        if (sVar7 == 0) {
          uVar9 = *param_1;
          pcVar12 = "%s: the archive has an index but no symbols\n";
          goto LAB_0013784f;
        }
        pvVar6 = malloc(sVar7);
        param_1[4] = pvVar6;
        if (pvVar6 == (void *)0x0) {
          pcVar12 = "Out of memory whilst trying to read archive index symbol table\n";
          goto LAB_00137990;
        }
        param_1[5] = sVar7;
        sVar5 = fread(pvVar6,1,sVar7,(FILE *)param_1[1]);
        if (sVar7 != sVar5) {
          uVar9 = *param_1;
          pcVar12 = "%s: failed to read archive index symbol table\n";
          goto LAB_0013784f;
        }
        goto LAB_00137891;
      }
      free(pvVar6);
    }
    uVar9 = *param_1;
    pcVar12 = "%s: failed to read archive index\n";
  }
LAB_0013784f:
  uVar10 = dcgettext(0,pcVar12,5);
  error(uVar10,uVar9);
  return 0;
}

