struct buf1 {
  v1 : vec2<f32>;
};

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

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

var<private> x_GLF_color : vec4<f32>;

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

fn main_1() {
  let x_29 : f32 = x_5.v1.x;
  let x_31 : f32 = x_5.v1.y;
  if ((x_29 < x_31)) {
    let x_37 : i32 = x_7.x_GLF_uniform_int_values[0];
    let x_40 : i32 = x_7.x_GLF_uniform_int_values[1];
    let x_43 : i32 = x_7.x_GLF_uniform_int_values[1];
    let x_46 : i32 = x_7.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_37), f32(x_40), f32(x_43), f32(x_46));
    let x_50 : f32 = x_5.v1.x;
    let x_52 : f32 = x_5.v1.y;
    if ((x_50 > x_52)) {
      let x_57 : i32 = x_7.x_GLF_uniform_int_values[0];
      let x_58 : f32 = f32(x_57);
      x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
    }
    return;
  } else {
    let x_61 : i32 = x_7.x_GLF_uniform_int_values[1];
    let x_62 : f32 = f32(x_61);
    x_GLF_color = vec4<f32>(x_62, x_62, x_62, x_62);
  }
  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);
}
