#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 main_1(constant buf0& x_8, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  tint_array_wrapper temp = {};
  tint_array_wrapper data = {};
  float x_180 = 0.0f;
  float x_279 = 0.0f;
  int x_65_phi = 0;
  int x_93_phi = 0;
  int x_102_phi = 0;
  float x_280_phi = 0.0f;
  float const x_62 = x_8.injectionSwitch.x;
  int const x_63 = int(x_62);
  x_65_phi = x_63;
  while (true) {
    int const x_65 = x_65_phi;
    switch(x_65) {
      case 9: {
        data.arr[x_65] = -5;
        break;
      }
      case 8: {
        data.arr[x_65] = -4;
        break;
      }
      case 7: {
        data.arr[x_65] = -3;
        break;
      }
      case 6: {
        data.arr[x_65] = -2;
        break;
      }
      case 5: {
        data.arr[x_65] = -1;
        break;
      }
      case 4: {
        data.arr[x_65] = 0;
        break;
      }
      case 3: {
        data.arr[x_65] = 1;
        break;
      }
      case 2: {
        data.arr[x_65] = 2;
        break;
      }
      case 1: {
        data.arr[x_65] = 3;
        break;
      }
      case 0: {
        data.arr[x_65] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_66 = as_type<int>((as_type<uint>(x_65) + as_type<uint>(1)));
    {
      x_65_phi = x_66;
      if ((x_66 < 10)) {
      } else {
        break;
      }
    }
  }
  x_93_phi = 0;
  while (true) {
    int x_94 = 0;
    int const x_93 = x_93_phi;
    if ((x_93 < 10)) {
    } else {
      break;
    }
    {
      int const x_99 = data.arr[x_93];
      temp.arr[x_93] = x_99;
      x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(1)));
      x_93_phi = x_94;
    }
  }
  x_102_phi = 1;
  while (true) {
    int x_103 = 0;
    int x_109_phi = 0;
    int const x_102 = x_102_phi;
    if ((x_102 <= 9)) {
    } else {
      break;
    }
    x_109_phi = 0;
    while (true) {
      int x_121 = 0;
      int x_126 = 0;
      int x_121_phi = 0;
      int x_124_phi = 0;
      int x_126_phi = 0;
      int x_148_phi = 0;
      int x_151_phi = 0;
      int x_161_phi = 0;
      int const x_109 = x_109_phi;
      if ((x_109 < 9)) {
      } else {
        break;
      }
      int const x_115 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(x_102)));
      int const x_116 = as_type<int>((as_type<uint>(x_115) - as_type<uint>(1)));
      int const x_110 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_102))))));
      int const x_119 = min(as_type<int>((as_type<uint>(x_110) - as_type<uint>(1))), 9);
      x_121_phi = x_109;
      x_124_phi = x_115;
      x_126_phi = x_109;
      while (true) {
        int x_141 = 0;
        int x_144 = 0;
        int x_125_phi = 0;
        int x_127_phi = 0;
        x_121 = x_121_phi;
        int const x_124 = x_124_phi;
        x_126 = x_126_phi;
        if (((x_126 <= x_116) & (x_124 <= x_119))) {
        } else {
          break;
        }
        int const x_133_save = x_126;
        int const x_134 = data.arr[x_133_save];
        int const x_135_save = x_124;
        int const x_136 = data.arr[x_135_save];
        int const x_122 = as_type<int>(as_type<int>((as_type<uint>(x_121) + as_type<uint>(as_type<int>(1)))));
        if ((x_134 < x_136)) {
          x_141 = as_type<int>(as_type<int>((as_type<uint>(x_126) + as_type<uint>(as_type<int>(1)))));
          int const x_142 = data.arr[x_133_save];
          temp.arr[x_121] = x_142;
          x_125_phi = x_124;
          x_127_phi = x_141;
        } else {
          x_144 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
          int const x_145 = data.arr[x_135_save];
          temp.arr[x_121] = x_145;
          x_125_phi = x_144;
          x_127_phi = x_126;
        }
        int const x_125 = x_125_phi;
        int const x_127 = x_127_phi;
        {
          x_121_phi = x_122;
          x_124_phi = x_125;
          x_126_phi = x_127;
        }
      }
      x_148_phi = x_121;
      x_151_phi = x_126;
      while (true) {
        int x_149 = 0;
        int x_152 = 0;
        int const x_148 = x_148_phi;
        int const x_151 = x_151_phi;
        if (((x_151 < 10) & (x_151 <= x_116))) {
        } else {
          break;
        }
        {
          x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
          x_152 = as_type<int>((as_type<uint>(x_151) + as_type<uint>(1)));
          int const x_158 = data.arr[x_151];
          temp.arr[x_148] = x_158;
          x_148_phi = x_149;
          x_151_phi = x_152;
        }
      }
      x_161_phi = x_109;
      while (true) {
        int x_162 = 0;
        int const x_161 = x_161_phi;
        if ((x_161 <= x_119)) {
        } else {
          break;
        }
        {
          int const x_167 = temp.arr[x_161];
          data.arr[x_161] = x_167;
          x_162 = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
          x_161_phi = x_162;
        }
      }
      {
        x_109_phi = x_110;
      }
    }
    {
      x_103 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_102)));
      x_102_phi = x_103;
    }
  }
  int x_171 = 0;
  float x_189 = 0.0f;
  float x_278 = 0.0f;
  float x_279_phi = 0.0f;
  float const x_170 = (*(tint_symbol_5)).y;
  x_171 = int(x_170);
  if ((x_171 < 30)) {
    int const x_177 = data.arr[0];
    x_180 = (0.5f + (float(x_177) * 0.100000001f));
    x_280_phi = x_180;
  } else {
    float x_198 = 0.0f;
    float x_277 = 0.0f;
    float x_278_phi = 0.0f;
    if ((x_171 < 60)) {
      int const x_186 = data.arr[1];
      x_189 = (0.5f + (float(x_186) * 0.100000001f));
      x_279_phi = x_189;
    } else {
      float x_207 = 0.0f;
      float x_249 = 0.0f;
      float x_277_phi = 0.0f;
      if ((x_171 < 90)) {
        int const x_195 = data.arr[2];
        x_198 = (0.5f + (float(x_195) * 0.100000001f));
        x_278_phi = x_198;
      } else {
        if ((x_171 < 120)) {
          int const x_204 = data.arr[3];
          x_207 = (0.5f + (float(x_204) * 0.100000001f));
          x_277_phi = x_207;
        } else {
          float x_220 = 0.0f;
          float x_248 = 0.0f;
          float x_249_phi = 0.0f;
          float2 x_256_phi = 0.0f;
          int x_259_phi = 0;
          if ((x_171 < 150)) {
            discard_fragment();
          } else {
            float x_229 = 0.0f;
            float x_247 = 0.0f;
            float x_248_phi = 0.0f;
            if ((x_171 < 180)) {
              int const x_217 = data.arr[5];
              x_220 = (0.5f + (float(x_217) * 0.100000001f));
              x_249_phi = x_220;
            } else {
              float x_238 = 0.0f;
              float x_246 = 0.0f;
              float x_247_phi = 0.0f;
              if ((x_171 < 210)) {
                int const x_226 = data.arr[6];
                x_229 = (0.5f + (float(x_226) * 0.100000001f));
                x_248_phi = x_229;
              } else {
                if ((x_171 < 240)) {
                  int const x_235 = data.arr[7];
                  x_238 = (0.5f + (float(x_235) * 0.100000001f));
                  x_247_phi = x_238;
                } else {
                  if ((x_171 < 270)) {
                  } else {
                    discard_fragment();
                  }
                  int const x_243 = data.arr[8];
                  x_246 = (0.5f + (float(x_243) * 0.100000001f));
                  x_247_phi = x_246;
                }
                x_247 = x_247_phi;
                x_248_phi = x_247;
              }
              x_248 = x_248_phi;
              x_249_phi = x_248;
            }
            x_249 = x_249_phi;
            float const x_251 = x_8.injectionSwitch.y;
            bool const x_252 = (x_62 > x_251);
            if (x_252) {
              *(tint_symbol_6) = float4(1.0f, 1.0f, 1.0f, 1.0f);
            }
            x_256_phi = float2(1.0f, 1.0f);
            x_259_phi = 0;
            while (true) {
              float2 x_272 = 0.0f;
              int x_260 = 0;
              float2 x_273_phi = 0.0f;
              float2 const x_256 = x_256_phi;
              int const x_259 = x_259_phi;
              if ((x_259 <= 32)) {
              } else {
                break;
              }
              x_273_phi = x_256;
              if ((x_256.x < 0.0f)) {
                if (x_252) {
                  discard_fragment();
                }
                x_272 = x_256;
                x_272.y = (x_256.y + 1.0f);
                x_273_phi = x_272;
              }
              float2 const x_273 = x_273_phi;
              float2 x_257_1 = x_273;
              x_257_1.x = (x_273.x + x_273.y);
              float2 const x_257 = x_257_1;
              {
                x_260 = as_type<int>((as_type<uint>(x_259) + as_type<uint>(1)));
                x_256_phi = x_257;
                x_259_phi = x_260;
              }
            }
          }
          x_277_phi = x_249;
        }
        x_277 = x_277_phi;
        x_278_phi = x_277;
      }
      x_278 = x_278_phi;
      x_279_phi = x_278;
    }
    x_279 = x_279_phi;
    x_280_phi = x_279;
  }
  float const x_280 = x_280_phi;
  *(tint_symbol_6) = float4(x_280, x_280, x_280, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(x_8, &(tint_symbol_7), &(tint_symbol_8));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_8};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

