Damn this is pretty long