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

[[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 a : i32;
  var sum : i32;
  var i : i32;
  a = 65536;
  let x_29 : i32 = x_7.x_GLF_uniform_int_values[0];
  sum = x_29;
  let x_31 : i32 = x_7.x_GLF_uniform_int_values[1];
  if ((1 == x_31)) {
    let x_35 : i32 = a;
    a = (x_35 - 1);
  }
  i = 0;
  loop {
    let x_41 : i32 = i;
    let x_42 : i32 = a;
    if ((x_41 < x_42)) {
    } else {
      break;
    }
    let x_45 : i32 = i;
    let x_46 : i32 = sum;
    sum = (x_46 + x_45);

    continuing {
      let x_49 : i32 = x_7.x_GLF_uniform_int_values[2];
      let x_50 : i32 = i;
      i = (x_50 + x_49);
    }
  }
  let x_52 : i32 = sum;
  let x_54 : i32 = x_7.x_GLF_uniform_int_values[3];
  if ((x_52 == x_54)) {
    let x_60 : i32 = x_7.x_GLF_uniform_int_values[1];
    let x_63 : i32 = x_7.x_GLF_uniform_int_values[0];
    let x_66 : i32 = x_7.x_GLF_uniform_int_values[0];
    let x_69 : i32 = x_7.x_GLF_uniform_int_values[1];
    x_GLF_color = vec4<f32>(f32(x_60), f32(x_63), f32(x_66), f32(x_69));
  } else {
    let x_73 : i32 = x_7.x_GLF_uniform_int_values[0];
    let x_74 : f32 = f32(x_73);
    x_GLF_color = vec4<f32>(x_74, x_74, x_74, x_74);
  }
  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);
}
