
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int __regparm3
demangle_template(work_stuff *work,char **mangled,string *tname,string *trawname,int is_type,
                 int remember)

{
  char **ppcVar1;
  byte *__s;
  char **ppcVar2;
  type_kind_t tk;
  int iVar3;
  int iVar4;
  size_t sVar5;
  size_t sVar6;
  char *pcVar7;
  int len;
  byte *pbVar8;
  byte *pbVar9;
  bool bVar10;
  bool bVar11;
  byte bVar12;
  int local_40;
  int r;
  string temp;
  string param;
  
  bVar12 = 0;
  pcVar7 = *mangled;
  *mangled = pcVar7 + 1;
  if (is_type == 0) {
    string_append(tname,"<");
    iVar3 = get_count(mangled,&r);
    if (iVar3 == 0) {
      return 0;
    }
    ppcVar2 = (char **)xmalloc(r << 2);
    work->tmpl_argvec = ppcVar2;
    work->ntmpl_args = r;
    if (r < 1) goto LAB_001d186e;
    ppcVar1 = ppcVar2 + r;
    do {
      *ppcVar2 = (char *)0x0;
      ppcVar2 = ppcVar2 + 1;
    } while (ppcVar1 != ppcVar2);
LAB_001d15dd:
    local_40 = 0;
LAB_001d15e5:
    iVar4 = 0;
    while( true ) {
      pcVar7 = *mangled;
      if (*pcVar7 == 'Z') break;
      if (*pcVar7 == 'z') {
        *mangled = pcVar7 + 1;
        iVar3 = demangle_template_template_parm(work,mangled,tname);
        if (iVar3 != 0) {
          sVar5 = consume_count(mangled);
          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {
            string_append(tname," ");
            string_appendn(tname,*mangled,sVar5);
            if (is_type == 0) {
              ppcVar2 = work->tmpl_argvec;
              pcVar7 = (char *)xmalloc(sVar5 + 1);
              ppcVar2[iVar4] = pcVar7;
              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);
              work->tmpl_argvec[iVar4][sVar5] = '\0';
            }
            *mangled = *mangled + sVar5;
          }
          goto LAB_001d1710;
        }
        goto LAB_001d175f;
      }
      tk = do_type(work,mangled,&temp);
      if (temp.b != (char *)0x0) {
        free(temp.b);
        temp.p = (char *)0x0;
        temp.e = (char *)0x0;
        temp.b = (char *)0x0;
      }
      if (tk == tk_none) goto LAB_001d175f;
      if (is_type == 0) {
        param.e = (char *)0x0;
        param.p = (char *)0x0;
        param.b = (char *)0x0;
        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);
        if (iVar3 == 0) {
          if (param.b != (char *)0x0) {
            free(param.b);
          }
          goto LAB_001d175f;
        }
        sVar5 = (int)param.p - (int)param.b;
        ppcVar2 = work->tmpl_argvec;
        pcVar7 = (char *)xmalloc(sVar5 + 1);
        ppcVar2[iVar4] = pcVar7;
        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);
        work->tmpl_argvec[iVar4][sVar5] = '\0';
        string_appends(tname,&param,(string *)param.p);
        if (param.b != (char *)0x0) {
          free(param.b);
        }
      }
      else {
        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);
        if (iVar3 == 0) goto LAB_001d175f;
      }
LAB_001d1710:
      iVar4 = iVar4 + 1;
      if (r <= iVar4) goto LAB_001d1761;
      string_append(tname,", ");
    }
    *mangled = pcVar7 + 1;
    iVar3 = do_type(work,mangled,&temp);
    if (iVar3 != 0) {
      string_appends(tname,&temp,(string *)temp.p);
      if (is_type == 0) {
        sVar5 = (int)temp.p - (int)temp.b;
        ppcVar2 = work->tmpl_argvec;
        pcVar7 = (char *)xmalloc(sVar5 + 1);
        ppcVar2[iVar4] = pcVar7;
        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);
        work->tmpl_argvec[iVar4][sVar5] = '\0';
      }
      if (temp.b != (char *)0x0) {
        free(temp.b);
        temp.p = (char *)0x0;
        temp.e = (char *)0x0;
        temp.b = (char *)0x0;
      }
      goto LAB_001d1710;
    }
    if (temp.b == (char *)0x0) {
LAB_001d175f:
      iVar3 = 0;
    }
    else {
      free(temp.b);
      temp.p = (char *)0x0;
      temp.e = (char *)0x0;
      temp.b = (char *)0x0;
    }
LAB_001d1761:
    if (local_40 != 0) goto LAB_001d1560;
  }
  else {
    if (pcVar7[1] != 'z') {
      iVar3 = consume_count(mangled);
      if (iVar3 < 1) {
        return 0;
      }
      __s = (byte *)*mangled;
      r = iVar3;
      sVar5 = strlen((char *)__s);
      if ((int)sVar5 < iVar3) {
        return 0;
      }
      bVar10 = false;
      bVar11 = (work->options & 4) == 0;
      if (bVar11) {
LAB_001d1a20:
        string_appendn(tname,(char *)__s,iVar3);
        if (trawname != (string *)0x0) {
          if (r == 0) goto LAB_001d1840;
          string_appendn(trawname,*mangled,r);
        }
        *mangled = *mangled + r;
        goto LAB_001d1840;
      }
      iVar4 = 8;
      pbVar8 = __s;
      pbVar9 = (byte *)"JArray1Z";
      do {
        if (iVar4 == 0) break;
        iVar4 = iVar4 + -1;
        bVar10 = *pbVar8 < *pbVar9;
        bVar11 = *pbVar8 == *pbVar9;
        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;
        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;
      } while (bVar11);
      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;
      if (trawname == (string *)0x0) {
        *mangled = (char *)(__s + iVar3);
      }
      else {
        string_appendn(trawname,(char *)__s,iVar3);
        *mangled = *mangled + r;
      }
      iVar3 = get_count(mangled,&r);
      if (iVar3 == 0) {
        return 0;
      }
      local_40 = is_type;
      if (0 < r) goto LAB_001d15e5;
      iVar3 = 0;
LAB_001d1560:
      string_append(tname,"[]");
      goto LAB_001d178d;
    }
    *mangled = pcVar7 + 2;
    if (pcVar7[2] == '\0') {
      return 0;
    }
    *mangled = pcVar7 + 3;
    iVar3 = consume_count_with_underscores(mangled);
    if (iVar3 == -1) {
      return 0;
    }
    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)) {
      return 0;
    }
    iVar4 = consume_count_with_underscores(mangled);
    if (iVar4 == -1) {
      return 0;
    }
    if (work->tmpl_argvec == (char **)0x0) {
      string_append_template_idx(tname,iVar3);
      if (trawname != (string *)0x0) {
        string_append_template_idx(trawname,iVar3);
      }
    }
    else {
      pcVar7 = work->tmpl_argvec[iVar3];
      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&
          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&
         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {
        string_append(trawname,pcVar7);
      }
    }
LAB_001d1840:
    string_append(tname,"<");
    iVar3 = get_count(mangled,&r);
    if (iVar3 == 0) {
      return 0;
    }
    if (0 < r) goto LAB_001d15dd;
LAB_001d186e:
    iVar3 = 0;
  }
  if (tname->p[-1] == '>') {
    string_append(tname," ");
  }
  string_append(tname,">");
LAB_001d178d:
  if ((is_type & remember) != 0) {
    iVar4 = register_Btype(work);
    pcVar7 = tname->b;
    len = (int)tname->p - (int)pcVar7;
    if (pcVar7 == tname->p) {
      len = 0;
    }
    remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4);
    return iVar3;
  }
  return iVar3;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Removing unreachable block (ram,0x001d1703) */
/* WARNING: Removing unreachable block (ram,0x001d1b19) */

int __regparm3
FUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)

{
  undefined4 *puVar1;
  byte *__s;
  char *pcVar2;
  int iVar3;
  undefined4 *puVar4;
  undefined4 uVar5;
  int iVar6;
  int iVar7;
  size_t sVar8;
  size_t sVar9;
  byte *pbVar10;
  byte *pbVar11;
  bool bVar12;
  bool bVar13;
  byte bVar14;
  uint local_40;
  int local_38;
  void *local_34;
  int local_30;
  
  bVar14 = 0;
  iVar6 = *param_2;
  *param_2 = iVar6 + 1;
  if (param_5 == 0) {
    FUN_001ce240();
    iVar6 = FUN_001cd950();
    if (iVar6 == 0) {
      return 0;
    }
    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);
    *(undefined4 **)(param_1 + 0x40) = puVar4;
    *(int *)(param_1 + 0x44) = local_38;
    if (local_38 < 1) goto LAB_001d186e;
    puVar1 = puVar4 + local_38;
    do {
      *puVar4 = 0;
      puVar4 = puVar4 + 1;
    } while (puVar1 != puVar4);
LAB_001d15dd:
    local_40 = 0;
LAB_001d15e5:
    iVar7 = 0;
    while( true ) {
      pcVar2 = (char *)*param_2;
      if (*pcVar2 == 'Z') break;
      if (*pcVar2 == 'z') {
        *param_2 = (int)(pcVar2 + 1);
        iVar6 = FUN_001d12b0();
        if (iVar6 != 0) {
          sVar8 = FUN_001cddf0();
          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {
            FUN_001ce240();
            FUN_001ce160();
            if (param_5 == 0) {
              iVar3 = *(int *)(param_1 + 0x40);
              uVar5 = FUN_001e4cd0(sVar8 + 1);
              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;
              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);
              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;
            }
            *param_2 = *param_2 + sVar8;
          }
          goto LAB_001d1710;
        }
        goto LAB_001d175f;
      }
      iVar6 = FUN_001cf7c0();
      if (local_34 != (void *)0x0) {
        free(local_34);
        local_30 = 0;
        local_34 = (void *)0x0;
      }
      if (iVar6 == 0) goto LAB_001d175f;
      if (param_5 == 0) {
        iVar6 = FUN_001cf0b0(iVar6);
        if (iVar6 == 0) goto LAB_001d175f;
        iVar3 = *(int *)(param_1 + 0x40);
        uVar5 = FUN_001e4cd0(1);
        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;
        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);
        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;
        FUN_001ce390();
      }
      else {
        iVar6 = FUN_001cf0b0(iVar6);
        if (iVar6 == 0) goto LAB_001d175f;
      }
LAB_001d1710:
      iVar7 = iVar7 + 1;
      if (local_38 <= iVar7) goto LAB_001d1761;
      FUN_001ce240();
    }
    *param_2 = (int)(pcVar2 + 1);
    iVar6 = FUN_001cf7c0();
    if (iVar6 != 0) {
      FUN_001ce390();
      if (param_5 == 0) {
        sVar8 = local_30 - (int)local_34;
        iVar3 = *(int *)(param_1 + 0x40);
        uVar5 = FUN_001e4cd0(sVar8 + 1);
        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;
        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);
        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;
      }
      if (local_34 != (void *)0x0) {
        free(local_34);
        local_30 = 0;
        local_34 = (void *)0x0;
      }
      goto LAB_001d1710;
    }
    if (local_34 == (void *)0x0) {
LAB_001d175f:
      iVar6 = 0;
    }
    else {
      free(local_34);
    }
LAB_001d1761:
    if (local_40 != 0) goto LAB_001d1560;
  }
  else {
    if (*(char *)(iVar6 + 1) != 'z') {
      local_38 = FUN_001cddf0();
      if (local_38 < 1) {
        return 0;
      }
      __s = (byte *)*param_2;
      sVar8 = strlen((char *)__s);
      if ((int)sVar8 < local_38) {
        return 0;
      }
      bVar12 = false;
      bVar13 = (*param_1 & 4) == 0;
      if (bVar13) {
LAB_001d1a20:
        FUN_001ce160();
        if (param_4 != 0) {
          if (local_38 == 0) goto LAB_001d1840;
          FUN_001ce160();
        }
        *param_2 = *param_2 + local_38;
        goto LAB_001d1840;
      }
      iVar6 = 8;
      pbVar10 = __s;
      pbVar11 = (byte *)"JArray1Z";
      do {
        if (iVar6 == 0) break;
        iVar6 = iVar6 + -1;
        bVar12 = *pbVar10 < *pbVar11;
        bVar13 = *pbVar10 == *pbVar11;
        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;
        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;
      } while (bVar13);
      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;
      if (param_4 == 0) {
        *param_2 = (int)(__s + local_38);
      }
      else {
        FUN_001ce160();
        *param_2 = *param_2 + local_38;
      }
      iVar6 = FUN_001cd950();
      if (iVar6 == 0) {
        return 0;
      }
      local_40 = param_5;
      if (0 < local_38) goto LAB_001d15e5;
      iVar6 = 0;
LAB_001d1560:
      FUN_001ce240();
      goto LAB_001d178d;
    }
    *param_2 = iVar6 + 2;
    if (*(char *)(iVar6 + 2) == '\0') {
      return 0;
    }
    *param_2 = iVar6 + 3;
    iVar6 = FUN_001cdea0();
    if (iVar6 == -1) {
      return 0;
    }
    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {
      return 0;
    }
    iVar7 = FUN_001cdea0();
    if (iVar7 == -1) {
      return 0;
    }
    if (*(int *)(param_1 + 0x40) == 0) {
      FUN_001ce290();
      if (param_4 != 0) {
        FUN_001ce290();
      }
    }
    else {
      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);
      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&
         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&
          (*pcVar2 != '\0')))) {
        FUN_001ce240();
      }
    }
LAB_001d1840:
    FUN_001ce240();
    iVar6 = FUN_001cd950();
    if (iVar6 == 0) {
      return 0;
    }
    if (0 < local_38) goto LAB_001d15dd;
LAB_001d186e:
    iVar6 = 0;
  }
  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {
    FUN_001ce240();
  }
  FUN_001ce240();
LAB_001d178d:
  if ((param_5 & param_6) != 0) {
    uVar5 = FUN_001cdb90();
    FUN_001ce070(uVar5);
    return iVar6;
  }
  return iVar6;
}


PUSH EBP
MOV EBP,EDX
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00035840
ADD EBX,0x1bdb95
SUB ESP,0x4c
MOV dword ptr [ESP + 0x4],EAX
MOV EAX,dword ptr [EDX]
MOV ESI,dword ptr [ESP + 0x64]
MOV dword ptr [ESP + 0x8],ECX
LEA EDX,[EAX + 0x1]
MOV dword ptr [EBP],EDX
TEST ESI,ESI
JZ 0x001d1578
CMP byte ptr [EAX + 0x1],0x7a
JNZ 0x001d14b8
LEA EDX,[EAX + 0x2]
MOV dword ptr [EBP],EDX
CMP byte ptr [EAX + 0x2],0x0
JNZ 0x001d17e0
XOR ESI,ESI
ADD ESP,0x4c
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,EBP
CALL 0x001cddf0
TEST EAX,EAX
MOV dword ptr [ESP + 0x24],EAX
MOV dword ptr [ESP + 0xc],EAX
JLE 0x001d14a6
MOV ESI,dword ptr [EBP]
SUB ESP,0xc
MOV dword ptr [ESP + 0x1c],ESI
PUSH ESI
CALL 0x000295f0
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0xc]
CMP EDX,EAX
JG 0x001d14a6
MOV EAX,dword ptr [ESP + 0x4]
TEST byte ptr [EAX],0x4
JZ 0x001d1a20
MOV ECX,0x8
LEA EDI,[EBX + 0xfff11ba6]
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
MOVSX ESI,AL
TEST ESI,ESI
JNZ 0x001d1a20
MOV EAX,dword ptr [ESP + 0x60]
TEST EAX,EAX
JZ 0x001d1aa9
MOV ECX,EDX
MOV EAX,dword ptr [ESP + 0x60]
MOV EDX,dword ptr [ESP + 0x10]
CALL 0x001ce160
MOV EAX,dword ptr [ESP + 0x24]
ADD dword ptr [EBP],EAX
LEA EDX,[ESP + 0x24]
MOV EAX,EBP
CALL 0x001cd950
TEST EAX,EAX
JZ 0x001d14a6
MOV EAX,dword ptr [ESP + 0x64]
MOV dword ptr [ESP + 0x1c],EAX
MOV EAX,dword ptr [ESP + 0x24]
TEST EAX,EAX
JG 0x001d15e5
LEA ESI,[ESI]
MOV EAX,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfff11e7a]
CALL 0x001ce240
JMP 0x001d178d
MOV EAX,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfff11b9c]
CALL 0x001ce240
LEA EDX,[ESP + 0x24]
MOV EAX,EBP
CALL 0x001cd950
TEST EAX,EAX
JZ 0x001d14a6
SUB ESP,0xc
MOV EAX,dword ptr [ESP + 0x30]
SHL EAX,0x2
PUSH EAX
CALL 0x001e4cd0
MOV EDI,dword ptr [ESP + 0x14]
MOV EDX,dword ptr [ESP + 0x34]
ADD ESP,0x10
MOV dword ptr [EDI + 0x40],EAX
MOV dword ptr [EDI + 0x44],EDX
TEST EDX,EDX
JLE 0x001d186e
LEA EDX,[EAX + EDX*0x4]
LEA ESI,[ESI]
LEA ESI,[ESI]
MOV dword ptr [EAX],0x0
ADD EAX,0x4
CMP EDX,EAX
JNZ 0x001d15d0
MOV dword ptr [ESP + 0x1c],0x0
LEA EAX,[ESP + 0x28]
XOR EDI,EDI
MOV dword ptr [ESP + 0xc],EAX
LEA EAX,[ESP + 0x34]
MOV dword ptr [ESP + 0x10],EAX
JMP 0x001d1728
MOV ECX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [ESP + 0x4]
MOV EDX,EBP
CALL 0x001cf7c0
MOV ESI,EAX
MOV EAX,dword ptr [ESP + 0x28]
TEST EAX,EAX
JZ 0x001d163d
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
MOV dword ptr [ESP + 0x3c],0x0
MOV dword ptr [ESP + 0x40],0x0
MOV dword ptr [ESP + 0x38],0x0
ADD ESP,0x10
TEST ESI,ESI
JZ 0x001d175f
MOV ECX,dword ptr [ESP + 0x64]
TEST ECX,ECX
JNZ 0x001d18e0
MOV dword ptr [ESP + 0x3c],0x0
SUB ESP,0xc
MOV EDX,EBP
MOV dword ptr [ESP + 0x44],0x0
MOV dword ptr [ESP + 0x40],0x0
PUSH ESI
MOV ECX,dword ptr [ESP + 0x20]
MOV EAX,dword ptr [ESP + 0x14]
CALL 0x001cf0b0
ADD ESP,0x10
MOV ESI,EAX
TEST EAX,EAX
JZ 0x001d1b0d
MOV EAX,dword ptr [ESP + 0x4]
MOV EDX,dword ptr [ESP + 0x38]
SUB ESP,0xc
SUB EDX,dword ptr [ESP + 0x40]
MOV EAX,dword ptr [EAX + 0x40]
LEA ECX,[EAX + EDI*0x4]
LEA EAX,[EDX + 0x1]
MOV dword ptr [ESP + 0x24],ECX
MOV dword ptr [ESP + 0x20],EDX
PUSH EAX
CALL 0x001e4cd0
MOV ECX,dword ptr [ESP + 0x28]
MOV dword ptr [ECX],EAX
MOV EAX,dword ptr [ESP + 0x14]
ADD ESP,0xc
MOV EDX,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [EAX + 0x40]
MOV EAX,dword ptr [EAX + EDI*0x4]
PUSH EDX
MOV dword ptr [ESP + 0x1c],EDX
PUSH dword ptr [ESP + 0x3c]
PUSH EAX
CALL 0x000295c0
MOV EAX,dword ptr [ESP + 0x14]
MOV EDX,dword ptr [ESP + 0x24]
MOV EAX,dword ptr [EAX + 0x40]
MOV EAX,dword ptr [EAX + EDI*0x4]
MOV byte ptr [EAX + EDX*0x1],0x0
MOV EAX,dword ptr [ESP + 0x18]
MOV ECX,dword ptr [ESP + 0x48]
MOV EDX,dword ptr [ESP + 0x20]
CALL 0x001ce390
MOV EAX,dword ptr [ESP + 0x44]
ADD ESP,0x10
TEST EAX,EAX
JZ 0x001d1710
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
ADD ESP,0x10
NOP
ADD EDI,0x1
CMP dword ptr [ESP + 0x24],EDI
JLE 0x001d1761
MOV EAX,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfff0ff27]
CALL 0x001ce240
MOV EAX,dword ptr [EBP]
MOVZX EDX,byte ptr [EAX]
CMP DL,0x5a
JZ 0x001d1908
CMP DL,0x7a
JNZ 0x001d1600
ADD EAX,0x1
MOV ECX,dword ptr [ESP + 0x8]
MOV EDX,EBP
MOV dword ptr [EBP],EAX
MOV EAX,dword ptr [ESP + 0x4]
CALL 0x001d12b0
MOV ESI,EAX
TEST EAX,EAX
JNZ 0x001d1878
XOR ESI,ESI
MOV EDX,dword ptr [ESP + 0x1c]
TEST EDX,EDX
JNZ 0x001d1560
MOV EAX,dword ptr [ESP + 0x8]
MOV EAX,dword ptr [EAX + 0x4]
CMP byte ptr [EAX + -0x1],0x3e
JZ 0x001d1a5b
MOV EAX,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfff11f82]
CALL 0x001ce240
MOV EAX,dword ptr [ESP + 0x68]
TEST dword ptr [ESP + 0x64],EAX
JZ 0x001d14a8
MOV EBP,dword ptr [ESP + 0x4]
MOV EAX,EBP
CALL 0x001cdb90
MOV EDI,EAX
MOV EAX,dword ptr [ESP + 0x8]
MOV EBX,dword ptr [EAX + 0x4]
MOV EDX,dword ptr [EAX]
MOV EAX,0x0
MOV ECX,EBX
SUB ECX,EDX
CMP EDX,EBX
CMOVZ ECX,EAX
SUB ESP,0xc
MOV EAX,EBP
PUSH EDI
ADD EAX,0xc
CALL 0x001ce070
ADD ESP,0x10
MOV EAX,ESI
ADD ESP,0x4c
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD EAX,0x3
MOV dword ptr [EBP],EAX
MOV EAX,EBP
CALL 0x001cdea0
MOV ESI,EAX
CMP EAX,-0x1
JZ 0x001d14a6
MOV EAX,dword ptr [ESP + 0x4]
MOV ECX,dword ptr [EAX + 0x40]
TEST ECX,ECX
JZ 0x001d180c
CMP dword ptr [EAX + 0x44],ESI
JLE 0x001d14a6
MOV EAX,EBP
CALL 0x001cdea0
CMP EAX,-0x1
JZ 0x001d14a6
MOV EDI,dword ptr [ESP + 0x4]
MOV EAX,dword ptr [EDI + 0x40]
TEST EAX,EAX
JZ 0x001d1b2a
MOV EDX,dword ptr [EAX + ESI*0x4]
TEST EDX,EDX
JZ 0x001d1840
CMP byte ptr [EDX],0x0
JNZ 0x001d1a6f
LEA ESI,[ESI]
NOP
MOV EAX,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfff11b9c]
CALL 0x001ce240
LEA EDX,[ESP + 0x24]
MOV EAX,EBP
CALL 0x001cd950
TEST EAX,EAX
JZ 0x001d14a6
MOV EAX,dword ptr [ESP + 0x24]
TEST EAX,EAX
JG 0x001d15dd
XOR ESI,ESI
JMP 0x001d176d
MOV EAX,EBP
CALL 0x001cddf0
MOV dword ptr [ESP + 0x14],EAX
TEST EAX,EAX
JLE 0x001d1710
SUB ESP,0xc
PUSH dword ptr [EBP]
CALL 0x000295f0
ADD ESP,0x10
CMP EAX,dword ptr [ESP + 0x14]
JL 0x001d1710
MOV EAX,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfff0918f]
CALL 0x001ce240
MOV EAX,dword ptr [ESP + 0x8]
MOV ECX,dword ptr [ESP + 0x14]
MOV EDX,dword ptr [EBP]
CALL 0x001ce160
MOV EAX,dword ptr [ESP + 0x64]
TEST EAX,EAX
JZ 0x001d1ab5
MOV EAX,dword ptr [ESP + 0x14]
ADD dword ptr [EBP],EAX
JMP 0x001d1710
SUB ESP,0xc
MOV EDX,EBP
PUSH ESI
MOV ECX,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [ESP + 0x14]
CALL 0x001cf0b0
ADD ESP,0x10
MOV ESI,EAX
TEST EAX,EAX
JNZ 0x001d1710
JMP 0x001d175f
ADD EAX,0x1
MOV ECX,dword ptr [ESP + 0xc]
MOV EDX,EBP
MOV dword ptr [EBP],EAX
MOV EAX,dword ptr [ESP + 0x4]
CALL 0x001cf7c0
MOV ESI,EAX
TEST EAX,EAX
JNZ 0x001d1960
MOV EAX,dword ptr [ESP + 0x28]
TEST EAX,EAX
JZ 0x001d175f
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
MOV dword ptr [ESP + 0x3c],0x0
MOV dword ptr [ESP + 0x40],0x0
MOV dword ptr [ESP + 0x38],0x0
ADD ESP,0x10
JMP 0x001d1761
MOV EAX,dword ptr [ESP + 0x8]
MOV ECX,dword ptr [ESP + 0x2c]
MOV EDX,dword ptr [ESP + 0xc]
CALL 0x001ce390
MOV EAX,dword ptr [ESP + 0x64]
TEST EAX,EAX
JZ 0x001d19b0
MOV EAX,dword ptr [ESP + 0x28]
TEST EAX,EAX
JZ 0x001d1710
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
MOV dword ptr [ESP + 0x3c],0x0
MOV dword ptr [ESP + 0x40],0x0
MOV dword ptr [ESP + 0x38],0x0
ADD ESP,0x10
JMP 0x001d1710
MOV EAX,dword ptr [ESP + 0x4]
MOV EDX,dword ptr [ESP + 0x2c]
SUB ESP,0xc
SUB EDX,dword ptr [ESP + 0x34]
MOV EAX,dword ptr [EAX + 0x40]
LEA ECX,[EAX + EDI*0x4]
LEA EAX,[EDX + 0x1]
MOV dword ptr [ESP + 0x24],ECX
MOV dword ptr [ESP + 0x20],EDX
PUSH EAX
CALL 0x001e4cd0
MOV ECX,dword ptr [ESP + 0x28]
MOV dword ptr [ECX],EAX
MOV EAX,dword ptr [ESP + 0x14]
ADD ESP,0xc
MOV EDX,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [EAX + 0x40]
MOV EAX,dword ptr [EAX + EDI*0x4]
PUSH EDX
MOV dword ptr [ESP + 0x1c],EDX
PUSH dword ptr [ESP + 0x30]
PUSH EAX
CALL 0x000295c0
MOV EAX,dword ptr [ESP + 0x14]
MOV EDX,dword ptr [ESP + 0x24]
ADD ESP,0x10
MOV EAX,dword ptr [EAX + 0x40]
MOV EAX,dword ptr [EAX + EDI*0x4]
MOV byte ptr [EAX + EDX*0x1],0x0
JMP 0x001d1979
MOV ECX,EDX
MOV EAX,dword ptr [ESP + 0x8]
MOV EDX,dword ptr [ESP + 0x10]
CALL 0x001ce160
MOV EAX,dword ptr [ESP + 0x60]
TEST EAX,EAX
JZ 0x001d1a4f
MOV ECX,dword ptr [ESP + 0x24]
MOV EDX,dword ptr [EBP]
TEST ECX,ECX
JZ 0x001d1840
MOV EAX,dword ptr [ESP + 0x60]
CALL 0x001ce160
MOV EAX,dword ptr [ESP + 0x24]
ADD dword ptr [EBP],EAX
JMP 0x001d1840
MOV EAX,dword ptr [ESP + 0x8]
LEA EDX,[EBX + 0xfff0918f]
CALL 0x001ce240
JMP 0x001d177e
MOV EAX,dword ptr [ESP + 0x8]
CALL 0x001ce240
MOV EDX,dword ptr [ESP + 0x60]
TEST EDX,EDX
JZ 0x001d1840
MOV EAX,dword ptr [EDI + 0x40]
MOV EDX,dword ptr [EAX + ESI*0x4]
TEST EDX,EDX
JZ 0x001d1840
CMP byte ptr [EDX],0x0
JZ 0x001d1840
MOV EAX,dword ptr [ESP + 0x60]
CALL 0x001ce240
JMP 0x001d1840
ADD EDX,dword ptr [ESP + 0x10]
MOV dword ptr [EBP],EDX
JMP 0x001d1532
MOV EAX,dword ptr [ESP + 0x4]
SUB ESP,0xc
MOV EAX,dword ptr [EAX + 0x40]
LEA EDX,[EAX + EDI*0x4]
MOV dword ptr [ESP + 0x24],EDX
MOV ECX,dword ptr [ESP + 0x20]
LEA EAX,[ECX + 0x1]
PUSH EAX
CALL 0x001e4cd0
MOV EDX,dword ptr [ESP + 0x28]
MOV dword ptr [EDX],EAX
MOV EAX,dword ptr [ESP + 0x14]
ADD ESP,0xc
MOV EAX,dword ptr [EAX + 0x40]
MOV EAX,dword ptr [EAX + EDI*0x4]
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [EBP]
PUSH EAX
CALL 0x000295c0
MOV EAX,dword ptr [ESP + 0x14]
MOV ECX,dword ptr [ESP + 0x24]
ADD ESP,0x10
MOV EAX,dword ptr [EAX + 0x40]
MOV EAX,dword ptr [EAX + EDI*0x4]
MOV byte ptr [EAX + ECX*0x1],0x0
JMP 0x001d18ce
MOV EAX,dword ptr [ESP + 0x34]
TEST EAX,EAX
JZ 0x001d175f
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
ADD ESP,0x10
JMP 0x001d175f
MOV EAX,dword ptr [ESP + 0x8]
MOV EDX,ESI
CALL 0x001ce290
MOV EAX,dword ptr [ESP + 0x60]
TEST EAX,EAX
JZ 0x001d1840
MOV EAX,dword ptr [ESP + 0x60]
MOV EDX,ESI
CALL 0x001ce290
JMP 0x001d1840
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Removing unreachable block (ram,0x001d1703) */\n/* WARNING: Removing unreachable block (ram,0x001d1b19) */\n\nint __regparm3\nFUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)\n\n{\n  undefined4 *puVar1;\n  byte *__s;\n  char *pcVar2;\n  int iVar3;\n  undefined4 *puVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  size_t sVar8;\n  size_t sVar9;\n  byte *pbVar10;\n  byte *pbVar11;\n  bool bVar12;\n  bool bVar13;\n  byte bVar14;\n  uint local_40;\n  int local_38;\n  void *local_34;\n  int local_30;\n  \n  bVar14 = 0;\n  iVar6 = *param_2;\n  *param_2 = iVar6 + 1;\n  if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }\n  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }\n  FUN_001ce240();\nLAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }\n  return iVar6;\n}\n\n" comment comment comment (function_definition "int __regparm3\nFUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)\n\n{\n  undefined4 *puVar1;\n  byte *__s;\n  char *pcVar2;\n  int iVar3;\n  undefined4 *puVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  size_t sVar8;\n  size_t sVar9;\n  byte *pbVar10;\n  byte *pbVar11;\n  bool bVar12;\n  bool bVar13;\n  byte bVar14;\n  uint local_40;\n  int local_38;\n  void *local_34;\n  int local_30;\n  \n  bVar14 = 0;\n  iVar6 = *param_2;\n  *param_2 = iVar6 + 1;\n  if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }\n  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }\n  FUN_001ce240();\nLAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }\n  return iVar6;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)" identifier (parameter_list "(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint param_5" type_identifier identifier) , (parameter_declaration "uint param_6" type_identifier identifier) ))) (compound_statement "{\n  undefined4 *puVar1;\n  byte *__s;\n  char *pcVar2;\n  int iVar3;\n  undefined4 *puVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  size_t sVar8;\n  size_t sVar9;\n  byte *pbVar10;\n  byte *pbVar11;\n  bool bVar12;\n  bool bVar13;\n  byte bVar14;\n  uint local_40;\n  int local_38;\n  void *local_34;\n  int local_30;\n  \n  bVar14 = 0;\n  iVar6 = *param_2;\n  *param_2 = iVar6 + 1;\n  if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }\n  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }\n  FUN_001ce240();\nLAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }\n  return iVar6;\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "byte *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "size_t sVar8;" primitive_type identifier ;) (declaration "size_t sVar9;" primitive_type identifier ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "byte *pbVar11;" type_identifier (pointer_declarator "*pbVar11" * identifier) ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "bool bVar13;" primitive_type identifier ;) (declaration "byte bVar14;" type_identifier identifier ;) (declaration "uint local_40;" type_identifier identifier ;) (declaration "int local_38;" primitive_type identifier ;) (declaration "void *local_34;" primitive_type (pointer_declarator "*local_34" * identifier) ;) (declaration "int local_30;" primitive_type identifier ;) (expression_statement "bVar14 = 0;" (assignment_expression "bVar14 = 0" identifier = number_literal) ;) (expression_statement "iVar6 = *param_2;" (assignment_expression "iVar6 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "*param_2 = iVar6 + 1;" (assignment_expression "*param_2 = iVar6 + 1" (pointer_expression "*param_2" * identifier) = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }" { (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" identifier = (call_expression "FUN_001cd950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);" (assignment_expression "puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2)" identifier = (cast_expression "(undefined4 *)FUN_001e4cd0(local_38 << 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001e4cd0(local_38 << 2)" identifier (argument_list "(local_38 << 2)" ( (binary_expression "local_38 << 2" identifier << number_literal) ))))) ;) (expression_statement "*(undefined4 **)(param_1 + 0x40) = puVar4;" (assignment_expression "*(undefined4 **)(param_1 + 0x40) = puVar4" (pointer_expression "*(undefined4 **)(param_1 + 0x40)" * (cast_expression "(undefined4 **)(param_1 + 0x40)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x44) = local_38;" (assignment_expression "*(int *)(param_1 + 0x44) = local_38" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_38 < 1) goto LAB_001d186e;" if (parenthesized_expression "(local_38 < 1)" ( (binary_expression "local_38 < 1" identifier < number_literal) )) (goto_statement "goto LAB_001d186e;" goto statement_identifier ;)) (expression_statement "puVar1 = puVar4 + local_38;" (assignment_expression "puVar1 = puVar4 + local_38" identifier = (binary_expression "puVar4 + local_38" identifier + identifier)) ;) (do_statement "do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);" do (compound_statement "{\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    }" { (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar1 != puVar4)" ( (binary_expression "puVar1 != puVar4" identifier != identifier) )) ;) (labeled_statement "LAB_001d15dd:\n    local_40 = 0;" statement_identifier : (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_001d15e5:\n    iVar7 = 0;" statement_identifier : (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;)) (while_statement "while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }" { (expression_statement "pcVar2 = (char *)*param_2;" (assignment_expression "pcVar2 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (*pcVar2 == 'Z') break;" if (parenthesized_expression "(*pcVar2 == 'Z')" ( (binary_expression "*pcVar2 == 'Z'" (pointer_expression "*pcVar2" * identifier) == (char_literal "'Z'" ' character ')) )) (break_statement "break;" break ;)) (if_statement "if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }" if (parenthesized_expression "(*pcVar2 == 'z')" ( (binary_expression "*pcVar2 == 'z'" (pointer_expression "*pcVar2" * identifier) == (char_literal "'z'" ' character ')) )) (compound_statement "{\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }" { (expression_statement "*param_2 = (int)(pcVar2 + 1);" (assignment_expression "*param_2 = (int)(pcVar2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(pcVar2 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pcVar2 + 1)" ( (binary_expression "pcVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "iVar6 = FUN_001d12b0();" (assignment_expression "iVar6 = FUN_001d12b0()" identifier = (call_expression "FUN_001d12b0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }" { (expression_statement "sVar8 = FUN_001cddf0();" (assignment_expression "sVar8 = FUN_001cddf0()" identifier = (call_expression "FUN_001cddf0()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }" if (parenthesized_expression "((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9))" ( (binary_expression "(0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)" (parenthesized_expression "(0 < (int)sVar8)" ( (binary_expression "0 < (int)sVar8" number_literal < (cast_expression "(int)sVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)" ( (comma_expression "sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9" (assignment_expression "sVar9 = strlen((char *)*param_2)" identifier = (call_expression "strlen((char *)*param_2)" identifier (argument_list "((char *)*param_2)" ( (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) )))) , (binary_expression "(int)sVar8 <= (int)sVar9" (cast_expression "(int)sVar8" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)sVar9" ( (type_descriptor "int" primitive_type) ) identifier))) ))) )) (compound_statement "{\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }" { (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }" { (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" identifier = (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = FUN_001e4cd0(sVar8 + 1);" (assignment_expression "uVar5 = FUN_001e4cd0(sVar8 + 1)" identifier = (call_expression "FUN_001e4cd0(sVar8 + 1)" identifier (argument_list "(sVar8 + 1)" ( (binary_expression "sVar8 + 1" identifier + number_literal) )))) ;) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" * (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + iVar7 * 4)" ( (binary_expression "iVar3 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8)" identifier (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8)" ( (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) , (cast_expression "(void *)*param_2" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) , identifier ))) ;) (expression_statement "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;" (assignment_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0" (pointer_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" * (cast_expression "(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) + identifier) )))) = number_literal) ;) })) (expression_statement "*param_2 = *param_2 + sVar8;" (assignment_expression "*param_2 = *param_2 + sVar8" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + sVar8" (pointer_expression "*param_2" * identifier) + identifier)) ;) })) (goto_statement "goto LAB_001d1710;" goto statement_identifier ;) })) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;) })) (expression_statement "iVar6 = FUN_001cf7c0();" (assignment_expression "iVar6 = FUN_001cf7c0()" identifier = (call_expression "FUN_001cf7c0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" if (parenthesized_expression "(local_34 != (void *)0x0)" ( (binary_expression "local_34 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" { (expression_statement "free(local_34);" (call_expression "free(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_34 = (void *)0x0;" (assignment_expression "local_34 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;)) (if_statement "if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }" { (expression_statement "iVar6 = FUN_001cf0b0(iVar6);" (assignment_expression "iVar6 = FUN_001cf0b0(iVar6)" identifier = (call_expression "FUN_001cf0b0(iVar6)" identifier (argument_list "(iVar6)" ( identifier )))) ;) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;)) (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" identifier = (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = FUN_001e4cd0(1);" (assignment_expression "uVar5 = FUN_001e4cd0(1)" identifier = (call_expression "FUN_001e4cd0(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" * (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + iVar7 * 4)" ( (binary_expression "iVar3 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0)" identifier (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0)" ( (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) , (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , number_literal ))) ;) (expression_statement "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;" (assignment_expression "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0" (pointer_expression "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (pointer_expression "*(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) = number_literal) ;) (expression_statement "FUN_001ce390();" (call_expression "FUN_001ce390()" identifier (argument_list "()" ( ))) ;) }) (else_clause "else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" else (compound_statement "{\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" { (expression_statement "iVar6 = FUN_001cf0b0(iVar6);" (assignment_expression "iVar6 = FUN_001cf0b0(iVar6)" identifier = (call_expression "FUN_001cf0b0(iVar6)" identifier (argument_list "(iVar6)" ( identifier )))) ;) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;)) }))) (labeled_statement "LAB_001d1710:\n      iVar7 = iVar7 + 1;" statement_identifier : (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;)) (if_statement "if (local_38 <= iVar7) goto LAB_001d1761;" if (parenthesized_expression "(local_38 <= iVar7)" ( (binary_expression "local_38 <= iVar7" identifier <= identifier) )) (goto_statement "goto LAB_001d1761;" goto statement_identifier ;)) (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*param_2 = (int)(pcVar2 + 1);" (assignment_expression "*param_2 = (int)(pcVar2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(pcVar2 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pcVar2 + 1)" ( (binary_expression "pcVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "iVar6 = FUN_001cf7c0();" (assignment_expression "iVar6 = FUN_001cf7c0()" identifier = (call_expression "FUN_001cf7c0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }" { (expression_statement "FUN_001ce390();" (call_expression "FUN_001ce390()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }" { (expression_statement "sVar8 = local_30 - (int)local_34;" (assignment_expression "sVar8 = local_30 - (int)local_34" identifier = (binary_expression "local_30 - (int)local_34" identifier - (cast_expression "(int)local_34" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" identifier = (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = FUN_001e4cd0(sVar8 + 1);" (assignment_expression "uVar5 = FUN_001e4cd0(sVar8 + 1)" identifier = (call_expression "FUN_001e4cd0(sVar8 + 1)" identifier (argument_list "(sVar8 + 1)" ( (binary_expression "sVar8 + 1" identifier + number_literal) )))) ;) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" * (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + iVar7 * 4)" ( (binary_expression "iVar3 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8)" identifier (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8)" ( (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) , identifier , identifier ))) ;) (expression_statement "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;" (assignment_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0" (pointer_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" * (cast_expression "(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) + identifier) )))) = number_literal) ;) })) (if_statement "if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" if (parenthesized_expression "(local_34 != (void *)0x0)" ( (binary_expression "local_34 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" { (expression_statement "free(local_34);" (call_expression "free(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_34 = (void *)0x0;" (assignment_expression "local_34 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (goto_statement "goto LAB_001d1710;" goto statement_identifier ;) })) (if_statement "if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }" if (parenthesized_expression "(local_34 == (void *)0x0)" ( (binary_expression "local_34 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_001d175f:\n      iVar6 = 0;\n    }" { (labeled_statement "LAB_001d175f:\n      iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) }) (else_clause "else {\n      free(local_34);\n    }" else (compound_statement "{\n      free(local_34);\n    }" { (expression_statement "free(local_34);" (call_expression "free(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) }))) (labeled_statement "LAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;" statement_identifier : (if_statement "if (local_40 != 0) goto LAB_001d1560;" if (parenthesized_expression "(local_40 != 0)" ( (binary_expression "local_40 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001d1560;" goto statement_identifier ;))) }) (else_clause "else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" else (compound_statement "{\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" { (if_statement "if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }" if (parenthesized_expression "(*(char *)(iVar6 + 1) != 'z')" ( (binary_expression "*(char *)(iVar6 + 1) != 'z'" (pointer_expression "*(char *)(iVar6 + 1)" * (cast_expression "(char *)(iVar6 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 1)" ( (binary_expression "iVar6 + 1" identifier + number_literal) )))) != (char_literal "'z'" ' character ')) )) (compound_statement "{\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }" { (expression_statement "local_38 = FUN_001cddf0();" (assignment_expression "local_38 = FUN_001cddf0()" identifier = (call_expression "FUN_001cddf0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (local_38 < 1) {\n        return 0;\n      }" if (parenthesized_expression "(local_38 < 1)" ( (binary_expression "local_38 < 1" identifier < number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "__s = (byte *)*param_2;" (assignment_expression "__s = (byte *)*param_2" identifier = (cast_expression "(byte *)*param_2" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "sVar8 = strlen((char *)__s);" (assignment_expression "sVar8 = strlen((char *)__s)" identifier = (call_expression "strlen((char *)__s)" identifier (argument_list "((char *)__s)" ( (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if ((int)sVar8 < local_38) {\n        return 0;\n      }" if (parenthesized_expression "((int)sVar8 < local_38)" ( (binary_expression "(int)sVar8 < local_38" (cast_expression "(int)sVar8" ( (type_descriptor "int" primitive_type) ) identifier) < identifier) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" identifier = false) ;) (expression_statement "bVar13 = (*param_1 & 4) == 0;" (assignment_expression "bVar13 = (*param_1 & 4) == 0" identifier = (binary_expression "(*param_1 & 4) == 0" (parenthesized_expression "(*param_1 & 4)" ( (binary_expression "*param_1 & 4" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal)) ;) (if_statement "if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }" if (parenthesized_expression "(bVar13)" ( identifier )) (compound_statement "{\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }" { (labeled_statement "LAB_001d1a20:\n        FUN_001ce160();" statement_identifier : (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" identifier (argument_list "()" ( ))) ;)) (if_statement "if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }" if (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) (compound_statement "{\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }" { (if_statement "if (local_38 == 0) goto LAB_001d1840;" if (parenthesized_expression "(local_38 == 0)" ( (binary_expression "local_38 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d1840;" goto statement_identifier ;)) (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*param_2 = *param_2 + local_38;" (assignment_expression "*param_2 = *param_2 + local_38" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + local_38" (pointer_expression "*param_2" * identifier) + identifier)) ;) (goto_statement "goto LAB_001d1840;" goto statement_identifier ;) })) (expression_statement "iVar6 = 8;" (assignment_expression "iVar6 = 8" identifier = number_literal) ;) (expression_statement "pbVar10 = __s;" (assignment_expression "pbVar10 = __s" identifier = identifier) ;) (expression_statement "pbVar11 = (byte *)"JArray1Z";" (assignment_expression "pbVar11 = (byte *)"JArray1Z"" identifier = (cast_expression "(byte *)"JArray1Z"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""JArray1Z"" " string_content "))) ;) (do_statement "do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);" do (compound_statement "{\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      }" { (if_statement "if (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar10 < *pbVar11;" (assignment_expression "bVar12 = *pbVar10 < *pbVar11" identifier = (binary_expression "*pbVar10 < *pbVar11" (pointer_expression "*pbVar10" * identifier) < (pointer_expression "*pbVar11" * identifier))) ;) (expression_statement "bVar13 = *pbVar10 == *pbVar11;" (assignment_expression "bVar13 = *pbVar10 == *pbVar11" identifier = (binary_expression "*pbVar10 == *pbVar11" (pointer_expression "*pbVar10" * identifier) == (pointer_expression "*pbVar11" * identifier))) ;) (expression_statement "pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1" identifier = (binary_expression "pbVar10 + (uint)bVar14 * -2 + 1" (binary_expression "pbVar10 + (uint)bVar14 * -2" identifier + (binary_expression "(uint)bVar14 * -2" (cast_expression "(uint)bVar14" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;" (assignment_expression "pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1" identifier = (binary_expression "pbVar11 + (uint)bVar14 * -2 + 1" (binary_expression "pbVar11 + (uint)bVar14 * -2" identifier + (binary_expression "(uint)bVar14 * -2" (cast_expression "(uint)bVar14" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar13)" ( identifier )) ;) (if_statement "if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;" if (parenthesized_expression "((!bVar12 && !bVar13) != bVar12)" ( (binary_expression "(!bVar12 && !bVar13) != bVar12" (parenthesized_expression "(!bVar12 && !bVar13)" ( (binary_expression "!bVar12 && !bVar13" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar13" ! identifier)) )) != identifier) )) (goto_statement "goto LAB_001d1a20;" goto statement_identifier ;)) (if_statement "if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        *param_2 = (int)(__s + local_38);\n      }" { (expression_statement "*param_2 = (int)(__s + local_38);" (assignment_expression "*param_2 = (int)(__s + local_38)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(__s + local_38)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(__s + local_38)" ( (binary_expression "__s + local_38" identifier + identifier) )))) ;) }) (else_clause "else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" else (compound_statement "{\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" { (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" identifier (argument_list "()" ( ))) ;) (expression_statement "*param_2 = *param_2 + local_38;" (assignment_expression "*param_2 = *param_2 + local_38" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + local_38" (pointer_expression "*param_2" * identifier) + identifier)) ;) }))) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" identifier = (call_expression "FUN_001cd950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "local_40 = param_5;" (assignment_expression "local_40 = param_5" identifier = identifier) ;) (if_statement "if (0 < local_38) goto LAB_001d15e5;" if (parenthesized_expression "(0 < local_38)" ( (binary_expression "0 < local_38" number_literal < identifier) )) (goto_statement "goto LAB_001d15e5;" goto statement_identifier ;)) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (labeled_statement "LAB_001d1560:\n      FUN_001ce240();" statement_identifier : (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;)) (goto_statement "goto LAB_001d178d;" goto statement_identifier ;) })) (expression_statement "*param_2 = iVar6 + 2;" (assignment_expression "*param_2 = iVar6 + 2" (pointer_expression "*param_2" * identifier) = (binary_expression "iVar6 + 2" identifier + number_literal)) ;) (if_statement "if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }" if (parenthesized_expression "(*(char *)(iVar6 + 2) == '\0')" ( (binary_expression "*(char *)(iVar6 + 2) == '\0'" (pointer_expression "*(char *)(iVar6 + 2)" * (cast_expression "(char *)(iVar6 + 2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 2)" ( (binary_expression "iVar6 + 2" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_2 = iVar6 + 3;" (assignment_expression "*param_2 = iVar6 + 3" (pointer_expression "*param_2" * identifier) = (binary_expression "iVar6 + 3" identifier + number_literal)) ;) (expression_statement "iVar6 = FUN_001cdea0();" (assignment_expression "iVar6 = FUN_001cdea0()" identifier = (call_expression "FUN_001cdea0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == -1) {\n      return 0;\n    }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }" if (parenthesized_expression "((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6))" ( (binary_expression "(*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)" (parenthesized_expression "(*(int *)(param_1 + 0x40) != 0)" ( (binary_expression "*(int *)(param_1 + 0x40) != 0" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "(*(int *)(param_1 + 0x44) <= iVar6)" ( (binary_expression "*(int *)(param_1 + 0x44) <= iVar6" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) <= identifier) ))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = FUN_001cdea0();" (assignment_expression "iVar7 = FUN_001cdea0()" identifier = (call_expression "FUN_001cdea0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar7 == -1) {\n      return 0;\n    }" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x40) == 0)" ( (binary_expression "*(int *)(param_1 + 0x40) == 0" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }" { (expression_statement "FUN_001ce290();" (call_expression "FUN_001ce290()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_4 != 0) {\n        FUN_001ce290();\n      }" if (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) (compound_statement "{\n        FUN_001ce290();\n      }" { (expression_statement "FUN_001ce290();" (call_expression "FUN_001ce290()" identifier (argument_list "()" ( ))) ;) })) }) (else_clause "else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" else (compound_statement "{\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" { (expression_statement "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);" (assignment_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" identifier = (pointer_expression "*(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" * (cast_expression "(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar6 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar6 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar6 * 4" identifier * number_literal)) ))))) ;) (if_statement "if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }" if (parenthesized_expression "((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0'))))" ( (binary_expression "(((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))" (parenthesized_expression "(((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0))" ( (binary_expression "((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)" (parenthesized_expression "((pcVar2 != (char *)0x0) && (*pcVar2 != '\0'))" ( (binary_expression "(pcVar2 != (char *)0x0) && (*pcVar2 != '\0')" (parenthesized_expression "(pcVar2 != (char *)0x0)" ( (binary_expression "pcVar2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar2 != '\0')" ( (binary_expression "*pcVar2 != '\0'" (pointer_expression "*pcVar2" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(FUN_001ce240(), param_4 != 0)" ( (comma_expression "FUN_001ce240(), param_4 != 0" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) , (binary_expression "param_4 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))" ( (parenthesized_expression "(pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0'))" ( (comma_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')" (assignment_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" identifier = (pointer_expression "*(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" * (cast_expression "(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar6 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar6 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar6 * 4" identifier * number_literal)) ))))) , (binary_expression "pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')" (binary_expression "pcVar2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(*pcVar2 != '\0')" ( (binary_expression "*pcVar2 != '\0'" (pointer_expression "*pcVar2" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )))) )) ))) )) (compound_statement "{\n        FUN_001ce240();\n      }" { (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) })) }))) (labeled_statement "LAB_001d1840:\n    FUN_001ce240();" statement_identifier : (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;)) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" identifier = (call_expression "FUN_001cd950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (0 < local_38) goto LAB_001d15dd;" if (parenthesized_expression "(0 < local_38)" ( (binary_expression "0 < local_38" number_literal < identifier) )) (goto_statement "goto LAB_001d15dd;" goto statement_identifier ;)) (labeled_statement "LAB_001d186e:\n    iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) }))) (if_statement "if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }" if (parenthesized_expression "(*(char *)(*(int *)(param_3 + 4) + -1) == '>')" ( (binary_expression "*(char *)(*(int *)(param_3 + 4) + -1) == '>'" (pointer_expression "*(char *)(*(int *)(param_3 + 4) + -1)" * (cast_expression "(char *)(*(int *)(param_3 + 4) + -1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 4) + -1)" ( (binary_expression "*(int *)(param_3 + 4) + -1" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) )))) == (char_literal "'>'" ' character ')) )) (compound_statement "{\n    FUN_001ce240();\n  }" { (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" statement_identifier : (if_statement "if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" if (parenthesized_expression "((param_5 & param_6) != 0)" ( (binary_expression "(param_5 & param_6) != 0" (parenthesized_expression "(param_5 & param_6)" ( (binary_expression "param_5 & param_6" identifier & identifier) )) != number_literal) )) (compound_statement "{\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" { (expression_statement "uVar5 = FUN_001cdb90();" (assignment_expression "uVar5 = FUN_001cdb90()" identifier = (call_expression "FUN_001cdb90()" identifier (argument_list "()" ( )))) ;) (expression_statement "FUN_001ce070(uVar5);" (call_expression "FUN_001ce070(uVar5)" identifier (argument_list "(uVar5)" ( identifier ))) ;) (return_statement "return iVar6;" return identifier ;) }))) (return_statement "return iVar6;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint __regparm3\ndemangle_template(work_stuff *work,char **mangled,string *tname,string *trawname,int is_type,\n                 int remember)\n\n{\n  char **ppcVar1;\n  byte *__s;\n  char **ppcVar2;\n  type_kind_t tk;\n  int iVar3;\n  int iVar4;\n  size_t sVar5;\n  size_t sVar6;\n  char *pcVar7;\n  int len;\n  byte *pbVar8;\n  byte *pbVar9;\n  bool bVar10;\n  bool bVar11;\n  byte bVar12;\n  int local_40;\n  int r;\n  string temp;\n  string param;\n  \n  bVar12 = 0;\n  pcVar7 = *mangled;\n  *mangled = pcVar7 + 1;\n  if (is_type == 0) {\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    ppcVar2 = (char **)xmalloc(r << 2);\n    work->tmpl_argvec = ppcVar2;\n    work->ntmpl_args = r;\n    if (r < 1) goto LAB_001d186e;\n    ppcVar1 = ppcVar2 + r;\n    do {\n      *ppcVar2 = (char *)0x0;\n      ppcVar2 = ppcVar2 + 1;\n    } while (ppcVar1 != ppcVar2);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar4 = 0;\n    while( true ) {\n      pcVar7 = *mangled;\n      if (*pcVar7 == 'Z') break;\n      if (*pcVar7 == 'z') {\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      tk = do_type(work,mangled,&temp);\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      if (tk == tk_none) goto LAB_001d175f;\n      if (is_type == 0) {\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }\n      else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar4 = iVar4 + 1;\n      if (r <= iVar4) goto LAB_001d1761;\n      string_append(tname,", ");\n    }\n    *mangled = pcVar7 + 1;\n    iVar3 = do_type(work,mangled,&temp);\n    if (iVar3 != 0) {\n      string_appends(tname,&temp,(string *)temp.p);\n      if (is_type == 0) {\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (temp.b == (char *)0x0) {\nLAB_001d175f:\n      iVar3 = 0;\n    }\n    else {\n      free(temp.b);\n      temp.p = (char *)0x0;\n      temp.e = (char *)0x0;\n      temp.b = (char *)0x0;\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (pcVar7[1] != 'z') {\n      iVar3 = consume_count(mangled);\n      if (iVar3 < 1) {\n        return 0;\n      }\n      __s = (byte *)*mangled;\n      r = iVar3;\n      sVar5 = strlen((char *)__s);\n      if ((int)sVar5 < iVar3) {\n        return 0;\n      }\n      bVar10 = false;\n      bVar11 = (work->options & 4) == 0;\n      if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }\n      iVar4 = 8;\n      pbVar8 = __s;\n      pbVar9 = (byte *)"JArray1Z";\n      do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);\n      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;\n      if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }\n      iVar3 = get_count(mangled,&r);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      local_40 = is_type;\n      if (0 < r) goto LAB_001d15e5;\n      iVar3 = 0;\nLAB_001d1560:\n      string_append(tname,"[]");\n      goto LAB_001d178d;\n    }\n    *mangled = pcVar7 + 2;\n    if (pcVar7[2] == '\0') {\n      return 0;\n    }\n    *mangled = pcVar7 + 3;\n    iVar3 = consume_count_with_underscores(mangled);\n    if (iVar3 == -1) {\n      return 0;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)) {\n      return 0;\n    }\n    iVar4 = consume_count_with_underscores(mangled);\n    if (iVar4 == -1) {\n      return 0;\n    }\n    if (work->tmpl_argvec == (char **)0x0) {\n      string_append_template_idx(tname,iVar3);\n      if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }\n    }\n    else {\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }\nLAB_001d1840:\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    if (0 < r) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar3 = 0;\n  }\n  if (tname->p[-1] == '>') {\n    string_append(tname," ");\n  }\n  string_append(tname,">");\nLAB_001d178d:\n  if ((is_type & remember) != 0) {\n    iVar4 = register_Btype(work);\n    pcVar7 = tname->b;\n    len = (int)tname->p - (int)pcVar7;\n    if (pcVar7 == tname->p) {\n      len = 0;\n    }\n    remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4);\n    return iVar3;\n  }\n  return iVar3;\n}\n\n" comment (function_definition "int __regparm3\ndemangle_template(work_stuff *work,char **mangled,string *tname,string *trawname,int is_type,\n                 int remember)\n\n{\n  char **ppcVar1;\n  byte *__s;\n  char **ppcVar2;\n  type_kind_t tk;\n  int iVar3;\n  int iVar4;\n  size_t sVar5;\n  size_t sVar6;\n  char *pcVar7;\n  int len;\n  byte *pbVar8;\n  byte *pbVar9;\n  bool bVar10;\n  bool bVar11;\n  byte bVar12;\n  int local_40;\n  int r;\n  string temp;\n  string param;\n  \n  bVar12 = 0;\n  pcVar7 = *mangled;\n  *mangled = pcVar7 + 1;\n  if (is_type == 0) {\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    ppcVar2 = (char **)xmalloc(r << 2);\n    work->tmpl_argvec = ppcVar2;\n    work->ntmpl_args = r;\n    if (r < 1) goto LAB_001d186e;\n    ppcVar1 = ppcVar2 + r;\n    do {\n      *ppcVar2 = (char *)0x0;\n      ppcVar2 = ppcVar2 + 1;\n    } while (ppcVar1 != ppcVar2);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar4 = 0;\n    while( true ) {\n      pcVar7 = *mangled;\n      if (*pcVar7 == 'Z') break;\n      if (*pcVar7 == 'z') {\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      tk = do_type(work,mangled,&temp);\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      if (tk == tk_none) goto LAB_001d175f;\n      if (is_type == 0) {\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }\n      else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar4 = iVar4 + 1;\n      if (r <= iVar4) goto LAB_001d1761;\n      string_append(tname,", ");\n    }\n    *mangled = pcVar7 + 1;\n    iVar3 = do_type(work,mangled,&temp);\n    if (iVar3 != 0) {\n      string_appends(tname,&temp,(string *)temp.p);\n      if (is_type == 0) {\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (temp.b == (char *)0x0) {\nLAB_001d175f:\n      iVar3 = 0;\n    }\n    else {\n      free(temp.b);\n      temp.p = (char *)0x0;\n      temp.e = (char *)0x0;\n      temp.b = (char *)0x0;\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (pcVar7[1] != 'z') {\n      iVar3 = consume_count(mangled);\n      if (iVar3 < 1) {\n        return 0;\n      }\n      __s = (byte *)*mangled;\n      r = iVar3;\n      sVar5 = strlen((char *)__s);\n      if ((int)sVar5 < iVar3) {\n        return 0;\n      }\n      bVar10 = false;\n      bVar11 = (work->options & 4) == 0;\n      if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }\n      iVar4 = 8;\n      pbVar8 = __s;\n      pbVar9 = (byte *)"JArray1Z";\n      do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);\n      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;\n      if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }\n      iVar3 = get_count(mangled,&r);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      local_40 = is_type;\n      if (0 < r) goto LAB_001d15e5;\n      iVar3 = 0;\nLAB_001d1560:\n      string_append(tname,"[]");\n      goto LAB_001d178d;\n    }\n    *mangled = pcVar7 + 2;\n    if (pcVar7[2] == '\0') {\n      return 0;\n    }\n    *mangled = pcVar7 + 3;\n    iVar3 = consume_count_with_underscores(mangled);\n    if (iVar3 == -1) {\n      return 0;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)) {\n      return 0;\n    }\n    iVar4 = consume_count_with_underscores(mangled);\n    if (iVar4 == -1) {\n      return 0;\n    }\n    if (work->tmpl_argvec == (char **)0x0) {\n      string_append_template_idx(tname,iVar3);\n      if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }\n    }\n    else {\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }\nLAB_001d1840:\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    if (0 < r) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar3 = 0;\n  }\n  if (tname->p[-1] == '>') {\n    string_append(tname," ");\n  }\n  string_append(tname,">");\nLAB_001d178d:\n  if ((is_type & remember) != 0) {\n    iVar4 = register_Btype(work);\n    pcVar7 = tname->b;\n    len = (int)tname->p - (int)pcVar7;\n    if (pcVar7 == tname->p) {\n      len = 0;\n    }\n    remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4);\n    return iVar3;\n  }\n  return iVar3;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "demangle_template(work_stuff *work,char **mangled,string *tname,string *trawname,int is_type,\n                 int remember)" identifier (parameter_list "(work_stuff *work,char **mangled,string *tname,string *trawname,int is_type,\n                 int remember)" ( (parameter_declaration "work_stuff *work" type_identifier (pointer_declarator "*work" * identifier)) , (parameter_declaration "char **mangled" primitive_type (pointer_declarator "**mangled" * (pointer_declarator "*mangled" * identifier))) , (parameter_declaration "string *tname" type_identifier (pointer_declarator "*tname" * identifier)) , (parameter_declaration "string *trawname" type_identifier (pointer_declarator "*trawname" * identifier)) , (parameter_declaration "int is_type" primitive_type identifier) , (parameter_declaration "int remember" primitive_type identifier) ))) (compound_statement "{\n  char **ppcVar1;\n  byte *__s;\n  char **ppcVar2;\n  type_kind_t tk;\n  int iVar3;\n  int iVar4;\n  size_t sVar5;\n  size_t sVar6;\n  char *pcVar7;\n  int len;\n  byte *pbVar8;\n  byte *pbVar9;\n  bool bVar10;\n  bool bVar11;\n  byte bVar12;\n  int local_40;\n  int r;\n  string temp;\n  string param;\n  \n  bVar12 = 0;\n  pcVar7 = *mangled;\n  *mangled = pcVar7 + 1;\n  if (is_type == 0) {\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    ppcVar2 = (char **)xmalloc(r << 2);\n    work->tmpl_argvec = ppcVar2;\n    work->ntmpl_args = r;\n    if (r < 1) goto LAB_001d186e;\n    ppcVar1 = ppcVar2 + r;\n    do {\n      *ppcVar2 = (char *)0x0;\n      ppcVar2 = ppcVar2 + 1;\n    } while (ppcVar1 != ppcVar2);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar4 = 0;\n    while( true ) {\n      pcVar7 = *mangled;\n      if (*pcVar7 == 'Z') break;\n      if (*pcVar7 == 'z') {\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      tk = do_type(work,mangled,&temp);\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      if (tk == tk_none) goto LAB_001d175f;\n      if (is_type == 0) {\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }\n      else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar4 = iVar4 + 1;\n      if (r <= iVar4) goto LAB_001d1761;\n      string_append(tname,", ");\n    }\n    *mangled = pcVar7 + 1;\n    iVar3 = do_type(work,mangled,&temp);\n    if (iVar3 != 0) {\n      string_appends(tname,&temp,(string *)temp.p);\n      if (is_type == 0) {\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (temp.b == (char *)0x0) {\nLAB_001d175f:\n      iVar3 = 0;\n    }\n    else {\n      free(temp.b);\n      temp.p = (char *)0x0;\n      temp.e = (char *)0x0;\n      temp.b = (char *)0x0;\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (pcVar7[1] != 'z') {\n      iVar3 = consume_count(mangled);\n      if (iVar3 < 1) {\n        return 0;\n      }\n      __s = (byte *)*mangled;\n      r = iVar3;\n      sVar5 = strlen((char *)__s);\n      if ((int)sVar5 < iVar3) {\n        return 0;\n      }\n      bVar10 = false;\n      bVar11 = (work->options & 4) == 0;\n      if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }\n      iVar4 = 8;\n      pbVar8 = __s;\n      pbVar9 = (byte *)"JArray1Z";\n      do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);\n      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;\n      if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }\n      iVar3 = get_count(mangled,&r);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      local_40 = is_type;\n      if (0 < r) goto LAB_001d15e5;\n      iVar3 = 0;\nLAB_001d1560:\n      string_append(tname,"[]");\n      goto LAB_001d178d;\n    }\n    *mangled = pcVar7 + 2;\n    if (pcVar7[2] == '\0') {\n      return 0;\n    }\n    *mangled = pcVar7 + 3;\n    iVar3 = consume_count_with_underscores(mangled);\n    if (iVar3 == -1) {\n      return 0;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)) {\n      return 0;\n    }\n    iVar4 = consume_count_with_underscores(mangled);\n    if (iVar4 == -1) {\n      return 0;\n    }\n    if (work->tmpl_argvec == (char **)0x0) {\n      string_append_template_idx(tname,iVar3);\n      if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }\n    }\n    else {\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }\nLAB_001d1840:\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    if (0 < r) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar3 = 0;\n  }\n  if (tname->p[-1] == '>') {\n    string_append(tname," ");\n  }\n  string_append(tname,">");\nLAB_001d178d:\n  if ((is_type & remember) != 0) {\n    iVar4 = register_Btype(work);\n    pcVar7 = tname->b;\n    len = (int)tname->p - (int)pcVar7;\n    if (pcVar7 == tname->p) {\n      len = 0;\n    }\n    remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4);\n    return iVar3;\n  }\n  return iVar3;\n}" { (declaration "char **ppcVar1;" primitive_type (pointer_declarator "**ppcVar1" * (pointer_declarator "*ppcVar1" * identifier)) ;) (declaration "byte *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "char **ppcVar2;" primitive_type (pointer_declarator "**ppcVar2" * (pointer_declarator "*ppcVar2" * identifier)) ;) (declaration "type_kind_t tk;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "int len;" primitive_type identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (declaration "bool bVar10;" primitive_type identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "byte bVar12;" type_identifier identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "int r;" primitive_type identifier ;) (declaration "string temp;" type_identifier identifier ;) (declaration "string param;" type_identifier identifier ;) (expression_statement "bVar12 = 0;" (assignment_expression "bVar12 = 0" identifier = number_literal) ;) (expression_statement "pcVar7 = *mangled;" (assignment_expression "pcVar7 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (expression_statement "*mangled = pcVar7 + 1;" (assignment_expression "*mangled = pcVar7 + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "pcVar7 + 1" identifier + number_literal)) ;) (if_statement "if (is_type == 0) {\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    ppcVar2 = (char **)xmalloc(r << 2);\n    work->tmpl_argvec = ppcVar2;\n    work->ntmpl_args = r;\n    if (r < 1) goto LAB_001d186e;\n    ppcVar1 = ppcVar2 + r;\n    do {\n      *ppcVar2 = (char *)0x0;\n      ppcVar2 = ppcVar2 + 1;\n    } while (ppcVar1 != ppcVar2);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar4 = 0;\n    while( true ) {\n      pcVar7 = *mangled;\n      if (*pcVar7 == 'Z') break;\n      if (*pcVar7 == 'z') {\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      tk = do_type(work,mangled,&temp);\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      if (tk == tk_none) goto LAB_001d175f;\n      if (is_type == 0) {\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }\n      else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar4 = iVar4 + 1;\n      if (r <= iVar4) goto LAB_001d1761;\n      string_append(tname,", ");\n    }\n    *mangled = pcVar7 + 1;\n    iVar3 = do_type(work,mangled,&temp);\n    if (iVar3 != 0) {\n      string_appends(tname,&temp,(string *)temp.p);\n      if (is_type == 0) {\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (temp.b == (char *)0x0) {\nLAB_001d175f:\n      iVar3 = 0;\n    }\n    else {\n      free(temp.b);\n      temp.p = (char *)0x0;\n      temp.e = (char *)0x0;\n      temp.b = (char *)0x0;\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (pcVar7[1] != 'z') {\n      iVar3 = consume_count(mangled);\n      if (iVar3 < 1) {\n        return 0;\n      }\n      __s = (byte *)*mangled;\n      r = iVar3;\n      sVar5 = strlen((char *)__s);\n      if ((int)sVar5 < iVar3) {\n        return 0;\n      }\n      bVar10 = false;\n      bVar11 = (work->options & 4) == 0;\n      if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }\n      iVar4 = 8;\n      pbVar8 = __s;\n      pbVar9 = (byte *)"JArray1Z";\n      do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);\n      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;\n      if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }\n      iVar3 = get_count(mangled,&r);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      local_40 = is_type;\n      if (0 < r) goto LAB_001d15e5;\n      iVar3 = 0;\nLAB_001d1560:\n      string_append(tname,"[]");\n      goto LAB_001d178d;\n    }\n    *mangled = pcVar7 + 2;\n    if (pcVar7[2] == '\0') {\n      return 0;\n    }\n    *mangled = pcVar7 + 3;\n    iVar3 = consume_count_with_underscores(mangled);\n    if (iVar3 == -1) {\n      return 0;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)) {\n      return 0;\n    }\n    iVar4 = consume_count_with_underscores(mangled);\n    if (iVar4 == -1) {\n      return 0;\n    }\n    if (work->tmpl_argvec == (char **)0x0) {\n      string_append_template_idx(tname,iVar3);\n      if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }\n    }\n    else {\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }\nLAB_001d1840:\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    if (0 < r) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar3 = 0;\n  }" if (parenthesized_expression "(is_type == 0)" ( (binary_expression "is_type == 0" identifier == number_literal) )) (compound_statement "{\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    ppcVar2 = (char **)xmalloc(r << 2);\n    work->tmpl_argvec = ppcVar2;\n    work->ntmpl_args = r;\n    if (r < 1) goto LAB_001d186e;\n    ppcVar1 = ppcVar2 + r;\n    do {\n      *ppcVar2 = (char *)0x0;\n      ppcVar2 = ppcVar2 + 1;\n    } while (ppcVar1 != ppcVar2);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar4 = 0;\n    while( true ) {\n      pcVar7 = *mangled;\n      if (*pcVar7 == 'Z') break;\n      if (*pcVar7 == 'z') {\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      tk = do_type(work,mangled,&temp);\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      if (tk == tk_none) goto LAB_001d175f;\n      if (is_type == 0) {\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }\n      else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar4 = iVar4 + 1;\n      if (r <= iVar4) goto LAB_001d1761;\n      string_append(tname,", ");\n    }\n    *mangled = pcVar7 + 1;\n    iVar3 = do_type(work,mangled,&temp);\n    if (iVar3 != 0) {\n      string_appends(tname,&temp,(string *)temp.p);\n      if (is_type == 0) {\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (temp.b == (char *)0x0) {\nLAB_001d175f:\n      iVar3 = 0;\n    }\n    else {\n      free(temp.b);\n      temp.p = (char *)0x0;\n      temp.e = (char *)0x0;\n      temp.b = (char *)0x0;\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }" { (expression_statement "string_append(tname,"<");" (call_expression "string_append(tname,"<")" identifier (argument_list "(tname,"<")" ( identifier , (string_literal ""<"" " string_content ") ))) ;) (expression_statement "iVar3 = get_count(mangled,&r);" (assignment_expression "iVar3 = get_count(mangled,&r)" identifier = (call_expression "get_count(mangled,&r)" identifier (argument_list "(mangled,&r)" ( identifier , (pointer_expression "&r" & identifier) )))) ;) (if_statement "if (iVar3 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "ppcVar2 = (char **)xmalloc(r << 2);" (assignment_expression "ppcVar2 = (char **)xmalloc(r << 2)" identifier = (cast_expression "(char **)xmalloc(r << 2)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "xmalloc(r << 2)" identifier (argument_list "(r << 2)" ( (binary_expression "r << 2" identifier << number_literal) ))))) ;) (expression_statement "work->tmpl_argvec = ppcVar2;" (assignment_expression "work->tmpl_argvec = ppcVar2" (field_expression "work->tmpl_argvec" identifier -> field_identifier) = identifier) ;) (expression_statement "work->ntmpl_args = r;" (assignment_expression "work->ntmpl_args = r" (field_expression "work->ntmpl_args" identifier -> field_identifier) = identifier) ;) (if_statement "if (r < 1) goto LAB_001d186e;" if (parenthesized_expression "(r < 1)" ( (binary_expression "r < 1" identifier < number_literal) )) (goto_statement "goto LAB_001d186e;" goto statement_identifier ;)) (expression_statement "ppcVar1 = ppcVar2 + r;" (assignment_expression "ppcVar1 = ppcVar2 + r" identifier = (binary_expression "ppcVar2 + r" identifier + identifier)) ;) (do_statement "do {\n      *ppcVar2 = (char *)0x0;\n      ppcVar2 = ppcVar2 + 1;\n    } while (ppcVar1 != ppcVar2);" do (compound_statement "{\n      *ppcVar2 = (char *)0x0;\n      ppcVar2 = ppcVar2 + 1;\n    }" { (expression_statement "*ppcVar2 = (char *)0x0;" (assignment_expression "*ppcVar2 = (char *)0x0" (pointer_expression "*ppcVar2" * identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppcVar2 = ppcVar2 + 1;" (assignment_expression "ppcVar2 = ppcVar2 + 1" identifier = (binary_expression "ppcVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(ppcVar1 != ppcVar2)" ( (binary_expression "ppcVar1 != ppcVar2" identifier != identifier) )) ;) (labeled_statement "LAB_001d15dd:\n    local_40 = 0;" statement_identifier : (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_001d15e5:\n    iVar4 = 0;" statement_identifier : (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;)) (while_statement "while( true ) {\n      pcVar7 = *mangled;\n      if (*pcVar7 == 'Z') break;\n      if (*pcVar7 == 'z') {\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      tk = do_type(work,mangled,&temp);\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      if (tk == tk_none) goto LAB_001d175f;\n      if (is_type == 0) {\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }\n      else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar4 = iVar4 + 1;\n      if (r <= iVar4) goto LAB_001d1761;\n      string_append(tname,", ");\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      pcVar7 = *mangled;\n      if (*pcVar7 == 'Z') break;\n      if (*pcVar7 == 'z') {\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      tk = do_type(work,mangled,&temp);\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      if (tk == tk_none) goto LAB_001d175f;\n      if (is_type == 0) {\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }\n      else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar4 = iVar4 + 1;\n      if (r <= iVar4) goto LAB_001d1761;\n      string_append(tname,", ");\n    }" { (expression_statement "pcVar7 = *mangled;" (assignment_expression "pcVar7 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (if_statement "if (*pcVar7 == 'Z') break;" if (parenthesized_expression "(*pcVar7 == 'Z')" ( (binary_expression "*pcVar7 == 'Z'" (pointer_expression "*pcVar7" * identifier) == (char_literal "'Z'" ' character ')) )) (break_statement "break;" break ;)) (if_statement "if (*pcVar7 == 'z') {\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }" if (parenthesized_expression "(*pcVar7 == 'z')" ( (binary_expression "*pcVar7 == 'z'" (pointer_expression "*pcVar7" * identifier) == (char_literal "'z'" ' character ')) )) (compound_statement "{\n        *mangled = pcVar7 + 1;\n        iVar3 = demangle_template_template_parm(work,mangled,tname);\n        if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }" { (expression_statement "*mangled = pcVar7 + 1;" (assignment_expression "*mangled = pcVar7 + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "pcVar7 + 1" identifier + number_literal)) ;) (expression_statement "iVar3 = demangle_template_template_parm(work,mangled,tname);" (assignment_expression "iVar3 = demangle_template_template_parm(work,mangled,tname)" identifier = (call_expression "demangle_template_template_parm(work,mangled,tname)" identifier (argument_list "(work,mangled,tname)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          sVar5 = consume_count(mangled);\n          if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }\n          goto LAB_001d1710;\n        }" { (expression_statement "sVar5 = consume_count(mangled);" (assignment_expression "sVar5 = consume_count(mangled)" identifier = (call_expression "consume_count(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if ((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)) {\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }" if (parenthesized_expression "((0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6))" ( (binary_expression "(0 < (int)sVar5) && (sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)" (parenthesized_expression "(0 < (int)sVar5)" ( (binary_expression "0 < (int)sVar5" number_literal < (cast_expression "(int)sVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6)" ( (comma_expression "sVar6 = strlen(*mangled), (int)sVar5 <= (int)sVar6" (assignment_expression "sVar6 = strlen(*mangled)" identifier = (call_expression "strlen(*mangled)" identifier (argument_list "(*mangled)" ( (pointer_expression "*mangled" * identifier) )))) , (binary_expression "(int)sVar5 <= (int)sVar6" (cast_expression "(int)sVar5" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)sVar6" ( (type_descriptor "int" primitive_type) ) identifier))) ))) )) (compound_statement "{\n            string_append(tname," ");\n            string_appendn(tname,*mangled,sVar5);\n            if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }\n            *mangled = *mangled + sVar5;\n          }" { (expression_statement "string_append(tname," ");" (call_expression "string_append(tname," ")" identifier (argument_list "(tname," ")" ( identifier , (string_literal "" "" " string_content ") ))) ;) (expression_statement "string_appendn(tname,*mangled,sVar5);" (call_expression "string_appendn(tname,*mangled,sVar5)" identifier (argument_list "(tname,*mangled,sVar5)" ( identifier , (pointer_expression "*mangled" * identifier) , identifier ))) ;) (if_statement "if (is_type == 0) {\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }" if (parenthesized_expression "(is_type == 0)" ( (binary_expression "is_type == 0" identifier == number_literal) )) (compound_statement "{\n              ppcVar2 = work->tmpl_argvec;\n              pcVar7 = (char *)xmalloc(sVar5 + 1);\n              ppcVar2[iVar4] = pcVar7;\n              memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);\n              work->tmpl_argvec[iVar4][sVar5] = '\0';\n            }" { (expression_statement "ppcVar2 = work->tmpl_argvec;" (assignment_expression "ppcVar2 = work->tmpl_argvec" identifier = (field_expression "work->tmpl_argvec" identifier -> field_identifier)) ;) (expression_statement "pcVar7 = (char *)xmalloc(sVar5 + 1);" (assignment_expression "pcVar7 = (char *)xmalloc(sVar5 + 1)" identifier = (cast_expression "(char *)xmalloc(sVar5 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(sVar5 + 1)" identifier (argument_list "(sVar5 + 1)" ( (binary_expression "sVar5 + 1" identifier + number_literal) ))))) ;) (expression_statement "ppcVar2[iVar4] = pcVar7;" (assignment_expression "ppcVar2[iVar4] = pcVar7" (subscript_expression "ppcVar2[iVar4]" identifier [ identifier ]) = identifier) ;) (expression_statement "memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5);" (call_expression "memcpy(work->tmpl_argvec[iVar4],*mangled,sVar5)" identifier (argument_list "(work->tmpl_argvec[iVar4],*mangled,sVar5)" ( (subscript_expression "work->tmpl_argvec[iVar4]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ]) , (pointer_expression "*mangled" * identifier) , identifier ))) ;) (expression_statement "work->tmpl_argvec[iVar4][sVar5] = '\0';" (assignment_expression "work->tmpl_argvec[iVar4][sVar5] = '\0'" (subscript_expression "work->tmpl_argvec[iVar4][sVar5]" (subscript_expression "work->tmpl_argvec[iVar4]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ]) [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) })) (expression_statement "*mangled = *mangled + sVar5;" (assignment_expression "*mangled = *mangled + sVar5" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + sVar5" (pointer_expression "*mangled" * identifier) + identifier)) ;) })) (goto_statement "goto LAB_001d1710;" goto statement_identifier ;) })) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;) })) (expression_statement "tk = do_type(work,mangled,&temp);" (assignment_expression "tk = do_type(work,mangled,&temp)" identifier = (call_expression "do_type(work,mangled,&temp)" identifier (argument_list "(work,mangled,&temp)" ( identifier , identifier , (pointer_expression "&temp" & identifier) )))) ;) (if_statement "if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }" if (parenthesized_expression "(temp.b != (char *)0x0)" ( (binary_expression "temp.b != (char *)0x0" (field_expression "temp.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }" { (expression_statement "free(temp.b);" (call_expression "free(temp.b)" identifier (argument_list "(temp.b)" ( (field_expression "temp.b" identifier . field_identifier) ))) ;) (expression_statement "temp.p = (char *)0x0;" (assignment_expression "temp.p = (char *)0x0" (field_expression "temp.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "temp.e = (char *)0x0;" (assignment_expression "temp.e = (char *)0x0" (field_expression "temp.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "temp.b = (char *)0x0;" (assignment_expression "temp.b = (char *)0x0" (field_expression "temp.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (if_statement "if (tk == tk_none) goto LAB_001d175f;" if (parenthesized_expression "(tk == tk_none)" ( (binary_expression "tk == tk_none" identifier == identifier) )) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;)) (if_statement "if (is_type == 0) {\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }\n      else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }" if (parenthesized_expression "(is_type == 0)" ( (binary_expression "is_type == 0" identifier == number_literal) )) (compound_statement "{\n        param.e = (char *)0x0;\n        param.p = (char *)0x0;\n        param.b = (char *)0x0;\n        iVar3 = demangle_template_value_parm(work,mangled,&param,tk);\n        if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }\n        sVar5 = (int)param.p - (int)param.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n        string_appends(tname,&param,(string *)param.p);\n        if (param.b != (char *)0x0) {\n          free(param.b);\n        }\n      }" { (expression_statement "param.e = (char *)0x0;" (assignment_expression "param.e = (char *)0x0" (field_expression "param.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "param.p = (char *)0x0;" (assignment_expression "param.p = (char *)0x0" (field_expression "param.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "param.b = (char *)0x0;" (assignment_expression "param.b = (char *)0x0" (field_expression "param.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "iVar3 = demangle_template_value_parm(work,mangled,&param,tk);" (assignment_expression "iVar3 = demangle_template_value_parm(work,mangled,&param,tk)" identifier = (call_expression "demangle_template_value_parm(work,mangled,&param,tk)" identifier (argument_list "(work,mangled,&param,tk)" ( identifier , identifier , (pointer_expression "&param" & identifier) , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n          if (param.b != (char *)0x0) {\n            free(param.b);\n          }\n          goto LAB_001d175f;\n        }" { (if_statement "if (param.b != (char *)0x0) {\n            free(param.b);\n          }" if (parenthesized_expression "(param.b != (char *)0x0)" ( (binary_expression "param.b != (char *)0x0" (field_expression "param.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            free(param.b);\n          }" { (expression_statement "free(param.b);" (call_expression "free(param.b)" identifier (argument_list "(param.b)" ( (field_expression "param.b" identifier . field_identifier) ))) ;) })) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;) })) (expression_statement "sVar5 = (int)param.p - (int)param.b;" (assignment_expression "sVar5 = (int)param.p - (int)param.b" identifier = (binary_expression "(int)param.p - (int)param.b" (cast_expression "(int)param.p" ( (type_descriptor "int" primitive_type) ) (field_expression "param.p" identifier . field_identifier)) - (cast_expression "(int)param.b" ( (type_descriptor "int" primitive_type) ) (field_expression "param.b" identifier . field_identifier)))) ;) (expression_statement "ppcVar2 = work->tmpl_argvec;" (assignment_expression "ppcVar2 = work->tmpl_argvec" identifier = (field_expression "work->tmpl_argvec" identifier -> field_identifier)) ;) (expression_statement "pcVar7 = (char *)xmalloc(sVar5 + 1);" (assignment_expression "pcVar7 = (char *)xmalloc(sVar5 + 1)" identifier = (cast_expression "(char *)xmalloc(sVar5 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(sVar5 + 1)" identifier (argument_list "(sVar5 + 1)" ( (binary_expression "sVar5 + 1" identifier + number_literal) ))))) ;) (expression_statement "ppcVar2[iVar4] = pcVar7;" (assignment_expression "ppcVar2[iVar4] = pcVar7" (subscript_expression "ppcVar2[iVar4]" identifier [ identifier ]) = identifier) ;) (expression_statement "memcpy(work->tmpl_argvec[iVar4],param.b,sVar5);" (call_expression "memcpy(work->tmpl_argvec[iVar4],param.b,sVar5)" identifier (argument_list "(work->tmpl_argvec[iVar4],param.b,sVar5)" ( (subscript_expression "work->tmpl_argvec[iVar4]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ]) , (field_expression "param.b" identifier . field_identifier) , identifier ))) ;) (expression_statement "work->tmpl_argvec[iVar4][sVar5] = '\0';" (assignment_expression "work->tmpl_argvec[iVar4][sVar5] = '\0'" (subscript_expression "work->tmpl_argvec[iVar4][sVar5]" (subscript_expression "work->tmpl_argvec[iVar4]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ]) [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "string_appends(tname,&param,(string *)param.p);" (call_expression "string_appends(tname,&param,(string *)param.p)" identifier (argument_list "(tname,&param,(string *)param.p)" ( identifier , (pointer_expression "&param" & identifier) , (cast_expression "(string *)param.p" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "param.p" identifier . field_identifier)) ))) ;) (if_statement "if (param.b != (char *)0x0) {\n          free(param.b);\n        }" if (parenthesized_expression "(param.b != (char *)0x0)" ( (binary_expression "param.b != (char *)0x0" (field_expression "param.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          free(param.b);\n        }" { (expression_statement "free(param.b);" (call_expression "free(param.b)" identifier (argument_list "(param.b)" ( (field_expression "param.b" identifier . field_identifier) ))) ;) })) }) (else_clause "else {\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }" else (compound_statement "{\n        iVar3 = demangle_template_value_parm(work,mangled,tname,tk);\n        if (iVar3 == 0) goto LAB_001d175f;\n      }" { (expression_statement "iVar3 = demangle_template_value_parm(work,mangled,tname,tk);" (assignment_expression "iVar3 = demangle_template_value_parm(work,mangled,tname,tk)" identifier = (call_expression "demangle_template_value_parm(work,mangled,tname,tk)" identifier (argument_list "(work,mangled,tname,tk)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 == 0) goto LAB_001d175f;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;)) }))) (labeled_statement "LAB_001d1710:\n      iVar4 = iVar4 + 1;" statement_identifier : (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;)) (if_statement "if (r <= iVar4) goto LAB_001d1761;" if (parenthesized_expression "(r <= iVar4)" ( (binary_expression "r <= iVar4" identifier <= identifier) )) (goto_statement "goto LAB_001d1761;" goto statement_identifier ;)) (expression_statement "string_append(tname,", ");" (call_expression "string_append(tname,", ")" identifier (argument_list "(tname,", ")" ( identifier , (string_literal "", "" " string_content ") ))) ;) })) (expression_statement "*mangled = pcVar7 + 1;" (assignment_expression "*mangled = pcVar7 + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "pcVar7 + 1" identifier + number_literal)) ;) (expression_statement "iVar3 = do_type(work,mangled,&temp);" (assignment_expression "iVar3 = do_type(work,mangled,&temp)" identifier = (call_expression "do_type(work,mangled,&temp)" identifier (argument_list "(work,mangled,&temp)" ( identifier , identifier , (pointer_expression "&temp" & identifier) )))) ;) (if_statement "if (iVar3 != 0) {\n      string_appends(tname,&temp,(string *)temp.p);\n      if (is_type == 0) {\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      goto LAB_001d1710;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      string_appends(tname,&temp,(string *)temp.p);\n      if (is_type == 0) {\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }\n      if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }\n      goto LAB_001d1710;\n    }" { (expression_statement "string_appends(tname,&temp,(string *)temp.p);" (call_expression "string_appends(tname,&temp,(string *)temp.p)" identifier (argument_list "(tname,&temp,(string *)temp.p)" ( identifier , (pointer_expression "&temp" & identifier) , (cast_expression "(string *)temp.p" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "temp.p" identifier . field_identifier)) ))) ;) (if_statement "if (is_type == 0) {\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }" if (parenthesized_expression "(is_type == 0)" ( (binary_expression "is_type == 0" identifier == number_literal) )) (compound_statement "{\n        sVar5 = (int)temp.p - (int)temp.b;\n        ppcVar2 = work->tmpl_argvec;\n        pcVar7 = (char *)xmalloc(sVar5 + 1);\n        ppcVar2[iVar4] = pcVar7;\n        memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);\n        work->tmpl_argvec[iVar4][sVar5] = '\0';\n      }" { (expression_statement "sVar5 = (int)temp.p - (int)temp.b;" (assignment_expression "sVar5 = (int)temp.p - (int)temp.b" identifier = (binary_expression "(int)temp.p - (int)temp.b" (cast_expression "(int)temp.p" ( (type_descriptor "int" primitive_type) ) (field_expression "temp.p" identifier . field_identifier)) - (cast_expression "(int)temp.b" ( (type_descriptor "int" primitive_type) ) (field_expression "temp.b" identifier . field_identifier)))) ;) (expression_statement "ppcVar2 = work->tmpl_argvec;" (assignment_expression "ppcVar2 = work->tmpl_argvec" identifier = (field_expression "work->tmpl_argvec" identifier -> field_identifier)) ;) (expression_statement "pcVar7 = (char *)xmalloc(sVar5 + 1);" (assignment_expression "pcVar7 = (char *)xmalloc(sVar5 + 1)" identifier = (cast_expression "(char *)xmalloc(sVar5 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(sVar5 + 1)" identifier (argument_list "(sVar5 + 1)" ( (binary_expression "sVar5 + 1" identifier + number_literal) ))))) ;) (expression_statement "ppcVar2[iVar4] = pcVar7;" (assignment_expression "ppcVar2[iVar4] = pcVar7" (subscript_expression "ppcVar2[iVar4]" identifier [ identifier ]) = identifier) ;) (expression_statement "memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5);" (call_expression "memcpy(work->tmpl_argvec[iVar4],temp.b,sVar5)" identifier (argument_list "(work->tmpl_argvec[iVar4],temp.b,sVar5)" ( (subscript_expression "work->tmpl_argvec[iVar4]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ]) , (field_expression "temp.b" identifier . field_identifier) , identifier ))) ;) (expression_statement "work->tmpl_argvec[iVar4][sVar5] = '\0';" (assignment_expression "work->tmpl_argvec[iVar4][sVar5] = '\0'" (subscript_expression "work->tmpl_argvec[iVar4][sVar5]" (subscript_expression "work->tmpl_argvec[iVar4]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ]) [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) })) (if_statement "if (temp.b != (char *)0x0) {\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }" if (parenthesized_expression "(temp.b != (char *)0x0)" ( (binary_expression "temp.b != (char *)0x0" (field_expression "temp.b" identifier . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(temp.b);\n        temp.p = (char *)0x0;\n        temp.e = (char *)0x0;\n        temp.b = (char *)0x0;\n      }" { (expression_statement "free(temp.b);" (call_expression "free(temp.b)" identifier (argument_list "(temp.b)" ( (field_expression "temp.b" identifier . field_identifier) ))) ;) (expression_statement "temp.p = (char *)0x0;" (assignment_expression "temp.p = (char *)0x0" (field_expression "temp.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "temp.e = (char *)0x0;" (assignment_expression "temp.e = (char *)0x0" (field_expression "temp.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "temp.b = (char *)0x0;" (assignment_expression "temp.b = (char *)0x0" (field_expression "temp.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (goto_statement "goto LAB_001d1710;" goto statement_identifier ;) })) (if_statement "if (temp.b == (char *)0x0) {\nLAB_001d175f:\n      iVar3 = 0;\n    }\n    else {\n      free(temp.b);\n      temp.p = (char *)0x0;\n      temp.e = (char *)0x0;\n      temp.b = (char *)0x0;\n    }" if (parenthesized_expression "(temp.b == (char *)0x0)" ( (binary_expression "temp.b == (char *)0x0" (field_expression "temp.b" identifier . field_identifier) == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_001d175f:\n      iVar3 = 0;\n    }" { (labeled_statement "LAB_001d175f:\n      iVar3 = 0;" statement_identifier : (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;)) }) (else_clause "else {\n      free(temp.b);\n      temp.p = (char *)0x0;\n      temp.e = (char *)0x0;\n      temp.b = (char *)0x0;\n    }" else (compound_statement "{\n      free(temp.b);\n      temp.p = (char *)0x0;\n      temp.e = (char *)0x0;\n      temp.b = (char *)0x0;\n    }" { (expression_statement "free(temp.b);" (call_expression "free(temp.b)" identifier (argument_list "(temp.b)" ( (field_expression "temp.b" identifier . field_identifier) ))) ;) (expression_statement "temp.p = (char *)0x0;" (assignment_expression "temp.p = (char *)0x0" (field_expression "temp.p" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "temp.e = (char *)0x0;" (assignment_expression "temp.e = (char *)0x0" (field_expression "temp.e" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "temp.b = (char *)0x0;" (assignment_expression "temp.b = (char *)0x0" (field_expression "temp.b" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) (labeled_statement "LAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;" statement_identifier : (if_statement "if (local_40 != 0) goto LAB_001d1560;" if (parenthesized_expression "(local_40 != 0)" ( (binary_expression "local_40 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001d1560;" goto statement_identifier ;))) }) (else_clause "else {\n    if (pcVar7[1] != 'z') {\n      iVar3 = consume_count(mangled);\n      if (iVar3 < 1) {\n        return 0;\n      }\n      __s = (byte *)*mangled;\n      r = iVar3;\n      sVar5 = strlen((char *)__s);\n      if ((int)sVar5 < iVar3) {\n        return 0;\n      }\n      bVar10 = false;\n      bVar11 = (work->options & 4) == 0;\n      if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }\n      iVar4 = 8;\n      pbVar8 = __s;\n      pbVar9 = (byte *)"JArray1Z";\n      do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);\n      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;\n      if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }\n      iVar3 = get_count(mangled,&r);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      local_40 = is_type;\n      if (0 < r) goto LAB_001d15e5;\n      iVar3 = 0;\nLAB_001d1560:\n      string_append(tname,"[]");\n      goto LAB_001d178d;\n    }\n    *mangled = pcVar7 + 2;\n    if (pcVar7[2] == '\0') {\n      return 0;\n    }\n    *mangled = pcVar7 + 3;\n    iVar3 = consume_count_with_underscores(mangled);\n    if (iVar3 == -1) {\n      return 0;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)) {\n      return 0;\n    }\n    iVar4 = consume_count_with_underscores(mangled);\n    if (iVar4 == -1) {\n      return 0;\n    }\n    if (work->tmpl_argvec == (char **)0x0) {\n      string_append_template_idx(tname,iVar3);\n      if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }\n    }\n    else {\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }\nLAB_001d1840:\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    if (0 < r) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar3 = 0;\n  }" else (compound_statement "{\n    if (pcVar7[1] != 'z') {\n      iVar3 = consume_count(mangled);\n      if (iVar3 < 1) {\n        return 0;\n      }\n      __s = (byte *)*mangled;\n      r = iVar3;\n      sVar5 = strlen((char *)__s);\n      if ((int)sVar5 < iVar3) {\n        return 0;\n      }\n      bVar10 = false;\n      bVar11 = (work->options & 4) == 0;\n      if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }\n      iVar4 = 8;\n      pbVar8 = __s;\n      pbVar9 = (byte *)"JArray1Z";\n      do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);\n      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;\n      if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }\n      iVar3 = get_count(mangled,&r);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      local_40 = is_type;\n      if (0 < r) goto LAB_001d15e5;\n      iVar3 = 0;\nLAB_001d1560:\n      string_append(tname,"[]");\n      goto LAB_001d178d;\n    }\n    *mangled = pcVar7 + 2;\n    if (pcVar7[2] == '\0') {\n      return 0;\n    }\n    *mangled = pcVar7 + 3;\n    iVar3 = consume_count_with_underscores(mangled);\n    if (iVar3 == -1) {\n      return 0;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)) {\n      return 0;\n    }\n    iVar4 = consume_count_with_underscores(mangled);\n    if (iVar4 == -1) {\n      return 0;\n    }\n    if (work->tmpl_argvec == (char **)0x0) {\n      string_append_template_idx(tname,iVar3);\n      if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }\n    }\n    else {\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }\nLAB_001d1840:\n    string_append(tname,"<");\n    iVar3 = get_count(mangled,&r);\n    if (iVar3 == 0) {\n      return 0;\n    }\n    if (0 < r) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar3 = 0;\n  }" { (if_statement "if (pcVar7[1] != 'z') {\n      iVar3 = consume_count(mangled);\n      if (iVar3 < 1) {\n        return 0;\n      }\n      __s = (byte *)*mangled;\n      r = iVar3;\n      sVar5 = strlen((char *)__s);\n      if ((int)sVar5 < iVar3) {\n        return 0;\n      }\n      bVar10 = false;\n      bVar11 = (work->options & 4) == 0;\n      if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }\n      iVar4 = 8;\n      pbVar8 = __s;\n      pbVar9 = (byte *)"JArray1Z";\n      do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);\n      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;\n      if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }\n      iVar3 = get_count(mangled,&r);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      local_40 = is_type;\n      if (0 < r) goto LAB_001d15e5;\n      iVar3 = 0;\nLAB_001d1560:\n      string_append(tname,"[]");\n      goto LAB_001d178d;\n    }" if (parenthesized_expression "(pcVar7[1] != 'z')" ( (binary_expression "pcVar7[1] != 'z'" (subscript_expression "pcVar7[1]" identifier [ number_literal ]) != (char_literal "'z'" ' character ')) )) (compound_statement "{\n      iVar3 = consume_count(mangled);\n      if (iVar3 < 1) {\n        return 0;\n      }\n      __s = (byte *)*mangled;\n      r = iVar3;\n      sVar5 = strlen((char *)__s);\n      if ((int)sVar5 < iVar3) {\n        return 0;\n      }\n      bVar10 = false;\n      bVar11 = (work->options & 4) == 0;\n      if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }\n      iVar4 = 8;\n      pbVar8 = __s;\n      pbVar9 = (byte *)"JArray1Z";\n      do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);\n      if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;\n      if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }\n      iVar3 = get_count(mangled,&r);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      local_40 = is_type;\n      if (0 < r) goto LAB_001d15e5;\n      iVar3 = 0;\nLAB_001d1560:\n      string_append(tname,"[]");\n      goto LAB_001d178d;\n    }" { (expression_statement "iVar3 = consume_count(mangled);" (assignment_expression "iVar3 = consume_count(mangled)" identifier = (call_expression "consume_count(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if (iVar3 < 1) {\n        return 0;\n      }" if (parenthesized_expression "(iVar3 < 1)" ( (binary_expression "iVar3 < 1" identifier < number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "__s = (byte *)*mangled;" (assignment_expression "__s = (byte *)*mangled" identifier = (cast_expression "(byte *)*mangled" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*mangled" * identifier))) ;) (expression_statement "r = iVar3;" (assignment_expression "r = iVar3" identifier = identifier) ;) (expression_statement "sVar5 = strlen((char *)__s);" (assignment_expression "sVar5 = strlen((char *)__s)" identifier = (call_expression "strlen((char *)__s)" identifier (argument_list "((char *)__s)" ( (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if ((int)sVar5 < iVar3) {\n        return 0;\n      }" if (parenthesized_expression "((int)sVar5 < iVar3)" ( (binary_expression "(int)sVar5 < iVar3" (cast_expression "(int)sVar5" ( (type_descriptor "int" primitive_type) ) identifier) < identifier) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar10 = false;" (assignment_expression "bVar10 = false" identifier = false) ;) (expression_statement "bVar11 = (work->options & 4) == 0;" (assignment_expression "bVar11 = (work->options & 4) == 0" identifier = (binary_expression "(work->options & 4) == 0" (parenthesized_expression "(work->options & 4)" ( (binary_expression "work->options & 4" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) == number_literal)) ;) (if_statement "if (bVar11) {\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }" if (parenthesized_expression "(bVar11)" ( identifier )) (compound_statement "{\nLAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);\n        if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }\n        *mangled = *mangled + r;\n        goto LAB_001d1840;\n      }" { (labeled_statement "LAB_001d1a20:\n        string_appendn(tname,(char *)__s,iVar3);" statement_identifier : (expression_statement "string_appendn(tname,(char *)__s,iVar3);" (call_expression "string_appendn(tname,(char *)__s,iVar3)" identifier (argument_list "(tname,(char *)__s,iVar3)" ( identifier , (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;)) (if_statement "if (trawname != (string *)0x0) {\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }" if (parenthesized_expression "(trawname != (string *)0x0)" ( (binary_expression "trawname != (string *)0x0" identifier != (cast_expression "(string *)0x0" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          if (r == 0) goto LAB_001d1840;\n          string_appendn(trawname,*mangled,r);\n        }" { (if_statement "if (r == 0) goto LAB_001d1840;" if (parenthesized_expression "(r == 0)" ( (binary_expression "r == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d1840;" goto statement_identifier ;)) (expression_statement "string_appendn(trawname,*mangled,r);" (call_expression "string_appendn(trawname,*mangled,r)" identifier (argument_list "(trawname,*mangled,r)" ( identifier , (pointer_expression "*mangled" * identifier) , identifier ))) ;) })) (expression_statement "*mangled = *mangled + r;" (assignment_expression "*mangled = *mangled + r" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + r" (pointer_expression "*mangled" * identifier) + identifier)) ;) (goto_statement "goto LAB_001d1840;" goto statement_identifier ;) })) (expression_statement "iVar4 = 8;" (assignment_expression "iVar4 = 8" identifier = number_literal) ;) (expression_statement "pbVar8 = __s;" (assignment_expression "pbVar8 = __s" identifier = identifier) ;) (expression_statement "pbVar9 = (byte *)"JArray1Z";" (assignment_expression "pbVar9 = (byte *)"JArray1Z"" identifier = (cast_expression "(byte *)"JArray1Z"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""JArray1Z"" " string_content "))) ;) (do_statement "do {\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      } while (bVar11);" do (compound_statement "{\n        if (iVar4 == 0) break;\n        iVar4 = iVar4 + -1;\n        bVar10 = *pbVar8 < *pbVar9;\n        bVar11 = *pbVar8 == *pbVar9;\n        pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;\n        pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;\n      }" { (if_statement "if (iVar4 == 0) break;" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (expression_statement "bVar10 = *pbVar8 < *pbVar9;" (assignment_expression "bVar10 = *pbVar8 < *pbVar9" identifier = (binary_expression "*pbVar8 < *pbVar9" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "bVar11 = *pbVar8 == *pbVar9;" (assignment_expression "bVar11 = *pbVar8 == *pbVar9" identifier = (binary_expression "*pbVar8 == *pbVar9" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar9" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1;" (assignment_expression "pbVar9 = pbVar9 + (uint)bVar12 * -2 + 1" identifier = (binary_expression "pbVar9 + (uint)bVar12 * -2 + 1" (binary_expression "pbVar9 + (uint)bVar12 * -2" identifier + (binary_expression "(uint)bVar12 * -2" (cast_expression "(uint)bVar12" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar11)" ( identifier )) ;) (if_statement "if ((!bVar10 && !bVar11) != bVar10) goto LAB_001d1a20;" if (parenthesized_expression "((!bVar10 && !bVar11) != bVar10)" ( (binary_expression "(!bVar10 && !bVar11) != bVar10" (parenthesized_expression "(!bVar10 && !bVar11)" ( (binary_expression "!bVar10 && !bVar11" (unary_expression "!bVar10" ! identifier) && (unary_expression "!bVar11" ! identifier)) )) != identifier) )) (goto_statement "goto LAB_001d1a20;" goto statement_identifier ;)) (if_statement "if (trawname == (string *)0x0) {\n        *mangled = (char *)(__s + iVar3);\n      }\n      else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }" if (parenthesized_expression "(trawname == (string *)0x0)" ( (binary_expression "trawname == (string *)0x0" identifier == (cast_expression "(string *)0x0" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        *mangled = (char *)(__s + iVar3);\n      }" { (expression_statement "*mangled = (char *)(__s + iVar3);" (assignment_expression "*mangled = (char *)(__s + iVar3)" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)(__s + iVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__s + iVar3)" ( (binary_expression "__s + iVar3" identifier + identifier) )))) ;) }) (else_clause "else {\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }" else (compound_statement "{\n        string_appendn(trawname,(char *)__s,iVar3);\n        *mangled = *mangled + r;\n      }" { (expression_statement "string_appendn(trawname,(char *)__s,iVar3);" (call_expression "string_appendn(trawname,(char *)__s,iVar3)" identifier (argument_list "(trawname,(char *)__s,iVar3)" ( identifier , (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "*mangled = *mangled + r;" (assignment_expression "*mangled = *mangled + r" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + r" (pointer_expression "*mangled" * identifier) + identifier)) ;) }))) (expression_statement "iVar3 = get_count(mangled,&r);" (assignment_expression "iVar3 = get_count(mangled,&r)" identifier = (call_expression "get_count(mangled,&r)" identifier (argument_list "(mangled,&r)" ( identifier , (pointer_expression "&r" & identifier) )))) ;) (if_statement "if (iVar3 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "local_40 = is_type;" (assignment_expression "local_40 = is_type" identifier = identifier) ;) (if_statement "if (0 < r) goto LAB_001d15e5;" if (parenthesized_expression "(0 < r)" ( (binary_expression "0 < r" number_literal < identifier) )) (goto_statement "goto LAB_001d15e5;" goto statement_identifier ;)) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (labeled_statement "LAB_001d1560:\n      string_append(tname,"[]");" statement_identifier : (expression_statement "string_append(tname,"[]");" (call_expression "string_append(tname,"[]")" identifier (argument_list "(tname,"[]")" ( identifier , (string_literal ""[]"" " string_content ") ))) ;)) (goto_statement "goto LAB_001d178d;" goto statement_identifier ;) })) (expression_statement "*mangled = pcVar7 + 2;" (assignment_expression "*mangled = pcVar7 + 2" (pointer_expression "*mangled" * identifier) = (binary_expression "pcVar7 + 2" identifier + number_literal)) ;) (if_statement "if (pcVar7[2] == '\0') {\n      return 0;\n    }" if (parenthesized_expression "(pcVar7[2] == '\0')" ( (binary_expression "pcVar7[2] == '\0'" (subscript_expression "pcVar7[2]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*mangled = pcVar7 + 3;" (assignment_expression "*mangled = pcVar7 + 3" (pointer_expression "*mangled" * identifier) = (binary_expression "pcVar7 + 3" identifier + number_literal)) ;) (expression_statement "iVar3 = consume_count_with_underscores(mangled);" (assignment_expression "iVar3 = consume_count_with_underscores(mangled)" identifier = (call_expression "consume_count_with_underscores(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if (iVar3 == -1) {\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)) {\n      return 0;\n    }" if (parenthesized_expression "((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3))" ( (binary_expression "(work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar3)" (parenthesized_expression "(work->tmpl_argvec != (char **)0x0)" ( (binary_expression "work->tmpl_argvec != (char **)0x0" (field_expression "work->tmpl_argvec" identifier -> field_identifier) != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) && (parenthesized_expression "(work->ntmpl_args <= iVar3)" ( (binary_expression "work->ntmpl_args <= iVar3" (field_expression "work->ntmpl_args" identifier -> field_identifier) <= identifier) ))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar4 = consume_count_with_underscores(mangled);" (assignment_expression "iVar4 = consume_count_with_underscores(mangled)" identifier = (call_expression "consume_count_with_underscores(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) {\n      return 0;\n    }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (work->tmpl_argvec == (char **)0x0) {\n      string_append_template_idx(tname,iVar3);\n      if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }\n    }\n    else {\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }" if (parenthesized_expression "(work->tmpl_argvec == (char **)0x0)" ( (binary_expression "work->tmpl_argvec == (char **)0x0" (field_expression "work->tmpl_argvec" identifier -> field_identifier) == (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      string_append_template_idx(tname,iVar3);\n      if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }\n    }" { (expression_statement "string_append_template_idx(tname,iVar3);" (call_expression "string_append_template_idx(tname,iVar3)" identifier (argument_list "(tname,iVar3)" ( identifier , identifier ))) ;) (if_statement "if (trawname != (string *)0x0) {\n        string_append_template_idx(trawname,iVar3);\n      }" if (parenthesized_expression "(trawname != (string *)0x0)" ( (binary_expression "trawname != (string *)0x0" identifier != (cast_expression "(string *)0x0" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        string_append_template_idx(trawname,iVar3);\n      }" { (expression_statement "string_append_template_idx(trawname,iVar3);" (call_expression "string_append_template_idx(trawname,iVar3)" identifier (argument_list "(trawname,iVar3)" ( identifier , identifier ))) ;) })) }) (else_clause "else {\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }" else (compound_statement "{\n      pcVar7 = work->tmpl_argvec[iVar3];\n      if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }\n    }" { (expression_statement "pcVar7 = work->tmpl_argvec[iVar3];" (assignment_expression "pcVar7 = work->tmpl_argvec[iVar3]" identifier = (subscript_expression "work->tmpl_argvec[iVar3]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ])) ;) (if_statement "if ((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))) {\n        string_append(trawname,pcVar7);\n      }" if (parenthesized_expression "((((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0'))))" ( (binary_expression "(((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)) &&\n         ((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))" (parenthesized_expression "(((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0))" ( (binary_expression "((pcVar7 != (char *)0x0) && (*pcVar7 != '\0')) &&\n          (string_append(tname,pcVar7), trawname != (string *)0x0)" (parenthesized_expression "((pcVar7 != (char *)0x0) && (*pcVar7 != '\0'))" ( (binary_expression "(pcVar7 != (char *)0x0) && (*pcVar7 != '\0')" (parenthesized_expression "(pcVar7 != (char *)0x0)" ( (binary_expression "pcVar7 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar7 != '\0')" ( (binary_expression "*pcVar7 != '\0'" (pointer_expression "*pcVar7" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(string_append(tname,pcVar7), trawname != (string *)0x0)" ( (comma_expression "string_append(tname,pcVar7), trawname != (string *)0x0" (call_expression "string_append(tname,pcVar7)" identifier (argument_list "(tname,pcVar7)" ( identifier , identifier ))) , (binary_expression "trawname != (string *)0x0" identifier != (cast_expression "(string *)0x0" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) && (parenthesized_expression "((pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')))" ( (parenthesized_expression "(pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0'))" ( (comma_expression "pcVar7 = work->tmpl_argvec[iVar3], pcVar7 != (char *)0x0 && (*pcVar7 != '\0')" (assignment_expression "pcVar7 = work->tmpl_argvec[iVar3]" identifier = (subscript_expression "work->tmpl_argvec[iVar3]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ])) , (binary_expression "pcVar7 != (char *)0x0 && (*pcVar7 != '\0')" (binary_expression "pcVar7 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(*pcVar7 != '\0')" ( (binary_expression "*pcVar7 != '\0'" (pointer_expression "*pcVar7" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )))) )) ))) )) (compound_statement "{\n        string_append(trawname,pcVar7);\n      }" { (expression_statement "string_append(trawname,pcVar7);" (call_expression "string_append(trawname,pcVar7)" identifier (argument_list "(trawname,pcVar7)" ( identifier , identifier ))) ;) })) }))) (labeled_statement "LAB_001d1840:\n    string_append(tname,"<");" statement_identifier : (expression_statement "string_append(tname,"<");" (call_expression "string_append(tname,"<")" identifier (argument_list "(tname,"<")" ( identifier , (string_literal ""<"" " string_content ") ))) ;)) (expression_statement "iVar3 = get_count(mangled,&r);" (assignment_expression "iVar3 = get_count(mangled,&r)" identifier = (call_expression "get_count(mangled,&r)" identifier (argument_list "(mangled,&r)" ( identifier , (pointer_expression "&r" & identifier) )))) ;) (if_statement "if (iVar3 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (0 < r) goto LAB_001d15dd;" if (parenthesized_expression "(0 < r)" ( (binary_expression "0 < r" number_literal < identifier) )) (goto_statement "goto LAB_001d15dd;" goto statement_identifier ;)) (labeled_statement "LAB_001d186e:\n    iVar3 = 0;" statement_identifier : (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;)) }))) (if_statement "if (tname->p[-1] == '>') {\n    string_append(tname," ");\n  }" if (parenthesized_expression "(tname->p[-1] == '>')" ( (binary_expression "tname->p[-1] == '>'" (subscript_expression "tname->p[-1]" (field_expression "tname->p" identifier -> field_identifier) [ number_literal ]) == (char_literal "'>'" ' character ')) )) (compound_statement "{\n    string_append(tname," ");\n  }" { (expression_statement "string_append(tname," ");" (call_expression "string_append(tname," ")" identifier (argument_list "(tname," ")" ( identifier , (string_literal "" "" " string_content ") ))) ;) })) (expression_statement "string_append(tname,">");" (call_expression "string_append(tname,">")" identifier (argument_list "(tname,">")" ( identifier , (string_literal "">"" " string_content ") ))) ;) (labeled_statement "LAB_001d178d:\n  if ((is_type & remember) != 0) {\n    iVar4 = register_Btype(work);\n    pcVar7 = tname->b;\n    len = (int)tname->p - (int)pcVar7;\n    if (pcVar7 == tname->p) {\n      len = 0;\n    }\n    remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4);\n    return iVar3;\n  }" statement_identifier : (if_statement "if ((is_type & remember) != 0) {\n    iVar4 = register_Btype(work);\n    pcVar7 = tname->b;\n    len = (int)tname->p - (int)pcVar7;\n    if (pcVar7 == tname->p) {\n      len = 0;\n    }\n    remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4);\n    return iVar3;\n  }" if (parenthesized_expression "((is_type & remember) != 0)" ( (binary_expression "(is_type & remember) != 0" (parenthesized_expression "(is_type & remember)" ( (binary_expression "is_type & remember" identifier & identifier) )) != number_literal) )) (compound_statement "{\n    iVar4 = register_Btype(work);\n    pcVar7 = tname->b;\n    len = (int)tname->p - (int)pcVar7;\n    if (pcVar7 == tname->p) {\n      len = 0;\n    }\n    remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4);\n    return iVar3;\n  }" { (expression_statement "iVar4 = register_Btype(work);" (assignment_expression "iVar4 = register_Btype(work)" identifier = (call_expression "register_Btype(work)" identifier (argument_list "(work)" ( identifier )))) ;) (expression_statement "pcVar7 = tname->b;" (assignment_expression "pcVar7 = tname->b" identifier = (field_expression "tname->b" identifier -> field_identifier)) ;) (expression_statement "len = (int)tname->p - (int)pcVar7;" (assignment_expression "len = (int)tname->p - (int)pcVar7" identifier = (binary_expression "(int)tname->p - (int)pcVar7" (cast_expression "(int)tname->p" ( (type_descriptor "int" primitive_type) ) (field_expression "tname->p" identifier -> field_identifier)) - (cast_expression "(int)pcVar7" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (if_statement "if (pcVar7 == tname->p) {\n      len = 0;\n    }" if (parenthesized_expression "(pcVar7 == tname->p)" ( (binary_expression "pcVar7 == tname->p" identifier == (field_expression "tname->p" identifier -> field_identifier)) )) (compound_statement "{\n      len = 0;\n    }" { (expression_statement "len = 0;" (assignment_expression "len = 0" identifier = number_literal) ;) })) (expression_statement "remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4);" (call_expression "remember_Btype((work_stuff *)&work->btypevec,pcVar7,len,iVar4)" identifier (argument_list "((work_stuff *)&work->btypevec,pcVar7,len,iVar4)" ( (cast_expression "(work_stuff *)&work->btypevec" ( (type_descriptor "work_stuff *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&work->btypevec" & (field_expression "work->btypevec" identifier -> field_identifier))) , identifier , identifier , identifier ))) ;) (return_statement "return iVar3;" return identifier ;) }))) (return_statement "return iVar3;" return identifier ;) })))
(translation_unit "int __regparm3\nFUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)\n\n{\n  undefined4 *puVar1;\n  byte *__s;\n  char *pcVar2;\n  int iVar3;\n  undefined4 *puVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  size_t sVar8;\n  size_t sVar9;\n  byte *pbVar10;\n  byte *pbVar11;\n  bool bVar12;\n  bool bVar13;\n  byte bVar14;\n  uint local_40;\n  int local_38;\n  void *local_34;\n  int local_30;\n  \n  bVar14 = 0;\n  iVar6 = *param_2;\n  *param_2 = iVar6 + 1;\n  if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }\n  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }\n  FUN_001ce240();\nLAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }\n  return iVar6;\n}\n\n" (function_definition "int __regparm3\nFUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)\n\n{\n  undefined4 *puVar1;\n  byte *__s;\n  char *pcVar2;\n  int iVar3;\n  undefined4 *puVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  size_t sVar8;\n  size_t sVar9;\n  byte *pbVar10;\n  byte *pbVar11;\n  bool bVar12;\n  bool bVar13;\n  byte bVar14;\n  uint local_40;\n  int local_38;\n  void *local_34;\n  int local_30;\n  \n  bVar14 = 0;\n  iVar6 = *param_2;\n  *param_2 = iVar6 + 1;\n  if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }\n  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }\n  FUN_001ce240();\nLAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }\n  return iVar6;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)" identifier (parameter_list "(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "uint param_5" type_identifier identifier) , (parameter_declaration "uint param_6" type_identifier identifier) ))) (compound_statement "{\n  undefined4 *puVar1;\n  byte *__s;\n  char *pcVar2;\n  int iVar3;\n  undefined4 *puVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  size_t sVar8;\n  size_t sVar9;\n  byte *pbVar10;\n  byte *pbVar11;\n  bool bVar12;\n  bool bVar13;\n  byte bVar14;\n  uint local_40;\n  int local_38;\n  void *local_34;\n  int local_30;\n  \n  bVar14 = 0;\n  iVar6 = *param_2;\n  *param_2 = iVar6 + 1;\n  if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }\n  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }\n  FUN_001ce240();\nLAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }\n  return iVar6;\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "byte *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined4 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "size_t sVar8;" primitive_type identifier ;) (declaration "size_t sVar9;" primitive_type identifier ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "byte *pbVar11;" type_identifier (pointer_declarator "*pbVar11" * identifier) ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "bool bVar13;" primitive_type identifier ;) (declaration "byte bVar14;" type_identifier identifier ;) (declaration "uint local_40;" type_identifier identifier ;) (declaration "int local_38;" primitive_type identifier ;) (declaration "void *local_34;" primitive_type (pointer_declarator "*local_34" * identifier) ;) (declaration "int local_30;" primitive_type identifier ;) (expression_statement "bVar14 = 0;" (assignment_expression "bVar14 = 0" identifier = number_literal) ;) (expression_statement "iVar6 = *param_2;" (assignment_expression "iVar6 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "*param_2 = iVar6 + 1;" (assignment_expression "*param_2 = iVar6 + 1" (pointer_expression "*param_2" * identifier) = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }" { (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" identifier = (call_expression "FUN_001cd950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);" (assignment_expression "puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2)" identifier = (cast_expression "(undefined4 *)FUN_001e4cd0(local_38 << 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_001e4cd0(local_38 << 2)" identifier (argument_list "(local_38 << 2)" ( (binary_expression "local_38 << 2" identifier << number_literal) ))))) ;) (expression_statement "*(undefined4 **)(param_1 + 0x40) = puVar4;" (assignment_expression "*(undefined4 **)(param_1 + 0x40) = puVar4" (pointer_expression "*(undefined4 **)(param_1 + 0x40)" * (cast_expression "(undefined4 **)(param_1 + 0x40)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x44) = local_38;" (assignment_expression "*(int *)(param_1 + 0x44) = local_38" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_38 < 1) goto LAB_001d186e;" if (parenthesized_expression "(local_38 < 1)" ( (binary_expression "local_38 < 1" identifier < number_literal) )) (goto_statement "goto LAB_001d186e;" goto statement_identifier ;)) (expression_statement "puVar1 = puVar4 + local_38;" (assignment_expression "puVar1 = puVar4 + local_38" identifier = (binary_expression "puVar4 + local_38" identifier + identifier)) ;) (do_statement "do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);" do (compound_statement "{\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    }" { (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar1 != puVar4)" ( (binary_expression "puVar1 != puVar4" identifier != identifier) )) ;) (labeled_statement "LAB_001d15dd:\n    local_40 = 0;" statement_identifier : (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_001d15e5:\n    iVar7 = 0;" statement_identifier : (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;)) (while_statement "while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }" { (expression_statement "pcVar2 = (char *)*param_2;" (assignment_expression "pcVar2 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (*pcVar2 == 'Z') break;" if (parenthesized_expression "(*pcVar2 == 'Z')" ( (binary_expression "*pcVar2 == 'Z'" (pointer_expression "*pcVar2" * identifier) == (char_literal "'Z'" ' character ')) )) (break_statement "break;" break ;)) (if_statement "if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }" if (parenthesized_expression "(*pcVar2 == 'z')" ( (binary_expression "*pcVar2 == 'z'" (pointer_expression "*pcVar2" * identifier) == (char_literal "'z'" ' character ')) )) (compound_statement "{\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }" { (expression_statement "*param_2 = (int)(pcVar2 + 1);" (assignment_expression "*param_2 = (int)(pcVar2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(pcVar2 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pcVar2 + 1)" ( (binary_expression "pcVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "iVar6 = FUN_001d12b0();" (assignment_expression "iVar6 = FUN_001d12b0()" identifier = (call_expression "FUN_001d12b0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }" { (expression_statement "sVar8 = FUN_001cddf0();" (assignment_expression "sVar8 = FUN_001cddf0()" identifier = (call_expression "FUN_001cddf0()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }" if (parenthesized_expression "((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9))" ( (binary_expression "(0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)" (parenthesized_expression "(0 < (int)sVar8)" ( (binary_expression "0 < (int)sVar8" number_literal < (cast_expression "(int)sVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)" ( (comma_expression "sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9" (assignment_expression "sVar9 = strlen((char *)*param_2)" identifier = (call_expression "strlen((char *)*param_2)" identifier (argument_list "((char *)*param_2)" ( (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) )))) , (binary_expression "(int)sVar8 <= (int)sVar9" (cast_expression "(int)sVar8" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)sVar9" ( (type_descriptor "int" primitive_type) ) identifier))) ))) )) (compound_statement "{\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }" { (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }" { (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" identifier = (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = FUN_001e4cd0(sVar8 + 1);" (assignment_expression "uVar5 = FUN_001e4cd0(sVar8 + 1)" identifier = (call_expression "FUN_001e4cd0(sVar8 + 1)" identifier (argument_list "(sVar8 + 1)" ( (binary_expression "sVar8 + 1" identifier + number_literal) )))) ;) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" * (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + iVar7 * 4)" ( (binary_expression "iVar3 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8)" identifier (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8)" ( (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) , (cast_expression "(void *)*param_2" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) , identifier ))) ;) (expression_statement "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;" (assignment_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0" (pointer_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" * (cast_expression "(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) + identifier) )))) = number_literal) ;) })) (expression_statement "*param_2 = *param_2 + sVar8;" (assignment_expression "*param_2 = *param_2 + sVar8" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + sVar8" (pointer_expression "*param_2" * identifier) + identifier)) ;) })) (goto_statement "goto LAB_001d1710;" goto statement_identifier ;) })) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;) })) (expression_statement "iVar6 = FUN_001cf7c0();" (assignment_expression "iVar6 = FUN_001cf7c0()" identifier = (call_expression "FUN_001cf7c0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" if (parenthesized_expression "(local_34 != (void *)0x0)" ( (binary_expression "local_34 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" { (expression_statement "free(local_34);" (call_expression "free(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_34 = (void *)0x0;" (assignment_expression "local_34 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;)) (if_statement "if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }" { (expression_statement "iVar6 = FUN_001cf0b0(iVar6);" (assignment_expression "iVar6 = FUN_001cf0b0(iVar6)" identifier = (call_expression "FUN_001cf0b0(iVar6)" identifier (argument_list "(iVar6)" ( identifier )))) ;) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;)) (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" identifier = (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = FUN_001e4cd0(1);" (assignment_expression "uVar5 = FUN_001e4cd0(1)" identifier = (call_expression "FUN_001e4cd0(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" * (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + iVar7 * 4)" ( (binary_expression "iVar3 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0)" identifier (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0)" ( (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) , (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , number_literal ))) ;) (expression_statement "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;" (assignment_expression "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0" (pointer_expression "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (pointer_expression "*(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))) = number_literal) ;) (expression_statement "FUN_001ce390();" (call_expression "FUN_001ce390()" identifier (argument_list "()" ( ))) ;) }) (else_clause "else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" else (compound_statement "{\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" { (expression_statement "iVar6 = FUN_001cf0b0(iVar6);" (assignment_expression "iVar6 = FUN_001cf0b0(iVar6)" identifier = (call_expression "FUN_001cf0b0(iVar6)" identifier (argument_list "(iVar6)" ( identifier )))) ;) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d175f;" goto statement_identifier ;)) }))) (labeled_statement "LAB_001d1710:\n      iVar7 = iVar7 + 1;" statement_identifier : (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;)) (if_statement "if (local_38 <= iVar7) goto LAB_001d1761;" if (parenthesized_expression "(local_38 <= iVar7)" ( (binary_expression "local_38 <= iVar7" identifier <= identifier) )) (goto_statement "goto LAB_001d1761;" goto statement_identifier ;)) (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*param_2 = (int)(pcVar2 + 1);" (assignment_expression "*param_2 = (int)(pcVar2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(pcVar2 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pcVar2 + 1)" ( (binary_expression "pcVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "iVar6 = FUN_001cf7c0();" (assignment_expression "iVar6 = FUN_001cf7c0()" identifier = (call_expression "FUN_001cf7c0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }" { (expression_statement "FUN_001ce390();" (call_expression "FUN_001ce390()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }" if (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) (compound_statement "{\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }" { (expression_statement "sVar8 = local_30 - (int)local_34;" (assignment_expression "sVar8 = local_30 - (int)local_34" identifier = (binary_expression "local_30 - (int)local_34" identifier - (cast_expression "(int)local_34" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" identifier = (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = FUN_001e4cd0(sVar8 + 1);" (assignment_expression "uVar5 = FUN_001e4cd0(sVar8 + 1)" identifier = (call_expression "FUN_001e4cd0(sVar8 + 1)" identifier (argument_list "(sVar8 + 1)" ( (binary_expression "sVar8 + 1" identifier + number_literal) )))) ;) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" * (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + iVar7 * 4)" ( (binary_expression "iVar3 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8)" identifier (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8)" ( (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) , identifier , identifier ))) ;) (expression_statement "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;" (assignment_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0" (pointer_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" * (cast_expression "(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar7 * 4" identifier * number_literal)) )))) + identifier) )))) = number_literal) ;) })) (if_statement "if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" if (parenthesized_expression "(local_34 != (void *)0x0)" ( (binary_expression "local_34 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" { (expression_statement "free(local_34);" (call_expression "free(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (expression_statement "local_34 = (void *)0x0;" (assignment_expression "local_34 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (goto_statement "goto LAB_001d1710;" goto statement_identifier ;) })) (if_statement "if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }" if (parenthesized_expression "(local_34 == (void *)0x0)" ( (binary_expression "local_34 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_001d175f:\n      iVar6 = 0;\n    }" { (labeled_statement "LAB_001d175f:\n      iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) }) (else_clause "else {\n      free(local_34);\n    }" else (compound_statement "{\n      free(local_34);\n    }" { (expression_statement "free(local_34);" (call_expression "free(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) }))) (labeled_statement "LAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;" statement_identifier : (if_statement "if (local_40 != 0) goto LAB_001d1560;" if (parenthesized_expression "(local_40 != 0)" ( (binary_expression "local_40 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001d1560;" goto statement_identifier ;))) }) (else_clause "else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" else (compound_statement "{\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" { (if_statement "if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }" if (parenthesized_expression "(*(char *)(iVar6 + 1) != 'z')" ( (binary_expression "*(char *)(iVar6 + 1) != 'z'" (pointer_expression "*(char *)(iVar6 + 1)" * (cast_expression "(char *)(iVar6 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 1)" ( (binary_expression "iVar6 + 1" identifier + number_literal) )))) != (char_literal "'z'" ' character ')) )) (compound_statement "{\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }" { (expression_statement "local_38 = FUN_001cddf0();" (assignment_expression "local_38 = FUN_001cddf0()" identifier = (call_expression "FUN_001cddf0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (local_38 < 1) {\n        return 0;\n      }" if (parenthesized_expression "(local_38 < 1)" ( (binary_expression "local_38 < 1" identifier < number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "__s = (byte *)*param_2;" (assignment_expression "__s = (byte *)*param_2" identifier = (cast_expression "(byte *)*param_2" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "sVar8 = strlen((char *)__s);" (assignment_expression "sVar8 = strlen((char *)__s)" identifier = (call_expression "strlen((char *)__s)" identifier (argument_list "((char *)__s)" ( (cast_expression "(char *)__s" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if ((int)sVar8 < local_38) {\n        return 0;\n      }" if (parenthesized_expression "((int)sVar8 < local_38)" ( (binary_expression "(int)sVar8 < local_38" (cast_expression "(int)sVar8" ( (type_descriptor "int" primitive_type) ) identifier) < identifier) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" identifier = false) ;) (expression_statement "bVar13 = (*param_1 & 4) == 0;" (assignment_expression "bVar13 = (*param_1 & 4) == 0" identifier = (binary_expression "(*param_1 & 4) == 0" (parenthesized_expression "(*param_1 & 4)" ( (binary_expression "*param_1 & 4" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal)) ;) (if_statement "if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }" if (parenthesized_expression "(bVar13)" ( identifier )) (compound_statement "{\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }" { (labeled_statement "LAB_001d1a20:\n        FUN_001ce160();" statement_identifier : (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" identifier (argument_list "()" ( ))) ;)) (if_statement "if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }" if (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) (compound_statement "{\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }" { (if_statement "if (local_38 == 0) goto LAB_001d1840;" if (parenthesized_expression "(local_38 == 0)" ( (binary_expression "local_38 == 0" identifier == number_literal) )) (goto_statement "goto LAB_001d1840;" goto statement_identifier ;)) (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*param_2 = *param_2 + local_38;" (assignment_expression "*param_2 = *param_2 + local_38" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + local_38" (pointer_expression "*param_2" * identifier) + identifier)) ;) (goto_statement "goto LAB_001d1840;" goto statement_identifier ;) })) (expression_statement "iVar6 = 8;" (assignment_expression "iVar6 = 8" identifier = number_literal) ;) (expression_statement "pbVar10 = __s;" (assignment_expression "pbVar10 = __s" identifier = identifier) ;) (expression_statement "pbVar11 = (byte *)"JArray1Z";" (assignment_expression "pbVar11 = (byte *)"JArray1Z"" identifier = (cast_expression "(byte *)"JArray1Z"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""JArray1Z"" " string_content "))) ;) (do_statement "do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);" do (compound_statement "{\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      }" { (if_statement "if (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "bVar12 = *pbVar10 < *pbVar11;" (assignment_expression "bVar12 = *pbVar10 < *pbVar11" identifier = (binary_expression "*pbVar10 < *pbVar11" (pointer_expression "*pbVar10" * identifier) < (pointer_expression "*pbVar11" * identifier))) ;) (expression_statement "bVar13 = *pbVar10 == *pbVar11;" (assignment_expression "bVar13 = *pbVar10 == *pbVar11" identifier = (binary_expression "*pbVar10 == *pbVar11" (pointer_expression "*pbVar10" * identifier) == (pointer_expression "*pbVar11" * identifier))) ;) (expression_statement "pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1" identifier = (binary_expression "pbVar10 + (uint)bVar14 * -2 + 1" (binary_expression "pbVar10 + (uint)bVar14 * -2" identifier + (binary_expression "(uint)bVar14 * -2" (cast_expression "(uint)bVar14" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;" (assignment_expression "pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1" identifier = (binary_expression "pbVar11 + (uint)bVar14 * -2 + 1" (binary_expression "pbVar11 + (uint)bVar14 * -2" identifier + (binary_expression "(uint)bVar14 * -2" (cast_expression "(uint)bVar14" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar13)" ( identifier )) ;) (if_statement "if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;" if (parenthesized_expression "((!bVar12 && !bVar13) != bVar12)" ( (binary_expression "(!bVar12 && !bVar13) != bVar12" (parenthesized_expression "(!bVar12 && !bVar13)" ( (binary_expression "!bVar12 && !bVar13" (unary_expression "!bVar12" ! identifier) && (unary_expression "!bVar13" ! identifier)) )) != identifier) )) (goto_statement "goto LAB_001d1a20;" goto statement_identifier ;)) (if_statement "if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        *param_2 = (int)(__s + local_38);\n      }" { (expression_statement "*param_2 = (int)(__s + local_38);" (assignment_expression "*param_2 = (int)(__s + local_38)" (pointer_expression "*param_2" * identifier) = (cast_expression "(int)(__s + local_38)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(__s + local_38)" ( (binary_expression "__s + local_38" identifier + identifier) )))) ;) }) (else_clause "else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" else (compound_statement "{\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" { (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" identifier (argument_list "()" ( ))) ;) (expression_statement "*param_2 = *param_2 + local_38;" (assignment_expression "*param_2 = *param_2 + local_38" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + local_38" (pointer_expression "*param_2" * identifier) + identifier)) ;) }))) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" identifier = (call_expression "FUN_001cd950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "local_40 = param_5;" (assignment_expression "local_40 = param_5" identifier = identifier) ;) (if_statement "if (0 < local_38) goto LAB_001d15e5;" if (parenthesized_expression "(0 < local_38)" ( (binary_expression "0 < local_38" number_literal < identifier) )) (goto_statement "goto LAB_001d15e5;" goto statement_identifier ;)) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (labeled_statement "LAB_001d1560:\n      FUN_001ce240();" statement_identifier : (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;)) (goto_statement "goto LAB_001d178d;" goto statement_identifier ;) })) (expression_statement "*param_2 = iVar6 + 2;" (assignment_expression "*param_2 = iVar6 + 2" (pointer_expression "*param_2" * identifier) = (binary_expression "iVar6 + 2" identifier + number_literal)) ;) (if_statement "if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }" if (parenthesized_expression "(*(char *)(iVar6 + 2) == '\0')" ( (binary_expression "*(char *)(iVar6 + 2) == '\0'" (pointer_expression "*(char *)(iVar6 + 2)" * (cast_expression "(char *)(iVar6 + 2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 2)" ( (binary_expression "iVar6 + 2" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_2 = iVar6 + 3;" (assignment_expression "*param_2 = iVar6 + 3" (pointer_expression "*param_2" * identifier) = (binary_expression "iVar6 + 3" identifier + number_literal)) ;) (expression_statement "iVar6 = FUN_001cdea0();" (assignment_expression "iVar6 = FUN_001cdea0()" identifier = (call_expression "FUN_001cdea0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == -1) {\n      return 0;\n    }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }" if (parenthesized_expression "((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6))" ( (binary_expression "(*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)" (parenthesized_expression "(*(int *)(param_1 + 0x40) != 0)" ( (binary_expression "*(int *)(param_1 + 0x40) != 0" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "(*(int *)(param_1 + 0x44) <= iVar6)" ( (binary_expression "*(int *)(param_1 + 0x44) <= iVar6" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) <= identifier) ))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar7 = FUN_001cdea0();" (assignment_expression "iVar7 = FUN_001cdea0()" identifier = (call_expression "FUN_001cdea0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar7 == -1) {\n      return 0;\n    }" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x40) == 0)" ( (binary_expression "*(int *)(param_1 + 0x40) == 0" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }" { (expression_statement "FUN_001ce290();" (call_expression "FUN_001ce290()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_4 != 0) {\n        FUN_001ce290();\n      }" if (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) (compound_statement "{\n        FUN_001ce290();\n      }" { (expression_statement "FUN_001ce290();" (call_expression "FUN_001ce290()" identifier (argument_list "()" ( ))) ;) })) }) (else_clause "else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" else (compound_statement "{\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" { (expression_statement "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);" (assignment_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" identifier = (pointer_expression "*(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" * (cast_expression "(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar6 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar6 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar6 * 4" identifier * number_literal)) ))))) ;) (if_statement "if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }" if (parenthesized_expression "((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0'))))" ( (binary_expression "(((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))" (parenthesized_expression "(((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0))" ( (binary_expression "((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)" (parenthesized_expression "((pcVar2 != (char *)0x0) && (*pcVar2 != '\0'))" ( (binary_expression "(pcVar2 != (char *)0x0) && (*pcVar2 != '\0')" (parenthesized_expression "(pcVar2 != (char *)0x0)" ( (binary_expression "pcVar2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar2 != '\0')" ( (binary_expression "*pcVar2 != '\0'" (pointer_expression "*pcVar2" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(FUN_001ce240(), param_4 != 0)" ( (comma_expression "FUN_001ce240(), param_4 != 0" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) , (binary_expression "param_4 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))" ( (parenthesized_expression "(pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0'))" ( (comma_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')" (assignment_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" identifier = (pointer_expression "*(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" * (cast_expression "(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar6 * 4)" ( (binary_expression "*(int *)(param_1 + 0x40) + iVar6 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + (binary_expression "iVar6 * 4" identifier * number_literal)) ))))) , (binary_expression "pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')" (binary_expression "pcVar2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(*pcVar2 != '\0')" ( (binary_expression "*pcVar2 != '\0'" (pointer_expression "*pcVar2" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )))) )) ))) )) (compound_statement "{\n        FUN_001ce240();\n      }" { (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) })) }))) (labeled_statement "LAB_001d1840:\n    FUN_001ce240();" statement_identifier : (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;)) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" identifier = (call_expression "FUN_001cd950()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (0 < local_38) goto LAB_001d15dd;" if (parenthesized_expression "(0 < local_38)" ( (binary_expression "0 < local_38" number_literal < identifier) )) (goto_statement "goto LAB_001d15dd;" goto statement_identifier ;)) (labeled_statement "LAB_001d186e:\n    iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) }))) (if_statement "if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }" if (parenthesized_expression "(*(char *)(*(int *)(param_3 + 4) + -1) == '>')" ( (binary_expression "*(char *)(*(int *)(param_3 + 4) + -1) == '>'" (pointer_expression "*(char *)(*(int *)(param_3 + 4) + -1)" * (cast_expression "(char *)(*(int *)(param_3 + 4) + -1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 4) + -1)" ( (binary_expression "*(int *)(param_3 + 4) + -1" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) )))) == (char_literal "'>'" ' character ')) )) (compound_statement "{\n    FUN_001ce240();\n  }" { (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" identifier (argument_list "()" ( ))) ;) (labeled_statement "LAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" statement_identifier : (if_statement "if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" if (parenthesized_expression "((param_5 & param_6) != 0)" ( (binary_expression "(param_5 & param_6) != 0" (parenthesized_expression "(param_5 & param_6)" ( (binary_expression "param_5 & param_6" identifier & identifier) )) != number_literal) )) (compound_statement "{\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" { (expression_statement "uVar5 = FUN_001cdb90();" (assignment_expression "uVar5 = FUN_001cdb90()" identifier = (call_expression "FUN_001cdb90()" identifier (argument_list "()" ( )))) ;) (expression_statement "FUN_001ce070(uVar5);" (call_expression "FUN_001ce070(uVar5)" identifier (argument_list "(uVar5)" ( identifier ))) ;) (return_statement "return iVar6;" return identifier ;) }))) (return_statement "return iVar6;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT << LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' character ')) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )))) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= (cast_expression ( (type_descriptor TYPE) ) IDENT))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) , IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) + IDENT) )))) = LIT) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) })) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (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 = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) + IDENT) )))) = LIT) ;) })) (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 = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) })) (goto_statement goto statement_identifier ;) })) (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 = LIT) ;)) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT)) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) != IDENT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) ))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) ))) )) && (parenthesized_expression ( (comma_expression (call_expression IDENT (argument_list ( ))) , (binary_expression IDENT != LIT)) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) , (binary_expression (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) )))) )) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) }))) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) }))) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) == (char_literal ' character ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & IDENT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) }))) (return_statement return IDENT ;) })))
(function_definition "int __regparm3\nFUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)\n\n{\n  undefined4 *puVar1;\n  byte *__s;\n  char *pcVar2;\n  int iVar3;\n  undefined4 *puVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  size_t sVar8;\n  size_t sVar9;\n  byte *pbVar10;\n  byte *pbVar11;\n  bool bVar12;\n  bool bVar13;\n  byte bVar14;\n  uint local_40;\n  int local_38;\n  void *local_34;\n  int local_30;\n  \n  bVar14 = 0;\n  iVar6 = *param_2;\n  *param_2 = iVar6 + 1;\n  if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }\n  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }\n  FUN_001ce240();\nLAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }\n  return iVar6;\n}" (primitive_type "int") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_001d1460(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)" (identifier "FUN_001d1460") (parameter_list "(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "uint param_5" (type_identifier "uint") (identifier "param_5")) (, ",") (parameter_declaration "uint param_6" (type_identifier "uint") (identifier "param_6")) () ")"))) (compound_statement "{\n  undefined4 *puVar1;\n  byte *__s;\n  char *pcVar2;\n  int iVar3;\n  undefined4 *puVar4;\n  undefined4 uVar5;\n  int iVar6;\n  int iVar7;\n  size_t sVar8;\n  size_t sVar9;\n  byte *pbVar10;\n  byte *pbVar11;\n  bool bVar12;\n  bool bVar13;\n  byte bVar14;\n  uint local_40;\n  int local_38;\n  void *local_34;\n  int local_30;\n  \n  bVar14 = 0;\n  iVar6 = *param_2;\n  *param_2 = iVar6 + 1;\n  if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }\n  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }\n  FUN_001ce240();\nLAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }\n  return iVar6;\n}" ({ "{") (declaration "undefined4 *puVar1;" (type_identifier "undefined4") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "byte *__s;" (type_identifier "byte") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "char *pcVar2;" (primitive_type "char") (pointer_declarator "*pcVar2" (* "*") (identifier "pcVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined4 *puVar4;" (type_identifier "undefined4") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "undefined4 uVar5;" (type_identifier "undefined4") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "size_t sVar8;" (primitive_type "size_t") (identifier "sVar8") (; ";")) (declaration "size_t sVar9;" (primitive_type "size_t") (identifier "sVar9") (; ";")) (declaration "byte *pbVar10;" (type_identifier "byte") (pointer_declarator "*pbVar10" (* "*") (identifier "pbVar10")) (; ";")) (declaration "byte *pbVar11;" (type_identifier "byte") (pointer_declarator "*pbVar11" (* "*") (identifier "pbVar11")) (; ";")) (declaration "bool bVar12;" (primitive_type "bool") (identifier "bVar12") (; ";")) (declaration "bool bVar13;" (primitive_type "bool") (identifier "bVar13") (; ";")) (declaration "byte bVar14;" (type_identifier "byte") (identifier "bVar14") (; ";")) (declaration "uint local_40;" (type_identifier "uint") (identifier "local_40") (; ";")) (declaration "int local_38;" (primitive_type "int") (identifier "local_38") (; ";")) (declaration "void *local_34;" (primitive_type "void") (pointer_declarator "*local_34" (* "*") (identifier "local_34")) (; ";")) (declaration "int local_30;" (primitive_type "int") (identifier "local_30") (; ";")) (expression_statement "bVar14 = 0;" (assignment_expression "bVar14 = 0" (identifier "bVar14") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar6 = *param_2;" (assignment_expression "iVar6 = *param_2" (identifier "iVar6") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "*param_2 = iVar6 + 1;" (assignment_expression "*param_2 = iVar6 + 1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_5 == 0) {\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }\n  else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" (if "if") (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);\n    *(undefined4 **)(param_1 + 0x40) = puVar4;\n    *(int *)(param_1 + 0x44) = local_38;\n    if (local_38 < 1) goto LAB_001d186e;\n    puVar1 = puVar4 + local_38;\n    do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);\nLAB_001d15dd:\n    local_40 = 0;\nLAB_001d15e5:\n    iVar7 = 0;\n    while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }\n    *param_2 = (int)(pcVar2 + 1);\n    iVar6 = FUN_001cf7c0();\n    if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }\n    if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }\nLAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;\n  }" ({ "{") (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" (identifier "iVar6") (= "=") (call_expression "FUN_001cd950()" (identifier "FUN_001cd950") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);" (assignment_expression "puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)FUN_001e4cd0(local_38 << 2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_001e4cd0(local_38 << 2)" (identifier "FUN_001e4cd0") (argument_list "(local_38 << 2)" (( "(") (binary_expression "local_38 << 2" (identifier "local_38") (<< "<<") (number_literal "2")) () ")"))))) (; ";")) (expression_statement "*(undefined4 **)(param_1 + 0x40) = puVar4;" (assignment_expression "*(undefined4 **)(param_1 + 0x40) = puVar4" (pointer_expression "*(undefined4 **)(param_1 + 0x40)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x40)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "puVar4")) (; ";")) (expression_statement "*(int *)(param_1 + 0x44) = local_38;" (assignment_expression "*(int *)(param_1 + 0x44) = local_38" (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (identifier "local_38")) (; ";")) (if_statement "if (local_38 < 1) goto LAB_001d186e;" (if "if") (parenthesized_expression "(local_38 < 1)" (( "(") (binary_expression "local_38 < 1" (identifier "local_38") (< "<") (number_literal "1")) () ")")) (goto_statement "goto LAB_001d186e;" (goto "goto") (statement_identifier "LAB_001d186e") (; ";"))) (expression_statement "puVar1 = puVar4 + local_38;" (assignment_expression "puVar1 = puVar4 + local_38" (identifier "puVar1") (= "=") (binary_expression "puVar4 + local_38" (identifier "puVar4") (+ "+") (identifier "local_38"))) (; ";")) (do_statement "do {\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    } while (puVar1 != puVar4);" (do "do") (compound_statement "{\n      *puVar4 = 0;\n      puVar4 = puVar4 + 1;\n    }" ({ "{") (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar1 != puVar4)" (( "(") (binary_expression "puVar1 != puVar4" (identifier "puVar1") (!= "!=") (identifier "puVar4")) () ")")) (; ";")) (labeled_statement "LAB_001d15dd:\n    local_40 = 0;" (statement_identifier "LAB_001d15dd") (: ":") (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" (identifier "local_40") (= "=") (number_literal "0")) (; ";"))) (labeled_statement "LAB_001d15e5:\n    iVar7 = 0;" (statement_identifier "LAB_001d15e5") (: ":") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";"))) (while_statement "while( true ) {\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      pcVar2 = (char *)*param_2;\n      if (*pcVar2 == 'Z') break;\n      if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }\n      iVar6 = FUN_001cf7c0();\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      if (iVar6 == 0) goto LAB_001d175f;\n      if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }\nLAB_001d1710:\n      iVar7 = iVar7 + 1;\n      if (local_38 <= iVar7) goto LAB_001d1761;\n      FUN_001ce240();\n    }" ({ "{") (expression_statement "pcVar2 = (char *)*param_2;" (assignment_expression "pcVar2 = (char *)*param_2" (identifier "pcVar2") (= "=") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (if_statement "if (*pcVar2 == 'Z') break;" (if "if") (parenthesized_expression "(*pcVar2 == 'Z')" (( "(") (binary_expression "*pcVar2 == 'Z'" (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) (== "==") (char_literal "'Z'" (' "'") (character "Z") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (*pcVar2 == 'z') {\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }" (if "if") (parenthesized_expression "(*pcVar2 == 'z')" (( "(") (binary_expression "*pcVar2 == 'z'" (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) (== "==") (char_literal "'z'" (' "'") (character "z") (' "'"))) () ")")) (compound_statement "{\n        *param_2 = (int)(pcVar2 + 1);\n        iVar6 = FUN_001d12b0();\n        if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }\n        goto LAB_001d175f;\n      }" ({ "{") (expression_statement "*param_2 = (int)(pcVar2 + 1);" (assignment_expression "*param_2 = (int)(pcVar2 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(int)(pcVar2 + 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(pcVar2 + 1)" (( "(") (binary_expression "pcVar2 + 1" (identifier "pcVar2") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "iVar6 = FUN_001d12b0();" (assignment_expression "iVar6 = FUN_001d12b0()" (identifier "iVar6") (= "=") (call_expression "FUN_001d12b0()" (identifier "FUN_001d12b0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 != 0) {\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          sVar8 = FUN_001cddf0();\n          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }\n          goto LAB_001d1710;\n        }" ({ "{") (expression_statement "sVar8 = FUN_001cddf0();" (assignment_expression "sVar8 = FUN_001cddf0()" (identifier "sVar8") (= "=") (call_expression "FUN_001cddf0()" (identifier "FUN_001cddf0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }" (if "if") (parenthesized_expression "((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9))" (( "(") (binary_expression "(0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)" (parenthesized_expression "(0 < (int)sVar8)" (( "(") (binary_expression "0 < (int)sVar8" (number_literal "0") (< "<") (cast_expression "(int)sVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar8"))) () ")")) (&& "&&") (parenthesized_expression "(sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)" (( "(") (comma_expression "sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9" (assignment_expression "sVar9 = strlen((char *)*param_2)" (identifier "sVar9") (= "=") (call_expression "strlen((char *)*param_2)" (identifier "strlen") (argument_list "((char *)*param_2)" (( "(") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")))) (, ",") (binary_expression "(int)sVar8 <= (int)sVar9" (cast_expression "(int)sVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar8")) (<= "<=") (cast_expression "(int)sVar9" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar9")))) () ")"))) () ")")) (compound_statement "{\n            FUN_001ce240();\n            FUN_001ce160();\n            if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }\n            *param_2 = *param_2 + sVar8;\n          }" ({ "{") (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" (identifier "FUN_001ce160") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (param_5 == 0) {\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }" (if "if") (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              iVar3 = *(int *)(param_1 + 0x40);\n              uVar5 = FUN_001e4cd0(sVar8 + 1);\n              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);\n              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n            }" ({ "{") (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (expression_statement "uVar5 = FUN_001e4cd0(sVar8 + 1);" (assignment_expression "uVar5 = FUN_001e4cd0(sVar8 + 1)" (identifier "uVar5") (= "=") (call_expression "FUN_001e4cd0(sVar8 + 1)" (identifier "FUN_001e4cd0") (argument_list "(sVar8 + 1)" (( "(") (binary_expression "sVar8 + 1" (identifier "sVar8") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" (* "*") (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + iVar7 * 4)" (( "(") (binary_expression "iVar3 + iVar7 * 4" (identifier "iVar3") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8)" (identifier "memcpy") (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8)" (( "(") (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (* "*") (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (, ",") (cast_expression "(void *)*param_2" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (, ",") (identifier "sVar8") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;" (assignment_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0" (pointer_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" (* "*") (cast_expression "(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" (( "(") (binary_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (+ "+") (identifier "sVar8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "*param_2 = *param_2 + sVar8;" (assignment_expression "*param_2 = *param_2 + sVar8" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "*param_2 + sVar8" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (identifier "sVar8"))) (; ";")) (} "}"))) (goto_statement "goto LAB_001d1710;" (goto "goto") (statement_identifier "LAB_001d1710") (; ";")) (} "}"))) (goto_statement "goto LAB_001d175f;" (goto "goto") (statement_identifier "LAB_001d175f") (; ";")) (} "}"))) (expression_statement "iVar6 = FUN_001cf7c0();" (assignment_expression "iVar6 = FUN_001cf7c0()" (identifier "iVar6") (= "=") (call_expression "FUN_001cf7c0()" (identifier "FUN_001cf7c0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" (if "if") (parenthesized_expression "(local_34 != (void *)0x0)" (( "(") (binary_expression "local_34 != (void *)0x0" (identifier "local_34") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" ({ "{") (expression_statement "free(local_34);" (call_expression "free(local_34)" (identifier "free") (argument_list "(local_34)" (( "(") (identifier "local_34") () ")"))) (; ";")) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" (identifier "local_30") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_34 = (void *)0x0;" (assignment_expression "local_34 = (void *)0x0" (identifier "local_34") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}"))) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_001d175f;" (goto "goto") (statement_identifier "LAB_001d175f") (; ";"))) (if_statement "if (param_5 == 0) {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }\n      else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" (if "if") (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);\n        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;\n        FUN_001ce390();\n      }" ({ "{") (expression_statement "iVar6 = FUN_001cf0b0(iVar6);" (assignment_expression "iVar6 = FUN_001cf0b0(iVar6)" (identifier "iVar6") (= "=") (call_expression "FUN_001cf0b0(iVar6)" (identifier "FUN_001cf0b0") (argument_list "(iVar6)" (( "(") (identifier "iVar6") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_001d175f;" (goto "goto") (statement_identifier "LAB_001d175f") (; ";"))) (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (expression_statement "uVar5 = FUN_001e4cd0(1);" (assignment_expression "uVar5 = FUN_001e4cd0(1)" (identifier "uVar5") (= "=") (call_expression "FUN_001e4cd0(1)" (identifier "FUN_001e4cd0") (argument_list "(1)" (( "(") (number_literal "1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" (* "*") (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + iVar7 * 4)" (( "(") (binary_expression "iVar3 + iVar7 * 4" (identifier "iVar3") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0)" (identifier "memcpy") (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0)" (( "(") (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (* "*") (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (, ",") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;" (assignment_expression "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0" (pointer_expression "**(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (* "*") (pointer_expression "*(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (* "*") (cast_expression "(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")"))))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_001ce390();" (call_expression "FUN_001ce390()" (identifier "FUN_001ce390") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")) (else_clause "else {\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" (else "else") (compound_statement "{\n        iVar6 = FUN_001cf0b0(iVar6);\n        if (iVar6 == 0) goto LAB_001d175f;\n      }" ({ "{") (expression_statement "iVar6 = FUN_001cf0b0(iVar6);" (assignment_expression "iVar6 = FUN_001cf0b0(iVar6)" (identifier "iVar6") (= "=") (call_expression "FUN_001cf0b0(iVar6)" (identifier "FUN_001cf0b0") (argument_list "(iVar6)" (( "(") (identifier "iVar6") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) goto LAB_001d175f;" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_001d175f;" (goto "goto") (statement_identifier "LAB_001d175f") (; ";"))) (} "}")))) (labeled_statement "LAB_001d1710:\n      iVar7 = iVar7 + 1;" (statement_identifier "LAB_001d1710") (: ":") (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";"))) (if_statement "if (local_38 <= iVar7) goto LAB_001d1761;" (if "if") (parenthesized_expression "(local_38 <= iVar7)" (( "(") (binary_expression "local_38 <= iVar7" (identifier "local_38") (<= "<=") (identifier "iVar7")) () ")")) (goto_statement "goto LAB_001d1761;" (goto "goto") (statement_identifier "LAB_001d1761") (; ";"))) (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "*param_2 = (int)(pcVar2 + 1);" (assignment_expression "*param_2 = (int)(pcVar2 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(int)(pcVar2 + 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(pcVar2 + 1)" (( "(") (binary_expression "pcVar2 + 1" (identifier "pcVar2") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "iVar6 = FUN_001cf7c0();" (assignment_expression "iVar6 = FUN_001cf7c0()" (identifier "iVar6") (= "=") (call_expression "FUN_001cf7c0()" (identifier "FUN_001cf7c0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 != 0) {\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_001ce390();\n      if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }\n      if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }\n      goto LAB_001d1710;\n    }" ({ "{") (expression_statement "FUN_001ce390();" (call_expression "FUN_001ce390()" (identifier "FUN_001ce390") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (param_5 == 0) {\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }" (if "if") (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        sVar8 = local_30 - (int)local_34;\n        iVar3 = *(int *)(param_1 + 0x40);\n        uVar5 = FUN_001e4cd0(sVar8 + 1);\n        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;\n        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);\n        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;\n      }" ({ "{") (expression_statement "sVar8 = local_30 - (int)local_34;" (assignment_expression "sVar8 = local_30 - (int)local_34" (identifier "sVar8") (= "=") (binary_expression "local_30 - (int)local_34" (identifier "local_30") (- "-") (cast_expression "(int)local_34" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_34")))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x40);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x40)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (expression_statement "uVar5 = FUN_001e4cd0(sVar8 + 1);" (assignment_expression "uVar5 = FUN_001e4cd0(sVar8 + 1)" (identifier "uVar5") (= "=") (call_expression "FUN_001e4cd0(sVar8 + 1)" (identifier "FUN_001e4cd0") (argument_list "(sVar8 + 1)" (( "(") (binary_expression "sVar8 + 1" (identifier "sVar8") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;" (assignment_expression "*(undefined4 *)(iVar3 + iVar7 * 4) = uVar5" (pointer_expression "*(undefined4 *)(iVar3 + iVar7 * 4)" (* "*") (cast_expression "(undefined4 *)(iVar3 + iVar7 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + iVar7 * 4)" (( "(") (binary_expression "iVar3 + iVar7 * 4" (identifier "iVar3") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);" (call_expression "memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8)" (identifier "memcpy") (argument_list "(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8)" (( "(") (pointer_expression "*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (* "*") (cast_expression "(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (, ",") (identifier "local_34") (, ",") (identifier "sVar8") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;" (assignment_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0" (pointer_expression "*(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" (* "*") (cast_expression "(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8)" (( "(") (binary_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar7 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) + iVar7 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")")))) (+ "+") (identifier "sVar8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (if_statement "if (local_34 != (void *)0x0) {\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" (if "if") (parenthesized_expression "(local_34 != (void *)0x0)" (( "(") (binary_expression "local_34 != (void *)0x0" (identifier "local_34") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        free(local_34);\n        local_30 = 0;\n        local_34 = (void *)0x0;\n      }" ({ "{") (expression_statement "free(local_34);" (call_expression "free(local_34)" (identifier "free") (argument_list "(local_34)" (( "(") (identifier "local_34") () ")"))) (; ";")) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" (identifier "local_30") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_34 = (void *)0x0;" (assignment_expression "local_34 = (void *)0x0" (identifier "local_34") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}"))) (goto_statement "goto LAB_001d1710;" (goto "goto") (statement_identifier "LAB_001d1710") (; ";")) (} "}"))) (if_statement "if (local_34 == (void *)0x0) {\nLAB_001d175f:\n      iVar6 = 0;\n    }\n    else {\n      free(local_34);\n    }" (if "if") (parenthesized_expression "(local_34 == (void *)0x0)" (( "(") (binary_expression "local_34 == (void *)0x0" (identifier "local_34") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_001d175f:\n      iVar6 = 0;\n    }" ({ "{") (labeled_statement "LAB_001d175f:\n      iVar6 = 0;" (statement_identifier "LAB_001d175f") (: ":") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";"))) (} "}")) (else_clause "else {\n      free(local_34);\n    }" (else "else") (compound_statement "{\n      free(local_34);\n    }" ({ "{") (expression_statement "free(local_34);" (call_expression "free(local_34)" (identifier "free") (argument_list "(local_34)" (( "(") (identifier "local_34") () ")"))) (; ";")) (} "}")))) (labeled_statement "LAB_001d1761:\n    if (local_40 != 0) goto LAB_001d1560;" (statement_identifier "LAB_001d1761") (: ":") (if_statement "if (local_40 != 0) goto LAB_001d1560;" (if "if") (parenthesized_expression "(local_40 != 0)" (( "(") (binary_expression "local_40 != 0" (identifier "local_40") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_001d1560;" (goto "goto") (statement_identifier "LAB_001d1560") (; ";")))) (} "}")) (else_clause "else {\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" (else "else") (compound_statement "{\n    if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }\n    *param_2 = iVar6 + 2;\n    if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }\n    *param_2 = iVar6 + 3;\n    iVar6 = FUN_001cdea0();\n    if (iVar6 == -1) {\n      return 0;\n    }\n    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }\n    iVar7 = FUN_001cdea0();\n    if (iVar7 == -1) {\n      return 0;\n    }\n    if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }\nLAB_001d1840:\n    FUN_001ce240();\n    iVar6 = FUN_001cd950();\n    if (iVar6 == 0) {\n      return 0;\n    }\n    if (0 < local_38) goto LAB_001d15dd;\nLAB_001d186e:\n    iVar6 = 0;\n  }" ({ "{") (if_statement "if (*(char *)(iVar6 + 1) != 'z') {\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }" (if "if") (parenthesized_expression "(*(char *)(iVar6 + 1) != 'z')" (( "(") (binary_expression "*(char *)(iVar6 + 1) != 'z'" (pointer_expression "*(char *)(iVar6 + 1)" (* "*") (cast_expression "(char *)(iVar6 + 1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 1)" (( "(") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1")) () ")")))) (!= "!=") (char_literal "'z'" (' "'") (character "z") (' "'"))) () ")")) (compound_statement "{\n      local_38 = FUN_001cddf0();\n      if (local_38 < 1) {\n        return 0;\n      }\n      __s = (byte *)*param_2;\n      sVar8 = strlen((char *)__s);\n      if ((int)sVar8 < local_38) {\n        return 0;\n      }\n      bVar12 = false;\n      bVar13 = (*param_1 & 4) == 0;\n      if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }\n      iVar6 = 8;\n      pbVar10 = __s;\n      pbVar11 = (byte *)"JArray1Z";\n      do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);\n      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;\n      if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }\n      iVar6 = FUN_001cd950();\n      if (iVar6 == 0) {\n        return 0;\n      }\n      local_40 = param_5;\n      if (0 < local_38) goto LAB_001d15e5;\n      iVar6 = 0;\nLAB_001d1560:\n      FUN_001ce240();\n      goto LAB_001d178d;\n    }" ({ "{") (expression_statement "local_38 = FUN_001cddf0();" (assignment_expression "local_38 = FUN_001cddf0()" (identifier "local_38") (= "=") (call_expression "FUN_001cddf0()" (identifier "FUN_001cddf0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (local_38 < 1) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(local_38 < 1)" (( "(") (binary_expression "local_38 < 1" (identifier "local_38") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "__s = (byte *)*param_2;" (assignment_expression "__s = (byte *)*param_2" (identifier "__s") (= "=") (cast_expression "(byte *)*param_2" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "sVar8 = strlen((char *)__s);" (assignment_expression "sVar8 = strlen((char *)__s)" (identifier "sVar8") (= "=") (call_expression "strlen((char *)__s)" (identifier "strlen") (argument_list "((char *)__s)" (( "(") (cast_expression "(char *)__s" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "__s")) () ")")))) (; ";")) (if_statement "if ((int)sVar8 < local_38) {\n        return 0;\n      }" (if "if") (parenthesized_expression "((int)sVar8 < local_38)" (( "(") (binary_expression "(int)sVar8 < local_38" (cast_expression "(int)sVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar8")) (< "<") (identifier "local_38")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "bVar12 = false;" (assignment_expression "bVar12 = false" (identifier "bVar12") (= "=") (false "false")) (; ";")) (expression_statement "bVar13 = (*param_1 & 4) == 0;" (assignment_expression "bVar13 = (*param_1 & 4) == 0" (identifier "bVar13") (= "=") (binary_expression "(*param_1 & 4) == 0" (parenthesized_expression "(*param_1 & 4)" (( "(") (binary_expression "*param_1 & 4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0"))) (; ";")) (if_statement "if (bVar13) {\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }" (if "if") (parenthesized_expression "(bVar13)" (( "(") (identifier "bVar13") () ")")) (compound_statement "{\nLAB_001d1a20:\n        FUN_001ce160();\n        if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }\n        *param_2 = *param_2 + local_38;\n        goto LAB_001d1840;\n      }" ({ "{") (labeled_statement "LAB_001d1a20:\n        FUN_001ce160();" (statement_identifier "LAB_001d1a20") (: ":") (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" (identifier "FUN_001ce160") (argument_list "()" (( "(") () ")"))) (; ";"))) (if_statement "if (param_4 != 0) {\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }" (if "if") (parenthesized_expression "(param_4 != 0)" (( "(") (binary_expression "param_4 != 0" (identifier "param_4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          if (local_38 == 0) goto LAB_001d1840;\n          FUN_001ce160();\n        }" ({ "{") (if_statement "if (local_38 == 0) goto LAB_001d1840;" (if "if") (parenthesized_expression "(local_38 == 0)" (( "(") (binary_expression "local_38 == 0" (identifier "local_38") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_001d1840;" (goto "goto") (statement_identifier "LAB_001d1840") (; ";"))) (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" (identifier "FUN_001ce160") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "*param_2 = *param_2 + local_38;" (assignment_expression "*param_2 = *param_2 + local_38" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "*param_2 + local_38" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (identifier "local_38"))) (; ";")) (goto_statement "goto LAB_001d1840;" (goto "goto") (statement_identifier "LAB_001d1840") (; ";")) (} "}"))) (expression_statement "iVar6 = 8;" (assignment_expression "iVar6 = 8" (identifier "iVar6") (= "=") (number_literal "8")) (; ";")) (expression_statement "pbVar10 = __s;" (assignment_expression "pbVar10 = __s" (identifier "pbVar10") (= "=") (identifier "__s")) (; ";")) (expression_statement "pbVar11 = (byte *)"JArray1Z";" (assignment_expression "pbVar11 = (byte *)"JArray1Z"" (identifier "pbVar11") (= "=") (cast_expression "(byte *)"JArray1Z"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""JArray1Z"" (" """) (string_content "JArray1Z") (" """)))) (; ";")) (do_statement "do {\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      } while (bVar13);" (do "do") (compound_statement "{\n        if (iVar6 == 0) break;\n        iVar6 = iVar6 + -1;\n        bVar12 = *pbVar10 < *pbVar11;\n        bVar13 = *pbVar10 == *pbVar11;\n        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;\n        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;\n      }" ({ "{") (if_statement "if (iVar6 == 0) break;" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar12 = *pbVar10 < *pbVar11;" (assignment_expression "bVar12 = *pbVar10 < *pbVar11" (identifier "bVar12") (= "=") (binary_expression "*pbVar10 < *pbVar11" (pointer_expression "*pbVar10" (* "*") (identifier "pbVar10")) (< "<") (pointer_expression "*pbVar11" (* "*") (identifier "pbVar11")))) (; ";")) (expression_statement "bVar13 = *pbVar10 == *pbVar11;" (assignment_expression "bVar13 = *pbVar10 == *pbVar11" (identifier "bVar13") (= "=") (binary_expression "*pbVar10 == *pbVar11" (pointer_expression "*pbVar10" (* "*") (identifier "pbVar10")) (== "==") (pointer_expression "*pbVar11" (* "*") (identifier "pbVar11")))) (; ";")) (expression_statement "pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;" (assignment_expression "pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1" (identifier "pbVar10") (= "=") (binary_expression "pbVar10 + (uint)bVar14 * -2 + 1" (binary_expression "pbVar10 + (uint)bVar14 * -2" (identifier "pbVar10") (+ "+") (binary_expression "(uint)bVar14 * -2" (cast_expression "(uint)bVar14" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar14")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;" (assignment_expression "pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1" (identifier "pbVar11") (= "=") (binary_expression "pbVar11 + (uint)bVar14 * -2 + 1" (binary_expression "pbVar11 + (uint)bVar14 * -2" (identifier "pbVar11") (+ "+") (binary_expression "(uint)bVar14 * -2" (cast_expression "(uint)bVar14" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar14")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar13)" (( "(") (identifier "bVar13") () ")")) (; ";")) (if_statement "if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;" (if "if") (parenthesized_expression "((!bVar12 && !bVar13) != bVar12)" (( "(") (binary_expression "(!bVar12 && !bVar13) != bVar12" (parenthesized_expression "(!bVar12 && !bVar13)" (( "(") (binary_expression "!bVar12 && !bVar13" (unary_expression "!bVar12" (! "!") (identifier "bVar12")) (&& "&&") (unary_expression "!bVar13" (! "!") (identifier "bVar13"))) () ")")) (!= "!=") (identifier "bVar12")) () ")")) (goto_statement "goto LAB_001d1a20;" (goto "goto") (statement_identifier "LAB_001d1a20") (; ";"))) (if_statement "if (param_4 == 0) {\n        *param_2 = (int)(__s + local_38);\n      }\n      else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        *param_2 = (int)(__s + local_38);\n      }" ({ "{") (expression_statement "*param_2 = (int)(__s + local_38);" (assignment_expression "*param_2 = (int)(__s + local_38)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(int)(__s + local_38)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(__s + local_38)" (( "(") (binary_expression "__s + local_38" (identifier "__s") (+ "+") (identifier "local_38")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" (else "else") (compound_statement "{\n        FUN_001ce160();\n        *param_2 = *param_2 + local_38;\n      }" ({ "{") (expression_statement "FUN_001ce160();" (call_expression "FUN_001ce160()" (identifier "FUN_001ce160") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*param_2 = *param_2 + local_38;" (assignment_expression "*param_2 = *param_2 + local_38" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "*param_2 + local_38" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (identifier "local_38"))) (; ";")) (} "}")))) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" (identifier "iVar6") (= "=") (call_expression "FUN_001cd950()" (identifier "FUN_001cd950") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "local_40 = param_5;" (assignment_expression "local_40 = param_5" (identifier "local_40") (= "=") (identifier "param_5")) (; ";")) (if_statement "if (0 < local_38) goto LAB_001d15e5;" (if "if") (parenthesized_expression "(0 < local_38)" (( "(") (binary_expression "0 < local_38" (number_literal "0") (< "<") (identifier "local_38")) () ")")) (goto_statement "goto LAB_001d15e5;" (goto "goto") (statement_identifier "LAB_001d15e5") (; ";"))) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_001d1560:\n      FUN_001ce240();" (statement_identifier "LAB_001d1560") (: ":") (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (; ";"))) (goto_statement "goto LAB_001d178d;" (goto "goto") (statement_identifier "LAB_001d178d") (; ";")) (} "}"))) (expression_statement "*param_2 = iVar6 + 2;" (assignment_expression "*param_2 = iVar6 + 2" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "iVar6 + 2" (identifier "iVar6") (+ "+") (number_literal "2"))) (; ";")) (if_statement "if (*(char *)(iVar6 + 2) == '\0') {\n      return 0;\n    }" (if "if") (parenthesized_expression "(*(char *)(iVar6 + 2) == '\0')" (( "(") (binary_expression "*(char *)(iVar6 + 2) == '\0'" (pointer_expression "*(char *)(iVar6 + 2)" (* "*") (cast_expression "(char *)(iVar6 + 2)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 2)" (( "(") (binary_expression "iVar6 + 2" (identifier "iVar6") (+ "+") (number_literal "2")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*param_2 = iVar6 + 3;" (assignment_expression "*param_2 = iVar6 + 3" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "iVar6 + 3" (identifier "iVar6") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "iVar6 = FUN_001cdea0();" (assignment_expression "iVar6 = FUN_001cdea0()" (identifier "iVar6") (= "=") (call_expression "FUN_001cdea0()" (identifier "FUN_001cdea0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 == -1) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar6 == -1)" (( "(") (binary_expression "iVar6 == -1" (identifier "iVar6") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {\n      return 0;\n    }" (if "if") (parenthesized_expression "((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6))" (( "(") (binary_expression "(*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)" (parenthesized_expression "(*(int *)(param_1 + 0x40) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) != 0" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(param_1 + 0x44) <= iVar6)" (( "(") (binary_expression "*(int *)(param_1 + 0x44) <= iVar6" (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (<= "<=") (identifier "iVar6")) () ")"))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar7 = FUN_001cdea0();" (assignment_expression "iVar7 = FUN_001cdea0()" (identifier "iVar7") (= "=") (call_expression "FUN_001cdea0()" (identifier "FUN_001cdea0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar7 == -1) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar7 == -1)" (( "(") (binary_expression "iVar7 == -1" (identifier "iVar7") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (*(int *)(param_1 + 0x40) == 0) {\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }\n    else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x40) == 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) == 0" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_001ce290();\n      if (param_4 != 0) {\n        FUN_001ce290();\n      }\n    }" ({ "{") (expression_statement "FUN_001ce290();" (call_expression "FUN_001ce290()" (identifier "FUN_001ce290") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (param_4 != 0) {\n        FUN_001ce290();\n      }" (if "if") (parenthesized_expression "(param_4 != 0)" (( "(") (binary_expression "param_4 != 0" (identifier "param_4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_001ce290();\n      }" ({ "{") (expression_statement "FUN_001ce290();" (call_expression "FUN_001ce290()" (identifier "FUN_001ce290") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" (else "else") (compound_statement "{\n      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);\n      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }\n    }" ({ "{") (expression_statement "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);" (assignment_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" (identifier "pcVar2") (= "=") (pointer_expression "*(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" (* "*") (cast_expression "(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar6 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) + iVar6 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (binary_expression "iVar6 * 4" (identifier "iVar6") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))) {\n        FUN_001ce240();\n      }" (if "if") (parenthesized_expression "((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0'))))" (( "(") (binary_expression "(((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&\n         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))" (parenthesized_expression "(((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0))" (( "(") (binary_expression "((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)" (parenthesized_expression "((pcVar2 != (char *)0x0) && (*pcVar2 != '\0'))" (( "(") (binary_expression "(pcVar2 != (char *)0x0) && (*pcVar2 != '\0')" (parenthesized_expression "(pcVar2 != (char *)0x0)" (( "(") (binary_expression "pcVar2 != (char *)0x0" (identifier "pcVar2") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*pcVar2 != '\0')" (( "(") (binary_expression "*pcVar2 != '\0'" (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(FUN_001ce240(), param_4 != 0)" (( "(") (comma_expression "FUN_001ce240(), param_4 != 0" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (, ",") (binary_expression "param_4 != 0" (identifier "param_4") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')))" (( "(") (parenthesized_expression "(pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0'))" (( "(") (comma_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')" (assignment_expression "pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" (identifier "pcVar2") (= "=") (pointer_expression "*(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" (* "*") (cast_expression "(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x40) + iVar6 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x40) + iVar6 * 4" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (binary_expression "iVar6 * 4" (identifier "iVar6") (* "*") (number_literal "4"))) () ")"))))) (, ",") (binary_expression "pcVar2 != (char *)0x0 &&\n          (*pcVar2 != '\0')" (binary_expression "pcVar2 != (char *)0x0" (identifier "pcVar2") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (&& "&&") (parenthesized_expression "(*pcVar2 != '\0')" (( "(") (binary_expression "*pcVar2 != '\0'" (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")))) () ")")) () ")"))) () ")")) (compound_statement "{\n        FUN_001ce240();\n      }" ({ "{") (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}")))) (labeled_statement "LAB_001d1840:\n    FUN_001ce240();" (statement_identifier "LAB_001d1840") (: ":") (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (; ";"))) (expression_statement "iVar6 = FUN_001cd950();" (assignment_expression "iVar6 = FUN_001cd950()" (identifier "iVar6") (= "=") (call_expression "FUN_001cd950()" (identifier "FUN_001cd950") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (0 < local_38) goto LAB_001d15dd;" (if "if") (parenthesized_expression "(0 < local_38)" (( "(") (binary_expression "0 < local_38" (number_literal "0") (< "<") (identifier "local_38")) () ")")) (goto_statement "goto LAB_001d15dd;" (goto "goto") (statement_identifier "LAB_001d15dd") (; ";"))) (labeled_statement "LAB_001d186e:\n    iVar6 = 0;" (statement_identifier "LAB_001d186e") (: ":") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";"))) (} "}")))) (if_statement "if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {\n    FUN_001ce240();\n  }" (if "if") (parenthesized_expression "(*(char *)(*(int *)(param_3 + 4) + -1) == '>')" (( "(") (binary_expression "*(char *)(*(int *)(param_3 + 4) + -1) == '>'" (pointer_expression "*(char *)(*(int *)(param_3 + 4) + -1)" (* "*") (cast_expression "(char *)(*(int *)(param_3 + 4) + -1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 4) + -1)" (( "(") (binary_expression "*(int *)(param_3 + 4) + -1" (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "-1")) () ")")))) (== "==") (char_literal "'>'" (' "'") (character ">") (' "'"))) () ")")) (compound_statement "{\n    FUN_001ce240();\n  }" ({ "{") (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_001ce240();" (call_expression "FUN_001ce240()" (identifier "FUN_001ce240") (argument_list "()" (( "(") () ")"))) (; ";")) (labeled_statement "LAB_001d178d:\n  if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" (statement_identifier "LAB_001d178d") (: ":") (if_statement "if ((param_5 & param_6) != 0) {\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" (if "if") (parenthesized_expression "((param_5 & param_6) != 0)" (( "(") (binary_expression "(param_5 & param_6) != 0" (parenthesized_expression "(param_5 & param_6)" (( "(") (binary_expression "param_5 & param_6" (identifier "param_5") (& "&") (identifier "param_6")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar5 = FUN_001cdb90();\n    FUN_001ce070(uVar5);\n    return iVar6;\n  }" ({ "{") (expression_statement "uVar5 = FUN_001cdb90();" (assignment_expression "uVar5 = FUN_001cdb90()" (identifier "uVar5") (= "=") (call_expression "FUN_001cdb90()" (identifier "FUN_001cdb90") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "FUN_001ce070(uVar5);" (call_expression "FUN_001ce070(uVar5)" (identifier "FUN_001ce070") (argument_list "(uVar5)" (( "(") (identifier "uVar5") () ")"))) (; ";")) (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}")))) (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int __regparm3
function_1(type_1 *work,char **mangled,type_2 *tname,type_2 *var_24,int var_2,
                 int var_31)

{
  char **var_9;
  type_3 *var_28;
  char **var_8;
  type_4 var_18;
  int var_5;
  int var_22;
  size_t var_14;
  size_t sVar6;
  char *var_1;
  int len;
  type_3 *var_25;
  type_3 *var_26;
  bool var_27;
  bool bVar11;
  type_3 bVar12;
  int var_23;
  int var_7;
  type_2 temp;
  type_2 param;
  
  bVar12 = 0;
  var_1 = *mangled;
  *mangled = var_1 + 1;
  if (var_2 == 0) {
    var_3(tname,"<");
    var_5 = var_4(mangled,&var_7);
    if (var_5 == 0) {
      return 0;
    }
    var_8 = (char **)var_6(var_7 << 2);
    work->tmpl_argvec = var_8;
    work->ntmpl_args = var_7;
    if (var_7 < 1) goto LAB_001d186e;
    var_9 = var_8 + var_7;
    do {
      *var_8 = (char *)0x0;
      var_8 = var_8 + 1;
    } while (var_9 != var_8);
LAB_001d15dd:
    var_23 = 0;
LAB_001d15e5:
    var_22 = 0;
    while( true ) {
      var_1 = *mangled;
      if (*var_1 == 'Z') break;
      if (*var_1 == 'z') {
        *mangled = var_1 + 1;
        var_5 = var_10(work,mangled,tname);
        if (var_5 != 0) {
          var_14 = var_11(mangled);
          if ((0 < (int)var_14) && (sVar6 = var_12(*mangled), (int)var_14 <= (int)sVar6)) {
            var_3(tname," ");
            var_13(tname,*mangled,var_14);
            if (var_2 == 0) {
              var_8 = work->tmpl_argvec;
              var_1 = (char *)var_6(var_14 + 1);
              var_8[var_22] = var_1;
              var_15(work->tmpl_argvec[var_22],*mangled,var_14);
              work->tmpl_argvec[var_22][var_14] = '\0';
            }
            *mangled = *mangled + var_14;
          }
          goto LAB_001d1710;
        }
        goto LAB_001d175f;
      }
      var_18 = var_16(work,mangled,&temp);
      if (temp.b != (char *)0x0) {
        var_17(temp.b);
        temp.p = (char *)0x0;
        temp.e = (char *)0x0;
        temp.b = (char *)0x0;
      }
      if (var_18 == var_19) goto LAB_001d175f;
      if (var_2 == 0) {
        param.e = (char *)0x0;
        param.p = (char *)0x0;
        param.b = (char *)0x0;
        var_5 = var_20(work,mangled,&param,var_18);
        if (var_5 == 0) {
          if (param.b != (char *)0x0) {
            var_17(param.b);
          }
          goto LAB_001d175f;
        }
        var_14 = (int)param.p - (int)param.b;
        var_8 = work->tmpl_argvec;
        var_1 = (char *)var_6(var_14 + 1);
        var_8[var_22] = var_1;
        var_15(work->tmpl_argvec[var_22],param.b,var_14);
        work->tmpl_argvec[var_22][var_14] = '\0';
        var_21(tname,&param,(type_2 *)param.p);
        if (param.b != (char *)0x0) {
          var_17(param.b);
        }
      }
      else {
        var_5 = var_20(work,mangled,tname,var_18);
        if (var_5 == 0) goto LAB_001d175f;
      }
LAB_001d1710:
      var_22 = var_22 + 1;
      if (var_7 <= var_22) goto LAB_001d1761;
      var_3(tname,", ");
    }
    *mangled = var_1 + 1;
    var_5 = var_16(work,mangled,&temp);
    if (var_5 != 0) {
      var_21(tname,&temp,(type_2 *)temp.p);
      if (var_2 == 0) {
        var_14 = (int)temp.p - (int)temp.b;
        var_8 = work->tmpl_argvec;
        var_1 = (char *)var_6(var_14 + 1);
        var_8[var_22] = var_1;
        var_15(work->tmpl_argvec[var_22],temp.b,var_14);
        work->tmpl_argvec[var_22][var_14] = '\0';
      }
      if (temp.b != (char *)0x0) {
        var_17(temp.b);
        temp.p = (char *)0x0;
        temp.e = (char *)0x0;
        temp.b = (char *)0x0;
      }
      goto LAB_001d1710;
    }
    if (temp.b == (char *)0x0) {
LAB_001d175f:
      var_5 = 0;
    }
    else {
      var_17(temp.b);
      temp.p = (char *)0x0;
      temp.e = (char *)0x0;
      temp.b = (char *)0x0;
    }
LAB_001d1761:
    if (var_23 != 0) goto LAB_001d1560;
  }
  else {
    if (var_1[1] != 'z') {
      var_5 = var_11(mangled);
      if (var_5 < 1) {
        return 0;
      }
      var_28 = (type_3 *)*mangled;
      var_7 = var_5;
      var_14 = var_12((char *)var_28);
      if ((int)var_14 < var_5) {
        return 0;
      }
      var_27 = false;
      bVar11 = (work->options & 4) == 0;
      if (bVar11) {
LAB_001d1a20:
        var_13(tname,(char *)var_28,var_5);
        if (var_24 != (type_2 *)0x0) {
          if (var_7 == 0) goto LAB_001d1840;
          var_13(var_24,*mangled,var_7);
        }
        *mangled = *mangled + var_7;
        goto LAB_001d1840;
      }
      var_22 = 8;
      var_25 = var_28;
      var_26 = (type_3 *)"JArray1Z";
      do {
        if (var_22 == 0) break;
        var_22 = var_22 + -1;
        var_27 = *var_25 < *var_26;
        bVar11 = *var_25 == *var_26;
        var_25 = var_25 + (type_5)bVar12 * -2 + 1;
        var_26 = var_26 + (type_5)bVar12 * -2 + 1;
      } while (bVar11);
      if ((!var_27 && !bVar11) != var_27) goto LAB_001d1a20;
      if (var_24 == (type_2 *)0x0) {
        *mangled = (char *)(var_28 + var_5);
      }
      else {
        var_13(var_24,(char *)var_28,var_5);
        *mangled = *mangled + var_7;
      }
      var_5 = var_4(mangled,&var_7);
      if (var_5 == 0) {
        return 0;
      }
      var_23 = var_2;
      if (0 < var_7) goto LAB_001d15e5;
      var_5 = 0;
LAB_001d1560:
      var_3(tname,"[]");
      goto LAB_001d178d;
    }
    *mangled = var_1 + 2;
    if (var_1[2] == '\0') {
      return 0;
    }
    *mangled = var_1 + 3;
    var_5 = var_29(mangled);
    if (var_5 == -1) {
      return 0;
    }
    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= var_5)) {
      return 0;
    }
    var_22 = var_29(mangled);
    if (var_22 == -1) {
      return 0;
    }
    if (work->tmpl_argvec == (char **)0x0) {
      var_30(tname,var_5);
      if (var_24 != (type_2 *)0x0) {
        var_30(var_24,var_5);
      }
    }
    else {
      var_1 = work->tmpl_argvec[var_5];
      if ((((var_1 != (char *)0x0) && (*var_1 != '\0')) &&
          (var_3(tname,var_1), var_24 != (type_2 *)0x0)) &&
         ((var_1 = work->tmpl_argvec[var_5], var_1 != (char *)0x0 && (*var_1 != '\0')))) {
        var_3(var_24,var_1);
      }
    }
LAB_001d1840:
    var_3(tname,"<");
    var_5 = var_4(mangled,&var_7);
    if (var_5 == 0) {
      return 0;
    }
    if (0 < var_7) goto LAB_001d15dd;
LAB_001d186e:
    var_5 = 0;
  }
  if (tname->p[-1] == '>') {
    var_3(tname," ");
  }
  var_3(tname,">");
LAB_001d178d:
  if ((var_2 & var_31) != 0) {
    var_22 = var_32(work);
    var_1 = tname->b;
    len = (int)tname->p - (int)var_1;
    if (var_1 == tname->p) {
      len = 0;
    }
    var_33((type_1 *)&work->btypevec,var_1,len,var_22);
    return var_5;
  }
  return var_5;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Removing unreachable block (ram,0x001d1703) */
/* WARNING: Removing unreachable block (ram,0x001d1b19) */

int __regparm3
MASKED(byte *param_1,int *param_2,int param_3,int param_4,uint param_5,uint param_6)

{
  undefined4 *puVar1;
  byte *__s;
  char *pcVar2;
  int iVar3;
  undefined4 *puVar4;
  undefined4 uVar5;
  int iVar6;
  int iVar7;
  size_t sVar8;
  size_t sVar9;
  byte *pbVar10;
  byte *pbVar11;
  bool bVar12;
  bool bVar13;
  byte bVar14;
  uint local_40;
  int local_38;
  void *local_34;
  int local_30;
  
  bVar14 = 0;
  iVar6 = *param_2;
  *param_2 = iVar6 + 1;
  if (param_5 == 0) {
    FUN_001ce240();
    iVar6 = FUN_001cd950();
    if (iVar6 == 0) {
      return 0;
    }
    puVar4 = (undefined4 *)FUN_001e4cd0(local_38 << 2);
    *(undefined4 **)(param_1 + 0x40) = puVar4;
    *(int *)(param_1 + 0x44) = local_38;
    if (local_38 < 1) goto LAB_001d186e;
    puVar1 = puVar4 + local_38;
    do {
      *puVar4 = 0;
      puVar4 = puVar4 + 1;
    } while (puVar1 != puVar4);
LAB_001d15dd:
    local_40 = 0;
LAB_001d15e5:
    iVar7 = 0;
    while( true ) {
      pcVar2 = (char *)*param_2;
      if (*pcVar2 == 'Z') break;
      if (*pcVar2 == 'z') {
        *param_2 = (int)(pcVar2 + 1);
        iVar6 = FUN_001d12b0();
        if (iVar6 != 0) {
          sVar8 = FUN_001cddf0();
          if ((0 < (int)sVar8) && (sVar9 = strlen((char *)*param_2), (int)sVar8 <= (int)sVar9)) {
            FUN_001ce240();
            FUN_001ce160();
            if (param_5 == 0) {
              iVar3 = *(int *)(param_1 + 0x40);
              uVar5 = FUN_001e4cd0(sVar8 + 1);
              *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;
              memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)*param_2,sVar8);
              *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;
            }
            *param_2 = *param_2 + sVar8;
          }
          goto LAB_001d1710;
        }
        goto LAB_001d175f;
      }
      iVar6 = FUN_001cf7c0();
      if (local_34 != (void *)0x0) {
        free(local_34);
        local_30 = 0;
        local_34 = (void *)0x0;
      }
      if (iVar6 == 0) goto LAB_001d175f;
      if (param_5 == 0) {
        iVar6 = FUN_001cf0b0(iVar6);
        if (iVar6 == 0) goto LAB_001d175f;
        iVar3 = *(int *)(param_1 + 0x40);
        uVar5 = FUN_001e4cd0(1);
        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;
        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),(void *)0x0,0);
        **(undefined1 **)(*(int *)(param_1 + 0x40) + iVar7 * 4) = 0;
        FUN_001ce390();
      }
      else {
        iVar6 = FUN_001cf0b0(iVar6);
        if (iVar6 == 0) goto LAB_001d175f;
      }
LAB_001d1710:
      iVar7 = iVar7 + 1;
      if (local_38 <= iVar7) goto LAB_001d1761;
      FUN_001ce240();
    }
    *param_2 = (int)(pcVar2 + 1);
    iVar6 = FUN_001cf7c0();
    if (iVar6 != 0) {
      FUN_001ce390();
      if (param_5 == 0) {
        sVar8 = local_30 - (int)local_34;
        iVar3 = *(int *)(param_1 + 0x40);
        uVar5 = FUN_001e4cd0(sVar8 + 1);
        *(undefined4 *)(iVar3 + iVar7 * 4) = uVar5;
        memcpy(*(void **)(*(int *)(param_1 + 0x40) + iVar7 * 4),local_34,sVar8);
        *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x40) + iVar7 * 4) + sVar8) = 0;
      }
      if (local_34 != (void *)0x0) {
        free(local_34);
        local_30 = 0;
        local_34 = (void *)0x0;
      }
      goto LAB_001d1710;
    }
    if (local_34 == (void *)0x0) {
LAB_001d175f:
      iVar6 = 0;
    }
    else {
      free(local_34);
    }
LAB_001d1761:
    if (local_40 != 0) goto LAB_001d1560;
  }
  else {
    if (*(char *)(iVar6 + 1) != 'z') {
      local_38 = FUN_001cddf0();
      if (local_38 < 1) {
        return 0;
      }
      __s = (byte *)*param_2;
      sVar8 = strlen((char *)__s);
      if ((int)sVar8 < local_38) {
        return 0;
      }
      bVar12 = false;
      bVar13 = (*param_1 & 4) == 0;
      if (bVar13) {
LAB_001d1a20:
        FUN_001ce160();
        if (param_4 != 0) {
          if (local_38 == 0) goto LAB_001d1840;
          FUN_001ce160();
        }
        *param_2 = *param_2 + local_38;
        goto LAB_001d1840;
      }
      iVar6 = 8;
      pbVar10 = __s;
      pbVar11 = (byte *)"JArray1Z";
      do {
        if (iVar6 == 0) break;
        iVar6 = iVar6 + -1;
        bVar12 = *pbVar10 < *pbVar11;
        bVar13 = *pbVar10 == *pbVar11;
        pbVar10 = pbVar10 + (uint)bVar14 * -2 + 1;
        pbVar11 = pbVar11 + (uint)bVar14 * -2 + 1;
      } while (bVar13);
      if ((!bVar12 && !bVar13) != bVar12) goto LAB_001d1a20;
      if (param_4 == 0) {
        *param_2 = (int)(__s + local_38);
      }
      else {
        FUN_001ce160();
        *param_2 = *param_2 + local_38;
      }
      iVar6 = FUN_001cd950();
      if (iVar6 == 0) {
        return 0;
      }
      local_40 = param_5;
      if (0 < local_38) goto LAB_001d15e5;
      iVar6 = 0;
LAB_001d1560:
      FUN_001ce240();
      goto LAB_001d178d;
    }
    *param_2 = iVar6 + 2;
    if (*(char *)(iVar6 + 2) == '\0') {
      return 0;
    }
    *param_2 = iVar6 + 3;
    iVar6 = FUN_001cdea0();
    if (iVar6 == -1) {
      return 0;
    }
    if ((*(int *)(param_1 + 0x40) != 0) && (*(int *)(param_1 + 0x44) <= iVar6)) {
      return 0;
    }
    iVar7 = FUN_001cdea0();
    if (iVar7 == -1) {
      return 0;
    }
    if (*(int *)(param_1 + 0x40) == 0) {
      FUN_001ce290();
      if (param_4 != 0) {
        FUN_001ce290();
      }
    }
    else {
      pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4);
      if ((((pcVar2 != (char *)0x0) && (*pcVar2 != '\0')) && (FUN_001ce240(), param_4 != 0)) &&
         ((pcVar2 = *(char **)(*(int *)(param_1 + 0x40) + iVar6 * 4), pcVar2 != (char *)0x0 &&
          (*pcVar2 != '\0')))) {
        FUN_001ce240();
      }
    }
LAB_001d1840:
    FUN_001ce240();
    iVar6 = FUN_001cd950();
    if (iVar6 == 0) {
      return 0;
    }
    if (0 < local_38) goto LAB_001d15dd;
LAB_001d186e:
    iVar6 = 0;
  }
  if (*(char *)(*(int *)(param_3 + 4) + -1) == '>') {
    FUN_001ce240();
  }
  FUN_001ce240();
LAB_001d178d:
  if ((param_5 & param_6) != 0) {
    uVar5 = FUN_001cdb90();
    FUN_001ce070(uVar5);
    return iVar6;
  }
  return iVar6;
}

