int FUN_00411dc0(undefined4 param_1,int param_2,char param_3,char *param_4)

{
  char cVar1;
  bool bVar2;
  int iVar3;
  int iVar4;
  int *piVar5;
  int iVar6;
  int *piVar7;
  char *pcVar8;
  int iVar9;
  undefined1 auStack_38 [8];
  undefined1 *local_30;
  
  iVar3 = sobj_new();
  iVar9 = (int)param_3;
  if (iVar3 != 0) {
    iVar4 = sobj_add_string(iVar3,param_4);
    if ((iVar4 < 0) || ((iVar9 != 0 && (iVar4 = sobj_add_char(iVar3,iVar9), iVar4 < 0)))) {
      iVar4 = 0;
LAB_00411fa8:
      bVar2 = true;
    }
    else {
      local_30 = auStack_38;
      iVar4 = 0;
      do {
        piVar5 = (int *)sobj_new();
        if (piVar5 == (int *)0x0) goto LAB_00411fa8;
        sobj_xstream_eatwhite(param_1);
        pcVar8 = *(char **)(iVar3 + 0x14);
        if (pcVar8 == (char *)0x0) {
          pcVar8 = "";
        }
        iVar4 = sobj_xstream_read(param_1,piVar5,pcVar8,local_30)   //possible issue identified - semgrep
        if (iVar4 == 0) {
LAB_00411f94:
          sobj_del(piVar5);
          bVar2 = true;
          break;
        }
        if (piVar5[4] == 0) {
          sobj_del(piVar5);
        }
        else {
          piVar7 = *(int **)(param_2 + 4);
          *piVar5 = param_2;
          *(int **)(param_2 + 4) = piVar5;
          *piVar7 = (int)piVar5;
          piVar5[1] = (int)piVar7;
        }
        bVar2 = false;
        if (iVar4 == iVar9) break;
        pcVar8 = param_4;
        if (param_4 != (char *)0x0) {
          do {
            cVar1 = *pcVar8;
            if (cVar1 == '\0') goto LAB_00411f34;
            pcVar8 = pcVar8 + 1;
          } while (cVar1 != (char)iVar4);
          piVar5 = (int *)sobj_new();
          if (piVar5 == (int *)0x0) goto LAB_00411fa8;
          iVar6 = sobj_add_char(piVar5,iVar4);
          if (iVar6 < 0) goto LAB_00411f94;
          piVar7 = *(int **)(param_2 + 4);
          *piVar5 = param_2;
          *(int **)(param_2 + 4) = piVar5;
          *piVar7 = (int)piVar5;
          piVar5[1] = (int)piVar7;
        }
LAB_00411f34:
        bVar2 = false;
      } while (iVar4 != -1);
    }
    sobj_del(iVar3);
    if (!bVar2) {
      return iVar4;
    }
  }
  FUN_00410db4(param_2);
  return 0;
}