Extensible, Language-Aware Differencing and Merging by James J. Hunt