#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 final_color_1;
};
struct tint_symbol_2 {
  float4 frag_color_param [[user(locn0)]];
};
struct tint_symbol_3 {
  float4 final_color_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float4 const x_12 = *(tint_symbol_5);
  *(tint_symbol_6) = x_12;
  return;
}

main_out tint_symbol_inner(float4 frag_color_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
  *(tint_symbol_7) = frag_color_param;
  main_1(tint_symbol_7, tint_symbol_8);
  main_out const tint_symbol_4 = {.final_color_1=*(tint_symbol_8)};
  return tint_symbol_4;
}

fragment tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float4 tint_symbol_9 = 0.0f;
  thread float4 tint_symbol_10 = 0.0f;
  main_out const inner_result = tint_symbol_inner(tint_symbol_1.frag_color_param, &(tint_symbol_9), &(tint_symbol_10));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.final_color_1 = inner_result.final_color_1;
  return wrapper_result;
}

