// Decompiled from acclient.exe — chunk 0x00600000
// Ghidra 12.0.4 + pyghidra headless

// --- FUN_006001fb at 0x006001FB (size: 16) ---


void __fastcall FUN_006001fb(undefined4 *param_1)



{

  *param_1 = &PTR_FUN_007f15d4;

  operator_delete((void *)param_1[3]);

  return;

}





// --- FUN_0060020b at 0x0060020B (size: 44) ---


undefined4 __thiscall FUN_0060020b(int param_1,undefined4 param_2)



{

  int iVar1;

  undefined4 uVar2;

  

  iVar1 = FUN_005df0f5(param_2);

  *(int *)(param_1 + 0xc) = iVar1;

  if (iVar1 == 0) {

    uVar2 = 0x8007000e;

  }

  else {

    *(undefined4 *)(param_1 + 8) = param_2;

    uVar2 = 0;

  }

  return uVar2;

}





// --- FUN_00600237 at 0x00600237 (size: 36) ---


undefined4 __thiscall FUN_00600237(int param_1,undefined4 param_2,undefined4 param_3)



{

  operator_delete(*(void **)(param_1 + 0xc));

  *(undefined4 *)(param_1 + 0xc) = param_2;

  *(undefined4 *)(param_1 + 8) = param_3;

  return 0;

}





// --- FUN_0060025b at 0x0060025B (size: 18) ---


undefined4 FUN_0060025b(int param_1)



{

  *(int *)(param_1 + 4) = *(int *)(param_1 + 4) + 1;

  return *(undefined4 *)(param_1 + 4);

}





// --- FUN_0060026d at 0x0060026D (size: 37) ---


int FUN_0060026d(int *param_1)



{

  int iVar1;

  int iVar2;

  

  iVar2 = param_1[1];

  iVar1 = iVar2 + -1;

  param_1[1] = iVar1;

  if (iVar2 == 1) {

    (**(code **)(*param_1 + 0x14))(1);

  }

  return iVar1;

}





// --- FUN_00600292 at 0x00600292 (size: 15) ---


undefined4 FUN_00600292(int param_1)



{

  return *(undefined4 *)(param_1 + 0xc);

}





// --- FUN_006002a1 at 0x006002A1 (size: 15) ---


undefined4 FUN_006002a1(int param_1)



{

  return *(undefined4 *)(param_1 + 8);

}





// --- FUN_006002b0 at 0x006002B0 (size: 33) ---


void * __thiscall FUN_006002b0(void *param_1,byte param_2)



{

  FUN_006001fb();

  if ((param_2 & 1) != 0) {

    operator_delete(param_1);

  }

  return param_1;

}





// --- FUN_006002d1 at 0x006002D1 (size: 73) ---


undefined4 FUN_006002d1(int *param_1,int *param_2,undefined4 *param_3)



{

  int iVar1;

  int *piVar2;

  int *piVar3;

  bool bVar4;

  

  *param_3 = 0;

  iVar1 = 4;

  bVar4 = true;

  piVar2 = param_2;

  piVar3 = &DAT_007cc670;

  do {

    if (iVar1 == 0) break;

    iVar1 = iVar1 + -1;

    bVar4 = *piVar2 == *piVar3;

    piVar2 = piVar2 + 1;

    piVar3 = piVar3 + 1;

  } while (bVar4);

  if (!bVar4) {

    iVar1 = 4;

    bVar4 = true;

    piVar2 = &DAT_007f14d8;

    do {

      if (iVar1 == 0) break;

      iVar1 = iVar1 + -1;

      bVar4 = *param_2 == *piVar2;

      param_2 = param_2 + 1;

      piVar2 = piVar2 + 1;

    } while (bVar4);

    if (!bVar4) {

      return 0x80004002;

    }

  }

  *param_3 = param_1;

  (**(code **)(*param_1 + 4))(param_1);

  return 0;

}





// --- FUN_0060031a at 0x0060031A (size: 24) ---


void __fastcall FUN_0060031a(undefined4 *param_1)



{

  param_1[3] = 0;

  param_1[2] = 0;

  *param_1 = &PTR_FUN_007f15d4;

  param_1[1] = 1;

  return;

}





// --- FUN_00600332 at 0x00600332 (size: 98) ---


int FUN_00600332(undefined4 param_1,undefined4 *param_2)



{

  int iVar1;

  int *piVar2;

  

  if (param_2 == (undefined4 *)0x0) {

    iVar1 = -0x7789f794;

  }

  else {

    iVar1 = FUN_005df0f5(0x10);

    if (iVar1 == 0) {

      piVar2 = (int *)0x0;

    }

    else {

      piVar2 = (int *)FUN_0060031a();

    }

    if (piVar2 == (int *)0x0) {

      iVar1 = -0x7ff8fff2;

    }

    else {

      iVar1 = (**(code **)(*piVar2 + 0x18))(param_1);

      if (iVar1 < 0) {

        (**(code **)(*piVar2 + 0x14))(1);

      }

      else {

        *param_2 = piVar2;

        iVar1 = 0;

      }

    }

  }

  return iVar1;

}





// --- FUN_00600394 at 0x00600394 (size: 11) ---


void FUN_00600394(void)



{

  FUN_00600332();

  return;

}





// --- FUN_0060039f at 0x0060039F (size: 107) ---


float * FUN_0060039f(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  

  fVar1 = *param_2;

  fVar2 = param_3[2];

  fVar3 = *param_2;

  fVar4 = param_3[1];

  fVar5 = *param_2;

  fVar6 = param_3[3];

  fVar7 = param_2[1];

  fVar8 = param_3[6];

  fVar9 = param_2[1];

  fVar10 = param_3[5];

  fVar11 = param_2[1];

  fVar12 = param_3[7];

  fVar13 = param_3[0xd];

  fVar14 = param_3[0xe];

  fVar15 = param_3[0xf];

  *param_1 = param_3[0xc] + param_2[1] * param_3[4] + *param_2 * *param_3;

  param_1[1] = fVar13 + fVar9 * fVar10 + fVar3 * fVar4;

  param_1[2] = fVar14 + fVar7 * fVar8 + fVar1 * fVar2;

  param_1[3] = fVar15 + fVar11 * fVar12 + fVar5 * fVar6;

  return param_1;

}





// --- FUN_0060040a at 0x0060040A (size: 55) ---


float * FUN_0060040a(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  

  fVar1 = *param_2;

  fVar2 = param_3[1];

  fVar3 = param_2[1];

  fVar4 = param_3[5];

  *param_1 = param_2[1] * param_3[4] + *param_2 * *param_3;

  param_1[1] = fVar3 * fVar4 + fVar1 * fVar2;

  return param_1;

}





// --- FUN_00600441 at 0x00600441 (size: 141) ---


float * FUN_00600441(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  float fVar17;

  float fVar18;

  float fVar19;

  float fVar20;

  float fVar21;

  

  fVar1 = *param_2;

  fVar2 = param_3[2];

  fVar3 = *param_2;

  fVar4 = param_3[1];

  fVar5 = *param_2;

  fVar6 = param_3[3];

  fVar7 = param_2[1];

  fVar8 = param_3[6];

  fVar9 = param_2[1];

  fVar10 = param_3[5];

  fVar11 = param_2[1];

  fVar12 = param_3[7];

  fVar13 = param_2[2];

  fVar14 = param_3[10];

  fVar15 = param_2[2];

  fVar16 = param_3[9];

  fVar17 = param_2[2];

  fVar18 = param_3[0xb];

  fVar19 = param_3[0xd];

  fVar20 = param_3[0xe];

  fVar21 = param_3[0xf];

  *param_1 = param_3[0xc] + param_2[2] * param_3[8] + param_2[1] * param_3[4] + *param_2 * *param_3;

  param_1[1] = fVar19 + fVar15 * fVar16 + fVar9 * fVar10 + fVar3 * fVar4;

  param_1[2] = fVar20 + fVar13 * fVar14 + fVar7 * fVar8 + fVar1 * fVar2;

  param_1[3] = fVar21 + fVar17 * fVar18 + fVar11 * fVar12 + fVar5 * fVar6;

  return param_1;

}





// --- FUN_006004ce at 0x006004CE (size: 97) ---


float * FUN_006004ce(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  

  fVar1 = *param_2;

  fVar2 = param_3[1];

  fVar3 = *param_2;

  fVar4 = param_3[2];

  fVar5 = param_2[1];

  fVar6 = param_3[5];

  fVar7 = param_2[1];

  fVar8 = param_3[6];

  fVar9 = param_2[2];

  fVar10 = param_3[9];

  fVar11 = param_2[2];

  fVar12 = param_3[10];

  *param_1 = param_2[2] * param_3[8] + param_2[1] * param_3[4] + *param_2 * *param_3;

  param_1[1] = fVar9 * fVar10 + fVar5 * fVar6 + fVar1 * fVar2;

  param_1[2] = fVar11 * fVar12 + fVar7 * fVar8 + fVar3 * fVar4;

  return param_1;

}





// --- FUN_0060052f at 0x0060052F (size: 155) ---


float * FUN_0060052f(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  float fVar17;

  float fVar18;

  float fVar19;

  float fVar20;

  float fVar21;

  float fVar22;

  float fVar23;

  float fVar24;

  

  fVar1 = *param_2;

  fVar2 = param_3[2];

  fVar3 = *param_2;

  fVar4 = param_3[1];

  fVar5 = *param_2;

  fVar6 = param_3[3];

  fVar7 = param_2[1];

  fVar8 = param_3[6];

  fVar9 = param_2[1];

  fVar10 = param_3[5];

  fVar11 = param_2[1];

  fVar12 = param_3[7];

  fVar13 = param_2[2];

  fVar14 = param_3[10];

  fVar15 = param_2[2];

  fVar16 = param_3[9];

  fVar17 = param_2[2];

  fVar18 = param_3[0xb];

  fVar19 = param_2[3];

  fVar20 = param_3[0xe];

  fVar21 = param_2[3];

  fVar22 = param_3[0xd];

  fVar23 = param_2[3];

  fVar24 = param_3[0xf];

  *param_1 = param_2[3] * param_3[0xc] +

             param_2[2] * param_3[8] + param_2[1] * param_3[4] + *param_2 * *param_3;

  param_1[1] = fVar21 * fVar22 + fVar15 * fVar16 + fVar9 * fVar10 + fVar3 * fVar4;

  param_1[2] = fVar19 * fVar20 + fVar13 * fVar14 + fVar7 * fVar8 + fVar1 * fVar2;

  param_1[3] = fVar23 * fVar24 + fVar17 * fVar18 + fVar11 * fVar12 + fVar5 * fVar6;

  return param_1;

}





// --- FUN_006005ca at 0x006005CA (size: 69) ---


float10 FUN_006005ca(uint param_1)



{

  uint uVar1;

  

  uVar1 = param_1 >> 0xc & 0xff8;

  return ((float10)(float)(param_1 & 0xffffff | 0x3f000000) *

          (float10)*(float *)(&DAT_00826ab8 + uVar1) + (float10)*(float *)(&DAT_00826abc + uVar1)) *

         (float10)(float)(0xbeffffff - param_1 >> 1 & 0xff800000);

}





// --- FUN_0060060f at 0x0060060F (size: 204) ---


float * FUN_0060060f(float *param_1,float *param_2)



{

  float fVar1;

  float fVar2;

  float fVar3;

  uint uVar4;

  float10 fVar5;

  

  fVar5 = (float10)*param_2 * (float10)*param_2 + (float10)param_2[1] * (float10)param_2[1] +

          (float10)param_2[2] * (float10)param_2[2];

  fVar1 = (float)fVar5;

  if (fVar1 == 0.0) {

    ffree(fVar5);

    *param_1 = 0.0;

    param_1[1] = 0.0;

    param_1[2] = 0.0;

  }

  else if ((uint)ABS((float)(fVar5 - (float10)1)) < 0x3727c5ad) {

    if (param_1 != param_2) {

      *param_1 = *param_2;

      param_1[1] = param_2[1];

      param_1[2] = param_2[2];

    }

  }

  else {

    uVar4 = (uint)fVar1 >> 0xc & 0xff8;

    fVar3 = ((float)((uint)fVar1 & 0xffffff | 0x3f000000) * *(float *)(&DAT_00826ab8 + uVar4) +

            *(float *)(&DAT_00826abc + uVar4)) * (float)(0xbeffffffU - (int)fVar1 >> 1 & 0xff800000)

    ;

    fVar1 = param_2[1];

    fVar2 = param_2[2];

    *param_1 = *param_2 * fVar3;

    param_1[1] = fVar1 * fVar3;

    param_1[2] = fVar2 * fVar3;

  }

  return param_1;

}





// --- FUN_006006db at 0x006006DB (size: 229) ---


void FUN_006006db(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  int iVar5;

  int iVar6;

  float *pfVar7;

  float local_44 [16];

  

  if (param_3 == param_1) {

    if (param_2 != param_1) {

      iVar6 = -4;

      do {

        iVar5 = -0x10;

        fVar1 = param_3[iVar6 + 4];

        fVar2 = param_3[iVar6 + 8];

        fVar3 = param_3[iVar6 + 0xc];

        fVar4 = param_3[iVar6 + 0x10];

        do {

          param_1[iVar5 + 0x10] =

               (float)((float10)fVar4 * (float10)param_2[iVar5 + 0x13] +

                       (float10)fVar2 * (float10)param_2[iVar5 + 0x11] +

                      (float10)fVar1 * (float10)param_2[iVar5 + 0x10] +

                      (float10)fVar3 * (float10)param_2[iVar5 + 0x12]);

          iVar5 = iVar5 + 4;

        } while (iVar5 != 0);

        ffree((float10)fVar1);

        ffree((float10)fVar2);

        ffree((float10)fVar3);

        ffree((float10)fVar4);

        param_1 = param_1 + 1;

        iVar6 = iVar6 + 1;

      } while (iVar6 != 0);

      return;

    }

    pfVar7 = local_44;

    for (iVar6 = 0x10; iVar6 != 0; iVar6 = iVar6 + -1) {

      *pfVar7 = *param_3;

      param_3 = param_3 + 1;

      pfVar7 = pfVar7 + 1;

    }

    param_3 = local_44;

  }

  iVar6 = -4;

  do {

    iVar5 = -4;

    fVar1 = *param_2;

    fVar2 = param_2[1];

    fVar3 = param_2[2];

    fVar4 = param_2[3];

    do {

      param_1[iVar5 + 4] =

           (float)((float10)fVar4 * (float10)param_3[iVar5 + 0x10] +

                   (float10)fVar2 * (float10)param_3[iVar5 + 8] +

                  (float10)fVar1 * (float10)param_3[iVar5 + 4] +

                  (float10)fVar3 * (float10)param_3[iVar5 + 0xc]);

      iVar5 = iVar5 + 1;

    } while (iVar5 != 0);

    ffree((float10)fVar1);

    ffree((float10)fVar2);

    ffree((float10)fVar3);

    ffree((float10)fVar4);

    param_2 = param_2 + 4;

    param_1 = param_1 + 4;

    iVar6 = iVar6 + 1;

  } while (iVar6 != 0);

  return;

}





// --- FUN_006007c0 at 0x006007C0 (size: 144) ---


void FUN_006007c0(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float *pfVar5;

  float *pfVar6;

  int iVar7;

  int iVar8;

  float local_48 [17];

  

  if ((param_1 == param_2) || (pfVar5 = param_1, param_1 == param_3)) {

    pfVar5 = local_48;

  }

  iVar8 = -4;

  do {

    iVar7 = -4;

    pfVar6 = pfVar5 + iVar8 + 4;

    fVar1 = *param_2;

    fVar2 = param_2[1];

    fVar3 = param_2[2];

    fVar4 = param_2[3];

    do {

      *pfVar6 = (float)((float10)fVar4 * (float10)param_3[iVar7 + 0x10] +

                        (float10)fVar2 * (float10)param_3[iVar7 + 8] +

                       (float10)fVar1 * (float10)param_3[iVar7 + 4] +

                       (float10)fVar3 * (float10)param_3[iVar7 + 0xc]);

      pfVar6 = pfVar6 + 4;

      iVar7 = iVar7 + 1;

    } while (iVar7 != 0);

    ffree((float10)fVar1);

    ffree((float10)fVar2);

    ffree((float10)fVar3);

    ffree((float10)fVar4);

    param_2 = param_2 + 4;

    iVar8 = iVar8 + 1;

  } while (iVar8 != 0);

  if (pfVar5 != param_1) {

    for (iVar8 = 0x10; iVar8 != 0; iVar8 = iVar8 + -1) {

      *param_1 = *pfVar5;

      pfVar5 = pfVar5 + 1;

      param_1 = param_1 + 1;

    }

  }

  return;

}





// --- FUN_00600850 at 0x00600850 (size: 74) ---


void FUN_00600850(undefined4 *param_1)



{

  *param_1 = FUN_0060039f;

  param_1[1] = FUN_00600441;

  param_1[2] = FUN_0060052f;

  param_1[3] = FUN_006006db;

  param_1[4] = FUN_006007c0;

  param_1[5] = FUN_0060040a;

  param_1[6] = FUN_006004ce;

  param_1[7] = FUN_0060060f;

  param_1[0x23] = FUN_0060052f;

  return;

}





// --- FUN_0060089a at 0x0060089A (size: 78) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void __fastcall FUN_0060089a(uint param_1)



{

  float fVar1;

  float *in_EAX;

  

  fVar1 = _DAT_007edee8;

  *in_EAX = (float)(param_1 >> 0xb & 0x1f) * _DAT_007edee8;

  in_EAX[1] = (float)(param_1 >> 5 & 0x3f) * _DAT_007edee0;

  in_EAX[2] = (float)(param_1 & 0x1f) * fVar1;

  in_EAX[3] = 1.0;

  return;

}





// --- FUN_006008e8 at 0x006008E8 (size: 132) ---


undefined4 __fastcall FUN_006008e8(float *param_1)



{

  float fVar1;

  float fVar2;

  int iVar3;

  

  iVar3 = 0x10;

  do {

    if (DAT_00796344 == param_1[3]) {

      *param_1 = 0.0;

      param_1[1] = 0.0;

      fVar1 = 0.0;

LAB_00600960:

      param_1[2] = fVar1;

    }

    else if (param_1[3] < 1.0) {

      fVar1 = 1.0 / param_1[3];

      if (param_1[3] <= *param_1) {

        fVar2 = 1.0;

      }

      else {

        fVar2 = fVar1 * *param_1;

      }

      *param_1 = fVar2;

      if (param_1[3] <= param_1[1]) {

        fVar2 = 1.0;

      }

      else {

        fVar2 = fVar1 * param_1[1];

      }

      param_1[1] = fVar2;

      if (param_1[3] <= param_1[2]) {

        fVar1 = 1.0;

      }

      else {

        fVar1 = fVar1 * param_1[2];

      }

      goto LAB_00600960;

    }

    param_1 = param_1 + 4;

    iVar3 = iVar3 + -1;

    if (iVar3 == 0) {

      return 0;

    }

  } while( true );

}





// --- FUN_0060096c at 0x0060096C (size: 48) ---


undefined4 __fastcall FUN_0060096c(float *param_1)



{

  float *in_EAX;

  int iVar1;

  

  iVar1 = 0x10;

  do {

    *param_1 = in_EAX[3] * *in_EAX;

    iVar1 = iVar1 + -1;

    param_1[1] = in_EAX[1] * in_EAX[3];

    param_1[2] = in_EAX[2] * in_EAX[3];

    param_1[3] = in_EAX[3];

    in_EAX = in_EAX + 4;

    param_1 = param_1 + 4;

  } while (iVar1 != 0);

  return 0;

}





// --- FUN_0060099c at 0x0060099C (size: 259) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



uint __fastcall FUN_0060099c(float *param_1)



{

  float local_20;

  float local_1c;

  float local_18;

  

  if (DAT_00796344 <= *param_1) {

    if (_DAT_007938b0 < *param_1) {

      local_20 = 1.0;

    }

    else {

      local_20 = *param_1;

    }

  }

  else {

    local_20 = 0.0;

  }

  if (DAT_00796344 <= param_1[1]) {

    if (_DAT_007938b0 < param_1[1]) {

      local_1c = 1.0;

    }

    else {

      local_1c = param_1[1];

    }

  }

  else {

    local_1c = 0.0;

  }

  if (DAT_00796344 <= param_1[2]) {

    if (param_1[2] <= _DAT_007938b0) {

      local_18 = param_1[2];

    }

    else {

      local_18 = 1.0;

    }

  }

  else {

    local_18 = 0.0;

  }

  return ((int)ROUND(local_20 * _DAT_007edeec + _DAT_007938b8) << 6 |

         (int)ROUND(local_1c * _DAT_007edee4 + _DAT_007938b8)) << 5 |

         (int)ROUND(local_18 * _DAT_007edeec + _DAT_007938b8);

}





// --- FUN_00600a9f at 0x00600A9F (size: 807) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_00600a9f(float *param_1,float *param_2,int param_3,uint param_4)



{

  float fVar1;

  float *pfVar2;

  uint uVar3;

  int iVar4;

  float *pfVar5;

  uint uVar6;

  undefined2 in_FPUControlWord;

  float local_58 [6];

  undefined4 local_40;

  undefined4 local_3c;

  undefined4 local_38;

  uint local_34;

  float local_30;

  float local_2c;

  float local_28;

  uint local_24;

  undefined4 *local_20;

  float local_1c;

  float local_18;

  float local_14;

  float local_10;

  float local_c;

  float local_8;

  

  if (param_4 == 6) {

    pfVar5 = (float *)&DAT_007f2b7c;

    local_20 = &DAT_007f2b64;

  }

  else {

    pfVar5 = (float *)&DAT_007f2b44;

    local_20 = (undefined4 *)&DAT_007f2b24;

  }

  uVar3 = 0;

  local_8 = 1.0;

  local_c = 0.0;

  if (param_4 == 8) {

    do {

      pfVar2 = (float *)(param_3 + uVar3 * 4);

      if (*pfVar2 < local_8) {

        local_8 = *pfVar2;

      }

      if (local_c < *pfVar2) {

        local_c = *pfVar2;

      }

      uVar3 = uVar3 + 1;

    } while (uVar3 < 0x10);

  }

  else {

    do {

      pfVar2 = (float *)(param_3 + uVar3 * 4);

      if ((*pfVar2 < local_8) && (DAT_00796344 < *pfVar2)) {

        local_8 = *pfVar2;

      }

      if ((local_c < *pfVar2) && (*pfVar2 < _DAT_007938b0)) {

        local_c = *pfVar2;

      }

      uVar3 = uVar3 + 1;

    } while (uVar3 < 0x10);

    if (local_8 == local_c) {

      local_c = 1.0;

    }

  }

  uVar3 = param_4 - 1;

  local_28 = (float)(int)uVar3;

  if ((int)uVar3 < 0) {

    local_28 = local_28 + _DAT_0079920c;

  }

  local_24 = CONCAT22(local_24._2_2_,in_FPUControlWord);

  local_38 = local_24;

  local_24 = 0;

  while (_DAT_007e75f8 <= local_c - local_8) {

    local_2c = local_28 / (local_c - local_8);

    if (param_4 != 0) {

      iVar4 = (int)local_20 - (int)pfVar5;

      pfVar2 = pfVar5;

      uVar6 = param_4;

      do {

        *(float *)(((int)local_58 - (int)pfVar5) + (int)pfVar2) =

             local_8 * *pfVar2 + local_c * *(float *)(iVar4 + (int)pfVar2);

        pfVar2 = pfVar2 + 1;

        uVar6 = uVar6 - 1;

      } while (uVar6 != 0);

    }

    if (param_4 == 6) {

      local_40 = 0;

      local_3c = 0x3f800000;

    }

    uVar6 = 0;

    local_10 = 0.0;

    local_14 = 0.0;

    local_18 = 0.0;

    local_1c = 0.0;

    do {

      pfVar2 = (float *)(param_3 + uVar6 * 4);

      fVar1 = (*pfVar2 - local_8) * local_2c;

      if (fVar1 < DAT_00796344 == (fVar1 == DAT_00796344)) {

        if (fVar1 < local_28) {

          local_30 = fVar1 + _DAT_007938b8;

          local_34 = (uint)ROUND(fVar1 + _DAT_007938b8);

        }

        else {

          local_34 = uVar3;

          if ((param_4 == 6) &&

             (fVar1 = (local_c + _DAT_007938b0) * _DAT_007938b8,

             fVar1 < *pfVar2 != (fVar1 == *pfVar2))) goto LAB_00600cca;

        }

LAB_00600c88:

        if (local_34 < param_4) {

          local_10 = (*pfVar2 - local_58[local_34]) * pfVar5[local_34] + local_10;

          local_18 = pfVar5[local_34] * pfVar5[local_34] + local_18;

          local_14 = (*pfVar2 - local_58[local_34]) * (float)local_20[local_34] + local_14;

          fVar1 = (float)local_20[local_34];

          local_1c = fVar1 * fVar1 + local_1c;

        }

      }

      else if ((param_4 != 6) || (local_8 * _DAT_007938b8 < *pfVar2)) {

        local_34 = 0;

        goto LAB_00600c88;

      }

LAB_00600cca:

      uVar6 = uVar6 + 1;

    } while (uVar6 < 0x10);

    if (DAT_00796344 < local_18) {

      local_8 = local_8 - local_10 / local_18;

    }

    if (DAT_00796344 < local_1c) {

      local_c = local_c - local_14 / local_1c;

    }

    fVar1 = local_c;

    if (local_c < local_8) {

      local_c = local_8;

      local_8 = fVar1;

    }

    if (((local_10 * local_10 < _DAT_007f2b20) && (local_14 * local_14 < _DAT_007f2b20)) ||

       (local_24 = local_24 + 1, 7 < local_24)) break;

  }

  if (DAT_00796344 <= local_8) {

    if (_DAT_007938b0 < local_8) {

      local_8 = 1.0;

    }

  }

  else {

    local_8 = 0.0;

  }

  *param_1 = local_8;

  if (DAT_00796344 <= local_c) {

    if (_DAT_007938b0 < local_c) {

      local_c = 1.0;

    }

  }

  else {

    local_c = 0.0;

  }

  *param_2 = local_c;

  return;

}





// --- FUN_00600dc6 at 0x00600DC6 (size: 1408) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_00600dc6(float *param_1,float *param_2,float param_3,float param_4)



{

  float *pfVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  int iVar10;

  int iVar11;

  float *pfVar12;

  int iVar13;

  uint uVar14;

  int iVar15;

  uint uVar16;

  float *pfVar17;

  undefined2 in_FPUControlWord;

  float local_c4 [16];

  int local_84;

  float *local_80;

  undefined4 local_7c;

  float local_78;

  float local_74;

  float local_70;

  undefined4 *local_68;

  uint local_64;

  float local_60;

  float *local_5c;

  float local_58;

  float local_54;

  float local_50;

  float local_4c;

  float local_44;

  float local_40;

  float local_3c;

  float local_34 [6];

  float local_1c;

  float local_14;

  float local_10;

  float local_c;

  undefined4 uStack_8;

  

  iVar10 = (int)param_4;

  if (param_4 == 4.2039e-45) {

    local_5c = (float *)&DAT_007f2bc8;

    local_68 = &DAT_007f2bbc;

  }

  else {

    local_5c = (float *)&DAT_007f2bac;

    local_68 = (undefined4 *)&DAT_007f2b9c;

  }

  local_34[4] = 0.0;

  local_34[5] = 0.0;

  local_14 = DAT_00827ac0;

  local_10 = DAT_00827ac4;

  local_1c = 0.0;

  local_c = DAT_00827ac8;

  uStack_8 = DAT_00827acc;

  pfVar17 = (float *)((int)param_3 + 8);

  iVar11 = 0x10;

  local_80 = pfVar17;

  pfVar12 = pfVar17;

  iVar13 = iVar11;

  do {

    if (pfVar12[-2] < local_14) {

      local_14 = pfVar12[-2];

    }

    if (pfVar12[-1] < local_10) {

      local_10 = pfVar12[-1];

    }

    fVar3 = local_10;

    if (*pfVar12 < local_c) {

      local_c = *pfVar12;

    }

    if (local_34[4] < pfVar12[-2]) {

      local_34[4] = pfVar12[-2];

    }

    if (local_34[5] < pfVar12[-1]) {

      local_34[5] = pfVar12[-1];

    }

    if (local_1c < *pfVar12) {

      local_1c = *pfVar12;

    }

    fVar9 = local_1c;

    pfVar12 = pfVar12 + 4;

    iVar13 = iVar13 + -1;

  } while (iVar13 != 0);

  fVar5 = local_34[4] - local_14;

  fVar7 = local_34[5] - local_10;

  fVar4 = local_1c - local_c;

  local_58 = fVar5 * fVar5 + fVar7 * fVar7 + fVar4 * fVar4;

  if (_DAT_007ed300 <= local_58) {

    fVar8 = 1.0 / local_58;

    local_78 = fVar5 * fVar8;

    local_74 = fVar7 * fVar8;

    local_70 = fVar8 * fVar4;

    local_54 = (local_34[4] + local_14) * _DAT_007938b8;

    local_50 = (local_34[5] + local_10) * _DAT_007938b8;

    local_4c = (local_1c + local_c) * _DAT_007938b8;

    local_34[3] = 0.0;

    local_34[2] = 0.0;

    local_34[1] = 0.0;

    local_34[0] = 0.0;

    do {

      local_44 = (pfVar17[-2] - local_54) * fVar5 * fVar8;

      local_40 = (pfVar17[-1] - local_50) * fVar7 * fVar8;

      fVar2 = *pfVar17;

      pfVar17 = pfVar17 + 4;

      iVar11 = iVar11 + -1;

      fVar2 = (fVar2 - local_4c) * fVar8 * fVar4;

      fVar6 = local_40 + fVar2 + local_44;

      local_34[0] = fVar6 * fVar6 + local_34[0];

      fVar6 = (local_40 + local_44) - fVar2;

      local_34[1] = fVar6 * fVar6 + local_34[1];

      fVar6 = (local_44 - local_40) + fVar2;

      local_34[2] = fVar6 * fVar6 + local_34[2];

      fVar2 = (local_44 - local_40) - fVar2;

      local_34[3] = fVar2 * fVar2 + local_34[3];

    } while (iVar11 != 0);

    uVar16 = 0;

    uVar14 = 1;

    do {

      if (local_34[0] < local_34[uVar14]) {

        local_34[0] = local_34[uVar14];

        uVar16 = uVar14;

      }

      uVar14 = uVar14 + 1;

    } while (uVar14 < 4);

    if ((uVar16 & 2) != 0) {

      local_10 = local_34[5];

      local_34[5] = fVar3;

    }

    if ((uVar16 & 1) != 0) {

      local_1c = local_c;

      local_c = fVar9;

    }

    if (_DAT_007f2b98 <= local_58) {

      iVar11 = (int)param_4 + -1;

      local_58 = (float)iVar11;

      if (iVar11 < 0) {

        local_58 = local_58 + _DAT_0079920c;

      }

      param_4 = (float)CONCAT22((short)((uint)iVar11 >> 0x10),in_FPUControlWord);

      local_64 = 0;

      local_7c = param_4;

      while( true ) {

        iVar11 = 0x10;

        if (iVar10 != 0) {

          pfVar12 = local_c4 + 1;

          iVar15 = (int)local_68 - (int)local_5c;

          pfVar17 = local_5c;

          iVar13 = iVar10;

          do {

            pfVar12[-1] = local_34[4] * *(float *)(iVar15 + (int)pfVar17) + local_14 * *pfVar17;

            *pfVar12 = local_34[5] * *(float *)(iVar15 + (int)pfVar17) + local_10 * *pfVar17;

            fVar3 = *pfVar17;

            pfVar1 = (float *)(iVar15 + (int)pfVar17);

            pfVar17 = pfVar17 + 1;

            pfVar12[1] = local_1c * *pfVar1 + local_c * fVar3;

            pfVar12 = pfVar12 + 4;

            iVar13 = iVar13 + -1;

          } while (iVar13 != 0);

        }

        fVar9 = local_34[4] - local_14;

        fVar3 = local_34[5] - local_10;

        fVar7 = local_1c - local_c;

        fVar5 = fVar9 * fVar9 + fVar3 * fVar3 + fVar7 * fVar7;

        if (fVar5 < _DAT_007f2b98) break;

        fVar5 = local_58 / fVar5;

        local_44 = fVar5 * fVar9;

        local_40 = fVar3 * fVar5;

        local_3c = fVar5 * fVar7;

        local_34[2] = 0.0;

        local_34[1] = 0.0;

        local_34[0] = 0.0;

        local_4c = 0.0;

        local_50 = 0.0;

        local_54 = 0.0;

        param_3 = 0.0;

        param_4 = 0.0;

        pfVar12 = local_80;

        do {

          fVar4 = (*pfVar12 - local_c) * fVar5 * fVar7 +

                  (pfVar12[-2] - local_14) * fVar5 * fVar9 +

                  (pfVar12[-1] - local_10) * fVar3 * fVar5;

          local_60 = fVar4;

          if (fVar4 < local_58) {

            local_60 = fVar4 + _DAT_007938b8;

            local_84 = (int)ROUND(fVar4 + _DAT_007938b8);

          }

          else {

            local_84 = iVar10 + -1;

          }

          pfVar17 = pfVar12 + -2;

          local_74 = local_c4[local_84 * 4 + 1] - pfVar12[-1];

          fVar4 = *pfVar12;

          fVar2 = local_5c[local_84] * _DAT_007c7624;

          pfVar12 = pfVar12 + 4;

          iVar11 = iVar11 + -1;

          fVar8 = (float)local_68[local_84] * _DAT_007c7624;

          param_4 = fVar2 * local_5c[local_84] + param_4;

          local_54 = fVar2 * (local_c4[local_84 * 4] - *pfVar17) + local_54;

          local_50 = fVar2 * local_74 + local_50;

          local_4c = fVar2 * (local_c4[local_84 * 4 + 2] - fVar4) + local_4c;

          param_3 = fVar8 * (float)local_68[local_84] + param_3;

          local_34[0] = fVar8 * (local_c4[local_84 * 4] - *pfVar17) + local_34[0];

          local_34[1] = local_74 * fVar8 + local_34[1];

          local_34[2] = fVar8 * (local_c4[local_84 * 4 + 2] - fVar4) + local_34[2];

        } while (iVar11 != 0);

        if (DAT_00796344 < param_4) {

          param_4 = _DAT_0079a1a0 / param_4;

          local_14 = local_54 * param_4 + local_14;

          local_10 = local_50 * param_4 + local_10;

          local_c = param_4 * local_4c + local_c;

        }

        if (DAT_00796344 < param_3) {

          param_3 = _DAT_0079a1a0 / param_3;

          local_34[4] = local_34[0] * param_3 + local_34[4];

          local_34[5] = local_34[1] * param_3 + local_34[5];

          local_1c = param_3 * local_34[2] + local_1c;

        }

        if (((((local_54 * local_54 < _DAT_007f2b94) && (local_50 * local_50 < _DAT_007f2b94)) &&

             (local_4c * local_4c < _DAT_007f2b94)) &&

            (((local_34[0] * local_34[0] < _DAT_007f2b94 &&

              (local_34[1] * local_34[1] < _DAT_007f2b94)) &&

             (local_34[2] * local_34[2] < _DAT_007f2b94)))) ||

           (local_64 = local_64 + 1, 7 < local_64)) break;

      }

      *param_1 = local_14;

      param_1[1] = local_10;

      param_1[2] = local_c;

      *param_2 = local_34[4];

      param_2[1] = local_34[5];

    }

    else {

      *param_1 = local_14;

      param_1[1] = local_10;

      param_1[2] = local_c;

      param_2[1] = local_34[5];

      *param_2 = local_34[4];

    }

  }

  else {

    *param_1 = local_14;

    param_1[1] = local_10;

    param_1[2] = local_c;

    param_2[1] = local_34[5];

    *param_2 = local_34[4];

  }

  param_2[2] = local_1c;

  return;

}





// --- FUN_00601346 at 0x00601346 (size: 2387) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



undefined4 FUN_00601346(ushort *param_1,float param_2,int param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  int in_EAX;

  float *pfVar5;

  undefined4 uVar6;

  int iVar7;

  int iVar8;

  ushort uVar9;

  uint uVar10;

  uint uVar11;

  ushort uVar12;

  int iVar13;

  undefined2 in_FPUControlWord;

  undefined2 uVar14;

  float local_2e0;

  float local_2dc [63];

  float local_1e0;

  float local_1dc;

  undefined1 local_1d8 [4];

  undefined1 local_1d4 [4];

  undefined1 local_1d0 [4];

  undefined1 local_1cc [20];

  undefined1 local_1b8 [4];

  undefined1 local_1b4 [4];

  undefined1 local_1b0 [4];

  undefined1 local_1ac [4];

  undefined1 local_1a8 [4];

  float local_1a4;

  float local_1a0 [2];

  undefined1 local_198 [4];

  undefined1 local_194 [4];

  undefined1 local_190 [4];

  undefined1 local_18c [172];

  int local_e0;

  float local_dc;

  float local_d8;

  float local_d4;

  int local_cc;

  int local_c8;

  int local_c4;

  undefined1 *local_c0;

  undefined1 *local_bc;

  int local_b8;

  undefined1 *local_b4;

  undefined1 *local_b0;

  undefined1 *local_ac;

  float local_a8 [4];

  float local_98;

  float local_94;

  float local_90;

  float local_8c;

  float local_88;

  float local_84;

  float local_80;

  float local_7c;

  float local_78;

  float local_74;

  float local_70;

  float local_6c;

  undefined1 *local_68;

  undefined1 *local_64;

  undefined1 *local_60;

  undefined4 local_5c;

  undefined1 *local_58;

  float local_54;

  float local_50;

  float local_4c;

  float fStack_48;

  float local_44;

  float local_40;

  float local_3c;

  undefined1 *local_34;

  float local_30;

  undefined1 *local_2c;

  int local_28;

  undefined1 *local_24;

  float local_20;

  float local_1c;

  float local_18;

  float local_14;

  float fStack_10;

  float *local_c;

  undefined *local_8;

  

  if (param_2 == 0.0) {

    local_28 = 4;

  }

  else {

    iVar8 = 0;

    pfVar5 = (float *)(in_EAX + 0xc);

    iVar13 = 0x10;

    do {

      if (*pfVar5 < _DAT_007938b8) {

        iVar8 = iVar8 + 1;

      }

      pfVar5 = pfVar5 + 4;

      iVar13 = iVar13 + -1;

    } while (iVar13 != 0);

    if (iVar8 == 0x10) {

      param_1[1] = 0xffff;

      param_1[2] = 0xffff;

      param_1[3] = 0xffff;

      *param_1 = 0;

      return 0;

    }

    local_28 = 4 - (uint)(iVar8 != 0);

  }

  if (param_3 != 0) {

    pfVar5 = &local_1e0;

    for (iVar13 = 0x40; iVar13 != 0; iVar13 = iVar13 + -1) {

      *pfVar5 = 0.0;

      pfVar5 = pfVar5 + 1;

    }

  }

  param_2 = (float)CONCAT22(param_2._2_2_,in_FPUControlWord);

  local_b8 = (int)&local_1e0 - in_EAX;

  local_64 = (undefined1 *)((int)local_2dc - in_EAX);

  local_58 = local_1d8 + -in_EAX;

  local_c0 = local_1d4 + -in_EAX;

  local_b4 = local_1d0 + -in_EAX;

  local_60 = local_1b8 + -in_EAX;

  local_bc = local_1b4 + -in_EAX;

  local_b0 = local_1b0 + -in_EAX;

  local_2c = local_1a8 + -in_EAX;

  local_24 = local_198 + -in_EAX;

  local_ac = local_194 + -in_EAX;

  local_34 = local_190 + -in_EAX;

  iVar13 = (int)&local_1a4 - in_EAX;

  iVar8 = (int)local_1a0 - in_EAX;

  local_5c = param_2;

  local_30 = (float)((int)&local_2e0 - in_EAX);

  param_2 = 0.0;

  pfVar5 = (float *)(in_EAX + 8);

  local_e0 = iVar13;

  local_c8 = iVar8;

  uVar11 = 0;

  do {

    local_1c = pfVar5[-2];

    local_18 = pfVar5[-1];

    local_14 = *pfVar5;

    if (param_3 != 0) {

      local_1c = pfVar5[-2] + *(float *)((int)&local_1e0 + uVar11);

      local_18 = pfVar5[-1] + *(float *)(local_1d8 + (uVar11 - 4));

      local_14 = *pfVar5 + *(float *)(local_b8 + (int)pfVar5);

    }

    local_cc = (int)ROUND(local_1c * _DAT_007edeec + _DAT_007938b8);

    fVar1 = (float)local_cc * _DAT_007edee8;

    local_20 = fVar1;

    *(float *)((int)&local_2e0 + uVar11) = fVar1;

    local_c4 = (int)ROUND(local_18 * _DAT_007edee4 + _DAT_007938b8);

    fVar2 = (float)local_c4 * _DAT_007edee0;

    local_8 = (undefined *)fVar2;

    *(float *)((int)local_2dc + uVar11) = fVar2;

    local_68 = (undefined1 *)(int)ROUND(local_14 * _DAT_007edeec + _DAT_007938b8);

    local_c = (float *)local_68;

    fVar3 = (float)(int)local_68 * _DAT_007edee8;

    *(float *)((int)local_30 + (int)pfVar5) = fVar3;

    *(undefined4 *)((int)local_64 + (int)pfVar5) = 0x3f800000;

    if (param_3 != 0) {

      fVar1 = local_1c - fVar1;

      uVar10 = (uint)param_2 & 3;

      fVar2 = local_18 - fVar2;

      local_c = (float *)uVar10;

      local_40 = fVar2;

      fVar4 = local_14 - fVar3;

      local_3c = fVar4;

      if (uVar10 != 3) {

        *(float *)(local_58 + (int)pfVar5) =

             fVar1 * _DAT_007f2bf4 + *(float *)(local_58 + (int)pfVar5);

        *(float *)(local_c0 + (int)pfVar5) =

             fVar2 * _DAT_007f2bf4 + *(float *)(local_c0 + (int)pfVar5);

        *(float *)(local_b4 + (int)pfVar5) =

             fVar4 * _DAT_007f2bf4 + *(float *)(local_b4 + (int)pfVar5);

      }

      if (uVar11 < 0xc0) {

        if (uVar10 != 0) {

          *(float *)(local_60 + (int)pfVar5) =

               fVar1 * _DAT_007edf08 + *(float *)(local_60 + (int)pfVar5);

          *(float *)(local_bc + (int)pfVar5) =

               fVar2 * _DAT_007edf08 + *(float *)(local_bc + (int)pfVar5);

          *(float *)(local_b0 + (int)pfVar5) =

               fVar4 * _DAT_007edf08 + *(float *)(local_b0 + (int)pfVar5);

        }

        *(float *)(local_2c + (int)pfVar5) =

             fVar1 * _DAT_007edf04 + *(float *)(local_2c + (int)pfVar5);

        *(float *)(iVar13 + (int)pfVar5) = fVar2 * _DAT_007edf04 + *(float *)(iVar13 + (int)pfVar5);

        *(float *)(iVar8 + (int)pfVar5) = fVar4 * _DAT_007edf04 + *(float *)(iVar8 + (int)pfVar5);

        if (uVar10 != 3) {

          *(float *)(local_24 + (int)pfVar5) =

               fVar1 * _DAT_007edf00 + *(float *)(local_24 + (int)pfVar5);

          *(float *)(local_ac + (int)pfVar5) =

               local_40 * _DAT_007edf00 + *(float *)(local_ac + (int)pfVar5);

          *(float *)(local_34 + (int)pfVar5) =

               local_3c * _DAT_007edf00 + *(float *)(local_34 + (int)pfVar5);

        }

      }

    }

    param_2 = (float)((int)param_2 + 1);

    uVar10 = uVar11 + 0x10;

    *(float *)((int)&local_2e0 + uVar11) = local_20 * DAT_00827ac0;

    *(float *)((int)local_2dc + uVar11) = (float)local_8 * DAT_00827ac4;

    *(float *)((int)local_30 + (int)pfVar5) = fVar3 * DAT_00827ac8;

    pfVar5 = pfVar5 + 4;

    uVar11 = uVar10;

  } while (uVar10 < 0x100);

  uVar14 = (undefined2)local_5c;

  FUN_00600dc6(&local_1c,&local_54,&local_2e0,local_28);

  local_dc = local_1c * _DAT_00827ad0;

  local_d8 = local_18 * _DAT_00827ad4;

  local_d4 = local_14 * _DAT_00827ad8;

  local_44 = local_54 * _DAT_00827ad0;

  local_40 = local_50 * _DAT_00827ad4;

  local_3c = local_4c * _DAT_00827ad8;

  uVar6 = FUN_0060099c();

  local_2c = (undefined1 *)uVar6;

  local_24 = (undefined1 *)FUN_0060099c();

  uVar9 = (ushort)uVar6;

  uVar12 = (ushort)local_24;

  if ((local_28 == 4) && (uVar9 == uVar12)) {

    param_1[2] = 0;

    param_1[3] = 0;

    *param_1 = uVar9;

    param_1[1] = uVar12;

  }

  else {

    FUN_0060089a();

    FUN_0060089a();

    local_1c = local_dc * DAT_00827ac0;

    local_18 = local_d8 * DAT_00827ac4;

    local_14 = local_d4 * DAT_00827ac8;

    local_54 = local_44 * DAT_00827ac0;

    local_50 = local_40 * DAT_00827ac4;

    local_4c = local_3c * DAT_00827ac8;

    if ((local_28 == 3) == uVar9 <= uVar12) {

      *param_1 = uVar9;

      param_1[1] = uVar12;

      local_a8[0] = local_1c;

      local_a8[1] = local_18;

      local_a8[2] = local_14;

      local_a8[3] = fStack_10;

      pfVar5 = &local_54;

    }

    else {

      param_1[1] = uVar9;

      *param_1 = uVar12;

      local_a8[0] = local_54;

      local_a8[1] = local_50;

      local_a8[2] = local_4c;

      local_a8[3] = fStack_48;

      pfVar5 = &local_1c;

    }

    local_98 = *pfVar5;

    local_94 = pfVar5[1];

    local_90 = pfVar5[2];

    local_8c = pfVar5[3];

    fVar1 = *pfVar5 - local_a8[0];

    if (local_28 == 3) {

      local_8 = &DAT_007f2be8;

      local_88 = _DAT_007938b8 * fVar1 + local_a8[0];

      local_84 = (local_94 - local_a8[1]) * _DAT_007938b8 + local_a8[1];

      local_80 = (local_90 - local_a8[2]) * _DAT_007938b8 + local_a8[2];

      local_7c = (local_8c - local_a8[3]) * _DAT_007938b8 + local_a8[3];

    }

    else {

      local_8 = &DAT_007f2bd8;

      local_88 = _DAT_007e75f0 * fVar1 + local_a8[0];

      local_84 = _DAT_007e75f0 * (local_94 - local_a8[1]) + local_a8[1];

      local_80 = _DAT_007e75f0 * (local_90 - local_a8[2]) + local_a8[2];

      local_7c = _DAT_007e75f0 * (local_8c - local_a8[3]) + local_a8[3];

      local_78 = fVar1 * _DAT_007f2bd4 + local_a8[0];

      local_74 = (local_94 - local_a8[1]) * _DAT_007f2bd4 + local_a8[1];

      local_70 = (local_90 - local_a8[2]) * _DAT_007f2bd4 + local_a8[2];

      local_6c = (local_8c - local_a8[3]) * _DAT_007f2bd4 + local_a8[3];

    }

    param_2 = local_90 - local_a8[2];

    local_94 = local_94 - local_a8[1];

    iVar13 = local_28 + -1;

    local_30 = (float)iVar13;

    if (iVar13 < 0) {

      local_30 = local_30 + _DAT_0079920c;

    }

    if ((short)local_2c == (short)local_24) {

      fVar2 = 0.0;

    }

    else {

      fVar2 = local_30 / (fVar1 * fVar1 + local_94 * local_94 + param_2 * param_2);

    }

    local_20 = 0.0;

    local_54 = fVar1 * fVar2;

    local_50 = fVar2 * local_94;

    local_4c = fVar2 * param_2;

    if (param_3 != 0) {

      pfVar5 = &local_1e0;

      for (iVar8 = 0x40; iVar8 != 0; iVar8 = iVar8 + -1) {

        *pfVar5 = 0.0;

        pfVar5 = pfVar5 + 1;

      }

    }

    param_2._2_2_ = (undefined2)((uint)iVar13 >> 0x10);

    param_2 = (float)CONCAT22(param_2._2_2_,uVar14);

    local_5c = param_2;

    local_c = &local_1e0;

    local_58 = local_1cc + -in_EAX;

    param_2 = 0.0;

    local_64 = local_1ac + -in_EAX;

    iVar13 = (int)local_2dc + (4 - in_EAX);

    iVar8 = (int)local_1a0 + (4 - in_EAX);

    pfVar5 = (float *)(in_EAX + 4);

    local_24 = local_1d8 + (-4 - in_EAX);

    local_68 = local_18c + -in_EAX;

    do {

      if ((local_28 != 3) || (_DAT_007938b8 <= pfVar5[2])) {

        local_1c = DAT_00827ac0 * pfVar5[-1];

        local_18 = DAT_00827ac4 * *pfVar5;

        local_14 = DAT_00827ac8 * pfVar5[1];

        if (param_3 != 0) {

          local_1c = DAT_00827ac0 * pfVar5[-1] + *local_c;

          local_18 = DAT_00827ac4 * *pfVar5 + *(float *)((int)pfVar5 + local_b8);

          local_14 = DAT_00827ac8 * pfVar5[1] + *(float *)(local_24 + (int)pfVar5);

        }

        fVar1 = (local_1c - local_a8[0]) * local_54 +

                (local_18 - local_a8[1]) * local_50 + (local_14 - local_a8[2]) * local_4c;

        if (fVar1 < DAT_00796344 == (fVar1 == DAT_00796344)) {

          if (fVar1 < local_30) {

            local_2c = (undefined1 *)(fVar1 + _DAT_007938b8);

            local_60 = (undefined1 *)(int)ROUND(fVar1 + _DAT_007938b8);

            iVar7 = *(int *)(local_8 + (int)local_60 * 4);

          }

          else {

            iVar7 = 1;

          }

        }

        else {

          iVar7 = 0;

        }

        local_20 = (float)(iVar7 << 0x1e | (uint)local_20 >> 2);

        if (param_3 != 0) {

          uVar11 = (uint)param_2 & 3;

          fVar2 = (local_1c - local_a8[iVar7 * 4]) * *(float *)(iVar13 + (int)pfVar5);

          fVar3 = (local_18 - local_a8[iVar7 * 4 + 1]) * *(float *)(iVar13 + (int)pfVar5);

          local_40 = fVar3;

          fVar1 = (local_14 - local_a8[iVar7 * 4 + 2]) * *(float *)(iVar13 + (int)pfVar5);

          local_3c = fVar1;

          if (uVar11 != 3) {

            *(float *)(local_c0 + (int)pfVar5) =

                 fVar2 * _DAT_007f2bf4 + *(float *)(local_c0 + (int)pfVar5);

            *(float *)(local_b4 + (int)pfVar5) =

                 _DAT_007f2bf4 * fVar3 + *(float *)(local_b4 + (int)pfVar5);

            *(float *)(local_58 + (int)pfVar5) =

                 fVar1 * _DAT_007f2bf4 + *(float *)(local_58 + (int)pfVar5);

          }

          if ((uint)param_2 < 0xc) {

            if (uVar11 != 0) {

              *(float *)(local_bc + (int)pfVar5) =

                   fVar2 * _DAT_007edf08 + *(float *)(local_bc + (int)pfVar5);

              *(float *)(local_b0 + (int)pfVar5) =

                   _DAT_007edf08 * fVar3 + *(float *)(local_b0 + (int)pfVar5);

              *(float *)(local_64 + (int)pfVar5) =

                   fVar1 * _DAT_007edf08 + *(float *)(local_64 + (int)pfVar5);

            }

            *(float *)(local_e0 + (int)pfVar5) =

                 fVar2 * _DAT_007edf04 + *(float *)(local_e0 + (int)pfVar5);

            *(float *)(local_c8 + (int)pfVar5) =

                 fVar3 * _DAT_007edf04 + *(float *)(local_c8 + (int)pfVar5);

            *(float *)(iVar8 + (int)pfVar5) =

                 fVar1 * _DAT_007edf04 + *(float *)(iVar8 + (int)pfVar5);

            if (uVar11 != 3) {

              *(float *)(local_ac + (int)pfVar5) =

                   fVar2 * _DAT_007edf00 + *(float *)(local_ac + (int)pfVar5);

              *(float *)(local_34 + (int)pfVar5) =

                   local_40 * _DAT_007edf00 + *(float *)(local_34 + (int)pfVar5);

              *(float *)(local_68 + (int)pfVar5) =

                   local_3c * _DAT_007edf00 + *(float *)(local_68 + (int)pfVar5);

            }

          }

        }

      }

      else {

        local_20 = (float)((uint)local_20 >> 2 | 0xc0000000);

      }

      param_2 = (float)((int)param_2 + 1);

      local_c = local_c + 4;

      pfVar5 = pfVar5 + 4;

    } while ((uint)param_2 < 0x10);

    *(float *)(param_1 + 2) = local_20;

  }

  return 0;

}





// --- FUN_00601c99 at 0x00601C99 (size: 322) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



undefined4 FUN_00601c99(float *param_1,ushort *param_2)



{

  float *pfVar1;

  ushort uVar2;

  ushort uVar3;

  int iVar4;

  uint uVar5;

  uint uVar6;

  float local_5c [4];

  float local_4c;

  float local_48;

  float local_44;

  float local_40;

  float local_3c;

  float local_38;

  float local_34;

  float local_30;

  float local_2c;

  float local_28;

  float local_24;

  float local_20;

  undefined4 local_1c;

  undefined4 local_18;

  undefined4 local_14;

  undefined4 local_10;

  float local_c;

  float local_8;

  

  uVar2 = *param_2;

  FUN_0060089a();

  uVar3 = param_2[1];

  FUN_0060089a();

  if (uVar3 < uVar2) {

    local_3c = (local_4c - local_5c[0]) * _DAT_007e75f0 + local_5c[0];

    local_38 = (local_48 - local_5c[1]) * _DAT_007e75f0 + local_5c[1];

    local_8 = local_44 - local_5c[2];

    local_34 = local_8 * _DAT_007e75f0 + local_5c[2];

    local_c = local_40 - local_5c[3];

    local_30 = local_c * _DAT_007e75f0 + local_5c[3];

    local_2c = (local_4c - local_5c[0]) * _DAT_007f2bd4 + local_5c[0];

    local_28 = (local_48 - local_5c[1]) * _DAT_007f2bd4 + local_5c[1];

    local_24 = local_8 * _DAT_007f2bd4 + local_5c[2];

    local_20 = local_c * _DAT_007f2bd4 + local_5c[3];

  }

  else {

    local_3c = (local_4c - local_5c[0]) * _DAT_007938b8 + local_5c[0];

    local_38 = (local_48 - local_5c[1]) * _DAT_007938b8 + local_5c[1];

    local_34 = (local_44 - local_5c[2]) * _DAT_007938b8 + local_5c[2];

    local_30 = (local_40 - local_5c[3]) * _DAT_007938b8 + local_5c[3];

    local_1c = 0;

    local_18 = 0;

    local_14 = 0;

    local_10 = 0;

    local_2c = 0.0;

    local_28 = 0.0;

    local_24 = 0.0;

    local_20 = 0.0;

  }

  uVar6 = *(uint *)(param_2 + 2);

  iVar4 = 0x10;

  do {

    uVar5 = uVar6 & 3;

    *param_1 = local_5c[uVar5 * 4];

    param_1[1] = local_5c[uVar5 * 4 + 1];

    pfVar1 = param_1 + 3;

    param_1[2] = local_5c[uVar5 * 4 + 2];

    param_1 = param_1 + 4;

    uVar6 = uVar6 >> 2;

    iVar4 = iVar4 + -1;

    *pfVar1 = local_5c[uVar5 * 4 + 3];

  } while (iVar4 != 0);

  return 0;

}





// --- FUN_00601ddb at 0x00601DDB (size: 133) ---


/* WARNING: Removing unreachable block (ram,0x00601e14) */

/* WARNING: Removing unreachable block (ram,0x00601e43) */

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



int FUN_00601ddb(int param_1,uint *param_2)



{

  float fVar1;

  int iVar2;

  float *pfVar3;

  uint uVar4;

  uint uVar5;

  

  iVar2 = FUN_00601c99(param_1,param_2 + 2);

  fVar1 = _DAT_0079cc80;

  if (-1 < iVar2) {

    uVar4 = *param_2;

    iVar2 = 8;

    pfVar3 = (float *)(param_1 + 0xc);

    do {

      uVar5 = uVar4 & 0xf;

      uVar4 = uVar4 >> 4;

      *pfVar3 = (float)uVar5 * fVar1;

      pfVar3 = pfVar3 + 4;

      iVar2 = iVar2 + -1;

    } while (iVar2 != 0);

    uVar4 = param_2[1];

    iVar2 = 8;

    pfVar3 = (float *)(param_1 + 0x8c);

    do {

      uVar5 = uVar4 & 0xf;

      uVar4 = uVar4 >> 4;

      *pfVar3 = (float)uVar5 * fVar1;

      pfVar3 = pfVar3 + 4;

      iVar2 = iVar2 + -1;

    } while (iVar2 != 0);

    iVar2 = 0;

  }

  return iVar2;

}





// --- FUN_00601e60 at 0x00601E60 (size: 318) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



int FUN_00601e60(int param_1,byte *param_2)



{

  float fVar1;

  float fVar2;

  int iVar3;

  uint uVar4;

  float *pfVar5;

  uint uVar6;

  float local_24 [8];

  

  iVar3 = FUN_00601c99(param_1,param_2 + 8);

  if (-1 < iVar3) {

    local_24[0] = (float)*param_2 * _DAT_00799208;

    local_24[1] = (float)param_2[1] * _DAT_00799208;

    if (param_2[1] < *param_2) {

      uVar4 = 1;

      do {

        fVar1 = (float)(int)(7 - uVar4);

        if ((int)(7 - uVar4) < 0) {

          fVar1 = fVar1 + _DAT_0079920c;

        }

        fVar2 = (float)(int)uVar4;

        if ((int)uVar4 < 0) {

          fVar2 = fVar2 + _DAT_0079920c;

        }

        uVar4 = uVar4 + 1;

        local_24[uVar4] = (fVar2 * local_24[1] + fVar1 * local_24[0]) * _DAT_007edf0c;

      } while (uVar4 < 7);

    }

    else {

      uVar4 = 1;

      do {

        fVar1 = (float)(int)(5 - uVar4);

        if ((int)(5 - uVar4) < 0) {

          fVar1 = fVar1 + _DAT_0079920c;

        }

        fVar2 = (float)(int)uVar4;

        if ((int)uVar4 < 0) {

          fVar2 = fVar2 + _DAT_0079920c;

        }

        uVar4 = uVar4 + 1;

        local_24[uVar4] = (fVar2 * local_24[1] + fVar1 * local_24[0]) * _DAT_0079a1e8;

      } while (uVar4 < 5);

      local_24[6] = 0.0;

      local_24[7] = 1.0;

    }

    iVar3 = 8;

    uVar4 = (uint)*(uint3 *)(param_2 + 2);

    pfVar5 = (float *)(param_1 + 0xc);

    do {

      uVar6 = uVar4 & 7;

      uVar4 = uVar4 >> 3;

      *pfVar5 = local_24[uVar6];

      pfVar5 = pfVar5 + 4;

      iVar3 = iVar3 + -1;

    } while (iVar3 != 0);

    iVar3 = 8;

    uVar4 = (uint)*(uint3 *)(param_2 + 5);

    pfVar5 = (float *)(param_1 + 0x8c);

    do {

      uVar6 = uVar4 & 7;

      uVar4 = uVar4 >> 3;

      *pfVar5 = local_24[uVar6];

      pfVar5 = pfVar5 + 4;

      iVar3 = iVar3 + -1;

    } while (iVar3 != 0);

    iVar3 = 0;

  }

  return iVar3;

}





// --- FUN_00601f9e at 0x00601F9E (size: 292) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



int FUN_00601f9e(undefined4 param_1,int param_2,int param_3)



{

  uint uVar1;

  float fVar2;

  float fVar3;

  float *pfVar4;

  int iVar5;

  float *pfVar6;

  uint uVar7;

  undefined2 in_FPUControlWord;

  float local_150 [64];

  float local_50 [16];

  uint local_10;

  uint local_c;

  float local_8;

  

  if (param_3 != 0) {

    pfVar4 = local_50;

    for (iVar5 = 0x10; iVar5 != 0; iVar5 = iVar5 + -1) {

      *pfVar4 = 0.0;

      pfVar4 = pfVar4 + 1;

    }

    local_8 = (float)CONCAT22(local_8._2_2_,in_FPUControlWord);

    local_c = (uint)local_8 | 0xc00;

    local_10 = (uint)local_8;

    uVar7 = 0;

    pfVar6 = local_150 + 1;

    pfVar4 = (float *)(param_2 + 0xc);

    do {

      fVar2 = local_50[uVar7];

      pfVar6[-1] = pfVar4[-3];

      fVar3 = *pfVar4;

      *pfVar6 = pfVar4[-2];

      local_8 = fVar2 + fVar3;

      pfVar6[1] = pfVar4[-1];

      iVar5 = (int)ROUND(fVar2 + fVar3 + _DAT_007938b8);

      local_c = iVar5;

      uVar1 = uVar7 & 3;

      *(float *)(((int)local_150 - param_2) + (int)pfVar4) = (float)iVar5;

      fVar2 = local_8 - (float)iVar5;

      if (uVar1 != 3) {

        local_50[uVar7 + 1] = _DAT_007f2bf4 * fVar2 + local_50[uVar7 + 1];

      }

      if (uVar7 < 0xc) {

        if (uVar1 != 0) {

          local_50[uVar7 + 3] = _DAT_007edf08 * fVar2 + local_50[uVar7 + 3];

        }

        local_50[uVar7 + 4] = _DAT_007edf04 * fVar2 + local_50[uVar7 + 4];

        if (uVar1 != 3) {

          local_50[uVar7 + 5] = fVar2 * _DAT_007edf00 + local_50[uVar7 + 5];

        }

      }

      uVar7 = uVar7 + 1;

      pfVar6 = pfVar6 + 4;

      pfVar4 = pfVar4 + 4;

    } while (uVar7 < 0x10);

  }

  iVar5 = FUN_00601346(param_1,1,param_3);

  if (-1 < iVar5) {

    iVar5 = 0;

  }

  return iVar5;

}





// --- FUN_006020c2 at 0x006020C2 (size: 303) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_006020c2(undefined4 *param_1,int param_2,int param_3)



{

  uint *puVar1;

  float fVar2;

  undefined4 *puVar3;

  int iVar4;

  uint uVar5;

  uint uVar6;

  float *pfVar7;

  undefined2 in_FPUControlWord;

  float local_54 [17];

  float local_10;

  float local_c;

  float *local_8;

  

  puVar3 = param_1;

  uVar5 = 0;

  *param_1 = 0;

  param_1[1] = 0;

  if (param_3 != 0) {

    pfVar7 = local_54;

    for (iVar4 = 0x10; iVar4 != 0; iVar4 = iVar4 + -1) {

      *pfVar7 = 0.0;

      pfVar7 = pfVar7 + 1;

    }

  }

  param_1 = (undefined4 *)CONCAT22(param_1._2_2_,in_FPUControlWord);

  local_54[0x10] = (float)param_1;

  local_8 = (float *)(param_2 + 0xc);

  do {

    param_1 = (undefined4 *)*local_8;

    if (param_3 != 0) {

      param_1 = (undefined4 *)((float)param_1 + local_54[uVar5]);

    }

    local_c = (float)param_1 * _DAT_0079c6d8 + _DAT_007938b8;

    local_10 = (float)(int)ROUND(local_c);

    puVar1 = puVar3 + (uVar5 >> 3);

    *puVar1 = *puVar1 >> 4 | (int)local_10 << 0x1c;

    if (param_3 != 0) {

      fVar2 = (float)(int)local_10;

      if ((int)local_10 < 0) {

        fVar2 = fVar2 + _DAT_0079920c;

      }

      uVar6 = uVar5 & 3;

      fVar2 = (float)param_1 - fVar2 * _DAT_0079cc80;

      if (uVar6 != 3) {

        local_54[uVar5 + 1] = _DAT_007f2bf4 * fVar2 + local_54[uVar5 + 1];

      }

      local_c = local_10;

      if (uVar5 < 0xc) {

        if (uVar6 != 0) {

          local_54[uVar5 + 3] = _DAT_007edf08 * fVar2 + local_54[uVar5 + 3];

        }

        local_54[uVar5 + 4] = _DAT_007edf04 * fVar2 + local_54[uVar5 + 4];

        if (uVar6 != 3) {

          local_54[uVar5 + 5] = fVar2 * _DAT_007edf00 + local_54[uVar5 + 5];

        }

      }

    }

    local_8 = local_8 + 4;

    uVar5 = uVar5 + 1;

  } while (uVar5 < 0x10);

  FUN_00601346(puVar3 + 2,0,param_3);

  return;

}





// --- FUN_006021f1 at 0x006021F1 (size: 1236) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



int FUN_006021f1(char *param_1,float param_2,int param_3)



{

  char *pcVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  char cVar6;

  char cVar7;

  int iVar8;

  int iVar9;

  uint uVar10;

  uint uVar11;

  uint uVar12;

  uint uVar13;

  float *pfVar14;

  float *pfVar15;

  undefined2 in_FPUControlWord;

  float local_a4 [32];

  int local_24;

  float local_20;

  float *local_1c;

  uint local_18;

  float *local_14;

  float local_10;

  undefined *local_c;

  undefined4 local_8;

  

  pcVar1 = param_1;

  pfVar15 = (float *)((int)param_2 + 0xc);

  uVar13 = 0;

  local_1c = pfVar15;

  local_14 = (float *)*pfVar15;

  local_8 = (float *)*pfVar15;

  if (param_3 != 0) {

    pfVar14 = local_a4;

    for (iVar8 = 0x10; iVar8 != 0; iVar8 = iVar8 + -1) {

      *pfVar14 = 0.0;

      pfVar14 = pfVar14 + 1;

    }

  }

  param_2 = (float)CONCAT22(param_2._2_2_,in_FPUControlWord);

  local_c = (undefined *)((uint)param_2 | 0xc00);

  local_18 = (uint)param_2;

  do {

    param_2 = *pfVar15;

    if (param_3 != 0) {

      param_2 = param_2 + local_a4[uVar13];

    }

    local_10 = (float)(int)ROUND(param_2 * _DAT_00797188 + _DAT_007938b8);

    local_c = (undefined *)local_10;

    fVar2 = (float)(int)local_10 * _DAT_00799208;

    local_a4[uVar13 + 0x10] = fVar2;

    if ((float)local_14 <= fVar2) {

      if ((float)local_8 < fVar2) {

        local_8 = (float *)fVar2;

      }

    }

    else {

      local_14 = (float *)fVar2;

    }

    if (param_3 != 0) {

      fVar2 = param_2 - fVar2;

      uVar10 = uVar13 & 3;

      if (uVar10 != 3) {

        local_a4[uVar13 + 1] = _DAT_007f2bf4 * fVar2 + local_a4[uVar13 + 1];

      }

      if (uVar13 < 0xc) {

        if (uVar10 != 0) {

          local_a4[uVar13 + 3] = _DAT_007edf08 * fVar2 + local_a4[uVar13 + 3];

        }

        local_a4[uVar13 + 4] = _DAT_007edf04 * fVar2 + local_a4[uVar13 + 4];

        if (uVar10 != 3) {

          local_a4[uVar13 + 5] = fVar2 * _DAT_007edf00 + local_a4[uVar13 + 5];

        }

      }

    }

    uVar13 = uVar13 + 1;

    pfVar15 = pfVar15 + 4;

  } while (uVar13 < 0x10);

  iVar8 = FUN_00601346(param_1 + 8,0,param_3);

  if (iVar8 < 0) {

    return iVar8;

  }

  if (_DAT_007938b0 == (float)local_14) {

    *param_1 = -1;

    param_1[1] = -1;

LAB_00602424:

    pcVar1[2] = '\0';

    pcVar1[3] = '\0';

    pcVar1[4] = '\0';

    pcVar1[5] = '\0';

    pcVar1[6] = '\0';

    pcVar1[7] = '\0';

  }

  else {

    if ((DAT_00796344 == (float)local_14) || (_DAT_007938b0 == (float)local_8)) {

      param_1 = (char *)0x6;

      iVar8 = 6;

    }

    else {

      iVar8 = 8;

      param_1 = (char *)0x8;

    }

    FUN_00600a9f(&local_10,&param_2,local_a4 + 0x10,iVar8);

    uVar13 = (uint)ROUND(local_10 * _DAT_00797188 + _DAT_007938b8);

    uVar10 = (uint)ROUND(param_2 * _DAT_00797188 + _DAT_007938b8);

    fVar2 = (float)(uVar13 & 0xff) * _DAT_00799208;

    fVar3 = (float)(uVar10 & 0xff) * _DAT_00799208;

    cVar6 = (char)uVar13;

    cVar7 = (char)uVar10;

    if (iVar8 == 8) {

      if (cVar6 == cVar7) {

        *pcVar1 = cVar6;

        pcVar1[1] = cVar7;

        goto LAB_00602424;

      }

LAB_00602499:

      pcVar1[1] = cVar6;

      local_a4[0x18] = fVar3;

      local_a4[0x19] = fVar2;

      *pcVar1 = cVar7;

      uVar13 = 1;

      do {

        fVar4 = (float)(int)(7 - uVar13);

        if ((int)(7 - uVar13) < 0) {

          fVar4 = fVar4 + _DAT_0079920c;

        }

        fVar5 = (float)(int)uVar13;

        if ((int)uVar13 < 0) {

          fVar5 = fVar5 + _DAT_0079920c;

        }

        uVar10 = uVar13 + 1;

        local_a4[uVar13 + 0x19] = (fVar5 * fVar2 + fVar4 * fVar3) * _DAT_007edf0c;

        uVar13 = uVar10;

      } while (uVar10 < 7);

      local_c = &DAT_007f2bf8;

    }

    else {

      if (iVar8 != 6) goto LAB_00602499;

      *pcVar1 = cVar6;

      local_a4[0x18] = fVar2;

      local_a4[0x19] = fVar3;

      pcVar1[1] = cVar7;

      uVar13 = 1;

      do {

        fVar4 = (float)(int)(5 - uVar13);

        if ((int)(5 - uVar13) < 0) {

          fVar4 = fVar4 + _DAT_0079920c;

        }

        fVar5 = (float)(int)uVar13;

        if ((int)uVar13 < 0) {

          fVar5 = fVar5 + _DAT_0079920c;

        }

        uVar10 = uVar13 + 1;

        local_a4[uVar13 + 0x19] = (fVar5 * fVar3 + fVar4 * fVar2) * _DAT_0079a1e8;

        uVar13 = uVar10;

      } while (uVar10 < 5);

      local_c = &DAT_007f2c18;

      local_a4[0x1e] = 0.0;

      local_a4[0x1f] = 1.0;

    }

    iVar8 = iVar8 + -1;

    local_10 = (float)iVar8;

    if (iVar8 < 0) {

      local_10 = local_10 + _DAT_0079920c;

    }

    if (local_a4[0x18] == local_a4[0x19]) {

      local_20 = 0.0;

    }

    else {

      local_20 = local_10 / (local_a4[0x19] - local_a4[0x18]);

    }

    if (param_3 != 0) {

      pfVar15 = local_a4;

      for (iVar9 = 0x10; iVar9 != 0; iVar9 = iVar9 + -1) {

        *pfVar15 = 0.0;

        pfVar15 = pfVar15 + 1;

      }

    }

    param_2._2_2_ = (undefined2)((uint)iVar8 >> 0x10);

    param_2 = (float)CONCAT22(param_2._2_2_,in_FPUControlWord);

    local_18 = (uint)param_2;

    local_14 = local_1c;

    uVar13 = 0;

    do {

      uVar12 = 0;

      uVar10 = uVar13 + 8;

      local_8._2_1_ = '\0';

      if (uVar13 < uVar10) {

        local_8 = local_14;

        do {

          param_2 = *local_8;

          if (param_3 != 0) {

            param_2 = param_2 + local_a4[uVar13];

          }

          fVar2 = (param_2 - local_a4[0x18]) * local_20;

          if (fVar2 < DAT_00796344 == (fVar2 == DAT_00796344)) {

            if (fVar2 < local_10) {

              local_1c = (float *)(fVar2 + _DAT_007938b8);

              local_24 = (int)ROUND(fVar2 + _DAT_007938b8);

              iVar8 = *(int *)(local_c + local_24 * 4);

            }

            else if ((param_1 == (char *)0x6) &&

                    (fVar2 = (local_a4[0x19] + _DAT_007938b0) * _DAT_007938b8,

                    fVar2 < param_2 != (fVar2 == param_2))) {

              iVar8 = 7;

            }

            else {

              iVar8 = 1;

            }

          }

          else if ((param_1 != (char *)0x6) || (local_a4[0x18] * _DAT_007938b8 < param_2)) {

            iVar8 = 0;

          }

          else {

            iVar8 = 6;

          }

          uVar12 = uVar12 >> 3 | iVar8 << 0x15;

          if (param_3 != 0) {

            param_2 = param_2 - local_a4[iVar8 + 0x18];

            uVar11 = uVar13 & 3;

            if (uVar11 != 3) {

              local_a4[uVar13 + 1] = _DAT_007f2bf4 * param_2 + local_a4[uVar13 + 1];

            }

            if (uVar13 < 0xc) {

              if (uVar11 != 0) {

                local_a4[uVar13 + 3] = _DAT_007edf08 * param_2 + local_a4[uVar13 + 3];

              }

              local_a4[uVar13 + 4] = _DAT_007edf04 * param_2 + local_a4[uVar13 + 4];

              if (uVar11 != 3) {

                local_a4[uVar13 + 5] = param_2 * _DAT_007edf00 + local_a4[uVar13 + 5];

              }

            }

          }

          local_8 = local_8 + 4;

          uVar13 = uVar13 + 1;

        } while (uVar13 < uVar10);

        local_8._2_1_ = (char)(uVar12 >> 0x10);

      }

      local_14 = local_14 + 0x20;

      pcVar1[4] = local_8._2_1_;

      pcVar1[2] = (char)uVar12;

      pcVar1[3] = (char)(uVar12 >> 8);

      uVar13 = uVar10;

      pcVar1 = pcVar1 + 3;

    } while (uVar10 < 0x10);

  }

  return 0;

}





// --- FUN_006026c5 at 0x006026C5 (size: 38) ---


int FUN_006026c5(undefined4 param_1,undefined4 param_2)



{

  int iVar1;

  

  iVar1 = FUN_00601ddb(param_1,param_2);

  if (-1 < iVar1) {

    iVar1 = FUN_006008e8();

    if (-1 < iVar1) {

      iVar1 = 0;

    }

  }

  return iVar1;

}





// --- FUN_006026eb at 0x006026EB (size: 38) ---


int FUN_006026eb(undefined4 param_1,undefined4 param_2)



{

  int iVar1;

  

  iVar1 = FUN_00601e60(param_1,param_2);

  if (-1 < iVar1) {

    iVar1 = FUN_006008e8();

    if (-1 < iVar1) {

      iVar1 = 0;

    }

  }

  return iVar1;

}





// --- FUN_00602711 at 0x00602711 (size: 57) ---


int FUN_00602711(undefined4 param_1,undefined4 param_2,undefined4 param_3)



{

  int iVar1;

  undefined1 local_104 [256];

  

  iVar1 = FUN_0060096c();

  if (-1 < iVar1) {

    iVar1 = FUN_006020c2(param_1,local_104,param_3);

    if (-1 < iVar1) {

      iVar1 = 0;

    }

  }

  return iVar1;

}





// --- FUN_0060274a at 0x0060274A (size: 57) ---


int FUN_0060274a(undefined4 param_1,undefined4 param_2,undefined4 param_3)



{

  int iVar1;

  undefined1 local_104 [256];

  

  iVar1 = FUN_0060096c();

  if (-1 < iVar1) {

    iVar1 = FUN_006021f1(param_1,local_104,param_3);

    if (-1 < iVar1) {

      iVar1 = 0;

    }

  }

  return iVar1;

}





// --- FUN_00602783 at 0x00602783 (size: 371) ---


void FUN_00602783(undefined4 *param_1)



{

  param_1[2] = FUN_00603c95;

  param_1[0x23] = FUN_00603c95;

  *param_1 = FUN_00603bc3;

  param_1[1] = FUN_0060522a;

  param_1[3] = FUN_00603d55;

  param_1[4] = FUN_00607138;

  param_1[5] = FUN_00603c5c;

  param_1[6] = FUN_0060515e;

  param_1[9] = FUN_00603c03;

  param_1[10] = FUN_006052f1;

  param_1[7] = FUN_00603e8b;

  param_1[8] = FUN_0060432e;

  param_1[0x16] = FUN_00603f1f;

  param_1[0x11] = &LAB_0060426d;

  param_1[0x15] = FUN_006038b8;

  param_1[0x14] = FUN_0060383d;

  param_1[0x19] = FUN_00603a97;

  param_1[0x1a] = &LAB_006039d8;

  param_1[0x17] = FUN_0060487a;

  param_1[0x13] = &LAB_00603fc1;

  param_1[0x32] = FUN_006045ac;

  param_1[0x33] = FUN_006043ca;

  param_1[0x34] = FUN_00604785;

  param_1[0x35] = FUN_00604661;

  param_1[0x36] = FUN_00604505;

  param_1[0x37] = FUN_006047e1;

  param_1[0x12] = FUN_006046fd;

  param_1[0x30] = FUN_0060447e;

  param_1[0x31] = FUN_00604829;

  param_1[0xb] = &LAB_00607341;

  param_1[0x1c] = &LAB_00604a16;

  param_1[0xe] = &LAB_0060492a;

  param_1[0x1d] = &LAB_00604b0e;

  param_1[0x3b] = FUN_006061ed;

  param_1[0x3c] = &LAB_0060571e;

  param_1[0x3d] = &LAB_0060589e;

  param_1[0x3e] = &LAB_006059fa;

  param_1[0x3f] = &LAB_0060554b;

  param_1[0x40] = &LAB_00605ebf;

  param_1[0x41] = &LAB_00605d0b;

  param_1[0x42] = &LAB_00605b0b;

  param_1[0x45] = &LAB_00605b0b;

  param_1[0x47] = &LAB_00604be6;

  param_1[0x2d] = &LAB_00603954;

  return;

}





// --- FUN_006028f6 at 0x006028F6 (size: 361) ---


void FUN_006028f6(undefined4 *param_1)



{

  param_1[2] = FUN_00603c95;

  param_1[0x23] = FUN_00603c95;

  *param_1 = FUN_00603bc3;

  param_1[1] = FUN_0060522a;

  param_1[3] = FUN_00603d55;

  param_1[4] = FUN_00607138;

  param_1[5] = FUN_00603c5c;

  param_1[6] = FUN_0060515e;

  param_1[9] = FUN_00603c03;

  param_1[10] = FUN_006052f1;

  param_1[7] = FUN_00607002;

  param_1[8] = FUN_0060432e;

  param_1[0x16] = FUN_00607096;

  param_1[0x11] = &LAB_00607280;

  param_1[0x15] = FUN_006038b8;

  param_1[0x14] = FUN_0060383d;

  param_1[0x19] = FUN_00607794;

  param_1[0x1a] = &LAB_006076d5;

  param_1[0x17] = FUN_0060487a;

  param_1[0x13] = &LAB_00603fc1;

  param_1[0x32] = FUN_006045ac;

  param_1[0x33] = FUN_006043ca;

  param_1[0x34] = FUN_00604785;

  param_1[0x35] = FUN_00604661;

  param_1[0x36] = FUN_00604505;

  param_1[0x37] = FUN_006047e1;

  param_1[0x12] = FUN_006046fd;

  param_1[0x30] = FUN_0060447e;

  param_1[0x31] = FUN_00604829;

  param_1[0xb] = &LAB_00607341;

  param_1[0x1c] = &LAB_00607505;

  param_1[0xe] = &LAB_00607419;

  param_1[0x1d] = &LAB_006075fd;

  param_1[0x3b] = FUN_00606f2e;

  param_1[0x3c] = &LAB_00606496;

  param_1[0x3d] = &LAB_00606616;

  param_1[0x3e] = &LAB_00606772;

  param_1[0x3f] = &LAB_006062c3;

  param_1[0x40] = &LAB_00606c37;

  param_1[0x41] = &LAB_00606a83;

  param_1[0x42] = &LAB_00606883;

  param_1[0x45] = &LAB_00606883;

  param_1[0x47] = &LAB_00604be6;

  return;

}





// --- FUN_00602a5f at 0x00602A5F (size: 246) ---


/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

/* WARNING: Removing unreachable block (ram,0x00602af7) */

/* WARNING: Removing unreachable block (ram,0x00602ae5) */

/* WARNING: Removing unreachable block (ram,0x00602ab9) */

/* WARNING: Removing unreachable block (ram,0x00602a9d) */

/* WARNING: Removing unreachable block (ram,0x00602a92) */



undefined8 FUN_00602a5f(void)



{

  char cVar1;

  uint *puVar2;

  int iVar3;

  int iVar4;

  char *pcVar5;

  int *piVar6;

  uint local_2c;

  char local_28 [4];

  char acStack_24 [4];

  char acStack_20 [4];

  char cStack_1c;

  int local_18;

  uint local_14;

  int local_10;

  char cStack_c;

  undefined4 local_8;

  

  cStack_c = s_UnknownVendr_007f30c8[0xc];

  local_28 = (char  [4])s_AuthenticAMD_007f30b8._0_4_;

  acStack_24 = (char  [4])s_AuthenticAMD_007f30b8._4_4_;

  acStack_20 = (char  [4])s_AuthenticAMD_007f30b8._8_4_;

  local_8 = DAT_00836f40;

  cStack_1c = s_AuthenticAMD_007f30b8[0xc];

  cpuid_basic_info(0);

  local_2c = 1;

  piVar6 = (int *)cpuid_basic_info(0);

  local_14 = piVar6[2];

  local_18 = piVar6[1];

  local_10 = piVar6[3];

  if (*piVar6 != 0) {

    iVar4 = cpuid_Version_info(1);

    local_2c = -(uint)((*(uint *)(iVar4 + 8) & 0x800000) != 0) & 0x20 | 3 |

               -(uint)((*(uint *)(iVar4 + 8) & 0x2000000) != 0) & 0x40;

    puVar2 = (uint *)cpuid(0x80000000);

    local_14 = puVar2[2];

    if (0x80000000 < *puVar2) {

      iVar4 = cpuid(0x80000001);

      local_14 = *(uint *)(iVar4 + 8);

      iVar4 = 0xc;

      pcVar5 = local_28;

      piVar6 = &local_18;

      do {

        if (iVar4 == 0) break;

        iVar4 = iVar4 + -1;

        iVar3 = *piVar6;

        cVar1 = *pcVar5;

        pcVar5 = pcVar5 + 1;

        piVar6 = (int *)((int)piVar6 + 1);

      } while (cVar1 == (char)iVar3);

      local_2c = local_2c | 4 | -(uint)((local_14 & 0x80000000) != 0) & 0x80 |

                 -(uint)((local_14 & 0x40000000) != 0) & 0x100 |

                 -(uint)((local_14 & 0x400000) != 0) & 0x200;

    }

  }

  return CONCAT44(local_14,local_2c);

}





// --- FUN_00602b55 at 0x00602B55 (size: 662) ---


void FUN_00602b55(undefined4 *param_1)



{

  byte bVar1;

  byte extraout_AH;

  

  bVar1 = FUN_00602a5f();

  if (((bVar1 & 0x20) != 0) && ((char)bVar1 < '\0')) {

    *param_1 = FUN_006122bb;

    param_1[1] = FUN_00610964;

    param_1[2] = FUN_00612582;

    param_1[3] = &LAB_0060cb19;

    param_1[5] = FUN_00612312;

    param_1[6] = FUN_006109d7;

    param_1[7] = FUN_00610a40;

    param_1[8] = &LAB_00612606;

    param_1[9] = FUN_0061234d;

    param_1[10] = FUN_00610f24;

    param_1[0xb] = &LAB_0060cd4b;

    param_1[0xd] = &LAB_006129b0;

    param_1[0xe] = &LAB_006129f3;

    param_1[0xf] = FUN_00610f2f;

    param_1[0x10] = &LAB_006110bb;

    param_1[0x11] = &LAB_00612665;

    param_1[0x12] = &LAB_006123b3;

    param_1[0x13] = FUN_00610946;

    param_1[0x14] = &LAB_0060b63c;

    param_1[0x15] = &LAB_0060b6d5;

    param_1[0x16] = FUN_00612b95;

    param_1[0x17] = &LAB_00612ad7;

    param_1[0x18] = FUN_0060b732;

    param_1[0x19] = &LAB_0060b776;

    param_1[0x1a] = &LAB_0060bba7;

    param_1[0x1b] = &LAB_0060ce1a;

    param_1[0x1c] = &LAB_0060ce6a;

    param_1[0x1d] = &LAB_0060cf55;

    param_1[0x1e] = FUN_0060bc6c;

    param_1[0x1f] = &LAB_0060d031;

    param_1[0x20] = &LAB_0060d096;

    param_1[0x21] = &LAB_0060d0f6;

    param_1[0x22] = &LAB_0060d151;

    param_1[0x23] = &LAB_00612bf9;

    param_1[0x24] = FUN_0060bcd8;

    param_1[0x25] = FUN_0060be0f;

    param_1[0x26] = &LAB_0060d198;

    param_1[0x27] = &LAB_0060d207;

    param_1[0x28] = FUN_0060d38e;

    param_1[0x29] = FUN_0060e58a;

    param_1[0x2a] = &LAB_0060e72f;

    param_1[0x2b] = FUN_0060ec63;

    param_1[0x2c] = FUN_0060be9c;

    param_1[0x2d] = &LAB_0060bf2e;

    param_1[0x37] = &LAB_00612799;

    param_1[0x34] = &LAB_00610a9f;

    param_1[0x31] = &LAB_0061244b;

    param_1[0x2f] = &LAB_00612494;

    param_1[0x35] = &LAB_0061280a;

    param_1[0x32] = &LAB_00610b10;

    param_1[0x38] = FUN_0060bf92;

    param_1[0x39] = &LAB_0060c039;

    param_1[0x36] = &LAB_006128d2;

    param_1[0x30] = &LAB_006124d7;

    param_1[0x33] = &LAB_00610be4;

    param_1[4] = &LAB_00610218;

    param_1[0x2e] = FUN_0060c0de;

    param_1[0x3b] = FUN_00612000;

    param_1[0x3a] = &LAB_00612140;

    if (((extraout_AH & 1) != 0) && ((extraout_AH & 2) != 0)) {

      param_1[0x10] = FUN_006112d8;

      param_1[0x13] = FUN_0060ff36;

      param_1[0x27] = &LAB_0060d2d9;

      param_1[0x28] = FUN_0060ed7e;

      param_1[0x19] = &LAB_0060b992;

    }

  }

  if ((bVar1 & 0x40) != 0) {

    param_1[0x3f] = FUN_0060b000;

    param_1[0x40] = &LAB_0060b0a0;

    param_1[0x41] = &LAB_0060b3c0;

    param_1[0x3c] = &LAB_0060a000;

    param_1[0x3d] = &LAB_0060a260;

    param_1[0x3e] = &LAB_0060a4c0;

    param_1[0x42] = FUN_00609000;

    param_1[0x45] = FUN_00608000;

  }

  return;

}





// --- FUN_00602deb at 0x00602DEB (size: 84) ---


void FUN_00602deb(void)



{

  int *piVar1;

  int iVar2;

  int in_EAX;

  uint uVar3;

  uint uVar4;

  undefined4 *puVar5;

  undefined4 *puVar6;

  

  uVar4 = *(uint *)(*(int *)(in_EAX + 0x1c) + 0x14);

  if (*(uint *)(in_EAX + 0x10) < uVar4) {

    uVar4 = *(uint *)(in_EAX + 0x10);

  }

  if (uVar4 != 0) {

    puVar5 = *(undefined4 **)(*(int *)(in_EAX + 0x1c) + 0x10);

    puVar6 = *(undefined4 **)(in_EAX + 0xc);

    for (uVar3 = uVar4 >> 2; uVar3 != 0; uVar3 = uVar3 - 1) {

      *puVar6 = *puVar5;

      puVar5 = puVar5 + 1;

      puVar6 = puVar6 + 1;

    }

    for (uVar3 = uVar4 & 3; uVar3 != 0; uVar3 = uVar3 - 1) {

      *(undefined1 *)puVar6 = *(undefined1 *)puVar5;

      puVar5 = (undefined4 *)((int)puVar5 + 1);

      puVar6 = (undefined4 *)((int)puVar6 + 1);

    }

    *(int *)(in_EAX + 0xc) = *(int *)(in_EAX + 0xc) + uVar4;

    piVar1 = (int *)(*(int *)(in_EAX + 0x1c) + 0x10);

    *piVar1 = *piVar1 + uVar4;

    *(int *)(in_EAX + 0x14) = *(int *)(in_EAX + 0x14) + uVar4;

    *(int *)(in_EAX + 0x10) = *(int *)(in_EAX + 0x10) - uVar4;

    piVar1 = (int *)(*(int *)(in_EAX + 0x1c) + 0x14);

    *piVar1 = *piVar1 - uVar4;

    iVar2 = *(int *)(in_EAX + 0x1c);

    if (*(int *)(iVar2 + 0x14) == 0) {

      *(undefined4 *)(iVar2 + 0x10) = *(undefined4 *)(iVar2 + 8);

    }

  }

  return;

}





// --- FUN_00602e3f at 0x00602E3F (size: 332) ---


char * __thiscall FUN_00602e3f(int param_1,uint param_2)



{

  uint uVar1;

  char *pcVar2;

  char *pcVar3;

  char *pcVar4;

  char *pcVar6;

  char *pcVar7;

  uint local_14;

  char *local_10;

  uint local_c;

  char local_6;

  char local_5;

  char *pcVar5;

  

  local_c = *(uint *)(param_1 + 0x74);

  uVar1 = *(uint *)(param_1 + 100);

  pcVar3 = (char *)(*(int *)(param_1 + 0x30) + uVar1);

  pcVar7 = *(char **)(param_1 + 0x70);

  if (*(int *)(param_1 + 0x24) - 0x106U < uVar1) {

    local_14 = (uVar1 - *(int *)(param_1 + 0x24)) + 0x106;

  }

  else {

    local_14 = 0;

  }

  local_5 = pcVar3[(int)(pcVar7 + -1)];

  local_6 = pcVar3[(int)pcVar7];

  if (*(char **)(param_1 + 0x84) <= pcVar7) {

    local_c = local_c >> 2;

  }

  pcVar2 = *(char **)(param_1 + 0x6c);

  local_10 = *(char **)(param_1 + 0x88);

  if (pcVar2 < *(char **)(param_1 + 0x88)) {

    local_10 = pcVar2;

  }

  do {

    pcVar6 = (char *)(*(int *)(param_1 + 0x30) + param_2);

    if ((((pcVar6[(int)pcVar7] == local_6) && (pcVar6[(int)(pcVar7 + -1)] == local_5)) &&

        (*pcVar6 == *pcVar3)) && (pcVar6[1] == pcVar3[1])) {

      pcVar6 = pcVar6 + 2;

      pcVar5 = pcVar3 + 2;

      while (((((pcVar4 = pcVar5 + 1, *pcVar4 == pcVar6[1] &&

                (pcVar4 = pcVar5 + 2, *pcVar4 == pcVar6[2])) &&

               ((pcVar4 = pcVar5 + 3, *pcVar4 == pcVar6[3] &&

                ((pcVar4 = pcVar5 + 4, *pcVar4 == pcVar6[4] &&

                 (pcVar4 = pcVar5 + 5, *pcVar4 == pcVar6[5])))))) &&

              (pcVar4 = pcVar5 + 6, *pcVar4 == pcVar6[6])) &&

             (pcVar4 = pcVar5 + 7, *pcVar4 == pcVar6[7]))) {

        pcVar4 = pcVar5 + 8;

        pcVar6 = pcVar6 + 8;

        if ((*pcVar4 != *pcVar6) || (pcVar5 = pcVar4, pcVar3 + 0x102 <= pcVar4)) break;

      }

      pcVar4 = pcVar4 + (0x102 - (int)(pcVar3 + 0x102));

      if ((int)pcVar7 < (int)pcVar4) {

        *(uint *)(param_1 + 0x68) = param_2;

        if ((int)local_10 <= (int)pcVar4) {

LAB_00602f7b:

          if (pcVar4 <= pcVar2) {

            pcVar2 = pcVar4;

          }

          return pcVar2;

        }

        local_5 = (pcVar3 + (int)pcVar4)[-1];

        local_6 = pcVar3[(int)pcVar4];

        pcVar7 = pcVar4;

      }

    }

    pcVar4 = pcVar7;

    param_2 = (uint)*(ushort *)

                     (*(int *)(param_1 + 0x38) + (*(uint *)(param_1 + 0x2c) & param_2) * 2);

    if ((param_2 <= local_14) || (local_c = local_c - 1, pcVar7 = pcVar4, local_c == 0))

    goto LAB_00602f7b;

  } while( true );

}





// --- FUN_00602f8b at 0x00602F8B (size: 346) ---


void FUN_00602f8b(void)



{

  uint uVar1;

  int *piVar2;

  int iVar3;

  int iVar4;

  uint uVar5;

  ushort *puVar6;

  uint uVar7;

  int iVar8;

  uint uVar9;

  int iVar10;

  int *unaff_EBX;

  undefined4 *puVar11;

  undefined4 *puVar12;

  uint local_8;

  

  uVar1 = unaff_EBX[9];

  do {

    uVar9 = unaff_EBX[0x19];

    uVar5 = (unaff_EBX[0xd] - uVar9) - unaff_EBX[0x1b];

    if (uVar5 == 0) {

      if ((uVar9 != 0) || (uVar7 = uVar1, unaff_EBX[0x1b] != 0)) {

LAB_00602fc3:

        uVar7 = uVar5;

        if ((uVar1 - 0x106) + unaff_EBX[9] <= uVar9) {

          puVar11 = (undefined4 *)(unaff_EBX[0xc] + uVar1);

          puVar12 = (undefined4 *)unaff_EBX[0xc];

          for (uVar9 = uVar1 >> 2; uVar9 != 0; uVar9 = uVar9 - 1) {

            *puVar12 = *puVar11;

            puVar11 = puVar11 + 1;

            puVar12 = puVar12 + 1;

          }

          for (uVar9 = uVar1 & 3; uVar9 != 0; uVar9 = uVar9 - 1) {

            *(undefined1 *)puVar12 = *(undefined1 *)puVar11;

            puVar11 = (undefined4 *)((int)puVar11 + 1);

            puVar12 = (undefined4 *)((int)puVar12 + 1);

          }

          iVar10 = unaff_EBX[0x11];

          unaff_EBX[0x1a] = unaff_EBX[0x1a] - uVar1;

          unaff_EBX[0x19] = unaff_EBX[0x19] - uVar1;

          unaff_EBX[0x15] = unaff_EBX[0x15] - uVar1;

          puVar6 = (ushort *)(unaff_EBX[0xf] + iVar10 * 2);

          do {

            puVar6 = puVar6 + -1;

            iVar10 = iVar10 + -1;

            *puVar6 = ~-(ushort)(*puVar6 < uVar1) & *puVar6 - (short)uVar1;

          } while (iVar10 != 0);

          puVar6 = (ushort *)(unaff_EBX[0xe] + uVar1 * 2);

          uVar9 = uVar1;

          do {

            puVar6 = puVar6 + -1;

            uVar9 = uVar9 - 1;

            *puVar6 = ~-(ushort)(*puVar6 < uVar1) & *puVar6 - (short)uVar1;

          } while (uVar9 != 0);

          uVar7 = uVar5 + uVar1;

        }

      }

    }

    else {

      if (uVar5 != 0xffffffff) goto LAB_00602fc3;

      uVar7 = 0xfffffffe;

    }

    piVar2 = (int *)*unaff_EBX;

    if (piVar2[1] == 0) {

      return;

    }

    iVar10 = unaff_EBX[0x1b];

    iVar3 = unaff_EBX[0x19];

    uVar9 = piVar2[1];

    iVar4 = unaff_EBX[0xc];

    local_8 = uVar9;

    if (uVar7 < uVar9) {

      local_8 = uVar7;

    }

    if (local_8 == 0) {

      local_8 = 0;

    }

    else {

      piVar2[1] = uVar9 - local_8;

      if (*(int *)(piVar2[7] + 0x18) == 0) {

        iVar8 = FUN_00612c77(piVar2[0xc],*piVar2,local_8);

        piVar2[0xc] = iVar8;

      }

      puVar11 = (undefined4 *)*piVar2;

      puVar12 = (undefined4 *)(iVar10 + iVar3 + iVar4);

      for (uVar9 = local_8 >> 2; uVar9 != 0; uVar9 = uVar9 - 1) {

        *puVar12 = *puVar11;

        puVar11 = puVar11 + 1;

        puVar12 = puVar12 + 1;

      }

      for (uVar9 = local_8 & 3; uVar9 != 0; uVar9 = uVar9 - 1) {

        *(undefined1 *)puVar12 = *(undefined1 *)puVar11;

        puVar11 = (undefined4 *)((int)puVar11 + 1);

        puVar12 = (undefined4 *)((int)puVar12 + 1);

      }

      *piVar2 = *piVar2 + local_8;

      piVar2[2] = piVar2[2] + local_8;

    }

    unaff_EBX[0x1b] = unaff_EBX[0x1b] + local_8;

    if (2 < (uint)unaff_EBX[0x1b]) {

      uVar9 = (uint)*(byte *)(unaff_EBX[0x19] + unaff_EBX[0xc]);

      unaff_EBX[0x10] = uVar9;

      unaff_EBX[0x10] =

           (uVar9 << ((byte)unaff_EBX[0x14] & 0x1f) ^

           (uint)((byte *)(unaff_EBX[0x19] + unaff_EBX[0xc]))[1]) & unaff_EBX[0x13];

    }

    if (0x105 < (uint)unaff_EBX[0x1b]) {

      return;

    }

    if (*(int *)(*unaff_EBX + 4) == 0) {

      return;

    }

  } while( true );

}





// --- FUN_006030e5 at 0x006030E5 (size: 294) ---


char FUN_006030e5(int *param_1,int param_2)



{

  int *piVar1;

  int iVar2;

  uint uVar3;

  int iVar4;

  uint uVar5;

  

  uVar5 = 0xffff;

  if (param_1[3] - 5U < 0xffff) {

    uVar5 = param_1[3] - 5U;

  }

  do {

    uVar3 = param_1[0x1b];

    if (uVar3 < 2) {

      FUN_00602f8b();

      uVar3 = param_1[0x1b];

      if (uVar3 == 0) {

        if (param_2 == 0) {

          return '\0';

        }

        iVar2 = param_1[0x15];

        if (iVar2 < 0) {

          iVar4 = 0;

        }

        else {

          iVar4 = param_1[0xc] + iVar2;

        }

        FUN_00614031(param_1,iVar4,param_1[0x19] - iVar2,param_2 == 4);

        param_1[0x15] = param_1[0x19];

        FUN_00602deb();

        if (*(int *)(*param_1 + 0x10) == 0) {

          if (param_2 != 4) {

            return '\0';

          }

          return '\x02';

        }

        return (param_2 == 4) * '\x02' + '\x01';

      }

    }

    piVar1 = param_1 + 0x19;

    *piVar1 = *piVar1 + uVar3;

    iVar2 = param_1[0x15];

    param_1[0x1b] = 0;

    uVar3 = iVar2 + uVar5;

    if ((*piVar1 == 0) || (uVar3 <= (uint)param_1[0x19])) {

      param_1[0x1b] = param_1[0x19] - uVar3;

      param_1[0x19] = uVar3;

      if (iVar2 < 0) {

        iVar4 = 0;

      }

      else {

        iVar4 = param_1[0xc] + iVar2;

      }

      FUN_00614031(param_1,iVar4,uVar3 - iVar2,0);

      param_1[0x15] = param_1[0x19];

      FUN_00602deb();

      if (*(int *)(*param_1 + 0x10) == 0) {

        return '\0';

      }

    }

    iVar2 = param_1[0x15];

    if (param_1[9] - 0x106U <= (uint)(param_1[0x19] - iVar2)) {

      if (iVar2 < 0) {

        iVar4 = 0;

      }

      else {

        iVar4 = param_1[0xc] + iVar2;

      }

      FUN_00614031(param_1,iVar4,param_1[0x19] - iVar2,0);

      param_1[0x15] = param_1[0x19];

      FUN_00602deb();

      if (*(int *)(*param_1 + 0x10) == 0) {

        return '\0';

      }

    }

  } while( true );

}





// --- FUN_0060320b at 0x0060320B (size: 684) ---


char FUN_0060320b(int *param_1,int param_2)



{

  int *piVar1;

  short sVar2;

  ushort uVar3;

  int iVar4;

  uint uVar5;

  int iVar6;

  byte bVar7;

  uint uVar8;

  bool bVar9;

  

  uVar8 = 0;

  do {

    uVar5 = param_1[0x1b];

    if (uVar5 < 0x106) {

      FUN_00602f8b();

      uVar5 = param_1[0x1b];

      if ((uVar5 < 0x106) && (param_2 == 0)) {

        return '\0';

      }

      if (uVar5 == 0) {

        iVar4 = param_1[0x15];

        if (iVar4 < 0) {

          iVar6 = 0;

        }

        else {

          iVar6 = param_1[0xc] + iVar4;

        }

        FUN_00614031(param_1,iVar6,param_1[0x19] - iVar4,param_2 == 4);

        param_1[0x15] = param_1[0x19];

        FUN_00602deb();

        if (*(int *)(*param_1 + 0x10) == 0) {

          if (param_2 != 4) {

            return '\0';

          }

          return '\x02';

        }

        return (param_2 == 4) * '\x02' + '\x01';

      }

    }

    if (2 < uVar5) {

      uVar8 = (param_1[0x10] << ((byte)param_1[0x14] & 0x1f) ^

              (uint)*(byte *)(param_1[0xc] + 2 + param_1[0x19])) & param_1[0x13];

      param_1[0x10] = uVar8;

      uVar3 = *(ushort *)(param_1[0xf] + uVar8 * 2);

      uVar8 = (uint)uVar3;

      *(ushort *)(param_1[0xe] + (param_1[0xb] & param_1[0x19]) * 2) = uVar3;

      *(short *)(param_1[0xf] + param_1[0x10] * 2) = (short)param_1[0x19];

    }

    if (((uVar8 != 0) && (param_1[0x19] - uVar8 <= param_1[9] - 0x106U)) && (param_1[0x20] != 2)) {

      iVar4 = FUN_00602e3f(uVar8);

      param_1[0x16] = iVar4;

    }

    if ((uint)param_1[0x16] < 3) {

      bVar7 = *(byte *)(param_1[0x19] + param_1[0xc]);

      *(undefined2 *)(param_1[0x5a7] + param_1[0x5a6] * 2) = 0;

      *(byte *)(param_1[0x5a4] + param_1[0x5a6]) = bVar7;

      param_1[0x5a6] = param_1[0x5a6] + 1;

      *(short *)(param_1 + bVar7 + 0x23) = (short)param_1[bVar7 + 0x23] + 1;

      bVar9 = param_1[0x5a6] == param_1[0x5a5] + -1;

      param_1[0x1b] = param_1[0x1b] + -1;

LAB_00603415:

      param_1[0x19] = param_1[0x19] + 1;

    }

    else {

      sVar2 = (short)param_1[0x19] - (short)param_1[0x1a];

      bVar7 = (char)param_1[0x16] - 3;

      *(short *)(param_1[0x5a7] + param_1[0x5a6] * 2) = sVar2;

      *(byte *)(param_1[0x5a4] + param_1[0x5a6]) = bVar7;

      param_1[0x5a6] = param_1[0x5a6] + 1;

      uVar3 = sVar2 - 1;

      *(short *)(param_1 + (byte)(&DAT_007f6350)[bVar7] + 0x124) =

           (short)param_1[(byte)(&DAT_007f6350)[bVar7] + 0x124] + 1;

      if (uVar3 < 0x100) {

        bVar7 = (&DAT_007f6150)[uVar3];

      }

      else {

        bVar7 = (&DAT_007f6250)[uVar3 >> 7];

      }

      *(short *)(param_1 + bVar7 + 0x260) = (short)param_1[bVar7 + 0x260] + 1;

      bVar9 = param_1[0x5a6] == param_1[0x5a5] + -1;

      uVar5 = param_1[0x16];

      param_1[0x1b] = param_1[0x1b] - uVar5;

      if ((uVar5 <= (uint)param_1[0x1e]) && (2 < (uint)param_1[0x1b])) {

        param_1[0x16] = uVar5 - 1;

        do {

          param_1[0x19] = param_1[0x19] + 1;

          uVar8 = ((uint)*(byte *)(param_1[0x19] + 2U + param_1[0xc]) ^

                  param_1[0x10] << ((byte)param_1[0x14] & 0x1f)) & param_1[0x13];

          param_1[0x10] = uVar8;

          uVar3 = *(ushort *)(param_1[0xf] + uVar8 * 2);

          uVar8 = (uint)uVar3;

          *(ushort *)(param_1[0xe] + (param_1[0x19] & param_1[0xb]) * 2) = uVar3;

          *(short *)(param_1[0xf] + param_1[0x10] * 2) = (short)param_1[0x19];

          piVar1 = param_1 + 0x16;

          *piVar1 = *piVar1 + -1;

        } while (*piVar1 != 0);

        goto LAB_00603415;

      }

      param_1[0x19] = param_1[0x19] + uVar5;

      param_1[0x16] = 0;

      uVar5 = (uint)*(byte *)(param_1[0x19] + param_1[0xc]);

      param_1[0x10] = uVar5;

      param_1[0x10] =

           (uVar5 << ((byte)param_1[0x14] & 0x1f) ^

           (uint)((byte *)(param_1[0x19] + param_1[0xc]))[1]) & param_1[0x13];

    }

    if (bVar9) {

      iVar4 = param_1[0x15];

      if (iVar4 < 0) {

        iVar6 = 0;

      }

      else {

        iVar6 = param_1[0xc] + iVar4;

      }

      FUN_00614031(param_1,iVar6,param_1[0x19] - iVar4,0);

      param_1[0x15] = param_1[0x19];

      FUN_00602deb();

      if (*(int *)(*param_1 + 0x10) == 0) {

        return '\0';

      }

    }

  } while( true );

}





// --- FUN_006034b7 at 0x006034B7 (size: 902) ---


char FUN_006034b7(int *param_1,int param_2)



{

  int *piVar1;

  int iVar2;

  int iVar3;

  short sVar4;

  ushort uVar5;

  uint uVar6;

  int iVar7;

  uint uVar8;

  byte bVar9;

  int iVar10;

  uint local_8;

  

  local_8 = 0;

LAB_006034c7:

  do {

    uVar6 = param_1[0x1b];

    if (uVar6 < 0x106) {

      FUN_00602f8b();

      uVar6 = param_1[0x1b];

      if ((uVar6 < 0x106) && (param_2 == 0)) {

        return '\0';

      }

      if (uVar6 == 0) {

        if (param_1[0x18] != 0) {

          bVar9 = *(byte *)(param_1[0x19] + -1 + param_1[0xc]);

          piVar1 = param_1 + 0x5a6;

          *(undefined2 *)(param_1[0x5a7] + *piVar1 * 2) = 0;

          *(byte *)(param_1[0x5a4] + *piVar1) = bVar9;

          *piVar1 = *piVar1 + 1;

          *(short *)(param_1 + bVar9 + 0x23) = (short)param_1[bVar9 + 0x23] + 1;

          param_1[0x18] = 0;

        }

        iVar7 = param_1[0x15];

        if (iVar7 < 0) {

          iVar10 = 0;

        }

        else {

          iVar10 = param_1[0xc] + iVar7;

        }

        FUN_00614031(param_1,iVar10,param_1[0x19] - iVar7,param_2 == 4);

        param_1[0x15] = param_1[0x19];

        FUN_00602deb();

        if (*(int *)(*param_1 + 0x10) == 0) {

          if (param_2 != 4) {

            return '\0';

          }

          return '\x02';

        }

        return (param_2 == 4) * '\x02' + '\x01';

      }

    }

    if (2 < uVar6) {

      uVar6 = (param_1[0x10] << ((byte)param_1[0x14] & 0x1f) ^

              (uint)*(byte *)(param_1[0xc] + 2 + param_1[0x19])) & param_1[0x13];

      param_1[0x10] = uVar6;

      uVar5 = *(ushort *)(param_1[0xf] + uVar6 * 2);

      local_8 = (uint)uVar5;

      *(ushort *)(param_1[0xe] + (param_1[0xb] & param_1[0x19]) * 2) = uVar5;

      *(short *)(param_1[0xf] + param_1[0x10] * 2) = (short)param_1[0x19];

    }

    param_1[0x1c] = param_1[0x16];

    param_1[0x17] = param_1[0x1a];

    param_1[0x16] = 2;

    if (((local_8 != 0) && ((uint)param_1[0x1c] < (uint)param_1[0x1e])) &&

       (param_1[0x19] - local_8 <= param_1[9] - 0x106U)) {

      if (param_1[0x20] != 2) {

        iVar7 = FUN_00602e3f(local_8);

        param_1[0x16] = iVar7;

      }

      if (((uint)param_1[0x16] < 6) &&

         ((param_1[0x20] == 1 ||

          ((param_1[0x16] == 3 && (0x1000 < (uint)(param_1[0x19] - param_1[0x1a]))))))) {

        param_1[0x16] = 2;

      }

    }

    if (((uint)param_1[0x1c] < 3) || ((uint)param_1[0x1c] < (uint)param_1[0x16])) {

      if (param_1[0x18] == 0) {

        param_1[0x19] = param_1[0x19] + 1;

        param_1[0x1b] = param_1[0x1b] + -1;

        param_1[0x18] = 1;

        goto LAB_006034c7;

      }

      bVar9 = *(byte *)(param_1[0x19] + -1 + param_1[0xc]);

      *(undefined2 *)(param_1[0x5a7] + param_1[0x5a6] * 2) = 0;

      *(byte *)(param_1[0x5a4] + param_1[0x5a6]) = bVar9;

      param_1[0x5a6] = param_1[0x5a6] + 1;

      *(short *)(param_1 + bVar9 + 0x23) = (short)param_1[bVar9 + 0x23] + 1;

      if (param_1[0x5a6] == param_1[0x5a5] + -1) {

        iVar7 = param_1[0x15];

        if (iVar7 < 0) {

          iVar10 = 0;

        }

        else {

          iVar10 = param_1[0xc] + iVar7;

        }

        FUN_00614031(param_1,iVar10,param_1[0x19] - iVar7,0);

        param_1[0x15] = param_1[0x19];

        FUN_00602deb();

      }

      param_1[0x19] = param_1[0x19] + 1;

      param_1[0x1b] = param_1[0x1b] + -1;

    }

    else {

      iVar7 = param_1[0x1b];

      iVar10 = param_1[0x19];

      sVar4 = (short)param_1[0x19] - (short)param_1[0x17];

      bVar9 = (char)param_1[0x1c] - 3;

      *(short *)(param_1[0x5a7] + param_1[0x5a6] * 2) = sVar4 + -1;

      *(byte *)(param_1[0x5a4] + param_1[0x5a6]) = bVar9;

      param_1[0x5a6] = param_1[0x5a6] + 1;

      uVar5 = sVar4 - 2;

      *(short *)(param_1 + (byte)(&DAT_007f6350)[bVar9] + 0x124) =

           (short)param_1[(byte)(&DAT_007f6350)[bVar9] + 0x124] + 1;

      if (uVar5 < 0x100) {

        bVar9 = (&DAT_007f6150)[uVar5];

      }

      else {

        bVar9 = (&DAT_007f6250)[uVar5 >> 7];

      }

      *(short *)(param_1 + bVar9 + 0x260) = (short)param_1[bVar9 + 0x260] + 1;

      iVar2 = param_1[0x5a5];

      iVar3 = param_1[0x5a6];

      param_1[0x1b] = param_1[0x1b] + (1 - param_1[0x1c]);

      param_1[0x1c] = param_1[0x1c] + -2;

      do {

        param_1[0x19] = param_1[0x19] + 1;

        uVar6 = param_1[0x19];

        if (uVar6 <= (uint)(iVar10 + -3 + iVar7)) {

          uVar8 = (param_1[0x10] << ((byte)param_1[0x14] & 0x1f) ^

                  (uint)*(byte *)(param_1[0xc] + 2 + uVar6)) & param_1[0x13];

          param_1[0x10] = uVar8;

          uVar5 = *(ushort *)(param_1[0xf] + uVar8 * 2);

          local_8 = (uint)uVar5;

          *(ushort *)(param_1[0xe] + (param_1[0xb] & uVar6) * 2) = uVar5;

          *(short *)(param_1[0xf] + param_1[0x10] * 2) = (short)param_1[0x19];

        }

        piVar1 = param_1 + 0x1c;

        *piVar1 = *piVar1 + -1;

      } while (*piVar1 != 0);

      param_1[0x18] = 0;

      param_1[0x19] = param_1[0x19] + 1;

      param_1[0x16] = 2;

      if (iVar3 != iVar2 + -1) goto LAB_006034c7;

      iVar7 = param_1[0x15];

      if (iVar7 < 0) {

        iVar10 = 0;

      }

      else {

        iVar10 = param_1[0xc] + iVar7;

      }

      FUN_00614031(param_1,iVar10,param_1[0x19] - iVar7,0);

      param_1[0x15] = param_1[0x19];

      FUN_00602deb();

    }

    if (*(int *)(*param_1 + 0x10) == 0) {

      return '\0';

    }

  } while( true );

}





// --- FUN_0060383d at 0x0060383D (size: 123) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



undefined8 * FUN_0060383d(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  uint uVar5;

  uint uVar6;

  uint uVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  

  uVar5 = (uint)*param_3;

  uVar6 = (uint)((ulonglong)*param_3 >> 0x20);

  uVar7 = (uint)param_3[1];

  fVar8 = (float)((ulonglong)param_3[1] >> 0x20);

  fVar1 = (float)*param_2;

  fVar2 = (float)((ulonglong)*param_2 >> 0x20);

  fVar3 = (float)param_2[1];

  fVar4 = (float)((ulonglong)param_2[1] >> 0x20);

  fVar9 = (float)(uVar5 ^ _UNK_007f58a8);

  fVar11 = (float)(uVar5 ^ _UNK_007f58ac);

  fVar13 = (float)(uVar6 ^ _UNK_007f5898);

  fVar14 = (float)(uVar6 ^ _UNK_007f589c);

  fVar10 = (float)(uVar7 ^ _UNK_007f5888);

  fVar12 = (float)(uVar7 ^ _UNK_007f588c);

  *param_1 = CONCAT44(fVar8 * fVar2 + (float)(uVar5 ^ _UNK_007f58a4) * fVar3 +

                      (float)(uVar6 ^ _UNK_007f5894) * fVar4 +

                      (float)(uVar7 ^ _UNK_007f5884) * fVar1,

                      fVar8 * fVar1 + (float)(uVar5 ^ _DAT_007f58a0) * fVar4 +

                      (float)(uVar6 ^ _DAT_007f5890) * fVar3 +

                      (float)(uVar7 ^ _DAT_007f5880) * fVar2);

  param_1[1] = CONCAT44(fVar8 * fVar4 + fVar11 * fVar1 + fVar14 * fVar2 + fVar12 * fVar3,

                        fVar8 * fVar3 + fVar9 * fVar2 + fVar13 * fVar1 + fVar10 * fVar4);

  return param_1;

}





// --- FUN_006038b8 at 0x006038B8 (size: 156) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



float * FUN_006038b8(float *param_1,float *param_2)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  undefined1 in_register_00001304 [12];

  float fVar6;

  undefined1 in_XMM5 [16];

  undefined1 auVar7 [16];

  undefined1 auVar8 [16];

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = param_2[3];

  auVar7._4_12_ = in_XMM5._4_12_;

  auVar7._0_4_ = fVar2 * fVar2;

  fVar5 = fVar1 * fVar1 + auVar7._0_4_ + fVar3 * fVar3 + fVar4 * fVar4;

  auVar8._4_12_ = in_register_00001304;

  auVar8._0_4_ = fVar5;

  auVar8 = rsqrtss(auVar7,auVar8);

  fVar6 = auVar8._0_4_;

  fVar6 = (DAT_00828ce0 - fVar5 * fVar6 * fVar6) * _DAT_00828cd0 * fVar6;

  *param_1 = fVar1 * fVar6;

  param_1[1] = fVar2 * fVar6;

  param_1[2] = fVar3 * fVar6;

  param_1[3] = fVar4 * fVar6;

  return param_1;

}





// --- FUN_00603a97 at 0x00603A97 (size: 300) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_00603a97(float *param_1,float *param_2)



{

  float *pfVar1;

  int iVar2;

  float fVar3;

  float *pfVar4;

  int iVar5;

  int iVar6;

  float local_18 [4];

  int local_8;

  

  pfVar4 = param_2;

  fVar3 = param_2[5] + *param_2 + param_2[10];

  if (fVar3 <= DAT_00796344) {

    local_18[1] = param_2[5];

    pfVar1 = param_2 + 10;

    local_18[0] = *param_2;

    local_18[2] = *pfVar1;

    param_2 = (float *)(uint)(*param_2 < param_2[5]);

    if (local_18[(int)param_2] < *pfVar1) {

      param_2 = (float *)0x2;

    }

    iVar5 = (int)param_2 * 4;

    iVar2 = *(int *)(&DAT_007f5924 + iVar5);

    iVar6 = iVar2 * 4;

    local_8 = *(int *)(&DAT_007f5924 + iVar6);

    fVar3 = SQRT(((local_18[(int)param_2] - local_18[iVar2]) - local_18[local_8]) + _DAT_007938b0) *

            _DAT_007938b8;

    param_1[(int)param_2] = fVar3;

    fVar3 = _DAT_007c97cc / fVar3;

    param_1[iVar2] = (pfVar4[(int)param_2 + iVar6] + pfVar4[iVar2 + iVar5]) * fVar3;

    param_1[local_8] = (pfVar4[(int)param_2 + local_8 * 4] + pfVar4[iVar5 + local_8]) * fVar3;

    param_1[3] = (pfVar4[iVar6 + local_8] - pfVar4[local_8 * 4 + iVar2]) * fVar3;

  }

  else {

    fVar3 = SQRT(fVar3 + _DAT_007938b0) * _DAT_007938b8;

    param_1[3] = fVar3;

    fVar3 = _DAT_007c97cc / fVar3;

    *param_1 = (param_2[6] - param_2[9]) * fVar3;

    param_1[1] = (param_2[8] - param_2[2]) * fVar3;

    param_1[2] = (param_2[1] - param_2[4]) * fVar3;

  }

  return;

}





// --- FUN_00603bc3 at 0x00603BC3 (size: 64) ---


float * FUN_00603bc3(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  

  fVar3 = param_3[1];

  fVar4 = param_3[2];

  fVar5 = param_3[3];

  fVar1 = *param_2;

  fVar6 = param_3[5];

  fVar7 = param_3[6];

  fVar8 = param_3[7];

  fVar2 = param_2[1];

  fVar9 = param_3[0xd];

  fVar10 = param_3[0xe];

  fVar11 = param_3[0xf];

  *param_1 = fVar1 * *param_3 + param_3[0xc] + fVar2 * param_3[4];

  param_1[1] = fVar1 * fVar3 + fVar9 + fVar2 * fVar6;

  param_1[2] = fVar1 * fVar4 + fVar10 + fVar2 * fVar7;

  param_1[3] = fVar1 * fVar5 + fVar11 + fVar2 * fVar8;

  return param_1;

}





// --- FUN_00603c03 at 0x00603C03 (size: 89) ---


undefined8 * FUN_00603c03(undefined8 *param_1,float *param_2,float *param_3)



{

  float fVar1;

  undefined1 in_XMM0 [16];

  undefined1 auVar2 [16];

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  

  fVar3 = *param_2;

  fVar1 = param_2[1];

  fVar4 = fVar3 * *param_3 + param_3[0xc] + fVar1 * param_3[4];

  fVar5 = fVar3 * param_3[1] + param_3[0xd] + fVar1 * param_3[5];

  fVar6 = fVar3 * param_3[3] + param_3[0xf] + fVar1 * param_3[7];

  auVar2._4_4_ = fVar5;

  auVar2._0_4_ = fVar4;

  auVar2._8_4_ = fVar3 * param_3[2] + param_3[0xe] + fVar1 * param_3[6];

  auVar2._12_4_ = fVar6;

  auVar2 = rcpps(in_XMM0,auVar2);

  fVar3 = auVar2._12_4_;

  fVar3 = (fVar3 + fVar3) - fVar3 * fVar3 * fVar6;

  *param_1 = CONCAT44(fVar5 * fVar3,fVar4 * fVar3);

  return param_1;

}





// --- FUN_00603c5c at 0x00603C5C (size: 57) ---


undefined8 * FUN_00603c5c(undefined8 *param_1,float *param_2,float *param_3)



{

  *param_1 = CONCAT44(*param_2 * param_3[1] + param_2[1] * param_3[5],

                      *param_2 * *param_3 + param_2[1] * param_3[4]);

  return param_1;

}





// --- FUN_00603c95 at 0x00603C95 (size: 192) ---


void FUN_00603c95(float *param_1,float *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar7 = param_2[2];

  fVar8 = param_2[3];

  if (((uint)param_3 & 0xf) == 0) {

    fVar11 = param_3[8] * fVar7 + param_3[0xc] * fVar8;

    fVar12 = param_3[9] * fVar7 + param_3[0xd] * fVar8;

    fVar13 = param_3[10] * fVar7 + param_3[0xe] * fVar8;

    fVar14 = param_3[0xb] * fVar7 + param_3[0xf] * fVar8;

    fVar7 = param_3[4];

    fVar8 = param_3[5];

    fVar9 = param_3[6];

    fVar10 = param_3[7];

    fVar3 = *param_3;

    fVar4 = param_3[1];

    fVar5 = param_3[2];

    fVar6 = param_3[3];

  }

  else {

    fVar11 = (float)*(undefined8 *)(param_3 + 8) * fVar7 +

             (float)*(undefined8 *)(param_3 + 0xc) * fVar8;

    fVar12 = (float)((ulonglong)*(undefined8 *)(param_3 + 8) >> 0x20) * fVar7 +

             (float)((ulonglong)*(undefined8 *)(param_3 + 0xc) >> 0x20) * fVar8;

    fVar13 = (float)*(undefined8 *)(param_3 + 10) * fVar7 +

             (float)*(undefined8 *)(param_3 + 0xe) * fVar8;

    fVar14 = (float)((ulonglong)*(undefined8 *)(param_3 + 10) >> 0x20) * fVar7 +

             (float)((ulonglong)*(undefined8 *)(param_3 + 0xe) >> 0x20) * fVar8;

    fVar7 = (float)*(undefined8 *)(param_3 + 4);

    fVar8 = (float)((ulonglong)*(undefined8 *)(param_3 + 4) >> 0x20);

    fVar9 = (float)*(undefined8 *)(param_3 + 6);

    fVar10 = (float)((ulonglong)*(undefined8 *)(param_3 + 6) >> 0x20);

    fVar3 = (float)*(undefined8 *)param_3;

    fVar4 = (float)((ulonglong)*(undefined8 *)param_3 >> 0x20);

    fVar5 = (float)*(undefined8 *)(param_3 + 2);

    fVar6 = (float)((ulonglong)*(undefined8 *)(param_3 + 2) >> 0x20);

  }

  *param_1 = fVar3 * fVar1 + fVar7 * fVar2 + fVar11;

  param_1[1] = fVar4 * fVar1 + fVar8 * fVar2 + fVar12;

  param_1[2] = fVar5 * fVar1 + fVar9 * fVar2 + fVar13;

  param_1[3] = fVar6 * fVar1 + fVar10 * fVar2 + fVar14;

  return;

}





// --- FUN_00603d55 at 0x00603D55 (size: 310) ---


undefined8 * FUN_00603d55(undefined8 *param_1,float *param_2,undefined8 *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  float fVar17;

  float fVar18;

  float fVar19;

  float fVar20;

  float fVar21;

  float fVar22;

  float fVar23;

  float fVar24;

  float fVar25;

  float fVar26;

  float fVar27;

  float fVar28;

  float fVar29;

  float fVar30;

  float fVar31;

  float fVar32;

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = param_2[3];

  fVar17 = (float)*param_3;

  fVar18 = (float)((ulonglong)*param_3 >> 0x20);

  fVar19 = (float)param_3[1];

  fVar20 = (float)((ulonglong)param_3[1] >> 0x20);

  fVar21 = (float)param_3[2];

  fVar22 = (float)((ulonglong)param_3[2] >> 0x20);

  fVar23 = (float)param_3[3];

  fVar24 = (float)((ulonglong)param_3[3] >> 0x20);

  fVar25 = (float)param_3[4];

  fVar26 = (float)((ulonglong)param_3[4] >> 0x20);

  fVar27 = (float)param_3[5];

  fVar28 = (float)((ulonglong)param_3[5] >> 0x20);

  fVar29 = (float)param_3[6];

  fVar30 = (float)((ulonglong)param_3[6] >> 0x20);

  fVar31 = (float)param_3[7];

  fVar32 = (float)((ulonglong)param_3[7] >> 0x20);

  fVar5 = param_2[4];

  fVar6 = param_2[5];

  fVar7 = param_2[6];

  fVar8 = param_2[7];

  fVar9 = param_2[8];

  fVar10 = param_2[9];

  fVar11 = param_2[10];

  fVar12 = param_2[0xb];

  fVar13 = param_2[0xc];

  fVar14 = param_2[0xd];

  fVar15 = param_2[0xe];

  fVar16 = param_2[0xf];

  *param_1 = CONCAT44(fVar1 * fVar18 + fVar2 * fVar22 + fVar3 * fVar26 + fVar4 * fVar30,

                      fVar1 * fVar17 + fVar2 * fVar21 + fVar3 * fVar25 + fVar4 * fVar29);

  param_1[1] = CONCAT44(fVar1 * fVar20 + fVar2 * fVar24 + fVar3 * fVar28 + fVar4 * fVar32,

                        fVar1 * fVar19 + fVar2 * fVar23 + fVar3 * fVar27 + fVar4 * fVar31);

  param_1[2] = CONCAT44(fVar5 * fVar18 + fVar6 * fVar22 + fVar7 * fVar26 + fVar8 * fVar30,

                        fVar5 * fVar17 + fVar6 * fVar21 + fVar7 * fVar25 + fVar8 * fVar29);

  param_1[3] = CONCAT44(fVar5 * fVar20 + fVar6 * fVar24 + fVar7 * fVar28 + fVar8 * fVar32,

                        fVar5 * fVar19 + fVar6 * fVar23 + fVar7 * fVar27 + fVar8 * fVar31);

  param_1[4] = CONCAT44(fVar9 * fVar18 + fVar10 * fVar22 + fVar11 * fVar26 + fVar12 * fVar30,

                        fVar9 * fVar17 + fVar10 * fVar21 + fVar11 * fVar25 + fVar12 * fVar29);

  param_1[5] = CONCAT44(fVar9 * fVar20 + fVar10 * fVar24 + fVar11 * fVar28 + fVar12 * fVar32,

                        fVar9 * fVar19 + fVar10 * fVar23 + fVar11 * fVar27 + fVar12 * fVar31);

  param_1[6] = CONCAT44(fVar18 * fVar13 + fVar22 * fVar14 + fVar26 * fVar15 + fVar30 * fVar16,

                        fVar17 * fVar13 + fVar21 * fVar14 + fVar25 * fVar15 + fVar29 * fVar16);

  param_1[7] = CONCAT44(fVar20 * fVar13 + fVar24 * fVar14 + fVar28 * fVar15 + fVar32 * fVar16,

                        fVar19 * fVar13 + fVar23 * fVar14 + fVar27 * fVar15 + fVar31 * fVar16);

  return param_1;

}





// --- FUN_00603e8b at 0x00603E8B (size: 147) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



float * FUN_00603e8b(float *param_1,float *param_2)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  undefined1 in_XMM6 [16];

  undefined1 auVar6 [16];

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = fVar1 * fVar1 + fVar2 * fVar2 + fVar3 * fVar3;

  if (_DAT_007f58f0 <= fVar4) {

    auVar6 = rsqrtss(in_XMM6,ZEXT416((uint)fVar4));

    fVar5 = auVar6._0_4_;

    fVar4 = (DAT_007f58d0 - fVar5 * fVar4 * fVar5) * fVar5 * DAT_007f58e0;

    *param_1 = fVar1 * fVar4;

    param_1[1] = fVar2 * fVar4;

    param_1[2] = fVar3 * fVar4;

  }

  else {

    *param_1 = 0.0;

    param_1[1] = 0.0;

    param_1[2] = 0.0;

  }

  return param_1;

}





// --- FUN_00603f1f at 0x00603F1F (size: 160) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



float * FUN_00603f1f(float *param_1,float *param_2)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  undefined1 in_XMM6 [16];

  undefined1 auVar6 [16];

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = fVar1 * fVar1 + fVar2 * fVar2 + fVar3 * fVar3;

  if (_DAT_007f58f0 <= fVar4) {

    auVar6 = rsqrtss(in_XMM6,ZEXT416((uint)fVar4));

    fVar5 = auVar6._0_4_;

    fVar5 = (DAT_007f58d0 - fVar5 * fVar4 * fVar5) * fVar5 * DAT_007f58e0;

    fVar4 = param_2[3];

    *param_1 = fVar1 * fVar5;

    param_1[1] = fVar2 * fVar5;

    param_1[2] = fVar3 * fVar5;

    param_1[3] = fVar5 * fVar4;

  }

  else {

    *param_1 = 0.0;

    param_1[1] = 0.0;

    param_1[2] = 0.0;

    param_1[3] = 0.0;

  }

  return param_1;

}





// --- FUN_0060432e at 0x0060432E (size: 156) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



float * FUN_0060432e(float *param_1,float *param_2)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  undefined1 in_register_00001304 [12];

  float fVar6;

  undefined1 in_XMM5 [16];

  undefined1 auVar7 [16];

  undefined1 auVar8 [16];

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = param_2[3];

  auVar7._4_12_ = in_XMM5._4_12_;

  auVar7._0_4_ = fVar2 * fVar2;

  fVar5 = fVar1 * fVar1 + auVar7._0_4_ + fVar3 * fVar3 + fVar4 * fVar4;

  auVar8._4_12_ = in_register_00001304;

  auVar8._0_4_ = fVar5;

  auVar8 = rsqrtss(auVar7,auVar8);

  fVar6 = auVar8._0_4_;

  fVar6 = (DAT_00828e70 - fVar5 * fVar6 * fVar6) * _DAT_00828e60 * fVar6;

  *param_1 = fVar1 * fVar6;

  param_1[1] = fVar2 * fVar6;

  param_1[2] = fVar3 * fVar6;

  param_1[3] = fVar4 * fVar6;

  return param_1;

}





// --- FUN_006043ca at 0x006043CA (size: 180) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



undefined8 *

FUN_006043ca(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3,undefined8 *param_4,

            undefined8 *param_5,float param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  

  fVar7 = param_6 * param_6;

  fVar8 = param_6 * fVar7;

  fVar3 = param_6 * _DAT_00828d60 + _DAT_00828d70 + fVar7 * _DAT_00828d50 + fVar8 * _DAT_00828d40;

  fVar4 = param_6 * fRam00828d64 + fRam00828d74 + fVar7 * fRam00828d54 + fVar8 * fRam00828d44;

  fVar5 = param_6 * fRam00828d68 + fRam00828d78 + fVar7 * fRam00828d58 + fVar8 * fRam00828d48;

  fVar6 = param_6 * fRam00828d6c + fRam00828d7c + fVar7 * fRam00828d5c + fVar8 * fRam00828d4c;

  fVar7 = *(float *)(param_2 + 1);

  fVar8 = *(float *)(param_3 + 1);

  fVar1 = *(float *)(param_4 + 1);

  fVar2 = *(float *)(param_5 + 1);

  *param_1 = CONCAT44((float)((ulonglong)*param_2 >> 0x20) * fVar3 +

                      (float)((ulonglong)*param_3 >> 0x20) * fVar4 +

                      (float)((ulonglong)*param_4 >> 0x20) * fVar5 +

                      (float)((ulonglong)*param_5 >> 0x20) * fVar6,

                      (float)*param_2 * fVar3 + (float)*param_3 * fVar4 + (float)*param_4 * fVar5 +

                      (float)*param_5 * fVar6);

  *(float *)(param_1 + 1) = fVar7 * fVar3 + fVar8 * fVar4 + fVar1 * fVar5 + fVar2 * fVar6;

  return param_1;

}





// --- FUN_0060447e at 0x0060447E (size: 135) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



undefined8 *

FUN_0060447e(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3,undefined8 *param_4,

            undefined8 *param_5,float param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  

  fVar4 = param_6 * param_6;

  fVar5 = param_6 * fVar4;

  fVar1 = param_6 * _DAT_00828d60 + _DAT_00828d70 + fVar4 * _DAT_00828d50 + fVar5 * _DAT_00828d40;

  fVar2 = param_6 * fRam00828d64 + fRam00828d74 + fVar4 * fRam00828d54 + fVar5 * fRam00828d44;

  fVar3 = param_6 * fRam00828d68 + fRam00828d78 + fVar4 * fRam00828d58 + fVar5 * fRam00828d48;

  fVar4 = param_6 * fRam00828d6c + fRam00828d7c + fVar4 * fRam00828d5c + fVar5 * fRam00828d4c;

  *param_1 = CONCAT44((float)((ulonglong)*param_2 >> 0x20) * fVar1 +

                      (float)((ulonglong)*param_4 >> 0x20) * fVar3 +

                      (float)((ulonglong)*param_3 >> 0x20) * fVar2 +

                      (float)((ulonglong)*param_5 >> 0x20) * fVar4,

                      (float)*param_2 * fVar1 + (float)*param_4 * fVar3 +

                      (float)*param_3 * fVar2 + (float)*param_5 * fVar4);

  return param_1;

}





// --- FUN_00604505 at 0x00604505 (size: 167) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



float * FUN_00604505(float *param_1,float *param_2,float *param_3,float *param_4,float *param_5,

                    float param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  

  fVar15 = param_6 * param_6;

  fVar16 = param_6 * fVar15;

  fVar11 = param_6 * _DAT_00828d60 + _DAT_00828d70 + fVar15 * _DAT_00828d50 + fVar16 * _DAT_00828d40

  ;

  fVar12 = param_6 * fRam00828d64 + fRam00828d74 + fVar15 * fRam00828d54 + fVar16 * fRam00828d44;

  fVar13 = param_6 * fRam00828d68 + fRam00828d78 + fVar15 * fRam00828d58 + fVar16 * fRam00828d48;

  fVar14 = param_6 * fRam00828d6c + fRam00828d7c + fVar15 * fRam00828d5c + fVar16 * fRam00828d4c;

  fVar15 = param_2[1];

  fVar16 = param_2[2];

  fVar1 = param_2[3];

  fVar2 = param_3[1];

  fVar3 = param_3[2];

  fVar4 = param_3[3];

  fVar5 = param_4[1];

  fVar6 = param_4[2];

  fVar7 = param_4[3];

  fVar8 = param_5[1];

  fVar9 = param_5[2];

  fVar10 = param_5[3];

  *param_1 = *param_2 * fVar11 + *param_3 * fVar12 + *param_4 * fVar13 + *param_5 * fVar14;

  param_1[1] = fVar15 * fVar11 + fVar2 * fVar12 + fVar5 * fVar13 + fVar8 * fVar14;

  param_1[2] = fVar16 * fVar11 + fVar3 * fVar12 + fVar6 * fVar13 + fVar9 * fVar14;

  param_1[3] = fVar1 * fVar11 + fVar4 * fVar12 + fVar7 * fVar13 + fVar10 * fVar14;

  return param_1;

}





// --- FUN_006045ac at 0x006045AC (size: 181) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



undefined8 *

FUN_006045ac(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3,undefined8 *param_4,

            undefined8 *param_5,float param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  

  fVar7 = param_6 * param_6;

  fVar8 = param_6 * fVar7;

  fVar3 = param_6 * _DAT_00828d20 + _DAT_00828d30 + fVar7 * _DAT_00828d10 + fVar8 * _DAT_00828d00;

  fVar4 = param_6 * fRam00828d24 + fVar7 * fRam00828d14 + fVar8 * fRam00828d04;

  fVar5 = param_6 * fRam00828d28 + fVar7 * fRam00828d18 + fVar8 * fRam00828d08;

  fVar6 = param_6 * fRam00828d2c + fVar7 * fRam00828d1c + fVar8 * fRam00828d0c;

  fVar7 = *(float *)(param_2 + 1);

  fVar8 = *(float *)(param_3 + 1);

  fVar1 = *(float *)(param_4 + 1);

  fVar2 = *(float *)(param_5 + 1);

  *param_1 = CONCAT44((float)((ulonglong)*param_2 >> 0x20) * fVar3 +

                      (float)((ulonglong)*param_3 >> 0x20) * fVar4 +

                      (float)((ulonglong)*param_4 >> 0x20) * fVar5 +

                      (float)((ulonglong)*param_5 >> 0x20) * fVar6,

                      (float)*param_2 * fVar3 + (float)*param_3 * fVar4 + (float)*param_4 * fVar5 +

                      (float)*param_5 * fVar6);

  *(float *)(param_1 + 1) = fVar7 * fVar3 + fVar8 * fVar4 + fVar1 * fVar5 + fVar2 * fVar6;

  return param_1;

}





// --- FUN_00604661 at 0x00604661 (size: 156) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



float * FUN_00604661(float *param_1,float *param_2,float *param_3,float *param_4,float *param_5,

                    float param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  

  fVar15 = param_6 * param_6;

  fVar16 = param_6 * fVar15;

  fVar11 = param_6 * _DAT_00828d20 + _DAT_00828d30 + fVar15 * _DAT_00828d10 + fVar16 * _DAT_00828d00

  ;

  fVar12 = param_6 * fRam00828d24 + fVar15 * fRam00828d14 + fVar16 * fRam00828d04;

  fVar13 = param_6 * fRam00828d28 + fVar15 * fRam00828d18 + fVar16 * fRam00828d08;

  fVar14 = param_6 * fRam00828d2c + fVar15 * fRam00828d1c + fVar16 * fRam00828d0c;

  fVar15 = param_2[1];

  fVar16 = param_2[2];

  fVar1 = param_2[3];

  fVar2 = param_3[1];

  fVar3 = param_3[2];

  fVar4 = param_3[3];

  fVar5 = param_4[1];

  fVar6 = param_4[2];

  fVar7 = param_4[3];

  fVar8 = param_5[1];

  fVar9 = param_5[2];

  fVar10 = param_5[3];

  *param_1 = *param_2 * fVar11 + *param_3 * fVar12 + *param_4 * fVar13 + *param_5 * fVar14;

  param_1[1] = fVar15 * fVar11 + fVar2 * fVar12 + fVar5 * fVar13 + fVar8 * fVar14;

  param_1[2] = fVar16 * fVar11 + fVar3 * fVar12 + fVar6 * fVar13 + fVar9 * fVar14;

  param_1[3] = fVar1 * fVar11 + fVar4 * fVar12 + fVar7 * fVar13 + fVar10 * fVar14;

  return param_1;

}





// --- FUN_006046fd at 0x006046FD (size: 136) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



undefined8 *

FUN_006046fd(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3,undefined8 *param_4,

            undefined8 *param_5,float param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  

  fVar4 = param_6 * param_6;

  fVar5 = param_6 * fVar4;

  fVar1 = param_6 * _DAT_00828d20 + _DAT_00828d30 + fVar4 * _DAT_00828d10 + fVar5 * _DAT_00828d00;

  fVar2 = param_6 * fRam00828d24 + fVar4 * fRam00828d14 + fVar5 * fRam00828d04;

  fVar3 = param_6 * fRam00828d28 + fVar4 * fRam00828d18 + fVar5 * fRam00828d08;

  fVar4 = param_6 * fRam00828d2c + fVar4 * fRam00828d1c + fVar5 * fRam00828d0c;

  *param_1 = CONCAT44((float)((ulonglong)*param_2 >> 0x20) * fVar1 +

                      (float)((ulonglong)*param_4 >> 0x20) * fVar3 +

                      (float)((ulonglong)*param_3 >> 0x20) * fVar2 +

                      (float)((ulonglong)*param_5 >> 0x20) * fVar4,

                      (float)*param_2 * fVar1 + (float)*param_4 * fVar3 +

                      (float)*param_3 * fVar2 + (float)*param_5 * fVar4);

  return param_1;

}





// --- FUN_00604785 at 0x00604785 (size: 92) ---


undefined8 *

FUN_00604785(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3,undefined8 *param_4,

            float param_5,float param_6)



{

  float fVar1;

  undefined8 uVar2;

  undefined8 uVar3;

  float fVar4;

  float fVar5;

  

  fVar1 = *(float *)(param_2 + 1);

  uVar2 = *param_3;

  fVar4 = (float)*param_2;

  fVar5 = (float)((ulonglong)*param_2 >> 0x20);

  uVar3 = *param_4;

  *(float *)(param_1 + 1) =

       (*(float *)(param_3 + 1) - fVar1) * param_5 + fVar1 +

       (*(float *)(param_4 + 1) - fVar1) * param_6;

  *param_1 = CONCAT44(((float)((ulonglong)uVar2 >> 0x20) - fVar5) * param_5 + fVar5 +

                      ((float)((ulonglong)uVar3 >> 0x20) - fVar5) * param_6,

                      ((float)uVar2 - fVar4) * param_5 + fVar4 + ((float)uVar3 - fVar4) * param_6);

  return param_1;

}





// --- FUN_006047e1 at 0x006047E1 (size: 72) ---


float * FUN_006047e1(float *param_1,float *param_2,float *param_3,float *param_4,float param_5,

                    float param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = param_2[3];

  fVar5 = param_3[1];

  fVar6 = param_3[2];

  fVar7 = param_3[3];

  fVar8 = param_4[1];

  fVar9 = param_4[2];

  fVar10 = param_4[3];

  *param_1 = (*param_3 - fVar1) * param_5 + fVar1 + (*param_4 - fVar1) * param_6;

  param_1[1] = (fVar5 - fVar2) * param_5 + fVar2 + (fVar8 - fVar2) * param_6;

  param_1[2] = (fVar6 - fVar3) * param_5 + fVar3 + (fVar9 - fVar3) * param_6;

  param_1[3] = (fVar7 - fVar4) * param_5 + fVar4 + (fVar10 - fVar4) * param_6;

  return param_1;

}





// --- FUN_00604829 at 0x00604829 (size: 81) ---


undefined8 *

FUN_00604829(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3,undefined8 *param_4,

            float param_5,float param_6)



{

  float fVar1;

  float fVar2;

  

  fVar1 = (float)*param_2;

  fVar2 = (float)((ulonglong)*param_2 >> 0x20);

  *param_1 = CONCAT44(((float)((ulonglong)*param_3 >> 0x20) - fVar2) * param_5 + fVar2 +

                      ((float)((ulonglong)*param_4 >> 0x20) - fVar2) * param_6,

                      ((float)*param_3 - fVar1) * param_5 + fVar1 +

                      ((float)*param_4 - fVar1) * param_6);

  return param_1;

}





// --- FUN_0060487a at 0x0060487A (size: 176) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



undefined8 *

FUN_0060487a(undefined8 *param_1,float *param_2,undefined8 *param_3,undefined8 *param_4)



{

  float fVar1;

  float fVar2;

  undefined1 auVar3 [16];

  float fVar6;

  float fVar7;

  undefined1 auVar4 [16];

  undefined1 auVar5 [16];

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float in_XMM6_Dc;

  float in_XMM6_Dd;

  

  fVar12 = param_2[3];

  fVar1 = *(float *)(param_3 + 1);

  fVar2 = *(float *)(param_4 + 1);

  fVar8 = (float)*param_3;

  fVar9 = (float)((ulonglong)*param_3 >> 0x20);

  fVar14 = fVar9 * param_2[1];

  fVar10 = (float)*param_4;

  fVar6 = *param_2 * fVar10;

  fVar11 = (float)((ulonglong)*param_4 >> 0x20);

  fVar7 = param_2[1] * fVar11;

  fVar13 = fVar12 * 0.0 + fVar14;

  auVar5._0_4_ = param_2[2] * fVar2 + fVar6;

  auVar5._4_4_ = fVar12 * 0.0 + fVar7;

  auVar5._8_4_ = fVar6 + in_XMM6_Dc;

  auVar5._12_4_ = fVar7 + in_XMM6_Dd;

  fVar6 = fVar1 * param_2[2] + fVar8 * *param_2 + fVar14;

  auVar4._4_12_ = auVar5._4_12_;

  auVar4._0_4_ = auVar5._0_4_ + fVar7;

  fVar7 = fVar6 - auVar4._0_4_;

  if (fVar7 == _DAT_008f427c) {

    param_1 = (undefined8 *)0x0;

  }

  else {

    auVar3._4_4_ = fVar14;

    auVar3._0_4_ = fVar7;

    auVar3._8_4_ = fVar13;

    auVar3._12_4_ = fVar13;

    auVar5 = rcpss(auVar4,auVar3);

    fVar13 = auVar5._0_4_;

    fVar12 = (fVar6 + fVar12) * ((fVar13 + fVar13) - fVar7 * fVar13 * fVar13);

    *param_1 = CONCAT44(fVar9 + fVar12 * (fVar11 - fVar9),fVar8 + fVar12 * (fVar10 - fVar8));

    *(float *)(param_1 + 1) = fVar1 + fVar12 * (fVar2 - fVar1);

  }

  return param_1;

}





// --- FUN_0060515e at 0x0060515E (size: 204) ---


void FUN_0060515e(undefined8 *param_1,undefined8 *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  

  if (((uint)param_3 & 0xf) == 0) {

    fVar3 = *(float *)(param_2 + 1);

    fVar1 = fVar3 * param_3[8];

    fVar2 = fVar3 * param_3[9];

    fVar3 = fVar3 * param_3[10];

    fVar6 = (float)((ulonglong)*param_2 >> 0x20);

    fVar4 = fVar6 * param_3[4];

    fVar5 = fVar6 * param_3[5];

    fVar6 = fVar6 * param_3[6];

    fVar9 = (float)*param_2;

    fVar7 = fVar9 * *param_3;

    fVar8 = fVar9 * param_3[1];

    fVar9 = fVar9 * param_3[2];

  }

  else {

    fVar3 = *(float *)(param_2 + 1);

    fVar1 = (float)*(undefined8 *)(param_3 + 8) * fVar3;

    fVar2 = (float)((ulonglong)*(undefined8 *)(param_3 + 8) >> 0x20) * fVar3;

    fVar3 = (float)*(undefined8 *)(param_3 + 10) * fVar3;

    fVar6 = (float)((ulonglong)*param_2 >> 0x20);

    fVar4 = (float)*(undefined8 *)(param_3 + 4) * fVar6;

    fVar5 = (float)((ulonglong)*(undefined8 *)(param_3 + 4) >> 0x20) * fVar6;

    fVar6 = (float)*(undefined8 *)(param_3 + 6) * fVar6;

    fVar9 = (float)*param_2;

    fVar7 = (float)*(undefined8 *)param_3 * fVar9;

    fVar8 = (float)((ulonglong)*(undefined8 *)param_3 >> 0x20) * fVar9;

    fVar9 = (float)*(undefined8 *)(param_3 + 2) * fVar9;

  }

  *param_1 = CONCAT44(fVar8 + fVar5 + fVar2,fVar7 + fVar4 + fVar1);

  *(float *)(param_1 + 1) = fVar9 + fVar6 + fVar3;

  return;

}





// --- FUN_0060522a at 0x0060522A (size: 199) ---


void FUN_0060522a(float *param_1,undefined8 *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  

  fVar1 = (float)*param_2;

  fVar3 = (float)((ulonglong)*param_2 >> 0x20);

  fVar7 = *(float *)(param_2 + 1);

  if (((uint)param_3 & 0xf) == 0) {

    fVar11 = param_3[8] * fVar7 + param_3[0xc];

    fVar12 = param_3[9] * fVar7 + param_3[0xd];

    fVar13 = param_3[10] * fVar7 + param_3[0xe];

    fVar14 = param_3[0xb] * fVar7 + param_3[0xf];

    fVar7 = param_3[4];

    fVar8 = param_3[5];

    fVar9 = param_3[6];

    fVar10 = param_3[7];

    fVar2 = *param_3;

    fVar4 = param_3[1];

    fVar5 = param_3[2];

    fVar6 = param_3[3];

  }

  else {

    fVar11 = (float)*(undefined8 *)(param_3 + 8) * fVar7 + (float)*(undefined8 *)(param_3 + 0xc);

    fVar12 = (float)((ulonglong)*(undefined8 *)(param_3 + 8) >> 0x20) * fVar7 +

             (float)((ulonglong)*(undefined8 *)(param_3 + 0xc) >> 0x20);

    fVar13 = (float)*(undefined8 *)(param_3 + 10) * fVar7 + (float)*(undefined8 *)(param_3 + 0xe);

    fVar14 = (float)((ulonglong)*(undefined8 *)(param_3 + 10) >> 0x20) * fVar7 +

             (float)((ulonglong)*(undefined8 *)(param_3 + 0xe) >> 0x20);

    fVar7 = (float)*(undefined8 *)(param_3 + 4);

    fVar8 = (float)((ulonglong)*(undefined8 *)(param_3 + 4) >> 0x20);

    fVar9 = (float)*(undefined8 *)(param_3 + 6);

    fVar10 = (float)((ulonglong)*(undefined8 *)(param_3 + 6) >> 0x20);

    fVar2 = (float)*(undefined8 *)param_3;

    fVar4 = (float)((ulonglong)*(undefined8 *)param_3 >> 0x20);

    fVar5 = (float)*(undefined8 *)(param_3 + 2);

    fVar6 = (float)((ulonglong)*(undefined8 *)(param_3 + 2) >> 0x20);

  }

  *param_1 = fVar2 * fVar1 + fVar7 * fVar3 + fVar11;

  param_1[1] = fVar4 * fVar1 + fVar8 * fVar3 + fVar12;

  param_1[2] = fVar5 * fVar1 + fVar9 * fVar3 + fVar13;

  param_1[3] = fVar6 * fVar1 + fVar10 * fVar3 + fVar14;

  return;

}





// --- FUN_006052f1 at 0x006052F1 (size: 244) ---


void FUN_006052f1(undefined8 *param_1,undefined8 *param_2,float *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  undefined1 auVar7 [16];

  undefined1 auVar8 [16];

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  

  fVar1 = (float)*param_2;

  fVar3 = (float)((ulonglong)*param_2 >> 0x20);

  fVar9 = *(float *)(param_2 + 1);

  if (((uint)param_3 & 0xf) == 0) {

    fVar13 = param_3[8] * fVar9 + param_3[0xc];

    fVar14 = param_3[9] * fVar9 + param_3[0xd];

    fVar15 = param_3[10] * fVar9 + param_3[0xe];

    fVar16 = param_3[0xb] * fVar9 + param_3[0xf];

    fVar10 = param_3[4];

    fVar11 = param_3[5];

    fVar9 = param_3[6];

    fVar12 = param_3[7];

    fVar2 = *param_3;

    fVar4 = param_3[1];

    fVar5 = param_3[2];

    fVar6 = param_3[3];

  }

  else {

    fVar13 = (float)*(undefined8 *)(param_3 + 8) * fVar9 + (float)*(undefined8 *)(param_3 + 0xc);

    fVar14 = (float)((ulonglong)*(undefined8 *)(param_3 + 8) >> 0x20) * fVar9 +

             (float)((ulonglong)*(undefined8 *)(param_3 + 0xc) >> 0x20);

    fVar15 = (float)*(undefined8 *)(param_3 + 10) * fVar9 + (float)*(undefined8 *)(param_3 + 0xe);

    fVar16 = (float)((ulonglong)*(undefined8 *)(param_3 + 10) >> 0x20) * fVar9 +

             (float)((ulonglong)*(undefined8 *)(param_3 + 0xe) >> 0x20);

    fVar10 = (float)*(undefined8 *)(param_3 + 4);

    fVar11 = (float)((ulonglong)*(undefined8 *)(param_3 + 4) >> 0x20);

    fVar9 = (float)*(undefined8 *)(param_3 + 6);

    fVar12 = (float)((ulonglong)*(undefined8 *)(param_3 + 6) >> 0x20);

    fVar2 = (float)*(undefined8 *)param_3;

    fVar4 = (float)((ulonglong)*(undefined8 *)param_3 >> 0x20);

    fVar5 = (float)*(undefined8 *)(param_3 + 2);

    fVar6 = (float)((ulonglong)*(undefined8 *)(param_3 + 2) >> 0x20);

  }

  auVar7._4_4_ = fVar1;

  auVar7._0_4_ = fVar1;

  auVar7._8_4_ = fVar1;

  auVar7._12_4_ = fVar1;

  fVar13 = fVar2 * fVar1 + fVar10 * fVar3 + fVar13;

  fVar14 = fVar4 * fVar1 + fVar11 * fVar3 + fVar14;

  fVar15 = fVar5 * fVar1 + fVar9 * fVar3 + fVar15;

  fVar16 = fVar6 * fVar1 + fVar12 * fVar3 + fVar16;

  auVar8._4_4_ = fVar14;

  auVar8._0_4_ = fVar13;

  auVar8._8_4_ = fVar15;

  auVar8._12_4_ = fVar16;

  auVar8 = rcpps(auVar7,auVar8);

  fVar9 = auVar8._12_4_;

  fVar9 = (fVar9 + fVar9) - fVar9 * fVar16 * fVar9;

  *param_1 = CONCAT44(fVar14 * fVar9,fVar13 * fVar9);

  *(float *)(param_1 + 1) = fVar15 * fVar9;

  return;

}





// --- FUN_006053e5 at 0x006053E5 (size: 358) ---


void __thiscall FUN_006053e5(undefined4 *param_1,undefined4 *param_2)



{

  undefined4 uVar1;

  

  uVar1 = *param_2;

  *param_1 = uVar1;

  param_1[1] = uVar1;

  param_1[2] = uVar1;

  param_1[3] = uVar1;

  uVar1 = param_2[4];

  param_1[0x10] = uVar1;

  param_1[0x11] = uVar1;

  param_1[0x12] = uVar1;

  param_1[0x13] = uVar1;

  uVar1 = param_2[8];

  param_1[0x20] = uVar1;

  param_1[0x21] = uVar1;

  param_1[0x22] = uVar1;

  param_1[0x23] = uVar1;

  uVar1 = param_2[0xc];

  param_1[0x30] = uVar1;

  param_1[0x31] = uVar1;

  param_1[0x32] = uVar1;

  param_1[0x33] = uVar1;

  uVar1 = param_2[1];

  param_1[4] = uVar1;

  param_1[5] = uVar1;

  param_1[6] = uVar1;

  param_1[7] = uVar1;

  uVar1 = param_2[5];

  param_1[0x14] = uVar1;

  param_1[0x15] = uVar1;

  param_1[0x16] = uVar1;

  param_1[0x17] = uVar1;

  uVar1 = param_2[9];

  param_1[0x24] = uVar1;

  param_1[0x25] = uVar1;

  param_1[0x26] = uVar1;

  param_1[0x27] = uVar1;

  uVar1 = param_2[0xd];

  param_1[0x34] = uVar1;

  param_1[0x35] = uVar1;

  param_1[0x36] = uVar1;

  param_1[0x37] = uVar1;

  uVar1 = param_2[2];

  param_1[8] = uVar1;

  param_1[9] = uVar1;

  param_1[10] = uVar1;

  param_1[0xb] = uVar1;

  uVar1 = param_2[6];

  param_1[0x18] = uVar1;

  param_1[0x19] = uVar1;

  param_1[0x1a] = uVar1;

  param_1[0x1b] = uVar1;

  uVar1 = param_2[10];

  param_1[0x28] = uVar1;

  param_1[0x29] = uVar1;

  param_1[0x2a] = uVar1;

  param_1[0x2b] = uVar1;

  uVar1 = param_2[0xe];

  param_1[0x38] = uVar1;

  param_1[0x39] = uVar1;

  param_1[0x3a] = uVar1;

  param_1[0x3b] = uVar1;

  uVar1 = param_2[3];

  param_1[0xc] = uVar1;

  param_1[0xd] = uVar1;

  param_1[0xe] = uVar1;

  param_1[0xf] = uVar1;

  uVar1 = param_2[7];

  param_1[0x1c] = uVar1;

  param_1[0x1d] = uVar1;

  param_1[0x1e] = uVar1;

  param_1[0x1f] = uVar1;

  uVar1 = param_2[0xb];

  param_1[0x2c] = uVar1;

  param_1[0x2d] = uVar1;

  param_1[0x2e] = uVar1;

  param_1[0x2f] = uVar1;

  uVar1 = param_2[0xf];

  param_1[0x3c] = uVar1;

  param_1[0x3d] = uVar1;

  param_1[0x3e] = uVar1;

  param_1[0x3f] = uVar1;

  return;

}





// --- FUN_006060c3 at 0x006060C3 (size: 298) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_006060c3(void)



{

  return;

}





// --- FUN_006061ed at 0x006061ED (size: 214) ---


/* WARNING: Removing unreachable block (ram,0x006062a4) */



int FUN_006061ed(int param_1,int param_2,uint param_3)



{

  ushort uVar1;

  int iVar2;

  undefined8 *extraout_ECX;

  uint uVar3;

  int extraout_EDX;

  uint uVar4;

  uint uVar5;

  undefined8 in_XMM0_Qa;

  undefined8 in_XMM0_Qb;

  undefined8 in_XMM3_Qa;

  undefined8 in_XMM3_Qb;

  

  iVar2 = param_1;

  if (7 < param_3) {

    uVar5 = param_3 & 0xfffffff8;

    do {

      FUN_006060c3();

      *extraout_ECX = in_XMM0_Qa;

      extraout_ECX[1] = in_XMM0_Qb;

      extraout_ECX[2] = in_XMM3_Qa;

      extraout_ECX[3] = in_XMM3_Qb;

    } while (extraout_EDX != 8);

    param_3 = param_3 - uVar5;

    param_2 = param_2 + uVar5 * 2;

    param_1 = param_1 + uVar5 * 4;

  }

  uVar5 = 0;

  if (param_3 != 0) {

    do {

      uVar1 = *(ushort *)(param_2 + uVar5 * 2);

      uVar3 = (uint)uVar1;

      uVar4 = uVar3 & 0x7c00;

      if (uVar4 < 0x401) {

        uVar4 = 0x400;

      }

      *(float *)(param_1 + uVar5 * 4) =

           (float)(-(uint)((uVar1 & 0x7c00) != 0) & 0x400 | uVar3 & 0x3ff) *

           (float)((uVar4 + 0x19800) * 0x2000 | (uVar3 & 0xffff8000) << 0x10);

      uVar5 = uVar5 + 1;

    } while (uVar5 < param_3);

  }

  return iVar2;

}





// --- FUN_00606e3b at 0x00606E3B (size: 243) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_00606e3b(void)



{

  ushort in_XMM0_Wa;

  ushort in_XMM0_Wb;

  ushort in_XMM0_Wc;

  ushort in_XMM0_Wd;

  ushort in_XMM0_We;

  ushort in_XMM0_Wf;

  ushort in_XMM0_Wg;

  ushort in_XMM0_Wh;

  undefined1 auVar1 [16];

  

  auVar1._0_2_ = -(ushort)((_DAT_00828f60 & in_XMM0_Wa) == 0);

  auVar1._2_2_ = -(ushort)((uRam00828f62 & in_XMM0_Wb) == 0);

  auVar1._4_2_ = -(ushort)((uRam00828f64 & in_XMM0_Wc) == 0);

  auVar1._6_2_ = -(ushort)((uRam00828f66 & in_XMM0_Wd) == 0);

  auVar1._8_2_ = -(ushort)((uRam00828f68 & in_XMM0_We) == 0);

  auVar1._10_2_ = -(ushort)((uRam00828f6a & in_XMM0_Wf) == 0);

  auVar1._12_2_ = -(ushort)((uRam00828f6c & in_XMM0_Wg) == 0);

  auVar1._14_2_ = -(ushort)((uRam00828f6e & in_XMM0_Wh) == 0);

  if ((((((((((((((((SUB161(auVar1 >> 7,0) & 1) != 0 || (SUB161(auVar1 >> 0xf,0) & 1) != 0) ||

                  (SUB161(auVar1 >> 0x17,0) & 1) != 0) || (SUB161(auVar1 >> 0x1f,0) & 1) != 0) ||

                (SUB161(auVar1 >> 0x27,0) & 1) != 0) || (SUB161(auVar1 >> 0x2f,0) & 1) != 0) ||

              (SUB161(auVar1 >> 0x37,0) & 1) != 0) || (SUB161(auVar1 >> 0x3f,0) & 1) != 0) ||

            (SUB161(auVar1 >> 0x47,0) & 1) != 0) || (SUB161(auVar1 >> 0x4f,0) & 1) != 0) ||

          (SUB161(auVar1 >> 0x57,0) & 1) != 0) || (SUB161(auVar1 >> 0x5f,0) & 1) != 0) ||

        (SUB161(auVar1 >> 0x67,0) & 1) != 0) || (SUB161(auVar1 >> 0x6f,0) & 1) != 0) ||

      (auVar1._14_2_ >> 7 & 1) != 0) || (auVar1._14_2_ & 0x8000) != 0) {

    return;

  }

  return;

}





// --- FUN_00606f2e at 0x00606F2E (size: 212) ---


/* WARNING: Removing unreachable block (ram,0x00606fe3) */



int FUN_00606f2e(int param_1,undefined8 *param_2,uint param_3)



{

  ushort uVar1;

  int iVar2;

  undefined8 *puVar3;

  undefined8 *extraout_ECX;

  uint uVar4;

  uint uVar5;

  uint uVar6;

  undefined8 uVar7;

  undefined8 uVar8;

  undefined8 in_XMM3_Qa;

  undefined8 in_XMM3_Qb;

  undefined8 uVar9;

  

  iVar2 = param_1;

  if (7 < param_3) {

    uVar6 = param_3 & 0xfffffff8;

    puVar3 = param_2;

    do {

      uVar7 = *puVar3;

      uVar8 = puVar3[1];

      uVar9 = FUN_00606e3b();

      puVar3 = (undefined8 *)uVar9;

      *extraout_ECX = uVar7;

      extraout_ECX[1] = uVar8;

      extraout_ECX[2] = in_XMM3_Qa;

      extraout_ECX[3] = in_XMM3_Qb;

    } while ((int)((ulonglong)uVar9 >> 0x20) != 8);

    param_3 = param_3 - uVar6;

    param_2 = (undefined8 *)((int)param_2 + uVar6 * 2);

    param_1 = param_1 + uVar6 * 4;

  }

  uVar6 = 0;

  if (param_3 != 0) {

    do {

      uVar1 = *(ushort *)((int)param_2 + uVar6 * 2);

      uVar4 = (uint)uVar1;

      uVar5 = uVar4 & 0x7c00;

      if (uVar5 < 0x401) {

        uVar5 = 0x400;

      }

      *(float *)(param_1 + uVar6 * 4) =

           (float)(-(uint)((uVar1 & 0x7c00) != 0) & 0x400 | uVar4 & 0x3ff) *

           (float)((uVar5 + 0x19800) * 0x2000 | (uVar4 & 0xffff8000) << 0x10);

      uVar6 = uVar6 + 1;

    } while (uVar6 < param_3);

  }

  return iVar2;

}





// --- FUN_00607002 at 0x00607002 (size: 147) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



float * FUN_00607002(float *param_1,float *param_2)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  undefined1 in_XMM6 [16];

  undefined1 auVar6 [16];

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = fVar1 * fVar1 + fVar2 * fVar2 + fVar3 * fVar3;

  if (_DAT_007f5920 <= fVar4) {

    auVar6 = rsqrtss(in_XMM6,ZEXT416((uint)fVar4));

    fVar5 = auVar6._0_4_;

    fVar4 = (DAT_007f5900 - fVar5 * fVar4 * fVar5) * fVar5 * DAT_007f5910;

    *param_1 = fVar1 * fVar4;

    param_1[1] = fVar2 * fVar4;

    param_1[2] = fVar3 * fVar4;

  }

  else {

    *param_1 = 0.0;

    param_1[1] = 0.0;

    param_1[2] = 0.0;

  }

  return param_1;

}





// --- FUN_00607096 at 0x00607096 (size: 160) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



float * FUN_00607096(float *param_1,float *param_2)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  undefined1 in_XMM6 [16];

  undefined1 auVar6 [16];

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = fVar1 * fVar1 + fVar2 * fVar2 + fVar3 * fVar3;

  if (_DAT_007f5920 <= fVar4) {

    auVar6 = rsqrtss(in_XMM6,ZEXT416((uint)fVar4));

    fVar5 = auVar6._0_4_;

    fVar5 = (DAT_007f5900 - fVar5 * fVar4 * fVar5) * fVar5 * DAT_007f5910;

    fVar4 = param_2[3];

    *param_1 = fVar1 * fVar5;

    param_1[1] = fVar2 * fVar5;

    param_1[2] = fVar3 * fVar5;

    param_1[3] = fVar5 * fVar4;

  }

  else {

    *param_1 = 0.0;

    param_1[1] = 0.0;

    param_1[2] = 0.0;

    param_1[3] = 0.0;

  }

  return param_1;

}





// --- FUN_00607138 at 0x00607138 (size: 328) ---


undefined8 * FUN_00607138(undefined8 *param_1,float *param_2,undefined8 *param_3)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  float fVar17;

  float fVar18;

  float fVar19;

  float fVar20;

  float fVar21;

  float fVar22;

  float fVar23;

  float fVar24;

  float fVar25;

  float fVar26;

  float fVar27;

  float fVar28;

  float fVar29;

  float fVar30;

  float fVar31;

  float fVar32;

  

  fVar1 = *param_2;

  fVar2 = param_2[1];

  fVar3 = param_2[2];

  fVar4 = param_2[3];

  fVar17 = (float)*param_3;

  fVar18 = (float)((ulonglong)*param_3 >> 0x20);

  fVar19 = (float)param_3[1];

  fVar20 = (float)((ulonglong)param_3[1] >> 0x20);

  fVar21 = (float)param_3[2];

  fVar22 = (float)((ulonglong)param_3[2] >> 0x20);

  fVar23 = (float)param_3[3];

  fVar24 = (float)((ulonglong)param_3[3] >> 0x20);

  fVar25 = (float)param_3[4];

  fVar26 = (float)((ulonglong)param_3[4] >> 0x20);

  fVar27 = (float)param_3[5];

  fVar28 = (float)((ulonglong)param_3[5] >> 0x20);

  fVar29 = (float)param_3[6];

  fVar30 = (float)((ulonglong)param_3[6] >> 0x20);

  fVar31 = (float)param_3[7];

  fVar32 = (float)((ulonglong)param_3[7] >> 0x20);

  fVar5 = param_2[4];

  fVar6 = param_2[5];

  fVar7 = param_2[6];

  fVar8 = param_2[7];

  fVar9 = param_2[8];

  fVar10 = param_2[9];

  fVar11 = param_2[10];

  fVar12 = param_2[0xb];

  fVar13 = param_2[0xc];

  fVar14 = param_2[0xd];

  fVar15 = param_2[0xe];

  fVar16 = param_2[0xf];

  *param_1 = CONCAT44(fVar5 * fVar17 + fVar6 * fVar21 + fVar7 * fVar25 + fVar8 * fVar29,

                      fVar1 * fVar17 + fVar2 * fVar21 + fVar3 * fVar25 + fVar4 * fVar29);

  param_1[1] = CONCAT44(fVar17 * fVar13 + fVar21 * fVar14 + fVar25 * fVar15 + fVar29 * fVar16,

                        fVar9 * fVar17 + fVar10 * fVar21 + fVar11 * fVar25 + fVar12 * fVar29);

  param_1[2] = CONCAT44(fVar5 * fVar18 + fVar6 * fVar22 + fVar7 * fVar26 + fVar8 * fVar30,

                        fVar1 * fVar18 + fVar2 * fVar22 + fVar3 * fVar26 + fVar4 * fVar30);

  param_1[3] = CONCAT44(fVar18 * fVar13 + fVar22 * fVar14 + fVar26 * fVar15 + fVar30 * fVar16,

                        fVar9 * fVar18 + fVar10 * fVar22 + fVar11 * fVar26 + fVar12 * fVar30);

  param_1[4] = CONCAT44(fVar5 * fVar19 + fVar6 * fVar23 + fVar7 * fVar27 + fVar8 * fVar31,

                        fVar1 * fVar19 + fVar2 * fVar23 + fVar3 * fVar27 + fVar4 * fVar31);

  param_1[5] = CONCAT44(fVar19 * fVar13 + fVar23 * fVar14 + fVar27 * fVar15 + fVar31 * fVar16,

                        fVar9 * fVar19 + fVar10 * fVar23 + fVar11 * fVar27 + fVar12 * fVar31);

  param_1[6] = CONCAT44(fVar5 * fVar20 + fVar6 * fVar24 + fVar7 * fVar28 + fVar8 * fVar32,

                        fVar1 * fVar20 + fVar2 * fVar24 + fVar3 * fVar28 + fVar4 * fVar32);

  param_1[7] = CONCAT44(fVar20 * fVar13 + fVar24 * fVar14 + fVar28 * fVar15 + fVar32 * fVar16,

                        fVar9 * fVar20 + fVar10 * fVar24 + fVar11 * fVar28 + fVar12 * fVar32);

  return param_1;

}





// --- FUN_00607794 at 0x00607794 (size: 300) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_00607794(float *param_1,float *param_2)



{

  float *pfVar1;

  int iVar2;

  float fVar3;

  float *pfVar4;

  int iVar5;

  int iVar6;

  float local_18 [4];

  int local_8;

  

  pfVar4 = param_2;

  fVar3 = param_2[5] + *param_2 + param_2[10];

  if (fVar3 <= DAT_00796344) {

    local_18[1] = param_2[5];

    pfVar1 = param_2 + 10;

    local_18[0] = *param_2;

    local_18[2] = *pfVar1;

    param_2 = (float *)(uint)(*param_2 < param_2[5]);

    if (local_18[(int)param_2] < *pfVar1) {

      param_2 = (float *)0x2;

    }

    iVar5 = (int)param_2 * 4;

    iVar2 = *(int *)(&DAT_007f5924 + iVar5);

    iVar6 = iVar2 * 4;

    local_8 = *(int *)(&DAT_007f5924 + iVar6);

    fVar3 = SQRT(((local_18[(int)param_2] - local_18[iVar2]) - local_18[local_8]) + _DAT_007938b0) *

            _DAT_007938b8;

    param_1[(int)param_2] = fVar3;

    fVar3 = _DAT_007c97cc / fVar3;

    param_1[iVar2] = (pfVar4[(int)param_2 + iVar6] + pfVar4[iVar2 + iVar5]) * fVar3;

    param_1[local_8] = (pfVar4[(int)param_2 + local_8 * 4] + pfVar4[iVar5 + local_8]) * fVar3;

    param_1[3] = (pfVar4[iVar6 + local_8] - pfVar4[local_8 * 4 + iVar2]) * fVar3;

  }

  else {

    fVar3 = SQRT(fVar3 + _DAT_007938b0) * _DAT_007938b8;

    param_1[3] = fVar3;

    fVar3 = _DAT_007c97cc / fVar3;

    *param_1 = (param_2[6] - param_2[9]) * fVar3;

    param_1[1] = (param_2[8] - param_2[2]) * fVar3;

    param_1[2] = (param_2[1] - param_2[4]) * fVar3;

  }

  return;

}





// --- FUN_00608000 at 0x00608000 (size: 149) ---


float * FUN_00608000(float *param_1,int param_2,float *param_3,int param_4,float *param_5,

                    int param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  bool bVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  float fVar17;

  float fVar18;

  float fVar19;

  float fVar20;

  float fVar21;

  float *pfVar22;

  int iVar23;

  

  if (0 < param_6) {

    fVar6 = *param_5;

    fVar7 = param_5[1];

    fVar8 = param_5[2];

    fVar9 = param_5[3];

    fVar10 = param_5[4];

    fVar11 = param_5[5];

    fVar12 = param_5[6];

    fVar13 = param_5[7];

    fVar14 = param_5[8];

    fVar15 = param_5[9];

    fVar16 = param_5[10];

    fVar17 = param_5[0xb];

    fVar18 = param_5[0xc];

    fVar19 = param_5[0xd];

    fVar20 = param_5[0xe];

    fVar21 = param_5[0xf];

    pfVar22 = param_1;

    do {

      fVar1 = *param_3;

      fVar2 = param_3[1];

      fVar3 = param_3[2];

      fVar4 = param_3[3];

      param_3 = (float *)(param_4 + (int)param_3);

      *pfVar22 = fVar1 * fVar6 + fVar2 * fVar10 + fVar3 * fVar14 + fVar4 * fVar18;

      pfVar22[1] = fVar1 * fVar7 + fVar2 * fVar11 + fVar3 * fVar15 + fVar4 * fVar19;

      pfVar22[2] = fVar1 * fVar8 + fVar2 * fVar12 + fVar3 * fVar16 + fVar4 * fVar20;

      pfVar22[3] = fVar1 * fVar9 + fVar2 * fVar13 + fVar3 * fVar17 + fVar4 * fVar21;

      pfVar22 = (float *)(param_2 + (int)pfVar22);

      iVar23 = param_6 + -1;

      bVar5 = 0 < param_6;

      param_6 = iVar23;

    } while (iVar23 != 0 && bVar5);

  }

  return param_1;

}





// --- FUN_00609000 at 0x00609000 (size: 149) ---


float * FUN_00609000(float *param_1,int param_2,float *param_3,int param_4,float *param_5,

                    int param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  float fVar4;

  bool bVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  float fVar17;

  float fVar18;

  float fVar19;

  float fVar20;

  float fVar21;

  float *pfVar22;

  int iVar23;

  

  if (0 < param_6) {

    fVar6 = *param_5;

    fVar7 = param_5[1];

    fVar8 = param_5[2];

    fVar9 = param_5[3];

    fVar10 = param_5[4];

    fVar11 = param_5[5];

    fVar12 = param_5[6];

    fVar13 = param_5[7];

    fVar14 = param_5[8];

    fVar15 = param_5[9];

    fVar16 = param_5[10];

    fVar17 = param_5[0xb];

    fVar18 = param_5[0xc];

    fVar19 = param_5[0xd];

    fVar20 = param_5[0xe];

    fVar21 = param_5[0xf];

    pfVar22 = param_1;

    do {

      fVar1 = *param_3;

      fVar2 = param_3[1];

      fVar3 = param_3[2];

      fVar4 = param_3[3];

      param_3 = (float *)(param_4 + (int)param_3);

      *pfVar22 = fVar1 * fVar6 + fVar2 * fVar10 + fVar3 * fVar14 + fVar4 * fVar18;

      pfVar22[1] = fVar1 * fVar7 + fVar2 * fVar11 + fVar3 * fVar15 + fVar4 * fVar19;

      pfVar22[2] = fVar1 * fVar8 + fVar2 * fVar12 + fVar3 * fVar16 + fVar4 * fVar20;

      pfVar22[3] = fVar1 * fVar9 + fVar2 * fVar13 + fVar3 * fVar17 + fVar4 * fVar21;

      pfVar22 = (float *)(param_2 + (int)pfVar22);

      iVar23 = param_6 + -1;

      bVar5 = 0 < param_6;

      param_6 = iVar23;

    } while (iVar23 != 0 && bVar5);

  }

  return param_1;

}





// --- FUN_0060b000 at 0x0060B000 (size: 137) ---


float * FUN_0060b000(float *param_1,int param_2,float *param_3,int param_4,float *param_5,

                    int param_6)



{

  float fVar1;

  float fVar2;

  float fVar3;

  bool bVar4;

  float fVar5;

  float fVar6;

  float fVar7;

  float fVar8;

  float fVar9;

  float fVar10;

  float fVar11;

  float fVar12;

  float fVar13;

  float fVar14;

  float fVar15;

  float fVar16;

  float fVar17;

  float fVar18;

  float fVar19;

  float fVar20;

  float *pfVar21;

  int iVar22;

  

  if (0 < param_6) {

    fVar5 = *param_5;

    fVar6 = param_5[1];

    fVar7 = param_5[2];

    fVar8 = param_5[3];

    fVar9 = param_5[4];

    fVar10 = param_5[5];

    fVar11 = param_5[6];

    fVar12 = param_5[7];

    fVar13 = param_5[8];

    fVar14 = param_5[9];

    fVar15 = param_5[10];

    fVar16 = param_5[0xb];

    fVar17 = param_5[0xc];

    fVar18 = param_5[0xd];

    fVar19 = param_5[0xe];

    fVar20 = param_5[0xf];

    pfVar21 = param_1;

    do {

      fVar1 = *param_3;

      fVar2 = param_3[1];

      fVar3 = param_3[2];

      param_3 = (float *)(param_4 + (int)param_3);

      *pfVar21 = fVar1 * fVar5 + fVar2 * fVar9 + fVar3 * fVar13 + fVar17;

      pfVar21[1] = fVar1 * fVar6 + fVar2 * fVar10 + fVar3 * fVar14 + fVar18;

      pfVar21[2] = fVar1 * fVar7 + fVar2 * fVar11 + fVar3 * fVar15 + fVar19;

      pfVar21[3] = fVar1 * fVar8 + fVar2 * fVar12 + fVar3 * fVar16 + fVar20;

      pfVar21 = (float *)(param_2 + (int)pfVar21);

      iVar22 = param_6 + -1;

      bVar4 = 0 < param_6;

      param_6 = iVar22;

    } while (iVar22 != 0 && bVar4);

  }

  return param_1;

}





// --- FUN_0060b732 at 0x0060B732 (size: 68) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060b732(undefined8 *param_1,undefined8 *param_2,undefined4 *param_3)



{

  undefined8 uVar1;

  

  uVar1 = param_1[1];

  if (param_2 != (undefined8 *)0x0) {

    *param_2 = *param_1;

    *(int *)(param_2 + 1) = (int)uVar1;

  }

  if (param_3 != (undefined4 *)0x0) {

    uVar1 = FUN_006151c0();

    uVar1 = PackedFloatingMUL(uVar1,_DAT_007f2fc0);

    *param_3 = (int)uVar1;

  }

  FastExitMediaState();

  return;

}





// --- FUN_0060bc6c at 0x0060BC6C (size: 108) ---


void FUN_0060bc6c(undefined8 *param_1,undefined4 param_2,uint param_3)



{

  undefined8 uVar1;

  undefined8 uVar2;

  undefined8 uVar3;

  undefined4 uVar4;

  undefined8 local_18;

  uint local_10;

  

  FastExitMediaState();

  FUN_00610a40(&local_18,param_2);

  PackedFloatingMUL((ulonglong)param_3,DAT_007f3048);

  uVar1 = FUN_006157a0();

  uVar4 = (undefined4)((ulonglong)uVar1 >> 0x20);

  uVar3 = CONCAT44(uVar4,uVar4);

  uVar2 = PackedFloatingMUL(local_18,uVar3);

  uVar3 = PackedFloatingMUL((ulonglong)local_10,uVar3);

  *param_1 = uVar2;

  param_1[1] = CONCAT44((int)uVar1,(int)uVar3);

  FastExitMediaState();

  return;

}





// --- FUN_0060bcd8 at 0x0060BCD8 (size: 311) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060bcd8(undefined8 *param_1,undefined8 *param_2,undefined8 *param_3,uint param_4)



{

  uint uVar1;

  uint uVar2;

  undefined8 uVar3;

  ulonglong uVar4;

  undefined8 uVar5;

  undefined8 uVar6;

  undefined8 uVar7;

  ulonglong uVar8;

  uint uVar9;

  uint uVar10;

  

  FastExitMediaState();

  uVar3 = PackedFloatingMUL(*param_2,*param_3);

  uVar5 = PackedFloatingMUL(param_2[1],param_3[1]);

  uVar5 = PackedFloatingADD(uVar3,uVar5);

  uVar3 = PackedFloatingSUB((ulonglong)DAT_007f3040,(ulonglong)param_4);

  uVar1 = (uint)uVar3;

  uVar4 = PackedFloatingAccumulate(uVar5,uVar5);

  uVar8 = PackedFloatingCompareGE(0,uVar4);

  uVar8 = uVar8 & _DAT_007f3088;

  uVar4 = uVar4 ^ uVar8;

  uVar5 = PackedFloatingCompareGE(DAT_007f30a0,uVar4);

  uVar3 = PackedFloatingMUL(uVar4,uVar4);

  uVar3 = PackedFloatingSUBR(uVar3,CONCAT44(_UNK_007f3044,DAT_007f3040));

  if ((int)uVar5 != 0) {

    uVar6 = PackedFloatingReciprocalSQRAprox((ulonglong)param_4,uVar3);

    uVar5 = PackedFloatingMUL(uVar6,uVar6);

    uVar3 = PackedFloatingReciprocalSQRIter1(uVar3,uVar5);

    uVar6 = PackedFloatingReciprocalIter2(uVar3,uVar6);

    uVar3 = FloatingReciprocalAprox(uVar5,uVar6);

    uVar5 = PackedFloatingReciprocalIter1(uVar6,uVar3);

    PackedFloatingReciprocalIter2(uVar5,uVar3);

    uVar9 = (uint)uVar6;

    uVar3 = FUN_006150c0();

    uVar10 = (uint)uVar3;

    PackedFloatingMUL(uVar3,(ulonglong)param_4);

    uVar2 = FUN_006158a0(uVar1,uVar9,uVar10);

    PackedFloatingMUL((ulonglong)uVar10,(ulonglong)uVar1);

    uVar3 = FUN_006158a0();

    uVar8 = uVar8 & 0xffffffff;

    uVar3 = PackedFloatingMUL(uVar3,(ulonglong)uVar9);

    uVar1 = (uint)uVar3;

    uVar3 = PackedFloatingMUL((ulonglong)uVar2,(ulonglong)uVar9);

    param_4 = (uint)uVar3;

  }

  param_4 = param_4 ^ (uint)uVar8;

  uVar5 = CONCAT44(param_4,param_4);

  uVar3 = PackedFloatingMUL(CONCAT44(uVar1,uVar1),*param_2);

  uVar6 = PackedFloatingMUL(uVar5,*param_3);

  uVar7 = PackedFloatingMUL(CONCAT44(uVar1,uVar1),param_2[1]);

  uVar5 = PackedFloatingMUL(uVar5,param_3[1]);

  uVar3 = PackedFloatingADD(uVar3,uVar6);

  uVar5 = PackedFloatingADD(uVar7,uVar5);

  *param_1 = uVar3;

  param_1[1] = uVar5;

  FastExitMediaState();

  return;

}





// --- FUN_0060be0f at 0x0060BE0F (size: 141) ---


undefined4

FUN_0060be0f(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,

            uint param_5,uint param_6)



{

  ulonglong uVar1;

  undefined8 uVar2;

  undefined8 in_MM2;

  undefined8 uVar3;

  undefined1 local_28 [16];

  undefined1 local_18 [20];

  

  FastExitMediaState();

  uVar1 = PackedFloatingADD((ulonglong)param_5,(ulonglong)param_6);

  FUN_0060bcd8(local_28,param_2,param_3,(int)uVar1);

  FUN_0060bcd8(local_18,param_2,param_4,(int)uVar1);

  uVar3 = FloatingReciprocalAprox(in_MM2,uVar1 & 0xffffffff);

  uVar2 = PackedFloatingReciprocalIter1(uVar1 & 0xffffffff,uVar3);

  uVar2 = PackedFloatingReciprocalIter2(uVar2,uVar3);

  uVar2 = PackedFloatingMUL(uVar2,(ulonglong)param_6);

  FUN_0060bcd8(param_1,local_28,local_18,(int)uVar2);

  FastExitMediaState();

  return param_1;

}





// --- FUN_0060be9c at 0x0060BE9C (size: 146) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060be9c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,

                 undefined4 param_5,uint param_6)



{

  ulonglong uVar1;

  undefined8 uVar2;

  undefined1 local_20 [16];

  undefined1 local_10 [16];

  

  FUN_0060bcd8(local_20,param_2,param_5,param_6);

  FUN_0060bcd8(local_10,param_3,param_4,param_6);

  uVar1 = (ulonglong)param_6;

  uVar2 = PackedFloatingMUL(uVar1,uVar1);

  uVar2 = PackedFloatingSUB(uVar1,uVar2);

  uVar2 = PackedFloatingMUL(uVar2,_DAT_007f2fc0);

  FUN_0060bcd8(param_1,local_20,local_10,(int)uVar2);

  FastExitMediaState();

  return;

}





// --- FUN_0060bf92 at 0x0060BF92 (size: 167) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060bf92(undefined8 *param_1,undefined8 *param_2)



{

  undefined4 uVar1;

  ulonglong uVar2;

  undefined8 uVar3;

  ulonglong uVar4;

  undefined8 uVar5;

  undefined8 in_MM4;

  undefined8 uVar6;

  

  FastExitMediaState();

  uVar3 = *param_2;

  uVar4 = param_2[1];

  uVar1 = (undefined4)(uVar4 >> 0x20);

  uVar5 = PackedFloatingCompareGE(CONCAT44(uVar1,uVar1),_DAT_007f3040);

  if ((int)uVar5 == 0) {

    uVar1 = FUN_006151c0();

    uVar2 = FUN_006158a0();

    uVar5 = PackedFloatingCompareGE(uVar2 & _DAT_007f2ff8,DAT_007f3000);

    uVar3 = *param_2;

    uVar4 = param_2[1];

    if ((int)uVar5 != 0) {

      uVar6 = FloatingReciprocalAprox(in_MM4,uVar2);

      uVar5 = PackedFloatingReciprocalIter1(uVar2,uVar6);

      uVar5 = PackedFloatingReciprocalIter2(uVar5,uVar6);

      uVar5 = PackedFloatingMUL(CONCAT44(uVar1,uVar1),uVar5);

      uVar3 = PackedFloatingMUL(uVar3,uVar5);

      uVar4 = PackedFloatingMUL(uVar4,uVar5);

    }

  }

  uVar4 = uVar4 & _DAT_007f3008;

  *param_1 = uVar3;

  param_1[1] = uVar4;

  FastExitMediaState();

  return;

}





// --- FUN_0060c0de at 0x0060C0DE (size: 2619) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060c0de(undefined8 *param_1,undefined8 *param_2,ulonglong *param_3,ulonglong *param_4,

                 ulonglong *param_5,ulonglong *param_6,ulonglong *param_7)



{

  undefined4 unaff_EBX;

  undefined4 unaff_ESI;

  undefined4 uVar1;

  undefined8 uVar2;

  ulonglong uVar3;

  undefined8 uVar4;

  undefined4 uVar5;

  undefined8 uVar6;

  ulonglong uVar7;

  ulonglong uVar8;

  undefined8 uVar9;

  ulonglong uVar10;

  undefined8 uVar11;

  undefined8 uVar12;

  ulonglong uVar13;

  ulonglong uVar14;

  undefined8 uVar15;

  ulonglong local_a8;

  ulonglong local_a0;

  ulonglong local_88;

  ulonglong local_80;

  ulonglong local_78;

  ulonglong local_70;

  undefined4 local_20;

  

  local_a8 = *param_4;

  local_a0 = param_4[1];

  uVar8 = *param_5;

  uVar14 = param_5[1];

  uVar2 = PackedFloatingADD(local_a8,uVar8);

  uVar4 = PackedFloatingADD(local_a0,uVar14);

  uVar6 = PackedFloatingSUB(local_a8,uVar8);

  uVar2 = PackedFloatingMUL(uVar2,uVar2);

  uVar9 = PackedFloatingSUB(local_a0,uVar14);

  uVar4 = PackedFloatingMUL(uVar4,uVar4);

  uVar6 = PackedFloatingMUL(uVar6,uVar6);

  uVar9 = PackedFloatingMUL(uVar9,uVar9);

  uVar2 = PackedFloatingADD(uVar2,uVar4);

  uVar6 = PackedFloatingADD(uVar6,uVar9);

  local_88 = *param_6;

  local_80 = param_6[1];

  uVar11 = PackedFloatingADD(uVar8,local_88);

  uVar12 = PackedFloatingADD(uVar14,local_80);

  uVar4 = PackedFloatingSUB(uVar8,local_88);

  uVar9 = PackedFloatingSUB(uVar14,local_80);

  uVar11 = PackedFloatingMUL(uVar11,uVar11);

  uVar12 = PackedFloatingMUL(uVar12,uVar12);

  uVar4 = PackedFloatingMUL(uVar4,uVar4);

  uVar9 = PackedFloatingMUL(uVar9,uVar9);

  uVar11 = PackedFloatingADD(uVar11,uVar12);

  uVar4 = PackedFloatingADD(uVar4,uVar9);

  uVar2 = PackedFloatingAccumulate(uVar2,uVar11);

  uVar4 = PackedFloatingAccumulate(uVar6,uVar4);

  uVar2 = PackedFloatingCompareGT(uVar4,uVar2);

  uVar7 = packsswb(uVar2,uVar2);

  if ((uVar7 & 1) != 0) {

    local_a8 = DAT_007f2fe0 ^ *param_4;

    local_a0 = DAT_007f2fe0 ^ param_4[1];

  }

  if ((uVar7 & 0x10000) != 0) {

    local_88 = DAT_007f2fe0 ^ *param_6;

    local_80 = DAT_007f2fe0 ^ param_6[1];

  }

  local_78 = *param_7;

  uVar7 = param_7[1];

  uVar6 = PackedFloatingADD(local_88,local_78);

  uVar9 = PackedFloatingADD(local_80,uVar7);

  uVar2 = PackedFloatingSUB(local_88,local_78);

  uVar4 = PackedFloatingSUB(local_80,uVar7);

  uVar6 = PackedFloatingMUL(uVar6,uVar6);

  uVar9 = PackedFloatingMUL(uVar9,uVar9);

  uVar2 = PackedFloatingMUL(uVar2,uVar2);

  uVar4 = PackedFloatingMUL(uVar4,uVar4);

  uVar6 = PackedFloatingADD(uVar6,uVar9);

  uVar2 = PackedFloatingADD(uVar2,uVar4);

  uVar4 = PackedFloatingAccumulate(uVar6,uVar6);

  uVar2 = PackedFloatingAccumulate(uVar2,uVar2);

  uVar10 = PackedFloatingCompareGT(uVar2,uVar4);

  local_70 = uVar7;

  if ((uVar10 & 1) != 0) {

    local_78 = DAT_007f2fe0 ^ *param_7;

    local_70 = DAT_007f2fe0 ^ param_7[1];

  }

  uVar2 = PackedFloatingMUL(uVar8,uVar8);

  uVar4 = PackedFloatingMUL(uVar14,uVar14);

  uVar2 = PackedFloatingADD(uVar2,uVar4);

  uVar2 = PackedFloatingAccumulate(uVar2,uVar2);

  uVar4 = FloatingReciprocalAprox(uVar7,uVar2);

  uVar7 = PackedFloatingCompareGT(uVar2,_DAT_007f3028);

  uVar2 = PackedFloatingReciprocalIter1(uVar2,uVar4);

  uVar2 = PackedFloatingReciprocalIter2(uVar2,uVar4);

  uVar4 = PackedFloatingMUL((uVar8 ^ _DAT_007f3088) & uVar7,uVar2);

  uVar11 = PackedFloatingMUL((uVar14 ^ _DAT_007f2fd0) & uVar7,uVar2);

  uVar10 = CONCAT44((int)local_a8,(int)(local_a8 >> 0x20));

  uVar3 = CONCAT44((int)local_a0,(int)(local_a0 >> 0x20));

  uVar7 = PackedFloatingMUL(local_a8,uVar11);

  uVar2 = PackedFloatingMUL(local_a0,uVar4);

  uVar9 = PackedFloatingMUL(uVar3 ^ _DAT_007f2fd0,uVar4);

  uVar6 = PackedFloatingMUL(uVar10,uVar11);

  uVar2 = PackedFloatingADD(uVar7 ^ _DAT_007f2fd0,uVar2);

  uVar6 = PackedFloatingSUB(uVar6,uVar9);

  uVar15 = PackedFloatingMUL(uVar3,uVar11);

  uVar6 = PackedFloatingAccumulate(uVar6,uVar2);

  uVar12 = PackedFloatingMUL(uVar10 ^ _DAT_007f2fd0,uVar4);

  uVar2 = PackedFloatingMUL(local_a8,uVar4);

  uVar9 = PackedFloatingMUL(local_a0 ^ _DAT_007f2fd0,uVar11);

  uVar12 = PackedFloatingADD(uVar12,uVar15);

  uVar2 = PackedFloatingSUB(uVar9,uVar2);

  uVar10 = PackedFloatingAccumulate(uVar12,uVar2);

  uVar3 = CONCAT44((int)local_88,(int)(local_88 >> 0x20));

  uVar13 = CONCAT44((int)local_80,(int)(local_80 >> 0x20));

  uVar7 = PackedFloatingMUL(local_88,uVar11);

  uVar2 = PackedFloatingMUL(local_80,uVar4);

  uVar12 = PackedFloatingMUL(uVar13 ^ _DAT_007f2fd0,uVar4);

  uVar9 = PackedFloatingMUL(uVar3,uVar11);

  uVar2 = PackedFloatingADD(uVar7 ^ _DAT_007f2fd0,uVar2);

  uVar9 = PackedFloatingSUB(uVar9,uVar12);

  uVar15 = PackedFloatingMUL(uVar13,uVar11);

  uVar9 = PackedFloatingAccumulate(uVar9,uVar2);

  uVar12 = PackedFloatingMUL(uVar3 ^ _DAT_007f2fd0,uVar4);

  uVar2 = PackedFloatingMUL(local_88,uVar4);

  uVar4 = PackedFloatingMUL(local_80 ^ _DAT_007f2fd0,uVar11);

  uVar11 = PackedFloatingADD(uVar12,uVar15);

  uVar2 = PackedFloatingSUB(uVar4,uVar2);

  uVar7 = PackedFloatingAccumulate(uVar11,uVar2);

  uVar1 = (undefined4)(uVar10 >> 0x20);

  uVar4 = PackedFloatingCompareGE(CONCAT44(uVar1,uVar1),_DAT_007f3040);

  uVar2 = uVar9;

  if ((int)uVar4 == 0) {

    uVar1 = FUN_006151c0();

    uVar3 = FUN_006158a0();

    uVar4 = PackedFloatingCompareGE(uVar3 & _DAT_007f2ff8,DAT_007f3000);

    if ((int)uVar4 != 0) {

      uVar2 = FloatingReciprocalAprox(uVar2,uVar3);

      uVar4 = PackedFloatingReciprocalIter1(uVar3,uVar2);

      uVar4 = PackedFloatingReciprocalIter2(uVar4,uVar2);

      uVar4 = PackedFloatingMUL(CONCAT44(uVar1,uVar1),uVar4);

      uVar6 = PackedFloatingMUL(uVar6,uVar4);

      uVar10 = PackedFloatingMUL(uVar10,uVar4);

    }

  }

  uVar10 = uVar10 & _DAT_007f3008;

  uVar1 = (undefined4)(uVar7 >> 0x20);

  uVar4 = PackedFloatingCompareGE(CONCAT44(uVar1,uVar1),_DAT_007f3040);

  if ((int)uVar4 == 0) {

    uVar1 = FUN_006151c0();

    uVar3 = FUN_006158a0(uVar1,unaff_ESI,unaff_EBX);

    uVar4 = PackedFloatingCompareGE(uVar3 & _DAT_007f2ff8,DAT_007f3000);

    if ((int)uVar4 != 0) {

      uVar4 = FloatingReciprocalAprox(uVar2,uVar3);

      uVar2 = PackedFloatingReciprocalIter1(uVar3,uVar4);

      uVar2 = PackedFloatingReciprocalIter2(uVar2,uVar4);

      uVar2 = PackedFloatingMUL(CONCAT44(uVar1,uVar1),uVar2);

      uVar9 = PackedFloatingMUL(uVar9,uVar2);

      uVar7 = PackedFloatingMUL(uVar7,uVar2);

    }

  }

  uVar2 = PackedFloatingADD(uVar6,uVar9);

  uVar4 = PackedFloatingADD(uVar10,uVar7 & _DAT_007f3008);

  uVar2 = PackedFloatingMUL(uVar2,_DAT_007f5930);

  uVar3 = PackedFloatingMUL(uVar4,_DAT_007f5930);

  uVar4 = PackedFloatingMUL(uVar2,uVar2);

  uVar6 = PackedFloatingMUL(uVar3 & 0xffffffff,uVar3 & 0xffffffff);

  uVar4 = PackedFloatingADD(uVar4,uVar6);

  uVar4 = PackedFloatingAccumulate(uVar4,uVar4);

  uVar6 = PackedFloatingReciprocalSQRAprox(uVar6,uVar4);

  uVar9 = PackedFloatingMUL(uVar6,uVar6);

  uVar9 = PackedFloatingReciprocalSQRIter1(uVar9,uVar4);

  uVar6 = PackedFloatingReciprocalIter2(uVar9,uVar6);

  uVar1 = (undefined4)uVar6;

  PackedFloatingMUL(uVar4,uVar6);

  uVar7 = FUN_006157a0(uVar1,unaff_ESI,unaff_EBX);

  uVar10 = PackedFloatingCompareGE(uVar7 & _DAT_007f2ff0,DAT_007f3000);

  uVar5 = (undefined4)(uVar7 >> 0x20);

  uVar4 = PackedFloatingMUL(CONCAT44(uVar5,uVar5),CONCAT44(unaff_ESI,uVar1));

  local_20 = (undefined4)uVar3;

  if ((uVar10 & 0x100000000) != 0) {

    uVar4 = CONCAT44((int)uVar4,(int)uVar4);

    uVar6 = PackedFloatingMUL(uVar3 & 0xffffffff,uVar4);

    local_20 = (undefined4)uVar6;

    uVar2 = PackedFloatingMUL(uVar2,uVar4);

  }

  uVar10 = CONCAT44((int)uVar7,local_20);

  uVar3 = CONCAT44((int)uVar2,(int)((ulonglong)uVar2 >> 0x20));

  uVar13 = CONCAT44(local_20,(int)uVar7);

  uVar7 = PackedFloatingMUL(uVar2,uVar14);

  uVar4 = PackedFloatingMUL(uVar10,uVar8);

  uVar9 = PackedFloatingMUL(uVar13 ^ _DAT_007f2fd0,uVar8);

  uVar6 = PackedFloatingMUL(uVar3,uVar14);

  uVar4 = PackedFloatingADD(uVar7 ^ _DAT_007f2fd0,uVar4);

  uVar6 = PackedFloatingSUB(uVar6,uVar9);

  uVar11 = PackedFloatingMUL(uVar13,uVar14);

  uVar6 = PackedFloatingAccumulate(uVar6,uVar4);

  uVar9 = PackedFloatingMUL(uVar3 ^ _DAT_007f2fd0,uVar8);

  uVar10 = uVar10 ^ _DAT_007f2fd0;

  uVar2 = PackedFloatingMUL(uVar2,uVar8);

  *param_1 = uVar6;

  uVar4 = PackedFloatingMUL(uVar10,uVar14);

  uVar9 = PackedFloatingADD(uVar9,uVar11);

  uVar2 = PackedFloatingSUB(uVar4,uVar2);

  uVar2 = PackedFloatingAccumulate(uVar9,uVar2);

  param_1[1] = uVar2;

  uVar2 = PackedFloatingMUL(local_88,local_88);

  uVar4 = PackedFloatingMUL(local_80,local_80);

  uVar2 = PackedFloatingADD(uVar2,uVar4);

  uVar2 = PackedFloatingAccumulate(uVar2,uVar2);

  uVar4 = FloatingReciprocalAprox(uVar6,uVar2);

  uVar7 = PackedFloatingCompareGT(uVar2,_DAT_007f3028);

  uVar2 = PackedFloatingReciprocalIter1(uVar2,uVar4);

  uVar2 = PackedFloatingReciprocalIter2(uVar2,uVar4);

  uVar4 = PackedFloatingMUL((local_88 ^ _DAT_007f3088) & uVar7,uVar2);

  uVar11 = PackedFloatingMUL((local_80 ^ _DAT_007f2fd0) & uVar7,uVar2);

  uVar10 = CONCAT44((int)uVar8,(int)(uVar8 >> 0x20));

  uVar3 = CONCAT44((int)uVar14,(int)(uVar14 >> 0x20));

  uVar7 = PackedFloatingMUL(uVar8,uVar11);

  uVar2 = PackedFloatingMUL(uVar14,uVar4);

  uVar9 = PackedFloatingMUL(uVar3 ^ _DAT_007f2fd0,uVar4);

  uVar6 = PackedFloatingMUL(uVar10,uVar11);

  uVar2 = PackedFloatingADD(uVar7 ^ _DAT_007f2fd0,uVar2);

  uVar6 = PackedFloatingSUB(uVar6,uVar9);

  uVar15 = PackedFloatingMUL(uVar3,uVar11);

  uVar6 = PackedFloatingAccumulate(uVar6,uVar2);

  uVar12 = PackedFloatingMUL(uVar10 ^ _DAT_007f2fd0,uVar4);

  uVar2 = PackedFloatingMUL(uVar8,uVar4);

  uVar9 = PackedFloatingMUL(uVar14 ^ _DAT_007f2fd0,uVar11);

  uVar12 = PackedFloatingADD(uVar12,uVar15);

  uVar2 = PackedFloatingSUB(uVar9,uVar2);

  uVar14 = PackedFloatingAccumulate(uVar12,uVar2);

  uVar7 = CONCAT44((int)local_78,(int)(local_78 >> 0x20));

  uVar10 = CONCAT44((int)local_70,(int)(local_70 >> 0x20));

  uVar8 = PackedFloatingMUL(local_78,uVar11);

  uVar2 = PackedFloatingMUL(local_70,uVar4);

  uVar12 = PackedFloatingMUL(uVar10 ^ _DAT_007f2fd0,uVar4);

  uVar9 = PackedFloatingMUL(uVar7,uVar11);

  uVar2 = PackedFloatingADD(uVar8 ^ _DAT_007f2fd0,uVar2);

  uVar9 = PackedFloatingSUB(uVar9,uVar12);

  uVar15 = PackedFloatingMUL(uVar10,uVar11);

  uVar9 = PackedFloatingAccumulate(uVar9,uVar2);

  uVar12 = PackedFloatingMUL(uVar7 ^ _DAT_007f2fd0,uVar4);

  uVar2 = PackedFloatingMUL(local_78,uVar4);

  uVar4 = PackedFloatingMUL(local_70 ^ _DAT_007f2fd0,uVar11);

  uVar11 = PackedFloatingADD(uVar12,uVar15);

  uVar2 = PackedFloatingSUB(uVar4,uVar2);

  uVar8 = PackedFloatingAccumulate(uVar11,uVar2);

  uVar1 = (undefined4)(uVar14 >> 0x20);

  uVar4 = PackedFloatingCompareGE(CONCAT44(uVar1,uVar1),_DAT_007f3040);

  uVar2 = uVar9;

  if ((int)uVar4 == 0) {

    uVar1 = FUN_006151c0();

    uVar7 = FUN_006158a0(uVar1,unaff_ESI,unaff_EBX);

    uVar4 = PackedFloatingCompareGE(uVar7 & _DAT_007f2ff8,DAT_007f3000);

    if ((int)uVar4 != 0) {

      uVar2 = FloatingReciprocalAprox(uVar2,uVar7);

      uVar4 = PackedFloatingReciprocalIter1(uVar7,uVar2);

      uVar4 = PackedFloatingReciprocalIter2(uVar4,uVar2);

      uVar4 = PackedFloatingMUL(CONCAT44(uVar1,uVar1),uVar4);

      uVar6 = PackedFloatingMUL(uVar6,uVar4);

      uVar14 = PackedFloatingMUL(uVar14,uVar4);

    }

  }

  uVar14 = uVar14 & _DAT_007f3008;

  uVar1 = (undefined4)(uVar8 >> 0x20);

  uVar4 = PackedFloatingCompareGE(CONCAT44(uVar1,uVar1),_DAT_007f3040);

  if ((int)uVar4 == 0) {

    uVar1 = FUN_006151c0();

    uVar7 = FUN_006158a0(uVar1,unaff_ESI,unaff_EBX);

    uVar4 = PackedFloatingCompareGE(uVar7 & _DAT_007f2ff8,DAT_007f3000);

    if ((int)uVar4 != 0) {

      uVar4 = FloatingReciprocalAprox(uVar2,uVar7);

      uVar2 = PackedFloatingReciprocalIter1(uVar7,uVar4);

      uVar2 = PackedFloatingReciprocalIter2(uVar2,uVar4);

      uVar2 = PackedFloatingMUL(CONCAT44(uVar1,uVar1),uVar2);

      uVar9 = PackedFloatingMUL(uVar9,uVar2);

      uVar8 = PackedFloatingMUL(uVar8,uVar2);

    }

  }

  uVar2 = PackedFloatingADD(uVar6,uVar9);

  uVar4 = PackedFloatingADD(uVar14,uVar8 & _DAT_007f3008);

  uVar2 = PackedFloatingMUL(uVar2,_DAT_007f5930);

  uVar7 = PackedFloatingMUL(uVar4,_DAT_007f5930);

  uVar4 = PackedFloatingMUL(uVar2,uVar2);

  uVar6 = PackedFloatingMUL(uVar7 & 0xffffffff,uVar7 & 0xffffffff);

  uVar4 = PackedFloatingADD(uVar4,uVar6);

  uVar4 = PackedFloatingAccumulate(uVar4,uVar4);

  uVar6 = PackedFloatingReciprocalSQRAprox(uVar6,uVar4);

  uVar9 = PackedFloatingMUL(uVar6,uVar6);

  uVar9 = PackedFloatingReciprocalSQRIter1(uVar9,uVar4);

  uVar6 = PackedFloatingReciprocalIter2(uVar9,uVar6);

  uVar1 = (undefined4)uVar6;

  PackedFloatingMUL(uVar4,uVar6);

  uVar8 = FUN_006157a0(uVar1,unaff_ESI,unaff_EBX);

  uVar14 = PackedFloatingCompareGE(uVar8 & _DAT_007f2ff0,DAT_007f3000);

  uVar5 = (undefined4)(uVar8 >> 0x20);

  uVar4 = PackedFloatingMUL(CONCAT44(uVar5,uVar5),CONCAT44(unaff_ESI,uVar1));

  local_20 = (undefined4)uVar7;

  if ((uVar14 & 0x100000000) != 0) {

    uVar4 = CONCAT44((int)uVar4,(int)uVar4);

    uVar6 = PackedFloatingMUL(uVar7 & 0xffffffff,uVar4);

    local_20 = (undefined4)uVar6;

    uVar2 = PackedFloatingMUL(uVar2,uVar4);

  }

  uVar14 = CONCAT44((int)uVar8,local_20);

  uVar7 = CONCAT44((int)uVar2,(int)((ulonglong)uVar2 >> 0x20));

  uVar10 = CONCAT44(local_20,(int)uVar8);

  uVar8 = PackedFloatingMUL(uVar2,local_80);

  uVar4 = PackedFloatingMUL(uVar14,local_88);

  uVar9 = PackedFloatingMUL(uVar10 ^ _DAT_007f2fd0,local_88);

  uVar6 = PackedFloatingMUL(uVar7,local_80);

  uVar4 = PackedFloatingADD(uVar8 ^ _DAT_007f2fd0,uVar4);

  uVar6 = PackedFloatingSUB(uVar6,uVar9);

  uVar9 = PackedFloatingMUL(uVar10,local_80);

  uVar4 = PackedFloatingAccumulate(uVar6,uVar4);

  uVar6 = PackedFloatingMUL(uVar7 ^ _DAT_007f2fd0,local_88);

  uVar14 = uVar14 ^ _DAT_007f2fd0;

  uVar2 = PackedFloatingMUL(uVar2,local_88);

  *param_2 = uVar4;

  uVar4 = PackedFloatingMUL(uVar14,local_80);

  uVar6 = PackedFloatingADD(uVar6,uVar9);

  uVar2 = PackedFloatingSUB(uVar4,uVar2);

  uVar2 = PackedFloatingAccumulate(uVar6,uVar2);

  param_2[1] = uVar2;

  *param_3 = local_88;

  param_3[1] = local_80;

  FastExitMediaState();

  return;

}





// --- FUN_0060d38e at 0x0060D38E (size: 4604) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060d38e(ulonglong *param_1,undefined8 *param_2,undefined8 *param_3,ulonglong *param_4,

                 undefined8 *param_5,undefined8 *param_6,undefined8 *param_7)



{

  uint uVar1;

  undefined4 uVar2;

  undefined8 uVar3;

  longlong lVar4;

  ulonglong uVar5;

  undefined8 uVar6;

  undefined8 uVar7;

  undefined4 uVar11;

  ulonglong uVar8;

  ulonglong uVar9;

  ulonglong uVar10;

  undefined8 uVar12;

  ulonglong uVar13;

  ulonglong uVar14;

  ulonglong uVar15;

  ulonglong uVar16;

  ulonglong uVar17;

  undefined4 uVar20;

  ulonglong uVar18;

  undefined8 uVar19;

  ulonglong uVar21;

  undefined8 uVar22;

  longlong lVar23;

  undefined8 uVar24;

  undefined8 uVar25;

  undefined8 uVar26;

  uint uVar29;

  undefined8 uVar27;

  undefined8 uVar28;

  undefined4 uVar30;

  undefined8 uVar31;

  undefined4 uVar33;

  ulonglong uVar32;

  

  uVar1 = DAT_007f2fb8;

  uVar16 = DAT_007f2f98;

  if (param_4 == (ulonglong *)0x0) {

    uVar16 = (ulonglong)DAT_007f2fa8;

    *param_1 = uVar16;

    param_1[1] = 0;

    param_1[2] = uVar16 << 0x20;

    param_1[3] = 0;

    param_1[4] = 0;

    param_1[5] = uVar16;

    param_1[6] = 0;

    param_1[7] = uVar16 << 0x20;

  }

  else if (param_3 == (undefined8 *)0x0) {

    if (param_2 == (undefined8 *)0x0) {

      uVar32 = *param_4;

      uVar15 = param_4[1];

      *param_1 = uVar32 & 0xffffffff;

      param_1[1] = 0;

      param_1[2] = uVar32 & 0xffffffff00000000;

      param_1[3] = 0;

      param_1[4] = 0;

      param_1[5] = (ulonglong)(uint)uVar15;

      param_1[6] = 0;

      param_1[7] = uVar16;

    }

    else {

      uVar7 = CONCAT44(_DAT_007f2fbc,DAT_007f2fb8);

      uVar26 = *param_2;

      uVar16 = *param_4;

      uVar32 = param_4[1];

      uVar6 = CONCAT44(DAT_007f2fb8,*(undefined4 *)(param_2 + 1));

      uVar3 = PackedFloatingSUB(uVar7,uVar16);

      param_1[5] = (ulonglong)(uint)uVar32;

      uVar7 = PackedFloatingSUB(uVar7,(ulonglong)(uint)uVar32);

      param_1[1] = 0;

      param_1[3] = 0;

      param_1[4] = 0;

      uVar32 = PackedFloatingMUL(uVar3,uVar26);

      uVar15 = PackedFloatingMUL(uVar7,uVar6);

      *param_1 = uVar16 & 0xffffffff;

      param_1[2] = uVar16 & 0xffffffff00000000;

      param_1[6] = uVar32;

      param_1[7] = uVar15;

    }

  }

  else {

    uVar17 = (ulonglong)(uint)param_4[1];

    uVar5 = *param_4 & 0xffffffff;

    uVar21 = *param_4 & 0xffffffff00000000;

    uVar26 = *param_3;

    uVar7 = param_3[1];

    uVar3 = PackedFloatingADD(uVar26,uVar26);

    uVar6 = PackedFloatingADD(uVar7,uVar7);

    uVar11 = (undefined4)((ulonglong)uVar26 >> 0x20);

    uVar20 = (undefined4)((ulonglong)uVar7 >> 0x20);

    uVar31 = CONCAT44(uVar20,uVar20);

    uVar12 = PackedFloatingMUL(uVar26,uVar3);

    uVar26 = CONCAT44((int)uVar3,(int)uVar6);

    uVar22 = PackedFloatingMUL(uVar3,uVar31);

    uVar6 = PackedFloatingMUL(CONCAT44((int)uVar7,(int)uVar7),uVar26);

    uVar7 = PackedFloatingMUL(uVar26,CONCAT44(uVar11,uVar11));

    uVar26 = PackedFloatingMUL(uVar26,uVar31);

    uVar3 = CONCAT44((int)((ulonglong)uVar6 >> 0x20),(int)((ulonglong)uVar7 >> 0x20));

    uVar31 = PackedFloatingADD(CONCAT44((int)uVar6,(int)uVar6),uVar12);

    uVar6 = PackedFloatingAccumulate(uVar12,uVar12);

    uVar26 = CONCAT44((int)((ulonglong)uVar22 >> 0x20),(int)uVar26);

    uVar13 = PackedFloatingSUBR(uVar6,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

    uVar12 = PackedFloatingSUBR(uVar31,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

    uVar14 = uVar13 & 0xffffffff;

    uVar6 = PackedFloatingADD(uVar3,uVar26);

    uVar18 = PackedFloatingSUB(uVar3,uVar26);

    uVar8 = PackedFloatingADD(uVar7,uVar22);

    uVar15 = PackedFloatingSUB(uVar7,uVar22);

    uVar9 = uVar8 & 0xffffffff;

    uVar20 = (undefined4)uVar18;

    uVar30 = (undefined4)uVar12;

    uVar7 = CONCAT44(uVar30,uVar20);

    uVar11 = (undefined4)uVar6;

    uVar32 = uVar18 >> 0x20;

    lVar4 = (ulonglong)DAT_007f2fb8 << 0x20;

    uVar29 = (uint)((ulonglong)uVar6 >> 0x20);

    uVar33 = (undefined4)((ulonglong)uVar12 >> 0x20);

    uVar26 = CONCAT44(uVar11,uVar33);

    uVar3 = CONCAT44((int)uVar15,uVar29);

    uVar2 = (undefined4)(uVar18 >> 0x20);

    if (param_2 == (undefined8 *)0x0) {

      *param_1 = CONCAT44(uVar20,uVar33);

      param_1[2] = CONCAT44(uVar30,uVar11);

      param_1[5] = uVar13 & 0xffffffff;

      param_1[7] = (ulonglong)uVar1 << 0x20;

      param_1[4] = CONCAT44((int)uVar8,uVar2);

      param_1[6] = 0;

      param_1[3] = uVar15 & 0xffffffff;

      param_1[1] = (ulonglong)uVar29;

      uVar11 = (undefined4)(*param_1 >> 0x20);

      uVar20 = (undefined4)(param_1[1] >> 0x20);

      uVar2 = (undefined4)*param_1;

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[1];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar5,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,0);

      uVar25 = PackedFloatingMUL(uVar21,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,0);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(0,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar17);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,uVar16);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar15 = PackedFloatingADD(uVar12,uVar6);

      *param_1 = uVar8;

      param_1[1] = uVar15;

      uVar11 = (undefined4)(param_1[2] >> 0x20);

      uVar20 = (undefined4)(param_1[3] >> 0x20);

      uVar2 = (undefined4)param_1[2];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[3];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar5,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,0);

      uVar25 = PackedFloatingMUL(uVar21,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,0);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(0,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar17);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,uVar16);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar15 = PackedFloatingADD(uVar12,uVar6);

      param_1[2] = uVar8;

      param_1[3] = uVar15;

      uVar11 = (undefined4)(param_1[4] >> 0x20);

      uVar20 = (undefined4)(param_1[5] >> 0x20);

      uVar2 = (undefined4)param_1[4];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[5];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar5,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,0);

      uVar25 = PackedFloatingMUL(uVar21,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,0);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(0,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar17);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,uVar16);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar15 = PackedFloatingADD(uVar12,uVar6);

      param_1[4] = uVar8;

      param_1[5] = uVar15;

      uVar11 = (undefined4)(param_1[6] >> 0x20);

      uVar20 = (undefined4)(param_1[7] >> 0x20);

      uVar2 = (undefined4)param_1[6];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[7];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar5,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,0);

      uVar25 = PackedFloatingMUL(uVar21,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,0);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(0,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar17);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,uVar16);

      uVar15 = PackedFloatingADD(uVar28,uVar22);

      uVar16 = PackedFloatingADD(uVar12,uVar6);

      param_1[6] = uVar15;

      param_1[7] = uVar16;

      uVar11 = (undefined4)(*param_1 >> 0x20);

      uVar20 = (undefined4)(param_1[1] >> 0x20);

      uVar2 = (undefined4)*param_1;

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[1];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar32);

      uVar25 = PackedFloatingMUL(uVar7,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar9);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar3,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar14);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar15 = PackedFloatingADD(uVar28,uVar22);

      uVar16 = PackedFloatingADD(uVar12,uVar6);

      *param_1 = uVar15;

      param_1[1] = uVar16;

      uVar11 = (undefined4)(param_1[2] >> 0x20);

      uVar20 = (undefined4)(param_1[3] >> 0x20);

      uVar2 = (undefined4)param_1[2];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[3];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar32);

      uVar25 = PackedFloatingMUL(uVar7,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar9);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar3,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar14);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar15 = PackedFloatingADD(uVar28,uVar22);

      uVar16 = PackedFloatingADD(uVar12,uVar6);

      param_1[2] = uVar15;

      param_1[3] = uVar16;

      uVar11 = (undefined4)(param_1[4] >> 0x20);

      uVar20 = (undefined4)(param_1[5] >> 0x20);

      uVar2 = (undefined4)param_1[4];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[5];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar32);

      uVar25 = PackedFloatingMUL(uVar7,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar9);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar3,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar14);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar15 = PackedFloatingADD(uVar28,uVar22);

      uVar16 = PackedFloatingADD(uVar12,uVar6);

      param_1[4] = uVar15;

      param_1[5] = uVar16;

      uVar11 = (undefined4)(param_1[6] >> 0x20);

      uVar20 = (undefined4)(param_1[7] >> 0x20);

      uVar2 = (undefined4)param_1[6];

      uVar6 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[7];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar31 = PackedFloatingMUL(uVar26,uVar6);

      uVar26 = CONCAT44(uVar11,uVar11);

      uVar6 = PackedFloatingMUL(uVar6,uVar32);

      uVar22 = PackedFloatingMUL(uVar7,uVar26);

      uVar7 = CONCAT44(uVar20,uVar20);

      uVar26 = PackedFloatingMUL(uVar26,uVar9);

      uVar31 = PackedFloatingADD(uVar22,uVar31);

      uVar22 = PackedFloatingMUL(uVar3,uVar12);

      uVar3 = PackedFloatingADD(uVar26,uVar6);

      uVar26 = PackedFloatingMUL(uVar12,uVar14);

      uVar6 = PackedFloatingADD(uVar22,uVar31);

      uVar12 = PackedFloatingMUL(0,uVar7);

      uVar26 = PackedFloatingADD(uVar3,uVar26);

      uVar7 = PackedFloatingMUL(uVar7,lVar4);

      uVar32 = PackedFloatingADD(uVar12,uVar6);

      uVar16 = PackedFloatingADD(uVar7,uVar26);

      param_1[6] = uVar32;

      param_1[7] = uVar16;

    }

    else {

      uVar31 = CONCAT44(uVar20,uVar33);

      uVar25 = CONCAT44(uVar30,uVar11);

      uVar13 = uVar13 & 0xffffffff;

      lVar23 = (ulonglong)DAT_007f2fb8 << 0x20;

      uVar27 = CONCAT44((int)uVar8,uVar2);

      uVar15 = uVar15 & 0xffffffff;

      uVar18 = (ulonglong)uVar29;

      uVar6 = *param_2;

      uVar1 = *(uint *)(param_2 + 1);

      uVar8 = (ulonglong)DAT_007f2fa8;

      *param_1 = uVar8;

      param_1[1] = 0;

      param_1[2] = uVar8 << 0x20;

      param_1[3] = 0;

      param_1[4] = 0;

      param_1[5] = uVar8;

      uVar10 = PackedFloatingSUB(uVar8 << 0x20,(ulonglong)uVar1);

      uVar8 = PackedFloatingSUB(0,uVar6);

      param_1[7] = uVar10;

      param_1[6] = uVar8;

      uVar11 = (undefined4)(*param_1 >> 0x20);

      uVar20 = (undefined4)(param_1[1] >> 0x20);

      uVar2 = (undefined4)*param_1;

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[1];

      uVar28 = CONCAT44(uVar2,uVar2);

      uVar19 = PackedFloatingMUL(uVar31,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar22 = PackedFloatingMUL(uVar12,uVar18);

      uVar24 = PackedFloatingMUL(uVar25,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar15);

      uVar19 = PackedFloatingADD(uVar24,uVar19);

      uVar24 = PackedFloatingMUL(uVar27,uVar28);

      uVar22 = PackedFloatingADD(uVar6,uVar22);

      uVar6 = PackedFloatingMUL(uVar28,uVar13);

      uVar28 = PackedFloatingADD(uVar24,uVar19);

      uVar19 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar22,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar23);

      uVar10 = PackedFloatingADD(uVar19,uVar28);

      uVar8 = PackedFloatingADD(uVar12,uVar6);

      *param_1 = uVar10;

      param_1[1] = uVar8;

      uVar11 = (undefined4)(param_1[2] >> 0x20);

      uVar20 = (undefined4)(param_1[3] >> 0x20);

      uVar2 = (undefined4)param_1[2];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[3];

      uVar28 = CONCAT44(uVar2,uVar2);

      uVar19 = PackedFloatingMUL(uVar31,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar22 = PackedFloatingMUL(uVar12,uVar18);

      uVar24 = PackedFloatingMUL(uVar25,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar15);

      uVar19 = PackedFloatingADD(uVar24,uVar19);

      uVar24 = PackedFloatingMUL(uVar27,uVar28);

      uVar22 = PackedFloatingADD(uVar6,uVar22);

      uVar6 = PackedFloatingMUL(uVar28,uVar13);

      uVar28 = PackedFloatingADD(uVar24,uVar19);

      uVar19 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar22,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar23);

      uVar10 = PackedFloatingADD(uVar19,uVar28);

      uVar8 = PackedFloatingADD(uVar12,uVar6);

      param_1[2] = uVar10;

      param_1[3] = uVar8;

      uVar11 = (undefined4)(param_1[4] >> 0x20);

      uVar20 = (undefined4)(param_1[5] >> 0x20);

      uVar2 = (undefined4)param_1[4];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[5];

      uVar28 = CONCAT44(uVar2,uVar2);

      uVar19 = PackedFloatingMUL(uVar31,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar22 = PackedFloatingMUL(uVar12,uVar18);

      uVar24 = PackedFloatingMUL(uVar25,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar15);

      uVar19 = PackedFloatingADD(uVar24,uVar19);

      uVar24 = PackedFloatingMUL(uVar27,uVar28);

      uVar22 = PackedFloatingADD(uVar6,uVar22);

      uVar6 = PackedFloatingMUL(uVar28,uVar13);

      uVar28 = PackedFloatingADD(uVar24,uVar19);

      uVar19 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar22,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar23);

      uVar10 = PackedFloatingADD(uVar19,uVar28);

      uVar8 = PackedFloatingADD(uVar12,uVar6);

      param_1[4] = uVar10;

      param_1[5] = uVar8;

      uVar11 = (undefined4)(param_1[6] >> 0x20);

      uVar20 = (undefined4)(param_1[7] >> 0x20);

      uVar2 = (undefined4)param_1[6];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[7];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar31,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar18);

      uVar25 = PackedFloatingMUL(uVar25,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar15);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar27,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar13);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar23);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar15 = PackedFloatingADD(uVar12,uVar6);

      param_1[6] = uVar8;

      param_1[7] = uVar15;

      uVar11 = (undefined4)(*param_1 >> 0x20);

      uVar20 = (undefined4)(param_1[1] >> 0x20);

      uVar2 = (undefined4)*param_1;

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[1];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar5,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,0);

      uVar25 = PackedFloatingMUL(uVar21,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,0);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(0,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar17);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,uVar16);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar15 = PackedFloatingADD(uVar12,uVar6);

      *param_1 = uVar8;

      param_1[1] = uVar15;

      uVar11 = (undefined4)(param_1[2] >> 0x20);

      uVar20 = (undefined4)(param_1[3] >> 0x20);

      uVar2 = (undefined4)param_1[2];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[3];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar5,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,0);

      uVar25 = PackedFloatingMUL(uVar21,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,0);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(0,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar17);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,uVar16);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar15 = PackedFloatingADD(uVar12,uVar6);

      param_1[2] = uVar8;

      param_1[3] = uVar15;

      uVar11 = (undefined4)(param_1[4] >> 0x20);

      uVar20 = (undefined4)(param_1[5] >> 0x20);

      uVar2 = (undefined4)param_1[4];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[5];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar5,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,0);

      uVar25 = PackedFloatingMUL(uVar21,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,0);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(0,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar17);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,uVar16);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar15 = PackedFloatingADD(uVar12,uVar6);

      param_1[4] = uVar8;

      param_1[5] = uVar15;

      uVar11 = (undefined4)(param_1[6] >> 0x20);

      uVar20 = (undefined4)(param_1[7] >> 0x20);

      uVar2 = (undefined4)param_1[6];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[7];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar5,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,0);

      uVar25 = PackedFloatingMUL(uVar21,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,0);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(0,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar17);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,uVar16);

      uVar15 = PackedFloatingADD(uVar28,uVar22);

      uVar16 = PackedFloatingADD(uVar12,uVar6);

      param_1[6] = uVar15;

      param_1[7] = uVar16;

      uVar11 = (undefined4)(*param_1 >> 0x20);

      uVar20 = (undefined4)(param_1[1] >> 0x20);

      uVar2 = (undefined4)*param_1;

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[1];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar32);

      uVar25 = PackedFloatingMUL(uVar7,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar9);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar3,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar14);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar15 = PackedFloatingADD(uVar28,uVar22);

      uVar16 = PackedFloatingADD(uVar12,uVar6);

      *param_1 = uVar15;

      param_1[1] = uVar16;

      uVar11 = (undefined4)(param_1[2] >> 0x20);

      uVar20 = (undefined4)(param_1[3] >> 0x20);

      uVar2 = (undefined4)param_1[2];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[3];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar32);

      uVar25 = PackedFloatingMUL(uVar7,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar9);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar3,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar14);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar15 = PackedFloatingADD(uVar28,uVar22);

      uVar16 = PackedFloatingADD(uVar12,uVar6);

      param_1[2] = uVar15;

      param_1[3] = uVar16;

      uVar11 = (undefined4)(param_1[4] >> 0x20);

      uVar20 = (undefined4)(param_1[5] >> 0x20);

      uVar2 = (undefined4)param_1[4];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[5];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar32);

      uVar25 = PackedFloatingMUL(uVar7,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar9);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar3,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar14);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar15 = PackedFloatingADD(uVar28,uVar22);

      uVar16 = PackedFloatingADD(uVar12,uVar6);

      param_1[4] = uVar15;

      param_1[5] = uVar16;

      uVar11 = (undefined4)(param_1[6] >> 0x20);

      uVar20 = (undefined4)(param_1[7] >> 0x20);

      uVar2 = (undefined4)param_1[6];

      uVar6 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[7];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar31 = PackedFloatingMUL(uVar26,uVar6);

      uVar26 = CONCAT44(uVar11,uVar11);

      uVar6 = PackedFloatingMUL(uVar6,uVar32);

      uVar22 = PackedFloatingMUL(uVar7,uVar26);

      uVar7 = CONCAT44(uVar20,uVar20);

      uVar26 = PackedFloatingMUL(uVar26,uVar9);

      uVar31 = PackedFloatingADD(uVar22,uVar31);

      uVar22 = PackedFloatingMUL(uVar3,uVar12);

      uVar3 = PackedFloatingADD(uVar26,uVar6);

      uVar26 = PackedFloatingMUL(uVar12,uVar14);

      uVar6 = PackedFloatingADD(uVar22,uVar31);

      uVar12 = PackedFloatingMUL(0,uVar7);

      uVar26 = PackedFloatingADD(uVar3,uVar26);

      uVar7 = PackedFloatingMUL(uVar7,lVar4);

      uVar32 = PackedFloatingADD(uVar12,uVar6);

      uVar16 = PackedFloatingADD(uVar7,uVar26);

      param_1[6] = uVar32;

      param_1[7] = uVar16;

      uVar16 = PackedFloatingADD(*param_2,param_1[6]);

      uVar26 = PackedFloatingADD((ulonglong)*(uint *)(param_2 + 1),(ulonglong)(uint)param_1[7]);

      param_1[6] = uVar16;

      *(int *)(param_1 + 7) = (int)uVar26;

    }

  }

  if (param_6 != (undefined8 *)0x0) {

    uVar26 = *param_6;

    uVar7 = param_6[1];

    uVar3 = PackedFloatingADD(uVar26,uVar26);

    uVar6 = PackedFloatingADD(uVar7,uVar7);

    uVar11 = (undefined4)((ulonglong)uVar26 >> 0x20);

    uVar20 = (undefined4)((ulonglong)uVar7 >> 0x20);

    uVar31 = CONCAT44(uVar20,uVar20);

    uVar12 = PackedFloatingMUL(uVar26,uVar3);

    uVar26 = CONCAT44((int)uVar3,(int)uVar6);

    uVar22 = PackedFloatingMUL(uVar3,uVar31);

    uVar6 = PackedFloatingMUL(CONCAT44((int)uVar7,(int)uVar7),uVar26);

    uVar7 = PackedFloatingMUL(uVar26,CONCAT44(uVar11,uVar11));

    uVar26 = PackedFloatingMUL(uVar26,uVar31);

    uVar3 = CONCAT44((int)((ulonglong)uVar6 >> 0x20),(int)((ulonglong)uVar7 >> 0x20));

    uVar31 = PackedFloatingADD(CONCAT44((int)uVar6,(int)uVar6),uVar12);

    uVar6 = PackedFloatingAccumulate(uVar12,uVar12);

    uVar26 = CONCAT44((int)((ulonglong)uVar22 >> 0x20),(int)uVar26);

    uVar15 = PackedFloatingSUBR(uVar6,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

    uVar12 = PackedFloatingSUBR(uVar31,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

    uVar15 = uVar15 & 0xffffffff;

    uVar6 = PackedFloatingADD(uVar3,uVar26);

    uVar16 = PackedFloatingSUB(uVar3,uVar26);

    uVar32 = PackedFloatingADD(uVar7,uVar22);

    uVar7 = PackedFloatingSUB(uVar7,uVar22);

    uVar32 = uVar32 & 0xffffffff;

    uVar3 = CONCAT44((int)uVar12,(int)uVar16);

    uVar16 = uVar16 >> 0x20;

    lVar4 = (ulonglong)DAT_007f2fb8 << 0x20;

    uVar26 = CONCAT44((int)uVar6,(int)((ulonglong)uVar12 >> 0x20));

    uVar7 = CONCAT44((int)uVar7,(int)((ulonglong)uVar6 >> 0x20));

    if (param_5 == (undefined8 *)0x0) {

      uVar11 = (undefined4)(*param_1 >> 0x20);

      uVar20 = (undefined4)(param_1[1] >> 0x20);

      uVar2 = (undefined4)*param_1;

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[1];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar16);

      uVar25 = PackedFloatingMUL(uVar3,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar32);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar7,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar15);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar5 = PackedFloatingADD(uVar12,uVar6);

      *param_1 = uVar8;

      param_1[1] = uVar5;

      uVar11 = (undefined4)(param_1[2] >> 0x20);

      uVar20 = (undefined4)(param_1[3] >> 0x20);

      uVar2 = (undefined4)param_1[2];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[3];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar16);

      uVar25 = PackedFloatingMUL(uVar3,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar32);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar7,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar15);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar5 = PackedFloatingADD(uVar12,uVar6);

      param_1[2] = uVar8;

      param_1[3] = uVar5;

      uVar11 = (undefined4)(param_1[4] >> 0x20);

      uVar20 = (undefined4)(param_1[5] >> 0x20);

      uVar2 = (undefined4)param_1[4];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[5];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar16);

      uVar25 = PackedFloatingMUL(uVar3,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar32);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar7,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar15);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar5 = PackedFloatingADD(uVar12,uVar6);

      param_1[4] = uVar8;

      param_1[5] = uVar5;

      uVar11 = (undefined4)(param_1[6] >> 0x20);

      uVar20 = (undefined4)(param_1[7] >> 0x20);

      uVar2 = (undefined4)param_1[6];

      uVar6 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[7];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar31 = PackedFloatingMUL(uVar26,uVar6);

      uVar26 = CONCAT44(uVar11,uVar11);

      uVar6 = PackedFloatingMUL(uVar6,uVar16);

      uVar22 = PackedFloatingMUL(uVar3,uVar26);

      uVar3 = CONCAT44(uVar20,uVar20);

      uVar26 = PackedFloatingMUL(uVar26,uVar32);

      uVar31 = PackedFloatingADD(uVar22,uVar31);

      uVar22 = PackedFloatingMUL(uVar7,uVar12);

      uVar7 = PackedFloatingADD(uVar26,uVar6);

      uVar26 = PackedFloatingMUL(uVar12,uVar15);

      uVar6 = PackedFloatingADD(uVar22,uVar31);

      uVar12 = PackedFloatingMUL(0,uVar3);

      uVar26 = PackedFloatingADD(uVar7,uVar26);

      uVar7 = PackedFloatingMUL(uVar3,lVar4);

      uVar32 = PackedFloatingADD(uVar12,uVar6);

      uVar16 = PackedFloatingADD(uVar7,uVar26);

      param_1[6] = uVar32;

      param_1[7] = uVar16;

    }

    else {

      uVar5 = PackedFloatingSUB(param_1[6],*param_5);

      uVar6 = PackedFloatingSUB((ulonglong)(uint)param_1[7],(ulonglong)*(uint *)(param_5 + 1));

      param_1[6] = uVar5;

      *(int *)(param_1 + 7) = (int)uVar6;

      uVar11 = (undefined4)(*param_1 >> 0x20);

      uVar20 = (undefined4)(param_1[1] >> 0x20);

      uVar2 = (undefined4)*param_1;

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[1];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar16);

      uVar25 = PackedFloatingMUL(uVar3,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar32);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar7,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar15);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar5 = PackedFloatingADD(uVar12,uVar6);

      *param_1 = uVar8;

      param_1[1] = uVar5;

      uVar11 = (undefined4)(param_1[2] >> 0x20);

      uVar20 = (undefined4)(param_1[3] >> 0x20);

      uVar2 = (undefined4)param_1[2];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[3];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar16);

      uVar25 = PackedFloatingMUL(uVar3,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar32);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar7,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar15);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar5 = PackedFloatingADD(uVar12,uVar6);

      param_1[2] = uVar8;

      param_1[3] = uVar5;

      uVar11 = (undefined4)(param_1[4] >> 0x20);

      uVar20 = (undefined4)(param_1[5] >> 0x20);

      uVar2 = (undefined4)param_1[4];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[5];

      uVar22 = CONCAT44(uVar2,uVar2);

      uVar28 = PackedFloatingMUL(uVar26,uVar12);

      uVar6 = CONCAT44(uVar11,uVar11);

      uVar31 = PackedFloatingMUL(uVar12,uVar16);

      uVar25 = PackedFloatingMUL(uVar3,uVar6);

      uVar12 = CONCAT44(uVar20,uVar20);

      uVar6 = PackedFloatingMUL(uVar6,uVar32);

      uVar28 = PackedFloatingADD(uVar25,uVar28);

      uVar25 = PackedFloatingMUL(uVar7,uVar22);

      uVar31 = PackedFloatingADD(uVar6,uVar31);

      uVar6 = PackedFloatingMUL(uVar22,uVar15);

      uVar22 = PackedFloatingADD(uVar25,uVar28);

      uVar28 = PackedFloatingMUL(0,uVar12);

      uVar6 = PackedFloatingADD(uVar31,uVar6);

      uVar12 = PackedFloatingMUL(uVar12,lVar4);

      uVar8 = PackedFloatingADD(uVar28,uVar22);

      uVar5 = PackedFloatingADD(uVar12,uVar6);

      param_1[4] = uVar8;

      param_1[5] = uVar5;

      uVar11 = (undefined4)(param_1[6] >> 0x20);

      uVar20 = (undefined4)(param_1[7] >> 0x20);

      uVar2 = (undefined4)param_1[6];

      uVar6 = CONCAT44(uVar2,uVar2);

      uVar2 = (undefined4)param_1[7];

      uVar12 = CONCAT44(uVar2,uVar2);

      uVar31 = PackedFloatingMUL(uVar26,uVar6);

      uVar26 = CONCAT44(uVar11,uVar11);

      uVar6 = PackedFloatingMUL(uVar6,uVar16);

      uVar22 = PackedFloatingMUL(uVar3,uVar26);

      uVar3 = CONCAT44(uVar20,uVar20);

      uVar26 = PackedFloatingMUL(uVar26,uVar32);

      uVar31 = PackedFloatingADD(uVar22,uVar31);

      uVar22 = PackedFloatingMUL(uVar7,uVar12);

      uVar7 = PackedFloatingADD(uVar26,uVar6);

      uVar26 = PackedFloatingMUL(uVar12,uVar15);

      uVar6 = PackedFloatingADD(uVar22,uVar31);

      uVar12 = PackedFloatingMUL(0,uVar3);

      uVar26 = PackedFloatingADD(uVar7,uVar26);

      uVar7 = PackedFloatingMUL(uVar3,lVar4);

      uVar32 = PackedFloatingADD(uVar12,uVar6);

      uVar16 = PackedFloatingADD(uVar7,uVar26);

      param_1[6] = uVar32;

      param_1[7] = uVar16;

      uVar16 = PackedFloatingADD(param_1[6],*param_5);

      uVar26 = PackedFloatingADD((ulonglong)(uint)param_1[7],(ulonglong)*(uint *)(param_5 + 1));

      param_1[6] = uVar16;

      *(int *)(param_1 + 7) = (int)uVar26;

    }

  }

  if (param_7 != (undefined8 *)0x0) {

    uVar16 = PackedFloatingADD(param_1[6],*param_7);

    uVar26 = PackedFloatingADD((ulonglong)(uint)param_1[7],(ulonglong)*(uint *)(param_7 + 1));

    param_1[6] = uVar16;

    *(int *)(param_1 + 7) = (int)uVar26;

  }

  FastExitMediaState();

  return;

}





// --- FUN_0060e58a at 0x0060E58A (size: 421) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060e58a(undefined8 *param_1,undefined8 param_2,undefined8 param_3)



{

  undefined4 uVar1;

  undefined8 uVar2;

  undefined8 uVar3;

  undefined8 uVar4;

  undefined8 uVar5;

  ulonglong uVar6;

  undefined4 uVar9;

  undefined8 uVar7;

  ulonglong uVar8;

  undefined8 uVar10;

  undefined8 uVar11;

  undefined4 uVar12;

  

  PackedFloatingMUL(DAT_007f3048,param_3);

  PackedFloatingMUL(DAT_007f3048,param_2);

  uVar2 = FUN_006157a0();

  uVar3 = FUN_006157a0();

  uVar4 = FUN_006157a0();

  uVar1 = (undefined4)uVar4;

  uVar9 = (undefined4)((ulonglong)uVar4 >> 0x20);

  uVar4 = CONCAT44((int)uVar3,(int)uVar3);

  uVar12 = (undefined4)((ulonglong)uVar3 >> 0x20);

  uVar10 = CONCAT44(uVar12,uVar12);

  uVar3 = PackedFloatingMUL(CONCAT44(uVar1,uVar1) ^ DAT_007f2fd8,uVar10);

  uVar5 = PackedFloatingMUL(CONCAT44(uVar1,uVar1),uVar4);

  uVar7 = PackedFloatingMUL(CONCAT44(uVar9,uVar9),uVar4);

  uVar10 = PackedFloatingMUL(CONCAT44(uVar9,uVar9) ^ DAT_007f2fd8 >> 0x20,uVar10);

  uVar11 = CONCAT44((int)uVar2,(int)((ulonglong)uVar2 >> 0x20));

  uVar3 = PackedFloatingMUL(uVar3,uVar2);

  uVar4 = PackedFloatingMUL(uVar5,uVar11);

  uVar5 = PackedFloatingMUL(uVar7,uVar11);

  uVar7 = PackedFloatingMUL(uVar10,uVar2);

  uVar2 = PackedFloatingADD(uVar3,uVar5);

  uVar5 = PackedFloatingADD(uVar4,uVar7);

  uVar3 = PackedFloatingADD(uVar2,uVar2);

  uVar4 = PackedFloatingADD(uVar5,uVar5);

  uVar1 = (undefined4)((ulonglong)uVar2 >> 0x20);

  uVar9 = (undefined4)((ulonglong)uVar5 >> 0x20);

  uVar10 = CONCAT44(uVar9,uVar9);

  uVar7 = PackedFloatingMUL(uVar2,uVar3);

  uVar2 = CONCAT44((int)uVar3,(int)uVar4);

  uVar11 = PackedFloatingMUL(uVar3,uVar10);

  uVar5 = PackedFloatingMUL(CONCAT44((int)uVar5,(int)uVar5),uVar2);

  uVar3 = PackedFloatingMUL(uVar2,CONCAT44(uVar1,uVar1));

  uVar2 = PackedFloatingMUL(uVar2,uVar10);

  uVar4 = CONCAT44((int)((ulonglong)uVar5 >> 0x20),(int)((ulonglong)uVar3 >> 0x20));

  param_1[6] = 0;

  uVar10 = PackedFloatingADD(CONCAT44((int)uVar5,(int)uVar5),uVar7);

  uVar5 = PackedFloatingAccumulate(uVar7,uVar7);

  uVar2 = CONCAT44((int)((ulonglong)uVar11 >> 0x20),(int)uVar2);

  uVar6 = PackedFloatingSUBR(uVar5,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

  uVar7 = PackedFloatingSUBR(uVar10,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

  uVar5 = PackedFloatingADD(uVar4,uVar2);

  param_1[5] = uVar6 & 0xffffffff;

  uVar8 = PackedFloatingSUB(uVar4,uVar2);

  uVar6 = PackedFloatingADD(uVar3,uVar11);

  uVar2 = PackedFloatingSUB(uVar3,uVar11);

  param_1[3] = uVar6 & 0xffffffff;

  uVar6 = (ulonglong)DAT_007f2fb8;

  param_1[1] = uVar8 >> 0x20;

  param_1[2] = CONCAT44((int)uVar7,(int)uVar8);

  *param_1 = CONCAT44((int)uVar5,(int)((ulonglong)uVar7 >> 0x20));

  param_1[4] = CONCAT44((int)uVar2,(int)((ulonglong)uVar5 >> 0x20));

  param_1[7] = uVar6 << 0x20;

  FastExitMediaState();

  return;

}





// --- FUN_0060ec63 at 0x0060EC63 (size: 283) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060ec63(undefined8 *param_1,undefined8 *param_2)



{

  undefined8 uVar1;

  undefined8 uVar2;

  undefined8 uVar3;

  ulonglong uVar4;

  undefined8 uVar5;

  undefined8 uVar6;

  undefined8 uVar7;

  ulonglong uVar8;

  undefined4 uVar9;

  undefined8 local_20;

  uint local_18;

  

  local_20 = *param_2;

  local_18 = *(uint *)(param_2 + 1);

  FUN_00610a40(&local_20,&local_20);

  uVar1 = FUN_006157a0();

  uVar2 = PackedFloatingSUBR(uVar1,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

  uVar9 = (undefined4)((ulonglong)uVar1 >> 0x20);

  uVar4 = (ulonglong)local_18;

  uVar5 = PackedFloatingMUL(CONCAT44(local_18,local_18),local_20);

  uVar2 = CONCAT44((int)uVar2,(int)uVar2);

  uVar3 = PackedFloatingMUL(CONCAT44(local_18,(int)((ulonglong)local_20 >> 0x20)),local_20);

  uVar1 = CONCAT44((int)uVar1,(int)uVar1);

  uVar3 = PackedFloatingMUL(uVar3,uVar2);

  uVar5 = PackedFloatingMUL(uVar5,uVar2);

  uVar6 = PackedFloatingMUL(local_20,local_20);

  uVar7 = PackedFloatingMUL(uVar4,uVar4);

  uVar6 = PackedFloatingMUL(uVar6,uVar2);

  uVar7 = PackedFloatingMUL(uVar7,uVar2);

  uVar2 = PackedFloatingADD(uVar6,uVar1);

  uVar8 = PackedFloatingADD(uVar7,uVar1);

  uVar1 = CONCAT44(uVar9,uVar9);

  uVar6 = PackedFloatingMUL(local_20,uVar1);

  uVar1 = PackedFloatingMUL(uVar4,uVar1);

  param_1[6] = 0;

  uVar7 = CONCAT44((int)uVar6,(int)uVar1);

  uVar9 = (undefined4)((ulonglong)uVar6 >> 0x20);

  uVar6 = CONCAT44(uVar9,uVar9);

  param_1[5] = uVar8 & 0xffffffff;

  uVar1 = PackedFloatingSUB(uVar3,uVar7);

  uVar8 = PackedFloatingADD(uVar3,uVar7);

  uVar4 = PackedFloatingSUB(uVar5,uVar6);

  *param_1 = CONCAT44((int)uVar8,(int)uVar2);

  param_1[1] = uVar4 & 0xffffffff;

  uVar4 = (ulonglong)_DAT_007f2fbc;

  uVar3 = PackedFloatingADD(CONCAT44((int)uVar5,(int)uVar5),uVar6);

  param_1[3] = uVar8 >> 0x20;

  param_1[7] = uVar4 << 0x20;

  param_1[4] = CONCAT44((int)((ulonglong)uVar1 >> 0x20),(int)((ulonglong)uVar3 >> 0x20));

  param_1[2] = CONCAT44((int)((ulonglong)uVar2 >> 0x20),(int)uVar1);

  FastExitMediaState();

  return;

}





// --- FUN_0060ed7e at 0x0060ED7E (size: 4536) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060ed7e(ulonglong *param_1,undefined8 *param_2,undefined8 *param_3,ulonglong *param_4,

                 undefined8 *param_5,undefined8 *param_6,undefined8 *param_7)



{

  undefined4 uVar1;

  undefined8 uVar2;

  undefined8 uVar3;

  undefined8 uVar4;

  undefined4 uVar5;

  undefined4 uVar6;

  undefined8 uVar7;

  ulonglong uVar8;

  undefined8 in_MM2;

  ulonglong uVar9;

  undefined8 uVar10;

  ulonglong uVar11;

  ulonglong uVar12;

  ulonglong uVar13;

  uint uVar14;

  ulonglong in_MM3;

  undefined8 uVar15;

  undefined8 uVar16;

  ulonglong uVar17;

  ulonglong uVar18;

  ulonglong uVar19;

  undefined8 uVar20;

  ulonglong uVar21;

  undefined8 uVar22;

  ulonglong uVar23;

  ulonglong uVar24;

  longlong lVar25;

  undefined8 uVar26;

  undefined8 uVar27;

  undefined4 uVar29;

  undefined8 uVar28;

  undefined4 uVar30;

  longlong lVar31;

  ulonglong uVar32;

  

  uVar18 = DAT_007f2f98;

  if (param_4 == (ulonglong *)0x0) {

    uVar18 = (ulonglong)DAT_007f2fa8;

    uVar32 = PackedSwapDWords(in_MM2,uVar18);

    *param_1 = uVar18;

    param_1[1] = 0;

    param_1[2] = uVar32;

    param_1[3] = 0;

    param_1[4] = 0;

    param_1[5] = uVar18;

    param_1[6] = 0;

    param_1[7] = uVar32;

  }

  else if (param_3 == (undefined8 *)0x0) {

    if (param_2 == (undefined8 *)0x0) {

      in_MM3 = *param_4;

      uVar32 = param_4[1];

      *param_1 = in_MM3 & 0xffffffff;

      param_1[1] = 0;

      param_1[2] = in_MM3 & 0xffffffff00000000;

      param_1[3] = 0;

      param_1[4] = 0;

      param_1[5] = (ulonglong)(uint)uVar32;

      param_1[6] = 0;

      param_1[7] = uVar18;

    }

    else {

      uVar20 = CONCAT44(_DAT_007f2fbc,DAT_007f2fb8);

      uVar4 = *param_2;

      uVar18 = *param_4;

      in_MM3 = (ulonglong)(uint)param_4[1];

      uVar3 = CONCAT44(DAT_007f2fb8,*(undefined4 *)(param_2 + 1));

      uVar2 = PackedFloatingSUB(uVar20,uVar18);

      param_1[5] = in_MM3;

      uVar20 = PackedFloatingSUB(uVar20,in_MM3);

      param_1[1] = 0;

      param_1[3] = 0;

      param_1[4] = 0;

      uVar32 = PackedFloatingMUL(uVar2,uVar4);

      uVar13 = PackedFloatingMUL(uVar20,uVar3);

      *param_1 = uVar18 & 0xffffffff;

      param_1[2] = uVar18 & 0xffffffff00000000;

      param_1[6] = uVar32;

      param_1[7] = uVar13;

    }

  }

  else {

    uVar32 = *param_4;

    uVar19 = (ulonglong)(uint)param_4[1];

    uVar9 = uVar32 & 0xffffffff;

    uVar23 = uVar32 & 0xffffffff00000000;

    uVar4 = *param_3;

    uVar20 = param_3[1];

    uVar15 = PackedSwapDWords(uVar32,uVar4);

    uVar2 = PackedFloatingADD(uVar4,uVar4);

    uVar7 = PackedFloatingADD(uVar20,uVar20);

    uVar3 = PackedFloatingMUL(uVar2,uVar4);

    uVar10 = PackedFloatingMUL(uVar4,uVar7);

    uVar16 = PackedFloatingMUL(uVar15,uVar7);

    uVar15 = PackedFloatingMUL(uVar7,uVar20);

    uVar2 = PackedFloatingMUL(CONCAT44((int)((ulonglong)uVar20 >> 0x20),

                                       (int)((ulonglong)uVar4 >> 0x20)),

                              CONCAT44((int)uVar7,(int)uVar2));

    uVar4 = PackedFloatingSUBR(uVar3,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

    uVar17 = PackedFloatingPosNegAccumulate(uVar16,uVar16);

    uVar20 = PackedFloatingAccumulate(uVar3,uVar3);

    uVar3 = PackedFloatingPosNegAccumulate(uVar2,uVar2);

    uVar11 = PackedFloatingPosNegAccumulate(uVar10,uVar10);

    uVar4 = PackedFloatingSUB(uVar4,CONCAT44((int)uVar15,(int)uVar15));

    uVar24 = PackedSwapDWords(uVar15,uVar11);

    uVar21 = PackedFloatingSUBR(uVar20,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

    uVar2 = CONCAT44((int)uVar17,(int)uVar24);

    uVar12 = uVar11 & 0xffffffff;

    uVar32 = uVar21 >> 0x20;

    uVar5 = (undefined4)((ulonglong)uVar4 >> 0x20);

    uVar29 = (undefined4)((ulonglong)uVar3 >> 0x20);

    uVar20 = CONCAT44(uVar29,uVar5);

    uVar13 = uVar17 >> 0x20;

    uVar6 = (undefined4)uVar4;

    uVar1 = (undefined4)uVar3;

    uVar4 = CONCAT44(uVar6,uVar1);

    uVar8 = (ulonglong)DAT_007f2fb8;

    lVar31 = uVar8 << 0x20;

    uVar30 = (undefined4)(uVar17 >> 0x20);

    uVar14 = (uint)(uVar21 >> 0x20);

    if (param_2 == (undefined8 *)0x0) {

      *param_1 = CONCAT44(uVar1,uVar5);

      param_1[2] = CONCAT44(uVar6,uVar29);

      param_1[5] = (ulonglong)uVar14;

      param_1[7] = uVar8 << 0x20;

      param_1[4] = CONCAT44(uVar30,(int)uVar11);

      param_1[6] = 0;

      param_1[3] = uVar17 & 0xffffffff;

      param_1[1] = uVar24 & 0xffffffff;

      uVar5 = (undefined4)(*param_1 >> 0x20);

      uVar6 = (undefined4)(param_1[1] >> 0x20);

      uVar1 = (undefined4)*param_1;

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[1];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar9,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,0);

      uVar27 = PackedFloatingMUL(uVar23,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,0);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(0,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar19);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,uVar18);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      *param_1 = uVar17;

      param_1[1] = uVar8;

      uVar5 = (undefined4)(param_1[2] >> 0x20);

      uVar6 = (undefined4)(param_1[3] >> 0x20);

      uVar1 = (undefined4)param_1[2];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[3];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar9,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,0);

      uVar27 = PackedFloatingMUL(uVar23,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,0);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(0,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar19);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,uVar18);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[2] = uVar17;

      param_1[3] = uVar8;

      uVar5 = (undefined4)(param_1[4] >> 0x20);

      uVar6 = (undefined4)(param_1[5] >> 0x20);

      uVar1 = (undefined4)param_1[4];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[5];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar9,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,0);

      uVar27 = PackedFloatingMUL(uVar23,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,0);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(0,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar19);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,uVar18);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[4] = uVar17;

      param_1[5] = uVar8;

      uVar5 = (undefined4)(param_1[6] >> 0x20);

      uVar6 = (undefined4)(param_1[7] >> 0x20);

      uVar1 = (undefined4)param_1[6];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[7];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar9,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,0);

      uVar27 = PackedFloatingMUL(uVar23,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,0);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(0,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar19);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,uVar18);

      uVar8 = PackedFloatingADD(uVar16,uVar10);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      param_1[6] = uVar8;

      param_1[7] = uVar18;

      uVar5 = (undefined4)(*param_1 >> 0x20);

      uVar6 = (undefined4)(param_1[1] >> 0x20);

      uVar1 = (undefined4)*param_1;

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[1];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar12);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar13);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar32);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar8 = PackedFloatingADD(uVar16,uVar10);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      *param_1 = uVar8;

      param_1[1] = uVar18;

      uVar5 = (undefined4)(param_1[2] >> 0x20);

      uVar6 = (undefined4)(param_1[3] >> 0x20);

      uVar1 = (undefined4)param_1[2];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[3];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar12);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar13);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar32);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar8 = PackedFloatingADD(uVar16,uVar10);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      param_1[2] = uVar8;

      param_1[3] = uVar18;

      uVar5 = (undefined4)(param_1[4] >> 0x20);

      uVar6 = (undefined4)(param_1[5] >> 0x20);

      uVar1 = (undefined4)param_1[4];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[5];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar12);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar13);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar32);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar8 = PackedFloatingADD(uVar16,uVar10);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      param_1[4] = uVar8;

      param_1[5] = uVar18;

      uVar5 = (undefined4)(param_1[6] >> 0x20);

      uVar6 = (undefined4)(param_1[7] >> 0x20);

      uVar1 = (undefined4)param_1[6];

      uVar3 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[7];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar15 = PackedFloatingMUL(uVar20,uVar3);

      uVar20 = CONCAT44(uVar5,uVar5);

      uVar3 = PackedFloatingMUL(uVar3,uVar12);

      uVar10 = PackedFloatingMUL(uVar4,uVar20);

      uVar4 = CONCAT44(uVar6,uVar6);

      uVar20 = PackedFloatingMUL(uVar20,uVar13);

      uVar15 = PackedFloatingADD(uVar10,uVar15);

      uVar10 = PackedFloatingMUL(uVar2,uVar7);

      uVar2 = PackedFloatingADD(uVar20,uVar3);

      uVar20 = PackedFloatingMUL(uVar7,uVar32);

      uVar3 = PackedFloatingADD(uVar10,uVar15);

      uVar7 = PackedFloatingMUL(0,uVar4);

      uVar20 = PackedFloatingADD(uVar2,uVar20);

      uVar4 = PackedFloatingMUL(uVar4,lVar31);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      in_MM3 = PackedFloatingADD(uVar4,uVar20);

      param_1[6] = uVar18;

      param_1[7] = in_MM3;

    }

    else {

      uVar15 = CONCAT44(uVar1,uVar5);

      uVar27 = CONCAT44(uVar6,uVar29);

      uVar21 = (ulonglong)uVar14;

      lVar25 = (ulonglong)DAT_007f2fb8 << 0x20;

      uVar28 = CONCAT44(uVar30,(int)uVar11);

      uVar17 = uVar17 & 0xffffffff;

      uVar24 = uVar24 & 0xffffffff;

      uVar3 = *param_2;

      uVar14 = *(uint *)(param_2 + 1);

      uVar8 = (ulonglong)DAT_007f2fa8;

      uVar11 = PackedSwapDWords(uVar24,uVar8);

      *param_1 = uVar8;

      param_1[1] = 0;

      param_1[2] = uVar11;

      param_1[3] = 0;

      param_1[4] = 0;

      param_1[5] = uVar8;

      uVar11 = PackedFloatingSUB(uVar11,(ulonglong)uVar14);

      uVar8 = PackedFloatingSUB(0,uVar3);

      param_1[7] = uVar11;

      param_1[6] = uVar8;

      uVar5 = (undefined4)(*param_1 >> 0x20);

      uVar6 = (undefined4)(param_1[1] >> 0x20);

      uVar1 = (undefined4)*param_1;

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[1];

      uVar16 = CONCAT44(uVar1,uVar1);

      uVar22 = PackedFloatingMUL(uVar15,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar10 = PackedFloatingMUL(uVar7,uVar24);

      uVar26 = PackedFloatingMUL(uVar27,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar17);

      uVar22 = PackedFloatingADD(uVar26,uVar22);

      uVar26 = PackedFloatingMUL(uVar28,uVar16);

      uVar10 = PackedFloatingADD(uVar3,uVar10);

      uVar3 = PackedFloatingMUL(uVar16,uVar21);

      uVar16 = PackedFloatingADD(uVar26,uVar22);

      uVar22 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar10,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar25);

      uVar11 = PackedFloatingADD(uVar22,uVar16);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      *param_1 = uVar11;

      param_1[1] = uVar8;

      uVar5 = (undefined4)(param_1[2] >> 0x20);

      uVar6 = (undefined4)(param_1[3] >> 0x20);

      uVar1 = (undefined4)param_1[2];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[3];

      uVar16 = CONCAT44(uVar1,uVar1);

      uVar22 = PackedFloatingMUL(uVar15,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar10 = PackedFloatingMUL(uVar7,uVar24);

      uVar26 = PackedFloatingMUL(uVar27,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar17);

      uVar22 = PackedFloatingADD(uVar26,uVar22);

      uVar26 = PackedFloatingMUL(uVar28,uVar16);

      uVar10 = PackedFloatingADD(uVar3,uVar10);

      uVar3 = PackedFloatingMUL(uVar16,uVar21);

      uVar16 = PackedFloatingADD(uVar26,uVar22);

      uVar22 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar10,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar25);

      uVar11 = PackedFloatingADD(uVar22,uVar16);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[2] = uVar11;

      param_1[3] = uVar8;

      uVar5 = (undefined4)(param_1[4] >> 0x20);

      uVar6 = (undefined4)(param_1[5] >> 0x20);

      uVar1 = (undefined4)param_1[4];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[5];

      uVar16 = CONCAT44(uVar1,uVar1);

      uVar22 = PackedFloatingMUL(uVar15,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar10 = PackedFloatingMUL(uVar7,uVar24);

      uVar26 = PackedFloatingMUL(uVar27,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar17);

      uVar22 = PackedFloatingADD(uVar26,uVar22);

      uVar26 = PackedFloatingMUL(uVar28,uVar16);

      uVar10 = PackedFloatingADD(uVar3,uVar10);

      uVar3 = PackedFloatingMUL(uVar16,uVar21);

      uVar16 = PackedFloatingADD(uVar26,uVar22);

      uVar22 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar10,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar25);

      uVar11 = PackedFloatingADD(uVar22,uVar16);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[4] = uVar11;

      param_1[5] = uVar8;

      uVar5 = (undefined4)(param_1[6] >> 0x20);

      uVar6 = (undefined4)(param_1[7] >> 0x20);

      uVar1 = (undefined4)param_1[6];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[7];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar15,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar24);

      uVar27 = PackedFloatingMUL(uVar27,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar17);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar28,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar21);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar25);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[6] = uVar17;

      param_1[7] = uVar8;

      uVar5 = (undefined4)(*param_1 >> 0x20);

      uVar6 = (undefined4)(param_1[1] >> 0x20);

      uVar1 = (undefined4)*param_1;

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[1];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar9,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,0);

      uVar27 = PackedFloatingMUL(uVar23,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,0);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(0,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar19);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,uVar18);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      *param_1 = uVar17;

      param_1[1] = uVar8;

      uVar5 = (undefined4)(param_1[2] >> 0x20);

      uVar6 = (undefined4)(param_1[3] >> 0x20);

      uVar1 = (undefined4)param_1[2];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[3];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar9,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,0);

      uVar27 = PackedFloatingMUL(uVar23,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,0);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(0,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar19);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,uVar18);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[2] = uVar17;

      param_1[3] = uVar8;

      uVar5 = (undefined4)(param_1[4] >> 0x20);

      uVar6 = (undefined4)(param_1[5] >> 0x20);

      uVar1 = (undefined4)param_1[4];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[5];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar9,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,0);

      uVar27 = PackedFloatingMUL(uVar23,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,0);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(0,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar19);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,uVar18);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[4] = uVar17;

      param_1[5] = uVar8;

      uVar5 = (undefined4)(param_1[6] >> 0x20);

      uVar6 = (undefined4)(param_1[7] >> 0x20);

      uVar1 = (undefined4)param_1[6];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[7];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar9,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,0);

      uVar27 = PackedFloatingMUL(uVar23,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,0);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(0,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar19);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,uVar18);

      uVar8 = PackedFloatingADD(uVar16,uVar10);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      param_1[6] = uVar8;

      param_1[7] = uVar18;

      uVar5 = (undefined4)(*param_1 >> 0x20);

      uVar6 = (undefined4)(param_1[1] >> 0x20);

      uVar1 = (undefined4)*param_1;

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[1];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar12);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar13);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar32);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar8 = PackedFloatingADD(uVar16,uVar10);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      *param_1 = uVar8;

      param_1[1] = uVar18;

      uVar5 = (undefined4)(param_1[2] >> 0x20);

      uVar6 = (undefined4)(param_1[3] >> 0x20);

      uVar1 = (undefined4)param_1[2];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[3];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar12);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar13);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar32);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar8 = PackedFloatingADD(uVar16,uVar10);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      param_1[2] = uVar8;

      param_1[3] = uVar18;

      uVar5 = (undefined4)(param_1[4] >> 0x20);

      uVar6 = (undefined4)(param_1[5] >> 0x20);

      uVar1 = (undefined4)param_1[4];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[5];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar12);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar13);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar32);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar8 = PackedFloatingADD(uVar16,uVar10);

      uVar18 = PackedFloatingADD(uVar7,uVar3);

      param_1[4] = uVar8;

      param_1[5] = uVar18;

      uVar5 = (undefined4)(param_1[6] >> 0x20);

      uVar6 = (undefined4)(param_1[7] >> 0x20);

      uVar1 = (undefined4)param_1[6];

      uVar3 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[7];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar15 = PackedFloatingMUL(uVar20,uVar3);

      uVar20 = CONCAT44(uVar5,uVar5);

      uVar3 = PackedFloatingMUL(uVar3,uVar12);

      uVar10 = PackedFloatingMUL(uVar4,uVar20);

      uVar4 = CONCAT44(uVar6,uVar6);

      uVar20 = PackedFloatingMUL(uVar20,uVar13);

      uVar15 = PackedFloatingADD(uVar10,uVar15);

      uVar10 = PackedFloatingMUL(uVar2,uVar7);

      uVar2 = PackedFloatingADD(uVar20,uVar3);

      uVar20 = PackedFloatingMUL(uVar7,uVar32);

      uVar3 = PackedFloatingADD(uVar10,uVar15);

      uVar7 = PackedFloatingMUL(0,uVar4);

      uVar20 = PackedFloatingADD(uVar2,uVar20);

      uVar4 = PackedFloatingMUL(uVar4,lVar31);

      uVar32 = PackedFloatingADD(uVar7,uVar3);

      uVar18 = PackedFloatingADD(uVar4,uVar20);

      param_1[6] = uVar32;

      param_1[7] = uVar18;

      in_MM3 = (ulonglong)(uint)param_1[7];

      uVar18 = PackedFloatingADD(*param_2,param_1[6]);

      uVar4 = PackedFloatingADD((ulonglong)*(uint *)(param_2 + 1),in_MM3);

      param_1[6] = uVar18;

      *(int *)(param_1 + 7) = (int)uVar4;

    }

  }

  if (param_6 != (undefined8 *)0x0) {

    uVar4 = *param_6;

    uVar20 = param_6[1];

    uVar15 = PackedSwapDWords(in_MM3,uVar4);

    uVar2 = PackedFloatingADD(uVar4,uVar4);

    uVar7 = PackedFloatingADD(uVar20,uVar20);

    uVar3 = PackedFloatingMUL(uVar2,uVar4);

    uVar10 = PackedFloatingMUL(uVar4,uVar7);

    uVar16 = PackedFloatingMUL(uVar15,uVar7);

    uVar15 = PackedFloatingMUL(uVar7,uVar20);

    uVar2 = PackedFloatingMUL(CONCAT44((int)((ulonglong)uVar20 >> 0x20),

                                       (int)((ulonglong)uVar4 >> 0x20)),

                              CONCAT44((int)uVar7,(int)uVar2));

    uVar4 = PackedFloatingSUBR(uVar3,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

    uVar32 = PackedFloatingPosNegAccumulate(uVar16,uVar16);

    uVar20 = PackedFloatingAccumulate(uVar3,uVar3);

    uVar3 = PackedFloatingPosNegAccumulate(uVar2,uVar2);

    uVar13 = PackedFloatingPosNegAccumulate(uVar10,uVar10);

    uVar4 = PackedFloatingSUB(uVar4,CONCAT44((int)uVar15,(int)uVar15));

    uVar2 = PackedSwapDWords(uVar15,uVar13);

    uVar18 = PackedFloatingSUBR(uVar20,CONCAT44(_DAT_007f2fbc,DAT_007f2fb8));

    uVar2 = CONCAT44((int)uVar32,(int)uVar2);

    uVar13 = uVar13 & 0xffffffff;

    uVar18 = uVar18 >> 0x20;

    uVar20 = CONCAT44((int)((ulonglong)uVar3 >> 0x20),(int)((ulonglong)uVar4 >> 0x20));

    uVar32 = uVar32 >> 0x20;

    uVar4 = CONCAT44((int)uVar4,(int)uVar3);

    lVar31 = (ulonglong)DAT_007f2fb8 << 0x20;

    if (param_5 == (undefined8 *)0x0) {

      uVar5 = (undefined4)(*param_1 >> 0x20);

      uVar6 = (undefined4)(param_1[1] >> 0x20);

      uVar1 = (undefined4)*param_1;

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[1];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar13);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar32);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar18);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      *param_1 = uVar17;

      param_1[1] = uVar8;

      uVar5 = (undefined4)(param_1[2] >> 0x20);

      uVar6 = (undefined4)(param_1[3] >> 0x20);

      uVar1 = (undefined4)param_1[2];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[3];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar13);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar32);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar18);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[2] = uVar17;

      param_1[3] = uVar8;

      uVar5 = (undefined4)(param_1[4] >> 0x20);

      uVar6 = (undefined4)(param_1[5] >> 0x20);

      uVar1 = (undefined4)param_1[4];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[5];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar13);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar32);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar18);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[4] = uVar17;

      param_1[5] = uVar8;

      uVar5 = (undefined4)(param_1[6] >> 0x20);

      uVar6 = (undefined4)(param_1[7] >> 0x20);

      uVar1 = (undefined4)param_1[6];

      uVar3 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[7];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar15 = PackedFloatingMUL(uVar20,uVar3);

      uVar20 = CONCAT44(uVar5,uVar5);

      uVar3 = PackedFloatingMUL(uVar3,uVar13);

      uVar10 = PackedFloatingMUL(uVar4,uVar20);

      uVar4 = CONCAT44(uVar6,uVar6);

      uVar20 = PackedFloatingMUL(uVar20,uVar32);

      uVar15 = PackedFloatingADD(uVar10,uVar15);

      uVar10 = PackedFloatingMUL(uVar2,uVar7);

      uVar2 = PackedFloatingADD(uVar20,uVar3);

      uVar20 = PackedFloatingMUL(uVar7,uVar18);

      uVar3 = PackedFloatingADD(uVar10,uVar15);

      uVar7 = PackedFloatingMUL(0,uVar4);

      uVar20 = PackedFloatingADD(uVar2,uVar20);

      uVar4 = PackedFloatingMUL(uVar4,lVar31);

      uVar32 = PackedFloatingADD(uVar7,uVar3);

      uVar18 = PackedFloatingADD(uVar4,uVar20);

      param_1[6] = uVar32;

      param_1[7] = uVar18;

    }

    else {

      uVar8 = PackedFloatingSUB(param_1[6],*param_5);

      uVar3 = PackedFloatingSUB((ulonglong)(uint)param_1[7],(ulonglong)*(uint *)(param_5 + 1));

      param_1[6] = uVar8;

      *(int *)(param_1 + 7) = (int)uVar3;

      uVar5 = (undefined4)(*param_1 >> 0x20);

      uVar6 = (undefined4)(param_1[1] >> 0x20);

      uVar1 = (undefined4)*param_1;

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[1];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar13);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar32);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar18);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      *param_1 = uVar17;

      param_1[1] = uVar8;

      uVar5 = (undefined4)(param_1[2] >> 0x20);

      uVar6 = (undefined4)(param_1[3] >> 0x20);

      uVar1 = (undefined4)param_1[2];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[3];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar13);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar32);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar18);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[2] = uVar17;

      param_1[3] = uVar8;

      uVar5 = (undefined4)(param_1[4] >> 0x20);

      uVar6 = (undefined4)(param_1[5] >> 0x20);

      uVar1 = (undefined4)param_1[4];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[5];

      uVar10 = CONCAT44(uVar1,uVar1);

      uVar16 = PackedFloatingMUL(uVar20,uVar7);

      uVar3 = CONCAT44(uVar5,uVar5);

      uVar15 = PackedFloatingMUL(uVar7,uVar13);

      uVar27 = PackedFloatingMUL(uVar4,uVar3);

      uVar7 = CONCAT44(uVar6,uVar6);

      uVar3 = PackedFloatingMUL(uVar3,uVar32);

      uVar16 = PackedFloatingADD(uVar27,uVar16);

      uVar27 = PackedFloatingMUL(uVar2,uVar10);

      uVar15 = PackedFloatingADD(uVar3,uVar15);

      uVar3 = PackedFloatingMUL(uVar10,uVar18);

      uVar10 = PackedFloatingADD(uVar27,uVar16);

      uVar16 = PackedFloatingMUL(0,uVar7);

      uVar3 = PackedFloatingADD(uVar15,uVar3);

      uVar7 = PackedFloatingMUL(uVar7,lVar31);

      uVar17 = PackedFloatingADD(uVar16,uVar10);

      uVar8 = PackedFloatingADD(uVar7,uVar3);

      param_1[4] = uVar17;

      param_1[5] = uVar8;

      uVar5 = (undefined4)(param_1[6] >> 0x20);

      uVar6 = (undefined4)(param_1[7] >> 0x20);

      uVar1 = (undefined4)param_1[6];

      uVar3 = CONCAT44(uVar1,uVar1);

      uVar1 = (undefined4)param_1[7];

      uVar7 = CONCAT44(uVar1,uVar1);

      uVar15 = PackedFloatingMUL(uVar20,uVar3);

      uVar20 = CONCAT44(uVar5,uVar5);

      uVar3 = PackedFloatingMUL(uVar3,uVar13);

      uVar10 = PackedFloatingMUL(uVar4,uVar20);

      uVar4 = CONCAT44(uVar6,uVar6);

      uVar20 = PackedFloatingMUL(uVar20,uVar32);

      uVar15 = PackedFloatingADD(uVar10,uVar15);

      uVar10 = PackedFloatingMUL(uVar2,uVar7);

      uVar2 = PackedFloatingADD(uVar20,uVar3);

      uVar20 = PackedFloatingMUL(uVar7,uVar18);

      uVar3 = PackedFloatingADD(uVar10,uVar15);

      uVar7 = PackedFloatingMUL(0,uVar4);

      uVar20 = PackedFloatingADD(uVar2,uVar20);

      uVar4 = PackedFloatingMUL(uVar4,lVar31);

      uVar32 = PackedFloatingADD(uVar7,uVar3);

      uVar18 = PackedFloatingADD(uVar4,uVar20);

      param_1[6] = uVar32;

      param_1[7] = uVar18;

      uVar18 = PackedFloatingADD(param_1[6],*param_5);

      uVar4 = PackedFloatingADD((ulonglong)(uint)param_1[7],(ulonglong)*(uint *)(param_5 + 1));

      param_1[6] = uVar18;

      *(int *)(param_1 + 7) = (int)uVar4;

    }

  }

  if (param_7 != (undefined8 *)0x0) {

    uVar18 = PackedFloatingADD(param_1[6],*param_7);

    uVar4 = PackedFloatingADD((ulonglong)(uint)param_1[7],(ulonglong)*(uint *)(param_7 + 1));

    param_1[6] = uVar18;

    *(int *)(param_1 + 7) = (int)uVar4;

  }

  FastExitMediaState();

  return;

}





// --- FUN_0060ff36 at 0x0060FF36 (size: 738) ---


/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */



void FUN_0060ff36(undefined8 *param_1,undefined4 *param_2,undefined8 *param_3)



{

  undefined8 uVar1;

  undefined8 uVar2;

  undefined8 uVar3;

  undefined4 uVar4;

  undefined4 uVar5;

  undefined4 uVar6;

  undefined4 uVar7;

  undefined8 in_MM4;

  undefined8 uVar8;

  undefined4 uVar10;

  undefined8 uVar9;

  undefined8 in_MM5;

  undefined8 uVar11;

  undefined8 uVar12;

  undefined8 uVar13;

  undefined8 in_MM6;

  undefined8 uVar14;

  undefined8 uVar15;

  undefined8 uVar16;

  undefined8 in_MM7;

  undefined8 uVar17;

  undefined4 uStack_2c;

  

  uVar2 = param_3[2];

  uVar3 = param_3[4];

  uVar11 = PackedSwapDWords(in_MM5,uVar2);

  uVar8 = PackedSwapDWords(in_MM4,uVar3);

  uVar1 = *param_3;

  uVar14 = PackedSwapDWords(in_MM6,param_3[6]);

  uVar17 = PackedSwapDWords(in_MM7,uVar3);

  uVar11 = PackedFloatingMUL(uVar11,uVar1);

  uVar8 = PackedFloatingMUL(uVar8,uVar1);

  uVar14 = PackedFloatingMUL(uVar14,uVar1);

  uVar1 = PackedSwapDWords(uVar1,param_3[6]);

  uVar17 = PackedFloatingMUL(uVar17,uVar2);

  uVar12 = PackedFloatingNegAccumulate(uVar11,uVar8);

  uVar2 = PackedFloatingMUL(uVar2,uVar1);

  uVar3 = PackedFloatingMUL(uVar3,uVar1);

  uVar17 = PackedFloatingNegAccumulate(uVar14,uVar17);

  uVar1 = PackedFloatingNegAccumulate(uVar2,uVar3);

  uVar2 = param_3[7];

  uVar3 = param_3[5];

  uVar4 = (undefined4)((ulonglong)uVar17 >> 0x20);

  uVar10 = (undefined4)((ulonglong)uVar1 >> 0x20);

  uVar8 = PackedFloatingMUL(CONCAT44(uVar4,uVar4),uVar2);

  uVar6 = (undefined4)uVar1;

  uVar1 = PackedFloatingMUL(CONCAT44(uVar10,uVar10),param_3[3]);

  uVar11 = PackedFloatingMUL(CONCAT44(uVar6,uVar6),uVar3);

  uVar1 = PackedFloatingADD(uVar8,uVar1);

  uVar14 = PackedFloatingSUB(uVar1,uVar11);

  uVar7 = (undefined4)uVar17;

  uVar5 = (undefined4)((ulonglong)uVar12 >> 0x20);

  uVar8 = PackedFloatingMUL(CONCAT44(uVar10,uVar10),param_3[1]);

  uVar1 = PackedFloatingMUL(CONCAT44(uVar5,uVar5),uVar2);

  uVar9 = PackedFloatingMUL(CONCAT44(uVar7,uVar7),uVar3);

  uVar1 = PackedFloatingSUB(uVar1,uVar9);

  uVar17 = PackedFloatingADD(uVar1,uVar8);

  uVar8 = CONCAT44((int)uVar12,(int)uVar12);

  uVar1 = PackedFloatingMUL(CONCAT44(uVar6,uVar6),param_3[1]);

  uVar2 = PackedFloatingMUL(uVar2,uVar8);

  uVar11 = PackedFloatingMUL(CONCAT44(uVar7,uVar7),param_3[3]);

  uVar2 = PackedFloatingADD(uVar2,uVar1);

  uVar11 = PackedFloatingSUB(uVar2,uVar11);

  uVar1 = PackedFloatingMUL(uVar8,uVar3);

  uVar13 = PackedFloatingMUL(CONCAT44(uVar5,uVar5),param_3[3]);

  uVar2 = param_3[1];

  uVar15 = PackedFloatingMUL(CONCAT44(uVar4,uVar4),param_3[1]);

  uVar1 = PackedFloatingSUB(uVar1,uVar13);

  uVar12 = PackedFloatingADD(uVar1,uVar15);

  uVar1 = param_3[3];

  uVar8 = param_3[5];

  uVar13 = PackedSwapDWords(uVar13,uVar1);

  uVar9 = PackedSwapDWords(uVar9,uVar8);

  uVar13 = PackedFloatingMUL(uVar13,uVar2);

  uVar15 = PackedSwapDWords(uVar15,param_3[7]);

  uVar9 = PackedFloatingMUL(uVar9,uVar2);

  uVar3 = PackedSwapDWords(uVar3,uVar8);

  uVar16 = PackedFloatingMUL(uVar15,uVar2);

  uVar2 = PackedSwapDWords(uVar2,param_3[7]);

  uVar15 = PackedFloatingNegAccumulate(uVar13,uVar9);

  uVar9 = PackedFloatingMUL(uVar3,uVar1);

  uVar3 = PackedFloatingMUL(uVar1,uVar2);

  uVar2 = PackedFloatingMUL(uVar8,uVar2);

  uVar13 = PackedFloatingNegAccumulate(uVar16,uVar9);

  uVar1 = PackedFloatingNegAccumulate(uVar3,uVar2);

  uVar2 = param_3[6];

  uVar3 = param_3[4];

  uVar10 = (undefined4)((ulonglong)uVar1 >> 0x20);

  uVar6 = (undefined4)uVar1;

  uVar4 = (undefined4)((ulonglong)uVar13 >> 0x20);

  uVar9 = PackedFloatingMUL(CONCAT44(uVar10,uVar10),param_3[2]);

  uVar1 = PackedFloatingMUL(CONCAT44(uVar4,uVar4),uVar2);

  uVar8 = PackedFloatingMUL(CONCAT44(uVar6,uVar6),uVar3);

  uVar1 = PackedFloatingADD(uVar1,uVar9);

  uVar9 = PackedFloatingSUB(uVar1,uVar8);

  uVar7 = (undefined4)uVar13;

  uVar5 = (undefined4)((ulonglong)uVar15 >> 0x20);

  uVar8 = PackedFloatingMUL(CONCAT44(uVar10,uVar10),*param_3);

  uVar1 = PackedFloatingMUL(CONCAT44(uVar5,uVar5),uVar2);

  uVar13 = PackedFloatingMUL(CONCAT44(uVar7,uVar7),uVar3);

  uVar1 = PackedFloatingSUB(uVar1,uVar13);

  uVar13 = PackedFloatingADD(uVar1,uVar8);

  uVar15 = CONCAT44((int)uVar15,(int)uVar15);

  uVar8 = PackedFloatingMUL(CONCAT44(uVar6,uVar6),*param_3);

  uVar1 = PackedFloatingMUL(uVar2,uVar15);

  uVar16 = PackedFloatingMUL(CONCAT44(uVar7,uVar7),param_3[2]);

  uVar1 = PackedFloatingADD(uVar1,uVar8);

  uVar1 = PackedFloatingSUB(uVar1,uVar16);

  uVar8 = PackedFloatingMUL(uVar15,uVar3);

  uVar15 = PackedFloatingMUL(CONCAT44(uVar5,uVar5),param_3[2]);

  uVar16 = PackedFloatingMUL(CONCAT44(uVar4,uVar4),*param_3);

  uVar8 = PackedFloatingSUB(uVar8,uVar15);

  uVar15 = PackedFloatingADD(uVar8,uVar16);

  uStack_2c = (undefined4)((ulonglong)uVar13 >> 0x20);

  uVar8 = CONCAT44(uStack_2c,(int)((ulonglong)uVar9 >> 0x20));

  uVar2 = PackedFloatingMUL(CONCAT44((int)((ulonglong)uVar15 >> 0x20),

                                     (int)((ulonglong)uVar1 >> 0x20)),

                            CONCAT44((int)uVar2,(int)uVar3));

  uVar3 = PackedFloatingMUL(CONCAT44(*(undefined4 *)(param_3 + 2),(int)*param_3),uVar8);

  uVar2 = PackedFloatingNegAccumulate(uVar2,uVar3);

  uVar2 = PackedFloatingAccumulate(uVar2,uVar2);

  uVar4 = (undefined4)uVar2;

  if (param_2 != (undefined4 *)0x0) {

    *param_2 = uVar4;

  }

  uVar3 = FloatingReciprocalAprox(uVar8,uVar2);

  uVar8 = PackedFloatingCompareEQ(0,uVar2);

  uVar2 = PackedFloatingReciprocalIter1(CONCAT44(uVar4,uVar4),uVar3);

  uVar2 = PackedFloatingReciprocalIter2(uVar2,uVar3);

  uVar2 = PackedFloatingMUL(uVar2,_DAT_007f2fa8);

  uVar3 = PackedSwapDWords(uVar3,uVar2);

  if ((int)uVar8 == 0) {

    uVar8 = PackedFloatingMUL(uVar9,uVar3);

    uVar9 = PackedFloatingMUL(uVar13,uVar2);

    uVar14 = PackedFloatingMUL(uVar14,uVar3);

    uVar17 = PackedFloatingMUL(uVar17,uVar2);

    *param_1 = CONCAT44((int)((ulonglong)uVar9 >> 0x20),(int)((ulonglong)uVar8 >> 0x20));

    param_1[2] = CONCAT44((int)uVar9,(int)uVar8);

    param_1[4] = CONCAT44((int)((ulonglong)uVar17 >> 0x20),(int)((ulonglong)uVar14 >> 0x20));

    param_1[6] = CONCAT44((int)uVar17,(int)uVar14);

    uVar1 = PackedFloatingMUL(uVar1,uVar3);

    uVar8 = PackedFloatingMUL(uVar15,uVar2);

    uVar3 = PackedFloatingMUL(uVar11,uVar3);

    uVar2 = PackedFloatingMUL(uVar12,uVar2);

    param_1[1] = CONCAT44((int)((ulonglong)uVar8 >> 0x20),(int)((ulonglong)uVar1 >> 0x20));

    param_1[3] = CONCAT44((int)uVar8,(int)uVar1);

    param_1[5] = CONCAT44((int)((ulonglong)uVar2 >> 0x20),(int)((ulonglong)uVar3 >> 0x20));

    param_1[7] = CONCAT44((int)uVar2,(int)uVar3);

  }

  FastExitMediaState();

  return;

}





