Отрефакторил немного код, должно работать чуть быстрее и в принципе выглядит попонятнее. Комментарии счёл излишними.