Чуть подчистил, но оно еще не компилируется.