anchor.diff:    void _setupController() {
       _controller = new StreamController<List<int>>(sync: true,
           onListen: _start,
  -        onPause: () => _paused = true,
  -        onResume: _resume,
  +        onResume: _readBlock,
           onCancel: () {
             _unsubscribed = true;
             return _closeFile();
  
positive.code:   }
  
    void _start() {
      if (_position == null) {
        _position = 0;
      } else if (_position < 0) {
        _controller.addError(new RangeError("Bad start position: $_position"));
        _controller.close();
        return;
      }
      Future<RandomAccessFile> openFuture;
      if (_path != null) {
        openFuture = new File(_path).open(mode: FileMode.READ);
      } else {
        openFuture = new Future.value(_File._openStdioSync(0));
      }
      _readInProgress = true;
      openFuture
        .then((RandomAccessFile opened) {
          _openedFile = opened;
          if (_position > 0) {
            return opened.setPosition(_position);
          }
        })
        .whenComplete(() {
          _readInProgress = false;
        })
        .then((_) => _readBlock())
        .catchError((e) {
          _controller.addError(e);
          _closeFile();
        });
    }
  
    void _resume() {
      _paused = false;
      if (_currentBlock != null) {
        _controller.add(_currentBlock);
        _currentBlock = null;
      }
      // Resume reading unless we are already done.
      if (_openedFile != null) _readBlock();
    }
  }
  
  
negative.code:       }
      }
      _openedFile.read(readBytes)
        .then((block) {
          if (_unsubscribed) {
            _closeFile();
            return;
          }
          _readInProgress = false;
          _position += block.length;
          if (block.length < readBytes ||
              (_end != null && _position == _end)) {
            _atEnd = true;
          }
          _controller.add(block);
          if (!_controller.isPaused) {
            _readBlock();
          }
        })
        .catchError((e, s) {
          if (!_unsubscribed) {
            _controller.addError(e, s);
            _closeFile();
            _unsubscribed = true;
          }
  