@universis/ngx-tables 0.8.5 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/universis-ngx-tables.umd.js +5816 -3756
- package/bundles/universis-ngx-tables.umd.js.map +1 -1
- package/bundles/universis-ngx-tables.umd.min.js +1 -1
- package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
- package/esm2015/lib/actions/table.actions.js +48 -7
- package/esm2015/lib/advanced-aggregator.js +5 -1
- package/esm2015/lib/components/add-items/add-items.component.js +93 -26
- package/esm2015/lib/components/advanced-aggregator/advanced-aggregator.component.js +75 -5
- package/esm2015/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +39 -12
- package/esm2015/lib/components/advanced-list/advanced-list.component.js +105 -33
- package/esm2015/lib/components/advanced-row-action/advanced-row-action.component.js +97 -16
- package/esm2015/lib/components/advanced-search-form/advanced-search-form.component.js +87 -16
- package/esm2015/lib/components/advanced-select/advanced-select.component.js +33 -1
- package/esm2015/lib/components/advanced-select/advanced-select.service.js +20 -3
- package/esm2015/lib/components/advanced-table/advanced-filter-value-provider.service.js +23 -2
- package/esm2015/lib/components/advanced-table/advanced-table-resolvers.js +37 -9
- package/esm2015/lib/components/advanced-table/advanced-table-search-base.js +22 -1
- package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +223 -31
- package/esm2015/lib/components/advanced-table/advanced-table-settings.component.js +90 -8
- package/esm2015/lib/components/advanced-table/advanced-table.component.js +576 -126
- package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +36 -1
- package/esm2015/lib/components/advanced-table/advanced-table.formatters.js +257 -44
- package/esm2015/lib/components/advanced-table/advanced-table.interfaces.js +4 -0
- package/esm2015/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +211 -55
- package/esm2015/lib/components/column-selector/column-selector.component.js +167 -73
- package/esm2015/lib/components/column-selector/column-selector.service.js +19 -2
- package/esm2015/lib/components/table-simple-header/table-simple-header.component.js +31 -7
- package/esm2015/lib/directives/advance-search-state.directive.js +49 -10
- package/esm2015/lib/directives/advance-table-state.directive.js +26 -3
- package/esm2015/lib/directives/advanced-search-router-state.directive.js +35 -8
- package/esm2015/lib/directives/advanced-table-editor.directive.js +43 -13
- package/esm2015/lib/directives/btnexp.directive.js +85 -42
- package/esm2015/lib/i18n/tables.el.js +6 -3
- package/esm2015/lib/i18n/tables.en.js +6 -3
- package/esm2015/lib/pipes/advanced-aggregator.pipe.js +12 -8
- package/esm2015/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +19 -7
- package/esm2015/lib/reducers/index.js +32 -1
- package/esm2015/lib/services/advanced-aggregator/advanced-aggregator.service.js +37 -15
- package/esm2015/lib/tables.activated-table.service.js +41 -6
- package/esm2015/lib/tables.module.js +18 -4
- package/esm2015/public_api.js +33 -29
- package/esm2015/universis-ngx-tables.js +6 -2
- package/esm5/lib/actions/table.actions.js +37 -7
- package/esm5/lib/advanced-aggregator.js +5 -1
- package/esm5/lib/components/add-items/add-items.component.js +124 -34
- package/esm5/lib/components/advanced-aggregator/advanced-aggregator.component.js +111 -15
- package/esm5/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +54 -11
- package/esm5/lib/components/advanced-list/advanced-list.component.js +125 -37
- package/esm5/lib/components/advanced-row-action/advanced-row-action.component.js +124 -24
- package/esm5/lib/components/advanced-search-form/advanced-search-form.component.js +109 -22
- package/esm5/lib/components/advanced-select/advanced-select.component.js +36 -4
- package/esm5/lib/components/advanced-select/advanced-select.service.js +22 -4
- package/esm5/lib/components/advanced-table/advanced-filter-value-provider.service.js +37 -5
- package/esm5/lib/components/advanced-table/advanced-table-resolvers.js +43 -11
- package/esm5/lib/components/advanced-table/advanced-table-search-base.js +29 -4
- package/esm5/lib/components/advanced-table/advanced-table-search.component.js +323 -58
- package/esm5/lib/components/advanced-table/advanced-table-settings.component.js +112 -15
- package/esm5/lib/components/advanced-table/advanced-table.component.js +761 -164
- package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +36 -1
- package/esm5/lib/components/advanced-table/advanced-table.formatters.js +392 -57
- package/esm5/lib/components/advanced-table/advanced-table.interfaces.js +4 -0
- package/esm5/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +311 -70
- package/esm5/lib/components/column-selector/column-selector.component.js +264 -145
- package/esm5/lib/components/column-selector/column-selector.service.js +21 -3
- package/esm5/lib/components/table-simple-header/table-simple-header.component.js +44 -10
- package/esm5/lib/directives/advance-search-state.directive.js +68 -15
- package/esm5/lib/directives/advance-table-state.directive.js +26 -4
- package/esm5/lib/directives/advanced-search-router-state.directive.js +39 -12
- package/esm5/lib/directives/advanced-table-editor.directive.js +66 -18
- package/esm5/lib/directives/btnexp.directive.js +171 -39
- package/esm5/lib/i18n/tables.el.js +6 -3
- package/esm5/lib/i18n/tables.en.js +6 -3
- package/esm5/lib/pipes/advanced-aggregator.pipe.js +32 -6
- package/esm5/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +34 -8
- package/esm5/lib/reducers/index.js +32 -1
- package/esm5/lib/services/advanced-aggregator/advanced-aggregator.service.js +75 -13
- package/esm5/lib/tables.activated-table.service.js +39 -8
- package/esm5/lib/tables.module.js +19 -5
- package/esm5/public_api.js +33 -29
- package/esm5/universis-ngx-tables.js +6 -2
- package/fesm2015/universis-ngx-tables.js +1870 -569
- package/fesm2015/universis-ngx-tables.js.map +1 -1
- package/fesm5/universis-ngx-tables.js +2902 -802
- package/fesm5/universis-ngx-tables.js.map +1 -1
- package/lib/components/add-items/add-items.component.d.ts +9 -16
- package/lib/components/advanced-aggregator/advanced-aggregator.component.d.ts +5 -5
- package/lib/components/advanced-list/advanced-list.component.d.ts +11 -11
- package/lib/components/advanced-row-action/advanced-row-action.component.d.ts +11 -16
- package/lib/components/advanced-search-form/advanced-search-form.component.d.ts +3 -3
- package/lib/components/advanced-table/advanced-table-search.component.d.ts +5 -5
- package/lib/components/advanced-table/advanced-table-settings.component.d.ts +5 -6
- package/lib/components/advanced-table/advanced-table.component.d.ts +14 -15
- package/lib/components/advanced-table/advanced-table.formatters.d.ts +11 -11
- package/lib/components/advanced-table-modal/advanced-table-modal-base.component.d.ts +11 -11
- package/lib/components/column-selector/column-selector.component.d.ts +4 -4
- package/lib/components/table-simple-header/table-simple-header.component.d.ts +3 -3
- package/lib/directives/advance-search-state.directive.d.ts +3 -3
- package/lib/directives/advance-table-state.directive.d.ts +1 -1
- package/lib/directives/advanced-search-router-state.directive.d.ts +6 -6
- package/lib/directives/btnexp.directive.d.ts +9 -9
- package/lib/pipes/advanced-aggregator.pipe.d.ts +3 -3
- package/lib/pipes/advansed-aggregator-list-title-parse.pipe.d.ts +5 -5
- package/lib/services/advanced-aggregator/advanced-aggregator.service.d.ts +8 -8
- package/lib/tables.activated-table.service.d.ts +6 -6
- package/package.json +10 -4
- package/universis-ngx-tables.metadata.json +1 -1
|
@@ -1,19 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
1
5
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
6
|
import { TemplatePipe } from '@universis/common';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
7
|
+
/** @enum {string} */
|
|
8
|
+
var Lengths = {
|
|
9
|
+
XL: 'xl',
|
|
10
|
+
LG: 'lg',
|
|
11
|
+
MD: 'md',
|
|
12
|
+
SM: 'sm',
|
|
13
|
+
XS: 'xs',
|
|
14
|
+
};
|
|
11
15
|
var AdvancedAggregatorListComponent = /** @class */ (function () {
|
|
12
16
|
function AdvancedAggregatorListComponent(_template) {
|
|
13
17
|
this._template = _template;
|
|
14
18
|
this.clickEvent = new EventEmitter();
|
|
15
19
|
}
|
|
16
|
-
|
|
20
|
+
/**
|
|
21
|
+
* @return {?}
|
|
22
|
+
*/
|
|
23
|
+
AdvancedAggregatorListComponent.prototype.ngOnInit = /**
|
|
24
|
+
* @return {?}
|
|
25
|
+
*/
|
|
26
|
+
function () {
|
|
17
27
|
var _this = this;
|
|
18
28
|
this.config.columns.forEach(function (x) {
|
|
19
29
|
x.length = Object.values(Lengths).includes(x.length) ? _this._template.transform("sis--list-group-item_" + x.length + "_column", x) :
|
|
@@ -28,7 +38,23 @@ var AdvancedAggregatorListComponent = /** @class */ (function () {
|
|
|
28
38
|
* @param item The value of the current item
|
|
29
39
|
* }
|
|
30
40
|
*/
|
|
31
|
-
|
|
41
|
+
/**
|
|
42
|
+
*
|
|
43
|
+
* Triggers the output event emitter
|
|
44
|
+
*
|
|
45
|
+
* @param {?} type The type of the event as it's declared in the configuration
|
|
46
|
+
* @param {?} data
|
|
47
|
+
* @return {?}
|
|
48
|
+
*/
|
|
49
|
+
AdvancedAggregatorListComponent.prototype.callCallback = /**
|
|
50
|
+
*
|
|
51
|
+
* Triggers the output event emitter
|
|
52
|
+
*
|
|
53
|
+
* @param {?} type The type of the event as it's declared in the configuration
|
|
54
|
+
* @param {?} data
|
|
55
|
+
* @return {?}
|
|
56
|
+
*/
|
|
57
|
+
function (type, data) {
|
|
32
58
|
this.clickEvent.emit({
|
|
33
59
|
type: type,
|
|
34
60
|
data: data
|
|
@@ -36,6 +62,7 @@ var AdvancedAggregatorListComponent = /** @class */ (function () {
|
|
|
36
62
|
};
|
|
37
63
|
AdvancedAggregatorListComponent.decorators = [
|
|
38
64
|
{ type: Component, args: [{
|
|
65
|
+
// tslint:disable-next-line:component-selector
|
|
39
66
|
selector: 'app-advanced-aggregator-list',
|
|
40
67
|
template: "<div id=\"group-list\" class=\"flex-column\" *ngIf=\"config && config.columns\">\n <ul class=\"sis--list-group sis--list-group-header\">\n <li class=\"sis--list-group-item text-wrap\">\n <div class=\"d-flex justify-content-center align-items-center\" *ngIf=\"body && body.length > 0\">\n <div *ngIf=\"config.actions && config.actions.length > 0\" class=\"sis--list-group-item_sm_column\"></div>\n <div *ngFor=\"let column of config.columns; let i = index\" class=\"text-left\" [class]=\"config.columns[i].length\"\n [translate]=\"config.columns[i].type === 'action' ? '' : column.title\" [ngClass]=\"{\n 'd-none': config.columns[i].hidden\n }\"></div>\n </div>\n </li>\n </ul>\n\n <!-- The list of entries -->\n <ul class=\"sis--list-group sis--list-group-body\" *ngIf=\"body && body.length > 0\">\n <li class=\"sis--list-group-item text-wrap\" *ngFor=\"let entry of body | orderBy: config.orderBy\">\n <div class=\"d-flex justify-content-center align-items-center list-color\">\n <!-- The list of actions -->\n <div *ngIf=\"config.actions && config.actions.length > 0\" class=\"sis--list-group-item_sm_column text-left pr-0\">\n <button *ngFor=\"let action of config.actions\" (click)=\"callCallback(action.identifier, entry)\"\n [title]=\"(action.title ? action.title : '') | translate \" class=\"btn btn-default px-0\">\n <i class=\"\" [class]=\"'fas text-indigo ml-2 ' + 'fa-' + action.icon\"></i>\n </button>\n <span class=\"px-0\">\n <i class=\"fa fa-fw\"> </i>\n </span>\n\n </div>\n <!-- The list of data -->\n <div *ngFor=\"let column of config.columns; let i=index\" [class]=\"config.columns[i].length\" class=\"text-left\"\n [ngClass]=\"{\n 'text-truncate': config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate,\n 'd-none': config.columns[i].hidden,\n 'd-md-block': !config.columns[i].hidden\n }\"\n [title]=\"config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate ? entry[column.name] : ''\">\n <span class=\"text-secondary\"\n *ngIf=\"!config.columns[i].hasOwnProperty('type') || (config.columns[i].hasOwnProperty('type') && config.columns[i].type === 'text')\"\n [ngClass]=\"{\n 'font-xs': config.columns[i].variant !== 'primary',\n 'text-body': config.columns[i].variant === 'primary',\n 'text-success': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && entry[config.columns[i].condition],\n 'text-danger': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && !entry[config.columns[i].condition],\n 'font-lg': config.columns[i].variant === 'redGreen' && entry[column.name] && entry[column.name].length > 3,\n 'font-2xl': config.columns[i].variant === 'redGreen' && entry[column.name] && entry[column.name].length <= 3\n }\">\n {{entry[column.name] || '-'}}\n </span>\n\n <span *ngIf=\"config.columns[i].type === 'boolean'\">\n <i class=\"fa font-lg\" [ngClass]=\"{\n 'fa-check text-success': !!entry[column.name],\n 'fa-times text-danger': !!entry[column.name] === false && config.columns[i].variant !== 'checkOrDash'\n }\"></i>\n <span\n *ngIf=\"entry[column.name].toString() !== config.columns[i].trueValue && config.columns[i].variant === 'checkOrDash'\"\n class=\"text-secondary font-xs\">-</span>\n </span>\n </div>\n </div>\n <div *ngIf=\"entry && entry.subitems\">\n <div *ngFor=\"let subitem of entry.subitems\" class=\"d-flex justify-content-center align-items-center list-color\">\n <div *ngIf=\"config.actions && config.actions.length > 0\"\n class=\"sis--list-group-item_sm_column text-left pr-0\">\n <span class=\"px-0\">\n <i class=\"fa fa-fw\"> </i>\n </span>\n <button *ngFor=\"let action of config.actions\" (click)=\"callCallback(action.identifier, subitem)\"\n [title]=\"(action.title ? action.title : '') | translate \" class=\"btn btn-default px-0\">\n <i *ngIf=\"action.type === 'edit'\" class=\"fas fa-edit text-indigo\"></i>\n </button>\n </div>\n <div class=\"text-left\"></div>\n <div *ngFor=\"let column of config.columns; let i=index\" [class]=\"config.columns[i].length\" class=\"text-left\"\n [ngClass]=\"{\n 'text-truncate': config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate,\n 'd-none': config.columns[i].hidden,\n 'd-md-block': !config.columns[i].hidden\n }\"\n [title]=\"config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate ? entry[column.name] : ''\">\n <span class=\"text-secondary\"\n *ngIf=\"!config.columns[i].hasOwnProperty('type') || (config.columns[i].hasOwnProperty('type') && config.columns[i].type === 'text')\"\n [ngClass]=\"{\n 'font-xs': config.columns[i].variant !== 'primary',\n 'text-body': config.columns[i].variant === 'primary',\n 'text-success': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && subitem[config.columns[i].condition],\n 'text-danger': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && !subitem[config.columns[i].condition],\n 'font-lg': config.columns[i].variant === 'redGreen' && subitem[column.name] && subitem[column.name].length > 3,\n 'font-2xl': config.columns[i].variant === 'redGreen' && subitem[column.name] && subitem[column.name].length <= 3\n }\">\n {{subitem[column.name] || '-'}}\n </span>\n <span *ngIf=\"config.columns[i].type === 'boolean'\">\n <i class=\"fa font-lg\" [ngClass]=\"{\n 'fa-check text-success': !!subitem[column.name],\n 'fa-times text-danger': !!subitem[column.name] === false && config.columns[i].variant !== 'checkOrDash'\n }\"></i>\n <span\n *ngIf=\"subitem[column.name].toString() !== config.columns[i].trueValue && config.columns[i].variant === 'checkOrDash'\"\n class=\"text-secondary font-xs\">-</span>\n </span>\n </div>\n </div>\n </div>\n </li>\n </ul>\n</div>"
|
|
41
68
|
}] }
|
|
@@ -52,5 +79,21 @@ var AdvancedAggregatorListComponent = /** @class */ (function () {
|
|
|
52
79
|
return AdvancedAggregatorListComponent;
|
|
53
80
|
}());
|
|
54
81
|
export { AdvancedAggregatorListComponent };
|
|
82
|
+
if (false) {
|
|
83
|
+
/**
|
|
84
|
+
* \@property {AdvancedAggregatorConfig} config The configuration object to use
|
|
85
|
+
* @type {?}
|
|
86
|
+
*/
|
|
87
|
+
AdvancedAggregatorListComponent.prototype.config;
|
|
88
|
+
/**
|
|
89
|
+
* \@property {Array<Array<any>>} body The list of data entries to show as the list body
|
|
90
|
+
* @type {?}
|
|
91
|
+
*/
|
|
92
|
+
AdvancedAggregatorListComponent.prototype.body;
|
|
93
|
+
/** @type {?} */
|
|
94
|
+
AdvancedAggregatorListComponent.prototype.clickEvent;
|
|
95
|
+
/** @type {?} */
|
|
96
|
+
AdvancedAggregatorListComponent.prototype._template;
|
|
97
|
+
}
|
|
55
98
|
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQzs7O0lBRzlDLElBQUksSUFBSTtJQUNSLElBQUksSUFBSTtJQUNSLElBQUksSUFBSTtJQUNSLElBQUksSUFBSTtJQUNSLElBQUksSUFBSTs7O0lBdUJSLHlDQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjOzBCQUZwQixJQUFJLFlBQVksRUFBRTtLQUVPOzs7O0lBRWhELGtEQUFROzs7SUFBUjtRQUFBLGlCQUtDO1FBSkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQztZQUMzQixDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsMEJBQXdCLENBQUMsQ0FBQyxNQUFNLFlBQVMsRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFDO2dCQUM5SCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFFO1NBQzVELENBQUMsQ0FBQztLQUNKO0lBRUQ7Ozs7Ozs7T0FPRzs7Ozs7Ozs7O0lBQ0gsc0RBQVk7Ozs7Ozs7O0lBQVosVUFBYSxJQUFZLEVBQUUsSUFBUztRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNuQixJQUFJLE1BQUE7WUFDSixJQUFJLE1BQUE7U0FDTCxDQUFDLENBQUM7S0FDSjs7Z0JBekNGLFNBQVMsU0FBQzs7b0JBRVQsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMscW9OQUF3RDtpQkFDekQ7Ozs7Z0JBZlEsWUFBWTs7O3lCQXFCbEIsS0FBSzt1QkFLTCxLQUFLOzZCQUVMLE1BQU07OzBDQTdCVDs7U0FpQmEsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbmVudW0gTGVuZ3RocyB7XG4gIFhMPSAneGwnLFxuICBMRz0gJ2xnJyxcbiAgTUQ9ICdtZCcsXG4gIFNNPSAnc20nLFxuICBYUz0gJ3hzJ1xufVxuXG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0FkdmFuY2VkQWdncmVnYXRvckNvbmZpZ30gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2VcbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkge0FycmF5PEFycmF5PGFueT4+fSBib2R5IFRoZSBsaXN0IG9mIGRhdGEgZW50cmllcyB0byBzaG93IGFzIHRoZSBsaXN0IGJvZHlcbiAgICovXG4gIEBJbnB1dCgpIGJvZHk7XG5cbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKHggPT4ge1xuICAgICAgeC5sZW5ndGggPSBPYmplY3QudmFsdWVzKExlbmd0aHMpLmluY2x1ZGVzKHgubGVuZ3RoKSA/IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShgc2lzLS1saXN0LWdyb3VwLWl0ZW1fJHt4Lmxlbmd0aH1fY29sdW1uYCwgeCApIDpcbiAgICAgICAgIXgubGVuZ3RoID8gJ3Npcy0tbGlzdC1ncm91cC1pdGVtX3NtX2NvbHVtbicgOiB4Lmxlbmd0aCA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVHJpZ2dlcnMgdGhlIG91dHB1dCBldmVudCBlbWl0dGVyXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCBhcyBpdCdzIGRlY2xhcmVkIGluIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBpdGVtIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBpdGVtXG4gICAqIH1cbiAgICovXG4gIGNhbGxDYWxsYmFjayh0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
1
5
|
import * as tslib_1 from "tslib";
|
|
2
6
|
import { Component, ViewChild, Input } from '@angular/core';
|
|
3
7
|
import { AngularDataContext } from '@themost/angular';
|
|
4
8
|
import { TranslateService } from '@ngx-translate/core';
|
|
5
9
|
import { ActivatedRoute } from '@angular/router';
|
|
6
|
-
// tslint:disable-next-line: max-line-length
|
|
7
10
|
import { AdvancedTableComponent, AdvancedTableConfiguration } from '../advanced-table/advanced-table.component';
|
|
8
11
|
import { ErrorService, DIALOG_BUTTONS, ModalService, UserActivityService } from '@universis/common';
|
|
9
12
|
import { ResponseError } from '@themost/client';
|
|
@@ -19,7 +22,13 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
19
22
|
this._userActivityService = _userActivityService;
|
|
20
23
|
this.allowSaveOption = true;
|
|
21
24
|
}
|
|
22
|
-
|
|
25
|
+
/**
|
|
26
|
+
* @return {?}
|
|
27
|
+
*/
|
|
28
|
+
AdvancedListComponent.prototype.ngOnDestroy = /**
|
|
29
|
+
* @return {?}
|
|
30
|
+
*/
|
|
31
|
+
function () {
|
|
23
32
|
if (this.dataSubscription) {
|
|
24
33
|
this.dataSubscription.unsubscribe();
|
|
25
34
|
}
|
|
@@ -30,21 +39,32 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
30
39
|
this.subscription.unsubscribe();
|
|
31
40
|
}
|
|
32
41
|
};
|
|
33
|
-
|
|
42
|
+
/**
|
|
43
|
+
* @return {?}
|
|
44
|
+
*/
|
|
45
|
+
AdvancedListComponent.prototype.ngOnInit = /**
|
|
46
|
+
* @return {?}
|
|
47
|
+
*/
|
|
48
|
+
function () {
|
|
34
49
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
35
|
-
var metadata_1, err_1;
|
|
50
|
+
var table_1, metadata_1, err_1;
|
|
36
51
|
var _this = this;
|
|
37
52
|
return tslib_1.__generator(this, function (_a) {
|
|
38
53
|
switch (_a.label) {
|
|
39
54
|
case 0:
|
|
40
55
|
_a.trys.push([0, 2, , 3]);
|
|
56
|
+
if (this.table == null) {
|
|
57
|
+
return [2 /*return*/];
|
|
58
|
+
}
|
|
59
|
+
table_1 = this.table;
|
|
41
60
|
return [4 /*yield*/, this._context.getMetadata()];
|
|
42
61
|
case 1:
|
|
43
62
|
metadata_1 = _a.sent();
|
|
44
63
|
// get route data
|
|
45
64
|
this.dataSubscription = this._activatedRoute.data.subscribe(function (routeData) {
|
|
46
|
-
|
|
47
|
-
var re = new RegExp("^" + routeData
|
|
65
|
+
/** @type {?} */
|
|
66
|
+
var re = new RegExp("^" + routeData["model"] + "$", 'ig');
|
|
67
|
+
/** @type {?} */
|
|
48
68
|
var entitySet = metadata_1.EntityContainer.EntitySet.find(function (x) {
|
|
49
69
|
return re.test(x.Name);
|
|
50
70
|
});
|
|
@@ -53,38 +73,39 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
53
73
|
// navigate to error
|
|
54
74
|
return _this._errorService.navigateToError(new ResponseError('EntitySet Not Found', 404));
|
|
55
75
|
}
|
|
56
|
-
|
|
76
|
+
/** @type {?} */
|
|
57
77
|
var entityType = metadata_1.EntityType.find(function (x) {
|
|
58
78
|
return x.Name === entitySet.EntityType;
|
|
59
79
|
});
|
|
60
80
|
if (entityType == null) {
|
|
61
81
|
return _this._errorService.navigateToError(new ResponseError('EntityType Not Found', 404));
|
|
62
82
|
}
|
|
63
|
-
if (routeData
|
|
64
|
-
if (Object.prototype.hasOwnProperty.call(routeData
|
|
65
|
-
_this.allowSaveOption = routeData
|
|
83
|
+
if (routeData["searchConfiguration"]) {
|
|
84
|
+
if (Object.prototype.hasOwnProperty.call(routeData["searchConfiguration"], 'allowSave')) {
|
|
85
|
+
_this.allowSaveOption = routeData["searchConfiguration"].allowSave;
|
|
66
86
|
}
|
|
67
|
-
_this.searchConfiguration = routeData
|
|
87
|
+
_this.searchConfiguration = routeData["searchConfiguration"];
|
|
68
88
|
}
|
|
69
|
-
if (routeData
|
|
70
|
-
_this.tableConfiguration = routeData
|
|
89
|
+
if (routeData["tableConfiguration"]) {
|
|
90
|
+
_this.tableConfiguration = routeData["tableConfiguration"];
|
|
71
91
|
}
|
|
72
|
-
if (routeData
|
|
73
|
-
_this.description = _this._translateService.instant(routeData
|
|
92
|
+
if (routeData["description"]) {
|
|
93
|
+
_this.description = _this._translateService.instant(routeData["description"]);
|
|
74
94
|
}
|
|
75
|
-
if (routeData
|
|
76
|
-
_this.longDescription = _this._translateService.instant(routeData
|
|
95
|
+
if (routeData["longDescription"]) {
|
|
96
|
+
_this.longDescription = _this._translateService.instant(routeData["longDescription"]);
|
|
77
97
|
}
|
|
78
|
-
if (routeData
|
|
79
|
-
_this.category = _this._translateService.instant(routeData
|
|
98
|
+
if (routeData["category"]) {
|
|
99
|
+
_this.category = _this._translateService.instant(routeData["category"]);
|
|
80
100
|
}
|
|
81
|
-
|
|
101
|
+
/** @type {?} */
|
|
82
102
|
var defaultConfiguration = AdvancedTableConfiguration.cast(_this.tableConfiguration, true);
|
|
83
|
-
|
|
103
|
+
/** @type {?} */
|
|
84
104
|
var column = defaultConfiguration.columns.find(function (col) {
|
|
85
105
|
return col.formatter === 'ButtonFormatter' && col.formatString === '(modal:edit)';
|
|
86
106
|
});
|
|
87
107
|
if (column) {
|
|
108
|
+
/** @type {?} */
|
|
88
109
|
var url_1 = [];
|
|
89
110
|
_this._activatedRoute.snapshot.pathFromRoot.forEach(function (route) {
|
|
90
111
|
url_1.push.apply(url_1, route.url);
|
|
@@ -92,22 +113,26 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
92
113
|
column.formatString = "#/" + url_1.join('/') + "/(modal:${id}/edit)";
|
|
93
114
|
}
|
|
94
115
|
// create list configuration by assigning list entity set
|
|
95
|
-
|
|
116
|
+
// create list configuration by assigning list entity set
|
|
117
|
+
table_1.config = Object.assign({
|
|
96
118
|
model: entitySet.Name
|
|
97
119
|
}, defaultConfiguration);
|
|
98
120
|
// fetch data
|
|
99
|
-
|
|
121
|
+
// fetch data
|
|
122
|
+
table_1.fetch(true);
|
|
123
|
+
// do reload by using hidden fragment e.g. /classes#reload
|
|
100
124
|
// do reload by using hidden fragment e.g. /classes#reload
|
|
101
125
|
_this.reloadSubscription = _this._activatedRoute.fragment.subscribe(function (fragment) {
|
|
102
126
|
if (fragment && fragment === 'reload') {
|
|
103
|
-
_this._toastService.show(_this.description, _this._translateService.instant('Settings.OperationCompleted'));
|
|
104
|
-
|
|
127
|
+
_this._toastService.show(/** @type {?} */ (_this.description), _this._translateService.instant('Settings.OperationCompleted'));
|
|
128
|
+
table_1.fetch(true);
|
|
105
129
|
}
|
|
106
130
|
});
|
|
107
131
|
// finally add user activity
|
|
132
|
+
// finally add user activity
|
|
108
133
|
_this._userActivityService.setItem({
|
|
109
|
-
category: _this.category,
|
|
110
|
-
description: _this.description,
|
|
134
|
+
category: /** @type {?} */ (_this.category),
|
|
135
|
+
description: /** @type {?} */ (_this.description),
|
|
111
136
|
url: window.location.hash.substring(1),
|
|
112
137
|
dateCreated: new Date
|
|
113
138
|
});
|
|
@@ -124,25 +149,45 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
124
149
|
};
|
|
125
150
|
/**
|
|
126
151
|
* Data load event handler of advanced table component
|
|
127
|
-
* @param
|
|
152
|
+
* @param data
|
|
128
153
|
*/
|
|
129
|
-
|
|
154
|
+
/**
|
|
155
|
+
* Data load event handler of advanced table component
|
|
156
|
+
* @param {?} data
|
|
157
|
+
* @return {?}
|
|
158
|
+
*/
|
|
159
|
+
AdvancedListComponent.prototype.onDataLoad = /**
|
|
160
|
+
* Data load event handler of advanced table component
|
|
161
|
+
* @param {?} data
|
|
162
|
+
* @return {?}
|
|
163
|
+
*/
|
|
164
|
+
function (data) {
|
|
130
165
|
this.recordsTotal = data.recordsTotal;
|
|
131
166
|
};
|
|
132
167
|
/**
|
|
133
168
|
* Remove selected items
|
|
134
169
|
*/
|
|
135
|
-
|
|
170
|
+
/**
|
|
171
|
+
* Remove selected items
|
|
172
|
+
* @return {?}
|
|
173
|
+
*/
|
|
174
|
+
AdvancedListComponent.prototype.remove = /**
|
|
175
|
+
* Remove selected items
|
|
176
|
+
* @return {?}
|
|
177
|
+
*/
|
|
178
|
+
function () {
|
|
136
179
|
var _this = this;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
180
|
+
/** @type {?} */
|
|
181
|
+
var table = this.table;
|
|
182
|
+
if (table && table.selected && table.selected.length) {
|
|
183
|
+
/** @type {?} */
|
|
184
|
+
var items_1 = table.selected;
|
|
140
185
|
return this._modalService.showWarningDialog(this._translateService.instant('Tables.RemoveItemsTitle'), this._translateService.instant('Tables.RemoveItemsMessage'), DIALOG_BUTTONS.OkCancel).then(function (result) {
|
|
141
186
|
if (result === 'ok') {
|
|
142
|
-
_this._context.model(
|
|
187
|
+
_this._context.model(table.config.model).remove(items_1).then(function () {
|
|
143
188
|
_this._toastService.show(_this.description + ':' + _this._translateService.instant('Tables.RemoveItemMessage.title'), _this._translateService.instant((items_1.length === 1 ?
|
|
144
189
|
'Tables.RemoveItemMessage.one' : 'Tables.RemoveItemMessage.many'), { value: items_1.length }));
|
|
145
|
-
|
|
190
|
+
table.fetch(true);
|
|
146
191
|
}).catch(function (err) {
|
|
147
192
|
_this._errorService.showError(err, {
|
|
148
193
|
continueLink: '.'
|
|
@@ -154,8 +199,9 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
154
199
|
};
|
|
155
200
|
AdvancedListComponent.decorators = [
|
|
156
201
|
{ type: Component, args: [{
|
|
202
|
+
// tslint:disable-next-line:component-selector
|
|
157
203
|
selector: 'app-advanced-list',
|
|
158
|
-
template: "<div>\n <div class=\"row\" *ngIf=\"description\">\n <div class=\"col-auto\">\n <h2>{{description}}</h2>\n <p *ngIf=\"longDescription\">{{longDescription}}</p>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"searchConfiguration\">\n <div class=\"col-12\" [ngVar]=\"{}\" #filter=\"ngVar\">\n <app-advanced-table-search #advancedSearch [(filter)]=\"filter.value\" [collapsed]=\"true\" [table]=\"table\" [allowSave]=\"allowSaveOption\">\n <advanced-search>\n <app-advanced-search-form [form]=\"searchConfiguration\" (filterChange)=\"advancedSearch.asyncAdvancedSearch()\" #search [(filter)]=\"filter.value\"></app-advanced-search-form>\n </advanced-search>\n </app-advanced-table-search>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-auto mt-4\">\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal > 1\">\n <span>{{recordsTotal}}</span><span> </span><span [translate]=\"'Tables.Items'\"></span>\n </div>\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal === 1\">\n <span>{{recordsTotal}}</span><span> </span><span [translate]=\"'Tables.Item'\"></span>\n </div>\n </div>\n <div class=\"pull-right ml-auto mr-3 mt-3\">\n <div class=\"font-lg btn-toolbar mt-3\">\n <a *ngIf=\"table && table.selected && table.selected.length\"\n class=\"text-danger text-decoration-none mr-2\" href=\"javascript:void(0)\" (click)=\"remove()\">\n <span>-</span><span> </span><span [translate]=\"'Tables.RemoveItem'\"></span>\n </a>\n <a class=\"text-indigo text-decoration-none\" [routerLink]=\"['.', { outlets:{ modal:'add'} }]\">\n <span>+</span><span> </span><span [translate]=\"'Tables.AddItem'\"></span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mb-4\">\n <app-advanced-table [selectable]=\"true\" #table\n [showFooter]=\"false\"\n (load)=\"onDataLoad($event)\" [height]=\"600\"></app-advanced-table>\n </div>\n </div>\n <router-modal></router-modal>\n</div>\n"
|
|
204
|
+
template: "<div>\n <div class=\"row\" *ngIf=\"description\">\n <div class=\"col-auto\">\n <h2>{{description}}</h2>\n <p *ngIf=\"longDescription\">{{longDescription}}</p>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"searchConfiguration\">\n <div class=\"col-12\" [ngVar]=\"{}\" #filter=\"ngVar\">\n <app-advanced-table-search #advancedSearch [(filter)]=\"filter.value\" [collapsed]=\"true\" [table]=\"table\" [allowSave]=\"allowSaveOption\">\n <advanced-search>\n <app-advanced-search-form [form]=\"searchConfiguration\" (filterChange)=\"advancedSearch.asyncAdvancedSearch()\" #search [(filter)]=\"filter.value\"></app-advanced-search-form>\n </advanced-search>\n </app-advanced-table-search>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-auto mt-4\">\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal && recordsTotal > 1\">\n <span>{{recordsTotal}}</span><span> </span><span [translate]=\"'Tables.Items'\"></span>\n </div>\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal === 1\">\n <span>{{recordsTotal}}</span><span> </span><span [translate]=\"'Tables.Item'\"></span>\n </div>\n </div>\n <div class=\"pull-right ml-auto mr-3 mt-3\">\n <div class=\"font-lg btn-toolbar mt-3\">\n <a *ngIf=\"table && table.selected && table.selected.length\"\n class=\"text-danger text-decoration-none mr-2\" href=\"javascript:void(0)\" (click)=\"remove()\">\n <span>-</span><span> </span><span [translate]=\"'Tables.RemoveItem'\"></span>\n </a>\n <a class=\"text-indigo text-decoration-none\" [routerLink]=\"['.', { outlets:{ modal:'add'} }]\">\n <span>+</span><span> </span><span [translate]=\"'Tables.AddItem'\"></span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mb-4\">\n <app-advanced-table [selectable]=\"true\" #table\n [showFooter]=\"false\"\n (load)=\"onDataLoad($event)\" [height]=\"600\"></app-advanced-table>\n </div>\n </div>\n <router-modal></router-modal>\n</div>\n"
|
|
159
205
|
}] }
|
|
160
206
|
];
|
|
161
207
|
/** @nocollapse */
|
|
@@ -181,5 +227,47 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
181
227
|
return AdvancedListComponent;
|
|
182
228
|
}());
|
|
183
229
|
export { AdvancedListComponent };
|
|
230
|
+
if (false) {
|
|
231
|
+
/** @type {?} */
|
|
232
|
+
AdvancedListComponent.prototype.recordsTotal;
|
|
233
|
+
/** @type {?} */
|
|
234
|
+
AdvancedListComponent.prototype.config;
|
|
235
|
+
/** @type {?} */
|
|
236
|
+
AdvancedListComponent.prototype.subscription;
|
|
237
|
+
/** @type {?} */
|
|
238
|
+
AdvancedListComponent.prototype.dataSubscription;
|
|
239
|
+
/** @type {?} */
|
|
240
|
+
AdvancedListComponent.prototype.reloadSubscription;
|
|
241
|
+
/** @type {?} */
|
|
242
|
+
AdvancedListComponent.prototype.entitySet;
|
|
243
|
+
/** @type {?} */
|
|
244
|
+
AdvancedListComponent.prototype.category;
|
|
245
|
+
/** @type {?} */
|
|
246
|
+
AdvancedListComponent.prototype.description;
|
|
247
|
+
/** @type {?} */
|
|
248
|
+
AdvancedListComponent.prototype.longDescription;
|
|
249
|
+
/** @type {?} */
|
|
250
|
+
AdvancedListComponent.prototype.tableConfiguration;
|
|
251
|
+
/** @type {?} */
|
|
252
|
+
AdvancedListComponent.prototype.searchConfiguration;
|
|
253
|
+
/** @type {?} */
|
|
254
|
+
AdvancedListComponent.prototype.table;
|
|
255
|
+
/** @type {?} */
|
|
256
|
+
AdvancedListComponent.prototype.allowSaveOption;
|
|
257
|
+
/** @type {?} */
|
|
258
|
+
AdvancedListComponent.prototype._context;
|
|
259
|
+
/** @type {?} */
|
|
260
|
+
AdvancedListComponent.prototype._translateService;
|
|
261
|
+
/** @type {?} */
|
|
262
|
+
AdvancedListComponent.prototype._activatedRoute;
|
|
263
|
+
/** @type {?} */
|
|
264
|
+
AdvancedListComponent.prototype._errorService;
|
|
265
|
+
/** @type {?} */
|
|
266
|
+
AdvancedListComponent.prototype._toastService;
|
|
267
|
+
/** @type {?} */
|
|
268
|
+
AdvancedListComponent.prototype._modalService;
|
|
269
|
+
/** @type {?} */
|
|
270
|
+
AdvancedListComponent.prototype._userActivityService;
|
|
271
|
+
}
|
|
184
272
|
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC1saXN0L2FkdmFuY2VkLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBeUIsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBc0IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsNENBQTRDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBMkIsMEJBQTBCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6SSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpEO0lBb0JFLCtCQUFvQixRQUE0QixFQUN0QyxpQkFBbUMsRUFDbkMsZUFBK0IsRUFDL0IsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0Isb0JBQXlDO1FBTi9CLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBQ3RDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLHlCQUFvQixHQUFwQixv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QVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3Qix5bEVBQTZDO2lCQUM5Qzs7OztnQkFkUSxrQkFBa0I7Z0JBQ2xCLGdCQUFnQjtnQkFFaEIsY0FBYztnQkFHZCxZQUFZO2dCQUdaLFlBQVk7Z0JBSGtCLFlBQVk7Z0JBQUUsbUJBQW1COzs7NEJBZ0JyRSxLQUFLLFNBQUMsV0FBVzsyQkFDakIsS0FBSyxTQUFDLFVBQVU7OEJBQ2hCLEtBQUssU0FBQyxhQUFhO2tDQUNuQixLQUFLLFNBQUMsaUJBQWlCO3FDQUN2QixLQUFLLFNBQUMsb0JBQW9CO3NDQUMxQixLQUFLLFNBQUMscUJBQXFCO3dCQUMzQixTQUFTLFNBQUMsT0FBTztrQ0FDakIsS0FBSyxTQUFDLGlCQUFpQjs7SUFpSjFCLDRCQUFDO0NBQUEsQUFuS0QsSUFtS0M7U0EvSlkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBJbmplY3RhYmxlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0LCBBbmd1bGFyRGF0YVNlcnZpY2UgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0LCBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UsIERJQUxPR19CVVRUT05TLCBNb2RhbFNlcnZpY2UsIFVzZXJBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1Jlc3BvbnNlRXJyb3J9IGZyb20gJ0B0aGVtb3N0L2NsaWVudCc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyByZWNvcmRzVG90YWw6IG51bWJlcjtcbiAgcHVibGljIGNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGRhdGFTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgQElucHV0KCdlbnRpdHlTZXQnKSBlbnRpdHlTZXQ6IHN0cmluZztcbiAgQElucHV0KCdjYXRlZ29yeScpIGNhdGVnb3J5OiBzdHJpbmc7XG4gIEBJbnB1dCgnZGVzY3JpcHRpb24nKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBASW5wdXQoJ2xvbmdEZXNjcmlwdGlvbicpIGxvbmdEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBASW5wdXQoJ3RhYmxlQ29uZmlndXJhdGlvbicpIHRhYmxlQ29uZmlndXJhdGlvbjogYW55O1xuICBASW5wdXQoJ3NlYXJjaENvbmZpZ3VyYXRpb24nKSBzZWFyY2hDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBJbnB1dCgnYWxsb3dTYXZlT3B0aW9uJykgYWxsb3dTYXZlT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlckFjdGl2aXR5U2VydmljZTogVXNlckFjdGl2aXR5U2VydmljZVxuICAgICkgeyB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gZ2V0IG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuX2NvbnRleHQuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIC8vIGdldCByb3V0ZSBkYXRhXG4gICAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSggcm91dGVEYXRhID0+IHtcbiAgICAgICAgLy8gZ2V0IGVudGl0eVR5cGVcbiAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGBeJHtyb3V0ZURhdGEubW9kZWx9JGAsICdpZycpO1xuICAgICAgICBjb25zdCBlbnRpdHlTZXQgPSBtZXRhZGF0YS5FbnRpdHlDb250YWluZXIuRW50aXR5U2V0LmZpbmQoIHggPT4ge1xuICAgICAgICAgIHJldHVybiByZS50ZXN0KHguTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZiBlbnRpdHkgdHlwZSBpcyBudWxsXG4gICAgICAgIGlmIChlbnRpdHlTZXQgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIG5hdmlnYXRlIHRvIGVycm9yXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5uYXZpZ2F0ZVRvRXJyb3IobmV3IFJlc3BvbnNlRXJyb3IoJ0VudGl0eVNldCBOb3QgRm91bmQnLCA0MDQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgZW50aXR5IHR5cGVcbiAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IG1ldGFkYXRhLkVudGl0eVR5cGUuZmluZCggeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHguTmFtZSA9PT0gZW50aXR5U2V0LkVudGl0eVR5cGU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZW50aXR5VHlwZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5uYXZpZ2F0ZVRvRXJyb3IobmV3IFJlc3BvbnNlRXJyb3IoJ0VudGl0eVR5cGUgTm90IEZvdW5kJywgNDA0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbiwgJ2FsbG93U2F2ZScpKSB7XG4gICAgICAgICAgICB0aGlzLmFsbG93U2F2ZU9wdGlvbiA9IHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uLmFsbG93U2F2ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWFyY2hDb25maWd1cmF0aW9uID0gcm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS50YWJsZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbiA9IHJvdXRlRGF0YS50YWJsZUNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmxvbmdEZXNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMubG9uZ0Rlc2NyaXB0aW9uID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5sb25nRGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuY2F0ZWdvcnkpIHtcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5jYXRlZ29yeSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvbmUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb25maWd1cmF0aW9uID0gQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24uY2FzdCh0aGlzLnRhYmxlQ29uZmlndXJhdGlvbiwgdHJ1ZSk7XG4gICAgICAgIC8vIGNvcnJlY3QgZWRpdCBidXR0b24gbGlua1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBkZWZhdWx0Q29uZmlndXJhdGlvbi5jb2x1bW5zLmZpbmQoIGNvbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5mb3JtYXR0ZXIgPT09ICdCdXR0b25Gb3JtYXR0ZXInICYmIGNvbC5mb3JtYXRTdHJpbmcgPT09ICcobW9kYWw6ZWRpdCknO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIGNvbnN0IHVybDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhdGhGcm9tUm9vdC5mb3JFYWNoKCByb3V0ZSA9PiB7XG4gICAgICAgICAgICB1cmwucHVzaC5hcHBseSh1cmwsIHJvdXRlLnVybCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29sdW1uLmZvcm1hdFN0cmluZyA9IGAjLyR7dXJsLmpvaW4oJy8nKX0vKG1vZGFsOlxcJFxce2lkXFx9L2VkaXQpYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGUgbGlzdCBjb25maWd1cmF0aW9uIGJ5IGFzc2lnbmluZyBsaXN0IGVudGl0eSBzZXRcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBtb2RlbDogZW50aXR5U2V0Lk5hbWVcbiAgICAgICAgfSwgZGVmYXVsdENvbmZpZ3VyYXRpb24pO1xuICAgICAgICAvLyBmZXRjaCBkYXRhXG4gICAgICAgIHRoaXMudGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgIC8vIGRvIHJlbG9hZCBieSB1c2luZyBoaWRkZW4gZnJhZ21lbnQgZS5nLiAvY2xhc3NlcyNyZWxvYWRcbiAgICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5mcmFnbWVudC5zdWJzY3JpYmUoZnJhZ21lbnQgPT4ge1xuICAgICAgICAgIGlmIChmcmFnbWVudCAmJiBmcmFnbWVudCA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NldHRpbmdzLk9wZXJhdGlvbkNvbXBsZXRlZCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBmaW5hbGx5IGFkZCB1c2VyIGFjdGl2aXR5XG4gICAgICAgIHRoaXMuX3VzZXJBY3Rpdml0eVNlcnZpY2Uuc2V0SXRlbSh7XG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgZGF0ZUNyZWF0ZWQ6IG5ldyBEYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIERhdGEgbG9hZCBldmVudCBoYW5kbGVyIG9mIGFkdmFuY2VkIHRhYmxlIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge0FkdmFuY2VkVGFibGVEYXRhUmVzdWx0fSBkYXRhXG4gICAqL1xuICBvbkRhdGFMb2FkKGRhdGE6IEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0KSB7XG4gICAgdGhpcy5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgc2VsZWN0ZWQgaXRlbXNcbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLnNlbGVjdGVkICYmIHRoaXMudGFibGUuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAvLyBnZXQgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuc2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtc1RpdGxlJyksXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1zTWVzc2FnZScpLFxuICAgICAgICBESUFMT0dfQlVUVE9OUy5Pa0NhbmNlbCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLnJlbW92ZShpdGVtcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKyAnOicgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS50aXRsZScpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgoaXRlbXMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2Uub25lJyA6ICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2UubWFueScpXG4gICAgICAgICAgICAgICAgICAsIHsgdmFsdWU6IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLnRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC1saXN0L2FkdmFuY2VkLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQTJCLDBCQUEwQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekksT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7SUF1Qi9DLCtCQUFvQixRQUE0QixFQUN0QyxtQkFDQSxpQkFDQSxlQUNBLGVBQ0EsZUFDQTtRQU5VLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBQ3RDLHNCQUFpQixHQUFqQixpQkFBaUI7UUFDakIsb0JBQWUsR0FBZixlQUFlO1FBQ2Ysa0JBQWEsR0FBYixhQUFhO1FBQ2Isa0JBQWEsR0FBYixhQUFhO1FBQ2Isa0JBQWEsR0FBYixhQUFhO1FBQ2IseUJBQW9CLEdBQXBCLG9CQUFvQjsrQkFSYyxJQUFJO0tBU3pDOzs7O0lBQ1AsMkNBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7S0FDRjs7OztJQUVLLHdDQUFROzs7SUFBZDs7Ozs7Ozs7d0JBRUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTs0QkFDdEIsc0JBQU87eUJBQ1I7d0JBQ0QsVUFBYyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUVSLHFCQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUE7O3FDQUFqQyxTQUFpQzs7d0JBRWxELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUUsVUFBQSxTQUFTOzs0QkFFcEUsSUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBSSxTQUFTLGVBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQzs7NEJBQ3BELElBQU0sU0FBUyxHQUFHLFVBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBRSxVQUFBLENBQUM7Z0NBQzFELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQ3hCLENBQUMsQ0FBQzs7NEJBRUgsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFOztnQ0FFckIsT0FBTyxLQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOzZCQUMxRjs7NEJBRUQsSUFBTSxVQUFVLEdBQUcsVUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUUsVUFBQSxDQUFDO2dDQUM1QyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQzs2QkFDeEMsQ0FBQyxDQUFDOzRCQUNILElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtnQ0FDdEIsT0FBTyxLQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOzZCQUMzRjs0QkFDRCxJQUFJLFNBQVMseUJBQXNCO2dDQUNqQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLHlCQUFzQixXQUFXLENBQUMsRUFBRTtvQ0FDcEYsS0FBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLHdCQUFxQixTQUFTLENBQUM7aUNBQ2hFO2dDQUNELEtBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLHVCQUFvQixDQUFDOzZCQUMxRDs0QkFDRCxJQUFJLFNBQVMsd0JBQXFCO2dDQUNoQyxLQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxzQkFBbUIsQ0FBQzs2QkFDeEQ7NEJBQ0QsSUFBSSxTQUFTLGlCQUFjO2dDQUN6QixLQUFJLENBQUMsV0FBVyxHQUFHLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxnQkFBYSxDQUFDOzZCQUMxRTs0QkFDRCxJQUFJLFNBQVMscUJBQWtCO2dDQUM3QixLQUFJLENBQUMsZUFBZSxHQUFHLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxvQkFBaUIsQ0FBQzs2QkFDbEY7NEJBQ0QsSUFBSSxTQUFTLGNBQVc7Z0NBQ3RCLEtBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLGFBQVUsQ0FBQzs2QkFDcEU7OzRCQUVELElBQU0sb0JBQW9CLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQzs7NEJBRTVGLElBQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUUsVUFBQSxHQUFHO2dDQUNuRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssaUJBQWlCLElBQUksR0FBRyxDQUFDLFlBQVksS0FBSyxjQUFjLENBQUM7NkJBQ25GLENBQUMsQ0FBQzs0QkFDSCxJQUFJLE1BQU0sRUFBRTs7Z0NBQ1YsSUFBTSxLQUFHLEdBQWtCLEVBQUUsQ0FBQztnQ0FDOUIsS0FBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBRSxVQUFBLEtBQUs7b0NBQ3ZELEtBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7aUNBQ2hDLENBQUMsQ0FBQztnQ0FDSCxNQUFNLENBQUMsWUFBWSxHQUFHLE9BQUssS0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUM7NkJBQ2xFOzs0QkFFRCxBQURBLHlEQUF5RDs0QkFDekQsT0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dDQUMzQixLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUk7NkJBQ3RCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQzs7NEJBRXpCLEFBREEsYUFBYTs0QkFDYixPQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzs0QkFFbEIsQUFEQSwwREFBMEQ7NEJBQzFELEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBQSxRQUFRO2dDQUN4RSxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFO29DQUNyQyxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksbUJBQ3JCLEtBQUksQ0FBQyxXQUFxQixHQUMxQixLQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQzlELENBQUM7b0NBQ0YsT0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQ0FDbkI7NkJBQ0YsQ0FBQyxDQUFDOzs0QkFFSCxBQURBLDRCQUE0Qjs0QkFDNUIsS0FBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztnQ0FDaEMsUUFBUSxvQkFBRSxLQUFJLENBQUMsUUFBa0IsQ0FBQTtnQ0FDakMsV0FBVyxvQkFBRSxLQUFJLENBQUMsV0FBcUIsQ0FBQTtnQ0FDdkMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3RDLFdBQVcsRUFBRSxJQUFJLElBQUk7NkJBQ3RCLENBQUMsQ0FBQzt5QkFDSixDQUFDLENBQUM7Ozs7d0JBRUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFHLENBQUMsQ0FBQzt3QkFDbkIsc0JBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBRyxDQUFDLEVBQUM7Ozs7O0tBRTVDO0lBR0Q7OztPQUdHOzs7Ozs7SUFDSCwwQ0FBVTs7Ozs7SUFBVixVQUFXLElBQTZCO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztLQUN2QztJQUVEOztPQUVHOzs7OztJQUNILHNDQUFNOzs7O0lBQU47UUFBQSxpQkEwQkM7O1FBekJDLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTs7WUFFcEQsSUFBTSxPQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsRUFDekQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxFQUMzRCxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsTUFBTTtnQkFDbEMsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO29CQUNuQixLQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ3pELEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixLQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxLQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLEVBQ3pGLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUNsRCw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsRUFDL0QsRUFBRSxLQUFLLEVBQUUsT0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQzdCLENBQUM7d0JBQ0YsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDbkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFBLEdBQUc7d0JBQ1YsS0FBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFOzRCQUNoQyxZQUFZLEVBQUUsR0FBRzt5QkFDbEIsQ0FBQyxDQUFDO3FCQUNKLENBQUMsQ0FBQztpQkFDSjthQUNGLENBQUMsQ0FBQztTQUNOO0tBQ0Y7O2dCQXZLRixTQUFTLFNBQUM7O29CQUVULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLHltRUFBNkM7aUJBQzlDOzs7O2dCQWZRLGtCQUFrQjtnQkFDbEIsZ0JBQWdCO2dCQUVoQixjQUFjO2dCQUdkLFlBQVk7Z0JBR1osWUFBWTtnQkFIa0IsWUFBWTtnQkFBRSxtQkFBbUI7Ozs0QkFpQnJFLEtBQUssU0FBQyxXQUFXOzJCQUNqQixLQUFLLFNBQUMsVUFBVTs4QkFDaEIsS0FBSyxTQUFDLGFBQWE7a0NBQ25CLEtBQUssU0FBQyxpQkFBaUI7cUNBQ3ZCLEtBQUssU0FBQyxvQkFBb0I7c0NBQzFCLEtBQUssU0FBQyxxQkFBcUI7d0JBQzNCLFNBQVMsU0FBQyxPQUFPO2tDQUNqQixLQUFLLFNBQUMsaUJBQWlCOztnQ0EvQjFCOztTQWlCYSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0LCBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UsIERJQUxPR19CVVRUT05TLCBNb2RhbFNlcnZpY2UsIFVzZXJBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBSZXNwb25zZUVycm9yIH0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7IFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVjb3Jkc1RvdGFsPzogbnVtYmVyO1xuICBwdWJsaWMgY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkYXRhU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlbG9hZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgQElucHV0KCdlbnRpdHlTZXQnKSBlbnRpdHlTZXQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgnY2F0ZWdvcnknKSBjYXRlZ29yeT86IHN0cmluZztcbiAgQElucHV0KCdkZXNjcmlwdGlvbicpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoJ2xvbmdEZXNjcmlwdGlvbicpIGxvbmdEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCd0YWJsZUNvbmZpZ3VyYXRpb24nKSB0YWJsZUNvbmZpZ3VyYXRpb246IGFueTtcbiAgQElucHV0KCdzZWFyY2hDb25maWd1cmF0aW9uJykgc2VhcmNoQ29uZmlndXJhdGlvbjogYW55O1xuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQElucHV0KCdhbGxvd1NhdmVPcHRpb24nKSBhbGxvd1NhdmVPcHRpb24gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIF91c2VyQWN0aXZpdHlTZXJ2aWNlOiBVc2VyQWN0aXZpdHlTZXJ2aWNlXG4gICAgKSB7IH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICAgIC8vIGdldCBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLl9jb250ZXh0LmdldE1ldGFkYXRhKCk7XG4gICAgICAvLyBnZXQgcm91dGUgZGF0YVxuICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoIHJvdXRlRGF0YSA9PiB7XG4gICAgICAgIC8vIGdldCBlbnRpdHlUeXBlXG4gICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7cm91dGVEYXRhLm1vZGVsfSRgLCAnaWcnKTtcbiAgICAgICAgY29uc3QgZW50aXR5U2V0ID0gbWV0YWRhdGEuRW50aXR5Q29udGFpbmVyLkVudGl0eVNldC5maW5kKCB4ID0+IHtcbiAgICAgICAgICByZXR1cm4gcmUudGVzdCh4Lk5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaWYgZW50aXR5IHR5cGUgaXMgbnVsbFxuICAgICAgICBpZiAoZW50aXR5U2V0ID09IG51bGwpIHtcbiAgICAgICAgICAvLyBuYXZpZ2F0ZSB0byBlcnJvclxuICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2UubmF2aWdhdGVUb0Vycm9yKG5ldyBSZXNwb25zZUVycm9yKCdFbnRpdHlTZXQgTm90IEZvdW5kJywgNDA0KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IGVudGl0eSB0eXBlXG4gICAgICAgIGNvbnN0IGVudGl0eVR5cGUgPSBtZXRhZGF0YS5FbnRpdHlUeXBlLmZpbmQoIHggPT4ge1xuICAgICAgICAgIHJldHVybiB4Lk5hbWUgPT09IGVudGl0eVNldC5FbnRpdHlUeXBlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2UubmF2aWdhdGVUb0Vycm9yKG5ldyBSZXNwb25zZUVycm9yKCdFbnRpdHlUeXBlIE5vdCBGb3VuZCcsIDQwNCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24sICdhbGxvd1NhdmUnKSkge1xuICAgICAgICAgICAgdGhpcy5hbGxvd1NhdmVPcHRpb24gPSByb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbi5hbGxvd1NhdmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VhcmNoQ29uZmlndXJhdGlvbiA9IHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEudGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24gPSByb3V0ZURhdGEudGFibGVDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5sb25nRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmxvbmdEZXNjcmlwdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEubG9uZ0Rlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmNhdGVnb3J5KSB7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yeSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEuY2F0ZWdvcnkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsb25lIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgICAgICBjb25zdCBkZWZhdWx0Q29uZmlndXJhdGlvbiA9IEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uLmNhc3QodGhpcy50YWJsZUNvbmZpZ3VyYXRpb24sIHRydWUpO1xuICAgICAgICAvLyBjb3JyZWN0IGVkaXQgYnV0dG9uIGxpbmtcbiAgICAgICAgY29uc3QgY29sdW1uID0gZGVmYXVsdENvbmZpZ3VyYXRpb24uY29sdW1ucy5maW5kKCBjb2wgPT4ge1xuICAgICAgICAgIHJldHVybiBjb2wuZm9ybWF0dGVyID09PSAnQnV0dG9uRm9ybWF0dGVyJyAmJiBjb2wuZm9ybWF0U3RyaW5nID09PSAnKG1vZGFsOmVkaXQpJztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICBjb25zdCB1cmw6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXRoRnJvbVJvb3QuZm9yRWFjaCggcm91dGUgPT4ge1xuICAgICAgICAgICAgdXJsLnB1c2guYXBwbHkodXJsLCByb3V0ZS51cmwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBgIy8ke3VybC5qb2luKCcvJyl9Lyhtb2RhbDpcXCRcXHtpZFxcfS9lZGl0KWA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGxpc3QgY29uZmlndXJhdGlvbiBieSBhc3NpZ25pbmcgbGlzdCBlbnRpdHkgc2V0XG4gICAgICAgIHRhYmxlLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgIG1vZGVsOiBlbnRpdHlTZXQuTmFtZVxuICAgICAgICB9LCBkZWZhdWx0Q29uZmlndXJhdGlvbik7XG4gICAgICAgIC8vIGZldGNoIGRhdGFcbiAgICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgIC8vIGRvIHJlbG9hZCBieSB1c2luZyBoaWRkZW4gZnJhZ21lbnQgZS5nLiAvY2xhc3NlcyNyZWxvYWRcbiAgICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5mcmFnbWVudC5zdWJzY3JpYmUoZnJhZ21lbnQgPT4ge1xuICAgICAgICAgIGlmIChmcmFnbWVudCAmJiBmcmFnbWVudCA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTZXR0aW5ncy5PcGVyYXRpb25Db21wbGV0ZWQnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGZpbmFsbHkgYWRkIHVzZXIgYWN0aXZpdHlcbiAgICAgICAgdGhpcy5fdXNlckFjdGl2aXR5U2VydmljZS5zZXRJdGVtKHtcbiAgICAgICAgICBjYXRlZ29yeTogdGhpcy5jYXRlZ29yeSBhcyBzdHJpbmcsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24gYXMgc3RyaW5nLFxuICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpLFxuICAgICAgICAgIGRhdGVDcmVhdGVkOiBuZXcgRGF0ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBEYXRhIGxvYWQgZXZlbnQgaGFuZGxlciBvZiBhZHZhbmNlZCB0YWJsZSBjb21wb25lbnRcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIG9uRGF0YUxvYWQoZGF0YTogQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQpIHtcbiAgICB0aGlzLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBzZWxlY3RlZCBpdGVtc1xuICAgKi9cbiAgcmVtb3ZlKCkge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICBpZiAodGFibGUgJiYgdGFibGUuc2VsZWN0ZWQgJiYgdGFibGUuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAvLyBnZXQgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICBjb25zdCBpdGVtcyA9IHRhYmxlLnNlbGVjdGVkO1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGFsU2VydmljZS5zaG93V2FybmluZ0RpYWxvZyhcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuUmVtb3ZlSXRlbXNUaXRsZScpLFxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtc01lc3NhZ2UnKSxcbiAgICAgICAgRElBTE9HX0JVVFRPTlMuT2tDYW5jZWwpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0Lm1vZGVsKHRhYmxlLmNvbmZpZy5tb2RlbCkucmVtb3ZlKGl0ZW1zKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArICc6JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1NZXNzYWdlLnRpdGxlJyksXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KChpdGVtcy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgICAgICAgJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS5vbmUnIDogJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS5tYW55JylcbiAgICAgICAgICAgICAgICAgICwgeyB2YWx1ZTogaXRlbXMubGVuZ3RoIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|