Author: Duoyan.