     lessThan: Comparator
     ) -> Index
   {
-    if count == 0 {
-      return 0
+    guard count > 0 else {
+      return self.startIndex
     }
 
-    var lo = self.startIndex
-    var hi = self.endIndex
-    var mid: Index = 0
+    var lo: Index = self.startIndex
+    var hi: Index = self.endIndex
+    var mid: Index = self.startIndex
 
     while lo < hi {
       mid = (hi - lo) / 2 + lo

    var hi = self.endIndex
    var best: Index?

    while lo <= hi { // vip!
      let mid = (hi - lo) / 2 + lo

      if mid >= count {

  where
  Iterator.Element: Comparable,
  Iterator.Element: Equatable,
  IndexDistance == Index,
  Index: SignedInteger
{
  typealias Comparator = (Self.Iterator.Element) -> Bool

