#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  int arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void merge_i1_i1_i1_(thread int* const from, thread int* const mid, thread int* const to, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
  int k = 0;
  int i = 0;
  int j = 0;
  int i_1 = 0;
  int const x_302 = *(from);
  k = x_302;
  int const x_303 = *(from);
  i = x_303;
  int const x_304 = *(mid);
  j = (x_304 + 1);
  while (true) {
    int const x_310 = i;
    int const x_311 = *(mid);
    int const x_313 = j;
    int const x_314 = *(to);
    if (((x_310 <= x_311) && (x_313 <= x_314))) {
    } else {
      break;
    }
    int const x_318 = i;
    int const x_320 = (*(tint_symbol_5)).arr[x_318];
    int const x_321 = j;
    int const x_323 = (*(tint_symbol_5)).arr[x_321];
    if ((x_320 < x_323)) {
      int const x_328 = k;
      k = (x_328 + 1);
      int const x_330 = i;
      i = (x_330 + 1);
      int const x_333 = (*(tint_symbol_5)).arr[x_330];
      (*(tint_symbol_6)).arr[x_328] = x_333;
    } else {
      int const x_335 = k;
      k = (x_335 + 1);
      int const x_337 = j;
      j = (x_337 + 1);
      int const x_340 = (*(tint_symbol_5)).arr[x_337];
      (*(tint_symbol_6)).arr[x_335] = x_340;
    }
  }
  while (true) {
    int const x_346 = i;
    int const x_348 = i;
    int const x_349 = *(mid);
    if (((x_346 < 10) && (x_348 <= x_349))) {
    } else {
      break;
    }
    int const x_353 = k;
    k = (x_353 + 1);
    int const x_355 = i;
    i = (x_355 + 1);
    int const x_358 = (*(tint_symbol_5)).arr[x_355];
    (*(tint_symbol_6)).arr[x_353] = x_358;
  }
  int const x_360 = *(from);
  i_1 = x_360;
  while (true) {
    int const x_365 = i_1;
    int const x_366 = *(to);
    if ((x_365 <= x_366)) {
    } else {
      break;
    }
    int const x_369 = i_1;
    int const x_370 = i_1;
    int const x_372 = (*(tint_symbol_6)).arr[x_370];
    (*(tint_symbol_5)).arr[x_369] = x_372;
    {
      int const x_374 = i_1;
      i_1 = (x_374 + 1);
    }
  }
  return;
}

void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
  int x_85 = 0;
  int x_86 = 0;
  int x_87 = 0;
  int x_88 = 0;
  int x_89 = 0;
  int x_90 = 0;
  int x_91 = 0;
  int x_92 = 0;
  int x_93 = 0;
  int x_94 = 0;
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float const x_96 = x_28.injectionSwitch.x;
  i_3 = int(x_96);
  while (true) {
    int const x_102 = i_3;
    switch(x_102) {
      case 9: {
        int const x_132 = i_3;
        (*(tint_symbol_7)).arr[x_132] = -5;
        break;
      }
      case 8: {
        int const x_130 = i_3;
        (*(tint_symbol_7)).arr[x_130] = -4;
        break;
      }
      case 7: {
        int const x_128 = i_3;
        (*(tint_symbol_7)).arr[x_128] = -3;
        break;
      }
      case 6: {
        int const x_126 = i_3;
        (*(tint_symbol_7)).arr[x_126] = -2;
        break;
      }
      case 5: {
        int const x_124 = i_3;
        (*(tint_symbol_7)).arr[x_124] = -1;
        break;
      }
      case 4: {
        int const x_122 = i_3;
        (*(tint_symbol_7)).arr[x_122] = 0;
        break;
      }
      case 3: {
        int const x_120 = i_3;
        (*(tint_symbol_7)).arr[x_120] = 1;
        break;
      }
      case 2: {
        int const x_118 = i_3;
        (*(tint_symbol_7)).arr[x_118] = 2;
        break;
      }
      case 1: {
        int const x_116 = i_3;
        (*(tint_symbol_7)).arr[x_116] = 3;
        break;
      }
      case 0: {
        int const x_114 = i_3;
        (*(tint_symbol_7)).arr[x_114] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_134 = i_3;
    i_3 = (x_134 + 1);
    {
      int const x_136 = i_3;
      if ((x_136 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_142 = j_1;
    if ((x_142 < 10)) {
    } else {
      break;
    }
    int const x_145 = j_1;
    int const x_146 = j_1;
    int const x_148 = (*(tint_symbol_7)).arr[x_146];
    (*(tint_symbol_8)).arr[x_145] = x_148;
    {
      int const x_150 = j_1;
      j_1 = (x_150 + 1);
    }
  }
  x_94 = 0;
  x_93 = 9;
  x_92 = 1;
  while (true) {
    int const x_156 = x_92;
    int const x_157 = x_93;
    if ((x_156 <= x_157)) {
    } else {
      break;
    }
    int const x_160 = x_94;
    x_91 = x_160;
    while (true) {
      int const x_165 = x_91;
      int const x_166 = x_93;
      if ((x_165 < x_166)) {
      } else {
        break;
      }
      int const x_169 = x_91;
      x_90 = x_169;
      int const x_170 = x_91;
      int const x_171 = x_92;
      x_89 = ((x_170 + x_171) - 1);
      int const x_174 = x_91;
      int const x_175 = x_92;
      int const x_179 = x_93;
      x_88 = min(((x_174 + (2 * x_175)) - 1), x_179);
      int const x_181 = x_90;
      x_87 = x_181;
      int const x_182 = x_89;
      x_86 = x_182;
      int const x_183 = x_88;
      x_85 = x_183;
      merge_i1_i1_i1_(&(x_87), &(x_86), &(x_85), tint_symbol_7, tint_symbol_8);
      {
        int const x_185 = x_92;
        int const x_187 = x_91;
        x_91 = (x_187 + (2 * x_185));
      }
    }
    {
      int const x_189 = x_92;
      x_92 = (2 * x_189);
    }
  }
  float const x_193 = (*(tint_symbol_9)).y;
  if ((int(x_193) < 30)) {
    int const x_200 = (*(tint_symbol_7)).arr[0];
    grey = (0.5f + (float(x_200) / 10.0f));
  } else {
    float const x_205 = (*(tint_symbol_9)).y;
    if ((int(x_205) < 60)) {
      int const x_212 = (*(tint_symbol_7)).arr[1];
      grey = (0.5f + (float(x_212) / 10.0f));
    } else {
      float const x_217 = (*(tint_symbol_9)).y;
      if ((int(x_217) < 90)) {
        int const x_224 = (*(tint_symbol_7)).arr[2];
        grey = (0.5f + (float(x_224) / 10.0f));
      } else {
        float const x_229 = (*(tint_symbol_9)).y;
        if ((int(x_229) < 120)) {
          int const x_236 = (*(tint_symbol_7)).arr[3];
          grey = (0.5f + (float(x_236) / 10.0f));
        } else {
          float const x_241 = (*(tint_symbol_9)).y;
          if ((int(x_241) < 150)) {
            discard_fragment();
          } else {
            float const x_248 = (*(tint_symbol_9)).y;
            if ((int(x_248) < 180)) {
              int const x_255 = (*(tint_symbol_7)).arr[5];
              grey = (0.5f + (float(x_255) / 10.0f));
            } else {
              float const x_260 = (*(tint_symbol_9)).y;
              if ((int(x_260) < 210)) {
                int const x_267 = (*(tint_symbol_7)).arr[6];
                grey = (0.5f + (float(x_267) / 10.0f));
              } else {
                float const x_272 = (*(tint_symbol_9)).y;
                if ((int(x_272) < 240)) {
                  int const x_279 = (*(tint_symbol_7)).arr[7];
                  grey = (0.5f + (float(x_279) / 10.0f));
                } else {
                  float const x_284 = (*(tint_symbol_9)).y;
                  if ((int(x_284) < 270)) {
                    int const x_291 = (*(tint_symbol_7)).arr[8];
                    grey = (0.5f + (float(x_291) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_295 = grey;
  float3 const x_296 = float3(x_295, x_295, x_295);
  *(tint_symbol_10) = float4(x_296.x, x_296.y, x_296.z, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
  thread float4 tint_symbol_11 = 0.0f;
  thread tint_array_wrapper tint_symbol_12 = {};
  thread tint_array_wrapper tint_symbol_13 = {};
  thread float4 tint_symbol_14 = 0.0f;
  tint_symbol_11 = gl_FragCoord_param;
  main_1(x_28, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_11), &(tint_symbol_14));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_14};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

void mergeSort_(thread tint_array_wrapper* const tint_symbol_15, thread tint_array_wrapper* const tint_symbol_16) {
  int low = 0;
  int high = 0;
  int m = 0;
  int i_2 = 0;
  int from_1 = 0;
  int mid_1 = 0;
  int to_1 = 0;
  int param = 0;
  int param_1 = 0;
  int param_2 = 0;
  low = 0;
  high = 9;
  m = 1;
  while (true) {
    int const x_381 = m;
    int const x_382 = high;
    if ((x_381 <= x_382)) {
    } else {
      break;
    }
    int const x_385 = low;
    i_2 = x_385;
    while (true) {
      int const x_390 = i_2;
      int const x_391 = high;
      if ((x_390 < x_391)) {
      } else {
        break;
      }
      int const x_394 = i_2;
      from_1 = x_394;
      int const x_395 = i_2;
      int const x_396 = m;
      mid_1 = ((x_395 + x_396) - 1);
      int const x_399 = i_2;
      int const x_400 = m;
      int const x_404 = high;
      to_1 = min(((x_399 + (2 * x_400)) - 1), x_404);
      int const x_406 = from_1;
      param = x_406;
      int const x_407 = mid_1;
      param_1 = x_407;
      int const x_408 = to_1;
      param_2 = x_408;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_15, tint_symbol_16);
      {
        int const x_410 = m;
        int const x_412 = i_2;
        i_2 = (x_412 + (2 * x_410));
      }
    }
    {
      int const x_414 = m;
      m = (2 * x_414);
    }
  }
  return;
}

