add protobuf support