#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 frag_color_1;
  float4 gl_Position;
};
struct tint_symbol_2 {
  float4 x_GLF_pos_param [[attribute(0)]];
};
struct tint_symbol_3 {
  float4 frag_color_1 [[user(locn0)]];
  float4 gl_Position [[position]];
};

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_5) {
  int x_314 = 0;
  int x_315 = 0;
  int pivot = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param = 0;
  int param_1 = 0;
  int param_2 = 0;
  int param_3 = 0;
  int const x_316 = *(h);
  int const x_318 = (*(tint_symbol_5)).numbers.arr[x_316];
  pivot = x_318;
  int const x_319 = *(l);
  i_1 = as_type<int>((as_type<uint>(x_319) - as_type<uint>(1)));
  int const x_321 = *(l);
  j_1 = x_321;
  while (true) {
    int const x_326 = j_1;
    int const x_327 = *(h);
    if ((x_326 <= as_type<int>((as_type<uint>(x_327) - as_type<uint>(1))))) {
    } else {
      break;
    }
    int const x_331 = j_1;
    int const x_333 = (*(tint_symbol_5)).numbers.arr[x_331];
    int const x_334 = pivot;
    if ((x_333 <= x_334)) {
      int const x_338 = i_1;
      i_1 = as_type<int>((as_type<uint>(x_338) + as_type<uint>(1)));
      int const x_340 = i_1;
      param = x_340;
      int const x_341 = j_1;
      param_1 = x_341;
      int const x_342 = param;
      int const x_344 = (*(tint_symbol_5)).numbers.arr[x_342];
      x_315 = x_344;
      int const x_345 = param;
      int const x_346 = param_1;
      int const x_348 = (*(tint_symbol_5)).numbers.arr[x_346];
      (*(tint_symbol_5)).numbers.arr[x_345] = x_348;
      int const x_350 = param_1;
      int const x_351 = x_315;
      (*(tint_symbol_5)).numbers.arr[x_350] = x_351;
    }
    {
      int const x_353 = j_1;
      j_1 = as_type<int>((as_type<uint>(x_353) + as_type<uint>(1)));
    }
  }
  int const x_355 = i_1;
  param_2 = as_type<int>((as_type<uint>(x_355) + as_type<uint>(1)));
  int const x_357 = *(h);
  param_3 = x_357;
  int const x_358 = param_2;
  int const x_360 = (*(tint_symbol_5)).numbers.arr[x_358];
  x_314 = x_360;
  int const x_361 = param_2;
  int const x_362 = param_3;
  int const x_364 = (*(tint_symbol_5)).numbers.arr[x_362];
  (*(tint_symbol_5)).numbers.arr[x_361] = x_364;
  int const x_366 = param_3;
  int const x_367 = x_314;
  (*(tint_symbol_5)).numbers.arr[x_366] = x_367;
  if (false) {
  } else {
    int const x_372 = i_1;
    return as_type<int>((as_type<uint>(x_372) + as_type<uint>(1)));
  }
  return 0;
}

void main_1(constant buf0& x_34, thread float4* const tint_symbol_6, thread float4* const tint_symbol_7, thread QuicksortObject* const tint_symbol_8, thread float4* const tint_symbol_9, thread float4* const tint_symbol_10) {
  int x_91 = 0;
  int x_92 = 0;
  int x_93 = 0;
  tint_array_wrapper x_94 = {};
  int x_95 = 0;
  int x_96 = 0;
  int x_97 = 0;
  int i_2 = 0;
  float2 uv = 0.0f;
  float3 color = 0.0f;
  float4 const x_98 = *(tint_symbol_6);
  *(tint_symbol_7) = ((x_98 + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
  i_2 = 0;
  while (true) {
    int const x_105 = i_2;
    if ((x_105 < 10)) {
    } else {
      break;
    }
    int const x_108 = i_2;
    int const x_109 = i_2;
    (*(tint_symbol_8)).numbers.arr[x_108] = as_type<int>((as_type<uint>(10) - as_type<uint>(x_109)));
    int const x_112 = i_2;
    int const x_113 = i_2;
    int const x_115 = (*(tint_symbol_8)).numbers.arr[x_113];
    int const x_116 = i_2;
    int const x_118 = (*(tint_symbol_8)).numbers.arr[x_116];
    (*(tint_symbol_8)).numbers.arr[x_112] = as_type<int>((as_type<uint>(x_115) * as_type<uint>(x_118)));
    {
      int const x_121 = i_2;
      i_2 = as_type<int>((as_type<uint>(x_121) + as_type<uint>(1)));
    }
  }
  x_91 = 0;
  x_92 = 9;
  x_93 = -1;
  int const x_123 = x_93;
  int const x_124 = as_type<int>((as_type<uint>(x_123) + as_type<uint>(1)));
  x_93 = x_124;
  int const x_125 = x_91;
  x_94.arr[x_124] = x_125;
  int const x_127 = x_93;
  int const x_128 = as_type<int>((as_type<uint>(x_127) + as_type<uint>(1)));
  x_93 = x_128;
  int const x_129 = x_92;
  x_94.arr[x_128] = x_129;
  while (true) {
    int const x_135 = x_93;
    if ((x_135 >= 0)) {
    } else {
      break;
    }
    int const x_138 = x_93;
    x_93 = as_type<int>((as_type<uint>(x_138) - as_type<uint>(1)));
    int const x_141 = x_94.arr[x_138];
    x_92 = x_141;
    int const x_142 = x_93;
    x_93 = as_type<int>((as_type<uint>(x_142) - as_type<uint>(1)));
    int const x_145 = x_94.arr[x_142];
    x_91 = x_145;
    int const x_146 = x_91;
    x_96 = x_146;
    int const x_147 = x_92;
    x_97 = x_147;
    int const x_148 = performPartition_i1_i1_(&(x_96), &(x_97), tint_symbol_8);
    x_95 = x_148;
    int const x_149 = x_95;
    int const x_151 = x_91;
    if ((as_type<int>((as_type<uint>(x_149) - as_type<uint>(1))) > x_151)) {
      int const x_155 = x_93;
      int const x_156 = as_type<int>((as_type<uint>(x_155) + as_type<uint>(1)));
      x_93 = x_156;
      int const x_157 = x_91;
      x_94.arr[x_156] = x_157;
      int const x_159 = x_93;
      int const x_160 = as_type<int>((as_type<uint>(x_159) + as_type<uint>(1)));
      x_93 = x_160;
      int const x_161 = x_95;
      x_94.arr[x_160] = as_type<int>((as_type<uint>(x_161) - as_type<uint>(1)));
    }
    int const x_164 = x_95;
    int const x_166 = x_92;
    if ((as_type<int>((as_type<uint>(x_164) + as_type<uint>(1))) < x_166)) {
      int const x_170 = x_93;
      int const x_171 = as_type<int>((as_type<uint>(x_170) + as_type<uint>(1)));
      x_93 = x_171;
      int const x_172 = x_95;
      x_94.arr[x_171] = as_type<int>((as_type<uint>(x_172) + as_type<uint>(1)));
      int const x_175 = x_93;
      int const x_176 = as_type<int>((as_type<uint>(x_175) + as_type<uint>(1)));
      x_93 = x_176;
      int const x_177 = x_92;
      x_94.arr[x_176] = x_177;
    }
  }
  float4 const x_179 = *(tint_symbol_7);
  float2 const x_182 = x_34.resolution;
  uv = (float2(x_179.x, x_179.y) / x_182);
  color = float3(1.0f, 2.0f, 3.0f);
  int const x_185 = (*(tint_symbol_8)).numbers.arr[0];
  float const x_188 = color.x;
  color.x = (x_188 + float(x_185));
  float const x_192 = uv.x;
  if ((x_192 > 0.25f)) {
    int const x_197 = (*(tint_symbol_8)).numbers.arr[1];
    float const x_200 = color.x;
    color.x = (x_200 + float(x_197));
  }
  float const x_204 = uv.x;
  if ((x_204 > 0.5f)) {
    int const x_209 = (*(tint_symbol_8)).numbers.arr[2];
    float const x_212 = color.y;
    color.y = (x_212 + float(x_209));
  }
  float const x_216 = uv.x;
  if ((x_216 > 0.75f)) {
    int const x_221 = (*(tint_symbol_8)).numbers.arr[3];
    float const x_224 = color.z;
    color.z = (x_224 + float(x_221));
  }
  int const x_228 = (*(tint_symbol_8)).numbers.arr[4];
  float const x_231 = color.y;
  color.y = (x_231 + float(x_228));
  float const x_235 = uv.y;
  if ((x_235 > 0.25f)) {
    int const x_240 = (*(tint_symbol_8)).numbers.arr[5];
    float const x_243 = color.x;
    color.x = (x_243 + float(x_240));
  }
  float const x_247 = uv.y;
  if ((x_247 > 0.5f)) {
    int const x_252 = (*(tint_symbol_8)).numbers.arr[6];
    float const x_255 = color.y;
    color.y = (x_255 + float(x_252));
  }
  float const x_259 = uv.y;
  if ((x_259 > 0.75f)) {
    int const x_264 = (*(tint_symbol_8)).numbers.arr[7];
    float const x_267 = color.z;
    color.z = (x_267 + float(x_264));
  }
  int const x_271 = (*(tint_symbol_8)).numbers.arr[8];
  float const x_274 = color.z;
  color.z = (x_274 + float(x_271));
  float const x_278 = uv.x;
  float const x_280 = uv.y;
  if ((fabs((x_278 - x_280)) < 0.25f)) {
    int const x_287 = (*(tint_symbol_8)).numbers.arr[9];
    float const x_290 = color.x;
    color.x = (x_290 + float(x_287));
  }
  float3 const x_293 = color;
  float3 const x_294 = normalize(x_293);
  *(tint_symbol_9) = float4(x_294.x, x_294.y, x_294.z, 1.0f);
  float4 const x_299 = *(tint_symbol_6);
  *(tint_symbol_10) = x_299;
  return;
}

main_out tint_symbol_inner(constant buf0& x_34, float4 x_GLF_pos_param, thread float4* const tint_symbol_11, thread float4* const tint_symbol_12, thread QuicksortObject* const tint_symbol_13, thread float4* const tint_symbol_14, thread float4* const tint_symbol_15) {
  *(tint_symbol_11) = x_GLF_pos_param;
  main_1(x_34, tint_symbol_11, tint_symbol_12, tint_symbol_13, tint_symbol_14, tint_symbol_15);
  main_out const tint_symbol_4 = {.frag_color_1=*(tint_symbol_14), .gl_Position=*(tint_symbol_15)};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]], constant buf0& x_34 [[buffer(0)]]) {
  thread float4 tint_symbol_16 = 0.0f;
  thread float4 tint_symbol_17 = 0.0f;
  thread QuicksortObject tint_symbol_18 = {};
  thread float4 tint_symbol_19 = 0.0f;
  thread float4 tint_symbol_20 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_34, tint_symbol_1.x_GLF_pos_param, &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18), &(tint_symbol_19), &(tint_symbol_20));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.frag_color_1 = inner_result.frag_color_1;
  wrapper_result.gl_Position = inner_result.gl_Position;
  return wrapper_result;
}

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_21) {
  int temp = 0;
  int const x_302 = *(i);
  int const x_304 = (*(tint_symbol_21)).numbers.arr[x_302];
  temp = x_304;
  int const x_305 = *(i);
  int const x_306 = *(j);
  int const x_308 = (*(tint_symbol_21)).numbers.arr[x_306];
  (*(tint_symbol_21)).numbers.arr[x_305] = x_308;
  int const x_310 = *(j);
  int const x_311 = temp;
  (*(tint_symbol_21)).numbers.arr[x_310] = x_311;
  return;
}

void quicksort_(thread QuicksortObject* const tint_symbol_22) {
  int l_1 = 0;
  int h_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int p = 0;
  int param_4 = 0;
  int param_5 = 0;
  l_1 = 0;
  h_1 = 9;
  top = -1;
  int const x_376 = top;
  int const x_377 = as_type<int>((as_type<uint>(x_376) + as_type<uint>(1)));
  top = x_377;
  int const x_378 = l_1;
  stack.arr[x_377] = x_378;
  int const x_380 = top;
  int const x_381 = as_type<int>((as_type<uint>(x_380) + as_type<uint>(1)));
  top = x_381;
  int const x_382 = h_1;
  stack.arr[x_381] = x_382;
  while (true) {
    int const x_388 = top;
    if ((x_388 >= 0)) {
    } else {
      break;
    }
    int const x_391 = top;
    top = as_type<int>((as_type<uint>(x_391) - as_type<uint>(1)));
    int const x_394 = stack.arr[x_391];
    h_1 = x_394;
    int const x_395 = top;
    top = as_type<int>((as_type<uint>(x_395) - as_type<uint>(1)));
    int const x_398 = stack.arr[x_395];
    l_1 = x_398;
    int const x_399 = l_1;
    param_4 = x_399;
    int const x_400 = h_1;
    param_5 = x_400;
    int const x_401 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_22);
    p = x_401;
    int const x_402 = p;
    int const x_404 = l_1;
    if ((as_type<int>((as_type<uint>(x_402) - as_type<uint>(1))) > x_404)) {
      int const x_408 = top;
      int const x_409 = as_type<int>((as_type<uint>(x_408) + as_type<uint>(1)));
      top = x_409;
      int const x_410 = l_1;
      stack.arr[x_409] = x_410;
      int const x_412 = top;
      int const x_413 = as_type<int>((as_type<uint>(x_412) + as_type<uint>(1)));
      top = x_413;
      int const x_414 = p;
      stack.arr[x_413] = as_type<int>((as_type<uint>(x_414) - as_type<uint>(1)));
    }
    int const x_417 = p;
    int const x_419 = h_1;
    if ((as_type<int>((as_type<uint>(x_417) + as_type<uint>(1))) < x_419)) {
      int const x_423 = top;
      int const x_424 = as_type<int>((as_type<uint>(x_423) + as_type<uint>(1)));
      top = x_424;
      int const x_425 = p;
      stack.arr[x_424] = as_type<int>((as_type<uint>(x_425) + as_type<uint>(1)));
      int const x_428 = top;
      int const x_429 = as_type<int>((as_type<uint>(x_428) + as_type<uint>(1)));
      top = x_429;
      int const x_430 = h_1;
      stack.arr[x_429] = x_430;
    }
  }
  return;
}

