#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_6, thread float4* const tint_symbol_7) {
  tint_array_wrapper temp = {};
  tint_array_wrapper data = {};
  float x_190 = 0.0f;
  float x_262 = 0.0f;
  int x_63_phi = 0;
  int x_103_phi = 0;
  int x_112_phi = 0;
  float x_263_phi = 0.0f;
  float const x_60 = x_8.injectionSwitch.x;
  int const x_61 = int(x_60);
  x_63_phi = x_61;
  while (true) {
    int x_100 = 0;
    int x_98 = 0;
    int x_96 = 0;
    int x_94 = 0;
    int x_92 = 0;
    int x_90 = 0;
    int x_88 = 0;
    int x_86 = 0;
    int x_84 = 0;
    int x_82 = 0;
    int x_64_phi = 0;
    int const x_63 = x_63_phi;
    tint_array_wrapper const x_68 = data;
    tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    data = tint_symbol_4;
    data = x_68;
    int const x_69 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
    x_64_phi = x_69;
    switch(x_63) {
      case 9: {
        data.arr[x_63] = -5;
        x_100 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_100;
        break;
      }
      case 8: {
        data.arr[x_63] = -4;
        x_98 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_98;
        break;
      }
      case 7: {
        data.arr[x_63] = -3;
        x_96 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_96;
        break;
      }
      case 6: {
        data.arr[x_63] = -2;
        x_94 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_94;
        break;
      }
      case 5: {
        data.arr[x_63] = -1;
        x_92 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_92;
        break;
      }
      case 4: {
        data.arr[x_63] = 0;
        x_90 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_90;
        break;
      }
      case 3: {
        data.arr[x_63] = 1;
        x_88 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_88;
        break;
      }
      case 2: {
        data.arr[x_63] = 2;
        x_86 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_86;
        break;
      }
      case 1: {
        data.arr[x_63] = 3;
        x_84 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_84;
        break;
      }
      case 0: {
        data.arr[x_63] = 4;
        x_82 = as_type<int>((as_type<uint>(x_63) + as_type<uint>(1)));
        x_64_phi = x_82;
        break;
      }
      default: {
        break;
      }
    }
    int const x_64 = x_64_phi;
    {
      x_63_phi = x_64;
      if ((x_64 < 10)) {
      } else {
        break;
      }
    }
  }
  x_103_phi = 0;
  while (true) {
    int x_104 = 0;
    int const x_103 = x_103_phi;
    if ((x_103 < 10)) {
    } else {
      break;
    }
    {
      int const x_109 = data.arr[x_103];
      temp.arr[x_103] = x_109;
      x_104 = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
      x_103_phi = x_104;
    }
  }
  x_112_phi = 1;
  while (true) {
    int x_113 = 0;
    int x_119_phi = 0;
    int const x_112 = x_112_phi;
    if ((x_112 <= 9)) {
    } else {
      break;
    }
    x_119_phi = 0;
    while (true) {
      int x_131 = 0;
      int x_136 = 0;
      int x_131_phi = 0;
      int x_134_phi = 0;
      int x_136_phi = 0;
      int x_158_phi = 0;
      int x_161_phi = 0;
      int x_171_phi = 0;
      int const x_119 = x_119_phi;
      if ((x_119 < 9)) {
      } else {
        break;
      }
      int const x_125 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(x_112)));
      int const x_126 = as_type<int>((as_type<uint>(x_125) - as_type<uint>(1)));
      int const x_120 = as_type<int>((as_type<uint>(x_119) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_112))))));
      int const x_129 = min(as_type<int>((as_type<uint>(x_120) - as_type<uint>(1))), 9);
      x_131_phi = x_119;
      x_134_phi = x_125;
      x_136_phi = x_119;
      while (true) {
        int x_151 = 0;
        int x_154 = 0;
        int x_135_phi = 0;
        int x_137_phi = 0;
        x_131 = x_131_phi;
        int const x_134 = x_134_phi;
        x_136 = x_136_phi;
        if (((x_136 <= x_126) & (x_134 <= x_129))) {
        } else {
          break;
        }
        int const x_143_save = x_136;
        int const x_144 = data.arr[x_143_save];
        int const x_145_save = x_134;
        int const x_146 = data.arr[x_145_save];
        int const x_132 = as_type<int>(as_type<int>((as_type<uint>(x_131) + as_type<uint>(as_type<int>(1)))));
        if ((x_144 < x_146)) {
          x_151 = as_type<int>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(as_type<int>(1)))));
          int const x_152 = data.arr[x_143_save];
          temp.arr[x_131] = x_152;
          x_135_phi = x_134;
          x_137_phi = x_151;
        } else {
          x_154 = as_type<int>((as_type<uint>(x_134) + as_type<uint>(1)));
          int const x_155 = data.arr[x_145_save];
          temp.arr[x_131] = x_155;
          x_135_phi = x_154;
          x_137_phi = x_136;
        }
        int const x_135 = x_135_phi;
        int const x_137 = x_137_phi;
        {
          x_131_phi = x_132;
          x_134_phi = x_135;
          x_136_phi = x_137;
        }
      }
      x_158_phi = x_131;
      x_161_phi = x_136;
      while (true) {
        int x_159 = 0;
        int x_162 = 0;
        int const x_158 = x_158_phi;
        int const x_161 = x_161_phi;
        if (((x_161 < 10) & (x_161 <= x_126))) {
        } else {
          break;
        }
        {
          x_159 = as_type<int>((as_type<uint>(x_158) + as_type<uint>(1)));
          x_162 = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
          int const x_168 = data.arr[x_161];
          temp.arr[x_158] = x_168;
          x_158_phi = x_159;
          x_161_phi = x_162;
        }
      }
      x_171_phi = x_119;
      while (true) {
        int x_172 = 0;
        int const x_171 = x_171_phi;
        if ((x_171 <= x_129)) {
        } else {
          break;
        }
        {
          int const x_177 = temp.arr[x_171];
          data.arr[x_171] = x_177;
          x_172 = as_type<int>((as_type<uint>(x_171) + as_type<uint>(1)));
          x_171_phi = x_172;
        }
      }
      {
        x_119_phi = x_120;
      }
    }
    {
      x_113 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_112)));
      x_112_phi = x_113;
    }
  }
  int x_181 = 0;
  float x_199 = 0.0f;
  float x_261 = 0.0f;
  float x_262_phi = 0.0f;
  float const x_180 = (*(tint_symbol_6)).y;
  x_181 = int(x_180);
  if ((x_181 < 30)) {
    int const x_187 = data.arr[0];
    x_190 = (0.5f + (float(x_187) * 0.100000001f));
    x_263_phi = x_190;
  } else {
    float x_208 = 0.0f;
    float x_260 = 0.0f;
    float x_261_phi = 0.0f;
    if ((x_181 < 60)) {
      int const x_196 = data.arr[1];
      x_199 = (0.5f + (float(x_196) * 0.100000001f));
      x_262_phi = x_199;
    } else {
      float x_217 = 0.0f;
      float x_259 = 0.0f;
      float x_260_phi = 0.0f;
      if ((x_181 < 90)) {
        int const x_205 = data.arr[2];
        x_208 = (0.5f + (float(x_205) * 0.100000001f));
        x_261_phi = x_208;
      } else {
        if ((x_181 < 120)) {
          int const x_214 = data.arr[3];
          x_217 = (0.5f + (float(x_214) * 0.100000001f));
          x_260_phi = x_217;
        } else {
          float x_230 = 0.0f;
          float x_258 = 0.0f;
          float x_259_phi = 0.0f;
          if ((x_181 < 150)) {
            discard_fragment();
          } else {
            float x_239 = 0.0f;
            float x_257 = 0.0f;
            float x_258_phi = 0.0f;
            if ((x_181 < 180)) {
              int const x_227 = data.arr[5];
              x_230 = (0.5f + (float(x_227) * 0.100000001f));
              x_259_phi = x_230;
            } else {
              float x_248 = 0.0f;
              float x_256 = 0.0f;
              float x_257_phi = 0.0f;
              if ((x_181 < 210)) {
                int const x_236 = data.arr[6];
                x_239 = (0.5f + (float(x_236) * 0.100000001f));
                x_258_phi = x_239;
              } else {
                if ((x_181 < 240)) {
                  int const x_245 = data.arr[7];
                  x_248 = (0.5f + (float(x_245) * 0.100000001f));
                  x_257_phi = x_248;
                } else {
                  if ((x_181 < 270)) {
                  } else {
                    discard_fragment();
                  }
                  int const x_253 = data.arr[8];
                  x_256 = (0.5f + (float(x_253) * 0.100000001f));
                  x_257_phi = x_256;
                }
                x_257 = x_257_phi;
                x_258_phi = x_257;
              }
              x_258 = x_258_phi;
              x_259_phi = x_258;
            }
            x_259 = x_259_phi;
          }
          x_260_phi = x_259;
        }
        x_260 = x_260_phi;
        x_261_phi = x_260;
      }
      x_261 = x_261_phi;
      x_262_phi = x_261;
    }
    x_262 = x_262_phi;
    x_263_phi = x_262;
  }
  float const x_263 = x_263_phi;
  *(tint_symbol_7) = float4(x_263, x_263, x_263, 1.0f);
  return;
}

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

