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

struct buf1 {
  x_GLF_uniform_float_values : Arr;
};

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

struct buf0 {
  x_GLF_uniform_int_values : Arr_1;
};

[[group(0), binding(1)]] var<uniform> x_6 : buf1;

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : u32;
  var v1 : vec4<f32>;
  var E : f32;
  var x_69 : bool;
  var x_85 : bool;
  var x_101 : bool;
  var x_70_phi : bool;
  var x_86_phi : bool;
  var x_102_phi : bool;
  let x_35 : f32 = x_6.x_GLF_uniform_float_values[1];
  a = pack4x8snorm(vec4<f32>(x_35, x_35, x_35, x_35));
  let x_38 : u32 = a;
  v1 = unpack4x8unorm(x_38);
  let x_41 : f32 = x_6.x_GLF_uniform_float_values[0];
  E = x_41;
  let x_43 : i32 = x_10.x_GLF_uniform_int_values[1];
  let x_45 : f32 = v1[x_43];
  let x_47 : f32 = x_6.x_GLF_uniform_float_values[2];
  let x_49 : f32 = x_6.x_GLF_uniform_float_values[3];
  let x_53 : f32 = E;
  let x_54 : bool = (abs((x_45 - (x_47 / x_49))) < x_53);
  x_70_phi = x_54;
  if (x_54) {
    let x_58 : i32 = x_10.x_GLF_uniform_int_values[0];
    let x_60 : f32 = v1[x_58];
    let x_62 : f32 = x_6.x_GLF_uniform_float_values[2];
    let x_64 : f32 = x_6.x_GLF_uniform_float_values[3];
    let x_68 : f32 = E;
    x_69 = (abs((x_60 - (x_62 / x_64))) < x_68);
    x_70_phi = x_69;
  }
  let x_70 : bool = x_70_phi;
  x_86_phi = x_70;
  if (x_70) {
    let x_74 : i32 = x_10.x_GLF_uniform_int_values[3];
    let x_76 : f32 = v1[x_74];
    let x_78 : f32 = x_6.x_GLF_uniform_float_values[2];
    let x_80 : f32 = x_6.x_GLF_uniform_float_values[3];
    let x_84 : f32 = E;
    x_85 = (abs((x_76 - (x_78 / x_80))) < x_84);
    x_86_phi = x_85;
  }
  let x_86 : bool = x_86_phi;
  x_102_phi = x_86;
  if (x_86) {
    let x_90 : i32 = x_10.x_GLF_uniform_int_values[2];
    let x_92 : f32 = v1[x_90];
    let x_94 : f32 = x_6.x_GLF_uniform_float_values[2];
    let x_96 : f32 = x_6.x_GLF_uniform_float_values[3];
    let x_100 : f32 = E;
    x_101 = (abs((x_92 - (x_94 / x_96))) < x_100);
    x_102_phi = x_101;
  }
  let x_102 : bool = x_102_phi;
  if (x_102) {
    let x_107 : i32 = x_10.x_GLF_uniform_int_values[0];
    let x_110 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_113 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_116 : i32 = x_10.x_GLF_uniform_int_values[0];
    x_GLF_color = vec4<f32>(f32(x_107), f32(x_110), f32(x_113), f32(x_116));
  } else {
    let x_120 : i32 = x_10.x_GLF_uniform_int_values[1];
    let x_121 : f32 = f32(x_120);
    x_GLF_color = vec4<f32>(x_121, x_121, x_121, x_121);
  }
  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);
}
