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

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var arr : array<i32, 10>;
  var a : i32;
  var i : i32;
  arr = array<i32, 10>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  a = 0;
  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
  let x_44 : i32 = arr[x_42];
  if ((x_44 == 2)) {
    let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
    i = x_49;
    loop {
      let x_54 : i32 = i;
      let x_56 : i32 = x_7.x_GLF_uniform_int_values[0];
      if ((x_54 < x_56)) {
      } else {
        break;
      }

      continuing {
        let x_59 : i32 = i;
        i = (x_59 + 1);
      }
    }
    let x_61 : i32 = a;
    a = (x_61 + 1);
  }
  let x_63 : i32 = a;
  let x_66 : i32 = x_7.x_GLF_uniform_int_values[2];
  if (((-1 % x_63) == x_66)) {
    let x_71 : i32 = x_7.x_GLF_uniform_int_values[1];
    let x_75 : i32 = x_7.x_GLF_uniform_int_values[2];
    arr[vec2<i32>(x_71, x_71).y] = x_75;
  }
  let x_78 : i32 = x_7.x_GLF_uniform_int_values[1];
  let x_80 : i32 = arr[x_78];
  let x_82 : i32 = x_7.x_GLF_uniform_int_values[2];
  if ((x_80 == x_82)) {
    let x_88 : i32 = x_7.x_GLF_uniform_int_values[1];
    let x_91 : i32 = x_7.x_GLF_uniform_int_values[2];
    let x_94 : i32 = x_7.x_GLF_uniform_int_values[2];
    let x_97 : i32 = x_7.x_GLF_uniform_int_values[1];
    x_GLF_color = vec4<f32>(f32(x_88), f32(x_91), f32(x_94), f32(x_97));
  } else {
    let x_101 : i32 = x_7.x_GLF_uniform_int_values[2];
    let x_102 : f32 = f32(x_101);
    x_GLF_color = vec4<f32>(x_102, x_102, x_102, x_102);
  }
  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);
}
