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

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

type Arr_1 = [[stride(16)]] array<f32, 2>;

struct buf1 {
  x_GLF_uniform_float_values : Arr_1;
};

var<private> x_GLF_color : vec4<f32>;

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

var<private> gl_FragCoord : vec4<f32>;

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

fn main_1() {
  var i : i32;
  let x_37 : i32 = x_6.x_GLF_uniform_int_values[1];
  let x_38 : f32 = f32(x_37);
  x_GLF_color = vec4<f32>(x_38, x_38, x_38, x_38);
  let x_41 : i32 = x_6.x_GLF_uniform_int_values[1];
  i = x_41;
  loop {
    let x_46 : i32 = i;
    let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
    if ((x_46 < x_48)) {
    } else {
      break;
    }
    let x_52 : f32 = gl_FragCoord.y;
    let x_54 : f32 = x_9.x_GLF_uniform_float_values[0];
    if ((x_52 < x_54)) {
      let x_59 : f32 = gl_FragCoord.x;
      let x_61 : f32 = x_9.x_GLF_uniform_float_values[0];
      if ((x_59 < x_61)) {
        return;
      }
      let x_66 : f32 = x_9.x_GLF_uniform_float_values[1];
      let x_68 : f32 = x_9.x_GLF_uniform_float_values[1];
      if ((x_66 > x_68)) {
        return;
      }
      discard;
    }
    let x_73 : f32 = x_9.x_GLF_uniform_float_values[1];
    let x_75 : f32 = x_9.x_GLF_uniform_float_values[0];
    if ((x_73 > x_75)) {
      let x_80 : i32 = x_6.x_GLF_uniform_int_values[0];
      let x_83 : i32 = x_6.x_GLF_uniform_int_values[1];
      let x_86 : i32 = x_6.x_GLF_uniform_int_values[1];
      let x_89 : i32 = x_6.x_GLF_uniform_int_values[0];
      x_GLF_color = vec4<f32>(f32(x_80), f32(x_83), f32(x_86), f32(x_89));
      break;
    }
    let x_93 : f32 = x_9.x_GLF_uniform_float_values[0];
    if ((x_93 < 0.0)) {
      discard;
    }

    continuing {
      let x_97 : i32 = i;
      i = (x_97 + 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);
}
