#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 color_1;
};
struct tint_symbol_1 {
  float4 color_1 [[color(0)]];
};

float3 drawShape_vf2_(thread float2* const pos) {
  bool c3 = false;
  bool x_35_phi = false;
  float const x_32 = (*(pos)).y;
  bool const x_33 = (x_32 < 1.0f);
  c3 = x_33;
  x_35_phi = x_33;
  while (true) {
    bool const x_35 = x_35_phi;
    if (x_35) {
    } else {
      break;
    }
    return float3(1.0f, 1.0f, 1.0f);
    {
      x_35_phi = false;
    }
  }
  return float3(1.0f, 1.0f, 1.0f);
}

void main_1(thread float4* const tint_symbol_4) {
  float2 param = 0.0f;
  param = float2(1.0f, 1.0f);
  float3 const x_29 = drawShape_vf2_(&(param));
  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  return;
}

fragment tint_symbol_1 tint_symbol() {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(&(tint_symbol_5));
  main_out const tint_symbol_2 = {.color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.color_1=tint_symbol_2.color_1};
  return tint_symbol_3;
}

