anchor.diff:      else
         let mutable entered = false
         try
  -        entered <- enterWriteLockIf &this.locker this.isSynchronized
  +        try ()
  +        finally
  +          entered <- enterWriteLockIf &this.locker this.isSynchronized
  +          if entered then Interlocked.Increment(&this.nextVersion) |> ignore
  +
           match option with
           | AppendOption.ThrowOnOverlap _ ->
  -          if this.IsEmpty || comparer.Compare(appendMap.First.Key, this.Last.Key) > 0 then
  +          if outerMap.IsEmpty || comparer.Compare(appendMap.First.Key, this.LastUnsafe.Key) > 0 then
               let mutable c = 0
               for i in appendMap do
                 c <- c + 1
  
positive.code:       removed
      finally
        if removed && this.subscribersCounter > 0 then this.onUpdateEvent.Trigger(false)
        if removed then Interlocked.Increment(&this.version) |> ignore else Interlocked.Decrement(&this.nextVersion) |> ignore
        exitWriteLockIf &this.locker entered
        #if PRERELEASE
        if entered && this.version <> this.nextVersion then raise (ApplicationException("this.orderVersion <> this.nextVersion"))
        #else
        if entered && this.version <> this.nextVersion then Environment.FailFast("this.orderVersion <> this.nextVersion")
  
negative.code:         if entered && this.version <> this.nextVersion then Environment.FailFast("this.orderVersion <> this.nextVersion")
          #endif
  
    
    member private this.FirstUnsafe
      with get() = 
        if outerMap.IsEmpty then 
          raise (InvalidOperationException("Could not get the first element of an empty map"))
        let bucket = outerMap.First
        bucket.Value.First
        
    member this.First
      with get() = 
        readLockIf &this.nextVersion &this.version this.isSynchronized (fun _ -> this.FirstUnsafe)
  
    member private this.LastUnsafe
      with get() = 
        if outerMap.IsEmpty then raise (InvalidOperationException("Could not get the first element of an empty map"))
        let bucket = outerMap.Last
        bucket.Value.Last
        
    member this.Last
      with get() = 
        readLockIf &this.nextVersion &this.version this.isSynchronized (fun _ -> this.LastUnsafe )
  
    member private this.FlushUnchecked() =
      prevBucket.SetTarget (null)
  