uint FUN_0040c9e4(undefined4 *param_1,int param_2,int param_3,undefined4 param_4,int *param_5)

{
  uint uVar1;
  int *piVar2;
  int iVar3;
  int iVar4;
  undefined4 uVar5;
  char *pcVar6;
  int iVar7;
  char *pcVar8;
  int iVar9;
  undefined4 uVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  int *piVar14;
  code *pcVar15;
  longlong lVar16;
  char acStack_d0 [16];
  char acStack_c0 [128];
  int *local_40;
  undefined4 local_3c;
  int local_38;
  int local_34;
  char *local_30;
  char *local_2c;
  
  piVar14 = (int *)*param_5;
  uVar12 = 0xffffffff;
  if (piVar14 == param_5) {
    return 0;
  }
  local_30 = acStack_d0;
  local_2c = acStack_c0;
LAB_0040ca54:
  sobj_free(param_4);
  switch(piVar14[2]) {
  case 0:
    pcVar8 = (char *)sobj_new();
    if (pcVar8 != (char *)0x0) {
      iVar9 = piVar14[5];
      if (piVar14[5] == 0) {
        iVar9 = param_3;
      }
      pcVar6 = (char *)FUN_0040c950(param_1,iVar9,piVar14[4]);
      iVar9 = piVar14[3];
      if (iVar9 - 3U < 2) {
        lVar16 = atoll(pcVar6);
        if (iVar9 == 3) {
          lVar16 = lVar16 + 1;
        }
        else {
          lVar16 = lVar16 + -1;
        }
LAB_0040cc10:
        sprintf(local_2c,"%lld",(int)lVar16,(int)((ulonglong)lVar16 >> 0x20))   //possible issue identified - semgrep
        pcVar15 = sobj_add_string;
        pcVar6 = local_2c;
      }
      else {
        uVar12 = FUN_0040d858(param_1,param_2,param_3,pcVar8,piVar14 + 6);
        if ((int)uVar12 < 0) goto LAB_0040d408;
        if (piVar14[3] != 0) {
          lVar16 = atoll(pcVar6);
          iVar9 = (int)((ulonglong)lVar16 >> 0x20);
          uVar12 = (uint)lVar16;
          pcVar6 = (char *)sobj_get_string(pcVar8);
          lVar16 = atoll(pcVar6);
          iVar3 = (int)((ulonglong)lVar16 >> 0x20);
          uVar1 = (uint)lVar16;
          uVar11 = uVar1 + uVar12;
          if (piVar14[3] == 1) {
            iVar9 = (uint)(uVar11 < uVar1) + iVar3 + iVar9;
          }
          else {
            uVar11 = uVar12 - uVar1;
            iVar9 = (iVar9 - iVar3) - (uint)(uVar12 < uVar11);
          }
          lVar16 = CONCAT44(iVar9,uVar11);
          goto LAB_0040cc10;
        }
        pcVar15 = sobj_move;
        pcVar6 = pcVar8;
      }
      (*pcVar15)(param_4,pcVar6);
      iVar9 = piVar14[5];
      if (piVar14[5] == 0) {
        iVar9 = param_3;
      }
      iVar3 = piVar14[4];
      uVar10 = sobj_get_string(param_4);
      FUN_0040c984(param_1,iVar9,iVar3,uVar10);
      uVar12 = 0;
LAB_0040d408:
      sobj_del(pcVar8);
      goto switchD_0040ca90_default;
    }
    goto LAB_0040d260;
  case 1:
    uVar12 = FUN_0040dc50(param_1,3,param_3,piVar14 + 3);
    if (-1 < (int)uVar12) {
      piVar2 = piVar14 + 7;
      if (uVar12 != 0) {
        piVar2 = piVar14 + 5;
      }
      uVar12 = FUN_0040c9e4(param_1,3,param_3,param_4,piVar2);
    }
    goto LAB_0040d34c;
  case 2:
    uVar12 = FUN_0040d56c(param_1,param_2,param_3,param_4,piVar14 + 3);
    goto LAB_0040d34c;
  case 3:
    do {
      uVar12 = FUN_0040dc50(param_1,2,param_3,piVar14 + 3);
      if (((int)uVar12 < 1) ||
         (uVar12 = FUN_0040c9e4(param_1,2,param_3,param_4,piVar14 + 5), (int)uVar12 < 0))
      goto LAB_0040cd74;
    } while ((uVar12 == 4) || (2 < uVar12 - 1));
    if (uVar12 == 3) goto switchD_0040ca90_default;
LAB_0040cd74:
    sobj_free(param_4);
    if ((uVar12 != 2) && (uVar12 != 4)) goto switchD_0040ca90_default;
    uVar12 = 0;
    goto LAB_0040d37c;
  case 4:
    local_38 = sobj_new();
    local_34 = sobj_new();
    iVar9 = sobj_new();
    if (iVar9 == 0) {
      client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","INTERNAL ERROR");
      client_printf(*param_1,"memory allocation failed !");
      client_printf(*param_1,"\n!! %s <<<<<<<<<<<<<<<<<<<<<<<<<\n","INTERNAL ERROR");
      uVar12 = 0xffffffff;
    }
    else {
      iVar3 = FUN_0040d858(param_1,param_2,param_3,iVar9,piVar14 + 3);
      uVar12 = 0xffffffff;
      if (-1 < iVar3) {
        local_3c = param_1[3];
        param_1[3] = 0;
        uVar10 = FUN_0040c950(param_1,param_3,"InDeX");
        sobj_add_string(local_38,uVar10);
        uVar10 = FUN_0040c950(param_1,param_3,"VaLuE");
        sobj_add_string(local_34,uVar10);
        iVar3 = 0;
        iVar4 = sobj_get_length(iVar9);
        if (iVar4 != 0) {
          uVar10 = xmldb_anchor_node(local_3c);
          uVar5 = sobj_get_string(iVar9);
          iVar3 = xmldb_find_node(uVar10,uVar5,0,1);
        }
        local_40 = piVar14 + 5;
        iVar4 = 0;
        uVar12 = 0;
LAB_0040d0b4:
        iVar13 = iVar3;
        if (iVar13 != 0) {
          iVar4 = iVar4 + 1;
          sprintf(local_30,"%d",iVar4)   //possible issue identified - semgrep
          if (param_1[3] != 0) {
            xmldb_del_anchor();
          }
          uVar10 = xmldb_set_anchor(iVar13);
          param_1[3] = uVar10;
          FUN_0040c984(param_1,param_3,"InDeX",local_30);
          uVar10 = xmlnode_get_value(iVar13);
          FUN_0040c984(param_1,param_3,"VaLuE",uVar10);
          uVar12 = FUN_0040c9e4(param_1,4,param_3,param_4,local_40);
          if (((((int)uVar12 < 0) || (uVar12 == 3)) || (uVar12 == 2)) ||
             (iVar3 = iVar13, uVar12 == 1)) goto LAB_0040d0bc;
          do {
            iVar3 = xmlnode_get_sibling(iVar3);
            if (iVar3 == 0) break;
            pcVar8 = (char *)xmlnode_get_name(iVar3);
            pcVar6 = (char *)xmlnode_get_name(iVar13);
            iVar7 = strcmp(pcVar8,pcVar6);
          } while (iVar7 != 0);
          goto LAB_0040d0b4;
        }
LAB_0040d0bc:
        pcVar8 = (char *)sobj_get_string(local_38);
        if (*pcVar8 == '\0') {
          uVar10 = FUN_0040c86c(param_1,param_3,"InDeX");
          FUN_0040995c(uVar10);
          uVar10 = FUN_0040c86c(param_1,param_3,"VaLuE");
          FUN_0040995c(uVar10);
        }
        else {
          uVar10 = sobj_get_string(local_38,param_3);
          FUN_0040c984(param_1,param_3,"InDeX",uVar10);
          uVar10 = sobj_get_string(local_34);
          FUN_0040c984(param_1,param_3,"VaLuE",uVar10);
        }
        if (param_1[3] != 0) {
          xmldb_del_anchor();
        }
        param_1[3] = local_3c;
        if ((uVar12 != 3) && ((sobj_free(param_4), uVar12 == 2 || (uVar12 == 4)))) {
          uVar12 = 0;
        }
      }
    }
    if (local_38 != 0) {
      sobj_del(local_38);
    }
    if (local_34 != 0) {
      sobj_del(local_34);
    }
    if (iVar9 != 0) {
      sobj_del(iVar9);
    }
LAB_0040d34c:
    if (uVar12 == 4) {
switchD_0040ca90_caseD_9:
      uVar12 = -(uint)(2 < param_2 - 2U) | 4;
      break;
    }
switchD_0040ca90_default:
    if (uVar12 != 0) break;
LAB_0040d37c:
    piVar14 = (int *)*piVar14;
    if (piVar14 == param_5) {
LAB_0040d3a4:
      sobj_free(param_4);
      return uVar12;
    }
    goto LAB_0040ca54;
  case 5:
    pcVar8 = (char *)sobj_new();
    if (pcVar8 != (char *)0x0) {
      iVar9 = FUN_0040d858(param_1,param_2,param_3,pcVar8,piVar14 + 3);
      uVar12 = 0xffffffff;
      if (-1 < iVar9) {
        uVar10 = sobj_get_string(pcVar8);
        client_puts(uVar10,*param_1);
        uVar12 = 0;
      }
      goto LAB_0040d408;
    }
LAB_0040d260:
    client_printf(*param_1,"\n!! %s >>>>>>>>>>>>>>>>>>>>>>>>>\n","INTERNAL ERROR");
    client_printf(*param_1,"memory allocation failed !");
    client_printf(*param_1,"\n!! %s <<<<<<<<<<<<<<<<<<<<<<<<<\n","INTERNAL ERROR");
    uVar12 = 0xffffffff;
    break;
  case 6:
    uVar12 = FUN_0040d858(param_1,param_2,param_3,param_4,piVar14 + 3);
    if (-1 < (int)uVar12) {
      uVar12 = 3;
    }
    break;
  case 7:
    uVar12 = 2;
    break;
  case 8:
    uVar12 = 1;
    break;
  case 9:
    goto switchD_0040ca90_caseD_9;
  default:
    goto switchD_0040ca90_default;
  }
  if (uVar12 == 3) {
    return 3;
  }
  goto LAB_0040d3a4;
}