struct QuicksortObject {
  numbers : array<i32, 10>;
};

struct buf0 {
  resolution : vec2<f32>;
};

var<private> obj : QuicksortObject;

var<private> x_GLF_FragCoord : vec4<f32>;

var<private> x_GLF_pos : vec4<f32>;

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

var<private> frag_color : vec4<f32>;

var<private> gl_Position : vec4<f32>;

fn main_1() {
  var x_90 : i32;
  var x_91 : i32;
  var x_92 : i32;
  var x_93 : i32;
  var x_94 : i32;
  var x_95 : i32;
  var x_96 : i32;
  var x_97 : i32;
  var x_98 : i32;
  var x_99 : i32;
  var x_100 : i32;
  var x_101 : i32;
  var x_102 : i32;
  var x_103 : array<i32, 10>;
  var x_104 : i32;
  var x_105 : i32;
  var x_106 : i32;
  var i_2 : i32;
  var uv : vec2<f32>;
  var color : vec3<f32>;
  let x_107 : vec4<f32> = x_GLF_pos;
  x_GLF_FragCoord = ((x_107 + vec4<f32>(1.0, 1.0, 0.0, 0.0)) * vec4<f32>(128.0, 128.0, 1.0, 1.0));
  i_2 = 0;
  loop {
    let x_114 : i32 = i_2;
    if ((x_114 < 10)) {
    } else {
      break;
    }
    let x_117 : i32 = i_2;
    let x_118 : i32 = i_2;
    obj.numbers[x_117] = (10 - x_118);
    let x_121 : i32 = i_2;
    let x_122 : i32 = i_2;
    let x_124 : i32 = obj.numbers[x_122];
    let x_125 : i32 = i_2;
    let x_127 : i32 = obj.numbers[x_125];
    obj.numbers[x_121] = (x_124 * x_127);

    continuing {
      let x_130 : i32 = i_2;
      i_2 = (x_130 + 1);
    }
  }
  x_100 = 0;
  x_101 = 9;
  x_102 = -1;
  let x_132 : i32 = x_102;
  let x_133 : i32 = (x_132 + 1);
  x_102 = x_133;
  let x_134 : i32 = x_100;
  x_103[x_133] = x_134;
  let x_136 : i32 = x_102;
  let x_137 : i32 = (x_136 + 1);
  x_102 = x_137;
  let x_138 : i32 = x_101;
  x_103[x_137] = x_138;
  loop {
    let x_144 : i32 = x_102;
    if ((x_144 >= 0)) {
    } else {
      break;
    }
    let x_147 : i32 = x_102;
    x_102 = (x_147 - 1);
    let x_150 : i32 = x_103[x_147];
    x_101 = x_150;
    let x_151 : i32 = x_102;
    x_102 = (x_151 - 1);
    let x_154 : i32 = x_103[x_151];
    x_100 = x_154;
    let x_155 : i32 = x_100;
    x_105 = x_155;
    let x_156 : i32 = x_101;
    x_106 = x_156;
    let x_157 : i32 = x_106;
    let x_159 : i32 = obj.numbers[x_157];
    x_92 = x_159;
    let x_160 : i32 = x_105;
    x_93 = (x_160 - 1);
    let x_162 : i32 = x_105;
    x_94 = x_162;
    loop {
      let x_167 : i32 = x_94;
      let x_168 : i32 = x_106;
      if ((x_167 <= (x_168 - 1))) {
      } else {
        break;
      }
      let x_172 : i32 = x_94;
      let x_174 : i32 = obj.numbers[x_172];
      let x_175 : i32 = x_92;
      if ((x_174 <= x_175)) {
        let x_179 : i32 = x_93;
        x_93 = (x_179 + 1);
        let x_181 : i32 = x_93;
        x_95 = x_181;
        let x_182 : i32 = x_94;
        x_96 = x_182;
        let x_183 : i32 = x_95;
        let x_185 : i32 = obj.numbers[x_183];
        x_91 = x_185;
        let x_186 : i32 = x_95;
        let x_187 : i32 = x_96;
        let x_189 : i32 = obj.numbers[x_187];
        obj.numbers[x_186] = x_189;
        let x_191 : i32 = x_96;
        let x_192 : i32 = x_91;
        obj.numbers[x_191] = x_192;
      }

      continuing {
        let x_194 : i32 = x_94;
        x_94 = (x_194 + 1);
      }
    }
    let x_196 : i32 = x_93;
    x_97 = (x_196 + 1);
    let x_198 : i32 = x_106;
    x_98 = x_198;
    let x_199 : i32 = x_97;
    let x_201 : i32 = obj.numbers[x_199];
    x_90 = x_201;
    let x_202 : i32 = x_97;
    let x_203 : i32 = x_98;
    let x_205 : i32 = obj.numbers[x_203];
    obj.numbers[x_202] = x_205;
    let x_207 : i32 = x_98;
    let x_208 : i32 = x_90;
    obj.numbers[x_207] = x_208;
    let x_210 : i32 = x_93;
    x_99 = (x_210 + 1);
    let x_212 : i32 = x_99;
    x_104 = x_212;
    let x_213 : i32 = x_104;
    let x_215 : i32 = x_100;
    if (((x_213 - 1) > x_215)) {
      let x_219 : i32 = x_102;
      let x_220 : i32 = (x_219 + 1);
      x_102 = x_220;
      let x_221 : i32 = x_100;
      x_103[x_220] = x_221;
      let x_223 : i32 = x_102;
      let x_224 : i32 = (x_223 + 1);
      x_102 = x_224;
      let x_225 : i32 = x_104;
      x_103[x_224] = (x_225 - 1);
    }
    let x_228 : i32 = x_104;
    let x_230 : i32 = x_101;
    if (((x_228 + 1) < x_230)) {
      let x_234 : i32 = x_102;
      let x_235 : i32 = (x_234 + 1);
      x_102 = x_235;
      let x_236 : i32 = x_104;
      x_103[x_235] = (x_236 + 1);
      let x_239 : i32 = x_102;
      let x_240 : i32 = (x_239 + 1);
      x_102 = x_240;
      let x_241 : i32 = x_101;
      x_103[x_240] = x_241;
    }
  }
  let x_243 : vec4<f32> = x_GLF_FragCoord;
  let x_246 : vec2<f32> = x_34.resolution;
  uv = (vec2<f32>(x_243.x, x_243.y) / x_246);
  color = vec3<f32>(1.0, 2.0, 3.0);
  let x_249 : i32 = obj.numbers[0];
  let x_252 : f32 = color.x;
  color.x = (x_252 + f32(x_249));
  let x_256 : f32 = uv.x;
  if ((x_256 > 0.25)) {
    let x_261 : i32 = obj.numbers[1];
    let x_264 : f32 = color.x;
    color.x = (x_264 + f32(x_261));
  }
  let x_268 : f32 = uv.x;
  if ((x_268 > 0.5)) {
    let x_273 : i32 = obj.numbers[2];
    let x_276 : f32 = color.y;
    color.y = (x_276 + f32(x_273));
  }
  let x_280 : f32 = uv.x;
  if ((x_280 > 0.75)) {
    let x_285 : i32 = obj.numbers[3];
    let x_288 : f32 = color.z;
    color.z = (x_288 + f32(x_285));
  }
  let x_292 : i32 = obj.numbers[4];
  let x_295 : f32 = color.y;
  color.y = (x_295 + f32(x_292));
  let x_299 : f32 = uv.y;
  if ((x_299 > 0.25)) {
    let x_304 : i32 = obj.numbers[5];
    let x_307 : f32 = color.x;
    color.x = (x_307 + f32(x_304));
  }
  let x_311 : f32 = uv.y;
  if ((x_311 > 0.5)) {
    let x_316 : i32 = obj.numbers[6];
    let x_319 : f32 = color.y;
    color.y = (x_319 + f32(x_316));
  }
  let x_323 : f32 = uv.y;
  if ((x_323 > 0.75)) {
    let x_328 : i32 = obj.numbers[7];
    let x_331 : f32 = color.z;
    color.z = (x_331 + f32(x_328));
  }
  let x_335 : i32 = obj.numbers[8];
  let x_338 : f32 = color.z;
  color.z = (x_338 + f32(x_335));
  let x_342 : f32 = uv.x;
  let x_344 : f32 = uv.y;
  if ((abs((x_342 - x_344)) < 0.25)) {
    let x_351 : i32 = obj.numbers[9];
    let x_354 : f32 = color.x;
    color.x = (x_354 + f32(x_351));
  }
  let x_357 : vec3<f32> = color;
  let x_358 : vec3<f32> = normalize(x_357);
  frag_color = vec4<f32>(x_358.x, x_358.y, x_358.z, 1.0);
  let x_363 : vec4<f32> = x_GLF_pos;
  gl_Position = x_363;
  return;
}

struct main_out {
  [[location(0)]]
  frag_color_1 : vec4<f32>;
  [[builtin(position)]]
  gl_Position : vec4<f32>;
};

[[stage(vertex)]]
fn main([[location(0)]] x_GLF_pos_param : vec4<f32>) -> main_out {
  x_GLF_pos = x_GLF_pos_param;
  main_1();
  return main_out(frag_color, gl_Position);
}

fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
  var temp : i32;
  let x_366 : i32 = *(i);
  let x_368 : i32 = obj.numbers[x_366];
  temp = x_368;
  let x_369 : i32 = *(i);
  let x_370 : i32 = *(j);
  let x_372 : i32 = obj.numbers[x_370];
  obj.numbers[x_369] = x_372;
  let x_374 : i32 = *(j);
  let x_375 : i32 = temp;
  obj.numbers[x_374] = x_375;
  return;
}

fn performPartition_i1_i1_(l : ptr<function, i32>, h : ptr<function, i32>) -> i32 {
  var pivot : i32;
  var i_1 : i32;
  var j_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  var param_3 : i32;
  let x_378 : i32 = *(h);
  let x_380 : i32 = obj.numbers[x_378];
  pivot = x_380;
  let x_381 : i32 = *(l);
  i_1 = (x_381 - 1);
  let x_383 : i32 = *(l);
  j_1 = x_383;
  loop {
    let x_388 : i32 = j_1;
    let x_389 : i32 = *(h);
    if ((x_388 <= (x_389 - 1))) {
    } else {
      break;
    }
    let x_393 : i32 = j_1;
    let x_395 : i32 = obj.numbers[x_393];
    let x_396 : i32 = pivot;
    if ((x_395 <= x_396)) {
      let x_400 : i32 = i_1;
      i_1 = (x_400 + 1);
      let x_402 : i32 = i_1;
      param = x_402;
      let x_403 : i32 = j_1;
      param_1 = x_403;
      swap_i1_i1_(&(param), &(param_1));
    }

    continuing {
      let x_405 : i32 = j_1;
      j_1 = (x_405 + 1);
    }
  }
  let x_407 : i32 = i_1;
  param_2 = (x_407 + 1);
  let x_409 : i32 = *(h);
  param_3 = x_409;
  swap_i1_i1_(&(param_2), &(param_3));
  let x_411 : i32 = i_1;
  return (x_411 + 1);
}

fn quicksort_() {
  var l_1 : i32;
  var h_1 : i32;
  var top : i32;
  var stack : array<i32, 10>;
  var p : i32;
  var param_4 : i32;
  var param_5 : i32;
  l_1 = 0;
  h_1 = 9;
  top = -1;
  let x_414 : i32 = top;
  let x_415 : i32 = (x_414 + 1);
  top = x_415;
  let x_416 : i32 = l_1;
  stack[x_415] = x_416;
  let x_418 : i32 = top;
  let x_419 : i32 = (x_418 + 1);
  top = x_419;
  let x_420 : i32 = h_1;
  stack[x_419] = x_420;
  loop {
    let x_426 : i32 = top;
    if ((x_426 >= 0)) {
    } else {
      break;
    }
    let x_429 : i32 = top;
    top = (x_429 - 1);
    let x_432 : i32 = stack[x_429];
    h_1 = x_432;
    let x_433 : i32 = top;
    top = (x_433 - 1);
    let x_436 : i32 = stack[x_433];
    l_1 = x_436;
    let x_437 : i32 = l_1;
    param_4 = x_437;
    let x_438 : i32 = h_1;
    param_5 = x_438;
    let x_439 : i32 = performPartition_i1_i1_(&(param_4), &(param_5));
    p = x_439;
    let x_440 : i32 = p;
    let x_442 : i32 = l_1;
    if (((x_440 - 1) > x_442)) {
      let x_446 : i32 = top;
      let x_447 : i32 = (x_446 + 1);
      top = x_447;
      let x_448 : i32 = l_1;
      stack[x_447] = x_448;
      let x_450 : i32 = top;
      let x_451 : i32 = (x_450 + 1);
      top = x_451;
      let x_452 : i32 = p;
      stack[x_451] = (x_452 - 1);
    }
    let x_455 : i32 = p;
    let x_457 : i32 = h_1;
    if (((x_455 + 1) < x_457)) {
      let x_461 : i32 = top;
      let x_462 : i32 = (x_461 + 1);
      top = x_462;
      let x_463 : i32 = p;
      stack[x_462] = (x_463 + 1);
      let x_466 : i32 = top;
      let x_467 : i32 = (x_466 + 1);
      top = x_467;
      let x_468 : i32 = h_1;
      stack[x_467] = x_468;
    }
  }
  return;
}
