[[block]]
struct buf0 {
  injectionSwitch : vec2<f32>;
};

var<private> x_GLF_color : vec4<f32>;

var<private> gl_FragCoord : vec4<f32>;

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

fn main_1() {
  var odd_index : i32;
  var even_index : i32;
  var j : i32;
  var ll : i32;
  var x_59 : bool;
  var x_60_phi : bool;
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  let x_53 : f32 = gl_FragCoord.x;
  let x_54 : bool = (x_53 < 128.0);
  x_60_phi = x_54;
  if (x_54) {
    let x_58 : f32 = gl_FragCoord.y;
    x_59 = (x_58 < 128.0);
    x_60_phi = x_59;
  }
  let x_60 : bool = x_60_phi;
  if (x_60) {
    return;
  }
  odd_index = 0;
  loop {
    let x_11 : i32 = odd_index;
    if ((x_11 <= 1)) {
    } else {
      break;
    }
    let x_70 : f32 = x_GLF_color.x;
    x_GLF_color.x = (x_70 + 0.25);
    let x_12 : i32 = odd_index;
    odd_index = (x_12 + 1);
  }
  even_index = 1;
  loop {
    let x_14 : i32 = even_index;
    if ((x_14 >= 0)) {
    } else {
      break;
    }
    let x_80 : f32 = x_GLF_color.x;
    x_GLF_color.x = (x_80 + 0.25);
    let x_84 : f32 = x_8.injectionSwitch.x;
    let x_86 : f32 = x_8.injectionSwitch.y;
    if ((x_84 > x_86)) {
      continue;
    }
    let x_15 : i32 = even_index;
    if ((x_15 >= 1)) {
      discard;
    }
    j = 1;
    loop {
      if (true) {
      } else {
        break;
      }
      let x_16 : i32 = ll;
      if ((x_16 >= 3)) {
        break;
      }
      let x_17 : i32 = ll;
      ll = (x_17 + 1);
      let x_19 : i32 = j;
      if ((bitcast<u32>(x_19) < 1u)) {
        continue;
      }
      let x_106 : f32 = x_8.injectionSwitch.x;
      let x_108 : f32 = x_8.injectionSwitch.y;
      if ((x_106 > x_108)) {
        break;
      }

      continuing {
        let x_20 : i32 = j;
        j = (x_20 + 1);
      }
    }
    let x_113 : f32 = x_8.injectionSwitch.x;
    let x_115 : f32 = x_8.injectionSwitch.y;
    if ((x_113 > x_115)) {
      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
    }
    let x_22 : i32 = even_index;
    even_index = (x_22 - 1);
  }
  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);
}
