Use snapshot eviline-core with XYShape.canonical() support