#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Uniforms {
    float4 colorGreen;
    float4 colorRed;
};
struct Inputs {
};
struct Outputs {
    float4 sk_FragColor [[color(0)]];
};
thread bool operator==(const float2x2 left, const float2x2 right) {
    return all(left[0] == right[0]) &&
           all(left[1] == right[1]);
}
thread bool operator!=(const float2x2 left, const float2x2 right) {
    return !(left == right);
}
thread bool operator==(const float3x3 left, const float3x3 right) {
    return all(left[0] == right[0]) &&
           all(left[1] == right[1]) &&
           all(left[2] == right[2]);
}
thread bool operator!=(const float3x3 left, const float3x3 right) {
    return !(left == right);
}
thread bool operator==(const float4x4 left, const float4x4 right) {
    return all(left[0] == right[0]) &&
           all(left[1] == right[1]) &&
           all(left[2] == right[2]) &&
           all(left[3] == right[3]);
}
thread bool operator!=(const float4x4 left, const float4x4 right) {
    return !(left == right);
}
float2 returns_float2_f2() {
    return float2(2.0);
}
float3 returns_float3_f3() {
    return float3(3.0);
}
float4 returns_float4_f4() {
    return float4(4.0);
}
float2x2 returns_float2x2_f22() {
    return float2x2(2.0);
}
float3x3 returns_float3x3_f33() {
    return float3x3(3.0);
}
float4x4 returns_float4x4_f44() {
    return float4x4(4.0);
}
float returns_half_h() {
    return 1.0;
}
float2 returns_half2_h2() {
    return float2(2.0);
}
float3 returns_half3_h3() {
    return float3(3.0);
}
float4 returns_half4_h4() {
    return float4(4.0);
}
float2x2 returns_half2x2_h22() {
    return float2x2(2.0);
}
float3x3 returns_half3x3_h33() {
    return float3x3(3.0);
}
float4x4 returns_half4x4_h44() {
    return float4x4(4.0);
}
bool returns_bool_b() {
    return true;
}
bool2 returns_bool2_b2() {
    return bool2(true);
}
bool3 returns_bool3_b3() {
    return bool3(true);
}
bool4 returns_bool4_b4() {
    return bool4(true);
}
int returns_int_i() {
    return 1;
}
int2 returns_int2_i2() {
    return int2(2);
}
int3 returns_int3_i3() {
    return int3(3);
}
int4 returns_int4_i4() {
    return int4(4);
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
    Outputs _out;
    (void)_out;
    float x1 = 1.0;
    float2 x2 = float2(2.0);
    float3 x3 = float3(3.0);
    float4 x4 = float4(4.0);
    float2x2 x5 = float2x2(2.0);
    float3x3 x6 = float3x3(3.0);
    float4x4 x7 = float4x4(4.0);
    float x8 = 1.0;
    float2 x9 = float2(2.0);
    float3 x10 = float3(3.0);
    float4 x11 = float4(4.0);
    float2x2 x12 = float2x2(2.0);
    float3x3 x13 = float3x3(3.0);
    float4x4 x14 = float4x4(4.0);
    bool x15 = true;
    bool2 x16 = bool2(true);
    bool3 x17 = bool3(true);
    bool4 x18 = bool4(true);
    int x19 = 1;
    int2 x20 = int2(2);
    int3 x21 = int3(3);
    int4 x22 = int4(4);
    _out.sk_FragColor = ((((((((((((((((((((x1 == 1.0 && all(x2 == returns_float2_f2())) && all(x3 == returns_float3_f3())) && all(x4 == returns_float4_f4())) && x5 == returns_float2x2_f22()) && x6 == returns_float3x3_f33()) && x7 == returns_float4x4_f44()) && x8 == returns_half_h()) && all(x9 == returns_half2_h2())) && all(x10 == returns_half3_h3())) && all(x11 == returns_half4_h4())) && x12 == returns_half2x2_h22()) && x13 == returns_half3x3_h33()) && x14 == returns_half4x4_h44()) && x15 == returns_bool_b()) && all(x16 == returns_bool2_b2())) && all(x17 == returns_bool3_b3())) && all(x18 == returns_bool4_b4())) && x19 == returns_int_i()) && all(x20 == returns_int2_i2())) && all(x21 == returns_int3_i3())) && all(x22 == returns_int4_i4()) ? _uniforms.colorGreen : _uniforms.colorRed;
    return _out;
}
