there's still a few more errors but I'm lazy, hah. I may check it again and fix later