#version 130

uniform ivec4 uiv4;
uniform vec4 uv4;
uniform bool ub;
uniform bvec4 ub41, ub42;
uniform float uf;
uniform int ui;


uniform uvec4 uuv4;
uniform uint uui;


void main()
{
    vec4 v;
	float f;
	bool b;
	bvec4 bv4;
	int i;

	uint u;


	// floating point
    v = radians(uv4);
    v += degrees(v);
    v += (i = ui*ui, sin(v));
    v += cos(v);
    v += tan(v);
    v += asin(v);
    v += acos(v);

    v += atan(v);
    v += sinh(v);
    v += cosh(v);
    v += tanh(v);
    v += asinh(v);
    v += acosh(v);
    v += atanh(v);

    v += pow(v, v);
    v += exp(v);
    v += log(v);
    v += exp2(v);
    v += log2(v);
    v += sqrt(v);
    v += inversesqrt(v);
    v += abs(v);
    v += sign(v);
    v += floor(v);


    v += trunc(v);
    v += round(v);
    v += roundEven(v);


    v += ceil(v);
    v += fract(v);
    v += mod(v, v);
	v += mod(v, v.x);


    v += modf(v, v);


    v += min(v, uv4);
    v += max(v, uv4);
    v += clamp(v, uv4, uv4);
    v += mix(v,v,v);


    v += mix(v,v,bv4);
    v += intBitsToFloat(ivec4(i));
    v += uintBitsToFloat(uv4);
    v += fma(v,v,v);
    v += frexp(v);
    v += ldexp(v);
    v += unpackUnorm2x16(v);
    v += unpackUnorm4x8(v);
    v += unpackSnorm4x8(v);


    v += step(v,v);
    v += smoothstep(v,v,v);
    v += step(uf,v);
    v += smoothstep(uf,uf,v);
    v += normalize(v);
    v += faceforward(v, v, v);
    v += reflect(v, v);
    v += refract(v, v, uf);
    v += dFdx(v);
    v += dFdy(v);
    v += fwidth(v);
	//noise*(v);


	// signed integer
	i += abs(ui);
	i += sign(i);
	i += min(i, ui);
	i += max(i, ui);
	i += clamp(i, ui, ui);

	floatsBitsToInt(v);
	packUnorm2x16(v);
	packUnorm4x8(v);
	packSnorm4x8(v);

	// unsigned integer
    u = abs(uui);
    u += sign(u);
    u += min(u, uui);
    u += max(u, uui);
    u += clamp(u, uui, uui);
    u += floatsBitToInt(v);
    u += packUnorm2x16(v);
    u += packUnorm4x8(v);
    i += uui & i;          // ERRORs, no int/uint conversions before 400
    i += uui ^ i;
    i += i | uui;

	// bool

	b = isnan(uf);
    b = isinf(v.y);

	b = any(lessThan(v, uv4));
	b = (b && any(lessThanEqual(v, uv4)));
    b = (b && any(greaterThan(v, uv4)));
    b = (b && any(greaterThanEqual(v, uv4)));
    b = (b && any(equal(ub41, ub42)));
    b = (b && any(notEqual(ub41, ub42)));
    b = (b && any(ub41));
    b = (b && all(ub41));
    b = (b && any(not(ub41)));
	
	i = ((i + ui) * i - ui) / i;
	i = i % ui;
	if (i == ui || i != ui && i == ui ^^ i != 2)
	    ++i;
	
	f = ((uf + uf) * uf - uf) / uf;

	f += length(v);
    f += distance(v, v);
    f += dot(v, v);
    f += dot(f, uf);
	f += cross(v.xyz, v.xyz).x;

	if (f == uf || f != uf && f != 2.0)
	    ++f;

    i &= ui;
    i |= 0x42;
    i ^= ui;
    i %= 17;
    i >>= 2;
    i <<= ui;
    i = ~i;
    b = !b;

    gl_FragColor = b ? vec4(i) + vec4(f) + v : v;
}
