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

@ngxs-contrib/emitter

Package Overview
Dependencies
Maintainers
3
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ngxs-contrib/emitter - npm Package Compare versions

Comparing version 1.0.4 to 1.0.5

152

bundles/ngxs-contrib-emitter.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@ngxs/store'), require('rxjs/operators')) :
typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@ngxs/store', 'rxjs/operators'], factory) :
(factory((global['ngxs-contrib'] = global['ngxs-contrib'] || {}, global['ngxs-contrib'].emitter = {}),global.ng.core,global.ngxs.store,global.rxjs.operators));
typeof define === 'function' && define.amd ? define('@ngxs-contrib/emitter', ['exports', '@angular/core', '@ngxs/store', 'rxjs/operators'], factory) :
(factory((global['ngxs-contrib'] = global['ngxs-contrib'] || {}, global['ngxs-contrib'].emitter = {}),global.ng.core,null,global.rxjs.operators));
}(this, (function (exports,core,store,operators) { 'use strict';
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
/**

@@ -121,3 +95,3 @@ * @fileoverview added by tsickle

*/
var InjectorAccessor = /** @class */ (function () {
var InjectorAccessor = (function () {
/**

@@ -137,8 +111,8 @@ * Creates InjectorAccessor instance

*/
function () {
if (this.injector === null) {
throw new Error("You've forgotten to import `NgxsEmitPluginModule`");
}
return this.injector;
};
function () {
if (this.injector === null) {
throw new Error("You've forgotten to import `NgxsEmitPluginModule`");
}
return this.injector;
};
/**

@@ -152,8 +126,36 @@ * Injector for accessing DI

/** @nocollapse */
InjectorAccessor.ctorParameters = function () { return [
{ type: core.Injector }
]; };
InjectorAccessor.ctorParameters = function () {
return [
{ type: core.Injector }
];
};
return InjectorAccessor;
}());
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b)
if (b.hasOwnProperty(p))
d[p] = b[p]; };
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
/**

@@ -167,3 +169,3 @@ * @fileoverview added by tsickle

*/
var EmitterAction = /** @class */ (function () {
var EmitterAction = (function () {
/**

@@ -188,3 +190,3 @@ * Creates EmitterAction instance

*/
var EmitStore = /** @class */ (function (_super) {
var EmitStore = (function (_super) {
__extends(EmitStore, _super);

@@ -204,16 +206,16 @@ function EmitStore() {

*/
function (receiver) {
var _this = this;
var /** @type {?} */ receiverEvent = receiver[RECEIVER_META_KEY];
if (!receiverEvent) {
throw new Error('Emitter methods should be decorated using @Emitter() decorator');
}
return {
emit: function (payload) {
EmitterAction.type = receiverEvent.type;
var /** @type {?} */ Action = receiverEvent.action ? receiverEvent.action : EmitterAction;
return _this.dispatch(new Action(payload));
function (receiver) {
var _this = this;
var /** @type {?} */ receiverEvent = receiver[RECEIVER_META_KEY];
if (!receiverEvent) {
throw new Error('Emitter methods should be decorated using @Emitter() decorator');
}
return {
emit: function (payload) {
EmitterAction.type = receiverEvent.type;
var /** @type {?} */ Action = receiverEvent.action ? receiverEvent.action : EmitterAction;
return _this.dispatch(new Action(payload));
}
};
};
};
EmitStore.decorators = [

@@ -250,3 +252,3 @@ { type: core.Injectable },

*/
var NgxsEmitPluginModule = /** @class */ (function () {
var NgxsEmitPluginModule = (function () {
function NgxsEmitPluginModule(injectorAccessor) {

@@ -261,7 +263,7 @@ this.injectorAccessor = injectorAccessor;

*/
function () {
return {
ngModule: NgxsEmitPluginModule
function () {
return {
ngModule: NgxsEmitPluginModule
};
};
};
NgxsEmitPluginModule.decorators = [

@@ -276,5 +278,7 @@ { type: core.NgModule, args: [{

/** @nocollapse */
NgxsEmitPluginModule.ctorParameters = function () { return [
{ type: InjectorAccessor, decorators: [{ type: core.Self }] }
]; };
NgxsEmitPluginModule.ctorParameters = function () {
return [
{ type: InjectorAccessor, decorators: [{ type: core.Self }] }
];
};
return NgxsEmitPluginModule;

@@ -291,18 +295,18 @@ }());

*
* @param {?} emitters
* @param {?} receivers - Array with references to the static functions
* @return {?} - A key-value map where a key is a type and value is `true`
*/
function getReceiverTypes(emitters) {
function getReceiverTypes(receivers) {
var /** @type {?} */ types = {};
var /** @type {?} */ i = emitters.length;
var /** @type {?} */ i = receivers.length;
while (i--) {
var /** @type {?} */ emitter = emitters[i];
var /** @type {?} */ isNotFunction = typeof emitter !== 'function';
var /** @type {?} */ receiver = receivers[i];
var /** @type {?} */ isNotFunction = typeof receiver !== 'function';
if (isNotFunction) {
throw new TypeError("Emitter should be a function, got " + emitter);
throw new TypeError("Receiver should be a function, got " + receiver);
}
var /** @type {?} */ meta = emitter[RECEIVER_META_KEY];
var /** @type {?} */ meta = receiver[RECEIVER_META_KEY];
var /** @type {?} */ isNotAnnotated = !meta || !meta.type;
if (isNotAnnotated) {
throw new Error(emitter.name + " should be decorated using @Receiver() decorator");
throw new Error(receiver.name + " should be decorated using @Receiver() decorator");
}

@@ -379,2 +383,12 @@ types[meta.type] = true;

/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
exports.Emitter = Emitter;

@@ -395,1 +409,3 @@ exports.ofEmittableDispatched = ofEmittableDispatched;

})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4cy1jb250cmliLWVtaXR0ZXIudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9Abmd4cy1jb250cmliL2VtaXR0ZXIvbGliL2NvcmUvaW50ZXJuYWwvaW50ZXJuYWxzLnRzIiwibmc6Ly9Abmd4cy1jb250cmliL2VtaXR0ZXIvbGliL2NvcmUvZGVjb3JhdG9ycy9yZWNlaXZlci50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL3NlcnZpY2VzL2luamVjdG9yLWFjY2Vzc29yLnNlcnZpY2UudHMiLG51bGwsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2FjdGlvbnMvYWN0aW9ucy50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL3NlcnZpY2VzL2VtaXQtc3RvcmUuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2RlY29yYXRvcnMvZW1pdHRlci50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9lbWl0Lm1vZHVsZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL29wZXJhdG9ycy9vZi1lbWl0dGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogU3RhdHVzIG9mIGEgZGlzcGF0Y2hlZCBhY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gQWN0aW9uU3RhdHVzIHtcbiAgICBEaXNwYXRjaGVkID0gJ0RJU1BBVENIRUQnLFxuICAgIFN1Y2Nlc3NmdWwgPSAnU1VDQ0VTU0ZVTCcsXG4gICAgQ2FuY2VsZWQgPSAnQ0FOQ0VMRUQnLFxuICAgIEVycm9yZWQgPSAnRVJST1JFRCcsXG59XG5cbi8qKlxuICogU3RhdGljIG1ldGFkYXRhIGZvciB0aGUgcmVjZWl2ZXIgZnVuY3Rpb25cbiAqXG4gKiBAcHJvcGVydHkgdHlwZSAtIEFjdGlvbiB0eXBlIChvcHRpb25hbClcbiAqIEBwcm9wZXJ0eSBhY3Rpb24gLSBDdXN0b20gYWN0aW9uIHRvIGRpc3BhdGNoIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlaXZlck1ldGFEYXRhPFQgZXh0ZW5kcyBGdW5jdGlvbiA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBhY3Rpb246IFR5cGU8VD4gJiB7XG4gICAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBQbGFpbiBvYmplY3QgdGhhdCBjb250YWlucyBgZW1pdGAgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIHBheWxvYWRcbiAqXG4gKiBAcHJvcGVydHkgZW1pdCAtIEZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyBwYXlsb2FkIHVuZGVyIHRoZSBob29kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdHRhYmxlPFQgPSBhbnksIFUgPSBhbnk+IHtcbiAgICBlbWl0KHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPjtcbn1cblxuLyoqXG4gKiBCYXNpYyB3cmFwcGVyIGFyb3VuZCBhY3Rpb25zXG4gKlxuICogQHByb3BlcnR5IHN0YXR1cyAtIFN0YXR1cyBvZiBkaXNwYXRjaGVkIGFjdGlvblxuICogQHByb3BlcnR5IGFjdGlvbiAtIEFjdGlvbiBpbnN0YW5jZVxuICogQHByb3BlcnR5IGVycm9yIC0gRXJyb3IgaWYgaGFwcGVuZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25Db250ZXh0IHtcbiAgICBzdGF0dXM6IEFjdGlvblN0YXR1cztcbiAgICBhY3Rpb246IGFueTtcbiAgICBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIEFjdGlvbiBjb250ZXh0IHRoYXQgbWFwcyBgb2ZFbWl0dGFibGVgIG9wZXJhdG9yXG4gKlxuICogQHByb3BlcnR5IHR5cGUgLSBBY3Rpb24gdHlwZVxuICogQHByb3BlcnR5IHBheWxvYWQgLSBEaXNwYXRjaGVkIGRhdGFcbiAqIEBwcm9wZXJ0eSBlcnJvciAtIEVycm9yIHRoYXQgaGFzIGJlZW4gdGhyb3dlZCBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8VCA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBwYXlsb2FkOiBUO1xuICAgIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIYXNobWFwIHRoYXQgY29udGFpbnMgdHlwZXMgdG8gZmlsdGVyIHVzaW5nIGBvZkVtaXR0YWJsZWAgb3BlcmF0b3JcbiAqXG4gKiBAcHJvcGVydHkga2V5IC0gQW55IHN0cmluZyBrZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlcyB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1FVEFfS0VZID0gJ05HWFNfTUVUQSc7XG5cbi8qKlxuICogQGNvbnN0IC0gVGhpcyBjb25zdGFudCBpcyBhIGtleSBmb3IgZGVmaW5pbmcgc3RhdGljIG1ldGFkYXRhIHVzaW5nIGBAUmVjZWl2ZXJgXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNFSVZFUl9NRVRBX0tFWSA9ICdOR1hTX1JFQ0VJVkVSX01FVEEnO1xuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgYEBuZ3hzL3N0b3JlYCBmdW5jdGlvbiBhbmQgbm90IGFjY2Vzc2FibGUgZnJvbSBvdXRzaWRlLCBldmVuIHVzaW5nIHRoZXRhIHN5bWJvbFxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUYXJnZXQgdG8gYXBwbHkgc3RhdGljIG1ldGFkYXRhIHRvXG4gKiBAcmV0dXJucyAtIFN0YXRpYyBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3RvcmVNZXRhZGF0YSh0YXJnZXQ6IEZ1bmN0aW9uKTogYW55IHtcbiAgICBpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShNRVRBX0tFWSkpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdE1ldGFkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgICAgICAgcGF0aDogbnVsbCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIE1FVEFfS0VZLCB7IHZhbHVlOiBkZWZhdWx0TWV0YWRhdGEgfSk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRhcmdldCAtIFRhcmdldCB0byBnZXQgc3RhdGljIG1ldGFkYXRhIGZyb21cbiAqIEByZXR1cm5zIC0gU3RhdGljIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIGdldFN0b3JlTWV0YWRhdGEodGFyZ2V0OiBGdW5jdGlvbik6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRhcmdldFtNRVRBX0tFWV07XG59XG4iLCJpbXBvcnQgeyBlbnN1cmVTdG9yZU1ldGFkYXRhLCBSZWNlaXZlck1ldGFEYXRhLCBSRUNFSVZFUl9NRVRBX0tFWSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIGEgbWV0aG9kIHdpdGggYSByZWNlaXZlciBpbmZvcm1hdGlvblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgc3RhdGljIG1ldGFkYXRhXG4gKiBAcmV0dXJucyAtIEZhY3RvcnkgZm9yIGRlY29yYXRpbmcgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWNlaXZlcihvcHRpb25zPzogUGFydGlhbDxSZWNlaXZlck1ldGFEYXRhPik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgcmV0dXJuIDxUPih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb25Pck5vdFN0YXRpYyA9ICFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0YXJnZXRba2V5XSAhPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICBpZiAoaXNOb3RGdW5jdGlvbk9yTm90U3RhdGljKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIGRlY29yYXRlZCB3aXRoIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGEgPSBlbnN1cmVTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hY3Rpb247XG4gICAgICAgIGNvbnN0IHR5cGVJc05vdFN0cmluZyA9IGFjdGlvbiAmJiB0eXBlb2YgYWN0aW9uLnR5cGUgIT09ICdzdHJpbmcnO1xuXG4gICAgICAgIGlmICh0eXBlSXNOb3RTdHJpbmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9uIHR5cGUgc2hvdWxkIGJlIGRlZmluZWQgYXMgYSBzdGF0aWMgcHJvcGVydHkgYHR5cGVgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSBhY3Rpb24gPyBhY3Rpb24udHlwZSEgOiAoKG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlKSB8fCBgJHt0YXJnZXQubmFtZX0uJHtrZXl9YCk7XG5cbiAgICAgICAgaWYgKG1ldGEuYWN0aW9uc1t0eXBlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgZGVjb3JhdGVkIHdpdGggc3VjaCB0eXBlIFxcYCR7dHlwZX1cXGAgYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGEuYWN0aW9uc1t0eXBlXSA9IFt7XG4gICAgICAgICAgICBmbjogYCR7a2V5fWAsXG4gICAgICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgfV07XG5cbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSFbUkVDRUlWRVJfTUVUQV9LRVldID0ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGFjdGlvblxuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBbGxvd3MgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byBnZXQgYWNjZXNzIHRvIHRoZSBESSBzdG9yZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW5qZWN0b3JBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogSW5qZWN0b3IgZm9yIGFjY2Vzc2luZyBESVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGluamVjdG9yOiBJbmplY3RvciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBJbmplY3RvckFjY2Vzc29yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgLSBSb290IGluamVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIEluamVjdG9yQWNjZXNzb3IuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyAtIEVycm9yIGlmIGBOZ3hzRW1pdFBsdWdpbk1vZHVsZWAgaXMgbm90IGltcG9ydGVkIG9yIGluamVjdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbmplY3RvcigpOiBuZXZlciB8IEluamVjdG9yIHtcbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91J3ZlIGZvcmdvdHRlbiB0byBpbXBvcnQgXFxgTmd4c0VtaXRQbHVnaW5Nb2R1bGVcXGBgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yO1xuICAgIH1cbn1cbiIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0geVtvcFswXSAmIDIgPyBcInJldHVyblwiIDogb3BbMF0gPyBcInRocm93XCIgOiBcIm5leHRcIl0pICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gWzAsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAob1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG4iLCIvKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBhcyBhIGRlZmF1bHQgYWN0aW9uIHdoZW4gdGhlIHVzZXIgZG9lc24ndCBwYXNzIGFueSBjdXN0b20gYWN0aW9uIGFzIGFuIGFyZ3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBFbWl0dGVyQWN0aW9uPFQgPSBhbnk+IHtcbiAgICAvKipcbiAgICAgKiBBY3Rpb24gdHlwZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgdHlwZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIEVtaXR0ZXJBY3Rpb24gaW5zdGFuY2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSB0byBkaXNwYXRjaFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkPzogVCkge31cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJFQ0VJVkVSX01FVEFfS0VZLCBFbWl0dGFibGUsIFJlY2VpdmVyTWV0YURhdGEgfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcm5hbHMnO1xuaW1wb3J0IHsgRW1pdHRlckFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9ucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbWl0U3RvcmUgZXh0ZW5kcyBTdG9yZSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHJlY2VpdmVyIC0gUmVmZXJlbmNlIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb24gZnJvbSB0aGUgc3RvcmVcbiAgICAgKiBAcmV0dXJucyAtIEEgcGxhaW4gb2JqZWN0IHdpdGggYW4gYGVtaXRgIGZ1bmN0aW9uIGZvciBjYWxsaW5nIGVtaXR0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZW1pdHRlcjxUID0gYW55LCBVID0gYW55PihyZWNlaXZlcjogRnVuY3Rpb24pOiBFbWl0dGFibGU8VCwgVT4ge1xuICAgICAgICBjb25zdCByZWNlaXZlckV2ZW50OiBSZWNlaXZlck1ldGFEYXRhID0gcmVjZWl2ZXJbUkVDRUlWRVJfTUVUQV9LRVldO1xuXG4gICAgICAgIGlmICghcmVjZWl2ZXJFdmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbWl0dGVyIG1ldGhvZHMgc2hvdWxkIGJlIGRlY29yYXRlZCB1c2luZyBARW1pdHRlcigpIGRlY29yYXRvcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtaXQ6IChwYXlsb2FkPzogVCk6IE9ic2VydmFibGU8VT4gPT4ge1xuICAgICAgICAgICAgICAgIEVtaXR0ZXJBY3Rpb24udHlwZSA9IHJlY2VpdmVyRXZlbnQudHlwZTtcbiAgICAgICAgICAgICAgICBjb25zdCBBY3Rpb246IGFueSB8IHR5cGVvZiBFbWl0dGVyQWN0aW9uID0gcmVjZWl2ZXJFdmVudC5hY3Rpb24gPyByZWNlaXZlckV2ZW50LmFjdGlvbiA6IEVtaXR0ZXJBY3Rpb247XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2gobmV3IEFjdGlvbihwYXlsb2FkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0b3JBY2Nlc3NvciB9IGZyb20gJy4uL3NlcnZpY2VzL2luamVjdG9yLWFjY2Vzc29yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1pdFN0b3JlIH0gZnJvbSAnLi4vc2VydmljZXMvZW1pdC1zdG9yZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBEZWNvcmF0ZXMgYSBwcm9wZXJ0eSBhbmQgZGVmaW5lcyBuZXcgZ2V0dGVyXG4gKlxuICogQHBhcmFtIHJlY2VpdmVyIC0gUmVmZXJlbmNlIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25cbiAqIEByZXR1cm5zIC0gRmFjdG9yeSBmdW5jdGlvbiBmb3IgZGVjb3JhdGluZyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbWl0dGVyKHJlY2VpdmVyOiBGdW5jdGlvbik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgICByZXR1cm4gKHRhcmdldDogT2JqZWN0LCBrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4ge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gSW5qZWN0b3JBY2Nlc3Nvci5nZXRJbmplY3RvcigpLmdldDxFbWl0U3RvcmU+KEVtaXRTdG9yZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmVtaXR0ZXIocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRW1pdFN0b3JlIH0gZnJvbSAnLi9jb3JlL3NlcnZpY2VzL2VtaXQtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBJbmplY3RvckFjY2Vzc29yIH0gZnJvbSAnLi9jb3JlL3NlcnZpY2VzL2luamVjdG9yLWFjY2Vzc29yLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBFbWl0U3RvcmUsXG4gICAgICAgIEluamVjdG9yQWNjZXNzb3JcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5neHNFbWl0UGx1Z2luTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQFNlbGYoKVxuICAgICAgICBwdWJsaWMgaW5qZWN0b3JBY2Nlc3NvcjogSW5qZWN0b3JBY2Nlc3NvclxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIC0gQSB3cmFwcGVyIGFyb3VuZCBgTmdNb2R1bGVgXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Tmd4c0VtaXRQbHVnaW5Nb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBOZ3hzRW1pdFBsdWdpbk1vZHVsZVxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIE9wZXJhdG9yRnVuY3Rpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBSRUNFSVZFUl9NRVRBX0tFWSwgQWN0aW9uU3RhdHVzLCBBY3Rpb25Db250ZXh0LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQsIFJlY2VpdmVyTWV0YURhdGEsIFR5cGVzIH0gZnJvbSAnLi4vaW50ZXJuYWwvaW50ZXJuYWxzJztcblxuLyoqXG4gKiBgZ2V0UmVjZWl2ZXJUeXBlcyhbQ291bnRlclN0YXRlLmluY3JlbWVudCwgQ291bnRlclN0YXRlLmRlY3JlbWVudF0pYFxuICogd2lsbCByZXR1cm4gYSBoYXNobWFwID0+IGB7ICdDb3VudGVyU3RhdGUuaW5jcmVtZW50JzogdHJ1ZSwgJ0NvdW50ZXJTdGF0ZS5kZWNyZW1lbnQnOiB0cnVlIH1gXG4gKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9uc1xuICogQHJldHVybnMgLSBBIGtleS12YWx1ZSBtYXAgd2hlcmUgYSBrZXkgaXMgYSB0eXBlIGFuZCB2YWx1ZSBpcyBgdHJ1ZWBcbiAqL1xuZnVuY3Rpb24gZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBUeXBlcyB7XG4gICAgY29uc3QgdHlwZXM6IFR5cGVzID0ge307XG5cbiAgICBsZXQgaSA9IHJlY2VpdmVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICBjb25zdCByZWNlaXZlciA9IHJlY2VpdmVyc1tpXTtcbiAgICAgICAgY29uc3QgaXNOb3RGdW5jdGlvbiA9IHR5cGVvZiByZWNlaXZlciAhPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICBpZiAoaXNOb3RGdW5jdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVjZWl2ZXIgc2hvdWxkIGJlIGEgZnVuY3Rpb24sIGdvdCAke3JlY2VpdmVyfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWV0YTogUmVjZWl2ZXJNZXRhRGF0YSA9IHJlY2VpdmVyW1JFQ0VJVkVSX01FVEFfS0VZXTtcbiAgICAgICAgY29uc3QgaXNOb3RBbm5vdGF0ZWQgPSAhbWV0YSB8fCAhbWV0YS50eXBlO1xuXG4gICAgICAgIGlmIChpc05vdEFubm90YXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3JlY2VpdmVyLm5hbWV9IHNob3VsZCBiZSBkZWNvcmF0ZWQgdXNpbmcgQFJlY2VpdmVyKCkgZGVjb3JhdG9yYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlc1ttZXRhLnR5cGVdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZURpc3BhdGNoZWQoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLkRpc3BhdGNoZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVTdWNjZXNzZnVsKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5TdWNjZXNzZnVsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlQ2FuY2VsZWQoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLkNhbmNlbGVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlRXJyb3JlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuRXJyb3JlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHR5cGVzIC0gSGFzaG1hcCB0aGF0IGNvbnRhaW5zIGFjdGlvbiB0eXBlc1xuICogQHBhcmFtIHN0YXR1cyAtIFN0YXR1cyBvZiB0aGUgZGlzcGF0Y2hlZCBhY3Rpb25cbiAqIEByZXR1cm5zIC0gUnhKUyBmYWN0b3J5IG9wZXJhdG9yIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZSh0eXBlczogVHlwZXMsIHN0YXR1czogQWN0aW9uU3RhdHVzKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIChzb3VyY2U6IE9ic2VydmFibGU8QWN0aW9uQ29udGV4dD4pID0+IHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChjdHg6IEFjdGlvbkNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNoTWFwSGFzVHlwZSA9IHR5cGVzW2dldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UoY3R4LmFjdGlvbildO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHRIYXNUcmFuc21pdHRlZFN0YXR1cyA9IGN0eC5zdGF0dXMgPT09IHN0YXR1cztcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFzaE1hcEhhc1R5cGUgJiYgY29udGV4dEhhc1RyYW5zbWl0dGVkU3RhdHVzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKHsgYWN0aW9uLCBlcnJvciB9OiBBY3Rpb25Db250ZXh0KSA9PiAoe1xuICAgICAgICAgICAgICAgIHR5cGU6IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UoYWN0aW9uKSxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgfTtcbn1cbiJdLCJuYW1lcyI6WyJJbmplY3RhYmxlIiwiSW5qZWN0b3IiLCJ0c2xpYl8xLl9fZXh0ZW5kcyIsIlN0b3JlIiwic3RvcmUiLCJOZ01vZHVsZSIsIlNlbGYiLCJmaWx0ZXIiLCJnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlIiwibWFwIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0lBdUVPLHFCQUFNLFFBQVEsR0FBRyxXQUFXLENBQUM7Ozs7QUFLcEMsSUFBTyxxQkFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQzs7Ozs7OztBQVF0RCxpQ0FBb0MsTUFBZ0I7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEMscUJBQU0sZUFBZSxHQUFHO2dCQUNwQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsRUFBRTtnQkFDWixJQUFJLEVBQUUsSUFBSTtnQkFDVixRQUFRLEVBQUUsRUFBRTtnQkFDWixRQUFRLEVBQUUsSUFBSTthQUNqQixDQUFDO1lBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7U0FDdkU7UUFDRCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ25DOzs7OztJQU1ELDBCQUEwQixNQUFnQjtRQUN0QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMzQjs7Ozs7O0FDekdEOzs7Ozs7QUFRQSxzQkFBeUIsT0FBbUM7UUFDeEQsT0FBTyxVQUFJLE1BQVcsRUFBRSxHQUFvQixFQUFFLFVBQXNDO1lBQ2hGLHFCQUFNLHdCQUF3QixHQUFHLENBQUMsVUFBVSxJQUFJLE9BQU8sVUFBVSxDQUFDLEtBQUssS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDO1lBRTVILElBQUksd0JBQXdCLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxTQUFTLENBQUMsbUVBQW1FLENBQUMsQ0FBQzthQUM1RjtZQUVELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO2dCQUN6QixHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3hCO1lBRUQscUJBQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pDLHFCQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN6QyxxQkFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7WUFFbEUsSUFBSSxlQUFlLEVBQUU7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQzthQUNoRjtZQUVELHFCQUFNLElBQUksR0FBVyxNQUFNLHNCQUFHLE1BQU0sQ0FBQyxJQUFJLE1BQUssQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksS0FBUSxNQUFNLENBQUMsSUFBSSxTQUFJLEdBQUssQ0FBQyxDQUFDO1lBRXBHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBcUMsSUFBSSxxQkFBbUIsQ0FBQyxDQUFDO2FBQ2pGO1lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO29CQUNsQixFQUFFLEVBQUUsS0FBRyxHQUFLO29CQUNaLE9BQU8sRUFBRSxFQUFFO29CQUNYLElBQUksTUFBQTtpQkFDUCxDQUFDLENBQUM7Y0FFSCxVQUFVLENBQUMsS0FBSyxHQUFFLGlCQUFpQixJQUFJO2dCQUNuQyxJQUFJLE1BQUE7Z0JBQ0osTUFBTSxRQUFBO2FBQ1Q7WUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHO2dCQUNwQixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQy9DLENBQUM7U0FDTCxDQUFDO0tBQ0w7Ozs7OztBQ2pERDs7Ozs7Ozs7O1FBaUJJLDBCQUFZLFFBQWtCO1lBQzFCLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDeEM7Ozs7UUFLYSw0QkFBVzs7OztnQkFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtvQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBcUQsQ0FBQyxDQUFDO2lCQUMxRTtnQkFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7O29DQW5Ca0IsSUFBSTs7b0JBTGxEQSxlQUFVOzs7Ozt3QkFMVUMsYUFBUTs7OytCQUE3Qjs7O0lDQUE7Ozs7Ozs7Ozs7Ozs7O0lBY0E7SUFFQSxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYztTQUNwQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUUvRSx1QkFBMEIsQ0FBQyxFQUFFLENBQUM7UUFDMUIsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQixnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUN2QyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7UUNWRyx1QkFBbUIsT0FBVztZQUFYLFlBQU8sR0FBUCxPQUFPLENBQUk7U0FBSTs7Ozs2QkFQRSxJQUFJOzRCQVA1Qzs7Ozs7Ozs7UUNTK0JDLDZCQUFLOzs7Ozs7Ozs7UUFLekIsMkJBQU87Ozs7O3NCQUFtQixRQUFrQjs7Z0JBQy9DLHFCQUFNLGFBQWEsR0FBcUIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBRXBFLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztpQkFDckY7Z0JBRUQsT0FBTztvQkFDSCxJQUFJLEVBQUUsVUFBQyxPQUFXO3dCQUNkLGFBQWEsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQzt3QkFDeEMscUJBQU0sTUFBTSxHQUErQixhQUFhLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO3dCQUN2RyxPQUFPLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztxQkFDN0M7aUJBQ0osQ0FBQzs7O29CQW5CVEYsZUFBVTs7d0JBUlg7TUFTK0JHLFdBQUs7Ozs7OztBQ1RwQzs7Ozs7O0FBU0EscUJBQXdCLFFBQWtCO1FBQ3RDLE9BQU8sVUFBQyxNQUFjLEVBQUUsR0FBb0I7WUFDeEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO2dCQUMvQixHQUFHLEVBQUU7b0JBQ0QscUJBQU1DLFFBQUssR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQVksU0FBUyxDQUFDLENBQUM7b0JBQ3ZFLE9BQU9BLFFBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ2xDO2FBQ0osQ0FBQyxDQUFDO1NBQ04sQ0FBQztLQUNMOzs7Ozs7QUNsQkQ7UUFZSSw4QkFFVyxnQkFBa0M7WUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtTQUN6Qzs7OztRQUtVLDRCQUFPOzs7O2dCQUNqQixPQUFPO29CQUNILFFBQVEsRUFBRSxvQkFBb0I7aUJBQ2pDLENBQUM7OztvQkFsQlRDLGFBQVEsU0FBQzt3QkFDTixTQUFTLEVBQUU7NEJBQ1AsU0FBUzs0QkFDVCxnQkFBZ0I7eUJBQ25CO3FCQUNKOzs7Ozt3QkFQUSxnQkFBZ0IsdUJBVWhCQyxTQUFJOzs7bUNBYmI7Ozs7Ozs7QUNBQTs7Ozs7OztJQWNBLDBCQUEwQixTQUFxQjtRQUMzQyxxQkFBTSxLQUFLLEdBQVUsRUFBRSxDQUFDO1FBRXhCLHFCQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDUixxQkFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLHFCQUFNLGFBQWEsR0FBRyxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUM7WUFFckQsSUFBSSxhQUFhLEVBQUU7Z0JBQ2YsTUFBTSxJQUFJLFNBQVMsQ0FBQyx3Q0FBc0MsUUFBVSxDQUFDLENBQUM7YUFDekU7WUFFRCxxQkFBTSxJQUFJLEdBQXFCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNELHFCQUFNLGNBQWMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFM0MsSUFBSSxjQUFjLEVBQUU7Z0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUksUUFBUSxDQUFDLElBQUkscURBQWtELENBQUMsQ0FBQzthQUN2RjtZQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzNCO1FBRUQsT0FBTyxLQUFLLENBQUM7S0FDaEI7Ozs7O0FBS0Q7UUFBc0MsbUJBQXdCO2FBQXhCLFVBQXdCLEVBQXhCLHFCQUF3QixFQUF4QixJQUF3QjtZQUF4Qiw4QkFBd0I7O1FBQzFELE9BQU8sV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxnQ0FBMEIsQ0FBQztLQUM1RTs7Ozs7QUFLRDtRQUFzQyxtQkFBd0I7YUFBeEIsVUFBd0IsRUFBeEIscUJBQXdCLEVBQXhCLElBQXdCO1lBQXhCLDhCQUF3Qjs7UUFDMUQsT0FBTyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGdDQUEwQixDQUFDO0tBQzVFOzs7OztBQUtEO1FBQW9DLG1CQUF3QjthQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7WUFBeEIsOEJBQXdCOztRQUN4RCxPQUFPLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsNEJBQXdCLENBQUM7S0FDMUU7Ozs7O0FBS0Q7UUFBbUMsbUJBQXdCO2FBQXhCLFVBQXdCLEVBQXhCLHFCQUF3QixFQUF4QixJQUF3QjtZQUF4Qiw4QkFBd0I7O1FBQ3ZELE9BQU8sV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQywwQkFBdUIsQ0FBQztLQUN6RTs7Ozs7O0FBT0QseUJBQTRCLEtBQVksRUFBRSxNQUFvQjtRQUMxRCxPQUFPLFVBQUMsTUFBaUM7WUFDckMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNkQyxnQkFBTSxDQUFDLFVBQUMsR0FBa0I7Z0JBQ3RCLHFCQUFNLGNBQWMsR0FBRyxLQUFLLENBQUNDLCtCQUF5QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxxQkFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQztnQkFDMUQsT0FBTyxjQUFjLElBQUksMkJBQTJCLENBQUM7YUFDeEQsQ0FBQyxFQUNGQyxhQUFHLENBQUMsVUFBQyxFQUFnQztvQkFBOUIsa0JBQU0sRUFBRSxnQkFBSztnQkFBc0IsUUFBQztvQkFDdkMsSUFBSSxFQUFFRCwrQkFBeUIsQ0FBQyxNQUFNLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsS0FBSyxPQUFBO2lCQUNSO2FBQUMsQ0FBQyxDQUNOLENBQUM7U0FDTCxDQUFDO0tBQ0w7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9

@@ -1,2 +0,2 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@ngxs/store"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@ngxs-contrib/emitter",["exports","@angular/core","@ngxs/store","rxjs/operators"],e):e((t["ngxs-contrib"]=t["ngxs-contrib"]||{},t["ngxs-contrib"].emitter={}),t.ng.core,null,t.rxjs.operators)}(this,function(t,r,i,e){"use strict";var n="NGXS_META",u="NGXS_RECEIVER_META";function a(t){if(!t.hasOwnProperty(n)){Object.defineProperty(t,n,{value:{name:null,actions:{},defaults:{},path:null,children:[],instance:null}})}return function e(t){return t[n]}(t)}var o=function(){function e(t){e.injector=t}return e.getInjector=function(){if(null===this.injector)throw new Error("You've forgotten to import `NgxsEmitPluginModule`");return this.injector},e.injector=null,e.decorators=[{type:r.Injectable}],e.ctorParameters=function(){return[{type:r.Injector}]},e}(),c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])};var f=function(){function t(t){this.payload=t}return t.type=null,t}(),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return function n(t,e){function r(){this.constructor=t}c(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(e,t),e.prototype.emitter=function(t){var r=this,n=t[u];if(!n)throw new Error("Emitter methods should be decorated using @Emitter() decorator");return{emit:function(t){f.type=n.type;var e=n.action?n.action:f;return r.dispatch(new e(t))}}},e.decorators=[{type:r.Injectable}],e}(i.Store);var p=function(){function t(t){this.injectorAccessor=t}return t.forRoot=function(){return{ngModule:t}},t.decorators=[{type:r.NgModule,args:[{providers:[s,o]}]}],t.ctorParameters=function(){return[{type:o,decorators:[{type:r.Self}]}]},t}();function l(t){for(var e={},r=t.length;r--;){var n=t[r];if("function"!=typeof n)throw new TypeError("Emitter should be a function, got "+n);var o=n[u];if(!o||!o.type)throw new Error(n.name+" should be decorated using @Receiver() decorator");e[o.type]=!0}return e}function y(n,o){return function(t){return t.pipe(e.filter(function(t){var e=n[i.getActionTypeFromInstance(t.action)],r=t.status===o;return e&&r}),e.map(function(t){var e=t.action,r=t.error;return{type:i.getActionTypeFromInstance(e),payload:e.payload,error:r}}))}}t.Emitter=function d(r){return function(t,e){Object.defineProperty(t,e,{get:function(){return o.getInjector().get(s).emitter(r)}})}},t.ofEmittableDispatched=function h(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return y(l(t),"DISPATCHED")},t.ofEmittableSuccessful=function g(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return y(l(t),"SUCCESSFUL")},t.ofEmittableCanceled=function E(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return y(l(t),"CANCELED")},t.ofEmittableErrored=function m(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return y(l(t),"ERRORED")},t.Receiver=function v(c){return function(t,e,r){if(!r||"function"!=typeof r.value||"function"!=typeof t[e])throw new TypeError("Only static functions can be decorated with @Receiver() decorator");"symbol"==typeof e&&(e=e.toString());var n=a(t),o=c&&c.action;if(o&&"string"!=typeof o.type)throw new Error("Action type should be defined as a static property `type`");var i=o?o.type:c&&c.type||t.name+"."+e;if(n.actions[i])throw new Error("Method decorated with such type `"+i+"` already exists");n.actions[i]=[{fn:""+e,options:{},type:i}],r.value[u]={type:i,action:o},t.prototype[e]=function(){return t[e].apply(t,arguments)}}},t.EmitterAction=f,t.NgxsEmitPluginModule=p,t.ɵb=y,t.ɵc=s,t.ɵd=o,Object.defineProperty(t,"__esModule",{value:!0})});
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@ngxs/store"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@ngxs-contrib/emitter",["exports","@angular/core","@ngxs/store","rxjs/operators"],e):e((t["ngxs-contrib"]=t["ngxs-contrib"]||{},t["ngxs-contrib"].emitter={}),t.ng.core,null,t.rxjs.operators)}(this,function(t,r,i,e){"use strict";var n="NGXS_META",u="NGXS_RECEIVER_META";function a(t){if(!t.hasOwnProperty(n)){Object.defineProperty(t,n,{value:{name:null,actions:{},defaults:{},path:null,children:[],instance:null}})}return function e(t){return t[n]}(t)}var o=function(){function e(t){e.injector=t}return e.getInjector=function(){if(null===this.injector)throw new Error("You've forgotten to import `NgxsEmitPluginModule`");return this.injector},e.injector=null,e.decorators=[{type:r.Injectable}],e.ctorParameters=function(){return[{type:r.Injector}]},e}(),c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])};var f=function(){function t(t){this.payload=t}return t.type=null,t}(),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return function n(t,e){function r(){this.constructor=t}c(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(e,t),e.prototype.emitter=function(t){var r=this,n=t[u];if(!n)throw new Error("Emitter methods should be decorated using @Emitter() decorator");return{emit:function(t){f.type=n.type;var e=n.action?n.action:f;return r.dispatch(new e(t))}}},e.decorators=[{type:r.Injectable}],e}(i.Store);var p=function(){function t(t){this.injectorAccessor=t}return t.forRoot=function(){return{ngModule:t}},t.decorators=[{type:r.NgModule,args:[{providers:[s,o]}]}],t.ctorParameters=function(){return[{type:o,decorators:[{type:r.Self}]}]},t}();function l(t){for(var e={},r=t.length;r--;){var n=t[r];if("function"!=typeof n)throw new TypeError("Receiver should be a function, got "+n);var o=n[u];if(!o||!o.type)throw new Error(n.name+" should be decorated using @Receiver() decorator");e[o.type]=!0}return e}function y(n,o){return function(t){return t.pipe(e.filter(function(t){var e=n[i.getActionTypeFromInstance(t.action)],r=t.status===o;return e&&r}),e.map(function(t){var e=t.action,r=t.error;return{type:i.getActionTypeFromInstance(e),payload:e.payload,error:r}}))}}t.Emitter=function d(r){return function(t,e){Object.defineProperty(t,e,{get:function(){return o.getInjector().get(s).emitter(r)}})}},t.ofEmittableDispatched=function h(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return y(l(t),"DISPATCHED")},t.ofEmittableSuccessful=function g(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return y(l(t),"SUCCESSFUL")},t.ofEmittableCanceled=function E(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return y(l(t),"CANCELED")},t.ofEmittableErrored=function m(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return y(l(t),"ERRORED")},t.Receiver=function v(c){return function(t,e,r){if(!r||"function"!=typeof r.value||"function"!=typeof t[e])throw new TypeError("Only static functions can be decorated with @Receiver() decorator");"symbol"==typeof e&&(e=e.toString());var n=a(t),o=c&&c.action;if(o&&"string"!=typeof o.type)throw new Error("Action type should be defined as a static property `type`");var i=o?o.type:c&&c.type||t.name+"."+e;if(n.actions[i])throw new Error("Method decorated with such type `"+i+"` already exists");n.actions[i]=[{fn:""+e,options:{},type:i}],r.value[u]={type:i,action:o},t.prototype[e]=function(){return t[e].apply(t,arguments)}}},t.EmitterAction=f,t.NgxsEmitPluginModule=p,t.ɵb=y,t.ɵc=s,t.ɵd=o,Object.defineProperty(t,"__esModule",{value:!0})});
//# sourceMappingURL=ngxs-contrib-emitter.umd.min.js.map

@@ -12,18 +12,18 @@ /**

*
* @param {?} emitters
* @param {?} receivers - Array with references to the static functions
* @return {?} - A key-value map where a key is a type and value is `true`
*/
function getReceiverTypes(emitters) {
function getReceiverTypes(receivers) {
const /** @type {?} */ types = {};
let /** @type {?} */ i = emitters.length;
let /** @type {?} */ i = receivers.length;
while (i--) {
const /** @type {?} */ emitter = emitters[i];
const /** @type {?} */ isNotFunction = typeof emitter !== 'function';
const /** @type {?} */ receiver = receivers[i];
const /** @type {?} */ isNotFunction = typeof receiver !== 'function';
if (isNotFunction) {
throw new TypeError(`Emitter should be a function, got ${emitter}`);
throw new TypeError(`Receiver should be a function, got ${receiver}`);
}
const /** @type {?} */ meta = emitter[RECEIVER_META_KEY];
const /** @type {?} */ meta = receiver[RECEIVER_META_KEY];
const /** @type {?} */ isNotAnnotated = !meta || !meta.type;
if (isNotAnnotated) {
throw new Error(`${emitter.name} should be decorated using @Receiver() decorator`);
throw new Error(`${receiver.name} should be decorated using @Receiver() decorator`);
}

@@ -81,2 +81,2 @@ types[meta.type] = true;

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2YtZW1pdHRhYmxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyLyIsInNvdXJjZXMiOlsibGliL2NvcmUvb3BlcmF0b3JzL29mLWVtaXR0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFrRixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQVMxSSwwQkFBMEIsUUFBb0I7SUFDMUMsdUJBQU0sS0FBSyxHQUFVLEVBQUUsQ0FBQztJQUV4QixxQkFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUN4QixPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVCx1QkFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLHVCQUFNLGFBQWEsR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUM7UUFFcEQsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLElBQUksU0FBUyxDQUFDLHFDQUFxQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsdUJBQU0sSUFBSSxHQUFxQixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxRCx1QkFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRTNDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLGtEQUFrRCxDQUFDLENBQUM7U0FDdEY7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztLQUMzQjtJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDaEI7Ozs7O0FBS0QsTUFBTSxnQ0FBZ0MsR0FBRyxTQUFxQjtJQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxnQ0FBMEIsQ0FBQztDQUM1RTs7Ozs7QUFLRCxNQUFNLGdDQUFnQyxHQUFHLFNBQXFCO0lBQzFELE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGdDQUEwQixDQUFDO0NBQzVFOzs7OztBQUtELE1BQU0sOEJBQThCLEdBQUcsU0FBcUI7SUFDeEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsNEJBQXdCLENBQUM7Q0FDMUU7Ozs7O0FBS0QsTUFBTSw2QkFBNkIsR0FBRyxTQUFxQjtJQUN2RCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQywwQkFBdUIsQ0FBQztDQUN6RTs7Ozs7O0FBT0QsTUFBTSxzQkFBc0IsS0FBWSxFQUFFLE1BQW9CO0lBQzFELE1BQU0sQ0FBQyxDQUFDLE1BQWlDLEVBQUUsRUFBRTtRQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxNQUFNLENBQUMsQ0FBQyxHQUFrQixFQUFFLEVBQUU7WUFDMUIsdUJBQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNwRSx1QkFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQztZQUMxRCxNQUFNLENBQUMsY0FBYyxJQUFJLDJCQUEyQixDQUFDO1NBQ3hELENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztZQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsS0FBSztTQUNSLENBQUMsQ0FBQyxDQUNOLENBQUM7S0FDTCxDQUFDO0NBQ0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUkVDRUlWRVJfTUVUQV9LRVksIEFjdGlvblN0YXR1cywgQWN0aW9uQ29udGV4dCwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0LCBSZWNlaXZlck1ldGFEYXRhLCBUeXBlcyB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogYGdldFJlY2VpdmVyVHlwZXMoW0NvdW50ZXJTdGF0ZS5pbmNyZW1lbnQsIENvdW50ZXJTdGF0ZS5kZWNyZW1lbnRdKWBcbiAqIHdpbGwgcmV0dXJuIGEgaGFzaG1hcCA9PiBgeyAnQ291bnRlclN0YXRlLmluY3JlbWVudCc6IHRydWUsICdDb3VudGVyU3RhdGUuZGVjcmVtZW50JzogdHJ1ZSB9YFxuICpcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIC0gQSBrZXktdmFsdWUgbWFwIHdoZXJlIGEga2V5IGlzIGEgdHlwZSBhbmQgdmFsdWUgaXMgYHRydWVgXG4gKi9cbmZ1bmN0aW9uIGdldFJlY2VpdmVyVHlwZXMoZW1pdHRlcnM6IEZ1bmN0aW9uW10pOiBUeXBlcyB7XG4gICAgY29uc3QgdHlwZXM6IFR5cGVzID0ge307XG5cbiAgICBsZXQgaSA9IGVtaXR0ZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnN0IGVtaXR0ZXIgPSBlbWl0dGVyc1tpXTtcbiAgICAgICAgY29uc3QgaXNOb3RGdW5jdGlvbiA9IHR5cGVvZiBlbWl0dGVyICE9PSAnZnVuY3Rpb24nO1xuXG4gICAgICAgIGlmIChpc05vdEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFbWl0dGVyIHNob3VsZCBiZSBhIGZ1bmN0aW9uLCBnb3QgJHtlbWl0dGVyfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWV0YTogUmVjZWl2ZXJNZXRhRGF0YSA9IGVtaXR0ZXJbUkVDRUlWRVJfTUVUQV9LRVldO1xuICAgICAgICBjb25zdCBpc05vdEFubm90YXRlZCA9ICFtZXRhIHx8ICFtZXRhLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzTm90QW5ub3RhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW1pdHRlci5uYW1lfSBzaG91bGQgYmUgZGVjb3JhdGVkIHVzaW5nIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdHlwZXNbbWV0YS50eXBlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVEaXNwYXRjaGVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlU3VjY2Vzc2Z1bCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuU3VjY2Vzc2Z1bCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZUNhbmNlbGVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5DYW5jZWxlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZUVycm9yZWQoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLkVycm9yZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eXBlcyAtIEhhc2htYXAgdGhhdCBjb250YWlucyBhY3Rpb24gdHlwZXNcbiAqIEBwYXJhbSBzdGF0dXMgLSBTdGF0dXMgb2YgdGhlIGRpc3BhdGNoZWQgYWN0aW9uXG4gKiBAcmV0dXJucyAtIFJ4SlMgZmFjdG9yeSBvcGVyYXRvciBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGUodHlwZXM6IFR5cGVzLCBzdGF0dXM6IEFjdGlvblN0YXR1cyk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPEFjdGlvbkNvbnRleHQ+KSA9PiB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoY3R4OiBBY3Rpb25Db250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzaE1hcEhhc1R5cGUgPSB0eXBlc1tnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGN0eC5hY3Rpb24pXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0SGFzVHJhbnNtaXR0ZWRTdGF0dXMgPSBjdHguc3RhdHVzID09PSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hNYXBIYXNUeXBlICYmIGNvbnRleHRIYXNUcmFuc21pdHRlZFN0YXR1cztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKCh7IGFjdGlvbiwgZXJyb3IgfTogQWN0aW9uQ29udGV4dCkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgIH07XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2YtZW1pdHRhYmxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyLyIsInNvdXJjZXMiOlsibGliL2NvcmUvb3BlcmF0b3JzL29mLWVtaXR0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFrRixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQVMxSSwwQkFBMEIsU0FBcUI7SUFDM0MsdUJBQU0sS0FBSyxHQUFVLEVBQUUsQ0FBQztJQUV4QixxQkFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUN6QixPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVCx1QkFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLHVCQUFNLGFBQWEsR0FBRyxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUM7UUFFckQsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLElBQUksU0FBUyxDQUFDLHNDQUFzQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsdUJBQU0sSUFBSSxHQUFxQixRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzRCx1QkFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRTNDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLGtEQUFrRCxDQUFDLENBQUM7U0FDdkY7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztLQUMzQjtJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDaEI7Ozs7O0FBS0QsTUFBTSxnQ0FBZ0MsR0FBRyxTQUFxQjtJQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxnQ0FBMEIsQ0FBQztDQUM1RTs7Ozs7QUFLRCxNQUFNLGdDQUFnQyxHQUFHLFNBQXFCO0lBQzFELE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGdDQUEwQixDQUFDO0NBQzVFOzs7OztBQUtELE1BQU0sOEJBQThCLEdBQUcsU0FBcUI7SUFDeEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsNEJBQXdCLENBQUM7Q0FDMUU7Ozs7O0FBS0QsTUFBTSw2QkFBNkIsR0FBRyxTQUFxQjtJQUN2RCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQywwQkFBdUIsQ0FBQztDQUN6RTs7Ozs7O0FBT0QsTUFBTSxzQkFBc0IsS0FBWSxFQUFFLE1BQW9CO0lBQzFELE1BQU0sQ0FBQyxDQUFDLE1BQWlDLEVBQUUsRUFBRTtRQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxNQUFNLENBQUMsQ0FBQyxHQUFrQixFQUFFLEVBQUU7WUFDMUIsdUJBQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNwRSx1QkFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQztZQUMxRCxNQUFNLENBQUMsY0FBYyxJQUFJLDJCQUEyQixDQUFDO1NBQ3hELENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztZQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsS0FBSztTQUNSLENBQUMsQ0FBQyxDQUNOLENBQUM7S0FDTCxDQUFDO0NBQ0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUkVDRUlWRVJfTUVUQV9LRVksIEFjdGlvblN0YXR1cywgQWN0aW9uQ29udGV4dCwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0LCBSZWNlaXZlck1ldGFEYXRhLCBUeXBlcyB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogYGdldFJlY2VpdmVyVHlwZXMoW0NvdW50ZXJTdGF0ZS5pbmNyZW1lbnQsIENvdW50ZXJTdGF0ZS5kZWNyZW1lbnRdKWBcbiAqIHdpbGwgcmV0dXJuIGEgaGFzaG1hcCA9PiBgeyAnQ291bnRlclN0YXRlLmluY3JlbWVudCc6IHRydWUsICdDb3VudGVyU3RhdGUuZGVjcmVtZW50JzogdHJ1ZSB9YFxuICpcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIC0gQSBrZXktdmFsdWUgbWFwIHdoZXJlIGEga2V5IGlzIGEgdHlwZSBhbmQgdmFsdWUgaXMgYHRydWVgXG4gKi9cbmZ1bmN0aW9uIGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogVHlwZXMge1xuICAgIGNvbnN0IHR5cGVzOiBUeXBlcyA9IHt9O1xuXG4gICAgbGV0IGkgPSByZWNlaXZlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnNbaV07XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb24gPSB0eXBlb2YgcmVjZWl2ZXIgIT09ICdmdW5jdGlvbic7XG5cbiAgICAgICAgaWYgKGlzTm90RnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlY2VpdmVyIHNob3VsZCBiZSBhIGZ1bmN0aW9uLCBnb3QgJHtyZWNlaXZlcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGE6IFJlY2VpdmVyTWV0YURhdGEgPSByZWNlaXZlcltSRUNFSVZFUl9NRVRBX0tFWV07XG4gICAgICAgIGNvbnN0IGlzTm90QW5ub3RhdGVkID0gIW1ldGEgfHwgIW1ldGEudHlwZTtcblxuICAgICAgICBpZiAoaXNOb3RBbm5vdGF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZWNlaXZlci5uYW1lfSBzaG91bGQgYmUgZGVjb3JhdGVkIHVzaW5nIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdHlwZXNbbWV0YS50eXBlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVEaXNwYXRjaGVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlU3VjY2Vzc2Z1bCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuU3VjY2Vzc2Z1bCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZUNhbmNlbGVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5DYW5jZWxlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZUVycm9yZWQoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLkVycm9yZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eXBlcyAtIEhhc2htYXAgdGhhdCBjb250YWlucyBhY3Rpb24gdHlwZXNcbiAqIEBwYXJhbSBzdGF0dXMgLSBTdGF0dXMgb2YgdGhlIGRpc3BhdGNoZWQgYWN0aW9uXG4gKiBAcmV0dXJucyAtIFJ4SlMgZmFjdG9yeSBvcGVyYXRvciBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGUodHlwZXM6IFR5cGVzLCBzdGF0dXM6IEFjdGlvblN0YXR1cyk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPEFjdGlvbkNvbnRleHQ+KSA9PiB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoY3R4OiBBY3Rpb25Db250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzaE1hcEhhc1R5cGUgPSB0eXBlc1tnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGN0eC5hY3Rpb24pXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0SGFzVHJhbnNtaXR0ZWRTdGF0dXMgPSBjdHguc3RhdHVzID09PSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hNYXBIYXNUeXBlICYmIGNvbnRleHRIYXNUcmFuc21pdHRlZFN0YXR1cztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKCh7IGFjdGlvbiwgZXJyb3IgfTogQWN0aW9uQ29udGV4dCkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgIH07XG59XG4iXX0=

@@ -12,18 +12,18 @@ /**

*
* @param {?} emitters
* @param {?} receivers - Array with references to the static functions
* @return {?} - A key-value map where a key is a type and value is `true`
*/
function getReceiverTypes(emitters) {
function getReceiverTypes(receivers) {
var /** @type {?} */ types = {};
var /** @type {?} */ i = emitters.length;
var /** @type {?} */ i = receivers.length;
while (i--) {
var /** @type {?} */ emitter = emitters[i];
var /** @type {?} */ isNotFunction = typeof emitter !== 'function';
var /** @type {?} */ receiver = receivers[i];
var /** @type {?} */ isNotFunction = typeof receiver !== 'function';
if (isNotFunction) {
throw new TypeError("Emitter should be a function, got " + emitter);
throw new TypeError("Receiver should be a function, got " + receiver);
}
var /** @type {?} */ meta = emitter[RECEIVER_META_KEY];
var /** @type {?} */ meta = receiver[RECEIVER_META_KEY];
var /** @type {?} */ isNotAnnotated = !meta || !meta.type;
if (isNotAnnotated) {
throw new Error(emitter.name + " should be decorated using @Receiver() decorator");
throw new Error(receiver.name + " should be decorated using @Receiver() decorator");
}

@@ -100,2 +100,2 @@ types[meta.type] = true;

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2YtZW1pdHRhYmxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyLyIsInNvdXJjZXMiOlsibGliL2NvcmUvb3BlcmF0b3JzL29mLWVtaXR0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFrRixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQVMxSSwwQkFBMEIsUUFBb0I7SUFDMUMscUJBQU0sS0FBSyxHQUFVLEVBQUUsQ0FBQztJQUV4QixxQkFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUN4QixPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVCxxQkFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLHFCQUFNLGFBQWEsR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUM7UUFFcEQsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLElBQUksU0FBUyxDQUFDLHVDQUFxQyxPQUFTLENBQUMsQ0FBQztTQUN2RTtRQUVELHFCQUFNLElBQUksR0FBcUIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUQscUJBQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUUzQyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUksT0FBTyxDQUFDLElBQUkscURBQWtELENBQUMsQ0FBQztTQUN0RjtRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQzNCO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUNoQjs7Ozs7QUFLRCxNQUFNO0lBQWdDLG1CQUF3QjtTQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7UUFBeEIsOEJBQXdCOztJQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxnQ0FBMEIsQ0FBQztDQUM1RTs7Ozs7QUFLRCxNQUFNO0lBQWdDLG1CQUF3QjtTQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7UUFBeEIsOEJBQXdCOztJQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxnQ0FBMEIsQ0FBQztDQUM1RTs7Ozs7QUFLRCxNQUFNO0lBQThCLG1CQUF3QjtTQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7UUFBeEIsOEJBQXdCOztJQUN4RCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyw0QkFBd0IsQ0FBQztDQUMxRTs7Ozs7QUFLRCxNQUFNO0lBQTZCLG1CQUF3QjtTQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7UUFBeEIsOEJBQXdCOztJQUN2RCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQywwQkFBdUIsQ0FBQztDQUN6RTs7Ozs7O0FBT0QsTUFBTSxzQkFBc0IsS0FBWSxFQUFFLE1BQW9CO0lBQzFELE1BQU0sQ0FBQyxVQUFDLE1BQWlDO1FBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLE1BQU0sQ0FBQyxVQUFDLEdBQWtCO1lBQ3RCLHFCQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEUscUJBQU0sMkJBQTJCLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7WUFDMUQsTUFBTSxDQUFDLGNBQWMsSUFBSSwyQkFBMkIsQ0FBQztTQUN4RCxDQUFDLEVBQ0YsR0FBRyxDQUFDLFVBQUMsRUFBZ0M7Z0JBQTlCLGtCQUFNLEVBQUUsZ0JBQUs7WUFBc0IsT0FBQSxDQUFDO2dCQUN2QyxJQUFJLEVBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDO2dCQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLEtBQUssT0FBQTthQUNSLENBQUM7UUFKd0MsQ0FJeEMsQ0FBQyxDQUNOLENBQUM7S0FDTCxDQUFDO0NBQ0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUkVDRUlWRVJfTUVUQV9LRVksIEFjdGlvblN0YXR1cywgQWN0aW9uQ29udGV4dCwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0LCBSZWNlaXZlck1ldGFEYXRhLCBUeXBlcyB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogYGdldFJlY2VpdmVyVHlwZXMoW0NvdW50ZXJTdGF0ZS5pbmNyZW1lbnQsIENvdW50ZXJTdGF0ZS5kZWNyZW1lbnRdKWBcbiAqIHdpbGwgcmV0dXJuIGEgaGFzaG1hcCA9PiBgeyAnQ291bnRlclN0YXRlLmluY3JlbWVudCc6IHRydWUsICdDb3VudGVyU3RhdGUuZGVjcmVtZW50JzogdHJ1ZSB9YFxuICpcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIC0gQSBrZXktdmFsdWUgbWFwIHdoZXJlIGEga2V5IGlzIGEgdHlwZSBhbmQgdmFsdWUgaXMgYHRydWVgXG4gKi9cbmZ1bmN0aW9uIGdldFJlY2VpdmVyVHlwZXMoZW1pdHRlcnM6IEZ1bmN0aW9uW10pOiBUeXBlcyB7XG4gICAgY29uc3QgdHlwZXM6IFR5cGVzID0ge307XG5cbiAgICBsZXQgaSA9IGVtaXR0ZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnN0IGVtaXR0ZXIgPSBlbWl0dGVyc1tpXTtcbiAgICAgICAgY29uc3QgaXNOb3RGdW5jdGlvbiA9IHR5cGVvZiBlbWl0dGVyICE9PSAnZnVuY3Rpb24nO1xuXG4gICAgICAgIGlmIChpc05vdEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFbWl0dGVyIHNob3VsZCBiZSBhIGZ1bmN0aW9uLCBnb3QgJHtlbWl0dGVyfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWV0YTogUmVjZWl2ZXJNZXRhRGF0YSA9IGVtaXR0ZXJbUkVDRUlWRVJfTUVUQV9LRVldO1xuICAgICAgICBjb25zdCBpc05vdEFubm90YXRlZCA9ICFtZXRhIHx8ICFtZXRhLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzTm90QW5ub3RhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW1pdHRlci5uYW1lfSBzaG91bGQgYmUgZGVjb3JhdGVkIHVzaW5nIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdHlwZXNbbWV0YS50eXBlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVEaXNwYXRjaGVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlU3VjY2Vzc2Z1bCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuU3VjY2Vzc2Z1bCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZUNhbmNlbGVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5DYW5jZWxlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZUVycm9yZWQoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLkVycm9yZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eXBlcyAtIEhhc2htYXAgdGhhdCBjb250YWlucyBhY3Rpb24gdHlwZXNcbiAqIEBwYXJhbSBzdGF0dXMgLSBTdGF0dXMgb2YgdGhlIGRpc3BhdGNoZWQgYWN0aW9uXG4gKiBAcmV0dXJucyAtIFJ4SlMgZmFjdG9yeSBvcGVyYXRvciBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGUodHlwZXM6IFR5cGVzLCBzdGF0dXM6IEFjdGlvblN0YXR1cyk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPEFjdGlvbkNvbnRleHQ+KSA9PiB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoY3R4OiBBY3Rpb25Db250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzaE1hcEhhc1R5cGUgPSB0eXBlc1tnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGN0eC5hY3Rpb24pXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0SGFzVHJhbnNtaXR0ZWRTdGF0dXMgPSBjdHguc3RhdHVzID09PSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hNYXBIYXNUeXBlICYmIGNvbnRleHRIYXNUcmFuc21pdHRlZFN0YXR1cztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKCh7IGFjdGlvbiwgZXJyb3IgfTogQWN0aW9uQ29udGV4dCkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgIH07XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2YtZW1pdHRhYmxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyLyIsInNvdXJjZXMiOlsibGliL2NvcmUvb3BlcmF0b3JzL29mLWVtaXR0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFrRixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQVMxSSwwQkFBMEIsU0FBcUI7SUFDM0MscUJBQU0sS0FBSyxHQUFVLEVBQUUsQ0FBQztJQUV4QixxQkFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUN6QixPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVCxxQkFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLHFCQUFNLGFBQWEsR0FBRyxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUM7UUFFckQsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoQixNQUFNLElBQUksU0FBUyxDQUFDLHdDQUFzQyxRQUFVLENBQUMsQ0FBQztTQUN6RTtRQUVELHFCQUFNLElBQUksR0FBcUIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0QscUJBQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUUzQyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUksUUFBUSxDQUFDLElBQUkscURBQWtELENBQUMsQ0FBQztTQUN2RjtRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQzNCO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUNoQjs7Ozs7QUFLRCxNQUFNO0lBQWdDLG1CQUF3QjtTQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7UUFBeEIsOEJBQXdCOztJQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxnQ0FBMEIsQ0FBQztDQUM1RTs7Ozs7QUFLRCxNQUFNO0lBQWdDLG1CQUF3QjtTQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7UUFBeEIsOEJBQXdCOztJQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxnQ0FBMEIsQ0FBQztDQUM1RTs7Ozs7QUFLRCxNQUFNO0lBQThCLG1CQUF3QjtTQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7UUFBeEIsOEJBQXdCOztJQUN4RCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyw0QkFBd0IsQ0FBQztDQUMxRTs7Ozs7QUFLRCxNQUFNO0lBQTZCLG1CQUF3QjtTQUF4QixVQUF3QixFQUF4QixxQkFBd0IsRUFBeEIsSUFBd0I7UUFBeEIsOEJBQXdCOztJQUN2RCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQywwQkFBdUIsQ0FBQztDQUN6RTs7Ozs7O0FBT0QsTUFBTSxzQkFBc0IsS0FBWSxFQUFFLE1BQW9CO0lBQzFELE1BQU0sQ0FBQyxVQUFDLE1BQWlDO1FBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLE1BQU0sQ0FBQyxVQUFDLEdBQWtCO1lBQ3RCLHFCQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEUscUJBQU0sMkJBQTJCLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7WUFDMUQsTUFBTSxDQUFDLGNBQWMsSUFBSSwyQkFBMkIsQ0FBQztTQUN4RCxDQUFDLEVBQ0YsR0FBRyxDQUFDLFVBQUMsRUFBZ0M7Z0JBQTlCLGtCQUFNLEVBQUUsZ0JBQUs7WUFBc0IsT0FBQSxDQUFDO2dCQUN2QyxJQUFJLEVBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDO2dCQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLEtBQUssT0FBQTthQUNSLENBQUM7UUFKd0MsQ0FJeEMsQ0FBQyxDQUNOLENBQUM7S0FDTCxDQUFDO0NBQ0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUkVDRUlWRVJfTUVUQV9LRVksIEFjdGlvblN0YXR1cywgQWN0aW9uQ29udGV4dCwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0LCBSZWNlaXZlck1ldGFEYXRhLCBUeXBlcyB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogYGdldFJlY2VpdmVyVHlwZXMoW0NvdW50ZXJTdGF0ZS5pbmNyZW1lbnQsIENvdW50ZXJTdGF0ZS5kZWNyZW1lbnRdKWBcbiAqIHdpbGwgcmV0dXJuIGEgaGFzaG1hcCA9PiBgeyAnQ291bnRlclN0YXRlLmluY3JlbWVudCc6IHRydWUsICdDb3VudGVyU3RhdGUuZGVjcmVtZW50JzogdHJ1ZSB9YFxuICpcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIC0gQSBrZXktdmFsdWUgbWFwIHdoZXJlIGEga2V5IGlzIGEgdHlwZSBhbmQgdmFsdWUgaXMgYHRydWVgXG4gKi9cbmZ1bmN0aW9uIGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogVHlwZXMge1xuICAgIGNvbnN0IHR5cGVzOiBUeXBlcyA9IHt9O1xuXG4gICAgbGV0IGkgPSByZWNlaXZlcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnNbaV07XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb24gPSB0eXBlb2YgcmVjZWl2ZXIgIT09ICdmdW5jdGlvbic7XG5cbiAgICAgICAgaWYgKGlzTm90RnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlY2VpdmVyIHNob3VsZCBiZSBhIGZ1bmN0aW9uLCBnb3QgJHtyZWNlaXZlcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGE6IFJlY2VpdmVyTWV0YURhdGEgPSByZWNlaXZlcltSRUNFSVZFUl9NRVRBX0tFWV07XG4gICAgICAgIGNvbnN0IGlzTm90QW5ub3RhdGVkID0gIW1ldGEgfHwgIW1ldGEudHlwZTtcblxuICAgICAgICBpZiAoaXNOb3RBbm5vdGF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZWNlaXZlci5uYW1lfSBzaG91bGQgYmUgZGVjb3JhdGVkIHVzaW5nIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdHlwZXNbbWV0YS50eXBlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVEaXNwYXRjaGVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlU3VjY2Vzc2Z1bCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuU3VjY2Vzc2Z1bCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZUNhbmNlbGVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5DYW5jZWxlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZUVycm9yZWQoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLkVycm9yZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eXBlcyAtIEhhc2htYXAgdGhhdCBjb250YWlucyBhY3Rpb24gdHlwZXNcbiAqIEBwYXJhbSBzdGF0dXMgLSBTdGF0dXMgb2YgdGhlIGRpc3BhdGNoZWQgYWN0aW9uXG4gKiBAcmV0dXJucyAtIFJ4SlMgZmFjdG9yeSBvcGVyYXRvciBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGUodHlwZXM6IFR5cGVzLCBzdGF0dXM6IEFjdGlvblN0YXR1cyk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPEFjdGlvbkNvbnRleHQ+KSA9PiB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoY3R4OiBBY3Rpb25Db250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzaE1hcEhhc1R5cGUgPSB0eXBlc1tnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGN0eC5hY3Rpb24pXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0SGFzVHJhbnNtaXR0ZWRTdGF0dXMgPSBjdHguc3RhdHVzID09PSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc2hNYXBIYXNUeXBlICYmIGNvbnRleHRIYXNUcmFuc21pdHRlZFN0YXR1cztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKCh7IGFjdGlvbiwgZXJyb3IgfTogQWN0aW9uQ29udGV4dCkgPT4gKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgIH07XG59XG4iXX0=

@@ -237,18 +237,18 @@ import { Injectable, Injector, NgModule, Self } from '@angular/core';

*
* @param {?} emitters
* @param {?} receivers - Array with references to the static functions
* @return {?} - A key-value map where a key is a type and value is `true`
*/
function getReceiverTypes(emitters) {
function getReceiverTypes(receivers) {
const /** @type {?} */ types = {};
let /** @type {?} */ i = emitters.length;
let /** @type {?} */ i = receivers.length;
while (i--) {
const /** @type {?} */ emitter = emitters[i];
const /** @type {?} */ isNotFunction = typeof emitter !== 'function';
const /** @type {?} */ receiver = receivers[i];
const /** @type {?} */ isNotFunction = typeof receiver !== 'function';
if (isNotFunction) {
throw new TypeError(`Emitter should be a function, got ${emitter}`);
throw new TypeError(`Receiver should be a function, got ${receiver}`);
}
const /** @type {?} */ meta = emitter[RECEIVER_META_KEY];
const /** @type {?} */ meta = receiver[RECEIVER_META_KEY];
const /** @type {?} */ isNotAnnotated = !meta || !meta.type;
if (isNotAnnotated) {
throw new Error(`${emitter.name} should be decorated using @Receiver() decorator`);
throw new Error(`${receiver.name} should be decorated using @Receiver() decorator`);
}

@@ -318,2 +318,2 @@ types[meta.type] = true;

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4cy1jb250cmliLWVtaXR0ZXIuanMubWFwIiwic291cmNlcyI6WyJuZzovL0BuZ3hzLWNvbnRyaWIvZW1pdHRlci9saWIvY29yZS9pbnRlcm5hbC9pbnRlcm5hbHMudHMiLCJuZzovL0BuZ3hzLWNvbnRyaWIvZW1pdHRlci9saWIvY29yZS9kZWNvcmF0b3JzL3JlY2VpdmVyLnRzIiwibmc6Ly9Abmd4cy1jb250cmliL2VtaXR0ZXIvbGliL2NvcmUvc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2FjdGlvbnMvYWN0aW9ucy50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL3NlcnZpY2VzL2VtaXQtc3RvcmUuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2RlY29yYXRvcnMvZW1pdHRlci50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9lbWl0Lm1vZHVsZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL29wZXJhdG9ycy9vZi1lbWl0dGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogU3RhdHVzIG9mIGEgZGlzcGF0Y2hlZCBhY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gQWN0aW9uU3RhdHVzIHtcbiAgICBEaXNwYXRjaGVkID0gJ0RJU1BBVENIRUQnLFxuICAgIFN1Y2Nlc3NmdWwgPSAnU1VDQ0VTU0ZVTCcsXG4gICAgQ2FuY2VsZWQgPSAnQ0FOQ0VMRUQnLFxuICAgIEVycm9yZWQgPSAnRVJST1JFRCcsXG59XG5cbi8qKlxuICogU3RhdGljIG1ldGFkYXRhIGZvciB0aGUgcmVjZWl2ZXIgZnVuY3Rpb25cbiAqXG4gKiBAcHJvcGVydHkgdHlwZSAtIEFjdGlvbiB0eXBlIChvcHRpb25hbClcbiAqIEBwcm9wZXJ0eSBhY3Rpb24gLSBDdXN0b20gYWN0aW9uIHRvIGRpc3BhdGNoIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlaXZlck1ldGFEYXRhPFQgZXh0ZW5kcyBGdW5jdGlvbiA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBhY3Rpb246IFR5cGU8VD4gJiB7XG4gICAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBQbGFpbiBvYmplY3QgdGhhdCBjb250YWlucyBgZW1pdGAgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIHBheWxvYWRcbiAqXG4gKiBAcHJvcGVydHkgZW1pdCAtIEZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyBwYXlsb2FkIHVuZGVyIHRoZSBob29kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdHRhYmxlPFQgPSBhbnksIFUgPSBhbnk+IHtcbiAgICBlbWl0KHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPjtcbn1cblxuLyoqXG4gKiBCYXNpYyB3cmFwcGVyIGFyb3VuZCBhY3Rpb25zXG4gKlxuICogQHByb3BlcnR5IHN0YXR1cyAtIFN0YXR1cyBvZiBkaXNwYXRjaGVkIGFjdGlvblxuICogQHByb3BlcnR5IGFjdGlvbiAtIEFjdGlvbiBpbnN0YW5jZVxuICogQHByb3BlcnR5IGVycm9yIC0gRXJyb3IgaWYgaGFwcGVuZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25Db250ZXh0IHtcbiAgICBzdGF0dXM6IEFjdGlvblN0YXR1cztcbiAgICBhY3Rpb246IGFueTtcbiAgICBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIEFjdGlvbiBjb250ZXh0IHRoYXQgbWFwcyBgb2ZFbWl0dGFibGVgIG9wZXJhdG9yXG4gKlxuICogQHByb3BlcnR5IHR5cGUgLSBBY3Rpb24gdHlwZVxuICogQHByb3BlcnR5IHBheWxvYWQgLSBEaXNwYXRjaGVkIGRhdGFcbiAqIEBwcm9wZXJ0eSBlcnJvciAtIEVycm9yIHRoYXQgaGFzIGJlZW4gdGhyb3dlZCBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8VCA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBwYXlsb2FkOiBUO1xuICAgIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIYXNobWFwIHRoYXQgY29udGFpbnMgdHlwZXMgdG8gZmlsdGVyIHVzaW5nIGBvZkVtaXR0YWJsZWAgb3BlcmF0b3JcbiAqXG4gKiBAcHJvcGVydHkga2V5IC0gQW55IHN0cmluZyBrZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlcyB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1FVEFfS0VZID0gJ05HWFNfTUVUQSc7XG5cbi8qKlxuICogQGNvbnN0IC0gVGhpcyBjb25zdGFudCBpcyBhIGtleSBmb3IgZGVmaW5pbmcgc3RhdGljIG1ldGFkYXRhIHVzaW5nIGBAUmVjZWl2ZXJgXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNFSVZFUl9NRVRBX0tFWSA9ICdOR1hTX1JFQ0VJVkVSX01FVEEnO1xuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgYEBuZ3hzL3N0b3JlYCBmdW5jdGlvbiBhbmQgbm90IGFjY2Vzc2FibGUgZnJvbSBvdXRzaWRlLCBldmVuIHVzaW5nIHRoZXRhIHN5bWJvbFxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUYXJnZXQgdG8gYXBwbHkgc3RhdGljIG1ldGFkYXRhIHRvXG4gKiBAcmV0dXJucyAtIFN0YXRpYyBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3RvcmVNZXRhZGF0YSh0YXJnZXQ6IEZ1bmN0aW9uKTogYW55IHtcbiAgICBpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShNRVRBX0tFWSkpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdE1ldGFkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgICAgICAgcGF0aDogbnVsbCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIE1FVEFfS0VZLCB7IHZhbHVlOiBkZWZhdWx0TWV0YWRhdGEgfSk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRhcmdldCAtIFRhcmdldCB0byBnZXQgc3RhdGljIG1ldGFkYXRhIGZyb21cbiAqIEByZXR1cm5zIC0gU3RhdGljIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIGdldFN0b3JlTWV0YWRhdGEodGFyZ2V0OiBGdW5jdGlvbik6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRhcmdldFtNRVRBX0tFWV07XG59XG4iLCJpbXBvcnQgeyBlbnN1cmVTdG9yZU1ldGFkYXRhLCBSZWNlaXZlck1ldGFEYXRhLCBSRUNFSVZFUl9NRVRBX0tFWSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIGEgbWV0aG9kIHdpdGggYSByZWNlaXZlciBpbmZvcm1hdGlvblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgc3RhdGljIG1ldGFkYXRhXG4gKiBAcmV0dXJucyAtIEZhY3RvcnkgZm9yIGRlY29yYXRpbmcgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWNlaXZlcihvcHRpb25zPzogUGFydGlhbDxSZWNlaXZlck1ldGFEYXRhPik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgcmV0dXJuIDxUPih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb25Pck5vdFN0YXRpYyA9ICFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0YXJnZXRba2V5XSAhPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICBpZiAoaXNOb3RGdW5jdGlvbk9yTm90U3RhdGljKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIGRlY29yYXRlZCB3aXRoIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGEgPSBlbnN1cmVTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hY3Rpb247XG4gICAgICAgIGNvbnN0IHR5cGVJc05vdFN0cmluZyA9IGFjdGlvbiAmJiB0eXBlb2YgYWN0aW9uLnR5cGUgIT09ICdzdHJpbmcnO1xuXG4gICAgICAgIGlmICh0eXBlSXNOb3RTdHJpbmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9uIHR5cGUgc2hvdWxkIGJlIGRlZmluZWQgYXMgYSBzdGF0aWMgcHJvcGVydHkgYHR5cGVgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSBhY3Rpb24gPyBhY3Rpb24udHlwZSEgOiAoKG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlKSB8fCBgJHt0YXJnZXQubmFtZX0uJHtrZXl9YCk7XG5cbiAgICAgICAgaWYgKG1ldGEuYWN0aW9uc1t0eXBlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgZGVjb3JhdGVkIHdpdGggc3VjaCB0eXBlIFxcYCR7dHlwZX1cXGAgYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGEuYWN0aW9uc1t0eXBlXSA9IFt7XG4gICAgICAgICAgICBmbjogYCR7a2V5fWAsXG4gICAgICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgfV07XG5cbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSFbUkVDRUlWRVJfTUVUQV9LRVldID0ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGFjdGlvblxuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBbGxvd3MgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byBnZXQgYWNjZXNzIHRvIHRoZSBESSBzdG9yZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW5qZWN0b3JBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogSW5qZWN0b3IgZm9yIGFjY2Vzc2luZyBESVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGluamVjdG9yOiBJbmplY3RvciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBJbmplY3RvckFjY2Vzc29yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgLSBSb290IGluamVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIEluamVjdG9yQWNjZXNzb3IuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyAtIEVycm9yIGlmIGBOZ3hzRW1pdFBsdWdpbk1vZHVsZWAgaXMgbm90IGltcG9ydGVkIG9yIGluamVjdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbmplY3RvcigpOiBuZXZlciB8IEluamVjdG9yIHtcbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91J3ZlIGZvcmdvdHRlbiB0byBpbXBvcnQgXFxgTmd4c0VtaXRQbHVnaW5Nb2R1bGVcXGBgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yO1xuICAgIH1cbn1cbiIsIi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGFzIGEgZGVmYXVsdCBhY3Rpb24gd2hlbiB0aGUgdXNlciBkb2Vzbid0IHBhc3MgYW55IGN1c3RvbSBhY3Rpb24gYXMgYW4gYXJndW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEVtaXR0ZXJBY3Rpb248VCA9IGFueT4ge1xuICAgIC8qKlxuICAgICAqIEFjdGlvbiB0eXBlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0eXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgRW1pdHRlckFjdGlvbiBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIHRvIGRpc3BhdGNoXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ/OiBUKSB7fVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUkVDRUlWRVJfTUVUQV9LRVksIEVtaXR0YWJsZSwgUmVjZWl2ZXJNZXRhRGF0YSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5pbXBvcnQgeyBFbWl0dGVyQWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVtaXRTdG9yZSBleHRlbmRzIFN0b3JlIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVjZWl2ZXIgLSBSZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbiBmcm9tIHRoZSBzdG9yZVxuICAgICAqIEByZXR1cm5zIC0gQSBwbGFpbiBvYmplY3Qgd2l0aCBhbiBgZW1pdGAgZnVuY3Rpb24gZm9yIGNhbGxpbmcgZW1pdHRlclxuICAgICAqL1xuICAgIHB1YmxpYyBlbWl0dGVyPFQgPSBhbnksIFUgPSBhbnk+KHJlY2VpdmVyOiBGdW5jdGlvbik6IEVtaXR0YWJsZTxULCBVPiB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVyRXZlbnQ6IFJlY2VpdmVyTWV0YURhdGEgPSByZWNlaXZlcltSRUNFSVZFUl9NRVRBX0tFWV07XG5cbiAgICAgICAgaWYgKCFyZWNlaXZlckV2ZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtaXR0ZXIgbWV0aG9kcyBzaG91bGQgYmUgZGVjb3JhdGVkIHVzaW5nIEBFbWl0dGVyKCkgZGVjb3JhdG9yJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1pdDogKHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPiA9PiB7XG4gICAgICAgICAgICAgICAgRW1pdHRlckFjdGlvbi50eXBlID0gcmVjZWl2ZXJFdmVudC50eXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IEFjdGlvbjogYW55IHwgdHlwZW9mIEVtaXR0ZXJBY3Rpb24gPSByZWNlaXZlckV2ZW50LmFjdGlvbiA/IHJlY2VpdmVyRXZlbnQuYWN0aW9uIDogRW1pdHRlckFjdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9uKHBheWxvYWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RvckFjY2Vzc29yIH0gZnJvbSAnLi4vc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFbWl0U3RvcmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbWl0LXN0b3JlLnNlcnZpY2UnO1xuXG4vKipcbiAqIERlY29yYXRlcyBhIHByb3BlcnR5IGFuZCBkZWZpbmVzIG5ldyBnZXR0ZXJcbiAqXG4gKiBAcGFyYW0gcmVjZWl2ZXIgLSBSZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBmdW5jdGlvblxuICogQHJldHVybnMgLSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBkZWNvcmF0aW5nIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVtaXR0ZXIocmVjZWl2ZXI6IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICAgIHJldHVybiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBJbmplY3RvckFjY2Vzc29yLmdldEluamVjdG9yKCkuZ2V0PEVtaXRTdG9yZT4oRW1pdFN0b3JlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW1pdHRlcihyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbWl0U3RvcmUgfSBmcm9tICcuL2NvcmUvc2VydmljZXMvZW1pdC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEluamVjdG9yQWNjZXNzb3IgfSBmcm9tICcuL2NvcmUvc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEVtaXRTdG9yZSxcbiAgICAgICAgSW5qZWN0b3JBY2Nlc3NvclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4c0VtaXRQbHVnaW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpXG4gICAgICAgIHB1YmxpYyBpbmplY3RvckFjY2Vzc29yOiBJbmplY3RvckFjY2Vzc29yXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgLSBBIHdyYXBwZXIgYXJvdW5kIGBOZ01vZHVsZWBcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOZ3hzRW1pdFBsdWdpbk1vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IE5neHNFbWl0UGx1Z2luTW9kdWxlXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJFQ0VJVkVSX01FVEFfS0VZLCBBY3Rpb25TdGF0dXMsIEFjdGlvbkNvbnRleHQsIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dCwgUmVjZWl2ZXJNZXRhRGF0YSwgVHlwZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcm5hbHMnO1xuXG4vKipcbiAqIGBnZXRSZWNlaXZlclR5cGVzKFtDb3VudGVyU3RhdGUuaW5jcmVtZW50LCBDb3VudGVyU3RhdGUuZGVjcmVtZW50XSlgXG4gKiB3aWxsIHJldHVybiBhIGhhc2htYXAgPT4gYHsgJ0NvdW50ZXJTdGF0ZS5pbmNyZW1lbnQnOiB0cnVlLCAnQ291bnRlclN0YXRlLmRlY3JlbWVudCc6IHRydWUgfWBcbiAqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyAtIEEga2V5LXZhbHVlIG1hcCB3aGVyZSBhIGtleSBpcyBhIHR5cGUgYW5kIHZhbHVlIGlzIGB0cnVlYFxuICovXG5mdW5jdGlvbiBnZXRSZWNlaXZlclR5cGVzKGVtaXR0ZXJzOiBGdW5jdGlvbltdKTogVHlwZXMge1xuICAgIGNvbnN0IHR5cGVzOiBUeXBlcyA9IHt9O1xuXG4gICAgbGV0IGkgPSBlbWl0dGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gZW1pdHRlcnNbaV07XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb24gPSB0eXBlb2YgZW1pdHRlciAhPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICBpZiAoaXNOb3RGdW5jdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRW1pdHRlciBzaG91bGQgYmUgYSBmdW5jdGlvbiwgZ290ICR7ZW1pdHRlcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGE6IFJlY2VpdmVyTWV0YURhdGEgPSBlbWl0dGVyW1JFQ0VJVkVSX01FVEFfS0VZXTtcbiAgICAgICAgY29uc3QgaXNOb3RBbm5vdGF0ZWQgPSAhbWV0YSB8fCAhbWV0YS50eXBlO1xuXG4gICAgICAgIGlmIChpc05vdEFubm90YXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VtaXR0ZXIubmFtZX0gc2hvdWxkIGJlIGRlY29yYXRlZCB1c2luZyBAUmVjZWl2ZXIoKSBkZWNvcmF0b3JgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHR5cGVzW21ldGEudHlwZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcztcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlRGlzcGF0Y2hlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZVN1Y2Nlc3NmdWwoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVDYW5jZWxlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuQ2FuY2VsZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVFcnJvcmVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5FcnJvcmVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHlwZXMgLSBIYXNobWFwIHRoYXQgY29udGFpbnMgYWN0aW9uIHR5cGVzXG4gKiBAcGFyYW0gc3RhdHVzIC0gU3RhdHVzIG9mIHRoZSBkaXNwYXRjaGVkIGFjdGlvblxuICogQHJldHVybnMgLSBSeEpTIGZhY3Rvcnkgb3BlcmF0b3IgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlKHR5cGVzOiBUeXBlcywgc3RhdHVzOiBBY3Rpb25TdGF0dXMpOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxBY3Rpb25Db250ZXh0PikgPT4ge1xuICAgICAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGN0eDogQWN0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hNYXBIYXNUeXBlID0gdHlwZXNbZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShjdHguYWN0aW9uKV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dEhhc1RyYW5zbWl0dGVkU3RhdHVzID0gY3R4LnN0YXR1cyA9PT0gc3RhdHVzO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYXNoTWFwSGFzVHlwZSAmJiBjb250ZXh0SGFzVHJhbnNtaXR0ZWRTdGF0dXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoeyBhY3Rpb24sIGVycm9yIH06IEFjdGlvbkNvbnRleHQpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBdUVPLHVCQUFNLFFBQVEsR0FBRyxXQUFXLENBQUM7Ozs7QUFLcEMsQUFBTyx1QkFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQzs7Ozs7OztBQVF0RCw2QkFBb0MsTUFBZ0I7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDbEMsdUJBQU0sZUFBZSxHQUFHO1lBQ3BCLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLEVBQUU7WUFDWixRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDO1FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7S0FDdkU7SUFDRCxPQUFPLGdCQUFnQixDQUFDLE1B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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4cy1jb250cmliLWVtaXR0ZXIuanMubWFwIiwic291cmNlcyI6WyJuZzovL0BuZ3hzLWNvbnRyaWIvZW1pdHRlci9saWIvY29yZS9pbnRlcm5hbC9pbnRlcm5hbHMudHMiLCJuZzovL0BuZ3hzLWNvbnRyaWIvZW1pdHRlci9saWIvY29yZS9kZWNvcmF0b3JzL3JlY2VpdmVyLnRzIiwibmc6Ly9Abmd4cy1jb250cmliL2VtaXR0ZXIvbGliL2NvcmUvc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2FjdGlvbnMvYWN0aW9ucy50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL3NlcnZpY2VzL2VtaXQtc3RvcmUuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2RlY29yYXRvcnMvZW1pdHRlci50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9lbWl0Lm1vZHVsZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL29wZXJhdG9ycy9vZi1lbWl0dGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogU3RhdHVzIG9mIGEgZGlzcGF0Y2hlZCBhY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gQWN0aW9uU3RhdHVzIHtcbiAgICBEaXNwYXRjaGVkID0gJ0RJU1BBVENIRUQnLFxuICAgIFN1Y2Nlc3NmdWwgPSAnU1VDQ0VTU0ZVTCcsXG4gICAgQ2FuY2VsZWQgPSAnQ0FOQ0VMRUQnLFxuICAgIEVycm9yZWQgPSAnRVJST1JFRCcsXG59XG5cbi8qKlxuICogU3RhdGljIG1ldGFkYXRhIGZvciB0aGUgcmVjZWl2ZXIgZnVuY3Rpb25cbiAqXG4gKiBAcHJvcGVydHkgdHlwZSAtIEFjdGlvbiB0eXBlIChvcHRpb25hbClcbiAqIEBwcm9wZXJ0eSBhY3Rpb24gLSBDdXN0b20gYWN0aW9uIHRvIGRpc3BhdGNoIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlaXZlck1ldGFEYXRhPFQgZXh0ZW5kcyBGdW5jdGlvbiA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBhY3Rpb246IFR5cGU8VD4gJiB7XG4gICAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBQbGFpbiBvYmplY3QgdGhhdCBjb250YWlucyBgZW1pdGAgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIHBheWxvYWRcbiAqXG4gKiBAcHJvcGVydHkgZW1pdCAtIEZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyBwYXlsb2FkIHVuZGVyIHRoZSBob29kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdHRhYmxlPFQgPSBhbnksIFUgPSBhbnk+IHtcbiAgICBlbWl0KHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPjtcbn1cblxuLyoqXG4gKiBCYXNpYyB3cmFwcGVyIGFyb3VuZCBhY3Rpb25zXG4gKlxuICogQHByb3BlcnR5IHN0YXR1cyAtIFN0YXR1cyBvZiBkaXNwYXRjaGVkIGFjdGlvblxuICogQHByb3BlcnR5IGFjdGlvbiAtIEFjdGlvbiBpbnN0YW5jZVxuICogQHByb3BlcnR5IGVycm9yIC0gRXJyb3IgaWYgaGFwcGVuZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25Db250ZXh0IHtcbiAgICBzdGF0dXM6IEFjdGlvblN0YXR1cztcbiAgICBhY3Rpb246IGFueTtcbiAgICBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIEFjdGlvbiBjb250ZXh0IHRoYXQgbWFwcyBgb2ZFbWl0dGFibGVgIG9wZXJhdG9yXG4gKlxuICogQHByb3BlcnR5IHR5cGUgLSBBY3Rpb24gdHlwZVxuICogQHByb3BlcnR5IHBheWxvYWQgLSBEaXNwYXRjaGVkIGRhdGFcbiAqIEBwcm9wZXJ0eSBlcnJvciAtIEVycm9yIHRoYXQgaGFzIGJlZW4gdGhyb3dlZCBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8VCA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBwYXlsb2FkOiBUO1xuICAgIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIYXNobWFwIHRoYXQgY29udGFpbnMgdHlwZXMgdG8gZmlsdGVyIHVzaW5nIGBvZkVtaXR0YWJsZWAgb3BlcmF0b3JcbiAqXG4gKiBAcHJvcGVydHkga2V5IC0gQW55IHN0cmluZyBrZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlcyB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1FVEFfS0VZID0gJ05HWFNfTUVUQSc7XG5cbi8qKlxuICogQGNvbnN0IC0gVGhpcyBjb25zdGFudCBpcyBhIGtleSBmb3IgZGVmaW5pbmcgc3RhdGljIG1ldGFkYXRhIHVzaW5nIGBAUmVjZWl2ZXJgXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNFSVZFUl9NRVRBX0tFWSA9ICdOR1hTX1JFQ0VJVkVSX01FVEEnO1xuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgYEBuZ3hzL3N0b3JlYCBmdW5jdGlvbiBhbmQgbm90IGFjY2Vzc2FibGUgZnJvbSBvdXRzaWRlLCBldmVuIHVzaW5nIHRoZXRhIHN5bWJvbFxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUYXJnZXQgdG8gYXBwbHkgc3RhdGljIG1ldGFkYXRhIHRvXG4gKiBAcmV0dXJucyAtIFN0YXRpYyBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3RvcmVNZXRhZGF0YSh0YXJnZXQ6IEZ1bmN0aW9uKTogYW55IHtcbiAgICBpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShNRVRBX0tFWSkpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdE1ldGFkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgICAgICAgcGF0aDogbnVsbCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIE1FVEFfS0VZLCB7IHZhbHVlOiBkZWZhdWx0TWV0YWRhdGEgfSk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRhcmdldCAtIFRhcmdldCB0byBnZXQgc3RhdGljIG1ldGFkYXRhIGZyb21cbiAqIEByZXR1cm5zIC0gU3RhdGljIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIGdldFN0b3JlTWV0YWRhdGEodGFyZ2V0OiBGdW5jdGlvbik6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRhcmdldFtNRVRBX0tFWV07XG59XG4iLCJpbXBvcnQgeyBlbnN1cmVTdG9yZU1ldGFkYXRhLCBSZWNlaXZlck1ldGFEYXRhLCBSRUNFSVZFUl9NRVRBX0tFWSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIGEgbWV0aG9kIHdpdGggYSByZWNlaXZlciBpbmZvcm1hdGlvblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgc3RhdGljIG1ldGFkYXRhXG4gKiBAcmV0dXJucyAtIEZhY3RvcnkgZm9yIGRlY29yYXRpbmcgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWNlaXZlcihvcHRpb25zPzogUGFydGlhbDxSZWNlaXZlck1ldGFEYXRhPik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgcmV0dXJuIDxUPih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb25Pck5vdFN0YXRpYyA9ICFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0YXJnZXRba2V5XSAhPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICBpZiAoaXNOb3RGdW5jdGlvbk9yTm90U3RhdGljKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIGRlY29yYXRlZCB3aXRoIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGEgPSBlbnN1cmVTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hY3Rpb247XG4gICAgICAgIGNvbnN0IHR5cGVJc05vdFN0cmluZyA9IGFjdGlvbiAmJiB0eXBlb2YgYWN0aW9uLnR5cGUgIT09ICdzdHJpbmcnO1xuXG4gICAgICAgIGlmICh0eXBlSXNOb3RTdHJpbmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9uIHR5cGUgc2hvdWxkIGJlIGRlZmluZWQgYXMgYSBzdGF0aWMgcHJvcGVydHkgYHR5cGVgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSBhY3Rpb24gPyBhY3Rpb24udHlwZSEgOiAoKG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlKSB8fCBgJHt0YXJnZXQubmFtZX0uJHtrZXl9YCk7XG5cbiAgICAgICAgaWYgKG1ldGEuYWN0aW9uc1t0eXBlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgZGVjb3JhdGVkIHdpdGggc3VjaCB0eXBlIFxcYCR7dHlwZX1cXGAgYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGEuYWN0aW9uc1t0eXBlXSA9IFt7XG4gICAgICAgICAgICBmbjogYCR7a2V5fWAsXG4gICAgICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgfV07XG5cbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSFbUkVDRUlWRVJfTUVUQV9LRVldID0ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGFjdGlvblxuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBbGxvd3MgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byBnZXQgYWNjZXNzIHRvIHRoZSBESSBzdG9yZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW5qZWN0b3JBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogSW5qZWN0b3IgZm9yIGFjY2Vzc2luZyBESVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGluamVjdG9yOiBJbmplY3RvciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBJbmplY3RvckFjY2Vzc29yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgLSBSb290IGluamVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIEluamVjdG9yQWNjZXNzb3IuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyAtIEVycm9yIGlmIGBOZ3hzRW1pdFBsdWdpbk1vZHVsZWAgaXMgbm90IGltcG9ydGVkIG9yIGluamVjdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbmplY3RvcigpOiBuZXZlciB8IEluamVjdG9yIHtcbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91J3ZlIGZvcmdvdHRlbiB0byBpbXBvcnQgXFxgTmd4c0VtaXRQbHVnaW5Nb2R1bGVcXGBgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yO1xuICAgIH1cbn1cbiIsIi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGFzIGEgZGVmYXVsdCBhY3Rpb24gd2hlbiB0aGUgdXNlciBkb2Vzbid0IHBhc3MgYW55IGN1c3RvbSBhY3Rpb24gYXMgYW4gYXJndW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEVtaXR0ZXJBY3Rpb248VCA9IGFueT4ge1xuICAgIC8qKlxuICAgICAqIEFjdGlvbiB0eXBlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0eXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgRW1pdHRlckFjdGlvbiBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIHRvIGRpc3BhdGNoXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ/OiBUKSB7fVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUkVDRUlWRVJfTUVUQV9LRVksIEVtaXR0YWJsZSwgUmVjZWl2ZXJNZXRhRGF0YSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5pbXBvcnQgeyBFbWl0dGVyQWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVtaXRTdG9yZSBleHRlbmRzIFN0b3JlIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVjZWl2ZXIgLSBSZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbiBmcm9tIHRoZSBzdG9yZVxuICAgICAqIEByZXR1cm5zIC0gQSBwbGFpbiBvYmplY3Qgd2l0aCBhbiBgZW1pdGAgZnVuY3Rpb24gZm9yIGNhbGxpbmcgZW1pdHRlclxuICAgICAqL1xuICAgIHB1YmxpYyBlbWl0dGVyPFQgPSBhbnksIFUgPSBhbnk+KHJlY2VpdmVyOiBGdW5jdGlvbik6IEVtaXR0YWJsZTxULCBVPiB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVyRXZlbnQ6IFJlY2VpdmVyTWV0YURhdGEgPSByZWNlaXZlcltSRUNFSVZFUl9NRVRBX0tFWV07XG5cbiAgICAgICAgaWYgKCFyZWNlaXZlckV2ZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtaXR0ZXIgbWV0aG9kcyBzaG91bGQgYmUgZGVjb3JhdGVkIHVzaW5nIEBFbWl0dGVyKCkgZGVjb3JhdG9yJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1pdDogKHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPiA9PiB7XG4gICAgICAgICAgICAgICAgRW1pdHRlckFjdGlvbi50eXBlID0gcmVjZWl2ZXJFdmVudC50eXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IEFjdGlvbjogYW55IHwgdHlwZW9mIEVtaXR0ZXJBY3Rpb24gPSByZWNlaXZlckV2ZW50LmFjdGlvbiA/IHJlY2VpdmVyRXZlbnQuYWN0aW9uIDogRW1pdHRlckFjdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9uKHBheWxvYWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RvckFjY2Vzc29yIH0gZnJvbSAnLi4vc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFbWl0U3RvcmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbWl0LXN0b3JlLnNlcnZpY2UnO1xuXG4vKipcbiAqIERlY29yYXRlcyBhIHByb3BlcnR5IGFuZCBkZWZpbmVzIG5ldyBnZXR0ZXJcbiAqXG4gKiBAcGFyYW0gcmVjZWl2ZXIgLSBSZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBmdW5jdGlvblxuICogQHJldHVybnMgLSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBkZWNvcmF0aW5nIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVtaXR0ZXIocmVjZWl2ZXI6IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICAgIHJldHVybiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBJbmplY3RvckFjY2Vzc29yLmdldEluamVjdG9yKCkuZ2V0PEVtaXRTdG9yZT4oRW1pdFN0b3JlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW1pdHRlcihyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbWl0U3RvcmUgfSBmcm9tICcuL2NvcmUvc2VydmljZXMvZW1pdC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEluamVjdG9yQWNjZXNzb3IgfSBmcm9tICcuL2NvcmUvc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEVtaXRTdG9yZSxcbiAgICAgICAgSW5qZWN0b3JBY2Nlc3NvclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4c0VtaXRQbHVnaW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpXG4gICAgICAgIHB1YmxpYyBpbmplY3RvckFjY2Vzc29yOiBJbmplY3RvckFjY2Vzc29yXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgLSBBIHdyYXBwZXIgYXJvdW5kIGBOZ01vZHVsZWBcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOZ3hzRW1pdFBsdWdpbk1vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IE5neHNFbWl0UGx1Z2luTW9kdWxlXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJFQ0VJVkVSX01FVEFfS0VZLCBBY3Rpb25TdGF0dXMsIEFjdGlvbkNvbnRleHQsIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dCwgUmVjZWl2ZXJNZXRhRGF0YSwgVHlwZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcm5hbHMnO1xuXG4vKipcbiAqIGBnZXRSZWNlaXZlclR5cGVzKFtDb3VudGVyU3RhdGUuaW5jcmVtZW50LCBDb3VudGVyU3RhdGUuZGVjcmVtZW50XSlgXG4gKiB3aWxsIHJldHVybiBhIGhhc2htYXAgPT4gYHsgJ0NvdW50ZXJTdGF0ZS5pbmNyZW1lbnQnOiB0cnVlLCAnQ291bnRlclN0YXRlLmRlY3JlbWVudCc6IHRydWUgfWBcbiAqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyAtIEEga2V5LXZhbHVlIG1hcCB3aGVyZSBhIGtleSBpcyBhIHR5cGUgYW5kIHZhbHVlIGlzIGB0cnVlYFxuICovXG5mdW5jdGlvbiBnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVyczogRnVuY3Rpb25bXSk6IFR5cGVzIHtcbiAgICBjb25zdCB0eXBlczogVHlwZXMgPSB7fTtcblxuICAgIGxldCBpID0gcmVjZWl2ZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVyID0gcmVjZWl2ZXJzW2ldO1xuICAgICAgICBjb25zdCBpc05vdEZ1bmN0aW9uID0gdHlwZW9mIHJlY2VpdmVyICE9PSAnZnVuY3Rpb24nO1xuXG4gICAgICAgIGlmIChpc05vdEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWNlaXZlciBzaG91bGQgYmUgYSBmdW5jdGlvbiwgZ290ICR7cmVjZWl2ZXJ9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZXRhOiBSZWNlaXZlck1ldGFEYXRhID0gcmVjZWl2ZXJbUkVDRUlWRVJfTUVUQV9LRVldO1xuICAgICAgICBjb25zdCBpc05vdEFubm90YXRlZCA9ICFtZXRhIHx8ICFtZXRhLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzTm90QW5ub3RhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVjZWl2ZXIubmFtZX0gc2hvdWxkIGJlIGRlY29yYXRlZCB1c2luZyBAUmVjZWl2ZXIoKSBkZWNvcmF0b3JgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHR5cGVzW21ldGEudHlwZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcztcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlRGlzcGF0Y2hlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZVN1Y2Nlc3NmdWwoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVDYW5jZWxlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuQ2FuY2VsZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVFcnJvcmVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5FcnJvcmVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHlwZXMgLSBIYXNobWFwIHRoYXQgY29udGFpbnMgYWN0aW9uIHR5cGVzXG4gKiBAcGFyYW0gc3RhdHVzIC0gU3RhdHVzIG9mIHRoZSBkaXNwYXRjaGVkIGFjdGlvblxuICogQHJldHVybnMgLSBSeEpTIGZhY3Rvcnkgb3BlcmF0b3IgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlKHR5cGVzOiBUeXBlcywgc3RhdHVzOiBBY3Rpb25TdGF0dXMpOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxBY3Rpb25Db250ZXh0PikgPT4ge1xuICAgICAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGN0eDogQWN0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hNYXBIYXNUeXBlID0gdHlwZXNbZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShjdHguYWN0aW9uKV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dEhhc1RyYW5zbWl0dGVkU3RhdHVzID0gY3R4LnN0YXR1cyA9PT0gc3RhdHVzO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYXNoTWFwSGFzVHlwZSAmJiBjb250ZXh0SGFzVHJhbnNtaXR0ZWRTdGF0dXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoeyBhY3Rpb24sIGVycm9yIH06IEFjdGlvbkNvbnRleHQpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBdUVPLHVCQUFNLFFBQVEsR0FBRyxXQUFXLENBQUM7Ozs7QUFLcEMsQUFBTyx1QkFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQzs7Ozs7OztBQVF0RCw2QkFBb0MsTUFBZ0I7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDbEMsdUJBQU0sZUFBZSxHQUFHO1lBQ3BCLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLEVBQUU7WUFDWixRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDO1FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7S0FDdkU7SUFDRCxPQUFPLGdCQUFn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

@@ -255,18 +255,18 @@ import { Injectable, Injector, NgModule, Self } from '@angular/core';

*
* @param {?} emitters
* @param {?} receivers - Array with references to the static functions
* @return {?} - A key-value map where a key is a type and value is `true`
*/
function getReceiverTypes(emitters) {
function getReceiverTypes(receivers) {
var /** @type {?} */ types = {};
var /** @type {?} */ i = emitters.length;
var /** @type {?} */ i = receivers.length;
while (i--) {
var /** @type {?} */ emitter = emitters[i];
var /** @type {?} */ isNotFunction = typeof emitter !== 'function';
var /** @type {?} */ receiver = receivers[i];
var /** @type {?} */ isNotFunction = typeof receiver !== 'function';
if (isNotFunction) {
throw new TypeError("Emitter should be a function, got " + emitter);
throw new TypeError("Receiver should be a function, got " + receiver);
}
var /** @type {?} */ meta = emitter[RECEIVER_META_KEY];
var /** @type {?} */ meta = receiver[RECEIVER_META_KEY];
var /** @type {?} */ isNotAnnotated = !meta || !meta.type;
if (isNotAnnotated) {
throw new Error(emitter.name + " should be decorated using @Receiver() decorator");
throw new Error(receiver.name + " should be decorated using @Receiver() decorator");
}

@@ -355,2 +355,2 @@ types[meta.type] = true;

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4cy1jb250cmliLWVtaXR0ZXIuanMubWFwIiwic291cmNlcyI6WyJuZzovL0BuZ3hzLWNvbnRyaWIvZW1pdHRlci9saWIvY29yZS9pbnRlcm5hbC9pbnRlcm5hbHMudHMiLCJuZzovL0BuZ3hzLWNvbnRyaWIvZW1pdHRlci9saWIvY29yZS9kZWNvcmF0b3JzL3JlY2VpdmVyLnRzIiwibmc6Ly9Abmd4cy1jb250cmliL2VtaXR0ZXIvbGliL2NvcmUvc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2FjdGlvbnMvYWN0aW9ucy50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL3NlcnZpY2VzL2VtaXQtc3RvcmUuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2RlY29yYXRvcnMvZW1pdHRlci50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9lbWl0Lm1vZHVsZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL29wZXJhdG9ycy9vZi1lbWl0dGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogU3RhdHVzIG9mIGEgZGlzcGF0Y2hlZCBhY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gQWN0aW9uU3RhdHVzIHtcbiAgICBEaXNwYXRjaGVkID0gJ0RJU1BBVENIRUQnLFxuICAgIFN1Y2Nlc3NmdWwgPSAnU1VDQ0VTU0ZVTCcsXG4gICAgQ2FuY2VsZWQgPSAnQ0FOQ0VMRUQnLFxuICAgIEVycm9yZWQgPSAnRVJST1JFRCcsXG59XG5cbi8qKlxuICogU3RhdGljIG1ldGFkYXRhIGZvciB0aGUgcmVjZWl2ZXIgZnVuY3Rpb25cbiAqXG4gKiBAcHJvcGVydHkgdHlwZSAtIEFjdGlvbiB0eXBlIChvcHRpb25hbClcbiAqIEBwcm9wZXJ0eSBhY3Rpb24gLSBDdXN0b20gYWN0aW9uIHRvIGRpc3BhdGNoIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlaXZlck1ldGFEYXRhPFQgZXh0ZW5kcyBGdW5jdGlvbiA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBhY3Rpb246IFR5cGU8VD4gJiB7XG4gICAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBQbGFpbiBvYmplY3QgdGhhdCBjb250YWlucyBgZW1pdGAgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIHBheWxvYWRcbiAqXG4gKiBAcHJvcGVydHkgZW1pdCAtIEZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyBwYXlsb2FkIHVuZGVyIHRoZSBob29kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdHRhYmxlPFQgPSBhbnksIFUgPSBhbnk+IHtcbiAgICBlbWl0KHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPjtcbn1cblxuLyoqXG4gKiBCYXNpYyB3cmFwcGVyIGFyb3VuZCBhY3Rpb25zXG4gKlxuICogQHByb3BlcnR5IHN0YXR1cyAtIFN0YXR1cyBvZiBkaXNwYXRjaGVkIGFjdGlvblxuICogQHByb3BlcnR5IGFjdGlvbiAtIEFjdGlvbiBpbnN0YW5jZVxuICogQHByb3BlcnR5IGVycm9yIC0gRXJyb3IgaWYgaGFwcGVuZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25Db250ZXh0IHtcbiAgICBzdGF0dXM6IEFjdGlvblN0YXR1cztcbiAgICBhY3Rpb246IGFueTtcbiAgICBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIEFjdGlvbiBjb250ZXh0IHRoYXQgbWFwcyBgb2ZFbWl0dGFibGVgIG9wZXJhdG9yXG4gKlxuICogQHByb3BlcnR5IHR5cGUgLSBBY3Rpb24gdHlwZVxuICogQHByb3BlcnR5IHBheWxvYWQgLSBEaXNwYXRjaGVkIGRhdGFcbiAqIEBwcm9wZXJ0eSBlcnJvciAtIEVycm9yIHRoYXQgaGFzIGJlZW4gdGhyb3dlZCBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8VCA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBwYXlsb2FkOiBUO1xuICAgIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIYXNobWFwIHRoYXQgY29udGFpbnMgdHlwZXMgdG8gZmlsdGVyIHVzaW5nIGBvZkVtaXR0YWJsZWAgb3BlcmF0b3JcbiAqXG4gKiBAcHJvcGVydHkga2V5IC0gQW55IHN0cmluZyBrZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlcyB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1FVEFfS0VZID0gJ05HWFNfTUVUQSc7XG5cbi8qKlxuICogQGNvbnN0IC0gVGhpcyBjb25zdGFudCBpcyBhIGtleSBmb3IgZGVmaW5pbmcgc3RhdGljIG1ldGFkYXRhIHVzaW5nIGBAUmVjZWl2ZXJgXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNFSVZFUl9NRVRBX0tFWSA9ICdOR1hTX1JFQ0VJVkVSX01FVEEnO1xuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgYEBuZ3hzL3N0b3JlYCBmdW5jdGlvbiBhbmQgbm90IGFjY2Vzc2FibGUgZnJvbSBvdXRzaWRlLCBldmVuIHVzaW5nIHRoZXRhIHN5bWJvbFxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUYXJnZXQgdG8gYXBwbHkgc3RhdGljIG1ldGFkYXRhIHRvXG4gKiBAcmV0dXJucyAtIFN0YXRpYyBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3RvcmVNZXRhZGF0YSh0YXJnZXQ6IEZ1bmN0aW9uKTogYW55IHtcbiAgICBpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShNRVRBX0tFWSkpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdE1ldGFkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgICAgICAgcGF0aDogbnVsbCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIE1FVEFfS0VZLCB7IHZhbHVlOiBkZWZhdWx0TWV0YWRhdGEgfSk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRhcmdldCAtIFRhcmdldCB0byBnZXQgc3RhdGljIG1ldGFkYXRhIGZyb21cbiAqIEByZXR1cm5zIC0gU3RhdGljIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIGdldFN0b3JlTWV0YWRhdGEodGFyZ2V0OiBGdW5jdGlvbik6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRhcmdldFtNRVRBX0tFWV07XG59XG4iLCJpbXBvcnQgeyBlbnN1cmVTdG9yZU1ldGFkYXRhLCBSZWNlaXZlck1ldGFEYXRhLCBSRUNFSVZFUl9NRVRBX0tFWSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIGEgbWV0aG9kIHdpdGggYSByZWNlaXZlciBpbmZvcm1hdGlvblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgc3RhdGljIG1ldGFkYXRhXG4gKiBAcmV0dXJucyAtIEZhY3RvcnkgZm9yIGRlY29yYXRpbmcgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWNlaXZlcihvcHRpb25zPzogUGFydGlhbDxSZWNlaXZlck1ldGFEYXRhPik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgcmV0dXJuIDxUPih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb25Pck5vdFN0YXRpYyA9ICFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0YXJnZXRba2V5XSAhPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICBpZiAoaXNOb3RGdW5jdGlvbk9yTm90U3RhdGljKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIGRlY29yYXRlZCB3aXRoIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGEgPSBlbnN1cmVTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hY3Rpb247XG4gICAgICAgIGNvbnN0IHR5cGVJc05vdFN0cmluZyA9IGFjdGlvbiAmJiB0eXBlb2YgYWN0aW9uLnR5cGUgIT09ICdzdHJpbmcnO1xuXG4gICAgICAgIGlmICh0eXBlSXNOb3RTdHJpbmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9uIHR5cGUgc2hvdWxkIGJlIGRlZmluZWQgYXMgYSBzdGF0aWMgcHJvcGVydHkgYHR5cGVgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSBhY3Rpb24gPyBhY3Rpb24udHlwZSEgOiAoKG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlKSB8fCBgJHt0YXJnZXQubmFtZX0uJHtrZXl9YCk7XG5cbiAgICAgICAgaWYgKG1ldGEuYWN0aW9uc1t0eXBlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgZGVjb3JhdGVkIHdpdGggc3VjaCB0eXBlIFxcYCR7dHlwZX1cXGAgYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGEuYWN0aW9uc1t0eXBlXSA9IFt7XG4gICAgICAgICAgICBmbjogYCR7a2V5fWAsXG4gICAgICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgfV07XG5cbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSFbUkVDRUlWRVJfTUVUQV9LRVldID0ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGFjdGlvblxuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBbGxvd3MgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byBnZXQgYWNjZXNzIHRvIHRoZSBESSBzdG9yZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW5qZWN0b3JBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogSW5qZWN0b3IgZm9yIGFjY2Vzc2luZyBESVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGluamVjdG9yOiBJbmplY3RvciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBJbmplY3RvckFjY2Vzc29yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgLSBSb290IGluamVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIEluamVjdG9yQWNjZXNzb3IuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyAtIEVycm9yIGlmIGBOZ3hzRW1pdFBsdWdpbk1vZHVsZWAgaXMgbm90IGltcG9ydGVkIG9yIGluamVjdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbmplY3RvcigpOiBuZXZlciB8IEluamVjdG9yIHtcbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91J3ZlIGZvcmdvdHRlbiB0byBpbXBvcnQgXFxgTmd4c0VtaXRQbHVnaW5Nb2R1bGVcXGBgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yO1xuICAgIH1cbn1cbiIsIi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGFzIGEgZGVmYXVsdCBhY3Rpb24gd2hlbiB0aGUgdXNlciBkb2Vzbid0IHBhc3MgYW55IGN1c3RvbSBhY3Rpb24gYXMgYW4gYXJndW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEVtaXR0ZXJBY3Rpb248VCA9IGFueT4ge1xuICAgIC8qKlxuICAgICAqIEFjdGlvbiB0eXBlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0eXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgRW1pdHRlckFjdGlvbiBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIHRvIGRpc3BhdGNoXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ/OiBUKSB7fVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUkVDRUlWRVJfTUVUQV9LRVksIEVtaXR0YWJsZSwgUmVjZWl2ZXJNZXRhRGF0YSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5pbXBvcnQgeyBFbWl0dGVyQWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVtaXRTdG9yZSBleHRlbmRzIFN0b3JlIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVjZWl2ZXIgLSBSZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbiBmcm9tIHRoZSBzdG9yZVxuICAgICAqIEByZXR1cm5zIC0gQSBwbGFpbiBvYmplY3Qgd2l0aCBhbiBgZW1pdGAgZnVuY3Rpb24gZm9yIGNhbGxpbmcgZW1pdHRlclxuICAgICAqL1xuICAgIHB1YmxpYyBlbWl0dGVyPFQgPSBhbnksIFUgPSBhbnk+KHJlY2VpdmVyOiBGdW5jdGlvbik6IEVtaXR0YWJsZTxULCBVPiB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVyRXZlbnQ6IFJlY2VpdmVyTWV0YURhdGEgPSByZWNlaXZlcltSRUNFSVZFUl9NRVRBX0tFWV07XG5cbiAgICAgICAgaWYgKCFyZWNlaXZlckV2ZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtaXR0ZXIgbWV0aG9kcyBzaG91bGQgYmUgZGVjb3JhdGVkIHVzaW5nIEBFbWl0dGVyKCkgZGVjb3JhdG9yJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1pdDogKHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPiA9PiB7XG4gICAgICAgICAgICAgICAgRW1pdHRlckFjdGlvbi50eXBlID0gcmVjZWl2ZXJFdmVudC50eXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IEFjdGlvbjogYW55IHwgdHlwZW9mIEVtaXR0ZXJBY3Rpb24gPSByZWNlaXZlckV2ZW50LmFjdGlvbiA/IHJlY2VpdmVyRXZlbnQuYWN0aW9uIDogRW1pdHRlckFjdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9uKHBheWxvYWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RvckFjY2Vzc29yIH0gZnJvbSAnLi4vc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFbWl0U3RvcmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbWl0LXN0b3JlLnNlcnZpY2UnO1xuXG4vKipcbiAqIERlY29yYXRlcyBhIHByb3BlcnR5IGFuZCBkZWZpbmVzIG5ldyBnZXR0ZXJcbiAqXG4gKiBAcGFyYW0gcmVjZWl2ZXIgLSBSZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBmdW5jdGlvblxuICogQHJldHVybnMgLSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBkZWNvcmF0aW5nIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVtaXR0ZXIocmVjZWl2ZXI6IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICAgIHJldHVybiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBJbmplY3RvckFjY2Vzc29yLmdldEluamVjdG9yKCkuZ2V0PEVtaXRTdG9yZT4oRW1pdFN0b3JlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW1pdHRlcihyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbWl0U3RvcmUgfSBmcm9tICcuL2NvcmUvc2VydmljZXMvZW1pdC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEluamVjdG9yQWNjZXNzb3IgfSBmcm9tICcuL2NvcmUvc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEVtaXRTdG9yZSxcbiAgICAgICAgSW5qZWN0b3JBY2Nlc3NvclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4c0VtaXRQbHVnaW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpXG4gICAgICAgIHB1YmxpYyBpbmplY3RvckFjY2Vzc29yOiBJbmplY3RvckFjY2Vzc29yXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgLSBBIHdyYXBwZXIgYXJvdW5kIGBOZ01vZHVsZWBcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOZ3hzRW1pdFBsdWdpbk1vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IE5neHNFbWl0UGx1Z2luTW9kdWxlXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJFQ0VJVkVSX01FVEFfS0VZLCBBY3Rpb25TdGF0dXMsIEFjdGlvbkNvbnRleHQsIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dCwgUmVjZWl2ZXJNZXRhRGF0YSwgVHlwZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcm5hbHMnO1xuXG4vKipcbiAqIGBnZXRSZWNlaXZlclR5cGVzKFtDb3VudGVyU3RhdGUuaW5jcmVtZW50LCBDb3VudGVyU3RhdGUuZGVjcmVtZW50XSlgXG4gKiB3aWxsIHJldHVybiBhIGhhc2htYXAgPT4gYHsgJ0NvdW50ZXJTdGF0ZS5pbmNyZW1lbnQnOiB0cnVlLCAnQ291bnRlclN0YXRlLmRlY3JlbWVudCc6IHRydWUgfWBcbiAqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyAtIEEga2V5LXZhbHVlIG1hcCB3aGVyZSBhIGtleSBpcyBhIHR5cGUgYW5kIHZhbHVlIGlzIGB0cnVlYFxuICovXG5mdW5jdGlvbiBnZXRSZWNlaXZlclR5cGVzKGVtaXR0ZXJzOiBGdW5jdGlvbltdKTogVHlwZXMge1xuICAgIGNvbnN0IHR5cGVzOiBUeXBlcyA9IHt9O1xuXG4gICAgbGV0IGkgPSBlbWl0dGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gZW1pdHRlcnNbaV07XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb24gPSB0eXBlb2YgZW1pdHRlciAhPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICBpZiAoaXNOb3RGdW5jdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRW1pdHRlciBzaG91bGQgYmUgYSBmdW5jdGlvbiwgZ290ICR7ZW1pdHRlcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGE6IFJlY2VpdmVyTWV0YURhdGEgPSBlbWl0dGVyW1JFQ0VJVkVSX01FVEFfS0VZXTtcbiAgICAgICAgY29uc3QgaXNOb3RBbm5vdGF0ZWQgPSAhbWV0YSB8fCAhbWV0YS50eXBlO1xuXG4gICAgICAgIGlmIChpc05vdEFubm90YXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VtaXR0ZXIubmFtZX0gc2hvdWxkIGJlIGRlY29yYXRlZCB1c2luZyBAUmVjZWl2ZXIoKSBkZWNvcmF0b3JgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHR5cGVzW21ldGEudHlwZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcztcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlRGlzcGF0Y2hlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZVN1Y2Nlc3NmdWwoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVDYW5jZWxlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuQ2FuY2VsZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVFcnJvcmVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5FcnJvcmVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHlwZXMgLSBIYXNobWFwIHRoYXQgY29udGFpbnMgYWN0aW9uIHR5cGVzXG4gKiBAcGFyYW0gc3RhdHVzIC0gU3RhdHVzIG9mIHRoZSBkaXNwYXRjaGVkIGFjdGlvblxuICogQHJldHVybnMgLSBSeEpTIGZhY3Rvcnkgb3BlcmF0b3IgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlKHR5cGVzOiBUeXBlcywgc3RhdHVzOiBBY3Rpb25TdGF0dXMpOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxBY3Rpb25Db250ZXh0PikgPT4ge1xuICAgICAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGN0eDogQWN0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hNYXBIYXNUeXBlID0gdHlwZXNbZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShjdHguYWN0aW9uKV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dEhhc1RyYW5zbWl0dGVkU3RhdHVzID0gY3R4LnN0YXR1cyA9PT0gc3RhdHVzO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYXNoTWFwSGFzVHlwZSAmJiBjb250ZXh0SGFzVHJhbnNtaXR0ZWRTdGF0dXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoeyBhY3Rpb24sIGVycm9yIH06IEFjdGlvbkNvbnRleHQpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9O1xufVxuIl0sIm5hbWVzIjpbInRzbGliXzEuX19leHRlbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUF1RU8scUJBQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQzs7OztBQUtwQyxBQUFPLHFCQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDOzs7Ozs7O0FBUXRELDZCQUFvQyxNQUFnQjtJQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNsQyxxQkFBTSxlQUFlLEdBQUc7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsRUFBRTtZQUNYLFFBQVEsRUFBRSxFQUFFO1lBQ1osSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsRUFBRTtZQUNaLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUM7UUFDRixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztLQUN2RTtJQUNE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
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4cy1jb250cmliLWVtaXR0ZXIuanMubWFwIiwic291cmNlcyI6WyJuZzovL0BuZ3hzLWNvbnRyaWIvZW1pdHRlci9saWIvY29yZS9pbnRlcm5hbC9pbnRlcm5hbHMudHMiLCJuZzovL0BuZ3hzLWNvbnRyaWIvZW1pdHRlci9saWIvY29yZS9kZWNvcmF0b3JzL3JlY2VpdmVyLnRzIiwibmc6Ly9Abmd4cy1jb250cmliL2VtaXR0ZXIvbGliL2NvcmUvc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2FjdGlvbnMvYWN0aW9ucy50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL3NlcnZpY2VzL2VtaXQtc3RvcmUuc2VydmljZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL2RlY29yYXRvcnMvZW1pdHRlci50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9lbWl0Lm1vZHVsZS50cyIsIm5nOi8vQG5neHMtY29udHJpYi9lbWl0dGVyL2xpYi9jb3JlL29wZXJhdG9ycy9vZi1lbWl0dGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogU3RhdHVzIG9mIGEgZGlzcGF0Y2hlZCBhY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gQWN0aW9uU3RhdHVzIHtcbiAgICBEaXNwYXRjaGVkID0gJ0RJU1BBVENIRUQnLFxuICAgIFN1Y2Nlc3NmdWwgPSAnU1VDQ0VTU0ZVTCcsXG4gICAgQ2FuY2VsZWQgPSAnQ0FOQ0VMRUQnLFxuICAgIEVycm9yZWQgPSAnRVJST1JFRCcsXG59XG5cbi8qKlxuICogU3RhdGljIG1ldGFkYXRhIGZvciB0aGUgcmVjZWl2ZXIgZnVuY3Rpb25cbiAqXG4gKiBAcHJvcGVydHkgdHlwZSAtIEFjdGlvbiB0eXBlIChvcHRpb25hbClcbiAqIEBwcm9wZXJ0eSBhY3Rpb24gLSBDdXN0b20gYWN0aW9uIHRvIGRpc3BhdGNoIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlaXZlck1ldGFEYXRhPFQgZXh0ZW5kcyBGdW5jdGlvbiA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBhY3Rpb246IFR5cGU8VD4gJiB7XG4gICAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBQbGFpbiBvYmplY3QgdGhhdCBjb250YWlucyBgZW1pdGAgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIHBheWxvYWRcbiAqXG4gKiBAcHJvcGVydHkgZW1pdCAtIEZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyBwYXlsb2FkIHVuZGVyIHRoZSBob29kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdHRhYmxlPFQgPSBhbnksIFUgPSBhbnk+IHtcbiAgICBlbWl0KHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPjtcbn1cblxuLyoqXG4gKiBCYXNpYyB3cmFwcGVyIGFyb3VuZCBhY3Rpb25zXG4gKlxuICogQHByb3BlcnR5IHN0YXR1cyAtIFN0YXR1cyBvZiBkaXNwYXRjaGVkIGFjdGlvblxuICogQHByb3BlcnR5IGFjdGlvbiAtIEFjdGlvbiBpbnN0YW5jZVxuICogQHByb3BlcnR5IGVycm9yIC0gRXJyb3IgaWYgaGFwcGVuZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25Db250ZXh0IHtcbiAgICBzdGF0dXM6IEFjdGlvblN0YXR1cztcbiAgICBhY3Rpb246IGFueTtcbiAgICBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIEFjdGlvbiBjb250ZXh0IHRoYXQgbWFwcyBgb2ZFbWl0dGFibGVgIG9wZXJhdG9yXG4gKlxuICogQHByb3BlcnR5IHR5cGUgLSBBY3Rpb24gdHlwZVxuICogQHByb3BlcnR5IHBheWxvYWQgLSBEaXNwYXRjaGVkIGRhdGFcbiAqIEBwcm9wZXJ0eSBlcnJvciAtIEVycm9yIHRoYXQgaGFzIGJlZW4gdGhyb3dlZCBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8VCA9IGFueT4ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBwYXlsb2FkOiBUO1xuICAgIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIYXNobWFwIHRoYXQgY29udGFpbnMgdHlwZXMgdG8gZmlsdGVyIHVzaW5nIGBvZkVtaXR0YWJsZWAgb3BlcmF0b3JcbiAqXG4gKiBAcHJvcGVydHkga2V5IC0gQW55IHN0cmluZyBrZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlcyB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1FVEFfS0VZID0gJ05HWFNfTUVUQSc7XG5cbi8qKlxuICogQGNvbnN0IC0gVGhpcyBjb25zdGFudCBpcyBhIGtleSBmb3IgZGVmaW5pbmcgc3RhdGljIG1ldGFkYXRhIHVzaW5nIGBAUmVjZWl2ZXJgXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNFSVZFUl9NRVRBX0tFWSA9ICdOR1hTX1JFQ0VJVkVSX01FVEEnO1xuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgYEBuZ3hzL3N0b3JlYCBmdW5jdGlvbiBhbmQgbm90IGFjY2Vzc2FibGUgZnJvbSBvdXRzaWRlLCBldmVuIHVzaW5nIHRoZXRhIHN5bWJvbFxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUYXJnZXQgdG8gYXBwbHkgc3RhdGljIG1ldGFkYXRhIHRvXG4gKiBAcmV0dXJucyAtIFN0YXRpYyBtZXRhZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3RvcmVNZXRhZGF0YSh0YXJnZXQ6IEZ1bmN0aW9uKTogYW55IHtcbiAgICBpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShNRVRBX0tFWSkpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdE1ldGFkYXRhID0ge1xuICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgICAgICAgcGF0aDogbnVsbCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIE1FVEFfS0VZLCB7IHZhbHVlOiBkZWZhdWx0TWV0YWRhdGEgfSk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRhcmdldCAtIFRhcmdldCB0byBnZXQgc3RhdGljIG1ldGFkYXRhIGZyb21cbiAqIEByZXR1cm5zIC0gU3RhdGljIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIGdldFN0b3JlTWV0YWRhdGEodGFyZ2V0OiBGdW5jdGlvbik6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRhcmdldFtNRVRBX0tFWV07XG59XG4iLCJpbXBvcnQgeyBlbnN1cmVTdG9yZU1ldGFkYXRhLCBSZWNlaXZlck1ldGFEYXRhLCBSRUNFSVZFUl9NRVRBX0tFWSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIGEgbWV0aG9kIHdpdGggYSByZWNlaXZlciBpbmZvcm1hdGlvblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgc3RhdGljIG1ldGFkYXRhXG4gKiBAcmV0dXJucyAtIEZhY3RvcnkgZm9yIGRlY29yYXRpbmcgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWNlaXZlcihvcHRpb25zPzogUGFydGlhbDxSZWNlaXZlck1ldGFEYXRhPik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgcmV0dXJuIDxUPih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTm90RnVuY3Rpb25Pck5vdFN0YXRpYyA9ICFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0YXJnZXRba2V5XSAhPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICBpZiAoaXNOb3RGdW5jdGlvbk9yTm90U3RhdGljKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIGRlY29yYXRlZCB3aXRoIEBSZWNlaXZlcigpIGRlY29yYXRvcmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGEgPSBlbnN1cmVTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hY3Rpb247XG4gICAgICAgIGNvbnN0IHR5cGVJc05vdFN0cmluZyA9IGFjdGlvbiAmJiB0eXBlb2YgYWN0aW9uLnR5cGUgIT09ICdzdHJpbmcnO1xuXG4gICAgICAgIGlmICh0eXBlSXNOb3RTdHJpbmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9uIHR5cGUgc2hvdWxkIGJlIGRlZmluZWQgYXMgYSBzdGF0aWMgcHJvcGVydHkgYHR5cGVgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSBhY3Rpb24gPyBhY3Rpb24udHlwZSEgOiAoKG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlKSB8fCBgJHt0YXJnZXQubmFtZX0uJHtrZXl9YCk7XG5cbiAgICAgICAgaWYgKG1ldGEuYWN0aW9uc1t0eXBlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgZGVjb3JhdGVkIHdpdGggc3VjaCB0eXBlIFxcYCR7dHlwZX1cXGAgYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1ldGEuYWN0aW9uc1t0eXBlXSA9IFt7XG4gICAgICAgICAgICBmbjogYCR7a2V5fWAsXG4gICAgICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgfV07XG5cbiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSFbUkVDRUlWRVJfTUVUQV9LRVldID0ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGFjdGlvblxuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBbGxvd3MgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byBnZXQgYWNjZXNzIHRvIHRoZSBESSBzdG9yZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW5qZWN0b3JBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogSW5qZWN0b3IgZm9yIGFjY2Vzc2luZyBESVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGluamVjdG9yOiBJbmplY3RvciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBJbmplY3RvckFjY2Vzc29yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgLSBSb290IGluamVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIEluamVjdG9yQWNjZXNzb3IuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyAtIEVycm9yIGlmIGBOZ3hzRW1pdFBsdWdpbk1vZHVsZWAgaXMgbm90IGltcG9ydGVkIG9yIGluamVjdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbmplY3RvcigpOiBuZXZlciB8IEluamVjdG9yIHtcbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91J3ZlIGZvcmdvdHRlbiB0byBpbXBvcnQgXFxgTmd4c0VtaXRQbHVnaW5Nb2R1bGVcXGBgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yO1xuICAgIH1cbn1cbiIsIi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGFzIGEgZGVmYXVsdCBhY3Rpb24gd2hlbiB0aGUgdXNlciBkb2Vzbid0IHBhc3MgYW55IGN1c3RvbSBhY3Rpb24gYXMgYW4gYXJndW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEVtaXR0ZXJBY3Rpb248VCA9IGFueT4ge1xuICAgIC8qKlxuICAgICAqIEFjdGlvbiB0eXBlXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0eXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgRW1pdHRlckFjdGlvbiBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIHRvIGRpc3BhdGNoXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ/OiBUKSB7fVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUkVDRUlWRVJfTUVUQV9LRVksIEVtaXR0YWJsZSwgUmVjZWl2ZXJNZXRhRGF0YSB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5pbXBvcnQgeyBFbWl0dGVyQWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVtaXRTdG9yZSBleHRlbmRzIFN0b3JlIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVjZWl2ZXIgLSBSZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbiBmcm9tIHRoZSBzdG9yZVxuICAgICAqIEByZXR1cm5zIC0gQSBwbGFpbiBvYmplY3Qgd2l0aCBhbiBgZW1pdGAgZnVuY3Rpb24gZm9yIGNhbGxpbmcgZW1pdHRlclxuICAgICAqL1xuICAgIHB1YmxpYyBlbWl0dGVyPFQgPSBhbnksIFUgPSBhbnk+KHJlY2VpdmVyOiBGdW5jdGlvbik6IEVtaXR0YWJsZTxULCBVPiB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVyRXZlbnQ6IFJlY2VpdmVyTWV0YURhdGEgPSByZWNlaXZlcltSRUNFSVZFUl9NRVRBX0tFWV07XG5cbiAgICAgICAgaWYgKCFyZWNlaXZlckV2ZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtaXR0ZXIgbWV0aG9kcyBzaG91bGQgYmUgZGVjb3JhdGVkIHVzaW5nIEBFbWl0dGVyKCkgZGVjb3JhdG9yJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1pdDogKHBheWxvYWQ/OiBUKTogT2JzZXJ2YWJsZTxVPiA9PiB7XG4gICAgICAgICAgICAgICAgRW1pdHRlckFjdGlvbi50eXBlID0gcmVjZWl2ZXJFdmVudC50eXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IEFjdGlvbjogYW55IHwgdHlwZW9mIEVtaXR0ZXJBY3Rpb24gPSByZWNlaXZlckV2ZW50LmFjdGlvbiA/IHJlY2VpdmVyRXZlbnQuYWN0aW9uIDogRW1pdHRlckFjdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChuZXcgQWN0aW9uKHBheWxvYWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RvckFjY2Vzc29yIH0gZnJvbSAnLi4vc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFbWl0U3RvcmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbWl0LXN0b3JlLnNlcnZpY2UnO1xuXG4vKipcbiAqIERlY29yYXRlcyBhIHByb3BlcnR5IGFuZCBkZWZpbmVzIG5ldyBnZXR0ZXJcbiAqXG4gKiBAcGFyYW0gcmVjZWl2ZXIgLSBSZWZlcmVuY2UgdG8gdGhlIHN0YXRpYyBmdW5jdGlvblxuICogQHJldHVybnMgLSBGYWN0b3J5IGZ1bmN0aW9uIGZvciBkZWNvcmF0aW5nIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVtaXR0ZXIocmVjZWl2ZXI6IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICAgIHJldHVybiAodGFyZ2V0OiBPYmplY3QsIGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RvcmUgPSBJbmplY3RvckFjY2Vzc29yLmdldEluamVjdG9yKCkuZ2V0PEVtaXRTdG9yZT4oRW1pdFN0b3JlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZW1pdHRlcihyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbWl0U3RvcmUgfSBmcm9tICcuL2NvcmUvc2VydmljZXMvZW1pdC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEluamVjdG9yQWNjZXNzb3IgfSBmcm9tICcuL2NvcmUvc2VydmljZXMvaW5qZWN0b3ItYWNjZXNzb3Iuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIEVtaXRTdG9yZSxcbiAgICAgICAgSW5qZWN0b3JBY2Nlc3NvclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4c0VtaXRQbHVnaW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpXG4gICAgICAgIHB1YmxpYyBpbmplY3RvckFjY2Vzc29yOiBJbmplY3RvckFjY2Vzc29yXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgLSBBIHdyYXBwZXIgYXJvdW5kIGBOZ01vZHVsZWBcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOZ3hzRW1pdFBsdWdpbk1vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IE5neHNFbWl0UGx1Z2luTW9kdWxlXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJFQ0VJVkVSX01FVEFfS0VZLCBBY3Rpb25TdGF0dXMsIEFjdGlvbkNvbnRleHQsIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dCwgUmVjZWl2ZXJNZXRhRGF0YSwgVHlwZXMgfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcm5hbHMnO1xuXG4vKipcbiAqIGBnZXRSZWNlaXZlclR5cGVzKFtDb3VudGVyU3RhdGUuaW5jcmVtZW50LCBDb3VudGVyU3RhdGUuZGVjcmVtZW50XSlgXG4gKiB3aWxsIHJldHVybiBhIGhhc2htYXAgPT4gYHsgJ0NvdW50ZXJTdGF0ZS5pbmNyZW1lbnQnOiB0cnVlLCAnQ291bnRlclN0YXRlLmRlY3JlbWVudCc6IHRydWUgfWBcbiAqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyAtIEEga2V5LXZhbHVlIG1hcCB3aGVyZSBhIGtleSBpcyBhIHR5cGUgYW5kIHZhbHVlIGlzIGB0cnVlYFxuICovXG5mdW5jdGlvbiBnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVyczogRnVuY3Rpb25bXSk6IFR5cGVzIHtcbiAgICBjb25zdCB0eXBlczogVHlwZXMgPSB7fTtcblxuICAgIGxldCBpID0gcmVjZWl2ZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVyID0gcmVjZWl2ZXJzW2ldO1xuICAgICAgICBjb25zdCBpc05vdEZ1bmN0aW9uID0gdHlwZW9mIHJlY2VpdmVyICE9PSAnZnVuY3Rpb24nO1xuXG4gICAgICAgIGlmIChpc05vdEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWNlaXZlciBzaG91bGQgYmUgYSBmdW5jdGlvbiwgZ290ICR7cmVjZWl2ZXJ9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZXRhOiBSZWNlaXZlck1ldGFEYXRhID0gcmVjZWl2ZXJbUkVDRUlWRVJfTUVUQV9LRVldO1xuICAgICAgICBjb25zdCBpc05vdEFubm90YXRlZCA9ICFtZXRhIHx8ICFtZXRhLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzTm90QW5ub3RhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVjZWl2ZXIubmFtZX0gc2hvdWxkIGJlIGRlY29yYXRlZCB1c2luZyBAUmVjZWl2ZXIoKSBkZWNvcmF0b3JgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHR5cGVzW21ldGEudHlwZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcztcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVjZWl2ZXJzIC0gQXJyYXkgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlY29yYXRlZCB3aXRoIGBAUmVjZWl2ZXIoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlRGlzcGF0Y2hlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHJlY2VpdmVycyAtIEFycmF5IHdpdGggcmVmZXJlbmNlcyB0byB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkZWNvcmF0ZWQgd2l0aCBgQFJlY2VpdmVyKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZkVtaXR0YWJsZVN1Y2Nlc3NmdWwoLi4ucmVjZWl2ZXJzOiBGdW5jdGlvbltdKTogT3BlcmF0b3JGdW5jdGlvbjxhbnksIE9mRW1pdHRhYmxlQWN0aW9uQ29udGV4dDxhbnk+PiB7XG4gICAgcmV0dXJuIG9mRW1pdHRhYmxlKGdldFJlY2VpdmVyVHlwZXMocmVjZWl2ZXJzKSwgQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVDYW5jZWxlZCguLi5yZWNlaXZlcnM6IEZ1bmN0aW9uW10pOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gb2ZFbWl0dGFibGUoZ2V0UmVjZWl2ZXJUeXBlcyhyZWNlaXZlcnMpLCBBY3Rpb25TdGF0dXMuQ2FuY2VsZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWNlaXZlcnMgLSBBcnJheSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGVjb3JhdGVkIHdpdGggYEBSZWNlaXZlcigpYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb2ZFbWl0dGFibGVFcnJvcmVkKC4uLnJlY2VpdmVyczogRnVuY3Rpb25bXSk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBPZkVtaXR0YWJsZUFjdGlvbkNvbnRleHQ8YW55Pj4ge1xuICAgIHJldHVybiBvZkVtaXR0YWJsZShnZXRSZWNlaXZlclR5cGVzKHJlY2VpdmVycyksIEFjdGlvblN0YXR1cy5FcnJvcmVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHlwZXMgLSBIYXNobWFwIHRoYXQgY29udGFpbnMgYWN0aW9uIHR5cGVzXG4gKiBAcGFyYW0gc3RhdHVzIC0gU3RhdHVzIG9mIHRoZSBkaXNwYXRjaGVkIGFjdGlvblxuICogQHJldHVybnMgLSBSeEpTIGZhY3Rvcnkgb3BlcmF0b3IgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9mRW1pdHRhYmxlKHR5cGVzOiBUeXBlcywgc3RhdHVzOiBBY3Rpb25TdGF0dXMpOiBPcGVyYXRvckZ1bmN0aW9uPGFueSwgT2ZFbWl0dGFibGVBY3Rpb25Db250ZXh0PGFueT4+IHtcbiAgICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxBY3Rpb25Db250ZXh0PikgPT4ge1xuICAgICAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGN0eDogQWN0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hNYXBIYXNUeXBlID0gdHlwZXNbZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShjdHguYWN0aW9uKV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dEhhc1RyYW5zbWl0dGVkU3RhdHVzID0gY3R4LnN0YXR1cyA9PT0gc3RhdHVzO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYXNoTWFwSGFzVHlwZSAmJiBjb250ZXh0SGFzVHJhbnNtaXR0ZWRTdGF0dXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoeyBhY3Rpb24sIGVycm9yIH06IEFjdGlvbkNvbnRleHQpID0+ICh7XG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICB9O1xufVxuIl0sIm5hbWVzIjpbInRzbGliXzEuX19leHRlbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUF1RU8scUJBQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQzs7OztBQUtwQyxBQUFPLHFCQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDOzs7Ozs7O0FBUXRELDZCQUFvQyxNQUFnQjtJQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNsQyxxQkFBTSxlQUFlLEdBQUc7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsRUFBRTtZQUNYLFFBQVEsRUFBRSxFQUFFO1lBQ1osSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsRUFBRTtZQUNaLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUM7UUFDRixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztL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
{
"name": "@ngxs-contrib/emitter",
"version": "1.0.4",
"version": "1.0.5",
"peerDependencies": {

@@ -5,0 +5,0 @@ "@angular/common": "^6.0.0-rc.0 || ^6.0.0",

@@ -9,2 +9,4 @@ <p align="center">

[🚀 See it in action on Stackblitz](https://stackblitz.com/edit/ngxs-emitter-simple)
This package allows you to get rid of actions. You can use decorators to register actions directly in your state, you don't have to create any actions in your project (until you really need them), as they don't give any profit, only bring extra boilerplate files.

@@ -90,3 +92,3 @@

<h3>Count is {{ count.value }}</h3>
<div class="add-counter">
<div>
<button (click)="counterValue.emit(count.value + 1)">Increment (+1)</button>

@@ -99,3 +101,3 @@ <button (click)="counterValue.emit(count.value - 1)">Decrement (-1)</button>

export class CounterComponent {
@Select((state) => state.counter)
@Select(CounterState)
public count$: Observable<CounterStateModel>;

@@ -102,0 +104,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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