                Date.now.bind(Date);
    return {
      onInvokeTask: function (delegate, current, target, task, applyThis, applyArgs) {
        this.start = timer();
        delegate.invokeTask(target, task, applyThis, applyArgs);
        time += timer() - this.start;
      },
      time: function () {
        return Math.floor(time*100) / 100 + 'ms';
      },
      reset: function () {
        time = 0;
      }
    };
  }());


  /*
   * Bootstrap the app
   */
  Zone.current.fork(profilingZoneSpec).run(m