#ifndef SHITTIFY_H
#define SHITTIFY_H



void shittify(vo *X){
	vo T[16] = {X[4], X[9], X[14], X[3], X[8], X[13], X[2], X[7], X[12], X[1], X[6], X[11], X[0], X[5], X[10], X[15]};

	for(i=0; i<16; i++)
		X[i] = EndianSwapa(T[i]);

    T[0] = X[20]
    T[1] = X[25]
    T[2] = X[30]
    T[3] = X[19]
    T[4] = X[24]
    T[5] = X[29]
    T[6] = X[18]
    T[7] = X[23]
    T[8] = X[28]
    T[9] = X[17]
    T[10] = X[22]
    T[11] = X[27]
    T[12] = X[16]
    T[13] = X[21]
    T[14] = X[26]
    T[15] = X[31]

	for(i=0; i<16; i++)
		X[i+16] = EndianSwapa(T[i]);
}

void unshittify(vo *X){
    vo T[16] = {X[12], X[9], X[6], X[3], X[0], X[13], X[10], X[7], X[4], X[1], X[14], X[11], X[8], X[5], X[2], X[15]};

    for(i=0; i<16; i++)
        X[i] = EndianSwapa(T[i]);

    T[0] = X[28]
    T[1] = X[25]
    T[2] = X[22]
    T[3] = X[19]
    T[4] = X[16]
    T[5] = X[29]
    T[6] = X[26]
    T[7] = X[23]
    T[8] = X[20]
    T[9] = X[17]
    T[10] = X[30]
    T[11] = X[27]
    T[12] = X[24]
    T[13] = X[21]
    T[14] = X[18]
    T[15] = X[31]

    for(i=0; i<16; i++)
        X[i+16] = EndianSwapa(T[i]);
}


/*

{X[12], X[9], X[6], X[3], X[0], X[13], X[10], X[7], X[4], X[1], X[14], X[11], X[8], X[5], X[2], X[15]};
X[28], X[25], X[22], X[19], X[16], X[29], X[26], X[23], X[20], X[17], X[30], X[27], X[24], X[21], X[18], X[31]

    tmp[0] = (uint4)(X[12], X[9], X[6], X[3]);
    tmp[1] = (uint4)(X[0], X[13], X[10], X[7]);
    tmp[2] = (uint4)(X[4], X[1], X[14], X[11]);
    tmp[3] = (uint4)(X[8], X[5], X[2], X[15]);

    X[0] = EndianSwapa(tmp[0]);
    X[1] = EndianSwapb(tmp[1]);
    X[2] = EndianSwapb(tmp[2]);
    X[3] = EndianSwapb(tmp[3]);

    tmp[0] = (uint4)(X[28], X[25], X[22], X[19]);
    tmp[1] = (uint4)(X[16], X[29], X[26], X[23]);
    tmp[2] = (uint4)(X[20], X[17], X[30], X[27]);
    tmp[3] = (uint4)(X[24], X[21], X[18], X[31]);

    X[4] = EndianSwapa(tmp[0]);
    X[5] = EndianSwapb(tmp[1]);
    X[6] = EndianSwapb(tmp[2]);
    X[7] = EndianSwapb(tmp[3]);

;
	vo T00 = X[4]
	vo T01 = X[9]
	vo T02 = X[14]
	vo T03 = X[3]
	vo T04 = X[8]
	vo T05 = X[13]
	vo T06 = X[2]
	vo T07 = X[7]
	vo T08 = X[12]
	vo T09 = X[1]
	vo T10 = X[6]
	vo T11 = X[11]
	vo T12 = X[0]
	vo T13 = X[5]
	vo T14 = X[10]
	vo T15 = X[15]

	

	X[0] = EndianSwapa(T00);
	X[1] = EndianSwapa(T01);
	X[2] = EndianSwapa(T02);
	X[3] = EndianSwapa(T03);
	X[4] = EndianSwapa(T04);
	X[5] = EndianSwapa(T05);
	X[6] = EndianSwapa(T06);
	X[7] = EndianSwapa(T07);
	X[8] = EndianSwapa(T08);
	X[9] = EndianSwapa(T09);
	X[10] = EndianSwapa(T10);
	X[11] = EndianSwapa(T11);
	X[12] = EndianSwapa(T12);
	X[13] = EndianSwapa(T13);
	X[14] = EndianSwapa(T14);
	X[15] = EndianSwapa(T15);

	T00 = X[20]
	T01 = X[25]
	T02 = X[30]
	T03 = X[19]
	T04 = X[24]
	T05 = X[29]
	T06 = X[18]
	T07 = X[23]
	T08 = X[28]
	T09 = X[17]
	T10 = X[22]
	T11 = X[27]
	T12 = X[16]
	T13 = X[21]
	T14 = X[26]
	T15 = X[31]

	X[16] = EndianSwapa(T00);
	X[17] = EndianSwapa(T01);
	X[18] = EndianSwapa(T02);
	X[19] = EndianSwapa(T03);
	X[20] = EndianSwapa(T04);
	X[21] = EndianSwapa(T05);
	X[22] = EndianSwapa(T06);
	X[23] = EndianSwapa(T07);
	X[24] = EndianSwapa(T08);
	X[25] = EndianSwapa(T09);
	X[26] = EndianSwapa(T10);
	X[27] = EndianSwapa(T11);
	X[28] = EndianSwapa(T12);
	X[29] = EndianSwapa(T13);
	X[30] = EndianSwapa(T14);
	X[31] = EndianSwapa(T15);

}
*/


#endif