Переписан преимущественно в функциональном стиле