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

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;
};

struct buf2 {
  one : i32;
};

var<private> x_GLF_global_loop_count : i32;

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

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

[[group(0), binding(2)]] var<uniform> x_15 : buf2;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var m : mat4x4<f32>;
  var v : vec4<f32>;
  var f : f32;
  var a : i32;
  var b : i32;
  var zero : f32;
  x_GLF_global_loop_count = 0;
  let x_62 : f32 = x_7.x_GLF_uniform_float_values[1];
  let x_64 : f32 = x_7.x_GLF_uniform_float_values[2];
  let x_66 : f32 = x_7.x_GLF_uniform_float_values[3];
  let x_68 : f32 = x_7.x_GLF_uniform_float_values[4];
  let x_70 : f32 = x_7.x_GLF_uniform_float_values[5];
  let x_72 : f32 = x_7.x_GLF_uniform_float_values[6];
  let x_74 : f32 = x_7.x_GLF_uniform_float_values[7];
  let x_76 : f32 = x_7.x_GLF_uniform_float_values[8];
  let x_78 : f32 = x_7.x_GLF_uniform_float_values[9];
  let x_80 : f32 = x_7.x_GLF_uniform_float_values[10];
  let x_82 : f32 = x_7.x_GLF_uniform_float_values[11];
  let x_84 : f32 = x_7.x_GLF_uniform_float_values[12];
  let x_86 : f32 = x_7.x_GLF_uniform_float_values[13];
  let x_88 : f32 = x_7.x_GLF_uniform_float_values[14];
  let x_90 : f32 = x_7.x_GLF_uniform_float_values[15];
  let x_92 : f32 = x_7.x_GLF_uniform_float_values[16];
  m = mat4x4<f32>(vec4<f32>(x_62, x_64, x_66, x_68), vec4<f32>(x_70, x_72, x_74, x_76), vec4<f32>(x_78, x_80, x_82, x_84), vec4<f32>(x_86, x_88, x_90, x_92));
  let x_99 : f32 = x_7.x_GLF_uniform_float_values[1];
  let x_101 : f32 = x_7.x_GLF_uniform_float_values[2];
  let x_103 : f32 = x_7.x_GLF_uniform_float_values[3];
  let x_105 : f32 = x_7.x_GLF_uniform_float_values[4];
  v = vec4<f32>(x_99, x_101, x_103, x_105);
  let x_108 : f32 = x_7.x_GLF_uniform_float_values[1];
  f = x_108;
  let x_110 : i32 = x_12.x_GLF_uniform_int_values[0];
  a = x_110;
  loop {
    let x_115 : i32 = x_GLF_global_loop_count;
    if ((x_115 < 10)) {
    } else {
      break;
    }
    let x_118 : i32 = x_GLF_global_loop_count;
    x_GLF_global_loop_count = (x_118 + 1);
    let x_120 : i32 = a;
    let x_121 : i32 = clamp(x_120, 0, 3);
    let x_123 : f32 = x_7.x_GLF_uniform_float_values[1];
    let x_125 : f32 = v[x_121];
    v[x_121] = (x_125 + x_123);
    let x_129 : i32 = x_12.x_GLF_uniform_int_values[2];
    b = x_129;
    loop {
      let x_134 : i32 = x_GLF_global_loop_count;
      if ((x_134 < 10)) {
      } else {
        break;
      }
      let x_137 : i32 = x_GLF_global_loop_count;
      x_GLF_global_loop_count = (x_137 + 1);
      let x_139 : i32 = b;
      let x_142 : f32 = v[clamp(x_139, 0, 3)];
      let x_143 : i32 = b;
      let x_145 : i32 = a;
      let x_147 : f32 = m[clamp(x_143, 0, 3)][x_145];
      let x_149 : f32 = f;
      f = (x_149 + (x_142 * x_147));

      continuing {
        let x_151 : i32 = b;
        b = (x_151 - 1);
      }
    }
    let x_153 : i32 = a;
    let x_156 : f32 = x_7.x_GLF_uniform_float_values[1];
    m[1][clamp(x_153, 0, 3)] = x_156;
    let x_159 : i32 = x_15.one;
    let x_161 : i32 = x_12.x_GLF_uniform_int_values[0];
    if ((x_159 == x_161)) {
      discard;
    }
    let x_166 : i32 = x_15.one;
    let x_168 : i32 = x_12.x_GLF_uniform_int_values[1];
    if ((x_166 == x_168)) {
      discard;
    }

    continuing {
      let x_172 : i32 = a;
      a = (x_172 + 1);
    }
  }
  let x_175 : f32 = x_7.x_GLF_uniform_float_values[0];
  zero = x_175;
  let x_176 : f32 = f;
  let x_178 : f32 = x_7.x_GLF_uniform_float_values[17];
  if (!((x_176 == x_178))) {
    let x_183 : f32 = x_7.x_GLF_uniform_float_values[1];
    zero = x_183;
  }
  let x_184 : f32 = f;
  let x_185 : f32 = zero;
  let x_187 : i32 = x_12.x_GLF_uniform_int_values[0];
  let x_189 : f32 = f;
  x_GLF_color = vec4<f32>(x_184, x_185, f32(x_187), x_189);
  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);
}
