struct buf0 {
  injectionSwitch : vec2<f32>,
}

var<private> x_GLF_color : vec4<f32>;

@group(0) @binding(0) var<uniform> x_7 : buf0;

var<private> gl_FragCoord : vec4<f32>;

fn main_1() {
  var i : i32;
  var i_1 : i32;
  var i_2 : i32;
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  i = 0;
  let x_35 : f32 = x_7.injectionSwitch.y;
  if ((x_35 < 0.0)) {
  } else {
    var x_42 : bool;
    let x_41 : f32 = gl_FragCoord.y;
    x_42 = (x_41 < -1.0);
    if (x_42) {
    } else {
      loop {
        let x_50 : i32 = i;
        if ((x_50 >= 256)) {
          break;
        }
        loop {
          i_1 = 0;
          loop {
            let x_58 : i32 = i_1;
            if ((x_58 < 1)) {
            } else {
              break;
            }
            if (x_42) {
              i_2 = 0;
              loop {
                let x_66 : i32 = i_2;
                if ((x_66 < 1)) {
                } else {
                  break;
                }

                continuing {
                  let x_70 : i32 = i_2;
                  i_2 = (x_70 + 1);
                }
              }
              continue;
            }
            return;

            continuing {
              let x_72 : i32 = i_1;
              i_1 = (x_72 + 1);
            }
          }

          continuing {
            if (false) {
            } else {
              break;
            }
          }
        }

        continuing {
          if (false) {
          } else {
            break;
          }
        }
      }
    }
  }
  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);
}
