Copyright (c) 2013 James Halliday Copyright (c) 2017 Evgeny Poberezkin