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

[[block]]
struct buf1 {
  x_GLF_uniform_float_values : Arr;
};

type Arr_1 = [[stride(16)]] array<i32, 4>;

[[block]]
struct buf0 {
  x_GLF_uniform_int_values : Arr_1;
};

[[group(0), binding(1)]] var<uniform> x_7 : buf1;

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var m23 : mat2x3<f32>;
  var i : i32;
  let x_46 : f32 = x_7.x_GLF_uniform_float_values[1];
  m23 = mat2x3<f32>(vec3<f32>(x_46, 0.0, 0.0), vec3<f32>(0.0, x_46, 0.0));
  i = 1;
  loop {
    var x_80 : bool;
    var x_81_phi : bool;
    let x_54 : i32 = i;
    let x_56 : i32 = x_10.x_GLF_uniform_int_values[3];
    if ((x_54 < x_56)) {
    } else {
      break;
    }
    let x_60 : i32 = x_10.x_GLF_uniform_int_values[0];
    let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
    let x_64 : f32 = x_7.x_GLF_uniform_float_values[0];
    let x_66 : f32 = m23[x_60][x_62];
    m23[x_60][x_62] = (x_66 + x_64);
    let x_70 : f32 = gl_FragCoord.y;
    let x_72 : f32 = x_7.x_GLF_uniform_float_values[0];
    if ((x_70 < x_72)) {
    }
    x_81_phi = true;
    if (true) {
      let x_79 : f32 = gl_FragCoord.x;
      x_80 = (x_79 < 0.0);
      x_81_phi = x_80;
    }
    let x_81 : bool = x_81_phi;
    if (!(x_81)) {
      break;
    }

    continuing {
      let x_85 : i32 = i;
      i = (x_85 + 1);
    }
  }
  let x_87 : mat2x3<f32> = m23;
  let x_89 : i32 = x_10.x_GLF_uniform_int_values[1];
  let x_92 : i32 = x_10.x_GLF_uniform_int_values[1];
  let x_95 : i32 = x_10.x_GLF_uniform_int_values[1];
  let x_98 : i32 = x_10.x_GLF_uniform_int_values[1];
  let x_101 : i32 = x_10.x_GLF_uniform_int_values[1];
  let x_104 : i32 = x_10.x_GLF_uniform_int_values[0];
  let x_108 : mat2x3<f32> = mat2x3<f32>(vec3<f32>(f32(x_89), f32(x_92), f32(x_95)), vec3<f32>(f32(x_98), f32(x_101), f32(x_104)));
  if ((all((x_87[0u] == x_108[0u])) && all((x_87[1u] == x_108[1u])))) {
    let x_122 : i32 = x_10.x_GLF_uniform_int_values[0];
    let x_125 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_128 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_122), f32(x_125), f32(x_128), f32(x_131));
  } else {
    let x_135 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_136 : f32 = f32(x_135);
    x_GLF_color = vec4<f32>(x_136, x_136, x_136, x_136);
  }
  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);
}
