#include <metal_stdlib>

using namespace metal;
struct main_out {
  int out_data_1;
};
struct tint_symbol_2 {
  int out_data_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_5, thread int* const tint_symbol_6) {
  bool x_is_odd = false;
  bool y_is_odd = false;
  float const x_24 = (*(tint_symbol_5)).x;
  x_is_odd = ((int(x_24) & 1) == 1);
  float const x_29 = (*(tint_symbol_5)).y;
  y_is_odd = ((int(x_29) & 1) == 1);
  bool const x_33 = x_is_odd;
  bool const x_34 = y_is_odd;
  *(tint_symbol_6) = select(0, 1, (x_33 | x_34));
  return;
}

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

