Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@mixmaxhq/sdk

Package Overview
Dependencies
Maintainers
16
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mixmaxhq/sdk - npm Package Compare versions

Comparing version 2.0.2 to 2.0.4

dist/editor.es.min.js

2

dist/editor.es.js

@@ -28,1 +28,3 @@ /**

export { done, cancel };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9Vc2Vycy9icmFkL2Rldi9taXhtYXgtc2RrLWpzL3NyYy9lZGl0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgTWl4bWF4IEFwcCBKUyBTREsuIFNlZSBkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9zZGsubWl4bWF4LmNvbVxuICovXG5cbi8qKlxuICogQ2FsbCB0aGlzIHdoZW4gdGhlIHVzZXIgaXMgZmluaXNoZWQgd2l0aCB0aGUgYXBwIGVkaXRvciB3aW5kb3cuIFBhc3MgdGhlIHBhcmFtZXRlcnNcbiAqIHRoYXQgYXJlIHRvIGJlIHVzZWQgdG8gY3JlYXRlIGFuIGFwcCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvbmUocGFyYW1zKSB7XG4gIGlmICghd2luZG93Lm9wZW5lcikgcmV0dXJuO1xuXG4gIHdpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2Uoe1xuICAgIG1ldGhvZDogJ2RvbmUnLFxuICAgIHBheWxvYWQ6IHBhcmFtc1xuICB9LCAnKicgLyogQ291bGQgYmUgdG8gdGhlIGFwcCBkYXNoYm9hcmQgb3IgdG8gYSBjb21wb3NlciAqLyApO1xuXG4gIHdpbmRvdy5jbG9zZSgpO1xufVxuXG4vKipcbiAqIENhbmNlbHMgdGhpcyBlZGl0b3Igd2luZG93LiBKdXN0IGNsb3NlcyB0aGUgd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsKCkge1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cbiJdLCJuYW1lcyI6WyJkb25lIiwicGFyYW1zIiwid2luZG93Iiwib3BlbmVyIiwicG9zdE1lc3NhZ2UiLCJjbG9zZSIsImNhbmNlbCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBUUEsQUFBTyxTQUFTQSxJQUFULENBQWNDLE1BQWQsRUFBc0I7TUFDdkIsQ0FBQ0MsT0FBT0MsTUFBWixFQUFvQjs7U0FFYkEsTUFBUCxDQUFjQyxXQUFkLENBQTBCO1lBQ2hCLE1BRGdCO2FBRWZIO0dBRlgsRUFHRyxHQUhIOztTQUtPSSxLQUFQOzs7Ozs7QUFNRixBQUFPLFNBQVNDLE1BQVQsR0FBa0I7U0FDaEJELEtBQVA7Ozs7OyJ9

@@ -39,1 +39,3 @@ (function (global, factory) {

})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9Vc2Vycy9icmFkL2Rldi9taXhtYXgtc2RrLWpzL3NyYy9lZGl0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgTWl4bWF4IEFwcCBKUyBTREsuIFNlZSBkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9zZGsubWl4bWF4LmNvbVxuICovXG5cbi8qKlxuICogQ2FsbCB0aGlzIHdoZW4gdGhlIHVzZXIgaXMgZmluaXNoZWQgd2l0aCB0aGUgYXBwIGVkaXRvciB3aW5kb3cuIFBhc3MgdGhlIHBhcmFtZXRlcnNcbiAqIHRoYXQgYXJlIHRvIGJlIHVzZWQgdG8gY3JlYXRlIGFuIGFwcCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvbmUocGFyYW1zKSB7XG4gIGlmICghd2luZG93Lm9wZW5lcikgcmV0dXJuO1xuXG4gIHdpbmRvdy5vcGVuZXIucG9zdE1lc3NhZ2Uoe1xuICAgIG1ldGhvZDogJ2RvbmUnLFxuICAgIHBheWxvYWQ6IHBhcmFtc1xuICB9LCAnKicgLyogQ291bGQgYmUgdG8gdGhlIGFwcCBkYXNoYm9hcmQgb3IgdG8gYSBjb21wb3NlciAqLyApO1xuXG4gIHdpbmRvdy5jbG9zZSgpO1xufVxuXG4vKipcbiAqIENhbmNlbHMgdGhpcyBlZGl0b3Igd2luZG93LiBKdXN0IGNsb3NlcyB0aGUgd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsKCkge1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cbiJdLCJuYW1lcyI6WyJkb25lIiwicGFyYW1zIiwid2luZG93Iiwib3BlbmVyIiwicG9zdE1lc3NhZ2UiLCJjbG9zZSIsImNhbmNlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7Ozs7O0FBUUEsQUFBTyxTQUFTQSxJQUFULENBQWNDLE1BQWQsRUFBc0I7TUFDdkIsQ0FBQ0MsT0FBT0MsTUFBWixFQUFvQjs7U0FFYkEsTUFBUCxDQUFjQyxXQUFkLENBQTBCO1lBQ2hCLE1BRGdCO2FBRWZIO0dBRlgsRUFHRyxHQUhIOztTQUtPSSxLQUFQOzs7Ozs7QUFNRixBQUFPLFNBQVNDLE1BQVQsR0FBa0I7U0FDaEJELEtBQVA7Ozs7Ozs7Ozs7Ozs7OyJ9

234

dist/sidebar.es.js

@@ -344,2 +344,68 @@ function createCommonjsModule(fn, module) {

var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
var inherits = function (subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
};
var possibleConstructorReturn = function (self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return call && (typeof call === "object" || typeof call === "function") ? call : self;
};
/**

@@ -358,4 +424,6 @@ * This class is used to model the lifecycle of an event emitted by an `EventEmitter`. Specifically,

*/
class Event {
constructor() {
var Event = function () {
function Event() {
classCallCheck(this, Event);
this._isDefaultPrevented = false;

@@ -368,22 +436,36 @@ }

*/
preventDefault() {
this._isDefaultPrevented = true;
}
/**
* @return {Boolean} `true` if the default has been prevented, `false` otherwise.
*/
get isDefaultPrevented() {
return this._isDefaultPrevented;
}
}
class Host extends eventemitter3 {
constructor() {
super();
createClass(Event, [{
key: "preventDefault",
value: function preventDefault() {
this._isDefaultPrevented = true;
}
this._hostOrigin = null;
this._messageQueue = [];
/**
* @return {Boolean} `true` if the default has been prevented, `false` otherwise.
*/
window.addEventListener('message', this._onMessage.bind(this));
}, {
key: "isDefaultPrevented",
get: function get$$1() {
return this._isDefaultPrevented;
}
}]);
return Event;
}();
var Host = function (_EventEmitter) {
inherits(Host, _EventEmitter);
function Host() {
classCallCheck(this, Host);
var _this = possibleConstructorReturn(this, (Host.__proto__ || Object.getPrototypeOf(Host)).call(this));
_this._hostOrigin = null;
_this._messageQueue = [];
window.addEventListener('message', _this._onMessage.bind(_this));
return _this;
}

@@ -400,48 +482,59 @@

*/
send(method, payload) {
this._messageQueue.push({ method, payload });
this._maybeFlushMessages();
}
_onMessage(e) {
// Security.
if (!/^https:\/\/(.+\.)?mixmax.com$/.test(e.origin)) return;
// Safety belts.
if (!e.data) return;
createClass(Host, [{
key: 'send',
value: function send(method, payload) {
this._messageQueue.push({ method: method, payload: payload });
this._maybeFlushMessages();
}
}, {
key: '_onMessage',
value: function _onMessage(e) {
// Security.
if (!/^https:\/\/(.+\.)?mixmax.com$/.test(e.origin)) return;
switch (e.data.method) {
// Handle internal methods first.
case 'setOrigin':
// Let the Mixmax host tell us its origin vs. hardcoding app.mixmax.com (that might change
// in the future).
this._setHostOrigin(e.data.payload.origin);
break;
// Safety belts.
if (!e.data) return;
// Proxy all other methods to the application.
default:
this.emit(e.data.method, e.data.payload);
break;
switch (e.data.method) {
// Handle internal methods first.
case 'setOrigin':
// Let the Mixmax host tell us its origin vs. hardcoding app.mixmax.com (that might change
// in the future).
this._setHostOrigin(e.data.payload.origin);
break;
// Proxy all other methods to the application.
default:
this.emit(e.data.method, e.data.payload);
break;
}
}
}
}, {
key: '_maybeFlushMessages',
value: function _maybeFlushMessages() {
var _this2 = this;
_maybeFlushMessages() {
// Wait until the Mixmax host has told us its origin before messaging, so that we can lock
// the target origin, for security reasons.
if (!this._hostOrigin) return;
// Wait until the Mixmax host has told us its origin before messaging, so that we can lock
// the target origin, for security reasons.
if (!this._hostOrigin) return;
this._messageQueue.forEach(message => {
window.parent.postMessage(message, this._hostOrigin);
});
this._messageQueue = [];
}
this._messageQueue.forEach(function (message) {
window.parent.postMessage(message, _this2._hostOrigin);
});
this._messageQueue = [];
}
}, {
key: '_setHostOrigin',
value: function _setHostOrigin(origin) {
if (this._hostOrigin) throw new Error('Host origin is already set');
_setHostOrigin(origin) {
if (this._hostOrigin) throw new Error('Host origin is already set');
this._hostOrigin = origin;
this._maybeFlushMessages();
}
}]);
return Host;
}(eventemitter3);
this._hostOrigin = origin;
this._maybeFlushMessages();
}
}
var Host$1 = new Host();

@@ -453,9 +546,13 @@

class Sidebar extends eventemitter3 {
constructor() {
super();
var Sidebar = function (_EventEmitter) {
inherits(Sidebar, _EventEmitter);
Host$1.on('beforeContactSelected', () => {
const e = new Event();
this.emit('beforeContactSelected', e);
function Sidebar() {
classCallCheck(this, Sidebar);
var _this = possibleConstructorReturn(this, (Sidebar.__proto__ || Object.getPrototypeOf(Sidebar)).call(this));
Host$1.on('beforeContactSelected', function () {
var e = new Event();
_this.emit('beforeContactSelected', e);
Host$1.send('ackBeforeContactSelected', {

@@ -466,10 +563,19 @@ isDefaultPrevented: e.isDefaultPrevented

Host$1.on('contactSelected', contact => this.emit('contactSelected', contact));
Host$1.on('contactSelected', function (contact) {
return _this.emit('contactSelected', contact);
});
Host$1.on('clear', () => this.emit('clear'));
Host$1.on('clear', function () {
return _this.emit('clear');
});
return _this;
}
}
return Sidebar;
}(eventemitter3);
var sidebar = new Sidebar();
export default sidebar;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9Vc2Vycy9icmFkL2Rldi9taXhtYXgtc2RrLWpzL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwiL1VzZXJzL2JyYWQvZGV2L21peG1heC1zZGstanMvc3JjL3V0aWxzL0V2ZW50LmpzIiwiL1VzZXJzL2JyYWQvZGV2L21peG1heC1zZGstanMvc3JjL3V0aWxzL0hvc3QuanMiLCIvVXNlcnMvYnJhZC9kZXYvbWl4bWF4LXNkay1qcy9zcmMvc2lkZWJhci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCIvKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtb2RlbCB0aGUgbGlmZWN5Y2xlIG9mIGFuIGV2ZW50IGVtaXR0ZWQgYnkgYW4gYEV2ZW50RW1pdHRlcmAuIFNwZWNpZmljYWxseSxcbiAqIGl0IHRyYWNrcyB3aGV0aGVyIHRoZSBldmVudCdzIGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSB0YWtlbiBhbmQgZ2l2ZXMgZXZlbnQgbGlzdGVuZXJzIGEgd2F5IHRvXG4gKiBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBmcm9tIGJlaW5nIHRha2VuLlxuICpcbiAqIEl0J3MgaW50ZW5kZWQgdG8gYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQsIGlmIHRoZSBTREtcbiAqIG5lZWRzIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBldmVudC4gT3RoZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwYXNzZWQgc2VwYXJhdGVseS4gVGhlbixcbiAqIGFmdGVyIHRoZSBldmVudCBoYXMgYmVlbiBlbWl0dGVkLCB0aGUgU0RLIGNhbiBkZWNpZGUgd2hldGhlciB0byB0YWtlIHRoZSBkZWZhdWx0IGFjdGlvbjpcbiAqXG4gKiAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCk7XG4gKiAgIGVtaXR0ZXIuZW1pdCgnZm9vJywgZXZlbnQsIG90aGVyQXJnKTtcbiAqICAgaWYgKCFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQpIHRha2VEZWZhdWx0QWN0aW9uKCk7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNEZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBpbmZvcm0gdGhlIFNESyB0aGF0IGl0IHNob3VsZCBub3QgdGFrZSB0aGUgZGVmYXVsdCBhY3Rpb24gYWZ0ZXIgYWxsXG4gICAqIGxpc3RlbmVycyBoYXZlIGJlZW4gY2FsbGVkLlxuICAgKi9cbiAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgdGhpcy5faXNEZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGRlZmF1bHQgaGFzIGJlZW4gcHJldmVudGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGdldCBpc0RlZmF1bHRQcmV2ZW50ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGVmYXVsdFByZXZlbnRlZDtcbiAgfVxufVxuIiwiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHdpbmRvdyBlbWJlZGRpbmcgdGhpcyB3aW5kb3csIGNhbGxlZCB0aGUgU0RLIFwiaG9zdFwiLCBhbmQgcGVybWl0cyB0aGVcbiAqIFNESyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LlxuICovXG5jbGFzcyBIb3N0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2hvc3RPcmlnaW4gPSBudWxsO1xuICAgIHRoaXMuX21lc3NhZ2VRdWV1ZSA9IFtdO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBob3N0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIC0gVGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7QW55fSBwYXlsb2FkIC0gVGhlIGRhdGEgdG8gc2VuZCB0byB0aGUgaG9zdC4gVGhpcyBpcyBhbnl0aGluZyB0aGF0IGNhbiBiZSBzZXJpYWxpemVkXG4gICAqICAgb3ZlciBgd2luZG93LnBvc3RNZXNzYWdlYCwgaW5jbHVkaW5nIHByaW1pdGl2ZSB0eXBlcywgYnV0IGl0J3Mgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdFxuICAgKiAgIHlvdSB3cmFwIHByaW1pdGl2ZSBkYXRhIGluIGFuIGBPYmplY3RgIHNvIHRoYXQgeW91IGNhbiBsYXRlciBwYXNzIGFkZGl0aW9uYWwgZGF0YSB3aXRob3V0XG4gICAqICAgaGF2aW5nIHRvIGNoYW5nZSBleGlzdGluZyBtZXNzYWdlIGxpc3RlbmVycy5cbiAgICovXG4gIHNlbmQobWV0aG9kLCBwYXlsb2FkKSB7XG4gICAgdGhpcy5fbWVzc2FnZVF1ZXVlLnB1c2goeyBtZXRob2QsIHBheWxvYWQgfSk7XG4gICAgdGhpcy5fbWF5YmVGbHVzaE1lc3NhZ2VzKCk7XG4gIH1cblxuICBfb25NZXNzYWdlKGUpIHtcbiAgICAvLyBTZWN1cml0eS5cbiAgICBpZiAoIS9eaHR0cHM6XFwvXFwvKC4rXFwuKT9taXhtYXguY29tJC8udGVzdChlLm9yaWdpbikpIHJldHVybjtcblxuICAgIC8vIFNhZmV0eSBiZWx0cy5cbiAgICBpZiAoIWUuZGF0YSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChlLmRhdGEubWV0aG9kKSB7XG4gICAgICAvLyBIYW5kbGUgaW50ZXJuYWwgbWV0aG9kcyBmaXJzdC5cbiAgICAgIGNhc2UgJ3NldE9yaWdpbic6XG4gICAgICAgIC8vIExldCB0aGUgTWl4bWF4IGhvc3QgdGVsbCB1cyBpdHMgb3JpZ2luIHZzLiBoYXJkY29kaW5nIGFwcC5taXhtYXguY29tICh0aGF0IG1pZ2h0IGNoYW5nZVxuICAgICAgICAvLyBpbiB0aGUgZnV0dXJlKS5cbiAgICAgICAgdGhpcy5fc2V0SG9zdE9yaWdpbihlLmRhdGEucGF5bG9hZC5vcmlnaW4pO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gUHJveHkgYWxsIG90aGVyIG1ldGhvZHMgdG8gdGhlIGFwcGxpY2F0aW9uLlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5lbWl0KGUuZGF0YS5tZXRob2QsIGUuZGF0YS5wYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgX21heWJlRmx1c2hNZXNzYWdlcygpIHtcbiAgICAvLyBXYWl0IHVudGlsIHRoZSBNaXhtYXggaG9zdCBoYXMgdG9sZCB1cyBpdHMgb3JpZ2luIGJlZm9yZSBtZXNzYWdpbmcsIHNvIHRoYXQgd2UgY2FuIGxvY2tcbiAgICAvLyB0aGUgdGFyZ2V0IG9yaWdpbiwgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAgaWYgKCF0aGlzLl9ob3N0T3JpZ2luKSByZXR1cm47XG5cbiAgICB0aGlzLl9tZXNzYWdlUXVldWUuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShtZXNzYWdlLCB0aGlzLl9ob3N0T3JpZ2luKTtcbiAgICB9KTtcbiAgICB0aGlzLl9tZXNzYWdlUXVldWUgPSBbXTtcbiAgfVxuXG4gIF9zZXRIb3N0T3JpZ2luKG9yaWdpbikge1xuICAgIGlmICh0aGlzLl9ob3N0T3JpZ2luKSB0aHJvdyBuZXcgRXJyb3IoJ0hvc3Qgb3JpZ2luIGlzIGFscmVhZHkgc2V0Jyk7XG5cbiAgICB0aGlzLl9ob3N0T3JpZ2luID0gb3JpZ2luO1xuICAgIHRoaXMuX21heWJlRmx1c2hNZXNzYWdlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBIb3N0KCk7XG4iLCIvKipcbiAqIFRoZSBNaXhtYXggU2lkZWJhciBTREsuIFNlZSBkb2N1bWVudGF0aW9uIGF0IGh0dHBzOi8vZGV2ZWxvcGVyLm1peG1heC5jb20vZG9jcy9zaWRlYmFycy5cbiAqL1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuXG5pbXBvcnQgRXZlbnQgZnJvbSAnL3V0aWxzL0V2ZW50JztcbmltcG9ydCBIb3N0IGZyb20gJy91dGlscy9Ib3N0JztcblxuY2xhc3MgU2lkZWJhciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBIb3N0Lm9uKCdiZWZvcmVDb250YWN0U2VsZWN0ZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlID0gbmV3IEV2ZW50KCk7XG4gICAgICB0aGlzLmVtaXQoJ2JlZm9yZUNvbnRhY3RTZWxlY3RlZCcsIGUpO1xuICAgICAgSG9zdC5zZW5kKCdhY2tCZWZvcmVDb250YWN0U2VsZWN0ZWQnLCB7XG4gICAgICAgIGlzRGVmYXVsdFByZXZlbnRlZDogZS5pc0RlZmF1bHRQcmV2ZW50ZWRcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgSG9zdC5vbignY29udGFjdFNlbGVjdGVkJywgKGNvbnRhY3QpID0+IHRoaXMuZW1pdCgnY29udGFjdFNlbGVjdGVkJywgY29udGFjdCkpO1xuXG4gICAgSG9zdC5vbignY2xlYXInLCAoKSA9PiB0aGlzLmVtaXQoJ2NsZWFyJykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTaWRlYmFyKCk7XG4iXSwibmFtZXMiOlsiRXZlbnQiLCJfaXNEZWZhdWx0UHJldmVudGVkIiwiSG9zdCIsIl9ob3N0T3JpZ2luIiwiX21lc3NhZ2VRdWV1ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25NZXNzYWdlIiwiYmluZCIsIm1ldGhvZCIsInBheWxvYWQiLCJwdXNoIiwiX21heWJlRmx1c2hNZXNzYWdlcyIsImUiLCJ0ZXN0Iiwib3JpZ2luIiwiZGF0YSIsIl9zZXRIb3N0T3JpZ2luIiwiZW1pdCIsImZvckVhY2giLCJtZXNzYWdlIiwicGFyZW50IiwicG9zdE1lc3NhZ2UiLCJFcnJvciIsIkV2ZW50RW1pdHRlciIsIlNpZGViYXIiLCJvbiIsInNlbmQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJjb250YWN0Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLFlBQVksQ0FBQzs7QUFFYixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWM7SUFDckMsTUFBTSxHQUFHLEdBQUcsQ0FBQzs7Ozs7Ozs7O0FBU2pCLFNBQVMsTUFBTSxHQUFHLEVBQUU7Ozs7Ozs7OztBQVNwQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7RUFDakIsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7Ozs7RUFNdkMsSUFBSSxDQUFDLElBQUksTUFBTSxF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S0FBSyxDQUFDLEVBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7S0FDL0U7O0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtNQUNsRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1Qjs7SUFFRCxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0dBQzdDLE1BQU07SUFDTCxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTTtRQUN6QixDQUFDLENBQUM7O0lBRU4sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7TUFDM0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDOztNQUVwRixRQUFRLEdBQUc7UUFDVCxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQzFELEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFB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

@@ -350,2 +350,68 @@ (function (global, factory) {

var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
var inherits = function (subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
};
var possibleConstructorReturn = function (self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return call && (typeof call === "object" || typeof call === "function") ? call : self;
};
/**

@@ -364,4 +430,6 @@ * This class is used to model the lifecycle of an event emitted by an `EventEmitter`. Specifically,

*/
class Event {
constructor() {
var Event = function () {
function Event() {
classCallCheck(this, Event);
this._isDefaultPrevented = false;

@@ -374,22 +442,36 @@ }

*/
preventDefault() {
this._isDefaultPrevented = true;
}
/**
* @return {Boolean} `true` if the default has been prevented, `false` otherwise.
*/
get isDefaultPrevented() {
return this._isDefaultPrevented;
}
}
class Host extends eventemitter3 {
constructor() {
super();
createClass(Event, [{
key: "preventDefault",
value: function preventDefault() {
this._isDefaultPrevented = true;
}
this._hostOrigin = null;
this._messageQueue = [];
/**
* @return {Boolean} `true` if the default has been prevented, `false` otherwise.
*/
window.addEventListener('message', this._onMessage.bind(this));
}, {
key: "isDefaultPrevented",
get: function get$$1() {
return this._isDefaultPrevented;
}
}]);
return Event;
}();
var Host = function (_EventEmitter) {
inherits(Host, _EventEmitter);
function Host() {
classCallCheck(this, Host);
var _this = possibleConstructorReturn(this, (Host.__proto__ || Object.getPrototypeOf(Host)).call(this));
_this._hostOrigin = null;
_this._messageQueue = [];
window.addEventListener('message', _this._onMessage.bind(_this));
return _this;
}

@@ -406,48 +488,59 @@

*/
send(method, payload) {
this._messageQueue.push({ method, payload });
this._maybeFlushMessages();
}
_onMessage(e) {
// Security.
if (!/^https:\/\/(.+\.)?mixmax.com$/.test(e.origin)) return;
// Safety belts.
if (!e.data) return;
createClass(Host, [{
key: 'send',
value: function send(method, payload) {
this._messageQueue.push({ method: method, payload: payload });
this._maybeFlushMessages();
}
}, {
key: '_onMessage',
value: function _onMessage(e) {
// Security.
if (!/^https:\/\/(.+\.)?mixmax.com$/.test(e.origin)) return;
switch (e.data.method) {
// Handle internal methods first.
case 'setOrigin':
// Let the Mixmax host tell us its origin vs. hardcoding app.mixmax.com (that might change
// in the future).
this._setHostOrigin(e.data.payload.origin);
break;
// Safety belts.
if (!e.data) return;
// Proxy all other methods to the application.
default:
this.emit(e.data.method, e.data.payload);
break;
switch (e.data.method) {
// Handle internal methods first.
case 'setOrigin':
// Let the Mixmax host tell us its origin vs. hardcoding app.mixmax.com (that might change
// in the future).
this._setHostOrigin(e.data.payload.origin);
break;
// Proxy all other methods to the application.
default:
this.emit(e.data.method, e.data.payload);
break;
}
}
}
}, {
key: '_maybeFlushMessages',
value: function _maybeFlushMessages() {
var _this2 = this;
_maybeFlushMessages() {
// Wait until the Mixmax host has told us its origin before messaging, so that we can lock
// the target origin, for security reasons.
if (!this._hostOrigin) return;
// Wait until the Mixmax host has told us its origin before messaging, so that we can lock
// the target origin, for security reasons.
if (!this._hostOrigin) return;
this._messageQueue.forEach(message => {
window.parent.postMessage(message, this._hostOrigin);
});
this._messageQueue = [];
}
this._messageQueue.forEach(function (message) {
window.parent.postMessage(message, _this2._hostOrigin);
});
this._messageQueue = [];
}
}, {
key: '_setHostOrigin',
value: function _setHostOrigin(origin) {
if (this._hostOrigin) throw new Error('Host origin is already set');
_setHostOrigin(origin) {
if (this._hostOrigin) throw new Error('Host origin is already set');
this._hostOrigin = origin;
this._maybeFlushMessages();
}
}]);
return Host;
}(eventemitter3);
this._hostOrigin = origin;
this._maybeFlushMessages();
}
}
var Host$1 = new Host();

@@ -459,9 +552,13 @@

class Sidebar extends eventemitter3 {
constructor() {
super();
var Sidebar = function (_EventEmitter) {
inherits(Sidebar, _EventEmitter);
Host$1.on('beforeContactSelected', () => {
const e = new Event();
this.emit('beforeContactSelected', e);
function Sidebar() {
classCallCheck(this, Sidebar);
var _this = possibleConstructorReturn(this, (Sidebar.__proto__ || Object.getPrototypeOf(Sidebar)).call(this));
Host$1.on('beforeContactSelected', function () {
var e = new Event();
_this.emit('beforeContactSelected', e);
Host$1.send('ackBeforeContactSelected', {

@@ -472,8 +569,15 @@ isDefaultPrevented: e.isDefaultPrevented

Host$1.on('contactSelected', contact => this.emit('contactSelected', contact));
Host$1.on('contactSelected', function (contact) {
return _this.emit('contactSelected', contact);
});
Host$1.on('clear', () => this.emit('clear'));
Host$1.on('clear', function () {
return _this.emit('clear');
});
return _this;
}
}
return Sidebar;
}(eventemitter3);
var sidebar = new Sidebar();

@@ -484,1 +588,3 @@

})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9Vc2Vycy9icmFkL2Rldi9taXhtYXgtc2RrLWpzL25vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzL2luZGV4LmpzIiwiL1VzZXJzL2JyYWQvZGV2L21peG1heC1zZGstanMvc3JjL3V0aWxzL0V2ZW50LmpzIiwiL1VzZXJzL2JyYWQvZGV2L21peG1heC1zZGstanMvc3JjL3V0aWxzL0hvc3QuanMiLCIvVXNlcnMvYnJhZC9kZXYvbWl4bWF4LXNkay1qcy9zcmMvc2lkZWJhci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCIvKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtb2RlbCB0aGUgbGlmZWN5Y2xlIG9mIGFuIGV2ZW50IGVtaXR0ZWQgYnkgYW4gYEV2ZW50RW1pdHRlcmAuIFNwZWNpZmljYWxseSxcbiAqIGl0IHRyYWNrcyB3aGV0aGVyIHRoZSBldmVudCdzIGRlZmF1bHQgYWN0aW9uIHNob3VsZCBiZSB0YWtlbiBhbmQgZ2l2ZXMgZXZlbnQgbGlzdGVuZXJzIGEgd2F5IHRvXG4gKiBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBmcm9tIGJlaW5nIHRha2VuLlxuICpcbiAqIEl0J3MgaW50ZW5kZWQgdG8gYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQsIGlmIHRoZSBTREtcbiAqIG5lZWRzIHRvIHRyYWNrIHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBldmVudC4gT3RoZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwYXNzZWQgc2VwYXJhdGVseS4gVGhlbixcbiAqIGFmdGVyIHRoZSBldmVudCBoYXMgYmVlbiBlbWl0dGVkLCB0aGUgU0RLIGNhbiBkZWNpZGUgd2hldGhlciB0byB0YWtlIHRoZSBkZWZhdWx0IGFjdGlvbjpcbiAqXG4gKiAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCk7XG4gKiAgIGVtaXR0ZXIuZW1pdCgnZm9vJywgZXZlbnQsIG90aGVyQXJnKTtcbiAqICAgaWYgKCFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQpIHRha2VEZWZhdWx0QWN0aW9uKCk7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNEZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGlzIG1ldGhvZCB0byBpbmZvcm0gdGhlIFNESyB0aGF0IGl0IHNob3VsZCBub3QgdGFrZSB0aGUgZGVmYXVsdCBhY3Rpb24gYWZ0ZXIgYWxsXG4gICAqIGxpc3RlbmVycyBoYXZlIGJlZW4gY2FsbGVkLlxuICAgKi9cbiAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgdGhpcy5faXNEZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGRlZmF1bHQgaGFzIGJlZW4gcHJldmVudGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGdldCBpc0RlZmF1bHRQcmV2ZW50ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGVmYXVsdFByZXZlbnRlZDtcbiAgfVxufVxuIiwiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHdpbmRvdyBlbWJlZGRpbmcgdGhpcyB3aW5kb3csIGNhbGxlZCB0aGUgU0RLIFwiaG9zdFwiLCBhbmQgcGVybWl0cyB0aGVcbiAqIFNESyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBob3N0LlxuICovXG5jbGFzcyBIb3N0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2hvc3RPcmlnaW4gPSBudWxsO1xuICAgIHRoaXMuX21lc3NhZ2VRdWV1ZSA9IFtdO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBob3N0LlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIC0gVGhlIG5hbWUgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7QW55fSBwYXlsb2FkIC0gVGhlIGRhdGEgdG8gc2VuZCB0byB0aGUgaG9zdC4gVGhpcyBpcyBhbnl0aGluZyB0aGF0IGNhbiBiZSBzZXJpYWxpemVkXG4gICAqICAgb3ZlciBgd2luZG93LnBvc3RNZXNzYWdlYCwgaW5jbHVkaW5nIHByaW1pdGl2ZSB0eXBlcywgYnV0IGl0J3Mgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdFxuICAgKiAgIHlvdSB3cmFwIHByaW1pdGl2ZSBkYXRhIGluIGFuIGBPYmplY3RgIHNvIHRoYXQgeW91IGNhbiBsYXRlciBwYXNzIGFkZGl0aW9uYWwgZGF0YSB3aXRob3V0XG4gICAqICAgaGF2aW5nIHRvIGNoYW5nZSBleGlzdGluZyBtZXNzYWdlIGxpc3RlbmVycy5cbiAgICovXG4gIHNlbmQobWV0aG9kLCBwYXlsb2FkKSB7XG4gICAgdGhpcy5fbWVzc2FnZVF1ZXVlLnB1c2goeyBtZXRob2QsIHBheWxvYWQgfSk7XG4gICAgdGhpcy5fbWF5YmVGbHVzaE1lc3NhZ2VzKCk7XG4gIH1cblxuICBfb25NZXNzYWdlKGUpIHtcbiAgICAvLyBTZWN1cml0eS5cbiAgICBpZiAoIS9eaHR0cHM6XFwvXFwvKC4rXFwuKT9taXhtYXguY29tJC8udGVzdChlLm9yaWdpbikpIHJldHVybjtcblxuICAgIC8vIFNhZmV0eSBiZWx0cy5cbiAgICBpZiAoIWUuZGF0YSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChlLmRhdGEubWV0aG9kKSB7XG4gICAgICAvLyBIYW5kbGUgaW50ZXJuYWwgbWV0aG9kcyBmaXJzdC5cbiAgICAgIGNhc2UgJ3NldE9yaWdpbic6XG4gICAgICAgIC8vIExldCB0aGUgTWl4bWF4IGhvc3QgdGVsbCB1cyBpdHMgb3JpZ2luIHZzLiBoYXJkY29kaW5nIGFwcC5taXhtYXguY29tICh0aGF0IG1pZ2h0IGNoYW5nZVxuICAgICAgICAvLyBpbiB0aGUgZnV0dXJlKS5cbiAgICAgICAgdGhpcy5fc2V0SG9zdE9yaWdpbihlLmRhdGEucGF5bG9hZC5vcmlnaW4pO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gUHJveHkgYWxsIG90aGVyIG1ldGhvZHMgdG8gdGhlIGFwcGxpY2F0aW9uLlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5lbWl0KGUuZGF0YS5tZXRob2QsIGUuZGF0YS5wYXlsb2FkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgX21heWJlRmx1c2hNZXNzYWdlcygpIHtcbiAgICAvLyBXYWl0IHVudGlsIHRoZSBNaXhtYXggaG9zdCBoYXMgdG9sZCB1cyBpdHMgb3JpZ2luIGJlZm9yZSBtZXNzYWdpbmcsIHNvIHRoYXQgd2UgY2FuIGxvY2tcbiAgICAvLyB0aGUgdGFyZ2V0IG9yaWdpbiwgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAgaWYgKCF0aGlzLl9ob3N0T3JpZ2luKSByZXR1cm47XG5cbiAgICB0aGlzLl9tZXNzYWdlUXVldWUuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShtZXNzYWdlLCB0aGlzLl9ob3N0T3JpZ2luKTtcbiAgICB9KTtcbiAgICB0aGlzLl9tZXNzYWdlUXVldWUgPSBbXTtcbiAgfVxuXG4gIF9zZXRIb3N0T3JpZ2luKG9yaWdpbikge1xuICAgIGlmICh0aGlzLl9ob3N0T3JpZ2luKSB0aHJvdyBuZXcgRXJyb3IoJ0hvc3Qgb3JpZ2luIGlzIGFscmVhZHkgc2V0Jyk7XG5cbiAgICB0aGlzLl9ob3N0T3JpZ2luID0gb3JpZ2luO1xuICAgIHRoaXMuX21heWJlRmx1c2hNZXNzYWdlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBIb3N0KCk7XG4iLCIvKipcbiAqIFRoZSBNaXhtYXggU2lkZWJhciBTREsuIFNlZSBkb2N1bWVudGF0aW9uIGF0IGh0dHBzOi8vZGV2ZWxvcGVyLm1peG1heC5jb20vZG9jcy9zaWRlYmFycy5cbiAqL1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuXG5pbXBvcnQgRXZlbnQgZnJvbSAnL3V0aWxzL0V2ZW50JztcbmltcG9ydCBIb3N0IGZyb20gJy91dGlscy9Ib3N0JztcblxuY2xhc3MgU2lkZWJhciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBIb3N0Lm9uKCdiZWZvcmVDb250YWN0U2VsZWN0ZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlID0gbmV3IEV2ZW50KCk7XG4gICAgICB0aGlzLmVtaXQoJ2JlZm9yZUNvbnRhY3RTZWxlY3RlZCcsIGUpO1xuICAgICAgSG9zdC5zZW5kKCdhY2tCZWZvcmVDb250YWN0U2VsZWN0ZWQnLCB7XG4gICAgICAgIGlzRGVmYXVsdFByZXZlbnRlZDogZS5pc0RlZmF1bHRQcmV2ZW50ZWRcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgSG9zdC5vbignY29udGFjdFNlbGVjdGVkJywgKGNvbnRhY3QpID0+IHRoaXMuZW1pdCgnY29udGFjdFNlbGVjdGVkJywgY29udGFjdCkpO1xuXG4gICAgSG9zdC5vbignY2xlYXInLCAoKSA9PiB0aGlzLmVtaXQoJ2NsZWFyJykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTaWRlYmFyKCk7XG4iXSwibmFtZXMiOlsiRXZlbnQiLCJfaXNEZWZhdWx0UHJldmVudGVkIiwiSG9zdCIsIl9ob3N0T3JpZ2luIiwiX21lc3NhZ2VRdWV1ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25NZXNzYWdlIiwiYmluZCIsIm1ldGhvZCIsInBheWxvYWQiLCJwdXNoIiwiX21heWJlRmx1c2hNZXNzYWdlcyIsImUiLCJ0ZXN0Iiwib3JpZ2luIiwiZGF0YSIsIl9zZXRIb3N0T3JpZ2luIiwiZW1pdCIsImZvckVhY2giLCJtZXNzYWdlIiwicGFyZW50IiwicG9zdE1lc3NhZ2UiLCJFcnJvciIsIkV2ZW50RW1pdHRlciIsIlNpZGViYXIiLCJvbiIsInNlbmQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJjb250YWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLFlBQVksQ0FBQzs7QUFFYixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWM7SUFDckMsTUFBTSxHQUFHLEdBQUcsQ0FBQzs7Ozs7Ozs7O0FBU2pCLFNBQVMsTUFBTSxHQUFHLEVBQUU7Ozs7Ozs7OztBQVNwQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7RUFDakIsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7Ozs7RUFNdkMsSUFBSSxDQUFDLElBQUks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TUFDMUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7S0FDL0U7O0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtNQUNsRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1Qjs7SUFFRCxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0dBQzdDLE1BQU07SUFDTCxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTTtRQUN6QixDQUFDLENBQUM7O0lBRU4sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7TUFDM0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDOztNQUVwRixRQUFRLEdBQUc7UUFDVCxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQzFELEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVB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
{
"name": "@mixmaxhq/sdk",
"version": "2.0.2",
"version": "2.0.4",
"description": "Our client-side SDK.",

@@ -17,6 +17,6 @@ "main": "dist/Mixmax.umd.js",

"start": "gulp",
"test": "NODE_ENV=test gulp test:e2e",
"build": "gulp build",
"upload": "env NODE_ENV=production gulp upload",
"ci": "npm test"
"ci": "exit 0"
},

@@ -41,3 +41,2 @@ "repository": {

"babel-preset-es2015": "^6.24.1",
"chai": "^4.1.2",
"concurrent-transform": "^1.0.0",

@@ -56,3 +55,2 @@ "del": "^3.0.0",

"gulp-waitfor": "^0.0.13",
"gulp-webdriver": "^2.0.3",
"gulp-webserver": "^0.9.1",

@@ -68,6 +66,2 @@ "multibuild": "^2.2.1",

"underscore": "^1.8.3",
"wdio-mocha-framework": "^0.5.11",
"wdio-sauce-service": "^0.4.4",
"wdio-selenium-standalone-service": "^0.0.9",
"webdriverio": "^4.10.0",
"yargs": "^3.25.0"

@@ -74,0 +68,0 @@ },

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc