aboutsummaryrefslogtreecommitdiff
path: root/node_modules/utila/scripts/js/lib/classic.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/utila/scripts/js/lib/classic.js')
-rw-r--r--node_modules/utila/scripts/js/lib/classic.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/node_modules/utila/scripts/js/lib/classic.js b/node_modules/utila/scripts/js/lib/classic.js
new file mode 100644
index 000000000..3de0c290f
--- /dev/null
+++ b/node_modules/utila/scripts/js/lib/classic.js
@@ -0,0 +1,87 @@
+var classic,
+ __slice = [].slice;
+
+module.exports = classic = {};
+
+classic.implement = function() {
+ var classProto, classReference, desc, member, mixin, mixins, _i, _j, _len;
+ mixins = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), classReference = arguments[_i++];
+ for (_j = 0, _len = mixins.length; _j < _len; _j++) {
+ mixin = mixins[_j];
+ classProto = classReference.prototype;
+ for (member in mixin.prototype) {
+ if (!Object.getOwnPropertyDescriptor(classProto, member)) {
+ desc = Object.getOwnPropertyDescriptor(mixin.prototype, member);
+ Object.defineProperty(classProto, member, desc);
+ }
+ }
+ }
+ return classReference;
+};
+
+classic.mix = function() {
+ var classProto, classReference, desc, member, mixin, mixins, _i, _j, _len;
+ mixins = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), classReference = arguments[_i++];
+ classProto = classReference.prototype;
+ classReference.__mixinCloners = [];
+ classReference.__applyClonersFor = function(instance, args) {
+ var cloner, _j, _len, _ref;
+ if (args == null) {
+ args = null;
+ }
+ _ref = classReference.__mixinCloners;
+ for (_j = 0, _len = _ref.length; _j < _len; _j++) {
+ cloner = _ref[_j];
+ cloner.apply(instance, args);
+ }
+ };
+ classReference.__mixinInitializers = [];
+ classReference.__initMixinsFor = function(instance, args) {
+ var initializer, _j, _len, _ref;
+ if (args == null) {
+ args = null;
+ }
+ _ref = classReference.__mixinInitializers;
+ for (_j = 0, _len = _ref.length; _j < _len; _j++) {
+ initializer = _ref[_j];
+ initializer.apply(instance, args);
+ }
+ };
+ classReference.__mixinQuitters = [];
+ classReference.__applyQuittersFor = function(instance, args) {
+ var quitter, _j, _len, _ref;
+ if (args == null) {
+ args = null;
+ }
+ _ref = classReference.__mixinQuitters;
+ for (_j = 0, _len = _ref.length; _j < _len; _j++) {
+ quitter = _ref[_j];
+ quitter.apply(instance, args);
+ }
+ };
+ for (_j = 0, _len = mixins.length; _j < _len; _j++) {
+ mixin = mixins[_j];
+ if (!(mixin.constructor instanceof Function)) {
+ throw Error("Mixin should be a function");
+ }
+ for (member in mixin.prototype) {
+ if (member.substr(0, 11) === '__initMixin') {
+ classReference.__mixinInitializers.push(mixin.prototype[member]);
+ continue;
+ } else if (member.substr(0, 11) === '__clonerFor') {
+ classReference.__mixinCloners.push(mixin.prototype[member]);
+ continue;
+ } else if (member.substr(0, 12) === '__quitterFor') {
+ classReference.__mixinQuitters.push(mixin.prototype[member]);
+ continue;
+ }
+ if (!Object.getOwnPropertyDescriptor(classProto, member)) {
+ desc = Object.getOwnPropertyDescriptor(mixin.prototype, member);
+ Object.defineProperty(classProto, member, desc);
+ }
+ }
+ }
+ return classReference;
+};
+
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpYy5qcyIsInNvdXJjZVJvb3QiOiIuLlxcLi4iLCJzb3VyY2VzIjpbImNvZmZlZVxcbGliXFxjbGFzc2ljLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFBLE9BQUE7RUFBQSxrQkFBQTs7QUNBQSxNQ0FNLENDQUMsT0NBUCxHQ0FpQixPQ0FBLEdDQVUsRUFBM0IsQ0FBQTs7QUNJQSxPQ0FPLENDQUMsU0NBUixHQ0FvQixTQ0FBLEdDQUE7QUNFbkIsTUNBQSxxRUNBQTtBQ0FBLEVDRm9CLHVHQ0FXLGdDQ0UvQixDQ0FBO0FDQUEsT0NBQSw2Q0NBQTt1QkNBQTtBQ0VDLElDQUEsVUNBQSxHQ0FhLGNDQWMsQ0NBQSxTQ0EzQixDQ0FBO0FDRUEsU0NBQSx5QkNBQSxHQ0FBO0FDRUMsTUNBQSxJQ0FBLENDQU8sTUNBTSxDQ0FDLHdCQ0FQLENDQWdDLFVDQWhDLEVDQTRDLE1DQTVDLENDQVA7QUNFQyxRQ0FBLElDQUEsR0NBTyxNQ0FNLENDQUMsd0JDQVAsQ0NBZ0MsS0NBSyxDQ0FBLFNDQXJDLEVDQXlDLE1DQXpDLENDQVAsQ0NBQTtBQ0FBLFFDRUEsTUNBTSxDQ0FDLGNDQVAsQ0NBc0IsVUNBdEIsRUNBa0MsTUNBbEMsRUNBMEMsSUNBMUMsQ0NGQSxDQ0ZEO09DRkQ7QUNBQSxLQ0pEO0FDQUEsR0NBQTtTQ1lBLGVDZG1CO0FDQUEsQ0FKcEIsQ0FBQTs7QUNvQkEsT0NBTyxDQ0FDLEdDQVIsR0NBYyxTQ0FBLEdDQUE7QUNFYixNQ0FBLHFFQ0FBO0FDQUEsRUNGYyx1R0NBVyxnQ0NFekIsQ0NBQTtBQ0FBLEVDQUEsVUNBQSxHQ0FhLGNDQWMsQ0NBQSxTQ0EzQixDQ0FBO0FDQUEsRUNFQSxjQ0FjLENDQUMsY0NBZixHQ0FnQyxFQ0ZoQyxDQ0FBO0FDQUEsRUNJQSxjQ0FjLENDQUMsaUJDQWYsR0NBbUMsU0NBQyxRQ0FELEVDQVcsSUNBWCxHQ0FBO0FDRWxDLFFDQUEsc0JDQUE7O01DRjZDLE9DQU87S0NFcEQ7QUNBQTtBQ0FBLFNDQUEsMkNDQUE7d0JDQUE7QUNFQyxNQ0FBLE1DQU0sQ0NBQyxLQ0FQLENDQWEsUUNBYixFQ0F1QixJQ0F2QixDQ0FBLENDRkQ7QUNBQSxLQ0ZrQztFQ0FBLENDSm5DLENDQUE7QUNBQSxFQ1lBLGNDQWMsQ0NBQyxtQkNBZixHQ0FxQyxFQ1pyQyxDQ0FBO0FDQUEsRUNjQSxjQ0FjLENDQUMsZUNBZixHQ0FpQyxTQ0FDLFFDQUQsRUNBVyxJQ0FYLEdDQUE7QUNFaEMsUUNBQSwyQkNBQTs7TUNGMkMsT0NBTztLQ0VsRDtBQ0FBO0FDQUEsU0NBQSwyQ0NBQTs2QkNBQTtBQ0VDLE1DQUEsV0NBVyxDQ0FDLEtDQVosQ0NBa0IsUUNBbEIsRUNBNEIsSUNBNUIsQ0NBQSxDQ0ZEO0FDQUEsS0NGZ0M7RUNBQSxDQ2RqQyxDQ0FBO0FDQUEsRUNzQkEsY0NBYyxDQ0FDLGVDQWYsR0NBaUMsRUN0QmpDLENDQUE7QUNBQSxFQ3dCQSxjQ0FjLENDQUMsa0JDQWYsR0NBb0MsU0NBQyxRQ0FELEVDQVcsSUNBWCxHQ0FBO0FDRW5DLFFDQUEsdUJDQUE7O01DRjhDLE9DQU87S0NFckQ7QUNBQTtBQ0FBLFNDQUEsMkNDQUE7eUJDQUE7QUNFQyxNQ0FBLE9DQU8sQ0NBQyxLQ0FSLENDQWMsUUNBZCxFQ0F3QixJQ0F4QixDQ0FBLENDRkQ7QUNBQSxLQ0ZtQztFQ0FBLENDeEJwQyxDQ0FBO0FDZ0NBLE9DQUEsNkNDQUE7dUJDQUE7QUNFQyxJQ0FBLElDQUEsQ0NBQSxDQ0FPLEtDQUssQ0NBQyxXQ0FOLFlDQTZCLFFDQXBDLENDQUE7QUNFQyxZQ0FNLEtDQUEsQ0NBTSw0QkNBTixDQ0FOLENDRkQ7S0NBQTtBQ0lBLFNDQUEseUJDQUEsR0NBQTtBQ0VDLE1DQUEsSUNBRyxNQ0FNLENDQUMsTUNBUCxDQ0FjLENDQWQsRUNBaUIsRUNBakIsQ0NBQSxLQ0F3QixhQ0EzQjtBQ0VDLFFDQUEsY0NBYyxDQ0FDLG1CQ0FtQixDQ0FDLElDQW5DLENDQXdDLEtDQUssQ0NBQSxTQ0FHLENDQUEsTUNBQSxDQ0FoRCxDQ0FBLENDQUE7QUNFQSxpQkNKRDtPQ0FBLE1DTUssSUNBRyxNQ0FNLENDQUMsTUNBUCxDQ0FjLENDQWQsRUNBaUIsRUNBakIsQ0NBQSxLQ0F3QixhQ0EzQjtBQ0VKLFFDQUEsY0NBYyxDQ0FDLGNDQWMsQ0NBQyxJQ0E5QixDQ0FtQyxLQ0FLLENDQUEsU0NBRyxDQ0FBLE1DQUEsQ0NBM0MsQ0NBQSxDQ0FBO0FDRUEsaUJDSkk7T0NBQSxNQ01BLElDQUcsTUNBTSxDQ0FDLE1DQVAsQ0NBYyxDQ0FkLEVDQWlCLEVDQWpCLENDQUEsS0NBd0IsY0NBM0I7QUNFSixRQ0FBLGNDQWMsQ0NBQyxlQ0FlLENDQUMsSUNBL0IsQ0NBb0MsS0NBSyxDQ0FBLFNDQUcsQ0NBQSxNQ0FBLENDQTVDLENDQUEsQ0NBQTtBQ0VBLGlCQ0pJO09DWkw7QUNrQkEsTUNBQSxJQ0FBLENDQU8sTUNBTSxDQ0FDLHdCQ0FQLENDQWdDLFVDQWhDLEVDQTRDLE1DQTVDLENDQVA7QUNFQyxRQ0FBLElDQUEsR0NBTyxNQ0FNLENDQUMsd0JDQVAsQ0NBZ0MsS0NBSyxDQ0FBLFNDQXJDLEVDQXlDLE1DQXpDLENDQVAsQ0NBQTtBQ0FBLFFDRUEsTUNBTSxDQ0FDLGNDQVAsQ0NBc0IsVUNBdEIsRUNBa0MsTUNBbEMsRUNBMEMsSUNBMUMsQ0NGQSxDQ0ZEO09DcEJEO0FDQUEsS0NORDtBQ0FBLEdDaENBO1NDZ0VBLGVDbEVhO0FDQUEsQ0FwQmQsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXJyYXkgPVxuXG5cdCMjI1xuXHRUcmllcyB0byB0dXJuIGFueXRoaW5nIGludG8gYW4gYXJyYXkuXG5cdCMjI1xuXHRmcm9tOiAocikgLT5cblxuXHRcdEFycmF5OjpzbGljZS5jYWxsIHJcblxuXHQjIyNcblx0Q2xvbmUgb2YgYW4gYXJyYXkuIFByb3BlcnRpZXMgd2lsbCBiZSBzaGFsbG93IGNvcGllcy5cblx0IyMjXG5cdHNpbXBsZUNsb25lOiAoYSkgLT5cblxuXHRcdGEuc2xpY2UgMFxuXG5cdHNoYWxsb3dFcXVhbDogKGExLCBhMikgLT5cblxuXHRcdHJldHVybiBubyB1bmxlc3MgQXJyYXkuaXNBcnJheShhMSkgYW5kIEFycmF5LmlzQXJyYXkoYTIpIGFuZCBhMS5sZW5ndGggaXMgYTIubGVuZ3RoXG5cblx0XHRmb3IgdmFsLCBpIGluIGExXG5cblx0XHRcdHJldHVybiBubyB1bmxlc3MgYTJbaV0gaXMgdmFsXG5cblx0XHR5ZXNcblxuXHRwbHVjazogKGEsIGkpIC0+XG5cblx0XHRyZXR1cm4gYSBpZiBhLmxlbmd0aCA8IDFcblxuXG5cdFx0Zm9yIHZhbHVlLCBpbmRleCBpbiBhXG5cblx0XHRcdGlmIGluZGV4ID4gaVxuXG5cdFx0XHRcdGFbaW5kZXggLSAxXSA9IGFbaW5kZXhdXG5cblx0XHRhLmxlbmd0aCA9IGEubGVuZ3RoIC0gMVxuXG5cdFx0YVxuXG5cdHBsdWNrSXRlbTogKGEsIGl0ZW0pIC0+XG5cblx0XHRyZXR1cm4gYSBpZiBhLmxlbmd0aCA8IDFcblxuXG5cdFx0cmVtb3ZlZCA9IDBcblxuXHRcdGZvciB2YWx1ZSwgaW5kZXggaW4gYVxuXG5cdFx0XHRpZiB2YWx1ZSBpcyBpdGVtXG5cblx0XHRcdFx0cmVtb3ZlZCsrXG5cblx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0aWYgcmVtb3ZlZCBpc250IDBcblxuXHRcdFx0XHRhW2luZGV4IC0gcmVtb3ZlZF0gPSBhW2luZGV4XVxuXG5cdFx0YS5sZW5ndGggPSBhLmxlbmd0aCAtIHJlbW92ZWQgaWYgcmVtb3ZlZCA+IDBcblxuXHRcdGFcblxuXHRwbHVja09uZUl0ZW06IChhLCBpdGVtKSAtPlxuXG5cdFx0cmV0dXJuIGEgaWYgYS5sZW5ndGggPCAxXG5cblx0XHRyZWFjaGVkID0gbm9cblxuXHRcdGZvciB2YWx1ZSwgaW5kZXggaW4gYVxuXG5cdFx0XHRpZiBub3QgcmVhY2hlZFxuXG5cdFx0XHRcdGlmIHZhbHVlIGlzIGl0ZW1cblxuXHRcdFx0XHRcdHJlYWNoZWQgPSB5ZXNcblxuXHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdGVsc2VcblxuXHRcdFx0XHRhW2luZGV4IC0gMV0gPSBhW2luZGV4XVxuXG5cdFx0YS5sZW5ndGggPSBhLmxlbmd0aCAtIDEgaWYgcmVhY2hlZFxuXG5cdFx0YVxuXG5cdHBsdWNrQnlDYWxsYmFjazogKGEsIGNiKSAtPlxuXG5cdFx0cmV0dXJuIGEgaWYgYS5sZW5ndGggPCAxXG5cblx0XHRyZW1vdmVkID0gMFxuXG5cdFx0Zm9yIHZhbHVlLCBpbmRleCBpbiBhXG5cblx0XHRcdGlmIGNiIHZhbHVlLCBpbmRleFxuXG5cdFx0XHRcdHJlbW92ZWQrK1xuXG5cdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdGlmIHJlbW92ZWQgaXNudCAwXG5cblx0XHRcdFx0YVtpbmRleCAtIHJlbW92ZWRdID0gYVtpbmRleF1cblxuXHRcdGlmIHJlbW92ZWQgPiAwXG5cblx0XHRcdGEubGVuZ3RoID0gYS5sZW5ndGggLSByZW1vdmVkXG5cblx0XHRhXG5cblx0cGx1Y2tNdWx0aXBsZTogKGFycmF5LCBpbmRleGVzVG9SZW1vdmUpIC0+XG5cblx0XHRyZXR1cm4gYXJyYXkgaWYgYXJyYXkubGVuZ3RoIDwgMVxuXG5cdFx0cmVtb3ZlZFNvRmFyID0gMFxuXG5cdFx0aW5kZXhlc1RvUmVtb3ZlLnNvcnQoKVxuXG5cdFx0Zm9yIGkgaW4gaW5kZXhlc1RvUmVtb3ZlXG5cblx0XHRcdEBwbHVjayBhcnJheSwgaSAtIHJlbW92ZWRTb0ZhclxuXG5cdFx0XHRyZW1vdmVkU29GYXIrK1xuXG5cdFx0YXJyYXlcblxuXHRpbmplY3RCeUNhbGxiYWNrOiAoYSwgdG9JbmplY3QsIHNob3VsZEluamVjdCkgLT5cblxuXHRcdHZhbEEgPSBudWxsXG5cblx0XHR2YWxCID0gbnVsbFxuXG5cdFx0bGVuID0gYS5sZW5ndGhcblxuXHRcdGlmIGxlbiA8IDFcblxuXHRcdFx0YS5wdXNoIHRvSW5qZWN0XG5cblx0XHRcdHJldHVybiBhXG5cblxuXHRcdGZvciB2YWwsIGkgaW4gYVxuXG5cdFx0XHR2YWxBID0gdmFsQlxuXG5cdFx0XHR2YWxCID0gdmFsXG5cblx0XHRcdGlmIHNob3VsZEluamVjdCB2YWxBLCB2YWxCLCB0b0luamVjdFxuXG5cdFx0XHRcdHJldHVybiBhLnNwbGljZSBpLCAwLCB0b0luamVjdFxuXG5cdFx0YS5wdXNoIHRvSW5qZWN0XG5cblx0XHRhXG5cblx0aW5qZWN0SW5JbmRleDogKGEsIGluZGV4LCB0b0luamVjdCkgLT5cblxuXHRcdGxlbiA9IGEubGVuZ3RoXG5cblx0XHRpID0gaW5kZXhcblxuXHRcdGlmIGxlbiA8IDFcblxuXHRcdFx0YS5wdXNoIHRvSW5qZWN0XG5cblx0XHRcdHJldHVybiBhXG5cblx0XHR0b1B1dCA9IHRvSW5qZWN0XG5cblx0XHR0b1B1dE5leHQgPSBudWxsXG5cblx0XHRgZm9yKDsgaSA8PSBsZW47IGkrKyl7XG5cblx0XHRcdHRvUHV0TmV4dCA9IGFbaV07XG5cblx0XHRcdGFbaV0gPSB0b1B1dDtcblxuXHRcdFx0dG9QdXQgPSB0b1B1dE5leHQ7XG5cblx0XHR9YFxuXG5cdFx0IyBhW2ldID0gdG9QdXRcblxuXHRcdG51bGwiLCJtb2R1bGUuZXhwb3J0cyA9IGNsYXNzaWMgPSB7fVxuXG4jIExpdHRsZSBoZWxwZXIgZm9yIG1peGlucyBmcm9tIENvZmZlZVNjcmlwdCBGQVEsXG4jIGNvdXJ0ZXN5IG9mIFNldGhhdXJ1cyAoaHR0cDovL2dpdGh1Yi5jb20vc2V0aGF1cnVzKVxuY2xhc3NpYy5pbXBsZW1lbnQgPSAobWl4aW5zLi4uLCBjbGFzc1JlZmVyZW5jZSkgLT5cblxuXHRmb3IgbWl4aW4gaW4gbWl4aW5zXG5cblx0XHRjbGFzc1Byb3RvID0gY2xhc3NSZWZlcmVuY2U6OlxuXG5cdFx0Zm9yIG1lbWJlciBvZiBtaXhpbjo6XG5cblx0XHRcdHVubGVzcyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNsYXNzUHJvdG8sIG1lbWJlclxuXG5cdFx0XHRcdGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIG1peGluOjosIG1lbWJlclxuXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjbGFzc1Byb3RvLCBtZW1iZXIsIGRlc2NcblxuXHRjbGFzc1JlZmVyZW5jZVxuXG5jbGFzc2ljLm1peCA9IChtaXhpbnMuLi4sIGNsYXNzUmVmZXJlbmNlKSAtPlxuXG5cdGNsYXNzUHJvdG8gPSBjbGFzc1JlZmVyZW5jZTo6XG5cblx0Y2xhc3NSZWZlcmVuY2UuX19taXhpbkNsb25lcnMgPSBbXVxuXG5cdGNsYXNzUmVmZXJlbmNlLl9fYXBwbHlDbG9uZXJzRm9yID0gKGluc3RhbmNlLCBhcmdzID0gbnVsbCkgLT5cblxuXHRcdGZvciBjbG9uZXIgaW4gY2xhc3NSZWZlcmVuY2UuX19taXhpbkNsb25lcnNcblxuXHRcdFx0Y2xvbmVyLmFwcGx5IGluc3RhbmNlLCBhcmdzXG5cblx0XHRyZXR1cm5cblxuXHRjbGFzc1JlZmVyZW5jZS5fX21peGluSW5pdGlhbGl6ZXJzID0gW11cblxuXHRjbGFzc1JlZmVyZW5jZS5fX2luaXRNaXhpbnNGb3IgPSAoaW5zdGFuY2UsIGFyZ3MgPSBudWxsKSAtPlxuXG5cdFx0Zm9yIGluaXRpYWxpemVyIGluIGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5Jbml0aWFsaXplcnNcblxuXHRcdFx0aW5pdGlhbGl6ZXIuYXBwbHkgaW5zdGFuY2UsIGFyZ3NcblxuXHRcdHJldHVyblxuXG5cdGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5RdWl0dGVycyA9IFtdXG5cblx0Y2xhc3NSZWZlcmVuY2UuX19hcHBseVF1aXR0ZXJzRm9yID0gKGluc3RhbmNlLCBhcmdzID0gbnVsbCkgLT5cblxuXHRcdGZvciBxdWl0dGVyIGluIGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5RdWl0dGVyc1xuXG5cdFx0XHRxdWl0dGVyLmFwcGx5IGluc3RhbmNlLCBhcmdzXG5cblx0XHRyZXR1cm5cblxuXHRmb3IgbWl4aW4gaW4gbWl4aW5zXG5cblx0XHR1bmxlc3MgbWl4aW4uY29uc3RydWN0b3IgaW5zdGFuY2VvZiBGdW5jdGlvblxuXG5cdFx0XHR0aHJvdyBFcnJvciBcIk1peGluIHNob3VsZCBiZSBhIGZ1bmN0aW9uXCJcblxuXHRcdGZvciBtZW1iZXIgb2YgbWl4aW46OlxuXG5cdFx0XHRpZiBtZW1iZXIuc3Vic3RyKDAsIDExKSBpcyAnX19pbml0TWl4aW4nXG5cblx0XHRcdFx0Y2xhc3NSZWZlcmVuY2UuX19taXhpbkluaXRpYWxpemVycy5wdXNoIG1peGluOjpbbWVtYmVyXVxuXG5cdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdGVsc2UgaWYgbWVtYmVyLnN1YnN0cigwLCAxMSkgaXMgJ19fY2xvbmVyRm9yJ1xuXG5cdFx0XHRcdGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5DbG9uZXJzLnB1c2ggbWl4aW46OlttZW1iZXJdXG5cblx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0ZWxzZSBpZiBtZW1iZXIuc3Vic3RyKDAsIDEyKSBpcyAnX19xdWl0dGVyRm9yJ1xuXG5cdFx0XHRcdGNsYXNzUmVmZXJlbmNlLl9fbWl4aW5RdWl0dGVycy5wdXNoIG1peGluOjpbbWVtYmVyXVxuXG5cdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdHVubGVzcyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNsYXNzUHJvdG8sIG1lbWJlclxuXG5cdFx0XHRcdGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIG1peGluOjosIG1lbWJlclxuXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjbGFzc1Byb3RvLCBtZW1iZXIsIGRlc2NcblxuXHRjbGFzc1JlZmVyZW5jZSJdfQ== \ No newline at end of file