(function(extensions){	for(var p in extensions) Function.prototype[p] = extensions[p];}({	a : function(){		var args = Array.from(arguments);		var obj = args.shift();		var self = this;		return function(){			return self.apply(obj, args);		}	},	c : function(){		return this.a.apply(this, arguments); //might need to pass Array.from(arguments)	},	later: function(ms){		var self = this;		var f = function(){ 			clearInterval(f.intervalID);			return self();		}		f.intervalID = setInterval(f, ms || setInterval.defaultInterval);		return f;	},	until: function(condition, ms){		var self = this;		var f = function(){			var r = self();			r = isFunction(condition) ? condition(r) : r == condition;			if (r == true) clearInterval(f.intervalID);		}		f.intervalID = setInterval(f, ms || setInterval.defaultInterval);		return f;	},	when: function(condition, ms){		var self = this;		var f = function(){			if(condition() != true) return;			clearInterval(f.intervalID);			return self();		}		f.intervalID = setInterval(f, ms || setInterval.defaultInterval);	}}));Array.from = function(iterable) {	if (!iterable) return [];	if (iterable.toArray) {		return iterable.toArray();	} else {		var results = [];		for (var i = 0; i < iterable.length; i++)			results.push(iterable[i]);		return results;	}}
