Переписано с использованием ООП