根据googlecode上源码修改而成