uniform half4 colorGreen;

float this_function_is_prototyped_at_the_start_and_never_defined();
half4 this_function_is_defined_before_use(half4 x);
half4 this_function_is_defined_after_use(half4 x);
half4 this_function_is_defined_near_the_end(half4 x);

half4 this_function_is_defined_before_use(half4 x) {
    return -this_function_is_defined_near_the_end(x);
}

bool this_function_is_prototyped_in_the_middle_and_never_defined(float4x4 a);

half4 main(float2 coords) {
    return this_function_is_defined_after_use(colorGreen);
}

half4 this_function_is_defined_after_use(half4 x) {
    return this_function_is_defined_before_use(-x);
}

half4 this_function_is_defined_near_the_end(half4 x) {
    return x;
}

int3 this_function_is_prototyped_at_the_very_end_and_never_defined(half2x2 x, bool2 y);
