https://viku.me/notes/patch-diff/