
out vec4 sk_FragColor;
uniform vec4 colorGreen;
uniform vec4 colorRed;
bool test_half_b() {
    bool ok = true;
    mat2 m1 = mat2(1.0, 2.0, 3.0, 4.0);
    ok = ok && m1 == mat2(1.0, 2.0, 3.0, 4.0);
    mat2 m3 = m1;
    ok = ok && m3 == mat2(1.0, 2.0, 3.0, 4.0);
    mat2 m4 = mat2(6.0);
    ok = ok && m4 == mat2(6.0, 0.0, 0.0, 6.0);
    m3 *= m4;
    ok = ok && m3 == mat2(6.0, 12.0, 18.0, 24.0);
    mat2 m5 = mat2(m1[1].y);
    ok = ok && m5 == mat2(4.0, 0.0, 0.0, 4.0);
    m1 += m5;
    ok = ok && m1 == mat2(5.0, 2.0, 3.0, 8.0);
    mat2 m7 = mat2(5.0, 6.0, 7.0, 8.0);
    ok = ok && m7 == mat2(5.0, 6.0, 7.0, 8.0);
    mat3 m9 = mat3(9.0);
    ok = ok && m9 == mat3(9.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 9.0);
    mat4 m10 = mat4(11.0);
    ok = ok && m10 == mat4(11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0);
    mat4 m11 = mat4(20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0);
    m11 -= m10;
    ok = ok && m11 == mat4(9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0);
    return ok;
}
bool test_comma_b() {
    mat2 x;
    mat2 y;
    return ((x = mat2(1.0, 2.0, 3.0, 4.0), y = mat2(1.0, 2.0, 3.0, 4.0)), x == y);
}
vec4 main() {
    bool _0_ok = true;
    mat2 _1_m1 = mat2(1.0, 2.0, 3.0, 4.0);
    _0_ok = _0_ok && _1_m1 == mat2(1.0, 2.0, 3.0, 4.0);
    mat2 _2_m3 = _1_m1;
    _0_ok = _0_ok && _2_m3 == mat2(1.0, 2.0, 3.0, 4.0);
    mat2 _3_m4 = mat2(6.0);
    _0_ok = _0_ok && _3_m4 == mat2(6.0, 0.0, 0.0, 6.0);
    _2_m3 *= _3_m4;
    _0_ok = _0_ok && _2_m3 == mat2(6.0, 12.0, 18.0, 24.0);
    mat2 _4_m5 = mat2(_1_m1[1].y);
    _0_ok = _0_ok && _4_m5 == mat2(4.0, 0.0, 0.0, 4.0);
    _1_m1 += _4_m5;
    _0_ok = _0_ok && _1_m1 == mat2(5.0, 2.0, 3.0, 8.0);
    mat2 _5_m7 = mat2(5.0, 6.0, 7.0, 8.0);
    _0_ok = _0_ok && _5_m7 == mat2(5.0, 6.0, 7.0, 8.0);
    mat3 _6_m9 = mat3(9.0);
    _0_ok = _0_ok && _6_m9 == mat3(9.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 9.0);
    mat4 _7_m10 = mat4(11.0);
    _0_ok = _0_ok && _7_m10 == mat4(11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0);
    mat4 _8_m11 = mat4(20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0);
    _8_m11 -= _7_m10;
    _0_ok = _0_ok && _8_m11 == mat4(9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0);
    return (_0_ok && test_half_b()) && test_comma_b() ? colorGreen : colorRed;
}
