#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_(constant buf0& x_28, 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_255 = *(from);
  k = x_255;
  int const x_256 = *(from);
  i = x_256;
  int const x_257 = *(mid);
  j = (x_257 + 1);
  while (true) {
    int x_283 = 0;
    int x_284 = 0;
    int x_303 = 0;
    int x_304 = 0;
    int x_318 = 0;
    int x_322 = 0;
    int x_337 = 0;
    int x_336 = 0;
    int x_350 = 0;
    int x_349 = 0;
    int x_364 = 0;
    int x_363 = 0;
    int x_285_phi = 0;
    int x_305_phi = 0;
    int x_326_phi = 0;
    int x_338_phi = 0;
    int x_351_phi = 0;
    int x_365_phi = 0;
    if ((1.0f >= 0.0f)) {
    } else {
      continue;
    }
    int const x_264 = i;
    int const x_265 = *(mid);
    int const x_267 = j;
    int const x_268 = *(to);
    if (((x_264 <= x_265) & (x_267 <= x_268))) {
    } else {
      break;
    }
    int const x_272 = i;
    int const x_274 = (*(tint_symbol_5)).arr[x_272];
    int const x_275 = j;
    int const x_277 = (*(tint_symbol_5)).arr[x_275];
    bool const x_278 = (x_274 < x_277);
    if (x_278) {
      x_283 = k;
      x_285_phi = x_283;
    } else {
      x_284 = 0;
      x_285_phi = x_284;
    }
    int const x_285 = x_285_phi;
    int const x_286 = (x_285 + 1);
    if (x_278) {
      k = x_286;
      float const x_291 = x_28.injectionSwitch.x;
      if (!((1.0f <= x_291))) {
      } else {
        continue;
      }
    }
    float const x_295 = x_28.injectionSwitch.y;
    if ((x_295 >= 0.0f)) {
    } else {
      continue;
    }
    int const x_298 = 0;
    if (x_278) {
      x_303 = i;
      x_305_phi = x_303;
    } else {
      x_304 = 0;
      x_305_phi = x_304;
    }
    int const x_305 = x_305_phi;
    int const x_307 = select(x_298, x_305, x_278);
    if (x_278) {
      i = (x_307 + 1);
    }
    int const x_313 = 0;
    if (x_278) {
      x_318 = (*(tint_symbol_5)).arr[x_307];
      float const x_320 = x_28.injectionSwitch.y;
      x_326_phi = x_318;
      if (!((0.0f <= x_320))) {
        continue;
      }
    } else {
      x_322 = 0;
      float const x_324 = x_28.injectionSwitch.y;
      x_326_phi = x_322;
      if (!((x_324 < 0.0f))) {
      } else {
        continue;
      }
    }
    int const x_326 = x_326_phi;
    if (x_278) {
      (*(tint_symbol_6)).arr[x_285] = select(x_313, x_326, x_278);
    }
    if (x_278) {
      x_337 = 0;
      x_338_phi = x_337;
    } else {
      x_336 = k;
      x_338_phi = x_336;
    }
    int const x_338 = x_338_phi;
    if (x_278) {
    } else {
      k = (x_338 + 1);
    }
    float const x_343 = x_28.injectionSwitch.x;
    if (!((1.0f <= x_343))) {
    } else {
      continue;
    }
    if (x_278) {
      x_350 = 0;
      x_351_phi = x_350;
    } else {
      x_349 = j;
      x_351_phi = x_349;
    }
    int const x_351 = x_351_phi;
    int const x_353 = 0;
    int const x_355 = select(x_351, x_353, x_278);
    if (x_278) {
    } else {
      j = (x_355 + 1);
    }
    if (x_278) {
      x_364 = 0;
      x_365_phi = x_364;
    } else {
      x_363 = (*(tint_symbol_5)).arr[x_355];
      x_365_phi = x_363;
    }
    int const x_365 = x_365_phi;
    if (x_278) {
    } else {
      (*(tint_symbol_6)).arr[x_338] = x_365;
    }
  }
  while (true) {
    int const x_374 = i;
    int const x_376 = i;
    int const x_377 = *(mid);
    if (((x_374 < 10) & (x_376 <= x_377))) {
    } else {
      break;
    }
    int const x_381 = k;
    k = (x_381 + 1);
    int const x_383 = i;
    i = (x_383 + 1);
    int const x_386 = (*(tint_symbol_5)).arr[x_383];
    (*(tint_symbol_6)).arr[x_381] = x_386;
  }
  int const x_388 = *(from);
  i_1 = x_388;
  while (true) {
    int const x_393 = i_1;
    int const x_394 = *(to);
    if ((x_393 <= x_394)) {
    } else {
      break;
    }
    int const x_397 = i_1;
    int const x_398 = i_1;
    int const x_400 = (*(tint_symbol_6)).arr[x_398];
    (*(tint_symbol_5)).arr[x_397] = x_400;
    {
      int const x_402 = i_1;
      i_1 = (x_402 + 1);
    }
  }
  return;
}

void mergeSort_(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_7, thread tint_array_wrapper* const tint_symbol_8) {
  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_409 = m;
    int const x_410 = high;
    if ((x_409 <= x_410)) {
    } else {
      break;
    }
    int const x_413 = low;
    i_2 = x_413;
    while (true) {
      int const x_418 = i_2;
      int const x_419 = high;
      if ((x_418 < x_419)) {
      } else {
        break;
      }
      int const x_422 = i_2;
      from_1 = x_422;
      int const x_423 = i_2;
      int const x_424 = m;
      mid_1 = ((x_423 + x_424) - 1);
      int const x_427 = i_2;
      int const x_428 = m;
      int const x_432 = high;
      to_1 = min(((x_427 + (2 * x_428)) - 1), x_432);
      int const x_434 = from_1;
      param = x_434;
      int const x_435 = mid_1;
      param_1 = x_435;
      int const x_436 = to_1;
      param_2 = x_436;
      merge_i1_i1_i1_(x_28, &(param), &(param_1), &(param_2), tint_symbol_7, tint_symbol_8);
      {
        int const x_438 = m;
        int const x_440 = i_2;
        i_2 = (x_440 + (2 * x_438));
      }
    }
    {
      int const x_442 = m;
      m = (2 * x_442);
    }
  }
  return;
}

void main_1(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12) {
  int i_3 = 0;
  int j_1 = 0;
  float grey = 0.0f;
  float const x_88 = x_28.injectionSwitch.x;
  i_3 = int(x_88);
  while (true) {
    int const x_94 = i_3;
    switch(x_94) {
      case 9: {
        int const x_124 = i_3;
        (*(tint_symbol_9)).arr[x_124] = -5;
        break;
      }
      case 8: {
        int const x_122 = i_3;
        (*(tint_symbol_9)).arr[x_122] = -4;
        break;
      }
      case 7: {
        int const x_120 = i_3;
        (*(tint_symbol_9)).arr[x_120] = -3;
        break;
      }
      case 6: {
        int const x_118 = i_3;
        (*(tint_symbol_9)).arr[x_118] = -2;
        break;
      }
      case 5: {
        int const x_116 = i_3;
        (*(tint_symbol_9)).arr[x_116] = -1;
        break;
      }
      case 4: {
        int const x_114 = i_3;
        (*(tint_symbol_9)).arr[x_114] = 0;
        break;
      }
      case 3: {
        int const x_112 = i_3;
        (*(tint_symbol_9)).arr[x_112] = 1;
        break;
      }
      case 2: {
        int const x_110 = i_3;
        (*(tint_symbol_9)).arr[x_110] = 2;
        break;
      }
      case 1: {
        int const x_108 = i_3;
        (*(tint_symbol_9)).arr[x_108] = 3;
        break;
      }
      case 0: {
        int const x_106 = i_3;
        (*(tint_symbol_9)).arr[x_106] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_126 = i_3;
    i_3 = (x_126 + 1);
    {
      int const x_128 = i_3;
      if ((x_128 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_134 = j_1;
    if ((x_134 < 10)) {
    } else {
      break;
    }
    int const x_137 = j_1;
    int const x_138 = j_1;
    int const x_140 = (*(tint_symbol_9)).arr[x_138];
    (*(tint_symbol_10)).arr[x_137] = x_140;
    {
      int const x_142 = j_1;
      j_1 = (x_142 + 1);
    }
  }
  mergeSort_(x_28, tint_symbol_9, tint_symbol_10);
  float const x_146 = (*(tint_symbol_11)).y;
  if ((int(x_146) < 30)) {
    int const x_153 = (*(tint_symbol_9)).arr[0];
    grey = (0.5f + (float(x_153) / 10.0f));
  } else {
    float const x_158 = (*(tint_symbol_11)).y;
    if ((int(x_158) < 60)) {
      int const x_165 = (*(tint_symbol_9)).arr[1];
      grey = (0.5f + (float(x_165) / 10.0f));
    } else {
      float const x_170 = (*(tint_symbol_11)).y;
      if ((int(x_170) < 90)) {
        int const x_177 = (*(tint_symbol_9)).arr[2];
        grey = (0.5f + (float(x_177) / 10.0f));
      } else {
        float const x_182 = (*(tint_symbol_11)).y;
        if ((int(x_182) < 120)) {
          int const x_189 = (*(tint_symbol_9)).arr[3];
          grey = (0.5f + (float(x_189) / 10.0f));
        } else {
          float const x_194 = (*(tint_symbol_11)).y;
          if ((int(x_194) < 150)) {
            discard_fragment();
          } else {
            float const x_201 = (*(tint_symbol_11)).y;
            if ((int(x_201) < 180)) {
              int const x_208 = (*(tint_symbol_9)).arr[5];
              grey = (0.5f + (float(x_208) / 10.0f));
            } else {
              float const x_213 = (*(tint_symbol_11)).y;
              if ((int(x_213) < 210)) {
                int const x_220 = (*(tint_symbol_9)).arr[6];
                grey = (0.5f + (float(x_220) / 10.0f));
              } else {
                float const x_225 = (*(tint_symbol_11)).y;
                if ((int(x_225) < 240)) {
                  int const x_232 = (*(tint_symbol_9)).arr[7];
                  grey = (0.5f + (float(x_232) / 10.0f));
                } else {
                  float const x_237 = (*(tint_symbol_11)).y;
                  if ((int(x_237) < 270)) {
                    int const x_244 = (*(tint_symbol_9)).arr[8];
                    grey = (0.5f + (float(x_244) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_248 = grey;
  float3 const x_249 = float3(x_248, x_248, x_248);
  *(tint_symbol_12) = float4(x_249.x, x_249.y, x_249.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_13 = 0.0f;
  thread tint_array_wrapper tint_symbol_14 = {};
  thread tint_array_wrapper tint_symbol_15 = {};
  thread float4 tint_symbol_16 = 0.0f;
  tint_symbol_13 = gl_FragCoord_param;
  main_1(x_28, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_13), &(tint_symbol_16));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_16};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

