anchor.diff:  class RouteEnterEvent extends RouteEvent {
   
     RouteEnterEvent(path, parameters, route)  : super(path, parameters, route);
  +
  +  RouteEnterEvent._fromMatch(_Match m)
  +      : this(m.urlMatch.match, m.urlMatch.parameters, m.route);
   }
   
   class RouteLeaveEvent extends RouteEvent {
  
positive.code:     return _leaveOldRoutes(startingFrom, treePath).then((bool allowed) {
        if (allowed) {
          var base = startingFrom;
          var tail;
          treePath.forEach((_Match matchedRoute) {
            tail = matchedRoute.urlMatch.tail;
            var event = new RouteEnterEvent(matchedRoute.urlMatch.match,
                matchedRoute.urlMatch.parameters, matchedRoute.route);
            _unsetAllCurrentRoutes(base);
            base._currentRoute = matchedRoute.route;
            base._currentRoute._lastEvent = event;
  
negative.code:     });
    }
  
    Map _joinParams(Map parameters, RouteEvent lastEvent) => lastEvent == null
        ? parameters
        : new Map.from(lastEvent.parameters)..addAll(parameters);
  
    String toString() =>  '[Route: $name]';
  
  