static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
cbuffer cbuffer_x_6 : register(b0, space0) {
  uint4 x_6[1];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  float4 indexable[16] = (float4[16])0;
  int x_66 = 0;
  int x_66_phi = 0;
  int x_69_phi = 0;
  const float4 x_52 = gl_FragCoord;
  const float2 x_55 = asfloat(x_6[0].xy);
  const float2 x_56 = (float2(x_52.x, x_52.y) / x_55);
  const int x_64 = (int((x_56.x * 10.0f)) + (int((x_56.y * 10.0f)) * 10));
  x_66_phi = 100;
  x_69_phi = 0;
  while (true) {
    int x_67 = 0;
    int x_70 = 0;
    x_66 = x_66_phi;
    const int x_69 = x_69_phi;
    if ((x_69 < x_64)) {
    } else {
      break;
    }
    {
      x_67 = (((4 * asint(x_66)) * (1000 - asint(x_66))) / 1000);
      x_70 = (x_69 + 1);
      x_66_phi = x_67;
      x_69_phi = x_70;
    }
  }
  const float4 tint_symbol_5[16] = {float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)};
  indexable = tint_symbol_5;
  const float4 x_78 = indexable[asint((x_66 % 16))];
  x_GLF_color = x_78;
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 gl_FragCoord_param : SV_Position;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 : SV_Target0;
};

tint_symbol_2 main(tint_symbol_1 tint_symbol) {
  const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  const main_out tint_symbol_3 = {x_GLF_color};
  const tint_symbol_2 tint_symbol_6 = {tint_symbol_3.x_GLF_color_1};
  return tint_symbol_6;
}
