struct buf0 {
  one : f32;
};

var<private> x_GLF_color : vec4<f32>;

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

fn main_1() {
  var x_30 : bool;
  var x_31_phi : bool;
  x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  let x_23 : f32 = x_5.one;
  let x_24 : bool = (x_23 < 0.0);
  x_31_phi = x_24;
  if (!(x_24)) {
    let x_29 : f32 = x_5.one;
    x_30 = (x_29 < 1.0);
    x_31_phi = x_30;
  }
  let x_31 : bool = x_31_phi;
  if (x_31) {
    return;
  }
  let x_35 : f32 = x_5.one;
  if ((x_35 < 0.0)) {
    loop {
      let x_45 : f32 = x_5.one;
      if ((x_45 < 0.0)) {
      } else {
        break;
      }
      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
      break;
    }
  } else {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  }
  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);
}
