struct S {
  data : i32;
};

[[block]]
struct buf1 {
  v1 : vec2<f32>;
};

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

[[block]]
struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

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

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

var<private> x_GLF_color : vec4<f32>;

fn func_struct_S_i11_(s : ptr<function, S>) {
  let x_166 : f32 = x_8.v1.x;
  let x_168 : f32 = x_8.v1.y;
  if ((x_166 > x_168)) {
    return;
  }
  let x_173 : i32 = x_10.x_GLF_uniform_int_values[0];
  (*(s)).data = x_173;
  return;
}

fn main_1() {
  var i : i32;
  var arr : array<S, 3>;
  var i_1 : i32;
  var param : S;
  var j : i32;
  var x_132 : bool;
  var x_142 : bool;
  var x_133_phi : bool;
  var x_143_phi : bool;
  let x_46 : i32 = x_10.x_GLF_uniform_int_values[2];
  i = x_46;
  loop {
    let x_51 : i32 = i;
    let x_53 : i32 = x_10.x_GLF_uniform_int_values[0];
    if ((x_51 < x_53)) {
    } else {
      break;
    }
    let x_56 : i32 = i;
    let x_57 : i32 = i;
    arr[x_56].data = x_57;

    continuing {
      let x_59 : i32 = i;
      i = (x_59 + 1);
    }
  }
  let x_62 : i32 = x_10.x_GLF_uniform_int_values[2];
  i_1 = x_62;
  loop {
    let x_67 : i32 = i_1;
    let x_69 : i32 = x_10.x_GLF_uniform_int_values[0];
    if ((x_67 < x_69)) {
    } else {
      break;
    }
    let x_73 : f32 = x_8.v1.x;
    let x_75 : f32 = x_8.v1.y;
    if ((x_73 > x_75)) {
      break;
    }
    let x_79 : i32 = i_1;
    let x_81 : i32 = arr[x_79].data;
    let x_83 : i32 = x_10.x_GLF_uniform_int_values[3];
    if ((x_81 == x_83)) {
      let x_88 : i32 = i_1;
      let x_90 : S = arr[x_88];
      param = x_90;
      func_struct_S_i11_(&(param));
      let x_92 : S = param;
      arr[x_88] = x_92;
    } else {
      let x_95 : i32 = x_10.x_GLF_uniform_int_values[2];
      j = x_95;
      loop {
        let x_100 : i32 = j;
        let x_102 : i32 = x_10.x_GLF_uniform_int_values[0];
        if ((x_100 < x_102)) {
        } else {
          break;
        }
        let x_105 : i32 = j;
        let x_107 : i32 = arr[x_105].data;
        let x_109 : i32 = x_10.x_GLF_uniform_int_values[4];
        if ((x_107 > x_109)) {
          discard;
        }

        continuing {
          let x_113 : i32 = j;
          j = (x_113 + 1);
        }
      }
    }

    continuing {
      let x_115 : i32 = i_1;
      i_1 = (x_115 + 1);
    }
  }
  let x_118 : i32 = x_10.x_GLF_uniform_int_values[2];
  let x_120 : i32 = arr[x_118].data;
  let x_122 : i32 = x_10.x_GLF_uniform_int_values[2];
  let x_123 : bool = (x_120 == x_122);
  x_133_phi = x_123;
  if (x_123) {
    let x_127 : i32 = x_10.x_GLF_uniform_int_values[3];
    let x_129 : i32 = arr[x_127].data;
    let x_131 : i32 = x_10.x_GLF_uniform_int_values[0];
    x_132 = (x_129 == x_131);
    x_133_phi = x_132;
  }
  let x_133 : bool = x_133_phi;
  x_143_phi = x_133;
  if (x_133) {
    let x_137 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_139 : i32 = arr[x_137].data;
    let x_141 : i32 = x_10.x_GLF_uniform_int_values[1];
    x_142 = (x_139 == x_141);
    x_143_phi = x_142;
  }
  let x_143 : bool = x_143_phi;
  if (x_143) {
    let x_148 : i32 = x_10.x_GLF_uniform_int_values[3];
    let x_151 : i32 = x_10.x_GLF_uniform_int_values[2];
    let x_154 : i32 = x_10.x_GLF_uniform_int_values[2];
    let x_157 : i32 = x_10.x_GLF_uniform_int_values[3];
    x_GLF_color = vec4<f32>(f32(x_148), f32(x_151), f32(x_154), f32(x_157));
  } else {
    let x_161 : i32 = x_10.x_GLF_uniform_int_values[2];
    let x_162 : f32 = f32(x_161);
    x_GLF_color = vec4<f32>(x_162, x_162, x_162, x_162);
  }
  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);
}
