You seem to use these long typenames a lot. You should consider introducing typedefs for the most uesd ones for readability.