translated by ggaaooppeenngg