code: func (d *Decoder) DecodeOpaque() ([]byte, int, error) {
  	dataLen, n, err := d.DecodeUint()
  	if err != nil {
  		return nil, n, err
  	}
  	if uint(dataLen) > uint(math.MaxInt32) ||
  		(d.maxReadSize != 0 && uint(dataLen) > d.maxReadSize) {
  		err := unmarshalError("DecodeOpaque", ErrOverflow, errMaxSlice,
  			dataLen, nil)
  		return nil, n, err
  	}
  
  	rv, n2, err := d.DecodeFixedOpaque(int32(dataLen))
  	n += n2
  	if err != nil {
  		return nil, n, err
  	}
  	return rv, n, nil
  }
docs: // DecodeOpaque treats the next bytes as variable length XDR encoded opaque
  // data and returns the result as a byte slice along with the number of bytes
  // actually read.
  //
  // An UnmarshalError is returned if there are insufficient bytes remaining or
  // the opaque data is larger than the max length of a Go slice.
  //
  // Reference:
  // 	RFC Section 4.10 - Variable-Length Opaque Data
  // 	Unsigned integer length followed by fixed opaque data of that length