See full description below.