(function () {
  var random_count = 0;
  var random_count_threshold = 25;
  var random_seed = 0.462;
  Math.random = function() {
    random_count++;
    if (random_count > random_count_threshold){
     random_seed += 0.1;
     random_count = 1;
    }
    return (random_seed % 1);
  };
  if (typeof(crypto) == 'object' &&
      typeof(crypto.getRandomValues) == 'function') {
    crypto.getRandomValues = function(arr) {
      var scale = Math.pow(256, arr.BYTES_PER_ELEMENT);
      for (var i = 0; i < arr.length; i++) {
        arr[i] = Math.floor(Math.random() * scale);
      }
      return arr;
    };
  }
})();
(function () {
  var date_count = 0;
  var date_count_threshold = 25;
  var orig_date = Date;
  var time_seed = 1204251968254;
  Date = function() {
    if (this instanceof Date) {
      date_count++;
      if (date_count > date_count_threshold){
        time_seed += 50;
        date_count = 1;
      }
      switch (arguments.length) {
      case 0: return new orig_date(time_seed);
      case 1: return new orig_date(arguments[0]);
      default: return new orig_date(arguments[0], arguments[1],
         arguments.length >= 3 ? arguments[2] : 1,
         arguments.length >= 4 ? arguments[3] : 0,
         arguments.length >= 5 ? arguments[4] : 0,
         arguments.length >= 6 ? arguments[5] : 0,
         arguments.length >= 7 ? arguments[6] : 0);
      }
    }
    return new Date().toString();
  };
  Date.__proto__ = orig_date;
  Date.prototype = orig_date.prototype;
  Date.prototype.constructor = Date;
  orig_date.now = function() {
    return new Date().getTime();
  };
  orig_date.prototype.getTimezoneOffset = function() {
    var dst2010Start = 1268560800000;
    var dst2010End = 1289120400000;
    if (this.getTime() >= dst2010Start && this.getTime() < dst2010End)
      return 420;
    return 480;
  };
})();
