port to py3: supports py26 to py33
100% test coverage
merge