type Arr = [[stride(16)]] array<f32, 5>;

struct buf0 {
  x_GLF_uniform_float_values : Arr;
};

var<private> gl_FragCoord : vec4<f32>;

[[group(0), binding(0)]] var<uniform> x_6 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  let x_33 : f32 = gl_FragCoord.x;
  let x_35 : f32 = x_6.x_GLF_uniform_float_values[0];
  if ((x_33 > x_35)) {
    let x_40 : f32 = x_6.x_GLF_uniform_float_values[2];
    x_GLF_color = vec4<f32>(x_40, x_40, x_40, x_40);
    let x_43 : f32 = gl_FragCoord.y;
    if ((x_43 > x_35)) {
      let x_48 : f32 = x_6.x_GLF_uniform_float_values[4];
      x_GLF_color = vec4<f32>(x_48, x_48, x_48, x_48);
    }
    let x_51 : f32 = x_6.x_GLF_uniform_float_values[3];
    x_GLF_color = vec4<f32>(x_51, x_51, x_51, x_51);
  }
  let x_54 : f32 = x_6.x_GLF_uniform_float_values[1];
  x_GLF_color = vec4<f32>(x_35, x_54, x_54, 10.0);
  let x_61 : vec4<f32> = x_GLF_color;
  x_GLF_color = (mat4x4<f32>(vec4<f32>(x_35, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_35, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_35, 0.0), vec4<f32>(0.0, 0.0, 0.0, x_35)) * x_61);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
