code: func (r *ForwardRecorder) Write(data []byte) (int, error) {
  	// we are copying buffer to prevent data corruption:
  	// io.Copy allocates single buffer and calls multiple writes in a loop
  	// our PostSessionSlice is async and sends reader wrapping buffer
  	// to the channel. This can lead to cases when the buffer is re-used
  	// and data is corrupted unless we copy the data buffer in the first place
  	dataCopy := make([]byte, len(data))
  	copy(dataCopy, data)
  	// post the chunk of bytes to the audit log:
  	chunk := &SessionChunk{
  		EventType: SessionPrintEvent,
  		Data:      dataCopy,
  		Time:      time.Now().UTC().UnixNano(),
  	}
  	if err := r.AuditLog.PostSessionSlice(SessionSlice{
  		Namespace: r.Namespace,
  		SessionID: string(r.SessionID),
  		Chunks:    []*SessionChunk{chunk},
  	}); err != nil {
  		r.Error(trace.DebugReport(err))
  	}
  	return len(data), nil
  }
docs: // Write takes a chunk and writes it into the audit log