#define pi 3.14159
#define time iTime*1.
#define deg pi/180.

mat2 r2d(float a) {
    return mat2(cos(a),sin(a),-sin(a),cos(a));
}


void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
    vec2 uv = fragCoord.xy / iResolution.xy;
    vec2 tv = uv;
    vec2 R = iResolution.xy;
    float ar = R.x/R.y;
    uv -= 0.5;
    uv.x *= ar;
    vec2 ov = uv;
    vec3 col = vec3(uv,0.);
    float b = max(abs(ov.x),abs(ov.y));
    float r = (sin(time*0.25)*0.5+0.5)*100.;
    b = floor(b*r)*0.4;
    //for (int i=0;i<3;i++) {
        //b = step(-b,-0.45)+0.01;
    //}
    float c = length(uv);
    uv *= r2d(-time/4.-c*0.7+1.+(b));
    uv.x += uv.y;
    uv *= r2d(time/4.+c*0.7);
    float m = 2.;
    for (int i=0;i<8;i++) {
        col += sin(uv.x*700.)*sin(uv.y*8.+time)*m;
        col += sin(uv.x*501.-time*10.+uv.y*600.)*sin(uv.y*2.+time)*m;
        uv *= r2d(pi+ov.y*0.001-time*0.001+c*0.01);
        uv *= 0.75;
        //uv *= sin(ov.y*pi*2.+time/5.)*0.5+0.5;
        m *= sin(time*1.+ov.x*pi);
        col = sin(col+0.5+ov.y*pi+time+ov.x*5.);
        //m *= sin(uv.x*pi*2.-time/5.)*0.5+0.5;
    }
    col.rb *= r2d(time+uv.y*3.);
    col.gb *= r2d(time+ov.x);
    col = sin(col+time+uv.x*32.)*0.5+0.5;
    col *= 1.5;
    col -= 0.5;
    //col *= 0.1;
    //col += 
    fragColor = vec4(col,1.0);
}
