Fixed bug in overlap elimination.

Added UT to reflect an example use case that should not have been
failing.
diff --git a/diffmatchpatch/dmp.go b/diffmatchpatch/dmp.go
index 0350978..2f5ba3d 100644
--- a/diffmatchpatch/dmp.go
+++ b/diffmatchpatch/dmp.go
@@ -967,7 +967,7 @@
 					float64(overlapLength2) >= float64(len(insertion))/2 {
 					// Reverse overlap found.
 					// Insert an equality and swap and trim the surrounding edits.
-					overlap := Diff{DiffEqual, insertion[overlapLength2:]}
+					overlap := Diff{DiffEqual, insertion[len(insertion)-overlapLength2:]}
 					diffs = append(
 						diffs[:pointer],
 						append([]Diff{overlap}, diffs[pointer:]...)...)
diff --git a/diffmatchpatch/dmp_test.go b/diffmatchpatch/dmp_test.go
index ee4766b..0b7cd5d 100644
--- a/diffmatchpatch/dmp_test.go
+++ b/diffmatchpatch/dmp_test.go
@@ -563,6 +563,29 @@
 		Diff{DiffEqual, "1234"},
 		Diff{DiffDelete, "wxyz"}}, diffs)
 
+	// No elimination #3.
+	diffs = []Diff{
+		Diff{DiffEqual, "2016-09-01T03:07:1"},
+		Diff{DiffInsert, "5.15"},
+		Diff{DiffEqual, "4"},
+		Diff{DiffDelete, "."},
+		Diff{DiffEqual, "80"},
+		Diff{DiffInsert, "0"},
+		Diff{DiffEqual, "78"},
+		Diff{DiffDelete, "3074"},
+		Diff{DiffEqual, "1Z"}}
+	diffs = dmp.DiffCleanupSemantic(diffs)
+	assertDiffEqual(t, []Diff{
+		Diff{DiffEqual, "2016-09-01T03:07:1"},
+		Diff{DiffInsert, "5.15"},
+		Diff{DiffEqual, "4"},
+		Diff{DiffDelete, "."},
+		Diff{DiffEqual, "80"},
+		Diff{DiffInsert, "0"},
+		Diff{DiffEqual, "78"},
+		Diff{DiffDelete, "3074"},
+		Diff{DiffEqual, "1Z"}}, diffs)
+
 	// Simple elimination.
 	diffs = []Diff{
 		Diff{DiffDelete, "a"},