Encoder(Not finished)