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_251 : i32 = *(from);
  k = x_251;
  let x_252 : i32 = *(from);
  i = x_252;
  let x_253 : i32 = *(mid);
  j = (x_253 + 1);
  loop {
    let x_259 : i32 = i;
    let x_260 : i32 = *(mid);
    let x_262 : i32 = j;
    let x_263 : i32 = *(to);
    if (((x_259 <= x_260) && (x_262 <= x_263))) {
    } else {
      break;
    }
    let x_267 : i32 = i;
    let x_269 : i32 = data[x_267];
    let x_270 : i32 = j;
    let x_272 : i32 = data[x_270];
    if ((x_269 < x_272)) {
      let x_277 : i32 = k;
      k = (x_277 + 1);
      let x_279 : i32 = i;
      i = (x_279 + 1);
      let x_282 : i32 = data[x_279];
      temp[x_277] = x_282;
    } else {
      let x_284 : i32 = k;
      k = (x_284 + 1);
      let x_286 : i32 = j;
      j = (x_286 + 1);
      let x_289 : i32 = data[x_286];
      temp[x_284] = x_289;
    }
  }
  loop {
    let x_295 : i32 = i;
    let x_297 : i32 = i;
    let x_298 : i32 = *(mid);
    if (((x_295 < 10) && (x_297 <= x_298))) {
    } else {
      break;
    }
    let x_302 : i32 = k;
    k = (x_302 + 1);
    let x_304 : i32 = i;
    i = (x_304 + 1);
    let x_307 : i32 = data[x_304];
    temp[x_302] = x_307;
  }
  let x_309 : i32 = *(from);
  i_1 = x_309;
  loop {
    let x_314 : i32 = i_1;
    let x_315 : i32 = *(to);
    if ((x_314 <= x_315)) {
    } else {
      break;
    }
    let x_318 : i32 = i_1;
    let x_319 : i32 = i_1;
    let x_321 : i32 = temp[x_319];
    data[x_318] = x_321;

    continuing {
      let x_323 : i32 = i_1;
      i_1 = (x_323 + 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_330 : i32 = m;
    let x_331 : i32 = high;
    if ((x_330 <= x_331)) {
    } else {
      break;
    }
    let x_334 : i32 = low;
    i_2 = x_334;
    loop {
      let x_339 : i32 = i_2;
      let x_340 : i32 = high;
      if ((x_339 < x_340)) {
      } else {
        break;
      }
      let x_343 : i32 = i_2;
      from_1 = x_343;
      let x_344 : i32 = i_2;
      let x_345 : i32 = m;
      mid_1 = ((x_344 + x_345) - 1);
      let x_348 : i32 = i_2;
      let x_349 : i32 = m;
      let x_353 : i32 = high;
      to_1 = min(((x_348 + (2 * x_349)) - 1), x_353);
      let x_355 : i32 = from_1;
      param = x_355;
      let x_356 : i32 = mid_1;
      param_1 = x_356;
      let x_357 : i32 = to_1;
      param_2 = x_357;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_359 : i32 = m;
        let x_361 : i32 = i_2;
        i_2 = (x_361 + (2 * x_359));
      }
    }

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

fn main_1() {
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  let x_84 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_84);
  loop {
    let x_90 : i32 = i_3;
    switch(x_90) {
      case 9: {
        let x_120 : i32 = i_3;
        data[x_120] = -5;
      }
      case 8: {
        let x_118 : i32 = i_3;
        data[x_118] = -4;
      }
      case 7: {
        let x_116 : i32 = i_3;
        data[x_116] = -3;
      }
      case 6: {
        let x_114 : i32 = i_3;
        data[x_114] = -2;
      }
      case 5: {
        let x_112 : i32 = i_3;
        data[x_112] = -1;
      }
      case 4: {
        let x_110 : i32 = i_3;
        data[x_110] = 0;
      }
      case 3: {
        let x_108 : i32 = i_3;
        data[x_108] = 1;
      }
      case 2: {
        let x_106 : i32 = i_3;
        data[x_106] = 2;
      }
      case 1: {
        let x_104 : i32 = i_3;
        data[x_104] = 3;
      }
      case 0: {
        let x_102 : i32 = i_3;
        data[x_102] = 4;
      }
      default: {
      }
    }
    let x_122 : i32 = i_3;
    i_3 = (x_122 + 1);

    continuing {
      let x_124 : i32 = i_3;
      if ((x_124 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_130 : i32 = j_1;
    if ((x_130 < 10)) {
    } else {
      break;
    }
    let x_133 : i32 = j_1;
    let x_134 : i32 = j_1;
    let x_136 : i32 = data[x_134];
    temp[x_133] = x_136;

    continuing {
      let x_138 : i32 = j_1;
      j_1 = (x_138 + 1);
    }
  }
  mergeSort_();
  let x_142 : f32 = gl_FragCoord.y;
  if ((i32(x_142) < 30)) {
    let x_149 : i32 = data[0];
    grey = (0.5 + (f32(x_149) / 10.0));
  } else {
    let x_154 : f32 = gl_FragCoord.y;
    if ((i32(x_154) < 60)) {
      let x_161 : i32 = data[1];
      grey = (0.5 + (f32(x_161) / 10.0));
    } else {
      let x_166 : f32 = gl_FragCoord.y;
      if ((i32(x_166) < 90)) {
        let x_173 : i32 = data[2];
        grey = (0.5 + (f32(x_173) / 10.0));
      } else {
        let x_178 : f32 = gl_FragCoord.y;
        if ((i32(x_178) < 120)) {
          let x_185 : i32 = data[3];
          grey = (0.5 + (f32(x_185) / 10.0));
        } else {
          let x_190 : f32 = gl_FragCoord.y;
          if ((i32(x_190) < 150)) {
            discard;
          } else {
            let x_197 : f32 = gl_FragCoord.y;
            if ((i32(x_197) < 180)) {
              let x_204 : i32 = data[5];
              grey = (0.5 + (f32(x_204) / 10.0));
            } else {
              let x_209 : f32 = gl_FragCoord.y;
              if ((i32(x_209) < 210)) {
                let x_216 : i32 = data[6];
                grey = (0.5 + (f32(x_216) / 10.0));
              } else {
                let x_221 : f32 = gl_FragCoord.y;
                if ((i32(x_221) < 240)) {
                  let x_228 : i32 = data[7];
                  grey = (0.5 + (f32(x_228) / 10.0));
                } else {
                  let x_233 : f32 = gl_FragCoord.y;
                  if ((i32(x_233) < 270)) {
                    let x_240 : i32 = data[8];
                    grey = (0.5 + (f32(x_240) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_244 : f32 = grey;
  let x_245 : vec3<f32> = vec3<f32>(x_244, x_244, x_244);
  x_GLF_color = vec4<f32>(x_245.x, x_245.y, x_245.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);
}
