struct buf0 {
  injectionSwitch : vec2<f32>;
};

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var x_43 : f32;
  var x_44 : f32;
  var x_45 : f32;
  var x_46 : i32;
  var zero : i32;
  var param : vec2<f32>;
  var temp : vec2<f32>;
  let x_47 : vec4<f32> = gl_FragCoord;
  param = vec2<f32>(x_47.x, x_47.y);
  loop {
    let x_54 : f32 = param.y;
    if ((x_54 < 50.0)) {
      let x_60 : f32 = x_9.injectionSwitch.y;
      x_44 = x_60;
    } else {
      x_44 = 0.0;
    }
    let x_61 : f32 = x_44;
    x_43 = x_61;
    let x_63 : f32 = gl_FragCoord.y;
    let x_65 : f32 = select(0.0, 1.0, (x_63 < 50.0));
    x_45 = x_65;
    if (((x_61 - x_65) < 1.0)) {
      x_46 = 0;
      break;
    }
    x_46 = 1;
    break;

    continuing {
      if (false) {
      } else {
        break;
      }
    }
  }
  let x_70 : i32 = x_46;
  zero = x_70;
  if ((x_70 == 1)) {
    return;
  }
  x_GLF_color = vec4<f32>(0.0, 1.0, 1.0, 1.0);
  let x_75 : f32 = gl_FragCoord.x;
  let x_77 : f32 = x_9.injectionSwitch.x;
  if ((x_75 >= x_77)) {
    let x_82 : f32 = gl_FragCoord.y;
    if ((x_82 >= 0.0)) {
      let x_87 : f32 = x_9.injectionSwitch.y;
      x_GLF_color.x = x_87;
    }
  }
  let x_90 : f32 = gl_FragCoord.y;
  if ((x_90 >= 0.0)) {
    let x_95 : f32 = x_9.injectionSwitch.x;
    x_GLF_color.y = x_95;
  }
  let x_97 : vec4<f32> = gl_FragCoord;
  let x_98 : vec2<f32> = vec2<f32>(x_97.x, x_97.y);
  let x_101 : vec2<f32> = vec2<f32>(x_98.x, x_98.y);
  temp = x_101;
  if ((x_101.y >= 0.0)) {
    let x_107 : f32 = x_9.injectionSwitch.x;
    x_GLF_color.z = x_107;
  }
  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);
}

fn alwaysZero_vf2_(coord : ptr<function, vec2<f32>>) -> i32 {
  var a : f32;
  var x_110 : f32;
  var b : f32;
  let x_112 : f32 = (*(coord)).y;
  if ((x_112 < 50.0)) {
    let x_118 : f32 = x_9.injectionSwitch.y;
    x_110 = x_118;
  } else {
    x_110 = 0.0;
  }
  let x_119 : f32 = x_110;
  a = x_119;
  let x_121 : f32 = gl_FragCoord.y;
  let x_123 : f32 = select(0.0, 1.0, (x_121 < 50.0));
  b = x_123;
  if (((x_119 - x_123) < 1.0)) {
    return 0;
  }
  return 1;
}
