anchor.diff:            () => new proto.Drawable(proto.particles(3.0, fillStyle : STYLE0, strokeStyle : STYLE1)),
             () => new Animatable()
               ..add(new Animation()
  -              ..onTick = (e, t, t0) {
  -                var ps = e.getComponent(Particles.CT);
  -                var ratio = (t - t0) / 10000;
  -                ps.l.forEach((p) {
  -                //Improvement cache ease.loop result
  -                // use t as ratio because periodicRatio will convert it 0..1
  -                  p.position3d.y += ease.inBounce(ratio, 30, 0);
  -                });
  -                return (ratio < 1.0);
  -              }
  +              ..onTick = () {
  +                //workaround use a closure to memorize initial state
  +                var ys0 = [];
  +                return (e, t, t0) {
  +                  var ps = e.getComponent(Particles.CT);
  +                  var ratio = (t - t0) / 10000;
  +                  if (t == t0) { // store in parent closure
  +                    // ps.l.map generate a MappedListIterable, with fixed size List I 'force' an optimzed List for call [i]
  +                    ys0 = new List(ps.l.length);
  +                    for( var i = ps.l.length - 1; i > -1; --i) {
  +                      ys0[i] = ps.l[i].position3d.y;
  +                    }
  +                  }
  +                  for( var i = ps.l.length - 1; i > -1; --i) {
  +                    //Improvement cache ease.loop result
  +                    // use t as ratio because periodicRatio will convert it 0..1
  +                    ps.l[i].position3d.y = ease.inBounce(ratio, 200, ys0[i]);
  +                  }
  +                  return (ratio < 1.0);
  +                };
  +              }()
                 ..onEnd = (e, t, t0) {
                   e.deleteFromWorld();
  -                return false;
                 }
               )
           ])),
  
positive.code:     addNewEntity(world, makeTireXY(new vec3(400.0, 50.0, 0.0), 70.0, 7, 0.1, 0.2).toList()..add(new proto.Drawable(defaultDraw)));
      addNewEntity(world, makeTireXY(new vec3(600.0, 50.0, 0.0), 70.0, 3, 1.0, 1.0).toList()..add(new proto.Drawable(defaultDraw)));
      return new Future.value(world);
    }
  };
  
  
negative.code:   _route(window.location.hash);
  }
  
  @observable
  var activeDemo = null;
  var activeCtrl = new Future.value(new Ctrl());
  void _route(String hash) {
    var k = (hash != null && hash.length < 2)? null : hash.substring(2);
    print("k :: ${k}");
  