/* WARNING: Heritage AFTER dead removal. Example location: r0x0041d010 : 0x00405570 */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: ram */

void handle_event(undefined4 param_1,int param_2,int param_3)

{
  int iVar1;
  undefined4 *puVar2;
  undefined *puVar3;
  undefined4 *puVar4;
  undefined *puVar5;
  char *pcVar6;
  char *pcVar7;
  undefined **ppuVar8;
  undefined **ppuVar9;
  char *pcVar10;
  
  if (param_2 < 2) {
    fputs("SERVD: invalid event command !\n",_stderr);
    goto LAB_00405790;
  }
  pcVar10 = *(char **)(param_3 + 4);
  iVar1 = strcmp(pcVar10,"dump");
  puVar3 = PTR_LOOP_0041b0e0;
  if (iVar1 == 0) {
    FUN_00404b6c();
    goto LAB_00405790;
  }
  ppuVar8 = (undefined **)0x0;
  do {
    ppuVar9 = (undefined **)puVar3;
    if (ppuVar8 != (undefined **)0x0) {
      ppuVar9 = (undefined **)*ppuVar8;
    }
    if ((ppuVar9 == &PTR_LOOP_0041b0e0) || (ppuVar9 == (undefined **)0x0)) {
      ppuVar9 = (undefined **)0x0;
      break;
    }
    iVar1 = strcmp(ppuVar9[2],pcVar10);
    ppuVar8 = ppuVar9;
  } while (iVar1 != 0);
  if (3 < param_2) {
    pcVar6 = *(char **)(param_3 + 8);
    iVar1 = strcmp(pcVar6,"add");
    if (iVar1 == 0) {
      pcVar7 = *(char **)(param_3 + 0xc);
      if (ppuVar9 == (undefined **)0x0) {
        ppuVar9 = (undefined **)FUN_0040518c(pcVar10);
        puVar3 = PTR_LOOP_0041b0e4;
        if (ppuVar9 == (undefined **)0x0) goto LAB_00405790;
        *ppuVar9 = (undefined *)&PTR_LOOP_0041b0e0;
        ppuVar8 = ppuVar9;
        *(undefined ***)PTR_LOOP_0041b0e4 = ppuVar9;
        PTR_LOOP_0041b0e4 = (undefined *)ppuVar8;
        ppuVar9[1] = puVar3;
      }
      else {
        FUN_00404dc4(ppuVar9);
      }
LAB_00405518:
      pcVar6 = "default";
    }
    else {
      iVar1 = strcmp(pcVar6,"insert");
      if (iVar1 != 0) goto LAB_00405560;
      pcVar6 = *(char **)(param_3 + 0xc);
      if (ppuVar9 == (undefined **)0x0) {
        ppuVar9 = (undefined **)FUN_0040518c(pcVar10);
        puVar3 = PTR_LOOP_0041b0e4;
        if (ppuVar9 == (undefined **)0x0) goto LAB_00405790;
        *ppuVar9 = (undefined *)&PTR_LOOP_0041b0e0;
        ppuVar8 = ppuVar9;
        *(undefined ***)PTR_LOOP_0041b0e4 = ppuVar9;
        PTR_LOOP_0041b0e4 = (undefined *)ppuVar8;
        ppuVar9[1] = puVar3;
      }
      pcVar10 = strchr(pcVar6,0x3a);
      pcVar7 = pcVar6;
      if (pcVar10 == (char *)0x0) goto LAB_00405518;
      *pcVar10 = '\0';
      pcVar7 = pcVar10 + 1;
    }
    puVar2 = (undefined4 *)FUN_0040522c(pcVar6,pcVar7);
    if (puVar2 != (undefined4 *)0x0) {
      puVar4 = (undefined4 *)ppuVar9[6];
      *puVar2 = ppuVar9 + 5;
      ppuVar9[6] = (undefined *)puVar2;
      *puVar4 = puVar2;
      puVar2[1] = puVar4;
    }
    goto LAB_00405790;
  }
LAB_00405560:
  if (ppuVar9 == (undefined **)0x0) {
    fprintf(_stderr,"SERVD: event [%s] not found!\n",pcVar10);
    goto LAB_00405790;
  }
  if (param_2 < 4) {
    if (param_2 != 2) goto LAB_00405698;
  }
  else {
    iVar1 = strcmp(*(char **)(param_3 + 8),"remove");
    ppuVar8 = (undefined **)0x0;
    if (iVar1 == 0) {
      pcVar10 = *(char **)(param_3 + 0xc);
      do {
        if (ppuVar8 == (undefined **)0x0) goto LAB_00405670;
        ppuVar8 = (undefined **)*ppuVar8;
        while( true ) {
          if ((ppuVar8 == ppuVar9 + 5) || (ppuVar8 == (undefined **)0x0)) goto LAB_00405790;
          iVar1 = strcmp(ppuVar8[3],pcVar10);
          if (iVar1 != 0) break;
          puVar2 = (undefined4 *)ppuVar8[1];
          puVar3 = *ppuVar8;
          puVar5 = ppuVar8[2];
          *puVar2 = puVar3;
          *(undefined4 **)(puVar3 + 4) = puVar2;
          *ppuVar8 = (undefined *)0x0;
          ppuVar8[1] = (undefined *)0x0;
          if ((0 < (int)puVar5) && (iVar1 = child_running(), iVar1 == 0)) {
            ppuVar8[2] = (undefined *)0x0;
          }
          if ((int)ppuVar8[2] < 1) {
            FUN_00404c20(ppuVar8);
          }
          else {
            ppuVar8[5] = ppuVar8[5] + 1;
          }
LAB_00405670:
          ppuVar8 = (undefined **)ppuVar9[5];
        }
      } while( true );
    }
LAB_00405698:
    pcVar10 = *(char **)(param_3 + 8);
    iVar1 = strcmp(pcVar10,"kill");
    if (iVar1 == 0) {
      fprintf(_stderr,"SERVD: event [%s] was killed!\n",ppuVar9[2]);
      ppuVar9[3] = (undefined *)0x0;
      goto LAB_00405790;
    }
    iVar1 = strcmp(pcVar10,"dump");
    if (iVar1 == 0) {
      FUN_00404a80(ppuVar9);
      goto LAB_00405790;
    }
    iVar1 = strcmp(pcVar10,"flush");
    if (iVar1 == 0) {
      FUN_00404dc4(ppuVar9);
      goto LAB_00405790;
    }
  }
  ppuVar9[3] = ppuVar9[3] + 1;
  if (ppuVar9[4] != (undefined *)0x0) {
    free(ppuVar9[4]);
  }
  pcVar10 = (char *)0x0;
  if (param_2 != 2) {
    pcVar10 = strdup(*(char **)(param_3 + 8))   //possible issue identified - semgrep
  }
  ppuVar9[4] = pcVar10;
LAB_00405790:
  service_events();
  return;
}