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

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

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

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

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : i32;
  var v : vec4<f32>;
  var m : mat3x4<f32>;
  var indexable : mat4x4<f32>;
  let x_44 : i32 = x_6.x_GLF_uniform_int_values[0];
  a = x_44;
  let x_46 : f32 = x_9.x_GLF_uniform_float_values[2];
  v = vec4<f32>(x_46, x_46, x_46, x_46);
  let x_49 : f32 = x_9.x_GLF_uniform_float_values[3];
  m = mat3x4<f32>(vec4<f32>(x_49, 0.0, 0.0, 0.0), vec4<f32>(0.0, x_49, 0.0, 0.0), vec4<f32>(0.0, 0.0, x_49, 0.0));
  let x_54 : i32 = a;
  let x_55 : i32 = a;
  let x_57 : f32 = x_9.x_GLF_uniform_float_values[0];
  m[x_54][x_55] = x_57;
  let x_59 : i32 = a;
  let x_60 : mat3x4<f32> = m;
  let x_78 : i32 = a;
  let x_79 : i32 = a;
  indexable = mat4x4<f32>(vec4<f32>(x_60[0u].x, x_60[0u].y, x_60[0u].z, x_60[0u].w), vec4<f32>(x_60[1u].x, x_60[1u].y, x_60[1u].z, x_60[1u].w), vec4<f32>(x_60[2u].x, x_60[2u].y, x_60[2u].z, x_60[2u].w), vec4<f32>(0.0, 0.0, 0.0, 1.0));
  let x_81 : f32 = indexable[x_78][x_79];
  let x_83 : f32 = v[x_59];
  v[x_59] = (x_83 + x_81);
  let x_87 : f32 = v.y;
  let x_89 : f32 = x_9.x_GLF_uniform_float_values[1];
  if ((x_87 == x_89)) {
    let x_95 : i32 = x_6.x_GLF_uniform_int_values[0];
    let x_98 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_101 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_104 : i32 = x_6.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_95), f32(x_98), f32(x_101), f32(x_104));
  } else {
    let x_108 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_109 : f32 = f32(x_108);
    x_GLF_color = vec4<f32>(x_109, x_109, x_109, x_109);
  }
  return;
}

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

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
