struct S {
  data : i32;
};

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

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

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

var<private> x_GLF_color : vec4<f32>;

fn func_struct_S_i11_i1_(s : ptr<function, S>, x : ptr<function, i32>) {
  let x_103 : i32 = x_9.x_GLF_uniform_int_values[1];
  let x_105 : i32 = x_9.x_GLF_uniform_int_values[0];
  if ((x_103 == x_105)) {
    return;
  }
  let x_109 : i32 = *(x);
  (*(s)).data = x_109;
  return;
}

fn main_1() {
  var i : i32;
  var arr : array<S, 10>;
  var index : i32;
  var param : S;
  var param_1 : i32;
  var param_2 : S;
  var param_3 : i32;
  i = 0;
  loop {
    let x_43 : i32 = i;
    if ((x_43 < 10)) {
    } else {
      break;
    }
    let x_46 : i32 = i;
    arr[x_46].data = 0;

    continuing {
      let x_48 : i32 = i;
      i = (x_48 + 1);
    }
  }
  let x_51 : i32 = x_9.x_GLF_uniform_int_values[1];
  let x_53 : i32 = x_9.x_GLF_uniform_int_values[0];
  if ((x_51 == x_53)) {
    let x_58 : i32 = index;
    let x_60 : S = arr[x_58];
    param = x_60;
    let x_61 : i32 = index;
    param_1 = x_61;
    func_struct_S_i11_i1_(&(param), &(param_1));
    let x_63 : S = param;
    arr[x_58] = x_63;
  } else {
    let x_66 : i32 = x_9.x_GLF_uniform_int_values[0];
    let x_68 : S = arr[x_66];
    param_2 = x_68;
    let x_70 : i32 = x_9.x_GLF_uniform_int_values[1];
    param_3 = x_70;
    func_struct_S_i11_i1_(&(param_2), &(param_3));
    let x_72 : S = param_2;
    arr[x_66] = x_72;
  }
  let x_75 : i32 = x_9.x_GLF_uniform_int_values[0];
  let x_77 : i32 = arr[x_75].data;
  let x_79 : i32 = x_9.x_GLF_uniform_int_values[1];
  if ((x_77 == x_79)) {
    let x_85 : i32 = x_9.x_GLF_uniform_int_values[1];
    let x_88 : i32 = x_9.x_GLF_uniform_int_values[0];
    let x_91 : i32 = x_9.x_GLF_uniform_int_values[0];
    let x_94 : i32 = x_9.x_GLF_uniform_int_values[1];
    x_GLF_color = vec4<f32>(f32(x_85), f32(x_88), f32(x_91), f32(x_94));
  } else {
    let x_98 : i32 = x_9.x_GLF_uniform_int_values[0];
    let x_99 : f32 = f32(x_98);
    x_GLF_color = vec4<f32>(x_99, x_99, x_99, x_99);
  }
  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);
}
