Nie jest to chyba wersja ostateczna, ale nie zauważyłem żadnego znaczącego błędu.