Wow, thank you so much @Sigurd!
So if I'm reading your code right, it seems all Adobe did in the new Liquify file format is to scale down mesh width and height by a factor 4 (each) and implemented a simple compression scheme that skips consecutive zero displacement vectors at the start and end of each line. And to compensate for the lower mesh resolution, displacements are stored as double precision floats instead of single precision. Is that correct?
Do you know what width2, height2, width3 and height3 represent? They seem unused in your code.
Would you like to share what competing app you're developing? Looks like Javascript so I'm guessing a web app.
Great work and thanks again for sharing!