Initial version. Yes, this is a bunch of code. No, I don't feel like explaining everything I did in the commit message, it's 1AM, I just had some blue nachos and two beers, I'm listening to AC/DC at an unhealthy volume and I'm feeling rebellious.