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

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

struct buf1 {
  one : i32;
};

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

var<private> x_GLF_color : vec4<f32>;

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

fn main_1() {
  var arr0 : array<i32, 10>;
  var arr1 : array<i32, 10>;
  var a : i32;
  var limiter0 : i32;
  var limiter1 : i32;
  var b : i32;
  var limiter2 : i32;
  var limiter3 : i32;
  var d : i32;
  var ref0 : array<i32, 10>;
  var ref1 : array<i32, 10>;
  var i : i32;
  let x_59 : i32 = x_6.x_GLF_uniform_int_values[3];
  let x_61 : i32 = x_6.x_GLF_uniform_int_values[2];
  let x_63 : i32 = x_6.x_GLF_uniform_int_values[4];
  let x_65 : i32 = x_6.x_GLF_uniform_int_values[5];
  let x_67 : i32 = x_6.x_GLF_uniform_int_values[6];
  let x_69 : i32 = x_6.x_GLF_uniform_int_values[7];
  let x_71 : i32 = x_6.x_GLF_uniform_int_values[8];
  let x_73 : i32 = x_6.x_GLF_uniform_int_values[9];
  let x_75 : i32 = x_6.x_GLF_uniform_int_values[0];
  let x_77 : i32 = x_6.x_GLF_uniform_int_values[10];
  arr0 = array<i32, 10>(x_59, x_61, x_63, x_65, x_67, x_69, x_71, x_73, x_75, x_77);
  let x_80 : i32 = x_6.x_GLF_uniform_int_values[1];
  let x_82 : i32 = x_6.x_GLF_uniform_int_values[12];
  let x_84 : i32 = x_6.x_GLF_uniform_int_values[15];
  let x_86 : i32 = x_6.x_GLF_uniform_int_values[16];
  let x_88 : i32 = x_6.x_GLF_uniform_int_values[17];
  let x_90 : i32 = x_6.x_GLF_uniform_int_values[13];
  let x_92 : i32 = x_6.x_GLF_uniform_int_values[14];
  let x_94 : i32 = x_6.x_GLF_uniform_int_values[11];
  let x_96 : i32 = x_6.x_GLF_uniform_int_values[18];
  let x_98 : i32 = x_6.x_GLF_uniform_int_values[19];
  arr1 = array<i32, 10>(x_80, x_82, x_84, x_86, x_88, x_90, x_92, x_94, x_96, x_98);
  let x_101 : i32 = x_6.x_GLF_uniform_int_values[8];
  a = x_101;
  loop {
    let x_106 : i32 = a;
    let x_108 : i32 = x_6.x_GLF_uniform_int_values[0];
    if ((x_106 < x_108)) {
    } else {
      break;
    }
    let x_112 : i32 = x_6.x_GLF_uniform_int_values[3];
    limiter0 = x_112;
    loop {
      let x_117 : i32 = limiter0;
      let x_119 : i32 = x_6.x_GLF_uniform_int_values[4];
      if ((x_117 < x_119)) {
      } else {
        break;
      }
      let x_122 : i32 = limiter0;
      limiter0 = (x_122 + 1);
      let x_125 : i32 = x_6.x_GLF_uniform_int_values[2];
      limiter1 = x_125;
      let x_127 : i32 = x_6.x_GLF_uniform_int_values[3];
      b = x_127;
      loop {
        let x_132 : i32 = b;
        let x_134 : i32 = x_6.x_GLF_uniform_int_values[1];
        if ((x_132 < x_134)) {
        } else {
          break;
        }
        let x_137 : i32 = limiter1;
        let x_139 : i32 = x_6.x_GLF_uniform_int_values[5];
        if ((x_137 > x_139)) {
          break;
        }
        let x_143 : i32 = limiter1;
        limiter1 = (x_143 + 1);
        let x_145 : i32 = b;
        let x_146 : i32 = a;
        let x_148 : i32 = arr1[x_146];
        arr0[x_145] = x_148;

        continuing {
          let x_150 : i32 = b;
          b = (x_150 + 1);
        }
      }
    }
    limiter2 = 0;
    loop {
      let x_156 : i32 = limiter2;
      if ((x_156 < 5)) {
      } else {
        break;
      }
      let x_159 : i32 = limiter2;
      limiter2 = (x_159 + 1);
      let x_162 : i32 = arr1[1];
      arr0[1] = x_162;
    }
    loop {
      limiter3 = 0;
      d = 0;
      loop {
        let x_172 : i32 = d;
        if ((x_172 < 10)) {
        } else {
          break;
        }
        let x_175 : i32 = limiter3;
        if ((x_175 > 4)) {
          break;
        }
        let x_179 : i32 = limiter3;
        limiter3 = (x_179 + 1);
        let x_181 : i32 = d;
        let x_182 : i32 = d;
        let x_184 : i32 = arr0[x_182];
        arr1[x_181] = x_184;

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

      continuing {
        let x_189 : i32 = x_6.x_GLF_uniform_int_values[2];
        let x_191 : i32 = x_6.x_GLF_uniform_int_values[3];
        if ((x_189 == x_191)) {
        } else {
          break;
        }
      }
    }

    continuing {
      let x_193 : i32 = a;
      a = (x_193 + 1);
    }
  }
  let x_196 : i32 = x_6.x_GLF_uniform_int_values[11];
  let x_198 : i32 = x_6.x_GLF_uniform_int_values[12];
  let x_200 : i32 = x_6.x_GLF_uniform_int_values[11];
  let x_202 : i32 = x_6.x_GLF_uniform_int_values[5];
  let x_204 : i32 = x_6.x_GLF_uniform_int_values[6];
  let x_206 : i32 = x_6.x_GLF_uniform_int_values[7];
  let x_208 : i32 = x_6.x_GLF_uniform_int_values[8];
  let x_210 : i32 = x_6.x_GLF_uniform_int_values[9];
  let x_212 : i32 = x_6.x_GLF_uniform_int_values[0];
  let x_214 : i32 = x_6.x_GLF_uniform_int_values[10];
  ref0 = array<i32, 10>(x_196, x_198, x_200, x_202, x_204, x_206, x_208, x_210, x_212, x_214);
  let x_217 : i32 = x_6.x_GLF_uniform_int_values[11];
  let x_219 : i32 = x_6.x_GLF_uniform_int_values[12];
  let x_221 : i32 = x_6.x_GLF_uniform_int_values[11];
  let x_223 : i32 = x_6.x_GLF_uniform_int_values[5];
  let x_225 : i32 = x_6.x_GLF_uniform_int_values[6];
  let x_227 : i32 = x_6.x_GLF_uniform_int_values[13];
  let x_229 : i32 = x_6.x_GLF_uniform_int_values[14];
  let x_231 : i32 = x_6.x_GLF_uniform_int_values[11];
  let x_233 : i32 = x_6.x_GLF_uniform_int_values[18];
  let x_235 : i32 = x_6.x_GLF_uniform_int_values[19];
  ref1 = array<i32, 10>(x_217, x_219, x_221, x_223, x_225, x_227, x_229, x_231, x_233, x_235);
  let x_238 : i32 = x_6.x_GLF_uniform_int_values[2];
  let x_241 : i32 = x_6.x_GLF_uniform_int_values[3];
  let x_244 : i32 = x_6.x_GLF_uniform_int_values[3];
  let x_247 : i32 = x_6.x_GLF_uniform_int_values[2];
  x_GLF_color = vec4<f32>(f32(x_238), f32(x_241), f32(x_244), f32(x_247));
  let x_251 : i32 = x_6.x_GLF_uniform_int_values[3];
  i = x_251;
  loop {
    var x_277 : bool;
    var x_278_phi : bool;
    let x_256 : i32 = i;
    let x_258 : i32 = x_6.x_GLF_uniform_int_values[1];
    if ((x_256 < x_258)) {
    } else {
      break;
    }
    let x_261 : i32 = i;
    let x_263 : i32 = arr0[x_261];
    let x_264 : i32 = i;
    let x_266 : i32 = ref0[x_264];
    let x_267 : bool = (x_263 != x_266);
    x_278_phi = x_267;
    if (!(x_267)) {
      let x_271 : i32 = i;
      let x_273 : i32 = arr1[x_271];
      let x_274 : i32 = i;
      let x_276 : i32 = ref1[x_274];
      x_277 = (x_273 != x_276);
      x_278_phi = x_277;
    }
    let x_278 : bool = x_278_phi;
    if (x_278) {
      let x_282 : i32 = x_6.x_GLF_uniform_int_values[3];
      let x_283 : f32 = f32(x_282);
      x_GLF_color = vec4<f32>(x_283, x_283, x_283, x_283);
    }

    continuing {
      let x_285 : i32 = i;
      i = (x_285 + 1);
    }
  }
  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);
}
