TODO: linear decoding