@universis/ngx-tables 0.8.5 → 6.0.1
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 +577 -127
- 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 +762 -165
- 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 +1871 -570
- package/fesm2015/universis-ngx-tables.js.map +1 -1
- package/fesm5/universis-ngx-tables.js +2903 -803
- 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,3 +1,7 @@
|
|
|
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, ElementRef, Input, ViewChild } from '@angular/core';
|
|
3
7
|
import { RouterModalOkCancel } from '@universis/common/routing';
|
|
@@ -7,9 +11,19 @@ import { AngularDataContext } from '@themost/angular';
|
|
|
7
11
|
import { AdvancedFilterValueProvider } from './../advanced-table/advanced-filter-value-provider.service';
|
|
8
12
|
import { DatePipe } from '@angular/common';
|
|
9
13
|
import { TemplatePipe } from '@universis/common';
|
|
10
|
-
|
|
11
|
-
// see more https://angular.io/guide/aot-metadata-errors#only-initialized-variables
|
|
14
|
+
/** @type {?} */
|
|
12
15
|
export var AdvancedTableModalBaseTemplate = "\n<div>\n <!-- search -->\n <div class=\"row mt-3\">\n <div class=\"col-12 col-lg-3\">\n <div class=\"input-group mb-3\">\n <input spellcheck=\"false\" type=\"text\" #searchElement\n (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"searchText\"\n class=\"form-control bg-gray-100 border-0\"\n placeholder=\"{{'Tables.SearchPlaceholder' | translate}}\" aria-label=\"Search\" aria-describedby=\"basic-addon2\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-default bg-gray-100 border-0\" type=\"button\" (click)=\"onSearch()\">\n <i class=\"fa fa-search text-secondary\"></i>\n </button>\n </div>\n </div>\n </div>\n <div #emptyTable class=\"d-none\">\n <div>\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-gray-300 border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-dark\" [translate]=\"'Tables.EmptyTableTitle'\"></h4>\n <p class=\"font-lg text-dark\" [translate]=\"'Tables.EmptyTableMessage'\"></p>\n </div>\n\n </div>\n </div>\n <div class=\"col-12 col-lg-5\">\n <div class=\"btn-toolbar\">\n <button class=\"btn btn-gray-100\">\n <i class=\"fa fa-sliders-h pr-2 text-secondary\" aria-hidden=\"true\"></i>{{'Tables.Filters' | translate}}\n </button>\n <div #dropdownFilter class=\"dropdown ml-3\">\n <button class=\"btn btn-gray-100 dropdown-toggle\"\n type=\"button\" id=\"dropdownDefaultFilters\"\n data-toggle=\"dropdown\" dropdownToggle>\n {{ this.defaultFilter.name | translate }}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownDefaultFilters\">\n <button type=\"button\" class=\"dropdown-item\" *ngFor=\"let filter of defaultFilters\" (click)=\"onFilterSelect(filter)\">\n {{ filter.name | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col text-lg-right mt-3 mt-lg-0 d-none\">\n <button [disabled]=\"true\" class=\"btn rounded-pill btn-outline-theme\">\n <span class=\"pr-2 font-lg\">+</span><span [translate]=\"'Tables.AddItem'\"></span>\n </button>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\" [ngClass]=\"{ 'component-loading': loading}\">\n <app-advanced-table #advancedTable (init)=\"onTableInit()\"\n (load)=\"onDataLoad($event)\"\n [selectable]=\"true\"\n [multipleSelect]=\"true\"\n [scrollX]=\"false\" [scrollY]=\"320\"\n [pageLength]=\"pageLength\"\n [scrollable]=\"false\" [showFooter]=\"false\"\n [showActions]=\"false\" [lengthMenu]=\"lengthMenu\"\n [config]=\"tableConfig\" [configSrc]=\"tableConfigSrc\"></app-advanced-table>\n </div>\n </div>\n <div class=\"row mt-3 table-custom-pager\">\n <div class=\"col-12 d-flex\" *ngIf=\"recordsTotal\">\n <div class=\"mt-2 ml-auto mr-3 text-secondary\" [translate]=\"'Tables.RecordsPerPage'\"></div>\n <div #dropdownLength class=\"dropdown mr-3\">\n <button class=\"btn btn-gray-100 dropdown-toggle\"\n type=\"button\" id=\"dropdownPageSize\" data-toggle=\"dropdown\"\n dropdownToggle>\n {{pageLength}}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownPageSize\">\n <button (click)=\"setLength(item)\"\n class=\"dropdown-item dropdown-item-theme\"\n type=\"button\" *ngFor=\"let item of lengthMenu\">{{item}}</button>\n </div>\n </div>\n <div class=\"mt-2 mr-2\" [translate]=\"'Tables.PageInfo'\" [translateParams]=\"pageInfo\"></div>\n <button [disabled]=\"pageInfo && pageInfo.page === 0\" class=\"btn text-nowrap\" (click)=\"firstPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===0\" class=\"btn\" (click)=\"previousPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn\" (click)=\"nextPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn text-nowrap\" (click)=\"lastPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n </div>\n </div>\n </div>\n";
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* A specific value for a criterion
|
|
19
|
+
*
|
|
20
|
+
* @record
|
|
21
|
+
*/
|
|
22
|
+
function SearchItem() { }
|
|
23
|
+
/** @type {?} */
|
|
24
|
+
SearchItem.prototype.filter;
|
|
25
|
+
/** @type {?} */
|
|
26
|
+
SearchItem.prototype.name;
|
|
13
27
|
var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
14
28
|
tslib_1.__extends(AdvancedTableModalBaseComponent, _super);
|
|
15
29
|
function AdvancedTableModalBaseComponent(_router, _activatedRoute, _context, advancedFilterValueProvider, datePipe) {
|
|
@@ -24,14 +38,20 @@ var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
|
24
38
|
_this.recordsFiltered = 0;
|
|
25
39
|
_this.defaultFilters = [AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER];
|
|
26
40
|
_this.defaultFilter = AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;
|
|
27
|
-
_this.pageInfo = {
|
|
41
|
+
_this.pageInfo = /** @type {?} */ ({
|
|
28
42
|
serverSide: true
|
|
29
|
-
};
|
|
43
|
+
});
|
|
30
44
|
_this.modalClass = 'modal-xl modal-table';
|
|
31
45
|
_this._template = new TemplatePipe();
|
|
32
46
|
return _this;
|
|
33
47
|
}
|
|
34
|
-
|
|
48
|
+
/**
|
|
49
|
+
* @return {?}
|
|
50
|
+
*/
|
|
51
|
+
AdvancedTableModalBaseComponent.prototype.ngAfterViewInit = /**
|
|
52
|
+
* @return {?}
|
|
53
|
+
*/
|
|
54
|
+
function () {
|
|
35
55
|
var _this = this;
|
|
36
56
|
setTimeout(function () {
|
|
37
57
|
if (_this.searchElement && _this.searchElement.nativeElement) {
|
|
@@ -39,13 +59,24 @@ var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
|
39
59
|
}
|
|
40
60
|
}, 0);
|
|
41
61
|
};
|
|
42
|
-
|
|
62
|
+
/**
|
|
63
|
+
* @param {?} componentType
|
|
64
|
+
* @return {?}
|
|
65
|
+
*/
|
|
66
|
+
AdvancedTableModalBaseComponent.prototype._getInputs = /**
|
|
67
|
+
* @param {?} componentType
|
|
68
|
+
* @return {?}
|
|
69
|
+
*/
|
|
70
|
+
function (componentType) {
|
|
71
|
+
/** @type {?} */
|
|
43
72
|
var props = componentType.__prop__metadata__;
|
|
73
|
+
/** @type {?} */
|
|
44
74
|
var inputs = [];
|
|
45
75
|
if (props == null) {
|
|
46
76
|
return inputs;
|
|
47
77
|
}
|
|
48
78
|
Object.keys(props).forEach(function (prop) {
|
|
79
|
+
/** @type {?} */
|
|
49
80
|
var member = props[prop][0];
|
|
50
81
|
if (member.ngMetadataName === 'Input') {
|
|
51
82
|
inputs.push(prop);
|
|
@@ -53,89 +84,155 @@ var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
|
53
84
|
});
|
|
54
85
|
return inputs.sort();
|
|
55
86
|
};
|
|
56
|
-
|
|
87
|
+
/**
|
|
88
|
+
* @return {?}
|
|
89
|
+
*/
|
|
90
|
+
AdvancedTableModalBaseComponent.prototype.hasInputs = /**
|
|
91
|
+
* @return {?}
|
|
92
|
+
*/
|
|
93
|
+
function () {
|
|
57
94
|
return [];
|
|
58
95
|
};
|
|
59
|
-
|
|
96
|
+
/**
|
|
97
|
+
* @return {?}
|
|
98
|
+
*/
|
|
99
|
+
AdvancedTableModalBaseComponent.prototype.ngOnInit = /**
|
|
100
|
+
* @return {?}
|
|
101
|
+
*/
|
|
102
|
+
function () {
|
|
60
103
|
var _this = this;
|
|
61
104
|
this.okButtonText = 'Tables.Apply';
|
|
62
105
|
this.cancelButtonText = 'Tables.Cancel';
|
|
63
106
|
// get route data
|
|
64
107
|
this.subscription = this.activatedRoute.data.subscribe(function (data) {
|
|
65
108
|
// set modal title if any
|
|
66
|
-
if (data
|
|
67
|
-
_this.modalTitle = data
|
|
109
|
+
if (data["title"]) {
|
|
110
|
+
_this.modalTitle = data["title"];
|
|
68
111
|
}
|
|
69
|
-
if (data
|
|
70
|
-
_this.tableConfig = data
|
|
112
|
+
if (data["config"]) {
|
|
113
|
+
_this.tableConfig = data["config"];
|
|
71
114
|
}
|
|
72
115
|
if (_this.tableConfig) {
|
|
73
116
|
_this.defaultFilters.push.apply(_this.defaultFilters, _this.tableConfig.searches);
|
|
74
117
|
}
|
|
75
|
-
|
|
76
|
-
// because there are empty during runtime
|
|
77
|
-
// so we need to define manually input properties that are going to be bind through this process
|
|
78
|
-
// bind all inputs
|
|
118
|
+
/** @type {?} */
|
|
79
119
|
var inputs = _this.hasInputs();
|
|
80
120
|
inputs.forEach(function (input) {
|
|
81
121
|
if (Object.prototype.hasOwnProperty.call(data, input)) {
|
|
82
122
|
_this[input] = data[input];
|
|
83
123
|
}
|
|
84
124
|
});
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
125
|
+
if (_this.advancedTable) {
|
|
126
|
+
_this.configChangesSubscription = _this.advancedTable.configChanges.subscribe(function (config) {
|
|
127
|
+
if (_this.tableConfig) {
|
|
128
|
+
// reset default filter
|
|
129
|
+
// reset default filter
|
|
130
|
+
_this.defaultFilter = AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;
|
|
131
|
+
// init filter
|
|
132
|
+
// init filter
|
|
133
|
+
_this.defaultFilters = [AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER];
|
|
134
|
+
// add extra filters
|
|
135
|
+
// add extra filters
|
|
136
|
+
_this.defaultFilters.push.apply(_this.defaultFilters, _this.tableConfig.searches);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
95
140
|
});
|
|
96
141
|
};
|
|
97
|
-
|
|
142
|
+
/**
|
|
143
|
+
* @return {?}
|
|
144
|
+
*/
|
|
145
|
+
AdvancedTableModalBaseComponent.prototype.cancel = /**
|
|
146
|
+
* @return {?}
|
|
147
|
+
*/
|
|
148
|
+
function () {
|
|
98
149
|
return this.close();
|
|
99
150
|
};
|
|
100
|
-
|
|
151
|
+
/**
|
|
152
|
+
* @return {?}
|
|
153
|
+
*/
|
|
154
|
+
AdvancedTableModalBaseComponent.prototype.ok = /**
|
|
155
|
+
* @return {?}
|
|
156
|
+
*/
|
|
157
|
+
function () {
|
|
101
158
|
return this.close();
|
|
102
159
|
};
|
|
103
|
-
|
|
160
|
+
/**
|
|
161
|
+
* @return {?}
|
|
162
|
+
*/
|
|
163
|
+
AdvancedTableModalBaseComponent.prototype.ngOnDestroy = /**
|
|
164
|
+
* @return {?}
|
|
165
|
+
*/
|
|
166
|
+
function () {
|
|
104
167
|
if (this.subscription) {
|
|
105
168
|
this.subscription.unsubscribe();
|
|
106
169
|
}
|
|
107
170
|
};
|
|
108
|
-
|
|
171
|
+
/**
|
|
172
|
+
* @param {?} data
|
|
173
|
+
* @return {?}
|
|
174
|
+
*/
|
|
175
|
+
AdvancedTableModalBaseComponent.prototype.onDataLoad = /**
|
|
176
|
+
* @param {?} data
|
|
177
|
+
* @return {?}
|
|
178
|
+
*/
|
|
179
|
+
function (data) {
|
|
109
180
|
this.recordsTotal = data.recordsTotal;
|
|
110
181
|
this.recordsFiltered = data.recordsFiltered;
|
|
111
182
|
// get first page info (because page is not going to be fired for first page)
|
|
112
183
|
if (data.recordsTotal > 0 && this.pageInfo.recordsTotal === 0) {
|
|
113
184
|
this.pageInfo.recordsTotal = data.recordsTotal;
|
|
114
185
|
}
|
|
186
|
+
/** @type {?} */
|
|
115
187
|
var self = this;
|
|
116
188
|
};
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
189
|
+
/**
|
|
190
|
+
* @return {?}
|
|
191
|
+
*/
|
|
192
|
+
AdvancedTableModalBaseComponent.prototype.previousPage = /**
|
|
193
|
+
* @return {?}
|
|
194
|
+
*/
|
|
195
|
+
function () {
|
|
196
|
+
if (this.advancedTable) {
|
|
197
|
+
// go to next page
|
|
198
|
+
// noinspection TypeScriptValidateJSTypes
|
|
199
|
+
this.advancedTable.dataTable.page('previous').draw('page');
|
|
200
|
+
}
|
|
121
201
|
};
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
202
|
+
/**
|
|
203
|
+
* @return {?}
|
|
204
|
+
*/
|
|
205
|
+
AdvancedTableModalBaseComponent.prototype.nextPage = /**
|
|
206
|
+
* @return {?}
|
|
207
|
+
*/
|
|
208
|
+
function () {
|
|
209
|
+
if (this.advancedTable) {
|
|
210
|
+
// go to next page
|
|
211
|
+
// noinspection TypeScriptValidateJSTypes
|
|
212
|
+
this.advancedTable.dataTable.page('next').draw('page');
|
|
213
|
+
}
|
|
126
214
|
};
|
|
127
|
-
|
|
215
|
+
/**
|
|
216
|
+
* @return {?}
|
|
217
|
+
*/
|
|
218
|
+
AdvancedTableModalBaseComponent.prototype.onTableInit = /**
|
|
219
|
+
* @return {?}
|
|
220
|
+
*/
|
|
221
|
+
function () {
|
|
222
|
+
/** @type {?} */
|
|
128
223
|
var self = this;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
224
|
+
/** @type {?} */
|
|
225
|
+
var dataTable = self.advancedTable && self.advancedTable.dataTable;
|
|
226
|
+
/** @type {?} */
|
|
227
|
+
var initialPageInfo = /** @type {?} */ (dataTable.page.info());
|
|
132
228
|
initialPageInfo.start += 1;
|
|
133
229
|
self.pageInfo = initialPageInfo;
|
|
134
230
|
// change emptyTableMessage
|
|
135
|
-
dataTable.context[0].oLanguage.sEmptyTable = this.emptyTable.nativeElement.innerHTML;
|
|
231
|
+
dataTable.context[0].oLanguage.sEmptyTable = this.emptyTable && this.emptyTable.nativeElement.innerHTML;
|
|
136
232
|
// bind page change event
|
|
137
233
|
dataTable.on('page.dt', function () {
|
|
138
|
-
|
|
234
|
+
/** @type {?} */
|
|
235
|
+
var pageInfo = /** @type {?} */ (dataTable.page.info());
|
|
139
236
|
pageInfo.start += 1;
|
|
140
237
|
self.pageInfo = pageInfo;
|
|
141
238
|
});
|
|
@@ -143,37 +240,82 @@ var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
|
143
240
|
dataTable.on('draw.dt', function () {
|
|
144
241
|
// for future use
|
|
145
242
|
self.loading = false;
|
|
146
|
-
|
|
243
|
+
/** @type {?} */
|
|
244
|
+
var pageInfo = /** @type {?} */ (dataTable.page.info());
|
|
147
245
|
pageInfo.start += 1;
|
|
148
246
|
self.pageInfo = pageInfo;
|
|
149
247
|
});
|
|
150
248
|
};
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
249
|
+
/**
|
|
250
|
+
* @return {?}
|
|
251
|
+
*/
|
|
252
|
+
AdvancedTableModalBaseComponent.prototype.firstPage = /**
|
|
253
|
+
* @return {?}
|
|
254
|
+
*/
|
|
255
|
+
function () {
|
|
256
|
+
if (this.advancedTable) {
|
|
257
|
+
// go to first page
|
|
258
|
+
// noinspection TypeScriptValidateJSTypes
|
|
259
|
+
this.advancedTable.dataTable.page('first').draw('page');
|
|
260
|
+
}
|
|
155
261
|
};
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
262
|
+
/**
|
|
263
|
+
* @return {?}
|
|
264
|
+
*/
|
|
265
|
+
AdvancedTableModalBaseComponent.prototype.lastPage = /**
|
|
266
|
+
* @return {?}
|
|
267
|
+
*/
|
|
268
|
+
function () {
|
|
269
|
+
if (this.advancedTable) {
|
|
270
|
+
// go to last page
|
|
271
|
+
// noinspection TypeScriptValidateJSTypes
|
|
272
|
+
this.advancedTable.dataTable.page('last').draw('page');
|
|
273
|
+
}
|
|
160
274
|
};
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
275
|
+
/**
|
|
276
|
+
* @param {?} value
|
|
277
|
+
* @return {?}
|
|
278
|
+
*/
|
|
279
|
+
AdvancedTableModalBaseComponent.prototype.setLength = /**
|
|
280
|
+
* @param {?} value
|
|
281
|
+
* @return {?}
|
|
282
|
+
*/
|
|
283
|
+
function (value) {
|
|
284
|
+
if (this.advancedTable) {
|
|
285
|
+
this.pageLength = value;
|
|
286
|
+
this.advancedTable.dataTable.page.len(value).draw();
|
|
287
|
+
}
|
|
164
288
|
};
|
|
165
|
-
|
|
289
|
+
/**
|
|
290
|
+
* @param {?} event
|
|
291
|
+
* @return {?}
|
|
292
|
+
*/
|
|
293
|
+
AdvancedTableModalBaseComponent.prototype.onKeyUp = /**
|
|
294
|
+
* @param {?} event
|
|
295
|
+
* @return {?}
|
|
296
|
+
*/
|
|
297
|
+
function (event) {
|
|
166
298
|
if (event.key === 'Enter' || event.key === 'Return') {
|
|
299
|
+
if (this.advancedTable) {
|
|
300
|
+
// loading
|
|
301
|
+
this.loading = true;
|
|
302
|
+
this.advancedTable.search((/** @type {?} */ (event.target)).value);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
/**
|
|
307
|
+
* @return {?}
|
|
308
|
+
*/
|
|
309
|
+
AdvancedTableModalBaseComponent.prototype.onSearch = /**
|
|
310
|
+
* @return {?}
|
|
311
|
+
*/
|
|
312
|
+
function () {
|
|
313
|
+
if (this.advancedTable) {
|
|
167
314
|
// loading
|
|
168
315
|
this.loading = true;
|
|
169
|
-
this.advancedTable.search(
|
|
316
|
+
this.advancedTable.search(this.searchText);
|
|
170
317
|
}
|
|
171
318
|
};
|
|
172
|
-
AdvancedTableModalBaseComponent.prototype.onSearch = function () {
|
|
173
|
-
// loading
|
|
174
|
-
this.loading = true;
|
|
175
|
-
this.advancedTable.search(this.searchText);
|
|
176
|
-
};
|
|
177
319
|
/**
|
|
178
320
|
*
|
|
179
321
|
* Reads the modal table and returns a list of filters to use in the table
|
|
@@ -181,10 +323,32 @@ var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
|
181
323
|
*
|
|
182
324
|
* @param tableConfig {object} The table configuration from json file
|
|
183
325
|
* @param defaultFilterValues {object} A list of default filters
|
|
184
|
-
* @param
|
|
326
|
+
* @param searchItem The searchItem to use
|
|
327
|
+
*
|
|
328
|
+
*/
|
|
329
|
+
/**
|
|
330
|
+
*
|
|
331
|
+
* Reads the modal table and returns a list of filters to use in the table
|
|
332
|
+
* query.
|
|
333
|
+
*
|
|
334
|
+
* @param {?} tableConfig {object} The table configuration from json file
|
|
335
|
+
* @param {?=} defaultFilterValues {object} A list of default filters
|
|
336
|
+
* @param {?=} searchItem The searchItem to use
|
|
185
337
|
*
|
|
338
|
+
* @return {?}
|
|
186
339
|
*/
|
|
187
|
-
AdvancedTableModalBaseComponent.prototype.getFilters =
|
|
340
|
+
AdvancedTableModalBaseComponent.prototype.getFilters = /**
|
|
341
|
+
*
|
|
342
|
+
* Reads the modal table and returns a list of filters to use in the table
|
|
343
|
+
* query.
|
|
344
|
+
*
|
|
345
|
+
* @param {?} tableConfig {object} The table configuration from json file
|
|
346
|
+
* @param {?=} defaultFilterValues {object} A list of default filters
|
|
347
|
+
* @param {?=} searchItem The searchItem to use
|
|
348
|
+
*
|
|
349
|
+
* @return {?}
|
|
350
|
+
*/
|
|
351
|
+
function (tableConfig, defaultFilterValues, searchItem) {
|
|
188
352
|
if (defaultFilterValues === void 0) { defaultFilterValues = {}; }
|
|
189
353
|
// Do nothing in absence of configuration.
|
|
190
354
|
if (!tableConfig || !Array.isArray(tableConfig.criteria)) {
|
|
@@ -193,19 +357,24 @@ var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
|
193
357
|
if (searchItem.filter == null) {
|
|
194
358
|
return [];
|
|
195
359
|
}
|
|
360
|
+
/** @type {?} */
|
|
196
361
|
var matchedCriterion = tableConfig.criteria.find(function (criterion) {
|
|
197
362
|
return Object.prototype.hasOwnProperty.call(searchItem.filter, criterion.name);
|
|
198
363
|
});
|
|
199
364
|
if (matchedCriterion == null) {
|
|
200
365
|
return [];
|
|
201
366
|
}
|
|
367
|
+
/** @type {?} */
|
|
202
368
|
var value = searchItem.filter[matchedCriterion.name];
|
|
369
|
+
/** @type {?} */
|
|
203
370
|
var criterionSafeName = matchedCriterion.name !== null
|
|
204
371
|
? matchedCriterion.name.toString()
|
|
205
372
|
: '';
|
|
373
|
+
/** @type {?} */
|
|
206
374
|
var applicableFilter;
|
|
207
375
|
// Raw dates should be transformed to a specific format
|
|
208
376
|
if (criterionSafeName.includes('GMT')) {
|
|
377
|
+
/** @type {?} */
|
|
209
378
|
var newDate = this.datePipe.transform(criterionSafeName, 'MM/dd/yyyy');
|
|
210
379
|
applicableFilter = this._template.transform(matchedCriterion.filter, {
|
|
211
380
|
value: newDate
|
|
@@ -221,24 +390,48 @@ var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
|
221
390
|
}
|
|
222
391
|
return [applicableFilter];
|
|
223
392
|
};
|
|
224
|
-
|
|
393
|
+
/**
|
|
394
|
+
* @param {?} value
|
|
395
|
+
* @return {?}
|
|
396
|
+
*/
|
|
397
|
+
AdvancedTableModalBaseComponent.prototype.onFilterSelect = /**
|
|
398
|
+
* @param {?} value
|
|
399
|
+
* @return {?}
|
|
400
|
+
*/
|
|
401
|
+
function (value) {
|
|
225
402
|
this.advancedSearch(value);
|
|
226
403
|
};
|
|
227
404
|
/**
|
|
228
405
|
*
|
|
229
406
|
* Runs a filter against the modal table
|
|
230
407
|
*
|
|
231
|
-
* @param
|
|
408
|
+
* @param filter The filter to use in the search
|
|
409
|
+
*
|
|
410
|
+
*/
|
|
411
|
+
/**
|
|
412
|
+
*
|
|
413
|
+
* Runs a filter against the modal table
|
|
414
|
+
*
|
|
415
|
+
* @param {?} filter The filter to use in the search
|
|
416
|
+
*
|
|
417
|
+
* @return {?}
|
|
418
|
+
*/
|
|
419
|
+
AdvancedTableModalBaseComponent.prototype.advancedSearch = /**
|
|
420
|
+
*
|
|
421
|
+
* Runs a filter against the modal table
|
|
422
|
+
*
|
|
423
|
+
* @param {?} filter The filter to use in the search
|
|
232
424
|
*
|
|
425
|
+
* @return {?}
|
|
233
426
|
*/
|
|
234
|
-
|
|
427
|
+
function (filter) {
|
|
235
428
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
236
429
|
var defaultFilterValues, err_1, expressions, predefinedCriteria, query;
|
|
237
430
|
return tslib_1.__generator(this, function (_a) {
|
|
238
431
|
switch (_a.label) {
|
|
239
432
|
case 0:
|
|
240
433
|
// Do nothing in absence of configuration.
|
|
241
|
-
if (!this.tableConfig
|
|
434
|
+
if (!this.tableConfig || !Array.isArray(this.tableConfig.criteria) || !this.advancedTable) {
|
|
242
435
|
console.warn('No table configuration available', this.tableConfig);
|
|
243
436
|
return [2 /*return*/];
|
|
244
437
|
}
|
|
@@ -310,5 +503,53 @@ var AdvancedTableModalBaseComponent = /** @class */ (function (_super) {
|
|
|
310
503
|
return AdvancedTableModalBaseComponent;
|
|
311
504
|
}(RouterModalOkCancel));
|
|
312
505
|
export { AdvancedTableModalBaseComponent };
|
|
506
|
+
if (false) {
|
|
507
|
+
/** @type {?} */
|
|
508
|
+
AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;
|
|
509
|
+
/** @type {?} */
|
|
510
|
+
AdvancedTableModalBaseComponent.prototype.advancedTable;
|
|
511
|
+
/** @type {?} */
|
|
512
|
+
AdvancedTableModalBaseComponent.prototype.emptyTable;
|
|
513
|
+
/** @type {?} */
|
|
514
|
+
AdvancedTableModalBaseComponent.prototype.dropdownFilter;
|
|
515
|
+
/** @type {?} */
|
|
516
|
+
AdvancedTableModalBaseComponent.prototype.dropdownLength;
|
|
517
|
+
/** @type {?} */
|
|
518
|
+
AdvancedTableModalBaseComponent.prototype.searchElement;
|
|
519
|
+
/** @type {?} */
|
|
520
|
+
AdvancedTableModalBaseComponent.prototype.tableConfig;
|
|
521
|
+
/** @type {?} */
|
|
522
|
+
AdvancedTableModalBaseComponent.prototype.tableConfigSrc;
|
|
523
|
+
/** @type {?} */
|
|
524
|
+
AdvancedTableModalBaseComponent.prototype.pageLength;
|
|
525
|
+
/** @type {?} */
|
|
526
|
+
AdvancedTableModalBaseComponent.prototype.searchText;
|
|
527
|
+
/** @type {?} */
|
|
528
|
+
AdvancedTableModalBaseComponent.prototype.lengthMenu;
|
|
529
|
+
/** @type {?} */
|
|
530
|
+
AdvancedTableModalBaseComponent.prototype.subscription;
|
|
531
|
+
/** @type {?} */
|
|
532
|
+
AdvancedTableModalBaseComponent.prototype.recordsTotal;
|
|
533
|
+
/** @type {?} */
|
|
534
|
+
AdvancedTableModalBaseComponent.prototype.loading;
|
|
535
|
+
/** @type {?} */
|
|
536
|
+
AdvancedTableModalBaseComponent.prototype.recordsFiltered;
|
|
537
|
+
/** @type {?} */
|
|
538
|
+
AdvancedTableModalBaseComponent.prototype.defaultFilters;
|
|
539
|
+
/** @type {?} */
|
|
540
|
+
AdvancedTableModalBaseComponent.prototype.defaultFilter;
|
|
541
|
+
/** @type {?} */
|
|
542
|
+
AdvancedTableModalBaseComponent.prototype.pageInfo;
|
|
543
|
+
/** @type {?} */
|
|
544
|
+
AdvancedTableModalBaseComponent.prototype._template;
|
|
545
|
+
/** @type {?} */
|
|
546
|
+
AdvancedTableModalBaseComponent.prototype.configChangesSubscription;
|
|
547
|
+
/** @type {?} */
|
|
548
|
+
AdvancedTableModalBaseComponent.prototype._context;
|
|
549
|
+
/** @type {?} */
|
|
550
|
+
AdvancedTableModalBaseComponent.prototype.advancedFilterValueProvider;
|
|
551
|
+
/** @type {?} */
|
|
552
|
+
AdvancedTableModalBaseComponent.prototype.datePipe;
|
|
553
|
+
}
|
|
313
554
|
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHekQsT0FBTyxFQUFFLHNCQUFzQixFQUEyQixNQUFNLDRDQUE0QyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFZakQsNkRBQTZEO0FBQzdELG1GQUFtRjtBQUNuRixNQUFNLENBQUMsSUFBTSw4QkFBOEIsR0FBRyxtK0pBb0c3QyxDQUFDO0FBWUY7SUFVcUQsMkRBQW1CO0lBc0N0RSx5Q0FDRSxPQUFlLEVBQ2YsZUFBK0IsRUFDckIsUUFBNEIsRUFDNUIsMkJBQXdELEVBQ3hELFFBQWtCO1FBTDlCLFlBT0Usa0JBQU0sT0FBTyxFQUFFLGVBQWUsQ0FBQyxTQUdoQztRQVBXLGNBQVEsR0FBUixRQUFRLENBQW9CO1FBQzVCLGlDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUFDeEQsY0FBUSxHQUFSLFFBQVEsQ0FBVTtRQXRCVCxn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QkFFSjs7OztnQkE5SXdCLE1BQU07Z0JBQXRCLGNBQWM7Z0JBSWQsa0JBQWtCO2dCQUNsQiwyQkFBMkI7Z0JBQzNCLFFBQVE7OztnQ0F1SmQsU0FBUyxTQUFDLGVBQWU7NkJBQ3pCLFNBQVMsU0FBQyxZQUFZO2lDQUN0QixTQUFTLFNBQUMsZ0JBQWdCO2lDQUMxQixTQUFTLFNBQUMsZ0JBQWdCO2dDQUMxQixTQUFTLFNBQUMsZUFBZTs4QkFDekIsS0FBSyxTQUFDLGFBQWE7aUNBQ25CLEtBQUssU0FBQyxnQkFBZ0I7NkJBQ3RCLEtBQUssU0FBQyxZQUFZOzZCQUNsQixLQUFLLFNBQUMsWUFBWTs2QkFDbEIsS0FBSyxTQUFDLFlBQVk7Z0NBTWxCLEtBQUssU0FBQyxlQUFlOztJQXdSeEIsc0NBQUM7Q0FBQSxBQS9URCxDQVVxRCxtQkFBbUIsR0FxVHZFO1NBclRZLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIERvQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi8uLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGUgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBwYWdlOiBudW1iZXI7XG4gIHBhZ2VzOiBudW1iZXI7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICBsZW5ndGg6IG51bWJlcjtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNEaXNwbGF5OiBudW1iZXI7XG4gIHNlcnZlclNpZGU/OiBib29sZWFuO1xufVxuXG4vLyBpbXBvcnRhbnQ6IGV4cG9ydCB0aGlzIGNvbnN0IGR1ZSB0byBBT1QgY29tcGlsYXRpb24gZXJyb3JzXG4vLyBzZWUgbW9yZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvYW90LW1ldGFkYXRhLWVycm9ycyNvbmx5LWluaXRpYWxpemVkLXZhcmlhYmxlc1xuZXhwb3J0IGNvbnN0IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSA9IGBcbjxkaXY+XG4gICAgPCEtLSBzZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCI+XG4gICAgICAgICAgPGlucHV0IHNwZWxsY2hlY2s9XCJmYWxzZVwiIHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGJnLWdyYXktMTAwIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydUYWJsZXMuU2VhcmNoUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX1cIiBhcmlhLWxhYmVsPVwiU2VhcmNoXCIgYXJpYS1kZXNjcmliZWRieT1cImJhc2ljLWFkZG9uMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYmctZ3JheS0xMDAgYm9yZGVyLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1zZWNvbmRhcnlcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVNZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zbGlkZXJzLWggcHItMiB0ZXh0LXNlY29uZGFyeVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT57eydUYWJsZXMuRmlsdGVycycgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgI2Ryb3Bkb3duRmlsdGVyIGNsYXNzPVwiZHJvcGRvd24gbWwtM1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDAgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiZHJvcGRvd25EZWZhdWx0RmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAge3sgdGhpcy5kZWZhdWx0RmlsdGVyLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkRlZmF1bHRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZGVmYXVsdEZpbHRlcnNcIiAoY2xpY2spPVwib25GaWx0ZXJTZWxlY3QoZmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgIHt7IGZpbHRlci5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtbGctcmlnaHQgbXQtMyBtdC1sZy0wIGQtbm9uZVwiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJidG4gcm91bmRlZC1waWxsIGJ0bi1vdXRsaW5lLXRoZW1lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0yIGZvbnQtbGdcIj4rPC9zcGFuPjxzcGFuIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5BZGRJdGVtJ1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgW25nQ2xhc3NdPVwieyAnY29tcG9uZW50LWxvYWRpbmcnOiBsb2FkaW5nfVwiPlxuICAgICAgICA8YXBwLWFkdmFuY2VkLXRhYmxlICNhZHZhbmNlZFRhYmxlIChpbml0KT1cIm9uVGFibGVJbml0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2FkKT1cIm9uRGF0YUxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlU2VsZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxYXT1cImZhbHNlXCIgW3Njcm9sbFldPVwiMzIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZUxlbmd0aF09XCJwYWdlTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJmYWxzZVwiIFtzaG93Rm9vdGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0FjdGlvbnNdPVwiZmFsc2VcIiBbbGVuZ3RoTWVudV09XCJsZW5ndGhNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInRhYmxlQ29uZmlnXCIgW2NvbmZpZ1NyY109XCJ0YWJsZUNvbmZpZ1NyY1wiPjwvYXBwLWFkdmFuY2VkLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zIHRhYmxlLWN1c3RvbS1wYWdlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXhcIiAqbmdJZj1cInJlY29yZHNUb3RhbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtbC1hdXRvIG1yLTMgdGV4dC1zZWNvbmRhcnlcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUmVjb3Jkc1BlclBhZ2UnXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgI2Ryb3Bkb3duTGVuZ3RoIGNsYXNzPVwiZHJvcGRvd24gbXItM1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93blBhZ2VTaXplXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgIHt7cGFnZUxlbmd0aH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93blBhZ2VTaXplXCI+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRMZW5ndGgoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZHJvcGRvd24taXRlbS10aGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsZW5ndGhNZW51XCI+e3tpdGVtfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIG1yLTJcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUGFnZUluZm8nXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJwYWdlSW5mb1wiPjwvZGl2PlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlID09PSAwXCIgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwiZmlyc3RQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09MFwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT1wYWdlSW5mby5wYWdlcy0xXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwibmV4dFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PXBhZ2VJbmZvLnBhZ2VzLTFcIiBjbGFzcz1cImJ0biB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJsYXN0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuYDtcblxuLyoqXG4gKlxuICogQSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBjcml0ZXJpb25cbiAqXG4gKi9cbmludGVyZmFjZSBTZWFyY2hJdGVtIHtcbiAgZmlsdGVyOiBhbnk7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLW1vZGFsJyxcbiAgdGVtcGxhdGU6IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSxcbiAgc3R5bGVzOiBbXG4gICAgYFxuXG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50ICYmIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FMTF9GSUxURVIgPSB7XG4gICAgbmFtZTogJ1RhYmxlcy5BbGwnLFxuICAgIGZpbHRlcjogbnVsbFxuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2FkdmFuY2VkVGFibGUnKSBhZHZhbmNlZFRhYmxlOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgZW1wdHlUYWJsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25GaWx0ZXInKSBkcm9wZG93bkZpbHRlcjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25MZW5ndGgnKSBkcm9wZG93bkxlbmd0aDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoRWxlbWVudCcpIHNlYXJjaEVsZW1lbnQ6IGFueTtcbiAgQElucHV0KCd0YWJsZUNvbmZpZycpIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIEBJbnB1dCgndGFibGVDb25maWdTcmMnKSB0YWJsZUNvbmZpZ1NyYzogc3RyaW5nO1xuICBASW5wdXQoJ3BhZ2VMZW5ndGgnKSBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgnc2VhcmNoVGV4dCcpIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgQElucHV0KCdsZW5ndGhNZW51JykgbGVuZ3RoTWVudTogQXJyYXk8bnVtYmVyPiA9IFs1LCAxMCwgMjUsIDUwLCAxMDBdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVjb3Jkc1RvdGFsID0gMDtcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHJlY29yZHNGaWx0ZXJlZCA9IDA7XG4gIHB1YmxpYyBkZWZhdWx0RmlsdGVyczogQXJyYXk8YW55PiA9IFtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUl07XG4gIEBJbnB1dCgnZGVmYXVsdEZpbHRlcicpIGRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiBcblxuICBwdWJsaWMgcGFnZUluZm8gPSA8UGFnZUluZm8+e1xuICAgIHNlcnZlclNpZGU6IHRydWVcbiAgfTtcbiAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZTtcbiAgY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIHByb3RlY3RlZCBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIHN1cGVyKF9yb3V0ZXIsIF9hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLXhsIG1vZGFsLXRhYmxlJztcbiAgICB0aGlzLl90ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZVBpcGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldElucHV0cyhjb21wb25lbnRUeXBlKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgcHJvcHMgPSBjb21wb25lbnRUeXBlLl9fcHJvcF9fbWV0YWRhdGFfXztcbiAgICBjb25zdCBpbnB1dHMgPSBbXTtcbiAgICBpZiAocHJvcHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGlucHV0cztcbiAgICB9XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBjb25zdCBtZW1iZXIgPSBwcm9wc1twcm9wXVswXTtcbiAgICAgIGlmIChtZW1iZXIubmdNZXRhZGF0YU5hbWUgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgaW5wdXRzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlucHV0cy5zb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgaGFzSW5wdXRzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5va0J1dHRvblRleHQgPSAnVGFibGVzLkFwcGx5JztcbiAgICB0aGlzLmNhbmNlbEJ1dHRvblRleHQgPSAnVGFibGVzLkNhbmNlbCc7XG4gICAgLy8gZ2V0IHJvdXRlIGRhdGFcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAvLyBzZXQgbW9kYWwgdGl0bGUgaWYgYW55XG4gICAgICBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jb25maWcpIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IGRhdGEuY29uZmlnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgfVxuICAgICAgLy8gaW1wb3J0YW50OiB1c2UgaGFzSW5wdXRzIGR1ZSB0byBBT1QgY29tcGlsYXRpb24uIE1ldGFkYXRhIHByb3BlcnRpZXMgY2Fubm90IGJlIHVzZWQgKGUuZy4gQElucHV0KCkpXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBlbXB0eSBkdXJpbmcgcnVudGltZVxuICAgICAgLy8gc28gd2UgbmVlZCB0byBkZWZpbmUgbWFudWFsbHkgaW5wdXQgcHJvcGVydGllcyB0aGF0IGFyZSBnb2luZyB0byBiZSBiaW5kIHRocm91Z2ggdGhpcyBwcm9jZXNzXG4gICAgICAvLyBiaW5kIGFsbCBpbnB1dHNcbiAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuaGFzSW5wdXRzKCk7XG4gICAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwgaW5wdXQpKSB7XG4gICAgICAgICAgdGhpc1tpbnB1dF0gPSBkYXRhW2lucHV0XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuYWR2YW5jZWRUYWJsZS5jb25maWdDaGFuZ2VzLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgICAgLy8gcmVzZXQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiAgICAgICAgICAvLyBpbml0IGZpbHRlclxuICAgICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlcnMgPSBbQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVJdO1xuICAgICAgICAgIC8vIGFkZCBleHRyYSBmaWx0ZXJzXG4gICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIG9rKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBvbkRhdGFMb2FkKGRhdGE6IEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0KSB7XG4gICAgdGhpcy5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgICB0aGlzLnJlY29yZHNGaWx0ZXJlZCA9IGRhdGEucmVjb3Jkc0ZpbHRlcmVkO1xuICAgIC8vIGdldCBmaXJzdCBwYWdlIGluZm8gKGJlY2F1c2UgcGFnZSBpcyBub3QgZ29pbmcgdG8gYmUgZmlyZWQgZm9yIGZpcnN0IHBhZ2UpXG4gICAgaWYgKGRhdGEucmVjb3Jkc1RvdGFsID4gMCAmJiB0aGlzLnBhZ2VJbmZvLnJlY29yZHNUb3RhbCA9PT0gMCkge1xuICAgICAgdGhpcy5wYWdlSW5mby5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgICB9XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIH1cblxuICBwcmV2aW91c1BhZ2UoKSB7XG4gICAgLy8gZ28gdG8gbmV4dCBwYWdlXG4gICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ3ByZXZpb3VzJykuZHJhdygncGFnZScpO1xuICB9XG5cbiAgbmV4dFBhZ2UoKSB7XG4gICAgLy8gZ28gdG8gbmV4dCBwYWdlXG4gICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ25leHQnKS5kcmF3KCdwYWdlJyk7XG4gIH1cblxuICBvblRhYmxlSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBkYXRhVGFibGUgPSBzZWxmLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlO1xuICAgIC8vIGdldCBpbml0aWFsIHBhZ2UgaW5mb1xuICAgIGNvbnN0IGluaXRpYWxQYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgaW5pdGlhbFBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgc2VsZi5wYWdlSW5mbyA9IGluaXRpYWxQYWdlSW5mbztcbiAgICAvLyBjaGFuZ2UgZW1wdHlUYWJsZU1lc3NhZ2VcbiAgICBkYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmVtcHR5VGFibGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgLy8gYmluZCBwYWdlIGNoYW5nZSBldmVudFxuICAgIGRhdGFUYWJsZS5vbigncGFnZS5kdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gPFBhZ2VJbmZvPmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICAgIHBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgICBzZWxmLnBhZ2VJbmZvID0gcGFnZUluZm87XG4gICAgfSk7XG4gICAgLy8gYmluZCBkcmF3IGNoYW5nZSBldmVudFxuICAgIGRhdGFUYWJsZS5vbignZHJhdy5kdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGZvciBmdXR1cmUgdXNlXG4gICAgICBzZWxmLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gPFBhZ2VJbmZvPmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICAgIHBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgICBzZWxmLnBhZ2VJbmZvID0gcGFnZUluZm87XG4gICAgfSk7XG4gIH1cblxuICBmaXJzdFBhZ2UoKSB7XG4gICAgLy8gZ28gdG8gZmlyc3QgcGFnZVxuICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCdmaXJzdCcpLmRyYXcoJ3BhZ2UnKTtcbiAgfVxuXG4gIGxhc3RQYWdlKCkge1xuICAgIC8vIGdvIHRvIGxhc3QgcGFnZVxuICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCdsYXN0JykuZHJhdygncGFnZScpO1xuICB9XG5cbiAgc2V0TGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2VMZW5ndGggPSB2YWx1ZTtcbiAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UubGVuKHZhbHVlKS5kcmF3KCk7XG4gIH1cblxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdSZXR1cm4nKSB7XG4gICAgICAvLyBsb2FkaW5nXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goKSB7XG4gICAgLy8gbG9hZGluZ1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJlYWRzIHRoZSBtb2RhbCB0YWJsZSBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZmlsdGVycyB0byB1c2UgaW4gdGhlIHRhYmxlXG4gICAqIHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gdGFibGVDb25maWcge29iamVjdH0gVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbSBqc29uIGZpbGVcbiAgICogQHBhcmFtIGRlZmF1bHRGaWx0ZXJWYWx1ZXMge29iamVjdH0gQSBsaXN0IG9mIGRlZmF1bHQgZmlsdGVyc1xuICAgKiBAcGFyYW0ge29iamVjdH0gc2VhcmNoSXRlbSBUaGUgc2VhcmNoSXRlbSB0byB1c2VcbiAgICpcbiAgICovXG4gIGdldEZpbHRlcnMoXG4gICAgdGFibGVDb25maWc6IGFueSxcbiAgICBkZWZhdWx0RmlsdGVyVmFsdWVzID0ge30sXG4gICAgc2VhcmNoSXRlbTogYW55XG4gICk6IEFycmF5PHN0cmluZz4ge1xuICAgIC8vIERvIG5vdGhpbmcgaW4gYWJzZW5jZSBvZiBjb25maWd1cmF0aW9uLlxuICAgIGlmICghdGFibGVDb25maWcgfHwgIUFycmF5LmlzQXJyYXkodGFibGVDb25maWcuY3JpdGVyaWEpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaEl0ZW0uZmlsdGVyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVkQ3JpdGVyaW9uID0gdGFibGVDb25maWcuY3JpdGVyaWEuZmluZChjcml0ZXJpb24gPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZWFyY2hJdGVtLmZpbHRlciwgY3JpdGVyaW9uLm5hbWUpXG4gICAgKTtcblxuICAgIGlmIChtYXRjaGVkQ3JpdGVyaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHNlYXJjaEl0ZW0uZmlsdGVyW21hdGNoZWRDcml0ZXJpb24ubmFtZV07XG5cbiAgICBjb25zdCBjcml0ZXJpb25TYWZlTmFtZSA9IG1hdGNoZWRDcml0ZXJpb24ubmFtZSAhPT0gbnVsbFxuICAgICAgPyBtYXRjaGVkQ3JpdGVyaW9uLm5hbWUudG9TdHJpbmcoKVxuICAgICAgOiAnJztcblxuICAgIGxldCBhcHBsaWNhYmxlRmlsdGVyOiBzdHJpbmc7XG5cbiAgICAvLyBSYXcgZGF0ZXMgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHRvIGEgc3BlY2lmaWMgZm9ybWF0XG4gICAgaWYgKGNyaXRlcmlvblNhZmVOYW1lLmluY2x1ZGVzKCdHTVQnKSkge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGNyaXRlcmlvblNhZmVOYW1lLCAnTU0vZGQveXl5eScpO1xuICAgICAgYXBwbGljYWJsZUZpbHRlciA9IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShtYXRjaGVkQ3JpdGVyaW9uLmZpbHRlciwge1xuICAgICAgICB2YWx1ZTogbmV3RGF0ZVxuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKGNyaXRlcmlvblNhZmVOYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgYXBwbGljYWJsZUZpbHRlciA9ICh0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0obWF0Y2hlZENyaXRlcmlvbi5maWx0ZXIsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH0sIGRlZmF1bHRGaWx0ZXJWYWx1ZXMpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gW2FwcGxpY2FibGVGaWx0ZXJdO1xuICB9XG5cbiAgb25GaWx0ZXJTZWxlY3QodmFsdWU6IHsgZmlsdGVyOiBhbnk7IG5hbWU6IHN0cmluZyB9IHwgYW55KSB7XG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUnVucyBhIGZpbHRlciBhZ2FpbnN0IHRoZSBtb2RhbCB0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gdXNlIGluIHRoZSBzZWFyY2hcbiAgICpcbiAgICovXG4gIGFzeW5jIGFkdmFuY2VkU2VhcmNoKGZpbHRlcik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gRG8gbm90aGluZyBpbiBhYnNlbmNlIG9mIGNvbmZpZ3VyYXRpb24uXG4gICAgaWYgKCF0aGlzLnRhYmxlQ29uZmlnICYmICFBcnJheS5pc0FycmF5KHRoaXMudGFibGVDb25maWcuY3JpdGVyaWEpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIHRhYmxlIGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlJywgdGhpcy50YWJsZUNvbmZpZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQW4gYWR2YW5jZWQgdGFibGUgaGFzIHNvbWUgZmlsdGVycyBieSBkZWZhdWx0XG4gICAgbGV0IGRlZmF1bHRGaWx0ZXJWYWx1ZXM7XG4gICAgdHJ5IHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSBhd2FpdCB0aGlzLmFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9ucyA9IFtdO1xuICAgIGxldCBwcmVkZWZpbmVkQ3JpdGVyaWE7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gZmlsdGVyO1xuICAgICAgcHJlZGVmaW5lZENyaXRlcmlhID0gdGhpcy5nZXRGaWx0ZXJzKFxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnLFxuICAgICAgICBkZWZhdWx0RmlsdGVyVmFsdWVzLFxuICAgICAgICBmaWx0ZXJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVtcHR5IGEgZmFsc3kgZmlsdGVyIHJlc2V0cyB0aGUgcmVzdWx0c1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVI7XG4gICAgfVxuXG4gICAgLy8gc2VhcmNoIGZpbHRlciBpcyBhcHBsaWVkIHNlcGFyYXRlbHksIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWRkIGhlcmUuXG4gICAgZXhwcmVzc2lvbnMucHVzaChwcmVkZWZpbmVkQ3JpdGVyaWEpO1xuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuYWR2YW5jZWRUYWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgcXVlcnkuc2V0UGFyYW0oJ2ZpbHRlcicsIGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpLnByZXBhcmUoKTtcbiAgICB0aGlzLmFkdmFuY2VkVGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmFkdmFuY2VkVGFibGUuZmV0Y2goKTtcbiAgfVxufVxuXG4iXX0=
|
|
555
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3pELE9BQU8sRUFBRSxzQkFBc0IsRUFBMkIsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQWNqRCxXQUFhLDhCQUE4QixHQUFHLG0rSkFvRzdDLENBQUM7Ozs7Ozs7Ozs7Ozs7SUFzQm1ELDJEQUFtQjtJQXNDdEUseUNBQ0UsT0FBZSxFQUNmLGVBQStCLEVBQ3JCLFFBQTRCLEVBQzVCLDJCQUF3RCxFQUN4RCxRQUFrQjtRQUw5QixZQU9FLGtCQUFNLE9BQU8sRUFBRSxlQUFlLENBQUMsU0FHaEM7UUFQVyxjQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUM1QixpQ0FBMkIsR0FBM0IsMkJBQTJCLENBQTZCO1FBQ3hELGNBQVEsR0FBUixRQUFRLENBQVU7MkJBdEJJLEVBQUU7MkJBRWEsQ0FBQyxDQUFDLEVB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MUIsU0FBUyxTQUFDLGdCQUFnQjtnQ0FDMUIsU0FBUyxTQUFDLGVBQWU7OEJBQ3pCLEtBQUssU0FBQyxhQUFhO2lDQUNuQixLQUFLLFNBQUMsZ0JBQWdCOzZCQUN0QixLQUFLLFNBQUMsWUFBWTs2QkFDbEIsS0FBSyxTQUFDLFlBQVk7NkJBQ2xCLEtBQUssU0FBQyxZQUFZO2dDQU1sQixLQUFLLFNBQUMsZUFBZTs7MENBOUt4QjtFQWlKcUQsbUJBQW1CO1NBQTNELCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIERvQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi8uLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGUgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBwYWdlOiBudW1iZXI7XG4gIHBhZ2VzOiBudW1iZXI7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICBsZW5ndGg6IG51bWJlcjtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNEaXNwbGF5OiBudW1iZXI7XG4gIHNlcnZlclNpZGU/OiBib29sZWFuO1xufVxuXG4vLyBpbXBvcnRhbnQ6IGV4cG9ydCB0aGlzIGNvbnN0IGR1ZSB0byBBT1QgY29tcGlsYXRpb24gZXJyb3JzXG4vLyBzZWUgbW9yZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvYW90LW1ldGFkYXRhLWVycm9ycyNvbmx5LWluaXRpYWxpemVkLXZhcmlhYmxlc1xuZXhwb3J0IGNvbnN0IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSA9IGBcbjxkaXY+XG4gICAgPCEtLSBzZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCI+XG4gICAgICAgICAgPGlucHV0IHNwZWxsY2hlY2s9XCJmYWxzZVwiIHR5cGU9XCJ0ZXh0XCIgI3NlYXJjaEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGJnLWdyYXktMTAwIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydUYWJsZXMuU2VhcmNoUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX1cIiBhcmlhLWxhYmVsPVwiU2VhcmNoXCIgYXJpYS1kZXNjcmliZWRieT1cImJhc2ljLWFkZG9uMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYmctZ3JheS0xMDAgYm9yZGVyLTBcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1zZWNvbmRhcnlcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVNZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zbGlkZXJzLWggcHItMiB0ZXh0LXNlY29uZGFyeVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT57eydUYWJsZXMuRmlsdGVycycgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgI2Ryb3Bkb3duRmlsdGVyIGNsYXNzPVwiZHJvcGRvd24gbWwtM1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDAgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiZHJvcGRvd25EZWZhdWx0RmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgICAge3sgdGhpcy5kZWZhdWx0RmlsdGVyLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkRlZmF1bHRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZGVmYXVsdEZpbHRlcnNcIiAoY2xpY2spPVwib25GaWx0ZXJTZWxlY3QoZmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgIHt7IGZpbHRlci5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtbGctcmlnaHQgbXQtMyBtdC1sZy0wIGQtbm9uZVwiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJidG4gcm91bmRlZC1waWxsIGJ0bi1vdXRsaW5lLXRoZW1lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0yIGZvbnQtbGdcIj4rPC9zcGFuPjxzcGFuIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5BZGRJdGVtJ1wiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgW25nQ2xhc3NdPVwieyAnY29tcG9uZW50LWxvYWRpbmcnOiBsb2FkaW5nfVwiPlxuICAgICAgICA8YXBwLWFkdmFuY2VkLXRhYmxlICNhZHZhbmNlZFRhYmxlIChpbml0KT1cIm9uVGFibGVJbml0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2FkKT1cIm9uRGF0YUxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlU2VsZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxYXT1cImZhbHNlXCIgW3Njcm9sbFldPVwiMzIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZUxlbmd0aF09XCJwYWdlTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJmYWxzZVwiIFtzaG93Rm9vdGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0FjdGlvbnNdPVwiZmFsc2VcIiBbbGVuZ3RoTWVudV09XCJsZW5ndGhNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInRhYmxlQ29uZmlnXCIgW2NvbmZpZ1NyY109XCJ0YWJsZUNvbmZpZ1NyY1wiPjwvYXBwLWFkdmFuY2VkLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zIHRhYmxlLWN1c3RvbS1wYWdlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXhcIiAqbmdJZj1cInJlY29yZHNUb3RhbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtbC1hdXRvIG1yLTMgdGV4dC1zZWNvbmRhcnlcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUmVjb3Jkc1BlclBhZ2UnXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgI2Ryb3Bkb3duTGVuZ3RoIGNsYXNzPVwiZHJvcGRvd24gbXItM1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93blBhZ2VTaXplXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICBkcm9wZG93blRvZ2dsZT5cbiAgICAgICAgICAgIHt7cGFnZUxlbmd0aH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93blBhZ2VTaXplXCI+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRMZW5ndGgoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZHJvcGRvd24taXRlbS10aGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsZW5ndGhNZW51XCI+e3tpdGVtfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIG1yLTJcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuUGFnZUluZm8nXCIgW3RyYW5zbGF0ZVBhcmFtc109XCJwYWdlSW5mb1wiPjwvZGl2PlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlID09PSAwXCIgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwiZmlyc3RQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09MFwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT1wYWdlSW5mby5wYWdlcy0xXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwibmV4dFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PXBhZ2VJbmZvLnBhZ2VzLTFcIiBjbGFzcz1cImJ0biB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJsYXN0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuYDtcblxuLyoqXG4gKlxuICogQSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBjcml0ZXJpb25cbiAqXG4gKi9cbmludGVyZmFjZSBTZWFyY2hJdGVtIHtcbiAgZmlsdGVyOiBhbnk7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLW1vZGFsJyxcbiAgdGVtcGxhdGU6IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VUZW1wbGF0ZSxcbiAgc3R5bGVzOiBbXG4gICAgYFxuXG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgZXh0ZW5kcyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50ICYmIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FMTF9GSUxURVIgPSB7XG4gICAgbmFtZTogJ1RhYmxlcy5BbGwnLFxuICAgIGZpbHRlcjogbnVsbFxuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2FkdmFuY2VkVGFibGUnKSBhZHZhbmNlZFRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZW1wdHlUYWJsZScpIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkcm9wZG93bkZpbHRlcicpIGRyb3Bkb3duRmlsdGVyPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25MZW5ndGgnKSBkcm9wZG93bkxlbmd0aD86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEVsZW1lbnQnKSBzZWFyY2hFbGVtZW50OiBhbnk7XG4gIEBJbnB1dCgndGFibGVDb25maWcnKSB0YWJsZUNvbmZpZz86IFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgQElucHV0KCd0YWJsZUNvbmZpZ1NyYycpIHRhYmxlQ29uZmlnU3JjPzogc3RyaW5nO1xuICBASW5wdXQoJ3BhZ2VMZW5ndGgnKSBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgnc2VhcmNoVGV4dCcpIHNlYXJjaFRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgnbGVuZ3RoTWVudScpIGxlbmd0aE1lbnU6IEFycmF5PG51bWJlcj4gPSBbNSwgMTAsIDI1LCA1MCwgMTAwXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyByZWNvcmRzVG90YWwgPSAwO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgcmVjb3Jkc0ZpbHRlcmVkID0gMDtcbiAgcHVibGljIGRlZmF1bHRGaWx0ZXJzOiBBcnJheTxhbnk+ID0gW0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSXTtcbiAgQElucHV0KCdkZWZhdWx0RmlsdGVyJykgZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuXG5cbiAgcHVibGljIHBhZ2VJbmZvID0gPFBhZ2VJbmZvPntcbiAgICBzZXJ2ZXJTaWRlOiB0cnVlXG4gIH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG4gIGNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX3JvdXRlcjogUm91dGVyLFxuICAgIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJvdGVjdGVkIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJvdGVjdGVkIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgIHByb3RlY3RlZCBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgKSB7XG4gICAgc3VwZXIoX3JvdXRlciwgX2FjdGl2YXRlZFJvdXRlKTtcbiAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwteGwgbW9kYWwtdGFibGUnO1xuICAgIHRoaXMuX3RlbXBsYXRlID0gbmV3IFRlbXBsYXRlUGlwZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW5wdXRzKGNvbXBvbmVudFR5cGUpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBwcm9wcyA9IGNvbXBvbmVudFR5cGUuX19wcm9wX19tZXRhZGF0YV9fO1xuICAgIGNvbnN0IGlucHV0czogYW55W10gPSBbXTtcbiAgICBpZiAocHJvcHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGlucHV0cztcbiAgICB9XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBjb25zdCBtZW1iZXIgPSBwcm9wc1twcm9wXVswXTtcbiAgICAgIGlmIChtZW1iZXIubmdNZXRhZGF0YU5hbWUgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgaW5wdXRzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlucHV0cy5zb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgaGFzSW5wdXRzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5va0J1dHRvblRleHQgPSAnVGFibGVzLkFwcGx5JztcbiAgICB0aGlzLmNhbmNlbEJ1dHRvblRleHQgPSAnVGFibGVzLkNhbmNlbCc7XG4gICAgLy8gZ2V0IHJvdXRlIGRhdGFcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAvLyBzZXQgbW9kYWwgdGl0bGUgaWYgYW55XG4gICAgICBpZiAoZGF0YS50aXRsZSkge1xuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jb25maWcpIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IGRhdGEuY29uZmlnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgfVxuICAgICAgLy8gaW1wb3J0YW50OiB1c2UgaGFzSW5wdXRzIGR1ZSB0byBBT1QgY29tcGlsYXRpb24uIE1ldGFkYXRhIHByb3BlcnRpZXMgY2Fubm90IGJlIHVzZWQgKGUuZy4gQElucHV0KCkpXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBlbXB0eSBkdXJpbmcgcnVudGltZVxuICAgICAgLy8gc28gd2UgbmVlZCB0byBkZWZpbmUgbWFudWFsbHkgaW5wdXQgcHJvcGVydGllcyB0aGF0IGFyZSBnb2luZyB0byBiZSBiaW5kIHRocm91Z2ggdGhpcyBwcm9jZXNzXG4gICAgICAvLyBiaW5kIGFsbCBpbnB1dHNcbiAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuaGFzSW5wdXRzKCk7XG4gICAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwgaW5wdXQpKSB7XG4gICAgICAgICAgdGhpc1tpbnB1dF0gPSBkYXRhW2lucHV0XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuYWR2YW5jZWRUYWJsZS5jb25maWdDaGFuZ2VzLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGRlZmF1bHQgZmlsdGVyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiAgICAgICAgICAgIC8vIGluaXQgZmlsdGVyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzID0gW0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSXTtcbiAgICAgICAgICAgIC8vIGFkZCBleHRyYSBmaWx0ZXJzXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzLnB1c2guYXBwbHkodGhpcy5kZWZhdWx0RmlsdGVycywgdGhpcy50YWJsZUNvbmZpZy5zZWFyY2hlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhTG9hZChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkge1xuICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgdGhpcy5yZWNvcmRzRmlsdGVyZWQgPSBkYXRhLnJlY29yZHNGaWx0ZXJlZDtcbiAgICAvLyBnZXQgZmlyc3QgcGFnZSBpbmZvIChiZWNhdXNlIHBhZ2UgaXMgbm90IGdvaW5nIHRvIGJlIGZpcmVkIGZvciBmaXJzdCBwYWdlKVxuICAgIGlmIChkYXRhLnJlY29yZHNUb3RhbCA+IDAgJiYgdGhpcy5wYWdlSW5mby5yZWNvcmRzVG90YWwgPT09IDApIHtcbiAgICAgIHRoaXMucGFnZUluZm8ucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gICAgfVxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICB9XG5cbiAgcHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIG5leHQgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgncHJldmlvdXMnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gZ28gdG8gbmV4dCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCduZXh0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIG9uVGFibGVJbml0KCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGRhdGFUYWJsZSA9IHNlbGYuYWR2YW5jZWRUYWJsZSAmJiBzZWxmLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlO1xuICAgIC8vIGdldCBpbml0aWFsIHBhZ2UgaW5mb1xuICAgIGNvbnN0IGluaXRpYWxQYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgaW5pdGlhbFBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgc2VsZi5wYWdlSW5mbyA9IGluaXRpYWxQYWdlSW5mbztcbiAgICAvLyBjaGFuZ2UgZW1wdHlUYWJsZU1lc3NhZ2VcbiAgICBkYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmVtcHR5VGFibGUgJiYgdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIC8vIGJpbmQgcGFnZSBjaGFuZ2UgZXZlbnRcbiAgICBkYXRhVGFibGUub24oJ3BhZ2UuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICBwYWdlSW5mby5zdGFydCArPSAxO1xuICAgICAgc2VsZi5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIH0pO1xuICAgIC8vIGJpbmQgZHJhdyBjaGFuZ2UgZXZlbnRcbiAgICBkYXRhVGFibGUub24oJ2RyYXcuZHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBmb3IgZnV0dXJlIHVzZVxuICAgICAgc2VsZi5sb2FkaW5nID0gZmFsc2U7XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IDxQYWdlSW5mbz5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICBwYWdlSW5mby5zdGFydCArPSAxO1xuICAgICAgc2VsZi5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIH0pO1xuICB9XG5cbiAgZmlyc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIGZpcnN0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ2ZpcnN0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIGxhc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIGxhc3QgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgnbGFzdCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBzZXRMZW5ndGgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIHRoaXMucGFnZUxlbmd0aCA9IHZhbHVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlLmxlbih2YWx1ZSkuZHJhdygpO1xuICAgIH1cbiAgfVxuXG4gIG9uS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1JldHVybicpIHtcbiAgICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgICAgLy8gbG9hZGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkdmFuY2VkVGFibGUuc2VhcmNoKCg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBsb2FkaW5nXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBSZWFkcyB0aGUgbW9kYWwgdGFibGUgYW5kIHJldHVybnMgYSBsaXN0IG9mIGZpbHRlcnMgdG8gdXNlIGluIHRoZSB0YWJsZVxuICAgKiBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHRhYmxlQ29uZmlnIHtvYmplY3R9IFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIGZyb20ganNvbiBmaWxlXG4gICAqIEBwYXJhbSBkZWZhdWx0RmlsdGVyVmFsdWVzIHtvYmplY3R9IEEgbGlzdCBvZiBkZWZhdWx0IGZpbHRlcnNcbiAgICogQHBhcmFtIHNlYXJjaEl0ZW0gVGhlIHNlYXJjaEl0ZW0gdG8gdXNlXG4gICAqXG4gICAqL1xuICBnZXRGaWx0ZXJzKFxuICAgIHRhYmxlQ29uZmlnOiBhbnksXG4gICAgZGVmYXVsdEZpbHRlclZhbHVlcyA9IHt9LFxuICAgIHNlYXJjaEl0ZW06IGFueVxuICApOiBBcnJheTxzdHJpbmc+IHtcbiAgICAvLyBEbyBub3RoaW5nIGluIGFic2VuY2Ugb2YgY29uZmlndXJhdGlvbi5cbiAgICBpZiAoIXRhYmxlQ29uZmlnIHx8ICFBcnJheS5pc0FycmF5KHRhYmxlQ29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmIChzZWFyY2hJdGVtLmZpbHRlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlZENyaXRlcmlvbiA9IHRhYmxlQ29uZmlnLmNyaXRlcmlhLmZpbmQoY3JpdGVyaW9uID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2VhcmNoSXRlbS5maWx0ZXIsIGNyaXRlcmlvbi5uYW1lKVxuICAgICk7XG5cbiAgICBpZiAobWF0Y2hlZENyaXRlcmlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBzZWFyY2hJdGVtLmZpbHRlclttYXRjaGVkQ3JpdGVyaW9uLm5hbWVdO1xuXG4gICAgY29uc3QgY3JpdGVyaW9uU2FmZU5hbWUgPSBtYXRjaGVkQ3JpdGVyaW9uLm5hbWUgIT09IG51bGxcbiAgICAgID8gbWF0Y2hlZENyaXRlcmlvbi5uYW1lLnRvU3RyaW5nKClcbiAgICAgIDogJyc7XG5cbiAgICBsZXQgYXBwbGljYWJsZUZpbHRlcjogc3RyaW5nO1xuXG4gICAgLy8gUmF3IGRhdGVzIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byBhIHNwZWNpZmljIGZvcm1hdFxuICAgIGlmIChjcml0ZXJpb25TYWZlTmFtZS5pbmNsdWRlcygnR01UJykpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShjcml0ZXJpb25TYWZlTmFtZSwgJ01NL2RkL3l5eXknKTtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0obWF0Y2hlZENyaXRlcmlvbi5maWx0ZXIsIHtcbiAgICAgICAgdmFsdWU6IG5ld0RhdGVcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChjcml0ZXJpb25TYWZlTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSAodGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKG1hdGNoZWRDcml0ZXJpb24uZmlsdGVyLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9LCBkZWZhdWx0RmlsdGVyVmFsdWVzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFthcHBsaWNhYmxlRmlsdGVyXTtcbiAgfVxuXG4gIG9uRmlsdGVyU2VsZWN0KHZhbHVlOiB7IGZpbHRlcjogYW55OyBuYW1lOiBzdHJpbmcgfSB8IGFueSkge1xuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2godmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJ1bnMgYSBmaWx0ZXIgYWdhaW5zdCB0aGUgbW9kYWwgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIHVzZSBpbiB0aGUgc2VhcmNoXG4gICAqXG4gICAqL1xuICBhc3luYyBhZHZhbmNlZFNlYXJjaChmaWx0ZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIERvIG5vdGhpbmcgaW4gYWJzZW5jZSBvZiBjb25maWd1cmF0aW9uLlxuICAgIGlmICghdGhpcy50YWJsZUNvbmZpZyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlQ29uZmlnLmNyaXRlcmlhKSB8fCAhdGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIHRhYmxlIGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlJywgdGhpcy50YWJsZUNvbmZpZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQW4gYWR2YW5jZWQgdGFibGUgaGFzIHNvbWUgZmlsdGVycyBieSBkZWZhdWx0XG4gICAgbGV0IGRlZmF1bHRGaWx0ZXJWYWx1ZXM7XG4gICAgdHJ5IHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSBhd2FpdCB0aGlzLmFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uczogYW55W10gPSBbXTtcbiAgICBsZXQgcHJlZGVmaW5lZENyaXRlcmlhO1xuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIHByZWRlZmluZWRDcml0ZXJpYSA9IHRoaXMuZ2V0RmlsdGVycyhcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyxcbiAgICAgICAgZGVmYXVsdEZpbHRlclZhbHVlcyxcbiAgICAgICAgZmlsdGVyXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbXB0eSBhIGZhbHN5IGZpbHRlciByZXNldHMgdGhlIHJlc3VsdHNcbiAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuICAgIH1cblxuICAgIC8vIHNlYXJjaCBmaWx0ZXIgaXMgYXBwbGllZCBzZXBhcmF0ZWx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCBoZXJlLlxuICAgIGV4cHJlc3Npb25zLnB1c2gocHJlZGVmaW5lZENyaXRlcmlhKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmFkdmFuY2VkVGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCdmaWx0ZXInLCBleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKS5wcmVwYXJlKCk7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5hZHZhbmNlZFRhYmxlLmZldGNoKCk7XG4gIH1cbn1cblxuIl19
|