#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 result_1;
};
struct tint_symbol_2 {
  float4 result_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float const x_19 = (*(tint_symbol_5)).x;
  float const x_23 = (*(tint_symbol_5)).y;
  *(tint_symbol_6) = float4((floor(x_19) / 255.0f), (floor(x_23) / 255.0f), 0.0f, 0.0f);
  return;
}

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

