#include <metal_stdlib>

using namespace metal;
struct FragIn {
  float a;
  uint mask;
};
struct tint_symbol_2 {
  float a [[user(locn0)]];
  float b [[user(locn1)]];
};
struct tint_symbol_3 {
  float a [[color(0)]];
  uint mask [[sample_mask]];
};

FragIn tint_symbol_inner(FragIn in, float b) {
  if ((in.mask == 0u)) {
    return in;
  }
  FragIn const tint_symbol_4 = {.a=b, .mask=1u};
  return tint_symbol_4;
}

fragment tint_symbol_3 tint_symbol(uint mask [[sample_mask]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  FragIn const tint_symbol_5 = {.a=tint_symbol_1.a, .mask=mask};
  FragIn const inner_result = tint_symbol_inner(tint_symbol_5, tint_symbol_1.b);
  tint_symbol_3 wrapper_result = {};
  wrapper_result.a = inner_result.a;
  wrapper_result.mask = inner_result.mask;
  return wrapper_result;
}

