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

struct buf1 {
  x_GLF_uniform_int_values : Arr;
};

type Arr_1 = [[stride(16)]] array<f32, 3>;

struct buf0 {
  x_GLF_uniform_float_values : Arr_1;
};

[[group(0), binding(1)]] var<uniform> x_8 : 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;
  a = pack2x16float(vec2<f32>(1.0, 1.0));
  let x_40 : u32 = a;
  v1 = unpack4x8snorm(x_40);
  E = 0.01;
  let x_43 : i32 = x_8.x_GLF_uniform_int_values[1];
  let x_45 : f32 = v1[x_43];
  let x_47 : f32 = x_10.x_GLF_uniform_float_values[0];
  let x_49 : f32 = x_10.x_GLF_uniform_float_values[1];
  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_8.x_GLF_uniform_int_values[0];
    let x_60 : f32 = v1[x_58];
    let x_62 : f32 = x_10.x_GLF_uniform_float_values[2];
    let x_64 : f32 = x_10.x_GLF_uniform_float_values[1];
    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_8.x_GLF_uniform_int_values[2];
    let x_76 : f32 = v1[x_74];
    let x_78 : f32 = x_10.x_GLF_uniform_float_values[0];
    let x_80 : f32 = x_10.x_GLF_uniform_float_values[1];
    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_8.x_GLF_uniform_int_values[3];
    let x_92 : f32 = v1[x_90];
    let x_94 : f32 = x_10.x_GLF_uniform_float_values[2];
    let x_96 : f32 = x_10.x_GLF_uniform_float_values[1];
    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_8.x_GLF_uniform_int_values[0];
    let x_110 : i32 = x_8.x_GLF_uniform_int_values[1];
    let x_113 : i32 = x_8.x_GLF_uniform_int_values[1];
    let x_116 : i32 = x_8.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_8.x_GLF_uniform_int_values[1];
    let x_122 : f32 = v1[x_120];
    x_GLF_color = vec4<f32>(x_122, x_122, x_122, x_122);
  }
  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);
}
