Здесь уже есть куча лучших вариантов. Но я хотел сам попробовать это сделать. Довольно горд тем, как это получилось.