Apologies for the wall of text.