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

[[block]]
struct buf1 {
  x_GLF_uniform_int_values : Arr;
};

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

[[block]]
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_8 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var sums : array<f32, 2>;
  var a : i32;
  var b : i32;
  var c : i32;
  var d : i32;
  var indexable : mat2x2<f32>;
  var indexable_1 : mat2x2<f32>;
  var x_158 : bool;
  var x_159_phi : bool;
  let x_16 : i32 = x_6.x_GLF_uniform_int_values[1];
  let x_85 : f32 = x_8.x_GLF_uniform_float_values[0];
  sums[x_16] = -(x_85);
  let x_18 : i32 = x_6.x_GLF_uniform_int_values[2];
  let x_90 : f32 = x_8.x_GLF_uniform_float_values[0];
  sums[x_18] = -(x_90);
  let x_19 : i32 = x_6.x_GLF_uniform_int_values[1];
  a = x_19;
  loop {
    let x_20 : i32 = a;
    let x_21 : i32 = x_6.x_GLF_uniform_int_values[0];
    if ((x_20 < x_21)) {
    } else {
      break;
    }
    let x_22 : i32 = x_6.x_GLF_uniform_int_values[1];
    b = x_22;
    loop {
      let x_23 : i32 = b;
      let x_24 : i32 = x_6.x_GLF_uniform_int_values[3];
      if ((x_23 < x_24)) {
      } else {
        break;
      }
      let x_25 : i32 = x_6.x_GLF_uniform_int_values[1];
      c = x_25;
      loop {
        let x_26 : i32 = c;
        let x_27 : i32 = a;
        if ((x_26 <= x_27)) {
        } else {
          break;
        }
        let x_28 : i32 = x_6.x_GLF_uniform_int_values[1];
        d = x_28;
        loop {
          let x_29 : i32 = d;
          let x_30 : i32 = x_6.x_GLF_uniform_int_values[3];
          if ((x_29 < x_30)) {
          } else {
            break;
          }
          let x_31 : i32 = a;
          let x_32 : i32 = x_6.x_GLF_uniform_int_values[2];
          let x_125 : f32 = f32(x_32);
          let x_33 : i32 = c;
          let x_34 : i32 = x_6.x_GLF_uniform_int_values[2];
          indexable = mat2x2<f32>(vec2<f32>(x_125, 0.0), vec2<f32>(0.0, x_125));
          let x_131 : f32 = indexable[x_33][x_34];
          sums[x_31] = x_131;
          let x_35 : i32 = a;
          let x_36 : i32 = x_6.x_GLF_uniform_int_values[2];
          let x_134 : f32 = f32(x_36);
          let x_37 : i32 = c;
          let x_38 : i32 = x_6.x_GLF_uniform_int_values[2];
          indexable_1 = mat2x2<f32>(vec2<f32>(x_134, 0.0), vec2<f32>(0.0, x_134));
          let x_140 : f32 = indexable_1[x_37][x_38];
          let x_142 : f32 = sums[x_35];
          sums[x_35] = (x_142 + x_140);

          continuing {
            let x_39 : i32 = d;
            d = (x_39 + 1);
          }
        }

        continuing {
          let x_41 : i32 = c;
          c = (x_41 + 1);
        }
      }

      continuing {
        let x_43 : i32 = b;
        b = (x_43 + 1);
      }
    }

    continuing {
      let x_45 : i32 = a;
      a = (x_45 + 1);
    }
  }
  let x_47 : i32 = x_6.x_GLF_uniform_int_values[1];
  let x_147 : f32 = sums[x_47];
  let x_149 : f32 = x_8.x_GLF_uniform_float_values[1];
  let x_150 : bool = (x_147 == x_149);
  x_159_phi = x_150;
  if (x_150) {
    let x_48 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_155 : f32 = sums[x_48];
    let x_157 : f32 = x_8.x_GLF_uniform_float_values[2];
    x_158 = (x_155 == x_157);
    x_159_phi = x_158;
  }
  let x_159 : bool = x_159_phi;
  if (x_159) {
    let x_49 : i32 = x_6.x_GLF_uniform_int_values[2];
    let x_50 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_51 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_52 : i32 = x_6.x_GLF_uniform_int_values[2];
    x_GLF_color = vec4<f32>(f32(x_49), f32(x_50), f32(x_51), f32(x_52));
  } else {
    let x_53 : i32 = x_6.x_GLF_uniform_int_values[1];
    let x_173 : f32 = f32(x_53);
    x_GLF_color = vec4<f32>(x_173, x_173, x_173, x_173);
  }
  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);
}
