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

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : i32;
  var b : i32;
  var i : i32;
  var i_1 : i32;
  var i_2 : i32;
  var indexable : array<i32, 2>;
  let x_36 : i32 = x_6.x_GLF_uniform_int_values[2];
  a = x_36;
  let x_38 : i32 = x_6.x_GLF_uniform_int_values[3];
  b = x_38;
  let x_40 : i32 = x_6.x_GLF_uniform_int_values[2];
  let x_41 : f32 = f32(x_40);
  x_GLF_color = vec4<f32>(x_41, x_41, x_41, x_41);
  let x_44 : i32 = x_6.x_GLF_uniform_int_values[2];
  i = x_44;
  loop {
    let x_49 : i32 = i;
    let x_51 : i32 = x_6.x_GLF_uniform_int_values[0];
    if ((x_49 < x_51)) {
    } else {
      break;
    }
    let x_54 : i32 = i;
    let x_56 : i32 = x_6.x_GLF_uniform_int_values[3];
    if ((x_54 > x_56)) {
      let x_60 : i32 = a;
      a = (x_60 + 1);
      if (false) {
        let x_65 : i32 = x_6.x_GLF_uniform_int_values[2];
        i_1 = x_65;
        loop {
          let x_70 : i32 = i_1;
          let x_72 : i32 = x_6.x_GLF_uniform_int_values[0];
          if ((x_70 < x_72)) {
          } else {
            break;
          }
          return;
        }
      }
    }

    continuing {
      let x_75 : i32 = i;
      i = (x_75 + 1);
    }
  }
  let x_78 : i32 = x_6.x_GLF_uniform_int_values[2];
  i_2 = x_78;
  loop {
    let x_83 : i32 = i_2;
    let x_85 : i32 = x_6.x_GLF_uniform_int_values[0];
    if ((x_83 < x_85)) {
    } else {
      break;
    }
    let x_89 : i32 = x_6.x_GLF_uniform_int_values[3];
    let x_91 : i32 = x_6.x_GLF_uniform_int_values[4];
    let x_93 : i32 = b;
    indexable = array<i32, 2>(x_89, x_91);
    let x_95 : i32 = indexable[x_93];
    let x_96 : i32 = a;
    a = (x_96 + x_95);

    continuing {
      let x_98 : i32 = i_2;
      i_2 = (x_98 + 1);
    }
  }
  let x_100 : i32 = a;
  let x_102 : i32 = x_6.x_GLF_uniform_int_values[1];
  if ((x_100 == x_102)) {
    let x_107 : i32 = x_6.x_GLF_uniform_int_values[3];
    let x_110 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_113 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_116 : i32 = x_6.x_GLF_uniform_int_values[3];
    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
  }
  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);
}
