By Dylan

Не хватает модульности, но в остальном всё хорошо.