#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ float2 injectionSwitch;
};
struct tint_array_wrapper {
  int arr[10];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  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_3, thread tint_array_wrapper* const tint_symbol_4) {
  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 = as_type<int>((as_type<uint>(x_257) + as_type<uint>(1)));
  while (true) {
    int x_285 = 0;
    int x_286 = 0;
    int x_305 = 0;
    int x_306 = 0;
    int x_320 = 0;
    int x_324 = 0;
    int x_339 = 0;
    int x_338 = 0;
    int x_352 = 0;
    int x_351 = 0;
    int x_366 = 0;
    int x_365 = 0;
    int x_287_phi = 0;
    int x_307_phi = 0;
    int x_328_phi = 0;
    int x_340_phi = 0;
    int x_353_phi = 0;
    int x_367_phi = 0;
    float const x_261 = x_28.injectionSwitch.x;
    if ((1.0f >= x_261)) {
    } else {
      continue;
    }
    int const x_266 = i;
    int const x_267 = *(mid);
    int const x_269 = j;
    int const x_270 = *(to);
    if (((x_266 <= x_267) & (x_269 <= x_270))) {
    } else {
      break;
    }
    int const x_274 = i;
    int const x_276 = (*(tint_symbol_3)).arr[x_274];
    int const x_277 = j;
    int const x_279 = (*(tint_symbol_3)).arr[x_277];
    bool const x_280 = (x_276 < x_279);
    if (x_280) {
      x_285 = k;
      x_287_phi = x_285;
    } else {
      x_286 = 0;
      x_287_phi = x_286;
    }
    int const x_287 = x_287_phi;
    int const x_288 = as_type<int>((as_type<uint>(x_287) + as_type<uint>(1)));
    if (x_280) {
      k = x_288;
      float const x_293 = x_28.injectionSwitch.x;
      if (!((1.0f <= x_293))) {
      } else {
        continue;
      }
    }
    float const x_297 = x_28.injectionSwitch.y;
    if ((x_297 >= 0.0f)) {
    } else {
      continue;
    }
    int const x_300 = 0;
    if (x_280) {
      x_305 = i;
      x_307_phi = x_305;
    } else {
      x_306 = 0;
      x_307_phi = x_306;
    }
    int const x_307 = x_307_phi;
    int const x_309 = select(x_300, x_307, x_280);
    if (x_280) {
      i = as_type<int>((as_type<uint>(x_309) + as_type<uint>(1)));
    }
    int const x_315 = 0;
    if (x_280) {
      x_320 = (*(tint_symbol_3)).arr[x_309];
      float const x_322 = x_28.injectionSwitch.y;
      x_328_phi = x_320;
      if (!((0.0f <= x_322))) {
        continue;
      }
    } else {
      x_324 = 0;
      float const x_326 = x_28.injectionSwitch.y;
      x_328_phi = x_324;
      if (!((x_326 < 0.0f))) {
      } else {
        continue;
      }
    }
    int const x_328 = x_328_phi;
    if (x_280) {
      (*(tint_symbol_4)).arr[x_287] = select(x_315, x_328, x_280);
    }
    if (x_280) {
      x_339 = 0;
      x_340_phi = x_339;
    } else {
      x_338 = k;
      x_340_phi = x_338;
    }
    int const x_340 = x_340_phi;
    if (x_280) {
    } else {
      k = as_type<int>((as_type<uint>(x_340) + as_type<uint>(1)));
    }
    float const x_345 = x_28.injectionSwitch.x;
    if (!((1.0f <= x_345))) {
    } else {
      continue;
    }
    if (x_280) {
      x_352 = 0;
      x_353_phi = x_352;
    } else {
      x_351 = j;
      x_353_phi = x_351;
    }
    int const x_353 = x_353_phi;
    int const x_355 = 0;
    int const x_357 = select(x_353, x_355, x_280);
    if (x_280) {
    } else {
      j = as_type<int>((as_type<uint>(x_357) + as_type<uint>(1)));
    }
    if (x_280) {
      x_366 = 0;
      x_367_phi = x_366;
    } else {
      x_365 = (*(tint_symbol_3)).arr[x_357];
      x_367_phi = x_365;
    }
    int const x_367 = x_367_phi;
    if (x_280) {
    } else {
      (*(tint_symbol_4)).arr[x_340] = x_367;
    }
  }
  while (true) {
    int const x_376 = i;
    int const x_378 = i;
    int const x_379 = *(mid);
    if (((x_376 < 10) & (x_378 <= x_379))) {
    } else {
      break;
    }
    int const x_383 = k;
    k = as_type<int>((as_type<uint>(x_383) + as_type<uint>(1)));
    int const x_385 = i;
    i = as_type<int>((as_type<uint>(x_385) + as_type<uint>(1)));
    int const x_388 = (*(tint_symbol_3)).arr[x_385];
    (*(tint_symbol_4)).arr[x_383] = x_388;
  }
  int const x_390 = *(from);
  i_1 = x_390;
  while (true) {
    int const x_395 = i_1;
    int const x_396 = *(to);
    if ((x_395 <= x_396)) {
    } else {
      break;
    }
    int const x_399 = i_1;
    int const x_400 = i_1;
    int const x_402 = (*(tint_symbol_4)).arr[x_400];
    (*(tint_symbol_3)).arr[x_399] = x_402;
    {
      int const x_404 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_404) + as_type<uint>(1)));
    }
  }
  return;
}

void mergeSort_(constant buf0& x_28, thread tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper* const tint_symbol_6) {
  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_411 = m;
    int const x_412 = high;
    if ((x_411 <= x_412)) {
    } else {
      break;
    }
    int const x_415 = low;
    i_2 = x_415;
    while (true) {
      int const x_420 = i_2;
      int const x_421 = high;
      if ((x_420 < x_421)) {
      } else {
        break;
      }
      int const x_424 = i_2;
      from_1 = x_424;
      int const x_425 = i_2;
      int const x_426 = m;
      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_425) + as_type<uint>(x_426)))) - as_type<uint>(1)));
      int const x_429 = i_2;
      int const x_430 = m;
      int const x_434 = high;
      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_429) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_430))))))) - as_type<uint>(1))), x_434);
      int const x_436 = from_1;
      param = x_436;
      int const x_437 = mid_1;
      param_1 = x_437;
      int const x_438 = to_1;
      param_2 = x_438;
      merge_i1_i1_i1_(x_28, &(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
      {
        int const x_440 = m;
        int const x_442 = i_2;
        i_2 = as_type<int>((as_type<uint>(x_442) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_440))))));
      }
    }
    {
      int const x_444 = m;
      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_444)));
    }
  }
  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 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_7)).arr[x_124] = -5;
        break;
      }
      case 8: {
        int const x_122 = i_3;
        (*(tint_symbol_7)).arr[x_122] = -4;
        break;
      }
      case 7: {
        int const x_120 = i_3;
        (*(tint_symbol_7)).arr[x_120] = -3;
        break;
      }
      case 6: {
        int const x_118 = i_3;
        (*(tint_symbol_7)).arr[x_118] = -2;
        break;
      }
      case 5: {
        int const x_116 = i_3;
        (*(tint_symbol_7)).arr[x_116] = -1;
        break;
      }
      case 4: {
        int const x_114 = i_3;
        (*(tint_symbol_7)).arr[x_114] = 0;
        break;
      }
      case 3: {
        int const x_112 = i_3;
        (*(tint_symbol_7)).arr[x_112] = 1;
        break;
      }
      case 2: {
        int const x_110 = i_3;
        (*(tint_symbol_7)).arr[x_110] = 2;
        break;
      }
      case 1: {
        int const x_108 = i_3;
        (*(tint_symbol_7)).arr[x_108] = 3;
        break;
      }
      case 0: {
        int const x_106 = i_3;
        (*(tint_symbol_7)).arr[x_106] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_126 = i_3;
    i_3 = as_type<int>((as_type<uint>(x_126) + as_type<uint>(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_7)).arr[x_138];
    (*(tint_symbol_8)).arr[x_137] = x_140;
    {
      int const x_142 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_142) + as_type<uint>(1)));
    }
  }
  mergeSort_(x_28, tint_symbol_7, tint_symbol_8);
  float const x_146 = (*(tint_symbol_9)).y;
  if ((int(x_146) < 30)) {
    int const x_153 = (*(tint_symbol_7)).arr[0];
    grey = (0.5f + (float(x_153) / 10.0f));
  } else {
    float const x_158 = (*(tint_symbol_9)).y;
    if ((int(x_158) < 60)) {
      int const x_165 = (*(tint_symbol_7)).arr[1];
      grey = (0.5f + (float(x_165) / 10.0f));
    } else {
      float const x_170 = (*(tint_symbol_9)).y;
      if ((int(x_170) < 90)) {
        int const x_177 = (*(tint_symbol_7)).arr[2];
        grey = (0.5f + (float(x_177) / 10.0f));
      } else {
        float const x_182 = (*(tint_symbol_9)).y;
        if ((int(x_182) < 120)) {
          int const x_189 = (*(tint_symbol_7)).arr[3];
          grey = (0.5f + (float(x_189) / 10.0f));
        } else {
          float const x_194 = (*(tint_symbol_9)).y;
          if ((int(x_194) < 150)) {
            discard_fragment();
          } else {
            float const x_201 = (*(tint_symbol_9)).y;
            if ((int(x_201) < 180)) {
              int const x_208 = (*(tint_symbol_7)).arr[5];
              grey = (0.5f + (float(x_208) / 10.0f));
            } else {
              float const x_213 = (*(tint_symbol_9)).y;
              if ((int(x_213) < 210)) {
                int const x_220 = (*(tint_symbol_7)).arr[6];
                grey = (0.5f + (float(x_220) / 10.0f));
              } else {
                float const x_225 = (*(tint_symbol_9)).y;
                if ((int(x_225) < 240)) {
                  int const x_232 = (*(tint_symbol_7)).arr[7];
                  grey = (0.5f + (float(x_232) / 10.0f));
                } else {
                  float const x_237 = (*(tint_symbol_9)).y;
                  if ((int(x_237) < 270)) {
                    int const x_244 = (*(tint_symbol_7)).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_10) = float4(x_249.x, x_249.y, x_249.z, 1.0f);
  return;
}

main_out tint_symbol_inner(constant buf0& x_28, float4 gl_FragCoord_param, thread float4* const tint_symbol_11, thread tint_array_wrapper* const tint_symbol_12, thread tint_array_wrapper* const tint_symbol_13, thread float4* const tint_symbol_14) {
  *(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_2 = {.x_GLF_color_1=*(tint_symbol_14)};
  return tint_symbol_2;
}

fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_28 [[buffer(0)]]) {
  thread float4 tint_symbol_15 = 0.0f;
  thread tint_array_wrapper tint_symbol_16 = {};
  thread tint_array_wrapper tint_symbol_17 = {};
  thread float4 tint_symbol_18 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_28, gl_FragCoord_param, &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

