Author: Tang Ruiyuan.