Use of .at() is probably excessive. assume that someone just checks the size upfront and doesn't try to read past the range