#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};

struct QuicksortObject {
  tint_array_wrapper numbers;
};

struct buf0 {
  /* 0x0000 */ float2 resolution;
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_81) {
  int temp = 0;
  int const x_932 = temp;
  temp = 0;
  temp = x_932;
  float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
  int const x_933 = *(i);
  *(i) = 0;
  *(i) = x_933;
  int const x_28 = *(i);
  int const x_934 = *(j);
  *(j) = 0;
  *(j) = x_934;
  float3 const x_524 = float3(x_523[1], x_523[0], x_523[1]);
  int const x_935 = temp;
  temp = 0;
  temp = x_935;
  int const x_30_save = x_28;
  int const x_936 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_936;
  int const x_31 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  int const x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  int const x_938 = *(j);
  *(j) = 0;
  *(j) = x_938;
  float3 const x_525 = float3(x_523[2], float3(1.0f, 2.0f, 3.0f)[0], x_523[1]);
  int const x_939 = *(i);
  *(i) = 0;
  *(i) = x_939;
  int const x_32 = *(i);
  int const x_940 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_940;
  int const x_33 = *(j);
  int const x_941 = *(i);
  *(i) = 0;
  *(i) = x_941;
  float3 const x_526 = float3(x_525[0], x_525[2], x_525[2]);
  int const x_942 = (*(tint_symbol_81)).numbers.arr[x_30_save];
  (*(tint_symbol_81)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_30_save] = x_942;
  int const x_34_save = x_33;
  int const x_35 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  QuicksortObject const x_943 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_3 = {.numbers=tint_symbol_2};
  *(tint_symbol_81) = tint_symbol_3;
  *(tint_symbol_81) = x_943;
  float2 const x_527 = float2(x_526[0], x_526[0]);
  int const x_36_save = x_32;
  float3 const x_528 = float3(x_524[0], x_524[2], x_524[0]);
  (*(tint_symbol_81)).numbers.arr[x_36_save] = x_35;
  QuicksortObject const x_944 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
  *(tint_symbol_81) = tint_symbol_5;
  *(tint_symbol_81) = x_944;
  float3 const x_529 = float3(x_526[1], x_526[2], x_526[0]);
  int const x_945 = *(i);
  *(i) = 0;
  *(i) = x_945;
  int const x_37 = *(j);
  int const x_946 = temp;
  temp = 0;
  temp = x_946;
  float2 const x_530 = float2(x_529[2], x_529[1]);
  int const x_947 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  (*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_34_save] = x_947;
  int const x_38 = temp;
  int const x_948 = *(j);
  *(j) = 0;
  *(j) = x_948;
  float3 const x_531 = float3(x_527[0], x_526[1], x_526[0]);
  int const x_949 = (*(tint_symbol_81)).numbers.arr[x_36_save];
  (*(tint_symbol_81)).numbers.arr[x_36_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_36_save] = x_949;
  QuicksortObject const x_950 = *(tint_symbol_81);
  tint_array_wrapper const tint_symbol_6 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
  *(tint_symbol_81) = tint_symbol_7;
  *(tint_symbol_81) = x_950;
  float3 const x_532 = float3(x_528[0], x_528[1], x_528[0]);
  int const x_951 = (*(tint_symbol_81)).numbers.arr[x_34_save];
  (*(tint_symbol_81)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_81)).numbers.arr[x_34_save] = x_951;
  (*(tint_symbol_81)).numbers.arr[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_82) {
  int param_3 = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param_2 = 0;
  int param_1 = 0;
  int param = 0;
  int pivot = 0;
  float2 x_537 = 0.0f;
  float3 x_538 = 0.0f;
  int const x_952 = *(h);
  *(h) = 0;
  *(h) = x_952;
  int const x_41 = *(h);
  int const x_953 = *(l);
  *(l) = 0;
  *(l) = x_953;
  int const x_42_save = x_41;
  int const x_954 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_82)).numbers.arr[x_42_save] = x_954;
  int const x_43 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  int const x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[2]);
  int const x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  int const x_45 = *(l);
  int const x_957 = *(h);
  *(h) = 0;
  *(h) = x_957;
  int const x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  float3 const x_535 = float3(x_534[1], x_534[2], x_534[1]);
  int const x_959 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = as_type<int>((as_type<uint>(x_45) - as_type<uint>(as_type<int>(1u))));
  int const x_49 = *(l);
  float3 const x_536 = float3(x_534[0], x_534[2], x_535[0]);
  j_1 = 10;
  QuicksortObject const x_960 = *(tint_symbol_82);
  tint_array_wrapper const tint_symbol_8 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_9 = {.numbers=tint_symbol_8};
  *(tint_symbol_82) = tint_symbol_9;
  *(tint_symbol_82) = x_960;
  while (true) {
    int const x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    int const x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    int const x_55 = j_1;
    int const x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
    QuicksortObject const x_964 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_10 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
    *(tint_symbol_82) = tint_symbol_11;
    *(tint_symbol_82) = x_964;
    int const x_56 = *(h);
    int const x_965 = *(h);
    *(h) = 0;
    *(h) = x_965;
    int const x_966 = param;
    param = 0;
    param = x_966;
    int const x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = float3(x_534[0], x_537[1], x_534[2]);
    int const x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= as_type<int>((as_type<uint>(x_56) - as_type<uint>(as_type<int>(1u)))))) {
    } else {
      break;
    }
    int const x_60 = j_1;
    int const x_969 = (*(tint_symbol_82)).numbers.arr[x_42_save];
    (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
    (*(tint_symbol_82)).numbers.arr[x_42_save] = x_969;
    int const x_61_save = x_60;
    int const x_970 = *(h);
    *(h) = 0;
    *(h) = x_970;
    float3 const x_539 = float3(x_537[0], x_535[2], x_537[0]);
    int const x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    int const x_62 = (*(tint_symbol_82)).numbers.arr[x_61_save];
    QuicksortObject const x_972 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_12 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_13 = {.numbers=tint_symbol_12};
    *(tint_symbol_82) = tint_symbol_13;
    *(tint_symbol_82) = x_972;
    int const x_63 = pivot;
    float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_534[2]);
    int const x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    int const x_974 = *(l);
    *(l) = 0;
    *(l) = x_974;
    float3 const x_541 = float3(x_534[1], x_534[0], x_534[1]);
    int const x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      float3 const x_542 = float3(x_541[2], x_541[0], x_541[0]);
      int const x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      int const x_67 = i_1;
      int const x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      float2 const x_543 = float2(x_539[0], x_541[1]);
      int const x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      int const x_979 = param;
      param = 0;
      param = x_979;
      i_1 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(as_type<int>(1u))));
      int const x_980 = *(l);
      *(l) = 0;
      *(l) = x_980;
      float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1], x_540[0]);
      int const x_70 = i_1;
      float2 const x_545 = float2(x_537[1], x_538[0]);
      int const x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      int const x_982 = param;
      param = 0;
      param = x_982;
      float2 const x_546 = float2(x_545[0], x_545[0]);
      int const x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      int const x_72 = j_1;
      param_1 = x_72;
      int const x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_82);
      int const x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject const x_986 = *(tint_symbol_82);
    tint_array_wrapper const tint_symbol_14 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_15 = {.numbers=tint_symbol_14};
    *(tint_symbol_82) = tint_symbol_15;
    *(tint_symbol_82) = x_986;
    {
      int const x_987 = *(h);
      *(h) = 0;
      *(h) = x_987;
      int const x_74 = j_1;
      int const x_988 = *(h);
      *(h) = 0;
      *(h) = x_988;
      float3 const x_547 = float3(x_539[0], x_541[2], x_541[2]);
      int const x_989 = (*(tint_symbol_82)).numbers.arr[x_61_save];
      (*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_82)).numbers.arr[x_61_save] = x_989;
      int const x_990 = param;
      param = 0;
      param = x_990;
      j_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_74)));
      int const x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      float3 const x_548 = float3(x_541[1], x_541[2], x_541[0]);
      int const x_992 = (*(tint_symbol_82)).numbers.arr[x_61_save];
      (*(tint_symbol_82)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_82)).numbers.arr[x_61_save] = x_992;
    }
  }
  int const x_76 = i_1;
  int const x_993 = (*(tint_symbol_82)).numbers.arr[x_42_save];
  (*(tint_symbol_82)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_82)).numbers.arr[x_42_save] = x_993;
  float2 const x_549 = float2(x_534[0], x_534[1]);
  QuicksortObject const x_994 = *(tint_symbol_82);
  tint_array_wrapper const tint_symbol_16 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
  *(tint_symbol_82) = tint_symbol_17;
  *(tint_symbol_82) = x_994;
  int const x_995 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_76)));
  int const x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  int const x_79 = i_1;
  int const x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  float2 const x_550 = float2(x_534[0], x_534[0]);
  int const x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  float2 const x_551 = float2(x_534[1], x_536[0]);
  int const x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  int const x_81 = *(h);
  float2 const x_552 = float2(x_550[0], x_549[1]);
  int const x_1000 = *(h);
  *(h) = 0;
  *(h) = x_1000;
  param_3 = x_81;
  int const x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  float2 const x_553 = float2(x_549[1], x_552[0]);
  int const x_1002 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_82);
  int const x_1003 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  float2 const x_554 = float2(x_536[2], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  int const x_83 = i_1;
  int const x_1005 = param;
  param = 0;
  param = x_1005;
  float2 const x_555 = float2(x_534[1], x_534[0]);
  int const x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

void quicksort_(thread QuicksortObject* const tint_symbol_83) {
  int param_4 = 0;
  int h_1 = 0;
  int p = 0;
  int l_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int param_5 = 0;
  l_1 = 0;
  int const x_1007 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  tint_array_wrapper const x_1008 = stack;
  tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_18;
  stack = x_1008;
  float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1009 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  int const x_1010 = p;
  p = 0;
  p = x_1010;
  int const x_93 = top;
  float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
  int const x_1011 = p;
  p = 0;
  p = x_1011;
  int const x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(as_type<int>(1u))));
  int const x_1012 = top;
  top = 0;
  top = x_1012;
  float2 const x_558 = float2(x_556[1], x_557[1]);
  int const x_1013 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  int const x_1014 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  float3 const x_559 = float3(x_557[1], x_557[0], x_557[0]);
  int const x_1015 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  int const x_95 = l_1;
  QuicksortObject const x_1016 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_19 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_20 = {.numbers=tint_symbol_19};
  *(tint_symbol_83) = tint_symbol_20;
  *(tint_symbol_83) = x_1016;
  float3 const x_560 = float3(x_559[1], x_559[0], x_557[0]);
  int const x_96_save = x_94;
  tint_array_wrapper const x_1017 = stack;
  tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_21;
  stack = x_1017;
  float3 const x_561 = float3(x_556[1], x_556[1], x_556[1]);
  int const x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack.arr[x_96_save] = x_95;
  int const x_1019 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  int const x_97 = top;
  int const x_1020 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f)[2], x_558[1], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_1021 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1021;
  int const x_98 = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
  int const x_1022 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1022;
  float3 const x_563 = float3(x_559[0], x_559[2], x_556[1]);
  top = x_98;
  int const x_1023 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  int const x_99 = h_1;
  int const x_1024 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  float3 const x_564 = float3(x_558[0], x_561[0], x_558[1]);
  int const x_1025 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  int const x_100_save = x_98;
  int const x_1026 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  float2 const x_565 = float2(x_564[2], x_564[2]);
  int const x_1027 = p;
  p = 0;
  p = x_1027;
  stack.arr[x_100_save] = x_99;
  while (true) {
    float3 const x_566 = float3(x_563[0], x_563[0], x_563[0]);
    int const x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    tint_array_wrapper const x_1029 = stack;
    tint_array_wrapper const tint_symbol_22 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_22;
    stack = x_1029;
    int const x_106 = top;
    tint_array_wrapper const x_1030 = stack;
    tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_23;
    stack = x_1030;
    float2 const x_567 = float2(x_558[0], x_564[2]);
    int const x_1031 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= as_type<int>(0u))) {
    } else {
      break;
    }
    QuicksortObject const x_1032 = *(tint_symbol_83);
    tint_array_wrapper const tint_symbol_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_25 = {.numbers=tint_symbol_24};
    *(tint_symbol_83) = tint_symbol_25;
    *(tint_symbol_83) = x_1032;
    float3 const x_568 = float3(x_559[1], x_559[0], x_563[1]);
    int const x_1033 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    int const x_108 = top;
    float3 const x_569 = float3(x_565[0], x_567[1], x_565[0]);
    int const x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    float2 const x_570 = float2(x_556[0], x_556[0]);
    int const x_1035 = p;
    p = 0;
    p = x_1035;
    top = as_type<int>((as_type<uint>(x_108) - as_type<uint>(as_type<int>(1u))));
    int const x_1036 = p;
    p = 0;
    p = x_1036;
    int const x_110_save = x_108;
    int const x_1037 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1037;
    int const x_111 = stack.arr[x_110_save];
    tint_array_wrapper const x_1038 = stack;
    tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_26;
    stack = x_1038;
    float3 const x_571 = float3(x_559[1], x_559[0], x_564[1]);
    int const x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    tint_array_wrapper const x_1040 = stack;
    tint_array_wrapper const tint_symbol_27 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_27;
    stack = x_1040;
    float2 const x_572 = float2(x_562[1], x_561[1]);
    int const x_1041 = p;
    p = 0;
    p = x_1041;
    int const x_112 = top;
    int const x_1042 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    int const x_1043 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1043;
    float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[2]);
    top = as_type<int>((as_type<uint>(x_112) - as_type<uint>(1)));
    int const x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    float3 const x_574 = float3(x_570[1], x_565[0], x_570[1]);
    int const x_1045 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    int const x_114_save = x_112;
    float2 const x_575 = float2(x_564[1], x_564[2]);
    int const x_1046 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1046;
    int const x_115 = stack.arr[x_114_save];
    int const x_1047 = p;
    p = 0;
    p = x_1047;
    float3 const x_576 = float3(x_573[1], x_573[1], x_565[0]);
    int const x_1048 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    int const x_1049 = top;
    top = 0;
    top = x_1049;
    int const x_118 = l_1;
    param_4 = x_118;
    int const x_1050 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1050;
    float2 const x_577 = float2(x_569[1], x_569[2]);
    int const x_120 = h_1;
    float2 const x_578 = float2(x_558[0], float3(1.0f, 2.0f, 3.0f)[1]);
    param_5 = x_120;
    int const x_1051 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1051;
    int const x_121 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_83);
    float2 const x_579 = float2(x_567[0], x_568[0]);
    int const x_1052 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    int const x_1053 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    int const x_122 = p;
    int const x_1054 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    float2 const x_580 = float2(x_568[1], x_568[1]);
    int const x_1055 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    int const x_1056 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    int const x_124 = l_1;
    int const x_1057 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1057;
    int const x_1058 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    float2 const x_582 = float2(x_567[1], x_573[0]);
    int const x_1059 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1059;
    if ((as_type<int>((as_type<uint>(x_122) - as_type<uint>(as_type<int>(1u)))) > x_124)) {
      int const x_1060 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      int const x_128 = top;
      float2 const x_583 = float2(x_571[1], x_556[1]);
      int const x_1061 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1061;
      tint_array_wrapper const x_1062 = stack;
      tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_28;
      stack = x_1062;
      float2 const x_584 = float2(x_569[2], x_569[1]);
      float3 const x_585 = float3(x_580[1], x_577[0], x_577[0]);
      int const x_130 = l_1;
      int const x_1063 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1063;
      float2 const x_586 = float2(x_564[0], x_585[0]);
      int const x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      int const x_131_save = as_type<int>((as_type<uint>(1) + as_type<uint>(x_128)));
      int const x_1065 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1065;
      float3 const x_587 = float3(x_566[1], x_566[1], x_563[0]);
      int const x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack.arr[x_131_save] = x_130;
      int const x_132 = top;
      int const x_1067 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1067;
      float2 const x_588 = float2(x_575[1], x_575[0]);
      int const x_1068 = stack.arr[x_131_save];
      stack.arr[x_131_save] = 0;
      stack.arr[x_131_save] = x_1068;
      int const x_133 = as_type<int>((1u + as_type<uint>(x_132)));
      int const x_1069 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1069;
      float3 const x_589 = float3(x_576[2], x_588[1], x_576[2]);
      int const x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      tint_array_wrapper const x_1071 = stack;
      tint_array_wrapper const tint_symbol_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_29;
      stack = x_1071;
      int const x_134 = p;
      float2 const x_590 = float2(x_576[0], x_573[1]);
      int const x_1072 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1072;
      int const x_136_save = x_133;
      int const x_1073 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1073;
      stack.arr[x_136_save] = as_type<int>((as_type<uint>(x_134) - as_type<uint>(as_type<int>(1u))));
      int const x_1074 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1074;
      float2 const x_591 = float2(x_569[2], x_569[1]);
      int const x_1075 = stack.arr[x_136_save];
      stack.arr[x_136_save] = 0;
      stack.arr[x_136_save] = x_1075;
    }
    int const x_1076 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1076;
    float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[1]);
    QuicksortObject const x_1077 = *(tint_symbol_83);
    tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_31 = {.numbers=tint_symbol_30};
    *(tint_symbol_83) = tint_symbol_31;
    *(tint_symbol_83) = x_1077;
    int const x_137 = p;
    int const x_1078 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1078;
    float3 const x_593 = float3(x_571[2], x_556[0], x_556[1]);
    int const x_1079 = p;
    p = 0;
    p = x_1079;
    float3 const x_594 = float3(x_563[2], x_563[0], x_575[0]);
    int const x_1080 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1080;
    int const x_139 = h_1;
    int const x_1081 = top;
    top = 0;
    top = x_1081;
    float3 const x_595 = float3(x_560[2], x_568[0], x_560[0]);
    int const x_1082 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1082;
    int const x_1083 = p;
    p = 0;
    p = x_1083;
    if ((as_type<int>((1u + as_type<uint>(x_137))) < x_139)) {
      int const x_1084 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1084;
      float2 const x_596 = float2(x_592[1], x_582[0]);
      int const x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      int const x_143 = top;
      int const x_1086 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1086;
      float3 const x_597 = float3(x_562[1], x_560[1], x_560[1]);
      int const x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
      int const x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      int const x_1088 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1088;
      int const x_145 = p;
      int const x_1089 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      float3 const x_599 = float3(x_560[2], x_560[0], x_568[0]);
      int const x_1090 = p;
      p = 0;
      p = x_1090;
      float3 const x_600 = float3(x_556[0], x_580[0], x_580[0]);
      int const x_1091 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1091;
      int const x_147_save = x_144;
      int const x_1092 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1092;
      float2 const x_601 = float2(x_563[0], x_563[1]);
      stack.arr[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
      tint_array_wrapper const x_1093 = stack;
      tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_32;
      stack = x_1093;
      int const x_148 = top;
      int const x_1094 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1094;
      float2 const x_602 = float2(x_565[1], x_599[1]);
      tint_array_wrapper const x_1095 = stack;
      tint_array_wrapper const tint_symbol_33 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_33;
      stack = x_1095;
      int const x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(as_type<int>(1u))));
      int const x_1096 = stack.arr[x_147_save];
      stack.arr[x_147_save] = 0;
      stack.arr[x_147_save] = x_1096;
      top = x_149;
      int const x_1097 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      int const x_150 = h_1;
      int const x_1098 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1098;
      int const x_1099 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1099;
      stack.arr[x_149] = x_150;
      int const x_1100 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1100;
      float3 const x_603 = float3(x_568[1], x_564[0], x_564[0]);
      int const x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    int const x_1102 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1102;
    {
      int const x_1103 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      float2 const x_604 = float2(x_563[2], x_564[0]);
      QuicksortObject const x_1104 = *(tint_symbol_83);
      tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      QuicksortObject const tint_symbol_35 = {.numbers=tint_symbol_34};
      *(tint_symbol_83) = tint_symbol_35;
      *(tint_symbol_83) = x_1104;
    }
  }
  int const x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

void main_1(thread QuicksortObject* const tint_symbol_84, thread float4* const tint_symbol_85, const constant buf0* const tint_symbol_86, thread float4* const tint_symbol_87) {
  float3 color = 0.0f;
  int i_2 = 0;
  float2 uv = 0.0f;
  float2 const x_717 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_717;
  i_2 = 0;
  QuicksortObject const x_721 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_36 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_37 = {.numbers=tint_symbol_36};
  *(tint_symbol_84) = tint_symbol_37;
  *(tint_symbol_84) = x_721;
  if (true) {
    QuicksortObject const x_722 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_38 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
    *(tint_symbol_84) = tint_symbol_39;
    *(tint_symbol_84) = x_722;
    float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f)[0], float3(1.0f, 2.0f, 3.0f)[0]);
    int const x_158 = i_2;
    float2 const x_723 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_723;
    float3 const x_725 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_725;
    float2 const x_432 = float2(x_431[1], x_431[1]);
    QuicksortObject const x_726 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_40 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_41 = {.numbers=tint_symbol_40};
    *(tint_symbol_84) = tint_symbol_41;
    *(tint_symbol_84) = x_726;
  }
  QuicksortObject const x_756 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_42 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
  *(tint_symbol_84) = tint_symbol_43;
  *(tint_symbol_84) = x_756;
  float2 const x_446 = float2(float2()[0], float2()[0]);
  int const x_757 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_(tint_symbol_84);
  QuicksortObject const x_758 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_44 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_45 = {.numbers=tint_symbol_44};
  *(tint_symbol_84) = tint_symbol_45;
  *(tint_symbol_84) = x_758;
  float4 const x_184 = *(tint_symbol_85);
  float2 const x_759 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_759;
  float2 const x_447 = float2(float2()[1], float2()[1]);
  float2 const x_760 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_760;
  float2 const x_185 = float2(x_184[0], x_184[1]);
  float3 const x_448 = float3(x_185[1], x_446[1], x_446[1]);
  QuicksortObject const x_761 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_46 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_47 = {.numbers=tint_symbol_46};
  *(tint_symbol_84) = tint_symbol_47;
  *(tint_symbol_84) = x_761;
  float2 const x_762 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_762;
  float2 const x_191 = (*(tint_symbol_86)).resolution;
  QuicksortObject const x_763 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_48 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
  *(tint_symbol_84) = tint_symbol_49;
  *(tint_symbol_84) = x_763;
  float3 const x_449 = float3(x_184[1], float3(1.0f, 2.0f, 3.0f)[2], x_184[3]);
  float3 const x_764 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_764;
  float2 const x_192 = (x_185 / x_191);
  QuicksortObject const x_765 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_50 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_51 = {.numbers=tint_symbol_50};
  *(tint_symbol_84) = tint_symbol_51;
  *(tint_symbol_84) = x_765;
  float2 const x_450 = float2(x_447[0], x_185[1]);
  float3 const x_766 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  float3 const x_767 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = float3(1.0f, 2.0f, 3.0f);
  float3 const x_768 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_768;
  float3 const x_451 = float3(x_185[0], x_185[1], x_446[1]);
  QuicksortObject const x_769 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_52 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_53 = {.numbers=tint_symbol_52};
  *(tint_symbol_84) = tint_symbol_53;
  *(tint_symbol_84) = x_769;
  int const x_770 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_770;
  int const x_201 = (*(tint_symbol_84)).numbers.arr[0u];
  QuicksortObject const x_771 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_54 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_55 = {.numbers=tint_symbol_54};
  *(tint_symbol_84) = tint_symbol_55;
  *(tint_symbol_84) = x_771;
  int const x_772 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_772;
  float const x_206 = color[0];
  float const x_773 = color[0];
  color[0] = 0.0f;
  color[0] = x_773;
  float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f)[2], float3(1.0f, 2.0f, 3.0f)[1]);
  int const x_774 = i_2;
  i_2 = 0;
  i_2 = x_774;
  QuicksortObject const x_775 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_56 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_57 = {.numbers=tint_symbol_56};
  *(tint_symbol_84) = tint_symbol_57;
  *(tint_symbol_84) = x_775;
  float3 const x_453 = float3(x_451[0], x_450[0], x_450[1]);
  color[0] = (x_206 + float(x_201));
  float2 const x_776 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_776;
  float2 const x_777 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_777;
  float2 const x_454 = float2(x_184[1], x_184[1]);
  float const x_210 = uv[0];
  float2 const x_455 = float2(x_192[1], x_192[0]);
  float const x_778 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_778;
  QuicksortObject const x_779 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_58 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_59 = {.numbers=tint_symbol_58};
  *(tint_symbol_84) = tint_symbol_59;
  *(tint_symbol_84) = x_779;
  if ((x_210 > 0.25f)) {
    int const x_780 = i_2;
    i_2 = 0;
    i_2 = x_780;
    int const x_781 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_781;
    float3 const x_456 = float3(float2()[1], x_448[1], x_448[1]);
    float const x_782 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_782;
    int const x_216 = (*(tint_symbol_84)).numbers.arr[1];
    QuicksortObject const x_783 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_60 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_61 = {.numbers=tint_symbol_60};
    *(tint_symbol_84) = tint_symbol_61;
    *(tint_symbol_84) = x_783;
    float2 const x_457 = float2(x_454[0], x_454[0]);
    float2 const x_784 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_784;
    QuicksortObject const x_785 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_62 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
    *(tint_symbol_84) = tint_symbol_63;
    *(tint_symbol_84) = x_785;
    float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f)[2], float2()[1]);
    int const x_786 = i_2;
    i_2 = 0;
    i_2 = x_786;
    float const x_219 = color[0];
    float const x_787 = color[0];
    color[0] = 0.0f;
    color[0] = x_787;
    float3 const x_788 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_788;
    float3 const x_789 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_789;
    float3 const x_459 = float3(x_454[1], x_454[1], x_447[1]);
    float const x_790 = color[0];
    color[0] = 0.0f;
    color[0] = x_790;
    color[0] = (float(x_216) + x_219);
    int const x_791 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_791;
  }
  float const x_792 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_792;
  float const x_793 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_793;
  float const x_223 = uv[0];
  float const x_794 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_794;
  float3 const x_460 = float3(x_453[2], x_453[1], x_453[1]);
  float2 const x_795 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_795;
  float const x_796 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_796;
  float2 const x_461 = float2(float2()[1], float2()[1]);
  float const x_797 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_797;
  if ((x_223 > 0.5f)) {
    float const x_798 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_798;
    float2 const x_462 = float2(x_446[0], x_446[0]);
    float const x_799 = color[0];
    color[0] = 0.0f;
    color[0] = x_799;
    float const x_800 = color[0];
    color[0] = 0.0f;
    color[0] = x_800;
    float3 const x_463 = float3(x_453[0], x_453[2], x_461[1]);
    float const x_801 = color[0];
    color[0] = 0.0f;
    color[0] = x_801;
    int const x_230 = (*(tint_symbol_84)).numbers.arr[2u];
    float const x_802 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_802;
    float const x_803 = color[0];
    color[0] = 0.0f;
    color[0] = x_803;
    int const x_804 = (*(tint_symbol_84)).numbers.arr[2u];
    (*(tint_symbol_84)).numbers.arr[2u] = 0;
    (*(tint_symbol_84)).numbers.arr[2u] = x_804;
    float2 const x_464 = float2(x_450[1], x_191[0]);
    float const x_805 = color[1];
    color[1] = 0.0f;
    color[1] = x_805;
    float const x_234 = color[1];
    int const x_806 = (*(tint_symbol_84)).numbers.arr[2u];
    (*(tint_symbol_84)).numbers.arr[2u] = 0;
    (*(tint_symbol_84)).numbers.arr[2u] = x_806;
    float2 const x_465 = float2(x_463[0], x_185[0]);
    float const x_807 = color[0];
    color[0] = 0.0f;
    color[0] = x_807;
    int const x_808 = i_2;
    i_2 = 0;
    i_2 = x_808;
    float2 const x_466 = float2(x_455[1], float2()[1]);
    int const x_809 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color[1] = (float(x_230) + x_234);
    float const x_810 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_810;
  }
  int const x_811 = i_2;
  i_2 = 0;
  i_2 = x_811;
  float2 const x_467 = float2(x_191[0], x_191[0]);
  float const x_812 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_812;
  float const x_238 = uv[0];
  float3 const x_813 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_813;
  float const x_814 = color[0];
  color[0] = 0.0f;
  color[0] = x_814;
  if ((x_238 > 0.75f)) {
    float const x_815 = color[0];
    color[0] = 0.0f;
    color[0] = x_815;
    int const x_245 = (*(tint_symbol_84)).numbers.arr[3];
    float const x_816 = color[0];
    color[0] = 0.0f;
    color[0] = x_816;
    QuicksortObject const x_817 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_64 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_65 = {.numbers=tint_symbol_64};
    *(tint_symbol_84) = tint_symbol_65;
    *(tint_symbol_84) = x_817;
    float3 const x_468 = float3(x_467[0], x_467[0], x_467[0]);
    float const x_818 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_818;
    float const x_819 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_819;
    float const x_249 = color[2];
    float3 const x_820 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_820;
    float3 const x_469 = float3(x_467[0], x_191[1], x_467[1]);
    float const x_821 = color[2];
    color[2] = 0.0f;
    color[2] = x_821;
    int const x_822 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_822;
    float2 const x_470 = float2(float2()[0], float2()[1]);
    float const x_823 = color[2];
    color[2] = 0.0f;
    color[2] = x_823;
    color[2] = (x_249 + float(x_245));
    float2 const x_824 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_824;
    float2 const x_471 = float2(x_470[1], x_470[1]);
  }
  float const x_825 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_825;
  float3 const x_472 = float3(x_454[0], x_454[1], x_454[1]);
  int const x_254 = (*(tint_symbol_84)).numbers.arr[4];
  float const x_826 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_826;
  float3 const x_827 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_827;
  float3 const x_473 = float3(x_446[1], x_453[0], x_453[0]);
  int const x_828 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_828;
  float2 const x_474 = float2(x_191[0], x_184[2]);
  float const x_829 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_829;
  float const x_257 = color[1];
  float const x_830 = color[1];
  color[1] = 0.0f;
  color[1] = x_830;
  float2 const x_475 = float2(x_467[0], x_450[0]);
  float const x_831 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_831;
  float const x_832 = color[0];
  color[0] = 0.0f;
  color[0] = x_832;
  float2 const x_476 = float2(x_451[2], x_460[1]);
  color[1] = (x_257 + float(x_254));
  float3 const x_477 = float3(float2()[0], x_472[0], float2()[1]);
  float const x_833 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_833;
  float const x_834 = color[0];
  color[0] = 0.0f;
  color[0] = x_834;
  float2 const x_478 = float2(x_472[0], x_472[1]);
  float const x_835 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_835;
  float const x_261 = uv[1];
  int const x_836 = i_2;
  i_2 = 0;
  i_2 = x_836;
  float3 const x_479 = float3(float2()[1], x_454[1], float2()[0]);
  int const x_837 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_837;
  float const x_838 = color[1];
  color[1] = 0.0f;
  color[1] = x_838;
  float3 const x_480 = float3(x_446[0], x_446[0], float2()[1]);
  float const x_839 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_839;
  if ((x_261 > 0.25f)) {
    float2 const x_481 = float2(x_447[0], x_480[2]);
    float3 const x_840 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_840;
    int const x_267 = (*(tint_symbol_84)).numbers.arr[5u];
    float const x_841 = color[0];
    color[0] = 0.0f;
    color[0] = x_841;
    int const x_842 = i_2;
    i_2 = 0;
    i_2 = x_842;
    int const x_843 = i_2;
    i_2 = 0;
    i_2 = x_843;
    float const x_270 = color[0];
    float const x_844 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_844;
    float3 const x_482 = float3(x_455[0], x_475[1], x_455[1]);
    QuicksortObject const x_845 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_66 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_67 = {.numbers=tint_symbol_66};
    *(tint_symbol_84) = tint_symbol_67;
    *(tint_symbol_84) = x_845;
    float const x_846 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_846;
    int const x_847 = i_2;
    i_2 = 0;
    i_2 = x_847;
    float3 const x_483 = float3(x_184[3], x_184[3], x_192[0]);
    float const x_848 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_848;
    color[0] = (float(x_267) + x_270);
    float3 const x_484 = float3(x_454[1], x_450[0], x_454[1]);
    float const x_849 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_849;
  }
  float const x_850 = color[0];
  color[0] = 0.0f;
  color[0] = x_850;
  float3 const x_485 = float3(x_467[0], x_450[1], x_450[0]);
  float const x_851 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_851;
  int const x_852 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_852;
  float const x_274 = uv[1];
  int const x_853 = (*(tint_symbol_84)).numbers.arr[0u];
  (*(tint_symbol_84)).numbers.arr[0u] = 0;
  (*(tint_symbol_84)).numbers.arr[0u] = x_853;
  if ((x_274 > 0.5f)) {
    float const x_854 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_854;
    float2 const x_486 = float2(x_480[1], x_455[1]);
    float const x_855 = color[1];
    color[1] = 0.0f;
    color[1] = x_855;
    float2 const x_487 = float2(x_449[2], x_449[1]);
    float const x_856 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_856;
    int const x_280 = (*(tint_symbol_84)).numbers.arr[6u];
    float const x_857 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_857;
    int const x_858 = i_2;
    i_2 = 0;
    i_2 = x_858;
    int const x_859 = (*(tint_symbol_84)).numbers.arr[4];
    (*(tint_symbol_84)).numbers.arr[4] = 0;
    (*(tint_symbol_84)).numbers.arr[4] = x_859;
    float2 const x_488 = float2(x_473[2], x_473[1]);
    float const x_283 = color[1];
    float2 const x_860 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_860;
    float const x_861 = color[0];
    color[0] = 0.0f;
    color[0] = x_861;
    float2 const x_489 = float2(x_475[1], x_475[0]);
    int const x_862 = (*(tint_symbol_84)).numbers.arr[6u];
    (*(tint_symbol_84)).numbers.arr[6u] = 0;
    (*(tint_symbol_84)).numbers.arr[6u] = x_862;
    int const x_863 = (*(tint_symbol_84)).numbers.arr[6u];
    (*(tint_symbol_84)).numbers.arr[6u] = 0;
    (*(tint_symbol_84)).numbers.arr[6u] = x_863;
    float2 const x_490 = float2(x_480[2], x_480[2]);
    QuicksortObject const x_864 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_68 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_69 = {.numbers=tint_symbol_68};
    *(tint_symbol_84) = tint_symbol_69;
    *(tint_symbol_84) = x_864;
    color[1] = (float(x_280) + x_283);
    float const x_865 = color[0];
    color[0] = 0.0f;
    color[0] = x_865;
    float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f)[1], x_454[0]);
    float const x_866 = color[1];
    color[1] = 0.0f;
    color[1] = x_866;
  }
  float2 const x_492 = float2(x_455[1], x_455[1]);
  float const x_867 = color[0];
  color[0] = 0.0f;
  color[0] = x_867;
  float const x_287 = uv[1];
  QuicksortObject const x_868 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_70 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_71 = {.numbers=tint_symbol_70};
  *(tint_symbol_84) = tint_symbol_71;
  *(tint_symbol_84) = x_868;
  float2 const x_493 = float2(x_475[0], x_475[1]);
  float const x_869 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_869;
  float const x_870 = color[1];
  color[1] = 0.0f;
  color[1] = x_870;
  float3 const x_494 = float3(x_191[0], x_191[1], x_191[1]);
  int const x_871 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_871;
  if ((x_287 > 0.75f)) {
    float3 const x_872 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_872;
    float const x_873 = color[0];
    color[0] = 0.0f;
    color[0] = x_873;
    float3 const x_495 = float3(x_192[1], x_192[0], x_192[1]);
    float3 const x_874 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_874;
    int const x_293 = (*(tint_symbol_84)).numbers.arr[7];
    float const x_875 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_875;
    float3 const x_496 = float3(x_475[0], x_467[1], x_467[0]);
    float const x_876 = color[1];
    color[1] = 0.0f;
    color[1] = x_876;
    float2 const x_497 = float2(x_477[0], x_461[1]);
    int const x_877 = (*(tint_symbol_84)).numbers.arr[0u];
    (*(tint_symbol_84)).numbers.arr[0u] = 0;
    (*(tint_symbol_84)).numbers.arr[0u] = x_877;
    float const x_878 = color[1];
    color[1] = 0.0f;
    color[1] = x_878;
    float3 const x_498 = float3(x_478[0], x_478[1], x_478[0]);
    float const x_879 = color[0];
    color[0] = 0.0f;
    color[0] = x_879;
    float const x_296 = color[2];
    float const x_880 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_880;
    float2 const x_499 = float2(x_184[0], x_184[1]);
    float const x_881 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_881;
    float const x_882 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_882;
    float const x_883 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_883;
    float3 const x_500 = float3(x_499[1], x_499[1], x_494[2]);
    float const x_884 = color[2];
    color[2] = 0.0f;
    color[2] = x_884;
    color[2] = (float(x_293) + x_296);
    float const x_885 = color[1];
    color[1] = 0.0f;
    color[1] = x_885;
    float2 const x_501 = float2(x_453[0], x_453[2]);
    float const x_886 = color[0];
    color[0] = 0.0f;
    color[0] = x_886;
  }
  int const x_887 = i_2;
  i_2 = 0;
  i_2 = x_887;
  float2 const x_502 = float2(x_451[1], x_192[1]);
  float2 const x_888 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_888;
  int const x_301 = (*(tint_symbol_84)).numbers.arr[8];
  int const x_889 = i_2;
  i_2 = 0;
  i_2 = x_889;
  float2 const x_503 = float2(x_185[0], x_451[2]);
  int const x_890 = (*(tint_symbol_84)).numbers.arr[8];
  (*(tint_symbol_84)).numbers.arr[8] = 0;
  (*(tint_symbol_84)).numbers.arr[8] = x_890;
  float const x_891 = color[1];
  color[1] = 0.0f;
  color[1] = x_891;
  float2 const x_504 = float2(x_453[1], float2()[0]);
  float const x_892 = color[0];
  color[0] = 0.0f;
  color[0] = x_892;
  float3 const x_505 = float3(x_504[0], x_504[1], x_504[0]);
  float const x_893 = color[2];
  color[2] = 0.0f;
  color[2] = x_893;
  float const x_304 = color[2];
  float const x_894 = color[0];
  color[0] = 0.0f;
  color[0] = x_894;
  float2 const x_506 = float2(x_493[0], x_492[0]);
  int const x_895 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_895;
  float const x_896 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_896;
  float2 const x_507 = float2(x_461[0], x_447[0]);
  float const x_897 = color[1];
  color[1] = 0.0f;
  color[1] = x_897;
  color[2] = (x_304 + float(x_301));
  float2 const x_898 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_898;
  float const x_899 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_899;
  float3 const x_508 = float3(x_461[1], x_461[0], x_506[1]);
  float const x_900 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_900;
  float const x_308 = uv[0];
  float const x_901 = color[1];
  color[1] = 0.0f;
  color[1] = x_901;
  float3 const x_509 = float3(x_503[1], x_503[0], x_448[2]);
  float const x_902 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_902;
  float const x_310 = uv[1];
  float const x_903 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_903;
  float const x_904 = color[2];
  color[2] = 0.0f;
  color[2] = x_904;
  float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f)[1], x_485[1], x_485[2]);
  float const x_905 = color[2];
  color[2] = 0.0f;
  color[2] = x_905;
  int const x_906 = i_2;
  i_2 = 0;
  i_2 = x_906;
  float2 const x_511 = float2(x_485[2], x_485[1]);
  float3 const x_907 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_907;
  float const x_908 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_908;
  float3 const x_512 = float3(x_455[1], x_455[1], x_455[1]);
  int const x_909 = (*(tint_symbol_84)).numbers.arr[4];
  (*(tint_symbol_84)).numbers.arr[4] = 0;
  (*(tint_symbol_84)).numbers.arr[4] = x_909;
  if ((fabs((x_308 - x_310)) < 0.25f)) {
    float const x_910 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_910;
    QuicksortObject const x_911 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_72 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_73 = {.numbers=tint_symbol_72};
    *(tint_symbol_84) = tint_symbol_73;
    *(tint_symbol_84) = x_911;
    float3 const x_513 = float3(x_505[2], x_505[0], x_448[0]);
    int const x_912 = (*(tint_symbol_84)).numbers.arr[8];
    (*(tint_symbol_84)).numbers.arr[8] = 0;
    (*(tint_symbol_84)).numbers.arr[8] = x_912;
    int const x_317 = (*(tint_symbol_84)).numbers.arr[9u];
    float3 const x_514 = float3(x_474[1], x_474[1], x_474[1]);
    float const x_913 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_913;
    float const x_320 = color[0];
    float const x_914 = uv[1];
    uv[1] = 0.0f;
    uv[1] = x_914;
    float2 const x_515 = float2(x_502[0], x_502[1]);
    float const x_915 = color[0];
    color[0] = 0.0f;
    color[0] = x_915;
    float3 const x_916 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_916;
    float2 const x_516 = float2(x_452[0], x_452[0]);
    float2 const x_917 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_917;
    float const x_918 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_918;
    float3 const x_517 = float3(float2()[0], float2()[0], float2()[1]);
    color[0] = (float(x_317) + x_320);
    float const x_919 = color[0];
    color[0] = 0.0f;
    color[0] = x_919;
    float3 const x_518 = float3(x_480[1], x_508[0], x_480[0]);
    float const x_920 = color[0];
    color[0] = 0.0f;
    color[0] = x_920;
  }
  float const x_921 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_921;
  float3 const x_325 = color;
  float const x_922 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_922;
  float3 const x_519 = float3(x_447[0], x_446[0], x_446[1]);
  float3 const x_326 = normalize(x_325);
  float const x_923 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_923;
  QuicksortObject const x_924 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_74 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_75 = {.numbers=tint_symbol_74};
  *(tint_symbol_84) = tint_symbol_75;
  *(tint_symbol_84) = x_924;
  QuicksortObject const x_925 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_76 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_77 = {.numbers=tint_symbol_76};
  *(tint_symbol_84) = tint_symbol_77;
  *(tint_symbol_84) = x_925;
  float const x_926 = color[1];
  color[1] = 0.0f;
  color[1] = x_926;
  float2 const x_520 = float2(x_506[1], x_519[1]);
  float const x_927 = color[1];
  color[1] = 0.0f;
  color[1] = x_927;
  float4 const x_330 = float4(x_326[0], x_326[1], x_326[2], 1.0f);
  float const x_928 = uv[1];
  uv[1] = 0.0f;
  uv[1] = x_928;
  float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f)[1], float3(1.0f, 2.0f, 3.0f)[1], x_520[1]);
  float const x_929 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_929;
  *(tint_symbol_87) = x_330;
  QuicksortObject const x_930 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_78 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_79 = {.numbers=tint_symbol_78};
  *(tint_symbol_84) = tint_symbol_79;
  *(tint_symbol_84) = x_930;
  float3 const x_522 = float3(x_330[3], x_330[1], x_493[0]);
  float const x_931 = color[0];
  color[0] = 0.0f;
  color[0] = x_931;
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};

struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_88, thread QuicksortObject* const tint_symbol_89, const constant buf0* const tint_symbol_90, thread float4* const tint_symbol_91) {
  *(tint_symbol_88) = gl_FragCoord_param;
  main_1(tint_symbol_89, tint_symbol_88, tint_symbol_90, tint_symbol_91);
  main_out const tint_symbol_80 = {.x_GLF_color_1=*(tint_symbol_91)};
  return tint_symbol_80;
}

fragment tint_symbol_1 tint_symbol(const constant buf0* tint_symbol_94 [[buffer(0)]], float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_92 = 0.0f;
  thread QuicksortObject tint_symbol_93 = {};
  thread float4 tint_symbol_95 = 0.0f;
  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_92), &(tint_symbol_93), tint_symbol_94, &(tint_symbol_95));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

