text:   // Defaults
    var noop = Rx.helpers.noop = function () { },
      identity = Rx.helpers.identity = function (x) { return x; },
      defaultNow = Rx.helpers.defaultNow = (function () { return !!Date.now ? Date.now : function () { return +new Date; }; }()),
      defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); },
      defaultSubComparer = Rx.helpers.defaultSubComparer = function (x, y) { return x > y ? 1 : (x < y ? -1 : 0); },
      defaultKeySerializer = Rx.helpers.defaultKeySerializer = function (x) { return x.toString(); },
      defaultError = Rx.helpers.defaultError = function (err) { throw err; },
      isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; },
      isFunction = Rx.helpers.isFunction = (function () {
        var isFn = function (value) {
          return typeof value == 'function' || false;
        };
  
        // fallback for older versions of Chrome and Safari
        if (isFn(/x/)) {
          isFn = function(value) {
            return typeof value == 'function' && toString.call(value) == '[object Function]';
          };
        }
        return isFn;
      }());
  
      function cloneArray(arr) {
        var len = arr.length, a = new Array(len);
        for(var i = 0; i < len; i++) { a[i] = arr[i]; }
        return a;
      }
  