[[block]]
struct buf0 {
  resolution : vec2<f32>;
};

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

var<private> index : i32;

var<private> state : array<i32, 16>;

fn collision_vf2_vf4_(pos : ptr<function, vec2<f32>>, quad : ptr<function, vec4<f32>>) -> bool {
  var x_116 : vec4<bool> = vec4<bool>(false, false, false, false);
  let x_118 : f32 = (*(pos)).x;
  let x_120 : f32 = (*(quad)).x;
  if ((x_118 < x_120)) {
    return false;
  }
  let x_125 : f32 = (*(pos)).y;
  let x_127 : f32 = (*(quad)).y;
  if ((x_125 < x_127)) {
    return false;
  }
  let x_132 : f32 = (*(pos)).x;
  let x_134 : f32 = (*(quad)).x;
  let x_136 : f32 = (*(quad)).z;
  if ((x_132 > (x_134 + x_136))) {
    return false;
  }
  let x_142 : f32 = (*(pos)).y;
  let x_144 : f32 = (*(quad)).y;
  let x_146 : f32 = (*(quad)).w;
  if ((x_142 > (x_144 + x_146))) {
    return false;
  }
  return true;
}

fn match_vf2_(pos_1 : ptr<function, vec2<f32>>) -> vec4<f32> {
  var res : vec4<f32>;
  var i : i32;
  var param : vec2<f32>;
  var param_1 : vec4<f32>;
  var indexable : array<vec4<f32>, 8>;
  var indexable_1 : array<vec4<f32>, 8>;
  var indexable_2 : array<vec4<f32>, 8>;
  var indexable_3 : array<vec4<f32>, 16>;
  res = vec4<f32>(0.5, 0.5, 1.0, 1.0);
  i = 0;
  loop {
    let x_156 : i32 = i;
    if ((x_156 < 8)) {
    } else {
      break;
    }
    let x_159 : i32 = i;
    let x_160 : vec2<f32> = *(pos_1);
    param = x_160;
    indexable = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
    let x_162 : vec4<f32> = indexable[x_159];
    param_1 = x_162;
    let x_163 : bool = collision_vf2_vf4_(&(param), &(param_1));
    if (x_163) {
      let x_166 : i32 = i;
      indexable_1 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
      let x_168 : f32 = indexable_1[x_166].x;
      let x_170 : i32 = i;
      indexable_2 = array<vec4<f32>, 8>(vec4<f32>(4.0, 4.0, 20.0, 4.0), vec4<f32>(4.0, 4.0, 4.0, 20.0), vec4<f32>(4.0, 20.0, 20.0, 4.0), vec4<f32>(20.0, 4.0, 4.0, 8.0), vec4<f32>(8.0, 6.0, 4.0, 2.0), vec4<f32>(2.0, 12.0, 2.0, 4.0), vec4<f32>(16.0, 2.0, 4.0, 4.0), vec4<f32>(12.0, 22.0, 4.0, 4.0));
      let x_172 : f32 = indexable_2[x_170].y;
      let x_175 : i32 = i;
      indexable_3 = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
      let x_181 : vec4<f32> = indexable_3[((((i32(x_168) * i32(x_172)) + (x_175 * 9)) + 11) % 16)];
      res = x_181;
    }

    continuing {
      let x_182 : i32 = i;
      i = (x_182 + 1);
    }
  }
  let x_184 : vec4<f32> = res;
  return x_184;
}

fn main_1() {
  var lin : vec2<f32>;
  var param_2 : vec2<f32>;
  let x_105 : vec4<f32> = gl_FragCoord;
  let x_108 : vec2<f32> = x_20.resolution;
  lin = (vec2<f32>(x_105.x, x_105.y) / x_108);
  let x_110 : vec2<f32> = lin;
  lin = floor((x_110 * 32.0));
  let x_113 : vec2<f32> = lin;
  param_2 = x_113;
  let x_114 : vec4<f32> = match_vf2_(&(param_2));
  x_GLF_color = x_114;
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
