code: func (e *GT) Marshal() []byte {
  	// Each value is a 256-bit number.
  	const numBytes = 256 / 8
  
  	ret := make([]byte, numBytes*12)
  	temp := &gfP{}
  
  	montDecode(temp, &e.p.x.x.x)
  	temp.Marshal(ret)
  	montDecode(temp, &e.p.x.x.y)
  	temp.Marshal(ret[numBytes:])
  	montDecode(temp, &e.p.x.y.x)
  	temp.Marshal(ret[2*numBytes:])
  	montDecode(temp, &e.p.x.y.y)
  	temp.Marshal(ret[3*numBytes:])
  	montDecode(temp, &e.p.x.z.x)
  	temp.Marshal(ret[4*numBytes:])
  	montDecode(temp, &e.p.x.z.y)
  	temp.Marshal(ret[5*numBytes:])
  	montDecode(temp, &e.p.y.x.x)
  	temp.Marshal(ret[6*numBytes:])
  	montDecode(temp, &e.p.y.x.y)
  	temp.Marshal(ret[7*numBytes:])
  	montDecode(temp, &e.p.y.y.x)
  	temp.Marshal(ret[8*numBytes:])
  	montDecode(temp, &e.p.y.y.y)
  	temp.Marshal(ret[9*numBytes:])
  	montDecode(temp, &e.p.y.z.x)
  	temp.Marshal(ret[10*numBytes:])
  	montDecode(temp, &e.p.y.z.y)
  	temp.Marshal(ret[11*numBytes:])
  
  	return ret
  }
docs: // Marshal converts e into a byte slice.