struct strided_arr {
  @size(16)
  el : i32;
}

type Arr = array<strided_arr, 4u>;

struct buf1 {
  x_GLF_uniform_int_values : Arr;
}

struct strided_arr_1 {
  @size(16)
  el : f32;
}

type Arr_1 = array<strided_arr_1, 3u>;

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].el;
  let x_45 : f32 = v1[x_43];
  let x_47 : f32 = x_10.x_GLF_uniform_float_values[0].el;
  let x_49 : f32 = x_10.x_GLF_uniform_float_values[1].el;
  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].el;
    let x_60 : f32 = v1[x_58];
    let x_62 : f32 = x_10.x_GLF_uniform_float_values[2].el;
    let x_64 : f32 = x_10.x_GLF_uniform_float_values[1].el;
    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].el;
    let x_76 : f32 = v1[x_74];
    let x_78 : f32 = x_10.x_GLF_uniform_float_values[0].el;
    let x_80 : f32 = x_10.x_GLF_uniform_float_values[1].el;
    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].el;
    let x_92 : f32 = v1[x_90];
    let x_94 : f32 = x_10.x_GLF_uniform_float_values[2].el;
    let x_96 : f32 = x_10.x_GLF_uniform_float_values[1].el;
    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].el;
    let x_110 : i32 = x_8.x_GLF_uniform_int_values[1].el;
    let x_113 : i32 = x_8.x_GLF_uniform_int_values[1].el;
    let x_116 : i32 = x_8.x_GLF_uniform_int_values[0].el;
    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].el;
    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);
}
