#include <metal_stdlib>

using namespace metal;
struct main_out {
  uint x_4_1;
  float4 gl_Position;
};
struct tint_symbol_2 {
  float2 x_3_param [[attribute(0)]];
};
struct tint_symbol_3 {
  uint x_4_1 [[user(locn0)]];
  float4 gl_Position [[position]];
};

void main_1(thread float2* const tint_symbol_6, thread uint* const tint_symbol_7, thread float4* const tint_symbol_8) {
  float const x_30 = (*(tint_symbol_6)).x;
  float const x_36 = (*(tint_symbol_6)).y;
  *(tint_symbol_7) = (uint((((x_30 + 1.027777791f) * 18.0f) - 1.0f)) + (uint((((x_36 + 1.027777791f) * 18.0f) - 1.0f)) * 36u));
  float2 const x_43 = *(tint_symbol_6);
  *(tint_symbol_8) = float4(x_43.x, x_43.y, 0.0f, 1.0f);
  return;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float2 tint_symbol_9 = 0.0f;
  thread uint tint_symbol_10 = 0u;
  thread float4 tint_symbol_11 = 0.0f;
  float2 const x_3_param = tint_symbol_1.x_3_param;
  tint_symbol_9 = x_3_param;
  main_1(&(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
  main_out const tint_symbol_4 = {.x_4_1=tint_symbol_10, .gl_Position=tint_symbol_11};
  tint_symbol_3 const tint_symbol_5 = {.x_4_1=tint_symbol_4.x_4_1, .gl_Position=tint_symbol_4.gl_Position};
  return tint_symbol_5;
}

