Final Version from PHPAcademy

Any further iterations are non-standard