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

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

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

var<private> x_GLF_color : vec4<f32>;

fn func_i1_(x : ptr<function, i32>) -> i32 {
  var a : i32;
  var i : i32;
  var indexable : array<i32, 4>;
  let x_72 : i32 = x_8.x_GLF_uniform_int_values[0];
  a = x_72;
  let x_74 : i32 = x_8.x_GLF_uniform_int_values[0];
  i = x_74;
  loop {
    let x_79 : i32 = i;
    let x_81 : i32 = x_8.x_GLF_uniform_int_values[1];
    if ((x_79 < x_81)) {
    } else {
      break;
    }
    let x_85 : i32 = x_8.x_GLF_uniform_int_values[3];
    let x_87 : i32 = x_8.x_GLF_uniform_int_values[3];
    let x_89 : i32 = x_8.x_GLF_uniform_int_values[3];
    let x_91 : i32 = x_8.x_GLF_uniform_int_values[3];
    let x_93 : i32 = a;
    indexable = array<i32, 4>(x_85, x_87, x_89, x_91);
    let x_95 : i32 = indexable[x_93];
    let x_96 : i32 = *(x);
    if ((x_95 > x_96)) {
      if (true) {
        let x_105 : i32 = x_8.x_GLF_uniform_int_values[3];
        return x_105;
      } else {
        let x_107 : i32 = x_8.x_GLF_uniform_int_values[3];
        a = x_107;
      }
    } else {
      if (true) {
        let x_111 : i32 = x_8.x_GLF_uniform_int_values[4];
        return x_111;
      }
    }

    continuing {
      let x_112 : i32 = i;
      i = (x_112 + 1);
    }
  }
  let x_115 : i32 = x_8.x_GLF_uniform_int_values[0];
  return x_115;
}

fn main_1() {
  var a_1 : i32;
  var param : i32;
  var param_1 : i32;
  let x_39 : i32 = x_8.x_GLF_uniform_int_values[0];
  param = x_39;
  let x_40 : i32 = func_i1_(&(param));
  a_1 = x_40;
  let x_42 : i32 = x_8.x_GLF_uniform_int_values[3];
  param_1 = x_42;
  let x_43 : i32 = func_i1_(&(param_1));
  let x_44 : i32 = a_1;
  a_1 = (x_44 + x_43);
  let x_46 : i32 = a_1;
  let x_48 : i32 = x_8.x_GLF_uniform_int_values[2];
  if ((x_46 == x_48)) {
    let x_54 : i32 = x_8.x_GLF_uniform_int_values[3];
    let x_57 : i32 = x_8.x_GLF_uniform_int_values[0];
    let x_60 : i32 = x_8.x_GLF_uniform_int_values[0];
    let x_63 : i32 = x_8.x_GLF_uniform_int_values[3];
    x_GLF_color = vec4<f32>(f32(x_54), f32(x_57), f32(x_60), f32(x_63));
  } else {
    let x_67 : i32 = x_8.x_GLF_uniform_int_values[0];
    let x_68 : f32 = f32(x_67);
    x_GLF_color = vec4<f32>(x_68, x_68, x_68, x_68);
  }
  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);
}
