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

var<private> data : array<i32, 10>;

var<private> temp : array<i32, 10>;

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
  var k : i32;
  var i : i32;
  var j : i32;
  var i_1 : i32;
  let x_262 : i32 = *(from);
  k = x_262;
  let x_263 : i32 = *(from);
  i = x_263;
  let x_264 : i32 = *(mid);
  j = (x_264 + 1);
  loop {
    let x_270 : i32 = i;
    let x_271 : i32 = *(mid);
    let x_273 : i32 = j;
    let x_274 : i32 = *(to);
    if (((x_270 <= x_271) && (x_273 <= x_274))) {
    } else {
      break;
    }
    let x_278 : i32 = i;
    let x_280 : i32 = data[x_278];
    let x_281 : i32 = j;
    let x_283 : i32 = data[x_281];
    if ((x_280 < x_283)) {
      let x_288 : i32 = k;
      k = (x_288 + 1);
      let x_290 : i32 = i;
      i = (x_290 + 1);
      let x_293 : i32 = data[x_290];
      temp[x_288] = x_293;
    } else {
      let x_295 : i32 = k;
      k = (x_295 + 1);
      let x_297 : i32 = j;
      j = (x_297 + 1);
      let x_300 : i32 = data[x_297];
      temp[x_295] = x_300;
    }
  }
  loop {
    let x_306 : i32 = i;
    let x_308 : i32 = i;
    let x_309 : i32 = *(mid);
    if (((x_306 < 10) && (x_308 <= x_309))) {
    } else {
      break;
    }
    let x_313 : i32 = k;
    k = (x_313 + 1);
    let x_315 : i32 = i;
    i = (x_315 + 1);
    let x_318 : i32 = data[x_315];
    temp[x_313] = x_318;
  }
  let x_320 : i32 = *(from);
  i_1 = x_320;
  loop {
    let x_325 : i32 = i_1;
    let x_326 : i32 = *(to);
    if ((x_325 <= x_326)) {
    } else {
      break;
    }
    let x_329 : i32 = i_1;
    let x_330 : i32 = i_1;
    let x_332 : i32 = temp[x_330];
    data[x_329] = x_332;

    continuing {
      let x_334 : i32 = i_1;
      i_1 = (x_334 + 1);
    }
  }
  return;
}

fn mergeSort_() {
  var low : i32;
  var high : i32;
  var m : i32;
  var i_2 : i32;
  var from_1 : i32;
  var mid_1 : i32;
  var to_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  low = 0;
  high = 9;
  m = 1;
  loop {
    let x_341 : i32 = m;
    let x_342 : i32 = high;
    if ((x_341 <= x_342)) {
    } else {
      break;
    }
    let x_345 : i32 = low;
    i_2 = x_345;
    loop {
      let x_350 : i32 = i_2;
      let x_351 : i32 = high;
      if ((x_350 < x_351)) {
      } else {
        break;
      }
      let x_354 : i32 = i_2;
      from_1 = x_354;
      let x_355 : i32 = i_2;
      let x_356 : i32 = m;
      mid_1 = ((x_355 + x_356) - 1);
      let x_359 : i32 = i_2;
      let x_360 : i32 = m;
      let x_364 : i32 = high;
      to_1 = min(((x_359 + (2 * x_360)) - 1), x_364);
      let x_366 : i32 = from_1;
      param = x_366;
      let x_367 : i32 = mid_1;
      param_1 = x_367;
      let x_368 : i32 = to_1;
      param_2 = x_368;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_370 : i32 = m;
        let x_372 : i32 = i_2;
        i_2 = (x_372 + (2 * x_370));
      }
    }

    continuing {
      let x_374 : i32 = m;
      m = (2 * x_374);
    }
  }
  return;
}

fn main_1() {
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  var int_i : i32;
  let x_85 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_85);
  loop {
    let x_91 : i32 = i_3;
    switch(x_91) {
      case 9: {
        let x_121 : i32 = i_3;
        data[x_121] = -5;
      }
      case 8: {
        let x_119 : i32 = i_3;
        data[x_119] = -4;
      }
      case 7: {
        let x_117 : i32 = i_3;
        data[x_117] = -3;
      }
      case 6: {
        let x_115 : i32 = i_3;
        data[x_115] = -2;
      }
      case 5: {
        let x_113 : i32 = i_3;
        data[x_113] = -1;
      }
      case 4: {
        let x_111 : i32 = i_3;
        data[x_111] = 0;
      }
      case 3: {
        let x_109 : i32 = i_3;
        data[x_109] = 1;
      }
      case 2: {
        let x_107 : i32 = i_3;
        data[x_107] = 2;
      }
      case 1: {
        let x_105 : i32 = i_3;
        data[x_105] = 3;
      }
      case 0: {
        let x_103 : i32 = i_3;
        data[x_103] = 4;
      }
      default: {
      }
    }
    let x_123 : i32 = i_3;
    i_3 = (x_123 + 1);

    continuing {
      let x_125 : i32 = i_3;
      if ((x_125 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_131 : i32 = j_1;
    if ((x_131 < 10)) {
    } else {
      break;
    }
    let x_134 : i32 = j_1;
    let x_135 : i32 = j_1;
    let x_137 : i32 = data[x_135];
    temp[x_134] = x_137;

    continuing {
      let x_139 : i32 = j_1;
      j_1 = (x_139 + 1);
    }
  }
  mergeSort_();
  let x_143 : f32 = gl_FragCoord.y;
  if ((i32(x_143) < 30)) {
    let x_150 : i32 = data[0];
    grey = (0.5 + (f32(x_150) / 10.0));
  } else {
    let x_155 : f32 = gl_FragCoord.y;
    if ((i32(x_155) < 60)) {
      let x_162 : i32 = data[1];
      grey = (0.5 + (f32(x_162) / 10.0));
    } else {
      let x_167 : f32 = gl_FragCoord.y;
      if ((i32(x_167) < 90)) {
        let x_174 : i32 = data[2];
        grey = (0.5 + (f32(x_174) / 10.0));
      } else {
        let x_179 : f32 = gl_FragCoord.y;
        if ((i32(x_179) < 120)) {
          let x_186 : i32 = data[3];
          grey = (0.5 + (f32(x_186) / 10.0));
        } else {
          let x_191 : f32 = gl_FragCoord.y;
          if ((i32(x_191) < 150)) {
            int_i = 1;
            loop {
              let x_201 : i32 = int_i;
              let x_203 : f32 = x_28.injectionSwitch.x;
              if ((x_201 > i32(x_203))) {
              } else {
                break;
              }
              discard;
            }
          } else {
            let x_208 : f32 = gl_FragCoord.y;
            if ((i32(x_208) < 180)) {
              let x_215 : i32 = data[5];
              grey = (0.5 + (f32(x_215) / 10.0));
            } else {
              let x_220 : f32 = gl_FragCoord.y;
              if ((i32(x_220) < 210)) {
                let x_227 : i32 = data[6];
                grey = (0.5 + (f32(x_227) / 10.0));
              } else {
                let x_232 : f32 = gl_FragCoord.y;
                if ((i32(x_232) < 240)) {
                  let x_239 : i32 = data[7];
                  grey = (0.5 + (f32(x_239) / 10.0));
                } else {
                  let x_244 : f32 = gl_FragCoord.y;
                  if ((i32(x_244) < 270)) {
                    let x_251 : i32 = data[8];
                    grey = (0.5 + (f32(x_251) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_255 : f32 = grey;
  let x_256 : vec3<f32> = vec3<f32>(x_255, x_255, x_255);
  x_GLF_color = vec4<f32>(x_256.x, x_256.y, x_256.z, 1.0);
  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);
}
