int * FUN_00401fb4(int param_1,int param_2,int param_3,int param_4)

{
  bool bVar1;
  int *piVar2;
  undefined4 *puVar3;
  int iVar4;
  int *piVar5;
  int *piVar6;
  int local_58 [16];
  
  piVar2 = DAT_004ba168;
  piVar5 = (int *)0x0;
  if ((int **)DAT_004ba168 != &DAT_004ba168) {
    piVar5 = (int *)DAT_004ba168[1];
    iVar4 = *DAT_004ba168;
    *piVar5 = iVar4;
    *(int **)(iVar4 + 4) = piVar5;
    piVar2[2] = 0x102;
    *piVar2 = 0;
    piVar2[1] = 0;
    FUN_0047f250(local_58);
    piVar2[3] = param_1 + local_58[0];
    piVar2[4] = param_2;
    while (999999 < piVar2[4]) {
      piVar2[4] = piVar2[4] + -1000000;
      piVar2[3] = piVar2[3] + 1;
    }
    *piVar2 = (int)piVar2;
    piVar6 = DAT_004ba190;
    piVar2[6] = param_3;
    piVar2[5] = param_4;
    piVar2[1] = (int)piVar2;
    piVar5 = piVar2;
    if ((int **)piVar6 == &DAT_004ba190) {
      DAT_004ba194 = piVar2;
      *piVar2 = (int)&DAT_004ba190;
      piVar2[1] = (int)&DAT_004ba190;
      DAT_004ba190 = piVar2;
    }
    else {
      do {
        bVar1 = piVar2[3] < piVar6[3];
        if (piVar2[3] == piVar6[3]) {
          bVar1 = piVar2[4] < piVar6[4];
        }
      } while ((!bVar1) && (piVar6 = (int *)*piVar6, (int **)piVar6 != &DAT_004ba190));
      puVar3 = (undefined4 *)piVar6[1];
      *piVar2 = (int)piVar6;
      piVar6[1] = (int)piVar2;
      *puVar3 = piVar2;
      piVar2[1] = (int)puVar3;
    }
  }
  return piVar5;
}