#include <metal_stdlib>

using namespace metal;
struct Communicators {
  float alice;
  float4 bob;
};
struct main_out {
  float4 x_2_1;
};
struct tint_symbol_2 {
  float x_1_param [[attribute(9)]];
  float4 x_1_param_1 [[attribute(10)]];
};
struct tint_symbol_3 {
  float4 x_2_1 [[position]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(float x_1_param, float4 x_1_param_1, thread Communicators* const tint_symbol_5, thread float4* const tint_symbol_6) {
  (*(tint_symbol_5)).alice = x_1_param;
  (*(tint_symbol_5)).bob = x_1_param_1;
  main_1();
  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_6)};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread Communicators tint_symbol_7 = {};
  thread float4 tint_symbol_8 = 0.0f;
  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, &(tint_symbol_7), &(tint_symbol_8));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.x_2_1 = inner_result.x_2_1;
  return wrapper_result;
}

