#include <metal_stdlib>

using namespace metal;

int tint_unary_minus(const int v) {
  return select(-v, v, v == -2147483648);
}

struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct tint_array_wrapper {
  float4 arr[16];
};
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_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
  tint_array_wrapper indexable = {};
  int2 x_80 = 0;
  int2 x_113 = 0;
  int x_119 = 0;
  int2 x_80_phi = 0;
  int x_83_phi = 0;
  int2 x_114_phi = 0;
  int2 x_116_phi = 0;
  float4 const x_58 = *(tint_symbol_7);
  float2 const x_61 = x_6.resolution;
  float2 const x_62 = (float2(x_58.x, x_58.y) / x_61);
  int const x_65 = int((x_62.x * 8.0f));
  int const x_69 = int((x_62.y * 8.0f));
  int2 const x_78 = int2(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(((x_65 & 5) | (x_69 & 10))) * as_type<uint>(8)))) + as_type<uint>(((x_69 & 5) | (x_65 & 10))))), 0);
  x_80_phi = x_78;
  x_83_phi = 0;
  while (true) {
    int2 x_94 = 0;
    int2 x_102 = 0;
    int x_84 = 0;
    int2 x_95_phi = 0;
    int2 x_103_phi = 0;
    x_80 = x_80_phi;
    int const x_83 = x_83_phi;
    if ((x_83 < 100)) {
    } else {
      break;
    }
    x_95_phi = x_80;
    if ((x_80.x > 0)) {
      x_94 = x_80;
      x_94.y = as_type<int>((as_type<uint>(x_80.y) - as_type<uint>(1)));
      x_95_phi = x_94;
    }
    int2 const x_95 = x_95_phi;
    x_103_phi = x_95;
    if ((x_95.x < 0)) {
      x_102 = x_95;
      x_102.y = as_type<int>((as_type<uint>(x_95.y) + as_type<uint>(1)));
      x_103_phi = x_102;
    }
    int2 const x_103 = x_103_phi;
    int2 x_81_1 = x_103;
    x_81_1.x = as_type<int>((as_type<uint>(x_103.x) + as_type<uint>((x_103.y / 2))));
    int2 const x_81 = x_81_1;
    {
      x_84 = as_type<int>((as_type<uint>(x_83) + as_type<uint>(1)));
      x_80_phi = x_81;
      x_83_phi = x_84;
    }
  }
  int const x_108 = x_80.x;
  x_114_phi = x_80;
  if ((x_108 < 0)) {
    x_113 = x_80;
    x_113.x = tint_unary_minus(x_108);
    x_114_phi = x_113;
  }
  int2 const x_114 = x_114_phi;
  x_116_phi = x_114;
  while (true) {
    int2 x_117 = 0;
    int2 const x_116 = x_116_phi;
    x_119 = x_116.x;
    if ((x_119 > 15)) {
    } else {
      break;
    }
    {
      x_117 = x_116;
      x_117.x = as_type<int>(as_type<int>((as_type<uint>(x_119) - as_type<uint>(as_type<int>(16)))));
      x_116_phi = x_117;
    }
  }
  tint_array_wrapper const tint_symbol_4 = {.arr={float4(0.0f, 0.0f, 0.0f, 1.0f), float4(0.5f, 0.0f, 0.0f, 1.0f), float4(0.0f, 0.5f, 0.0f, 1.0f), float4(0.5f, 0.5f, 0.0f, 1.0f), float4(0.0f, 0.0f, 0.5f, 1.0f), float4(0.5f, 0.0f, 0.5f, 1.0f), float4(0.0f, 0.5f, 0.5f, 1.0f), float4(0.5f, 0.5f, 0.5f, 1.0f), float4(0.0f, 0.0f, 0.0f, 1.0f), float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(1.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 0.0f, 1.0f, 1.0f), float4(0.0f, 1.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
  indexable = tint_symbol_4;
  tint_array_wrapper const x_124 = indexable;
  tint_array_wrapper const tint_symbol_5 = {.arr={float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f), float4(0.0f, 0.0f, 0.0f, 0.0f)}};
  indexable = tint_symbol_5;
  indexable = x_124;
  float4 const x_125 = indexable.arr[x_119];
  *(tint_symbol_8) = x_125;
  return;
}

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

