struct strided_arr {
  @size(16)
  el : f32,
}

type Arr = array<strided_arr, 7u>;

struct buf0 {
  x_GLF_uniform_float_values : Arr,
}

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var v1 : vec4<f32>;
  var v2 : vec4<f32>;
  var v3 : vec4<f32>;
  var v4 : vec4<f32>;
  var x_69 : bool;
  var x_77 : bool;
  var x_85 : bool;
  var x_93 : bool;
  var x_70_phi : bool;
  var x_78_phi : bool;
  var x_86_phi : bool;
  var x_94_phi : bool;
  let x_41 : f32 = x_6.x_GLF_uniform_float_values[2].el;
  let x_43 : f32 = x_6.x_GLF_uniform_float_values[2].el;
  let x_45 : f32 = x_6.x_GLF_uniform_float_values[0].el;
  let x_47 : f32 = x_6.x_GLF_uniform_float_values[2].el;
  v1 = vec4<f32>(x_41, x_43, x_45, x_47);
  v2 = vec4<f32>(1.570796371, 1.119769573, 0x1.8p+128, 0.927295208);
  let x_50 : f32 = x_6.x_GLF_uniform_float_values[0].el;
  v3 = vec4<f32>(x_50, x_50, x_50, x_50);
  let x_52 : vec4<f32> = v1;
  let x_53 : vec4<f32> = v2;
  let x_54 : vec4<f32> = v3;
  v4 = smoothStep(x_52, x_53, x_54);
  let x_56 : vec4<f32> = v4;
  x_GLF_color = vec4<f32>(x_56.x, x_56.y, x_56.w, x_56.x);
  let x_59 : f32 = v4.x;
  let x_61 : f32 = x_6.x_GLF_uniform_float_values[4].el;
  let x_62 : bool = (x_59 > x_61);
  x_70_phi = x_62;
  if (x_62) {
    let x_66 : f32 = v4.x;
    let x_68 : f32 = x_6.x_GLF_uniform_float_values[5].el;
    x_69 = (x_66 < x_68);
    x_70_phi = x_69;
  }
  let x_70 : bool = x_70_phi;
  x_78_phi = x_70;
  if (x_70) {
    let x_74 : f32 = v4.y;
    let x_76 : f32 = x_6.x_GLF_uniform_float_values[3].el;
    x_77 = (x_74 > x_76);
    x_78_phi = x_77;
  }
  let x_78 : bool = x_78_phi;
  x_86_phi = x_78;
  if (x_78) {
    let x_82 : f32 = v4.y;
    let x_84 : f32 = x_6.x_GLF_uniform_float_values[6].el;
    x_85 = (x_82 < x_84);
    x_86_phi = x_85;
  }
  let x_86 : bool = x_86_phi;
  x_94_phi = x_86;
  if (x_86) {
    let x_90 : f32 = v4.w;
    let x_92 : f32 = x_6.x_GLF_uniform_float_values[0].el;
    x_93 = (x_90 == x_92);
    x_94_phi = x_93;
  }
  let x_94 : bool = x_94_phi;
  if (x_94) {
    let x_99 : f32 = x_6.x_GLF_uniform_float_values[0].el;
    let x_101 : f32 = x_6.x_GLF_uniform_float_values[1].el;
    let x_103 : f32 = x_6.x_GLF_uniform_float_values[1].el;
    let x_105 : f32 = x_6.x_GLF_uniform_float_values[0].el;
    x_GLF_color = vec4<f32>(x_99, x_101, x_103, x_105);
  } else {
    let x_108 : f32 = x_6.x_GLF_uniform_float_values[1].el;
    x_GLF_color = vec4<f32>(x_108, x_108, x_108, x_108);
  }
  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);
}
