#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_(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_251 = *(from);
  k = x_251;
  int const x_252 = *(from);
  i = x_252;
  int const x_253 = *(mid);
  j = as_type<int>((as_type<uint>(x_253) + as_type<uint>(1)));
  while (true) {
    int const x_259 = i;
    int const x_260 = *(mid);
    int const x_262 = j;
    int const x_263 = *(to);
    if (((x_259 <= x_260) & (x_262 <= x_263))) {
    } else {
      break;
    }
    int const x_267 = i;
    int const x_269 = (*(tint_symbol_3)).arr[x_267];
    int const x_270 = j;
    int const x_272 = (*(tint_symbol_3)).arr[x_270];
    if ((x_269 < x_272)) {
      int const x_277 = k;
      k = as_type<int>((as_type<uint>(x_277) + as_type<uint>(1)));
      int const x_279 = i;
      i = as_type<int>((as_type<uint>(x_279) + as_type<uint>(1)));
      int const x_282 = (*(tint_symbol_3)).arr[x_279];
      (*(tint_symbol_4)).arr[x_277] = x_282;
    } else {
      int const x_284 = k;
      k = as_type<int>((as_type<uint>(x_284) + as_type<uint>(1)));
      int const x_286 = j;
      j = as_type<int>((as_type<uint>(x_286) + as_type<uint>(1)));
      int const x_289 = (*(tint_symbol_3)).arr[x_286];
      (*(tint_symbol_4)).arr[x_284] = x_289;
    }
  }
  while (true) {
    int const x_295 = i;
    int const x_297 = i;
    int const x_298 = *(mid);
    if (((x_295 < 10) & (x_297 <= x_298))) {
    } else {
      break;
    }
    int const x_302 = k;
    k = as_type<int>((as_type<uint>(x_302) + as_type<uint>(1)));
    int const x_304 = i;
    i = as_type<int>((as_type<uint>(x_304) + as_type<uint>(1)));
    int const x_307 = (*(tint_symbol_3)).arr[x_304];
    (*(tint_symbol_4)).arr[x_302] = x_307;
  }
  int const x_309 = *(from);
  i_1 = x_309;
  while (true) {
    int const x_314 = i_1;
    int const x_315 = *(to);
    if ((x_314 <= x_315)) {
    } else {
      break;
    }
    int const x_318 = i_1;
    int const x_319 = i_1;
    int const x_321 = (*(tint_symbol_4)).arr[x_319];
    (*(tint_symbol_3)).arr[x_318] = x_321;
    {
      int const x_323 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_323) + as_type<uint>(1)));
    }
  }
  return;
}

void mergeSort_(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_330 = m;
    int const x_331 = high;
    if ((x_330 <= x_331)) {
    } else {
      break;
    }
    int const x_334 = low;
    i_2 = x_334;
    while (true) {
      int const x_339 = i_2;
      int const x_340 = high;
      if ((x_339 < x_340)) {
      } else {
        break;
      }
      int const x_343 = i_2;
      from_1 = x_343;
      int const x_344 = i_2;
      int const x_345 = m;
      mid_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_344) + as_type<uint>(x_345)))) - as_type<uint>(1)));
      int const x_348 = i_2;
      int const x_349 = m;
      int const x_353 = high;
      to_1 = min(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_348) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_349))))))) - as_type<uint>(1))), x_353);
      int const x_355 = from_1;
      param = x_355;
      int const x_356 = mid_1;
      param_1 = x_356;
      int const x_357 = to_1;
      param_2 = x_357;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2), tint_symbol_5, tint_symbol_6);
      {
        int const x_359 = m;
        int const x_361 = i_2;
        i_2 = as_type<int>((as_type<uint>(x_361) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_359))))));
      }
    }
    {
      int const x_363 = m;
      m = as_type<int>((as_type<uint>(2) * as_type<uint>(x_363)));
    }
  }
  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_84 = x_28.injectionSwitch.x;
  i_3 = int(x_84);
  while (true) {
    int const x_90 = i_3;
    switch(x_90) {
      case 9: {
        int const x_120 = i_3;
        (*(tint_symbol_7)).arr[x_120] = -5;
        break;
      }
      case 8: {
        int const x_118 = i_3;
        (*(tint_symbol_7)).arr[x_118] = -4;
        break;
      }
      case 7: {
        int const x_116 = i_3;
        (*(tint_symbol_7)).arr[x_116] = -3;
        break;
      }
      case 6: {
        int const x_114 = i_3;
        (*(tint_symbol_7)).arr[x_114] = -2;
        break;
      }
      case 5: {
        int const x_112 = i_3;
        (*(tint_symbol_7)).arr[x_112] = -1;
        break;
      }
      case 4: {
        int const x_110 = i_3;
        (*(tint_symbol_7)).arr[x_110] = 0;
        break;
      }
      case 3: {
        int const x_108 = i_3;
        (*(tint_symbol_7)).arr[x_108] = 1;
        break;
      }
      case 2: {
        int const x_106 = i_3;
        (*(tint_symbol_7)).arr[x_106] = 2;
        break;
      }
      case 1: {
        int const x_104 = i_3;
        (*(tint_symbol_7)).arr[x_104] = 3;
        break;
      }
      case 0: {
        int const x_102 = i_3;
        (*(tint_symbol_7)).arr[x_102] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_122 = i_3;
    i_3 = as_type<int>((as_type<uint>(x_122) + as_type<uint>(1)));
    {
      int const x_124 = i_3;
      if ((x_124 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  while (true) {
    int const x_130 = j_1;
    if ((x_130 < 10)) {
    } else {
      break;
    }
    int const x_133 = j_1;
    int const x_134 = j_1;
    int const x_136 = (*(tint_symbol_7)).arr[x_134];
    (*(tint_symbol_8)).arr[x_133] = x_136;
    {
      int const x_138 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_138) + as_type<uint>(1)));
    }
  }
  mergeSort_(tint_symbol_7, tint_symbol_8);
  float const x_142 = (*(tint_symbol_9)).y;
  if ((int(x_142) < 30)) {
    int const x_149 = (*(tint_symbol_7)).arr[0];
    grey = (0.5f + (float(x_149) / 10.0f));
  } else {
    float const x_154 = (*(tint_symbol_9)).y;
    if ((int(x_154) < 60)) {
      int const x_161 = (*(tint_symbol_7)).arr[1];
      grey = (0.5f + (float(x_161) / 10.0f));
    } else {
      float const x_166 = (*(tint_symbol_9)).y;
      if ((int(x_166) < 90)) {
        int const x_173 = (*(tint_symbol_7)).arr[2];
        grey = (0.5f + (float(x_173) / 10.0f));
      } else {
        float const x_178 = (*(tint_symbol_9)).y;
        if ((int(x_178) < 120)) {
          int const x_185 = (*(tint_symbol_7)).arr[3];
          grey = (0.5f + (float(x_185) / 10.0f));
        } else {
          float const x_190 = (*(tint_symbol_9)).y;
          if ((int(x_190) < 150)) {
            discard_fragment();
          } else {
            float const x_197 = (*(tint_symbol_9)).y;
            if ((int(x_197) < 180)) {
              int const x_204 = (*(tint_symbol_7)).arr[5];
              grey = (0.5f + (float(x_204) / 10.0f));
            } else {
              float const x_209 = (*(tint_symbol_9)).y;
              if ((int(x_209) < 210)) {
                int const x_216 = (*(tint_symbol_7)).arr[6];
                grey = (0.5f + (float(x_216) / 10.0f));
              } else {
                float const x_221 = (*(tint_symbol_9)).y;
                if ((int(x_221) < 240)) {
                  int const x_228 = (*(tint_symbol_7)).arr[7];
                  grey = (0.5f + (float(x_228) / 10.0f));
                } else {
                  float const x_233 = (*(tint_symbol_9)).y;
                  if ((int(x_233) < 270)) {
                    int const x_240 = (*(tint_symbol_7)).arr[8];
                    grey = (0.5f + (float(x_240) / 10.0f));
                  } else {
                    discard_fragment();
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  float const x_244 = grey;
  float3 const x_245 = float3(x_244, x_244, x_244);
  *(tint_symbol_10) = float4(x_245.x, x_245.y, x_245.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;
}

