тема тяжёлая, поэтому под катом.