// Halo
Texture2D<float4> t0 : register(t0);

SamplerState s0_s : register(s0);

cbuffer cb2 : register(b2)
{
  float4 cb2[21];
}

cbuffer cb1 : register(b1)
{
  float4 cb1[6];
}

cbuffer cb0 : register(b0)
{
  float4 cb0[32];
}




// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
  float4 v0 : POSITION0,
  out float4 o0 : SV_POSITION0,
  out float4 o1 : TEXCOORD0,
  out float4 o2 : TEXCOORD1,
  out float4 o3 : TEXCOORD2,
  out float4 o4 : TEXCOORD3,
  out float3 o5 : TEXCOORD4)
{
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xz = cb0[12].ww * v0.xz + cb0[12].xz;
  r1.xy = float2(0.100000001,0.100000001) * r0.xz;
  r0.w = (int)cb0[31].y;
  r2.x = dot(cb0[15].xy, r1.xy);
  r2.y = dot(cb0[15].zw, r1.xy);
  r1.x = dot(float2(0.866025388,-0.5), r2.xy);
  r1.y = dot(float2(0.5,0.866025388), r2.xy);
  r3.xyz = float3(0.866025388,-0.5,0.5) * cb0[23].xxx;
  r1.zw = r2.xy;
  r4.xy = r1.xy;
  r2.zw = cb0[14].yx;
  r3.w = 0;
  r4.z = 0;
  while (true) {
    r4.w = cmp((int)r4.z >= (int)r0.w);
    if (r4.w != 0) break;
    r5.xy = cb0[22].ww + r1.zw;
    r5.zw = r5.xy * r2.zz;
    r5.zw = floor(r5.zw);
    r6.xy = r5.xy * r2.zz + -r5.zw;
    r6.zw = r6.xy * r6.xy;
    r6.xy = -r6.xy * float2(2,2) + float2(3,3);
    r6.xy = r6.zw * r6.xy;
    r6.zw = float2(0.0625,0.0625) * r5.zw;
    r6.zw = floor(r6.zw);
    r6.zw = -r6.zw * float2(16,16) + r5.zw;
    r4.w = dot(r6.zw, float2(727.122986,659.827026));
    r4.w = 101 * r4.w;
    r4.w = frac(r4.w);
    r7.xyzw = float4(1,0,0,1) + r5.zwzw;
    r8.xyzw = float4(0.0625,0.0625,0.0625,0.0625) * r7.xyzw;
    r8.xyzw = floor(r8.xyzw);
    r7.xyzw = -r8.xyzw * float4(16,16,16,16) + r7.xyzw;
    r6.z = dot(r7.xy, float2(727.122986,659.827026));
    r6.z = 101 * r6.z;
    r6.z = frac(r6.z);
    r6.z = r6.z + -r4.w;
    r4.w = r6.x * r6.z + r4.w;
    r6.z = dot(r7.zw, float2(727.122986,659.827026));
    r6.z = 101 * r6.z;
    r6.z = frac(r6.z);
    r5.zw = float2(1,1) + r5.zw;
    r7.xy = float2(0.0625,0.0625) * r5.zw;
    r7.xy = floor(r7.xy);
    r5.zw = -r7.xy * float2(16,16) + r5.zw;
    r5.z = dot(r5.zw, float2(727.122986,659.827026));
    r5.z = 101 * r5.z;
    r5.z = frac(r5.z);
    r5.z = r5.z + -r6.z;
    r5.z = r6.x * r5.z + r6.z;
    r5.z = r5.z + -r4.w;
    r4.w = r6.y * r5.z + r4.w;
    r4.w = r4.w * 2 + -1;
    r5.xy = r5.xy * r2.zz + r4.ww;
    r5.zw = float2(0.0625,0.0625) * r5.xy;
    r5.zw = floor(r5.zw);
    r5.xy = -r5.zw * float2(16,16) + r5.xy;
    sincos(r5.xy, r5.xy, r6.xy);
    r5.xy = float2(1,1) + -abs(r5.xy);
    r5.zw = abs(r6.xy) + -r5.xy;
    r5.xy = r5.xy * r5.zw + r5.xy;
    r4.w = r5.x * r5.y;
    r4.w = log2(r4.w);
    r4.w = 0.500999987 * r4.w;
    r4.w = exp2(r4.w);
    r4.w = 1 + -r4.w;
    r4.w = log2(r4.w);
    r4.w = cb0[14].w * r4.w;
    r4.w = exp2(r4.w);
    r5.xy = -cb0[22].ww + r4.xy;
    r5.xy = r5.xy * r2.zz;
    r5.zw = float2(0.699999988,0.699999988) * r5.xy;
    r5.zw = floor(r5.zw);
    r6.xy = r5.xy * float2(0.699999988,0.699999988) + -r5.zw;
    r6.zw = r6.xy * r6.xy;
    r6.xy = -r6.xy * float2(2,2) + float2(3,3);
    r6.xy = r6.zw * r6.xy;
    r6.zw = float2(0.0625,0.0625) * r5.zw;
    r6.zw = floor(r6.zw);
    r6.zw = -r6.zw * float2(16,16) + r5.zw;
    r6.z = dot(r6.zw, float2(727.122986,659.827026));
    r6.z = 101 * r6.z;
    r7.xyzw = float4(1,0,0,1) + r5.zwzw;
    r8.xyzw = float4(0.0625,0.0625,0.0625,0.0625) * r7.xyzw;
    r8.xyzw = floor(r8.xyzw);
    r7.xyzw = -r8.xyzw * float4(16,16,16,16) + r7.xyzw;
    r6.w = dot(r7.xy, float2(727.122986,659.827026));
    r6.w = 101 * r6.w;
    r6.zw = frac(r6.zw);
    r6.w = r6.w + -r6.z;
    r6.z = r6.x * r6.w + r6.z;
    r6.w = dot(r7.zw, float2(727.122986,659.827026));
    r6.w = 101 * r6.w;
    r6.w = frac(r6.w);
    r5.zw = float2(1,1) + r5.zw;
    r7.xy = float2(0.0625,0.0625) * r5.zw;
    r7.xy = floor(r7.xy);
    r5.zw = -r7.xy * float2(16,16) + r5.zw;
    r5.z = dot(r5.zw, float2(727.122986,659.827026));
    r5.z = 101 * r5.z;
    r5.z = frac(r5.z);
    r5.z = r5.z + -r6.w;
    r5.z = r6.x * r5.z + r6.w;
    r5.z = r5.z + -r6.z;
    r5.z = r6.y * r5.z + r6.z;
    r5.z = r5.z * 2 + -1;
    r5.xy = r5.xy * float2(0.699999988,0.699999988) + r5.zz;
    r5.zw = float2(0.0625,0.0625) * r5.xy;
    r5.zw = floor(r5.zw);
    r5.xy = -r5.zw * float2(16,16) + r5.xy;
    sincos(r5.xy, r5.xy, r6.xy);
    r5.xy = float2(1,1) + -abs(r5.xy);
    r5.zw = abs(r6.xy) + -r5.xy;
    r5.xy = r5.xy * r5.zw + r5.xy;
    r5.x = r5.x * r5.y;
    r5.x = log2(r5.x);
    r5.x = 0.500999987 * r5.x;
    r5.x = exp2(r5.x);
    r5.x = 1 + -r5.x;
    r5.x = log2(r5.x);
    r5.x = cb0[14].w * r5.x;
    r5.x = exp2(r5.x);
    r4.w = r5.x + r4.w;
    r3.w = r4.w * r2.w + r3.w;
    r4.x = dot(r3.xy, r1.zw);
    r4.y = dot(r3.zx, r1.zw);
    r2.z = r2.z + r2.z;
    r2.w = 0.200000003 * r2.w;
    r4.z = (int)r4.z + 1;
    r1.zw = r4.xy;
  }
  r1.xyz = cb2[10].xyz * r3.www;
  r1.xyz = cb2[9].xyz * r0.xxx + r1.xyz;
  r1.xyz = cb2[11].xyz * r0.zzz + r1.xyz;
  r1.xyz = cb2[12].xyz + r1.xyz;
  o2.x = -r1.z;
  r0.w = cb0[31].x * r1.z;
  r0.w = 1.44269502 * r0.w;
  r0.w = exp2(r0.w);
  r0.w = min(1, r0.w);
  r0.w = r3.w * r0.w;
  r2.xy = -cb0[23].yw + r0.xz;
  r2.zw = float2(0.00048828125,0.00048828125) * r2.xy;
  r3.xy = frac(r2.zw);
  r2.xy = r2.xy * float2(0.00048828125,0.00048828125) + -r3.xy;
  r2.xy = cmp(float2(0.00100000005,0.00100000005) >= abs(r2.xy));
  r2.xy = r2.xy ? float2(1,1) : 0;
  r1.w = -r2.x * r2.y + 1;
  r2.xyzw = t0.SampleLevel(s0_s, r2.zw, 0).xyzw;
  r1.w = r1.w * 1000 + r2.x;
  r1.w = -100 + r1.w;
  r1.w = max(0, r1.w);
  r2.x = r1.w / cb0[29].y;
  r2.x = cb0[31].z + r2.x;
  r2.x = min(1, r2.x);
  r0.y = r0.w * r2.x + cb0[13].x;
  r2.xyzw = cb2[18].xyzw * r0.yyyy;
  r2.xyzw = cb2[17].xyzw * r0.xxxx + r2.xyzw;
  r2.xyzw = cb2[19].xyzw * r0.zzzz + r2.xyzw;
  r2.xyzw = cb2[20].xyzw + r2.xyzw;
  
  o0.xyzw = r2.xyzw;
  
  //Fix
  float4 stereo = StereoParams.Load(0);
  r2.x += stereo.x * (r2.w - stereo.y);
  
  
  
  r3.xz = float2(0.5,0.5) * r2.xw;
  r0.w = cb1[5].x * r2.y;
  r3.w = 0.5 * r0.w;
  o3.xy = r3.xw + r3.zz;
  
  
  
  o4.xy = r2.xy * float2(0.5,-0.5) + r3.zz;
  r1.xy = r1.xy / r1.zz;
  r3.xyz = cb0[4].xyz * r1.yyy;
  r3.xyz = cb0[3].xyz * r1.xxx + r3.xyz;
  r1.xyz = cb0[5].xyz * r1.zzz + r3.xyz;
  r1.xyz = cb0[6].xyz + r1.xyz;
  o5.xyz = -r1.xyz;
  
  
  o3.zw = r2.zw;
  
  
  
  
  o4.zw = r2.zw;
  
  
  
  o1.xyz = r0.xyz;
  o2.y = r1.w;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.3.11 on Sat Aug 04 11:23:39 2018
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION                 0   xyzw        0     NONE   float   x z
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float   xyzw
// TEXCOORD                 0   xyz         1     NONE   float   xyz
// TEXCOORD                 1   xy          2     NONE   float   xy
// TEXCOORD                 2   xyzw        3     NONE   float   xyzw
// TEXCOORD                 3   xyzw        4     NONE   float   xyzw
// TEXCOORD                 4   xyz         5     NONE   float   xyz
//
vs_4_0
dcl_constantbuffer cb0[32], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb2[21], immediateIndexed
dcl_sampler s0, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_input v0.xz
dcl_output_siv o0.xyzw, position
dcl_output o1.xyz
dcl_output o2.xy
dcl_output o3.xyzw
dcl_output o4.xyzw
dcl_output o5.xyz
dcl_temps 9
mad r0.xz, cb0[12].wwww, v0.xxzx, cb0[12].xxzx
mul r1.xy, r0.xzxx, l(0.100000, 0.100000, 0.000000, 0.000000)
ftoi r0.w, cb0[31].y
dp2 r2.x, cb0[15].xyxx, r1.xyxx
dp2 r2.y, cb0[15].zwzz, r1.xyxx
dp2 r1.x, l(0.866025388, -0.500000, 0.000000, 0.000000), r2.xyxx
dp2 r1.y, l(0.500000, 0.866025388, 0.000000, 0.000000), r2.xyxx
mul r3.xyz, cb0[23].xxxx, l(0.866025388, -0.500000, 0.500000, 0.000000)
mov r1.zw, r2.xxxy
mov r4.xy, r1.xyxx
mov r2.zw, cb0[14].yyyx
mov r3.w, l(0)
mov r4.z, l(0)
loop
  ige r4.w, r4.z, r0.w
  breakc_nz r4.w
  add r5.xy, r1.zwzz, cb0[22].wwww
  mul r5.zw, r2.zzzz, r5.xxxy
  round_ni r5.zw, r5.zzzw
  mad r6.xy, r5.xyxx, r2.zzzz, -r5.zwzz
  mul r6.zw, r6.xxxy, r6.xxxy
  mad r6.xy, -r6.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(3.000000, 3.000000, 0.000000, 0.000000)
  mul r6.xy, r6.xyxx, r6.zwzz
  mul r6.zw, r5.zzzw, l(0.000000, 0.000000, 0.062500, 0.062500)
  round_ni r6.zw, r6.zzzw
  mad r6.zw, -r6.zzzw, l(0.000000, 0.000000, 16.000000, 16.000000), r5.zzzw
  dp2 r4.w, r6.zwzz, l(727.122986, 659.827026, 0.000000, 0.000000)
  mul r4.w, r4.w, l(101.000000)
  frc r4.w, r4.w
  add r7.xyzw, r5.zwzw, l(1.000000, 0.000000, 0.000000, 1.000000)
  mul r8.xyzw, r7.xyzw, l(0.062500, 0.062500, 0.062500, 0.062500)
  round_ni r8.xyzw, r8.xyzw
  mad r7.xyzw, -r8.xyzw, l(16.000000, 16.000000, 16.000000, 16.000000), r7.xyzw
  dp2 r6.z, r7.xyxx, l(727.122986, 659.827026, 0.000000, 0.000000)
  mul r6.z, r6.z, l(101.000000)
  frc r6.z, r6.z
  add r6.z, -r4.w, r6.z
  mad r4.w, r6.x, r6.z, r4.w
  dp2 r6.z, r7.zwzz, l(727.122986, 659.827026, 0.000000, 0.000000)
  mul r6.z, r6.z, l(101.000000)
  frc r6.z, r6.z
  add r5.zw, r5.zzzw, l(0.000000, 0.000000, 1.000000, 1.000000)
  mul r7.xy, r5.zwzz, l(0.062500, 0.062500, 0.000000, 0.000000)
  round_ni r7.xy, r7.xyxx
  mad r5.zw, -r7.xxxy, l(0.000000, 0.000000, 16.000000, 16.000000), r5.zzzw
  dp2 r5.z, r5.zwzz, l(727.122986, 659.827026, 0.000000, 0.000000)
  mul r5.z, r5.z, l(101.000000)
  frc r5.z, r5.z
  add r5.z, -r6.z, r5.z
  mad r5.z, r6.x, r5.z, r6.z
  add r5.z, -r4.w, r5.z
  mad r4.w, r6.y, r5.z, r4.w
  mad r4.w, r4.w, l(2.000000), l(-1.000000)
  mad r5.xy, r5.xyxx, r2.zzzz, r4.wwww
  mul r5.zw, r5.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500)
  round_ni r5.zw, r5.zzzw
  mad r5.xy, -r5.zwzz, l(16.000000, 16.000000, 0.000000, 0.000000), r5.xyxx
  sincos r5.xy, r6.xy, r5.xyxx
  add r5.xy, -|r5.xyxx|, l(1.000000, 1.000000, 0.000000, 0.000000)
  add r5.zw, -r5.xxxy, |r6.xxxy|
  mad r5.xy, r5.xyxx, r5.zwzz, r5.xyxx
  mul r4.w, r5.y, r5.x
  log r4.w, r4.w
  mul r4.w, r4.w, l(0.501000)
  exp r4.w, r4.w
  add r4.w, -r4.w, l(1.000000)
  log r4.w, r4.w
  mul r4.w, r4.w, cb0[14].w
  exp r4.w, r4.w
  add r5.xy, r4.xyxx, -cb0[22].wwww
  mul r5.xy, r2.zzzz, r5.xyxx
  mul r5.zw, r5.xxxy, l(0.000000, 0.000000, 0.700000, 0.700000)
  round_ni r5.zw, r5.zzzw
  mad r6.xy, r5.xyxx, l(0.700000, 0.700000, 0.000000, 0.000000), -r5.zwzz
  mul r6.zw, r6.xxxy, r6.xxxy
  mad r6.xy, -r6.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(3.000000, 3.000000, 0.000000, 0.000000)
  mul r6.xy, r6.xyxx, r6.zwzz
  mul r6.zw, r5.zzzw, l(0.000000, 0.000000, 0.062500, 0.062500)
  round_ni r6.zw, r6.zzzw
  mad r6.zw, -r6.zzzw, l(0.000000, 0.000000, 16.000000, 16.000000), r5.zzzw
  dp2 r6.z, r6.zwzz, l(727.122986, 659.827026, 0.000000, 0.000000)
  mul r6.z, r6.z, l(101.000000)
  add r7.xyzw, r5.zwzw, l(1.000000, 0.000000, 0.000000, 1.000000)
  mul r8.xyzw, r7.xyzw, l(0.062500, 0.062500, 0.062500, 0.062500)
  round_ni r8.xyzw, r8.xyzw
  mad r7.xyzw, -r8.xyzw, l(16.000000, 16.000000, 16.000000, 16.000000), r7.xyzw
  dp2 r6.w, r7.xyxx, l(727.122986, 659.827026, 0.000000, 0.000000)
  mul r6.w, r6.w, l(101.000000)
  frc r6.zw, r6.zzzw
  add r6.w, -r6.z, r6.w
  mad r6.z, r6.x, r6.w, r6.z
  dp2 r6.w, r7.zwzz, l(727.122986, 659.827026, 0.000000, 0.000000)
  mul r6.w, r6.w, l(101.000000)
  frc r6.w, r6.w
  add r5.zw, r5.zzzw, l(0.000000, 0.000000, 1.000000, 1.000000)
  mul r7.xy, r5.zwzz, l(0.062500, 0.062500, 0.000000, 0.000000)
  round_ni r7.xy, r7.xyxx
  mad r5.zw, -r7.xxxy, l(0.000000, 0.000000, 16.000000, 16.000000), r5.zzzw
  dp2 r5.z, r5.zwzz, l(727.122986, 659.827026, 0.000000, 0.000000)
  mul r5.z, r5.z, l(101.000000)
  frc r5.z, r5.z
  add r5.z, -r6.w, r5.z
  mad r5.z, r6.x, r5.z, r6.w
  add r5.z, -r6.z, r5.z
  mad r5.z, r6.y, r5.z, r6.z
  mad r5.z, r5.z, l(2.000000), l(-1.000000)
  mad r5.xy, r5.xyxx, l(0.700000, 0.700000, 0.000000, 0.000000), r5.zzzz
  mul r5.zw, r5.xxxy, l(0.000000, 0.000000, 0.062500, 0.062500)
  round_ni r5.zw, r5.zzzw
  mad r5.xy, -r5.zwzz, l(16.000000, 16.000000, 0.000000, 0.000000), r5.xyxx
  sincos r5.xy, r6.xy, r5.xyxx
  add r5.xy, -|r5.xyxx|, l(1.000000, 1.000000, 0.000000, 0.000000)
  add r5.zw, -r5.xxxy, |r6.xxxy|
  mad r5.xy, r5.xyxx, r5.zwzz, r5.xyxx
  mul r5.x, r5.y, r5.x
  log r5.x, r5.x
  mul r5.x, r5.x, l(0.501000)
  exp r5.x, r5.x
  add r5.x, -r5.x, l(1.000000)
  log r5.x, r5.x
  mul r5.x, r5.x, cb0[14].w
  exp r5.x, r5.x
  add r4.w, r4.w, r5.x
  mad r3.w, r4.w, r2.w, r3.w
  dp2 r4.x, r3.xyxx, r1.zwzz
  dp2 r4.y, r3.zxzz, r1.zwzz
  add r2.z, r2.z, r2.z
  mul r2.w, r2.w, l(0.200000)
  iadd r4.z, r4.z, l(1)
  mov r1.zw, r4.xxxy
endloop
mul r1.xyz, r3.wwww, cb2[10].xyzx
mad r1.xyz, cb2[9].xyzx, r0.xxxx, r1.xyzx
mad r1.xyz, cb2[11].xyzx, r0.zzzz, r1.xyzx
add r1.xyz, r1.xyzx, cb2[12].xyzx
mov o2.x, -r1.z
mul r0.w, r1.z, cb0[31].x
mul r0.w, r0.w, l(1.442695)
exp r0.w, r0.w
min r0.w, r0.w, l(1.000000)
mul r0.w, r0.w, r3.w
add r2.xy, r0.xzxx, -cb0[23].ywyy
mul r2.zw, r2.xxxy, l(0.000000, 0.000000, 0.000488281250, 0.000488281250)
frc r3.xy, r2.zwzz
mad r2.xy, r2.xyxx, l(0.000488281250, 0.000488281250, 0.000000, 0.000000), -r3.xyxx
ge r2.xy, l(0.001000, 0.001000, 0.000000, 0.000000), |r2.xyxx|
and r2.xy, r2.xyxx, l(0x3f800000, 0x3f800000, 0, 0)
mad r1.w, -r2.x, r2.y, l(1.000000)
sample_l r2.xyzw, r2.zwzz, t0.xyzw, s0, l(0.000000)
mad r1.w, r1.w, l(1000.000000), r2.x
add r1.w, r1.w, l(-100.000000)
max r1.w, r1.w, l(0.000000)
div r2.x, r1.w, cb0[29].y
add r2.x, r2.x, cb0[31].z
min r2.x, r2.x, l(1.000000)
mad r0.y, r0.w, r2.x, cb0[13].x
mul r2.xyzw, r0.yyyy, cb2[18].xyzw
mad r2.xyzw, cb2[17].xyzw, r0.xxxx, r2.xyzw
mad r2.xyzw, cb2[19].xyzw, r0.zzzz, r2.xyzw
add r2.xyzw, r2.xyzw, cb2[20].xyzw
mul r3.xz, r2.xxwx, l(0.500000, 0.000000, 0.500000, 0.000000)
mul r0.w, r2.y, cb1[5].x
mul r3.w, r0.w, l(0.500000)
add o3.xy, r3.zzzz, r3.xwxx
mad o4.xy, r2.xyxx, l(0.500000, -0.500000, 0.000000, 0.000000), r3.zzzz
div r1.xy, r1.xyxx, r1.zzzz
mul r3.xyz, r1.yyyy, cb0[4].xyzx
mad r3.xyz, cb0[3].xyzx, r1.xxxx, r3.xyzx
mad r1.xyz, cb0[5].xyzx, r1.zzzz, r3.xyzx
add r1.xyz, r1.xyzx, cb0[6].xyzx
mov o5.xyz, -r1.xyzx
mov o0.xyzw, r2.xyzw
mov o3.zw, r2.zzzw
mov o4.zw, r2.zzzw
mov o1.xyz, r0.xyzx
mov o2.y, r1.w
ret
// Approximately 0 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
