Финальная версия.
Поправлен баг в логике.