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

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var m : mat2x2<f32>;
  let x_29 : i32 = x_6.x_GLF_uniform_int_values[0];
  let x_30 : f32 = f32(x_29);
  m = transpose(transpose(mat2x2<f32>(vec2<f32>(x_30, 0.0), vec2<f32>(0.0, x_30))));
  let x_36 : mat2x2<f32> = m;
  let x_38 : i32 = x_6.x_GLF_uniform_int_values[0];
  let x_39 : f32 = f32(x_38);
  let x_42 : mat2x2<f32> = mat2x2<f32>(vec2<f32>(x_39, 0.0), vec2<f32>(0.0, x_39));
  if ((all((x_36[0u] == x_42[0u])) && all((x_36[1u] == x_42[1u])))) {
    let x_56 : i32 = x_6.x_GLF_uniform_int_values[0];
    let x_59 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_62 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_65 : i32 = x_6.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_56), f32(x_59), f32(x_62), f32(x_65));
  } else {
    let x_69 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_70 : f32 = f32(x_69);
    x_GLF_color = vec4<f32>(x_70, x_70, x_70, x_70);
  }
  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);
}
