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

struct buf1 {
  x_GLF_uniform_int_values : Arr;
};

type Arr_1 = @stride(16) array<f32, 2>;

struct buf0 {
  x_GLF_uniform_float_values : Arr_1;
};

@group(0) @binding(1) var<uniform> x_6 : buf1;

@group(0) @binding(0) var<uniform> x_9 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var v : vec4<f32>;
  var i : i32;
  let x_40 : i32 = x_6.x_GLF_uniform_int_values[1];
  let x_43 : i32 = x_6.x_GLF_uniform_int_values[2];
  let x_46 : i32 = x_6.x_GLF_uniform_int_values[3];
  let x_49 : i32 = x_6.x_GLF_uniform_int_values[0];
  v = vec4<f32>(f32(x_40), f32(x_43), f32(x_46), f32(x_49));
  let x_53 : i32 = x_6.x_GLF_uniform_int_values[4];
  i = x_53;
  loop {
    let x_58 : i32 = i;
    let x_60 : i32 = x_6.x_GLF_uniform_int_values[0];
    if ((x_58 < x_60)) {
    } else {
      break;
    }
    let x_63 : vec4<f32> = v;
    let x_64 : vec4<f32> = v;
    let x_65 : vec4<f32> = v;
    let x_66 : vec4<f32> = v;
    let x_88 : i32 = i;
    let x_92 : f32 = x_9.x_GLF_uniform_float_values[0];
    if ((mat4x4<f32>(vec4<f32>(x_63.x, x_63.y, x_63.z, x_63.w), vec4<f32>(x_64.x, x_64.y, x_64.z, x_64.w), vec4<f32>(x_65.x, x_65.y, x_65.z, x_65.w), vec4<f32>(x_66.x, x_66.y, x_66.z, x_66.w))[0u][x_88] > x_92)) {
      let x_96 : i32 = i;
      let x_97 : vec4<f32> = v;
      let x_99 : f32 = x_9.x_GLF_uniform_float_values[1];
      let x_102 : f32 = x_9.x_GLF_uniform_float_values[0];
      let x_106 : i32 = x_6.x_GLF_uniform_int_values[1];
      v[x_96] = clamp(x_97, vec4<f32>(x_99, x_99, x_99, x_99), vec4<f32>(x_102, x_102, x_102, x_102))[x_106];
    }

    continuing {
      let x_109 : i32 = i;
      i = (x_109 + 1);
    }
  }
  let x_111 : vec4<f32> = v;
  let x_113 : i32 = x_6.x_GLF_uniform_int_values[1];
  let x_114 : f32 = f32(x_113);
  if (all((x_111 == vec4<f32>(x_114, x_114, x_114, x_114)))) {
    let x_122 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_125 : i32 = x_6.x_GLF_uniform_int_values[4];
    let x_128 : i32 = x_6.x_GLF_uniform_int_values[4];
    let x_131 : i32 = x_6.x_GLF_uniform_int_values[1];
    x_GLF_color = vec4<f32>(f32(x_122), f32(x_125), f32(x_128), f32(x_131));
  } else {
    let x_135 : i32 = x_6.x_GLF_uniform_int_values[4];
    let x_136 : f32 = f32(x_135);
    x_GLF_color = vec4<f32>(x_136, x_136, x_136, x_136);
  }
  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);
}
