@po-ui/ng-components 6.11.0 → 6.12.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/esm2020/lib/components/po-button/po-button-base.component.mjs +31 -8
- package/esm2020/lib/components/po-button/po-button.component.mjs +4 -4
- package/esm2020/lib/components/po-field/index.mjs +2 -1
- package/esm2020/lib/components/po-field/po-checkbox/po-checkbox.module.mjs +20 -0
- package/esm2020/lib/components/po-field/po-field.module.mjs +15 -13
- package/esm2020/lib/components/po-menu/po-menu-base.component.mjs +46 -6
- package/esm2020/lib/components/po-menu/po-menu.component.mjs +5 -5
- package/esm2020/lib/components/po-table/po-table-base.component.mjs +6 -2
- package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +17 -3
- package/esm2020/lib/components/po-table/po-table-detail/po-table-detail.component.mjs +40 -40
- package/esm2020/lib/components/po-table/po-table.component.mjs +441 -438
- package/esm2020/lib/components/po-table/po-table.module.mjs +12 -4
- package/esm2020/lib/services/po-notification/po-notification-base.service.mjs +6 -4
- package/esm2020/lib/services/po-notification/po-notification.interface.mjs +1 -1
- package/esm2020/lib/services/po-notification/po-notification.module.mjs +6 -4
- package/esm2020/lib/services/po-notification/po-notification.service.mjs +3 -2
- package/esm2020/lib/services/po-notification/po-toaster/po-toaster.component.mjs +49 -32
- package/esm2020/lib/services/po-notification/po-toaster/po-toaster.literals.mjs +15 -0
- package/fesm2015/po-ui-ng-components.mjs +968 -840
- package/fesm2015/po-ui-ng-components.mjs.map +1 -1
- package/fesm2020/po-ui-ng-components.mjs +960 -825
- package/fesm2020/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-button/po-button-base.component.d.ts +16 -6
- package/lib/components/po-field/index.d.ts +1 -0
- package/lib/components/po-field/po-checkbox/po-checkbox.module.d.ts +9 -0
- package/lib/components/po-field/po-field.module.d.ts +54 -54
- package/lib/components/po-menu/po-menu-base.component.d.ts +19 -1
- package/lib/components/po-table/po-table-base.component.d.ts +2 -0
- package/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.d.ts +3 -0
- package/lib/components/po-table/po-table.component.d.ts +2 -0
- package/lib/components/po-table/po-table.module.d.ts +14 -12
- package/lib/services/po-notification/po-notification-base.service.d.ts +4 -2
- package/lib/services/po-notification/po-notification.interface.d.ts +5 -1
- package/lib/services/po-notification/po-notification.module.d.ts +3 -1
- package/lib/services/po-notification/po-toaster/po-toaster.component.d.ts +5 -1
- package/lib/services/po-notification/po-toaster/po-toaster.literals.d.ts +14 -0
- package/package.json +4 -4
- package/po-ui-ng-components-6.12.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.spec.js +5 -5
- package/schematics/ng-generate/po-page-default/index.spec.js +12 -12
- package/schematics/ng-generate/po-page-detail/index.spec.js +12 -12
- package/schematics/ng-generate/po-page-edit/index.spec.js +12 -12
- package/schematics/ng-generate/po-page-list/index.spec.js +12 -12
- package/schematics/ng-generate/sidemenu/index.spec.js +4 -4
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/po-ui-ng-components-6.11.0.tgz +0 -0
|
@@ -5,11 +5,28 @@ import * as i1 from "./services/po-menu-global.service";
|
|
|
5
5
|
import * as i2 from "./services/po-menu.service";
|
|
6
6
|
import * as i3 from "../../services/po-language/po-language.service";
|
|
7
7
|
export const poMenuLiteralsDefault = {
|
|
8
|
-
en: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
en: {
|
|
9
|
+
itemNotFound: 'Item not found.',
|
|
10
|
+
emptyLabelError: 'Attribute PoMenuItem.label can not be empty.',
|
|
11
|
+
logomarcaHome: 'Home logo'
|
|
12
|
+
},
|
|
13
|
+
es: {
|
|
14
|
+
itemNotFound: 'Elemento no encontrado.',
|
|
15
|
+
emptyLabelError: 'El atributo PoMenuItem.label no puede ser vacío.',
|
|
16
|
+
logomarcaHome: 'Logomarca inicio'
|
|
17
|
+
},
|
|
18
|
+
pt: {
|
|
19
|
+
itemNotFound: 'Item não encontrado.',
|
|
20
|
+
emptyLabelError: 'O atributo PoMenuItem.label não pode ser vazio.',
|
|
21
|
+
logomarcaHome: 'Logomarca home'
|
|
22
|
+
},
|
|
23
|
+
ru: {
|
|
24
|
+
itemNotFound: 'Предмет не найден.',
|
|
25
|
+
emptyLabelError: 'Атрибут PoMenuItem.label не может быть пустым.',
|
|
26
|
+
logomarcaHome: 'Дом Логомарка'
|
|
27
|
+
}
|
|
12
28
|
};
|
|
29
|
+
export const MAX_LENGHT = 125;
|
|
13
30
|
/**
|
|
14
31
|
* @description
|
|
15
32
|
*
|
|
@@ -29,6 +46,7 @@ export class PoMenuBaseComponent {
|
|
|
29
46
|
};
|
|
30
47
|
this._collapsed = false;
|
|
31
48
|
this._filter = false;
|
|
49
|
+
this._logoAlt = this.literals.logomarcaHome;
|
|
32
50
|
this._maxLevel = 4;
|
|
33
51
|
this._menus = [];
|
|
34
52
|
}
|
|
@@ -169,6 +187,22 @@ export class PoMenuBaseComponent {
|
|
|
169
187
|
get logo() {
|
|
170
188
|
return this._logo;
|
|
171
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* @optional
|
|
192
|
+
*
|
|
193
|
+
* @description
|
|
194
|
+
*
|
|
195
|
+
* Texto alternativo para o logo.
|
|
196
|
+
*
|
|
197
|
+
* > Caso esta propriedade seja indefinida ou inválida o texto padrão será "Logomarca home".
|
|
198
|
+
*/
|
|
199
|
+
set logoAlt(value) {
|
|
200
|
+
const alt = isTypeof(value, 'string') && value.trim() ? this.maxLength(value) : undefined;
|
|
201
|
+
this._logoAlt = alt ?? this._logoAlt;
|
|
202
|
+
}
|
|
203
|
+
get logoAlt() {
|
|
204
|
+
return this._logoAlt;
|
|
205
|
+
}
|
|
172
206
|
/**
|
|
173
207
|
* @optional
|
|
174
208
|
*
|
|
@@ -282,9 +316,12 @@ export class PoMenuBaseComponent {
|
|
|
282
316
|
});
|
|
283
317
|
}
|
|
284
318
|
}
|
|
319
|
+
maxLength(value) {
|
|
320
|
+
return value.length > MAX_LENGHT ? value.toString().substring(0, MAX_LENGHT) : value;
|
|
321
|
+
}
|
|
285
322
|
}
|
|
286
323
|
PoMenuBaseComponent.ɵfac = function PoMenuBaseComponent_Factory(t) { return new (t || PoMenuBaseComponent)(i0.ɵɵdirectiveInject(i1.PoMenuGlobalService), i0.ɵɵdirectiveInject(i2.PoMenuService), i0.ɵɵdirectiveInject(i3.PoLanguageService)); };
|
|
287
|
-
PoMenuBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoMenuBaseComponent, inputs: { collapsed: ["p-collapsed", "collapsed"], menus: ["p-menus", "menus"], filter: ["p-filter", "filter"], service: ["p-service", "service"], params: ["p-params", "params"], logo: ["p-logo", "logo"], shortLogo: ["p-short-logo", "shortLogo"] } });
|
|
324
|
+
PoMenuBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoMenuBaseComponent, inputs: { collapsed: ["p-collapsed", "collapsed"], menus: ["p-menus", "menus"], filter: ["p-filter", "filter"], service: ["p-service", "service"], params: ["p-params", "params"], logo: ["p-logo", "logo"], logoAlt: ["p-logo-alt", "logoAlt"], shortLogo: ["p-short-logo", "shortLogo"] } });
|
|
288
325
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoMenuBaseComponent, [{
|
|
289
326
|
type: Directive
|
|
290
327
|
}], function () { return [{ type: i1.PoMenuGlobalService }, { type: i2.PoMenuService }, { type: i3.PoLanguageService }]; }, { collapsed: [{
|
|
@@ -305,8 +342,11 @@ PoMenuBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoMenuB
|
|
|
305
342
|
}], logo: [{
|
|
306
343
|
type: Input,
|
|
307
344
|
args: ['p-logo']
|
|
345
|
+
}], logoAlt: [{
|
|
346
|
+
type: Input,
|
|
347
|
+
args: ['p-logo-alt']
|
|
308
348
|
}], shortLogo: [{
|
|
309
349
|
type: Input,
|
|
310
350
|
args: ['p-short-logo']
|
|
311
351
|
}] }); })();
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbWVudS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1tZW51L3BvLW1lbnUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osY0FBYyxFQUNkLFFBQVEsRUFDUixVQUFVLEVBQ1YsSUFBSSxFQUNMLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBUzFCLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsOENBQThDLEVBQUU7SUFDeEcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxrREFBa0QsRUFBRTtJQUNwSCxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLGlEQUFpRCxFQUFFO0lBQ2hILEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsZ0RBQWdELEVBQUU7Q0FDOUcsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQWdCLG1CQUFtQjtJQXNNdkMsWUFDUyxpQkFBc0MsRUFDdEMsV0FBMEIsRUFDMUIsZUFBa0M7UUFGbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFxQjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFsTWxDLGFBQVEsR0FBRztZQUNsQixHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNuRSxHQUFHLHFCQUFx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QXRUbUIsbUJBQW1CO3NFQUFuQixtQkFBbUI7dUZBQW5CLG1CQUFtQjtjQUR4QyxTQUFTO2tJQXlDa0IsU0FBUztrQkFBbEMsS0FBSzttQkFBQyxhQUFhO1lBV0UsS0FBSztrQkFBMUIsS0FBSzttQkFBQyxTQUFTO1lBZ0NPLE1BQU07a0JBQTVCLEtBQUs7bUJBQUMsVUFBVTtZQW1DTyxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUE4QkssTUFBTTtrQkFBNUIsS0FBSzttQkFBQyxVQUFVO1lBb0JJLElBQUk7a0JBQXhCLEtBQUs7bUJBQUMsUUFBUTtZQXNCWSxTQUFTO2tCQUFuQyxLQUFLO21CQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIGJyb3dzZXJMYW5ndWFnZSxcbiAgY29udmVydFRvQm9vbGVhbixcbiAgY29udmVydFRvSW50LFxuICBpc0V4dGVybmFsTGluayxcbiAgaXNUeXBlb2YsXG4gIHZhbGlkVmFsdWUsXG4gIHV1aWRcbn0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvTWVudUZpbHRlciB9IGZyb20gJy4vcG8tbWVudS1maWx0ZXIvcG8tbWVudS1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTWVudUl0ZW0gfSBmcm9tICcuL3BvLW1lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9NZW51U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTWVudUdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLW1lbnUtZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcblxuZXhwb3J0IGNvbnN0IHBvTWVudUxpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IHsgaXRlbU5vdEZvdW5kOiAnSXRlbSBub3QgZm91bmQuJywgZW1wdHlMYWJlbEVycm9yOiAnQXR0cmlidXRlIFBvTWVudUl0ZW0ubGFiZWwgY2FuIG5vdCBiZSBlbXB0eS4nIH0sXG4gIGVzOiB7IGl0ZW1Ob3RGb3VuZDogJ0VsZW1lbnRvIG5vIGVuY29udHJhZG8uJywgZW1wdHlMYWJlbEVycm9yOiAnRWwgYXRyaWJ1dG8gUG9NZW51SXRlbS5sYWJlbCBubyBwdWVkZSBzZXIgdmFjw61vLicgfSxcbiAgcHQ6IHsgaXRlbU5vdEZvdW5kOiAnSXRlbSBuw6NvIGVuY29udHJhZG8uJywgZW1wdHlMYWJlbEVycm9yOiAnTyBhdHJpYnV0byBQb01lbnVJdGVtLmxhYmVsIG7Do28gcG9kZSBzZXIgdmF6aW8uJyB9LFxuICBydTogeyBpdGVtTm90Rm91bmQ6ICfQn9GA0LXQtNC80LXRgiDQvdC1INC90LDQudC00LXQvS4nLCBlbXB0eUxhYmVsRXJyb3I6ICfQkNGC0YDQuNCx0YPRgiBQb01lbnVJdGVtLmxhYmVsINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9GD0YHRgtGL0LwuJyB9XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEVzdGUgw6kgdW0gY29tcG9uZW50ZSBkZSBtZW51IGxhdGVyYWwgcXVlIMOpIHV0aWxpemFkbyBwYXJhIG5hdmVnYcOnw6NvIG5hcyBww6FnaW5hcyBkZSB1bWEgYXBsaWNhw6fDo28uXG4gKlxuICogTyBjb21wb25lbnRlIHBvLW1lbnUgcmVjZWJlIHVtYSBsaXN0YSBkZSBvYmpldG9zIGRvIHRpcG8gYE1lbnVJdGVtYCBjb20gYXMgaW5mb3JtYcOnw7VlcyBkb3MgaXRlbnMgZGUgbWVudSBjb21vXG4gKiB0ZXh0b3MsIGxpbmtzIHBhcmEgcmVkaXJlY2lvbmFtZW50bywgYcOnw7VlcywgYXTDqSA0IG7DrXZlaXMgZGUgbWVudSBlIMOtY29uZXMgcGFyYSBvIHByaW1laXJvIG7DrXZlbCBkZSBtZW51LlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb01lbnVCYXNlQ29tcG9uZW50IHtcbiAgYWxsb3dJY29uczogYm9vbGVhbjtcbiAgYWxsb3dDb2xsYXBzZU1lbnU6IGJvb2xlYW47XG5cbiAgZmlsdGVyZWRJdGVtcztcbiAgZmlsdGVyU2VydmljZTogUG9NZW51RmlsdGVyO1xuXG4gIHJlYWRvbmx5IGxpdGVyYWxzID0ge1xuICAgIC4uLnBvTWVudUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRMYW5ndWFnZURlZmF1bHQoKV0sXG4gICAgLi4ucG9NZW51TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKV1cbiAgfTtcblxuICBwcml2YXRlIF9jb2xsYXBzZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmlsdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX2xldmVsO1xuICBwcml2YXRlIF9sb2dvOiBzdHJpbmc7XG4gIHByaXZhdGUgX21heExldmVsID0gNDtcbiAgcHJpdmF0ZSBfbWVudXMgPSBbXTtcbiAgcHJpdmF0ZSBfcGFyYW1zOiBhbnk7XG4gIHByaXZhdGUgX3NlcnZpY2U6IHN0cmluZyB8IFBvTWVudUZpbHRlcjtcbiAgcHJpdmF0ZSBfc2hvcnRMb2dvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQ29sYXBzYSAocmV0cmFpKSBvIG1lbnUgZSBjYXNvIHJlY2ViYSBvIHZhbG9yIGBmYWxzZWAgZXhwYW5kZSBvIG1lbnUuXG4gICAqXG4gICAqID4gVXRpbGl6ZSBlc3RhIHByb3ByaWVkYWRlIHBhcmEgaW5pY2lhciBvIG1lbnUgY29sYXBzYWRvLlxuICAgKlxuICAgKiA+IEFvIHV0aWxpemFyIG9zIG3DqXRvZG9zIFtgY29sYXBzZWBdKGRvY3VtZW50YXRpb24vcG8tbWVudSNjb2xhcHNlTWV0aG9kKSwgW2BleHBhbmRgXShkb2N1bWVudGF0aW9uL3BvLW1lbnUjZXhwYW5kTWV0aG9kKSBlXG4gICAqIFtgdG9nZ2xlYF0oZG9jdW1lbnRhdGlvbi9wby1tZW51I3RvZ2dsZU1ldGhvZCkgbyB2YWxvciBkZXN0YSBwcm9wcmllZGFkZSBuw6NvIMOpIGFsdGVyYWRvLlxuICAgKlxuICAgKiAqKkltcG9ydGFudGU6KipcbiAgICpcbiAgICogPiBPIG1lbnUgc2Vyw6EgY29sYXBzYWRvL2V4cGFuZGlkbyBhcGVuYXMgc2UgdG9kb3Mgb3MgaXRlbnMgZGUgbWVudSB0aXZlcmVtIHZhbG9yIG5hcyBwcm9wcmllZGFkZXMgYGljb25gIGUgYHNob3J0TGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtY29sbGFwc2VkJykgc2V0IGNvbGxhcHNlZChjb2xsYXBzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jb2xsYXBzZWQgPSBjb252ZXJ0VG9Cb29sZWFuKGNvbGxhcHNlZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQ29sbGFwc2VDbGFzcygpO1xuICB9XG5cbiAgZ2V0IGNvbGxhcHNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGFwc2VkO1xuICB9XG5cbiAgLyoqIExpc3RhIGRvcyBpdGVucyBkbyBtZW51LiBTZSBvIHZhbG9yIGVzdGl2ZXIgaW5kZWZpbmlkbyBvdSBpbnbDoWxpZG8sIHNlcsOhIGluaWNpYWxpemFkbyBjb21vIHVtIGFycmF5IHZhemlvLiAqL1xuICBASW5wdXQoJ3AtbWVudXMnKSBzZXQgbWVudXMobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+KSB7XG4gICAgdGhpcy5fbWVudXMgPSBBcnJheS5pc0FycmF5KG1lbnVzKSA/IG1lbnVzIDogW107XG5cbiAgICB0aGlzLm1lbnVHbG9iYWxTZXJ2aWNlLnNlbmRNZW51cyhtZW51cyk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHVybFJvdXRlciA9IHRoaXMuY2hlY2tpbmdSb3V0ZXJDaGlsZHJlbkZyYWdtZW50cygpO1xuICAgICAgdGhpcy5jaGVja0FjdGl2ZU1lbnVCeVVybCh1cmxSb3V0ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IG1lbnVzKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51cztcbiAgfVxuXG4gIGdldCBtYXhMZXZlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4TGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSB1bSBjYW1wbyBwYXJhIHBlc3F1aXNhIG5vIG1lbnUuXG4gICAqIEEgcGVzcXVpc2Egw6kgcmVhbGl6YWRhIGVtIHRvZG9zIG9zIG7DrXZlaXMgZG8gbWVudSBlIGJ1c2NhIGFwZW5hcyBwZWxvcyBpdGVucyBxdWUgY29udMOpbSB1bWEgYcOnw6NvIGUvb3UgbGluayBkZWZpbmlkb3MsXG4gICAqIG91IHRhbWLDqW0sIHBvZGUgc2VyIHJlYWxpemFkYSBhdHJhdsOpcyBkZSB1bSBzZXJ2acOnbyBkZWZpbmlkbyBuYSBwcm9wcmllZGFkZSBgcC1zZXJ2aWNlYC5cbiAgICpcbiAgICogPiBPIGNhbXBvIGRlIHBlc3F1aXNhIMOpIGRlc2FiaWxpdGFkbyBzZSBvIG1lbnUgZXN0aXZlciBjb2xhcHNhZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXInKSBzZXQgZmlsdGVyKGZpbHRlcjogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZpbHRlciA9IDxhbnk+ZmlsdGVyID09PSAnJyA/IHRydWUgOiBjb252ZXJ0VG9Cb29sZWFuKGZpbHRlcik7XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gWy4uLnRoaXMuX21lbnVzXTtcbiAgfVxuXG4gIGdldCBmaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE5lc3RhIHByb3ByaWVkYWRlIGRldmUgc2VyIGluZm9ybWFkYSBhIFVSTCBkbyBzZXJ2acOnbyBlbSBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgcmVhbGl6YXIgbyBmaWx0cm8gZGUgaXRlbnMgZG9cbiAgICogbWVudSBxdWFuZG8gcmVhbGl6YXIgdW1hIGJ1c2NhLiBDYXNvIGhhamEgYSBuZWNlc3NpZGFkZSBkZSBjdXN0b21pemHDp8OjbywgcG9kZSBzZXIgaW5mb3JtYWRvIHVtXG4gICAqIHNlcnZpw6dvIGltcGxlbWVudGFuZG8gYSBpbnRlcmZhY2UgYFBvTWVudUZpbHRlcmAuXG4gICAqXG4gICAqIENhc28gdXRpbGl6YWRhIHVtYSBVUkwsIG8gc2VydmnDp28gZGV2ZSByZXRvcm5hciBvcyBkYWRvcyBjb25mb3JtZSBvXG4gICAqIFtHdWlhIGRlIGltcGxlbWVudGHDp8OjbyBkZSBBUElzXShodHRwczovL3BvLXVpLmlvL2d1aWRlcy9hcGkpIGRvIFBPIFVJLlxuICAgKlxuICAgKiBRdWFuZG8gdXRpbGl6YWRhIHVtYSBVUkwgZGUgc2VydmnDp28sIHNlcsOhIHJlYWxpemFkbyB1bSAqR0VUKiBuYSBVUkwgaW5mb3JtYWRhLCBwYXNzYW5kbyBvIHZhbG9yIGRpZ2l0YWRvXG4gICAqIG5vIHBhcsOibWV0cm8gYHNlYXJjaGAsIHZlamEgZXhlbXBsbzpcbiAgICpcbiAgICogPiBPIGZpbHRybyBubyBzZXJ2acOnbyBzZXLDoSByZWFsaXphZG8gY2FzbyBjb250ZW5oYSBubyBtw61uaW1vIHRyw6pzIGNhcmFjdGVyZXMgbm8gY2FtcG8gZGUgYnVzY2EsIHBvciBleGVtcGxvIGB0b3RgLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLW1lbnUgcC1zZXJ2aWNlPVwiL2FwaS92MS9mbmQvbWVudVwiPlxuICAgKiA8L3BvLW1lbnU+XG4gICAqXG4gICAqIFJlcXVpc2nDp8OjbzogR0VUIC9hcGkvdjEvZm5kL21lbnU/c2VhcmNoPWNvbnRhc1xuICAgKiBgYGBcbiAgICpcbiAgICogPiDDiSBuZWNlc3PDoXJpbyBxdWUgcHJvcHJpZWRhZGUgYHAtZmlsdGVyYCBlc3RlamEgaGFiaWxpdGFkYS5cbiAgICovXG4gIEBJbnB1dCgncC1zZXJ2aWNlJykgc2V0IHNlcnZpY2UodmFsdWU6IHN0cmluZyB8IFBvTWVudUZpbHRlcikge1xuICAgIHRoaXMuX3NlcnZpY2UgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UodGhpcy5zZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBzZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRvIHVtIG9iamV0byBxdWUgZGVzZWphLXNlIHV0aWxpemFyIG5hIHJlcXVpc2nDp8OjbyBkZSBmaWx0cm8gZG9zIGl0ZW5zIGRlIG1lbnUuXG4gICAqXG4gICAqIENhc28gdXRpbGl6YWRvIHVtIHNlcnZpw6dvIGN1c3RvbWl6YWRvLCBpbXBsZW1lbnRhbmRvIGEgaW50ZXJmYWNlIGBQb01lbnVGaWx0ZXJgLCBvIHZhbG9yIGRlc3RhIHByb3ByaWVkYWRlXG4gICAqIHNlcsOhIHBhc3NhZG8gY29tbyBwYXLDom1ldHJvLCBuYSBmdW7Dp8OjbyBgZ2V0RmlsdGVyZWREYXRhYC5cbiAgICpcbiAgICogUXVhbmRvIHV0aWxpemFkYSB1bWEgVVJMIGRlIHNlcnZpw6dvLCBzZXLDoSByZWFsaXphZG8gdW0gKkdFVCogbmEgVVJMIGluZm9ybWFkYSwgcGFzc2FuZG8gb3MgdmFsb3JlcyBpbmZvcm1hZG9zXG4gICAqIG5lc3RhIHByb3ByaWVkYWRlIGVtIGNvbmp1bnRvIGNvbSBvIHBhcsOibWV0cm8gYHNlYXJjaGAsIHZlamEgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1tZW51IHAtc2VydmljZT1cIi9hcGkvdjEvZm5kL21lbnVcIiBbcC1wYXJhbXNdPVwieyBjb21wYW55OiAxLCB1c2VyOiAyOTc3Njc1MTIgfVwiPlxuICAgKiA8L3BvLW1lbnU+XG4gICAqXG4gICAqIFJlcXVpc2nDp8OjbzogR0VUIC9hcGkvdjEvZm5kL21lbnU/c2VhcmNoPWNvbnRhcyZjb21wYW55PTEmdXNlcj0yOTc3Njc1MTJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtcGFyYW1zJykgc2V0IHBhcmFtcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fcGFyYW1zID0gdmFsdWUgJiYgaXNUeXBlb2YodmFsdWUsICdvYmplY3QnKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IHBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQ2FtaW5obyBwYXJhIGEgbG9nb21hcmNhLCBxdWUgc2Vyw6EgZXhpYmlkYSBxdWFuZG8gbyBjb21wb25lbnRlIGVzdGl2ZXIgZXhwYW5kaWRvLCBsb2NhbGl6YWRhIG5hIHBhcnRlIHN1cGVyaW9yLlxuICAgKlxuICAgKiA+ICoqSW1wb3J0YW50ZToqKlxuICAgKiAtIENhc28gZXN0YSBwcm9wcmllZGFkZSBlc3RpdmVyIGluZGVmaW5pZGEgb3UgaW52w6FsaWRhIG8gZXNwYcOnbyBwYXJhIGxvZ29tYXJjYSBzZXLDoSByZW1vdmlkby5cbiAgICogLSBDb21vIGJvYSBwcsOhdGljYSwgaW5kaWNhLXNlIHV0aWxpemFyIGltYWdlbnMgY29tIGF0w6kgYDI0cHhgIGRlIGFsdHVyYSBlIGAyMjRweGAgZGUgbGFyZ3VyYSxcbiAgICogY2FzbyB1bHRyYXBhc3NhciBlc3NlcyB2YWxvcmVzIGEgaW1hZ2VtIHNlcsOhIHJlYWRlcXVhZGEgbm8gZXNwYcOnbyBkaXNwb27DrXZlbC5cbiAgICovXG4gIEBJbnB1dCgncC1sb2dvJykgc2V0IGxvZ28odmFsdWU6IGFueSkge1xuICAgIHRoaXMuX2xvZ28gPSBpc1R5cGVvZih2YWx1ZSwgJ3N0cmluZycpICYmIHZhbHVlLnRyaW0oKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGxvZ28oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ287XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBDYW1pbmhvIHBhcmEgYSBsb2dvbWFyY2EsIHF1ZSBzZXLDoSBleGliaWRhIHF1YW5kbyBvIGNvbXBvbmVudGUgZXN0aXZlciBjb2xhcHNhZG8sIGxvY2FsaXphZGEgbmEgcGFydGUgc3VwZXJpb3IuXG4gICAqXG4gICAqID4gKipJbXBvcnRhbnRlOioqXG4gICAqIC0gQ2FzbyBlc3RhIHByb3ByaWVkYWRlIGVzdGl2ZXIgaW5kZWZpbmlkYSBvdSBpbnbDoWxpZGEgcGFzc2EgYSBhc3N1bWlyIG8gdmFsb3IgaW5mb3JtYWRvIG5hIHByb3ByaWVkYWRlIGBwLWxvZ29gIGUgbmEgYXVzw6puY2lhIGRlc3RhIG9cbiAgICogZXNwYcOnbyBwYXJhIGxvZ29tYXJjYSBzZXLDoSByZW1vdmlkby5cbiAgICogLSBDb21vIGJvYSBwcsOhdGljYSwgaW5kaWNhLXNlIHV0aWxpemFyIGltYWdlbnMgY29tIGF0w6kgYDQ4cHhgIGRlIGFsdHVyYSBlIGA0OHB4YCBkZSBsYXJndXJhLFxuICAgKiBjYXNvIHVsdHJhcGFzc2FyIGVzc2VzIHZhbG9yZXMgYSBpbWFnZW0gc2Vyw6EgcmVhZGVxdWFkYSBubyBlc3Bhw6dvIGRpc3BvbsOtdmVsLlxuICAgKiAtIENhc28gbsOjbyBpbmZvcm1hciB1bSB2YWxvciwgZXN0YSBwcm9wcmllZGFkZSBwYXNzYSBhIGFzc3VtaXIgbyB2YWxvciBpbmZvcm1hZG8gbmEgcHJvcHJpZWRhZGUgYHAtbG9nb2AuXG4gICAqL1xuICBASW5wdXQoJ3Atc2hvcnQtbG9nbycpIHNldCBzaG9ydExvZ28odmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3Nob3J0TG9nbyA9IGlzVHlwZW9mKHZhbHVlLCAnc3RyaW5nJykgJiYgdmFsdWUudHJpbSgpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgc2hvcnRMb2dvKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG9ydExvZ287XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVudUdsb2JhbFNlcnZpY2U6IFBvTWVudUdsb2JhbFNlcnZpY2UsXG4gICAgcHVibGljIG1lbnVTZXJ2aWNlOiBQb01lbnVTZXJ2aWNlLFxuICAgIHB1YmxpYyBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge31cblxuICBwcm90ZWN0ZWQgc2V0TWVudUV4dHJhUHJvcGVydGllcygpIHtcbiAgICB0aGlzLmFsbG93SWNvbnMgPSAhIXRoaXMubWVudXMubGVuZ3RoO1xuICAgIHRoaXMuYWxsb3dDb2xsYXBzZU1lbnUgPSAhIXRoaXMubWVudXMubGVuZ3RoO1xuXG4gICAgdGhpcy5tZW51cy5mb3JFYWNoKG1lbnVJdGVtID0+IHtcbiAgICAgIHRoaXMuX2xldmVsID0gMTtcbiAgICAgIHRoaXMuYWxsb3dJY29ucyA9IHRoaXMuYWxsb3dJY29ucyA/IHZhbGlkVmFsdWUobWVudUl0ZW0uaWNvbikgOiBmYWxzZTtcbiAgICAgIHRoaXMuYWxsb3dDb2xsYXBzZU1lbnUgPSB0aGlzLmFsbG93Q29sbGFwc2VNZW51ICYmIHRoaXMuYWxsb3dJY29ucyA/IHZhbGlkVmFsdWUobWVudUl0ZW0uc2hvcnRMYWJlbCkgOiBmYWxzZTtcbiAgICAgIHRoaXMucmVtb3ZlQmFkZ2VBbGVydChtZW51SXRlbSk7XG4gICAgICB0aGlzLnNldE1lbnVJdGVtUHJvcGVydGllcyhtZW51SXRlbSk7XG5cbiAgICAgIGlmIChtZW51SXRlbS5zdWJJdGVtcykge1xuICAgICAgICB0aGlzLl9sZXZlbCsrO1xuICAgICAgICB0aGlzLnByb2Nlc3NTdWJJdGVtcyhtZW51SXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0TWVudUl0ZW1Qcm9wZXJ0aWVzKG1lbnVJdGVtOiBQb01lbnVJdGVtKTogdm9pZCB7XG4gICAgbWVudUl0ZW1bJ2lkJ10gPSBtZW51SXRlbVsnaWQnXSB8fCB1dWlkKCk7XG4gICAgbWVudUl0ZW1bJ2xldmVsJ10gPSB0aGlzLl9sZXZlbDtcbiAgICBtZW51SXRlbVsndHlwZSddID0gdGhpcy5zZXRNZW51VHlwZShtZW51SXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVNZW51cyhtZW51cyk6IHZvaWQge1xuICAgIG1lbnVzLmZvckVhY2gobWVudSA9PiB0aGlzLnZhbGlkYXRlTWVudShtZW51KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0TWVudVR5cGUobWVudUl0ZW06IFBvTWVudUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmIChtZW51SXRlbS5zdWJJdGVtcyAmJiBtZW51SXRlbS5zdWJJdGVtcy5sZW5ndGggPiAwICYmIHRoaXMuX2xldmVsIDwgdGhpcy5tYXhMZXZlbCkge1xuICAgICAgcmV0dXJuICdzdWJJdGVtcyc7XG4gICAgfVxuICAgIGlmICghbWVudUl0ZW0ubGluaykge1xuICAgICAgcmV0dXJuICdub0xpbmsnO1xuICAgIH1cbiAgICBpZiAoaXNFeHRlcm5hbExpbmsobWVudUl0ZW0ubGluaykpIHtcbiAgICAgIHJldHVybiAnZXh0ZXJuYWxMaW5rJztcbiAgICB9XG4gICAgcmV0dXJuICdpbnRlcm5hbExpbmsnO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlKHNlcnZpY2U6IHN0cmluZyB8IFBvTWVudUZpbHRlcikge1xuICAgIGlmICh0eXBlb2Ygc2VydmljZSA9PT0gJ3N0cmluZycgJiYgc2VydmljZS50cmltKCkpIHtcbiAgICAgIC8vIHNlcnZpY2UgdXJsXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLmNvbmZpZ1Byb3BlcnRpZXMoc2VydmljZSk7XG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UgPSB0aGlzLm1lbnVTZXJ2aWNlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlcnZpY2UgPT09ICdvYmplY3QnICYmIHNlcnZpY2UuZ2V0RmlsdGVyZWREYXRhKSB7XG4gICAgICAvLyBjdXN0b20gc2VydmljZVxuICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlID0gc2VydmljZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N1Ykl0ZW1zKG1lbnUpIHtcbiAgICBtZW51LnN1Ykl0ZW1zLmZvckVhY2goKG1lbnVJdGVtLCBpbmRleCwgbWVudUl0ZW1zKSA9PiB7XG4gICAgICBjb25zdCBwcmV2aW91c0l0ZW0gPSBtZW51SXRlbXNbaW5kZXggLSAxXTtcbiAgICAgIGlmIChwcmV2aW91c0l0ZW0gJiYgcHJldmlvdXNJdGVtLnN1Ykl0ZW1zKSB7XG4gICAgICAgIHRoaXMuX2xldmVsID0gcHJldmlvdXNJdGVtWydsZXZlbCddO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbGV2ZWwgPD0gdGhpcy5tYXhMZXZlbCkge1xuICAgICAgICB0aGlzLnNldE1lbnVJdGVtUHJvcGVydGllcyhtZW51SXRlbSk7XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtLnN1Ykl0ZW1zKSB7XG4gICAgICAgICAgdGhpcy5fbGV2ZWwrKztcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdWJJdGVtcyhtZW51SXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFtZW51WydiYWRnZUFsZXJ0J10pIHtcbiAgICAgICAgbWVudSA9IHRoaXMuc2V0TWVudUJhZGdlQWxlcnQobWVudSwgbWVudUl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbWVudS5zdWJJdGVtcyA9IE9iamVjdC5hc3NpZ24oW10sIG1lbnUuc3ViSXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVCYWRnZUFsZXJ0KG1lbnVJdGVtOiBQb01lbnVJdGVtKTogdm9pZCB7XG4gICAgaWYgKG1lbnVJdGVtWydiYWRnZUFsZXJ0J10pIHtcbiAgICAgIGRlbGV0ZSBtZW51SXRlbVsnYmFkZ2VBbGVydCddO1xuICAgIH1cblxuICAgIGlmIChtZW51SXRlbS5zdWJJdGVtcykge1xuICAgICAgbWVudUl0ZW0uc3ViSXRlbXMuZm9yRWFjaChzdWJJdGVtID0+IHRoaXMucmVtb3ZlQmFkZ2VBbGVydChzdWJJdGVtKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZW51QmFkZ2VBbGVydChwYXJlbnQ6IFBvTWVudUl0ZW0sIGNoaWxkOiBQb01lbnVJdGVtKTogUG9NZW51SXRlbSB7XG4gICAgY29uc3QgY2hpbGRIYXNTdWJJdGVtcyA9IGNoaWxkLnN1Ykl0ZW1zICYmIGNoaWxkLnN1Ykl0ZW1zLmxlbmd0aDtcbiAgICBjb25zdCBjaGlsZEhhc0JhZGdlQWxlcnQgPSBjaGlsZFsnYmFkZ2VBbGVydCddO1xuICAgIGNvbnN0IGNoaWxkSGFzQmFkZ2UgPSBjaGlsZC5iYWRnZSAmJiBjb252ZXJ0VG9JbnQoY2hpbGQuYmFkZ2UudmFsdWUpID49IDA7XG5cbiAgICBwYXJlbnRbJ2JhZGdlQWxlcnQnXSA9IGNoaWxkSGFzQmFkZ2VBbGVydCB8fCAoY2hpbGRIYXNCYWRnZSAmJiAhY2hpbGRIYXNTdWJJdGVtcyk7XG5cbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU1lbnUobWVudUl0ZW06IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAoIW1lbnVJdGVtLmxhYmVsIHx8IG1lbnVJdGVtLmxhYmVsLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLmxpdGVyYWxzLmVtcHR5TGFiZWxFcnJvcik7XG4gICAgfSBlbHNlIGlmIChtZW51SXRlbS5zdWJJdGVtcykge1xuICAgICAgbWVudUl0ZW0uc3ViSXRlbXMuZm9yRWFjaChzdWJJdGVtID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZU1lbnUoc3ViSXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hlY2tBY3RpdmVNZW51QnlVcmwodXJsUm91dGVyKTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoZWNraW5nUm91dGVyQ2hpbGRyZW5GcmFnbWVudHMoKTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHZhbGlkYXRlQ29sbGFwc2VDbGFzcygpO1xufVxuIl19
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbWVudS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1tZW51L3BvLW1lbnUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osY0FBYyxFQUNkLFFBQVEsRUFDUixVQUFVLEVBQ1YsSUFBSSxFQUNMLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBUzFCLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLEVBQUUsRUFBRTtRQUNGLFlBQVksRUFBRSxpQkFBaUI7UUFDL0IsZUFBZSxFQUFFLDhDQUE4QztRQUMvRCxhQUFhLEVBQUUsV0FBVztLQUMzQjtJQUNELEVBQUUsRUFBRTtRQUNGLFlBQVksRUFBRSx5QkFBeUI7UUFDdkMsZUFBZSxFQUFFLGtEQUFrRDtRQUNuRSxhQUFhLEVBQUUsa0JBQWtCO0tBQ2xDO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsWUFBWSxFQUFFLHNCQUFzQjtRQUNwQyxlQUFlLEVBQUUsaURBQWlEO1FBQ2xFLGFBQWEsRUFBRSxnQkFBZ0I7S0FDaEM7SUFDRCxFQUFFLEVBQUU7UUFDRixZQUFZLEVBQUUsb0JBQW9CO1FBQ2xDLGVBQWUsRUFBRSxnREFBZ0Q7UUFDakUsYUFBYSxFQUFFLGVBQWU7S0FDL0I7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFXLEdBQUcsQ0FBQztBQUV0Qzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFnQixtQkFBbUI7SUF5TnZDLFlBQ1MsaUJBQXNDLEVBQ3RDLFdBQTBCLEVBQzFCLGVBQWtDO1FBRmxDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBcUI7UUFDdEMsZ0JBQVcsR0FB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QkFBQyxRQUFRO1lBaUJVLE9BQU87a0JBQS9CLEtBQUs7bUJBQUMsWUFBWTtZQXVCUSxTQUFTO2tCQUFuQyxLQUFLO21CQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIGJyb3dzZXJMYW5ndWFnZSxcbiAgY29udmVydFRvQm9vbGVhbixcbiAgY29udmVydFRvSW50LFxuICBpc0V4dGVybmFsTGluayxcbiAgaXNUeXBlb2YsXG4gIHZhbGlkVmFsdWUsXG4gIHV1aWRcbn0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmltcG9ydCB7IFBvTWVudUZpbHRlciB9IGZyb20gJy4vcG8tbWVudS1maWx0ZXIvcG8tbWVudS1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTWVudUl0ZW0gfSBmcm9tICcuL3BvLW1lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9NZW51U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTWVudUdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLW1lbnUtZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcblxuZXhwb3J0IGNvbnN0IHBvTWVudUxpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IHtcbiAgICBpdGVtTm90Rm91bmQ6ICdJdGVtIG5vdCBmb3VuZC4nLFxuICAgIGVtcHR5TGFiZWxFcnJvcjogJ0F0dHJpYnV0ZSBQb01lbnVJdGVtLmxhYmVsIGNhbiBub3QgYmUgZW1wdHkuJyxcbiAgICBsb2dvbWFyY2FIb21lOiAnSG9tZSBsb2dvJ1xuICB9LFxuICBlczoge1xuICAgIGl0ZW1Ob3RGb3VuZDogJ0VsZW1lbnRvIG5vIGVuY29udHJhZG8uJyxcbiAgICBlbXB0eUxhYmVsRXJyb3I6ICdFbCBhdHJpYnV0byBQb01lbnVJdGVtLmxhYmVsIG5vIHB1ZWRlIHNlciB2YWPDrW8uJyxcbiAgICBsb2dvbWFyY2FIb21lOiAnTG9nb21hcmNhIGluaWNpbydcbiAgfSxcbiAgcHQ6IHtcbiAgICBpdGVtTm90Rm91bmQ6ICdJdGVtIG7Do28gZW5jb250cmFkby4nLFxuICAgIGVtcHR5TGFiZWxFcnJvcjogJ08gYXRyaWJ1dG8gUG9NZW51SXRlbS5sYWJlbCBuw6NvIHBvZGUgc2VyIHZhemlvLicsXG4gICAgbG9nb21hcmNhSG9tZTogJ0xvZ29tYXJjYSBob21lJ1xuICB9LFxuICBydToge1xuICAgIGl0ZW1Ob3RGb3VuZDogJ9Cf0YDQtdC00LzQtdGCINC90LUg0L3QsNC50LTQtdC9LicsXG4gICAgZW1wdHlMYWJlbEVycm9yOiAn0JDRgtGA0LjQsdGD0YIgUG9NZW51SXRlbS5sYWJlbCDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0L/Rg9GB0YLRi9C8LicsXG4gICAgbG9nb21hcmNhSG9tZTogJ9CU0L7QvCDQm9C+0LPQvtC80LDRgNC60LAnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBNQVhfTEVOR0hUOiBudW1iZXIgPSAxMjU7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogRXN0ZSDDqSB1bSBjb21wb25lbnRlIGRlIG1lbnUgbGF0ZXJhbCBxdWUgw6kgdXRpbGl6YWRvIHBhcmEgbmF2ZWdhw6fDo28gbmFzIHDDoWdpbmFzIGRlIHVtYSBhcGxpY2HDp8Ojby5cbiAqXG4gKiBPIGNvbXBvbmVudGUgcG8tbWVudSByZWNlYmUgdW1hIGxpc3RhIGRlIG9iamV0b3MgZG8gdGlwbyBgTWVudUl0ZW1gIGNvbSBhcyBpbmZvcm1hw6fDtWVzIGRvcyBpdGVucyBkZSBtZW51IGNvbW9cbiAqIHRleHRvcywgbGlua3MgcGFyYSByZWRpcmVjaW9uYW1lbnRvLCBhw6fDtWVzLCBhdMOpIDQgbsOtdmVpcyBkZSBtZW51IGUgw61jb25lcyBwYXJhIG8gcHJpbWVpcm8gbsOtdmVsIGRlIG1lbnUuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvTWVudUJhc2VDb21wb25lbnQge1xuICBhbGxvd0ljb25zOiBib29sZWFuO1xuICBhbGxvd0NvbGxhcHNlTWVudTogYm9vbGVhbjtcblxuICBmaWx0ZXJlZEl0ZW1zO1xuICBmaWx0ZXJTZXJ2aWNlOiBQb01lbnVGaWx0ZXI7XG5cbiAgcmVhZG9ubHkgbGl0ZXJhbHMgPSB7XG4gICAgLi4ucG9NZW51TGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlRGVmYXVsdCgpXSxcbiAgICAuLi5wb01lbnVMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpXVxuICB9O1xuXG4gIHByaXZhdGUgX2NvbGxhcHNlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9maWx0ZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbGV2ZWw7XG4gIHByaXZhdGUgX2xvZ286IHN0cmluZztcbiAgcHJpdmF0ZSBfbG9nb0FsdDogc3RyaW5nID0gdGhpcy5saXRlcmFscy5sb2dvbWFyY2FIb21lO1xuICBwcml2YXRlIF9tYXhMZXZlbCA9IDQ7XG4gIHByaXZhdGUgX21lbnVzID0gW107XG4gIHByaXZhdGUgX3BhcmFtczogYW55O1xuICBwcml2YXRlIF9zZXJ2aWNlOiBzdHJpbmcgfCBQb01lbnVGaWx0ZXI7XG4gIHByaXZhdGUgX3Nob3J0TG9nbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENvbGFwc2EgKHJldHJhaSkgbyBtZW51IGUgY2FzbyByZWNlYmEgbyB2YWxvciBgZmFsc2VgIGV4cGFuZGUgbyBtZW51LlxuICAgKlxuICAgKiA+IFV0aWxpemUgZXN0YSBwcm9wcmllZGFkZSBwYXJhIGluaWNpYXIgbyBtZW51IGNvbGFwc2Fkby5cbiAgICpcbiAgICogPiBBbyB1dGlsaXphciBvcyBtw6l0b2RvcyBbYGNvbGFwc2VgXShkb2N1bWVudGF0aW9uL3BvLW1lbnUjY29sYXBzZU1ldGhvZCksIFtgZXhwYW5kYF0oZG9jdW1lbnRhdGlvbi9wby1tZW51I2V4cGFuZE1ldGhvZCkgZVxuICAgKiBbYHRvZ2dsZWBdKGRvY3VtZW50YXRpb24vcG8tbWVudSN0b2dnbGVNZXRob2QpIG8gdmFsb3IgZGVzdGEgcHJvcHJpZWRhZGUgbsOjbyDDqSBhbHRlcmFkby5cbiAgICpcbiAgICogKipJbXBvcnRhbnRlOioqXG4gICAqXG4gICAqID4gTyBtZW51IHNlcsOhIGNvbGFwc2Fkby9leHBhbmRpZG8gYXBlbmFzIHNlIHRvZG9zIG9zIGl0ZW5zIGRlIG1lbnUgdGl2ZXJlbSB2YWxvciBuYXMgcHJvcHJpZWRhZGVzIGBpY29uYCBlIGBzaG9ydExhYmVsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWNvbGxhcHNlZCcpIHNldCBjb2xsYXBzZWQoY29sbGFwc2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY29sbGFwc2VkID0gY29udmVydFRvQm9vbGVhbihjb2xsYXBzZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZUNvbGxhcHNlQ2xhc3MoKTtcbiAgfVxuXG4gIGdldCBjb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNlZDtcbiAgfVxuXG4gIC8qKiBMaXN0YSBkb3MgaXRlbnMgZG8gbWVudS4gU2UgbyB2YWxvciBlc3RpdmVyIGluZGVmaW5pZG8gb3UgaW52w6FsaWRvLCBzZXLDoSBpbmljaWFsaXphZG8gY29tbyB1bSBhcnJheSB2YXppby4gKi9cbiAgQElucHV0KCdwLW1lbnVzJykgc2V0IG1lbnVzKG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPikge1xuICAgIHRoaXMuX21lbnVzID0gQXJyYXkuaXNBcnJheShtZW51cykgPyBtZW51cyA6IFtdO1xuXG4gICAgdGhpcy5tZW51R2xvYmFsU2VydmljZS5zZW5kTWVudXMobWVudXMpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB1cmxSb3V0ZXIgPSB0aGlzLmNoZWNraW5nUm91dGVyQ2hpbGRyZW5GcmFnbWVudHMoKTtcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVNZW51QnlVcmwodXJsUm91dGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBtZW51cygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudXM7XG4gIH1cblxuICBnZXQgbWF4TGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heExldmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgdW0gY2FtcG8gcGFyYSBwZXNxdWlzYSBubyBtZW51LlxuICAgKiBBIHBlc3F1aXNhIMOpIHJlYWxpemFkYSBlbSB0b2RvcyBvcyBuw612ZWlzIGRvIG1lbnUgZSBidXNjYSBhcGVuYXMgcGVsb3MgaXRlbnMgcXVlIGNvbnTDqW0gdW1hIGHDp8OjbyBlL291IGxpbmsgZGVmaW5pZG9zLFxuICAgKiBvdSB0YW1iw6ltLCBwb2RlIHNlciByZWFsaXphZGEgYXRyYXbDqXMgZGUgdW0gc2VydmnDp28gZGVmaW5pZG8gbmEgcHJvcHJpZWRhZGUgYHAtc2VydmljZWAuXG4gICAqXG4gICAqID4gTyBjYW1wbyBkZSBwZXNxdWlzYSDDqSBkZXNhYmlsaXRhZG8gc2UgbyBtZW51IGVzdGl2ZXIgY29sYXBzYWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyJykgc2V0IGZpbHRlcihmaWx0ZXI6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9maWx0ZXIgPSA8YW55PmZpbHRlciA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbihmaWx0ZXIpO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLl9tZW51c107XG4gIH1cblxuICBnZXQgZmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZXZlIHNlciBpbmZvcm1hZGEgYSBVUkwgZG8gc2VydmnDp28gZW0gcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIHJlYWxpemFyIG8gZmlsdHJvIGRlIGl0ZW5zIGRvXG4gICAqIG1lbnUgcXVhbmRvIHJlYWxpemFyIHVtYSBidXNjYS4gQ2FzbyBoYWphIGEgbmVjZXNzaWRhZGUgZGUgY3VzdG9taXphw6fDo28sIHBvZGUgc2VyIGluZm9ybWFkbyB1bVxuICAgKiBzZXJ2acOnbyBpbXBsZW1lbnRhbmRvIGEgaW50ZXJmYWNlIGBQb01lbnVGaWx0ZXJgLlxuICAgKlxuICAgKiBDYXNvIHV0aWxpemFkYSB1bWEgVVJMLCBvIHNlcnZpw6dvIGRldmUgcmV0b3JuYXIgb3MgZGFkb3MgY29uZm9ybWUgb1xuICAgKiBbR3VpYSBkZSBpbXBsZW1lbnRhw6fDo28gZGUgQVBJc10oaHR0cHM6Ly9wby11aS5pby9ndWlkZXMvYXBpKSBkbyBQTyBVSS5cbiAgICpcbiAgICogUXVhbmRvIHV0aWxpemFkYSB1bWEgVVJMIGRlIHNlcnZpw6dvLCBzZXLDoSByZWFsaXphZG8gdW0gKkdFVCogbmEgVVJMIGluZm9ybWFkYSwgcGFzc2FuZG8gbyB2YWxvciBkaWdpdGFkb1xuICAgKiBubyBwYXLDom1ldHJvIGBzZWFyY2hgLCB2ZWphIGV4ZW1wbG86XG4gICAqXG4gICAqID4gTyBmaWx0cm8gbm8gc2VydmnDp28gc2Vyw6EgcmVhbGl6YWRvIGNhc28gY29udGVuaGEgbm8gbcOtbmltbyB0csOqcyBjYXJhY3RlcmVzIG5vIGNhbXBvIGRlIGJ1c2NhLCBwb3IgZXhlbXBsbyBgdG90YC5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1tZW51IHAtc2VydmljZT1cIi9hcGkvdjEvZm5kL21lbnVcIj5cbiAgICogPC9wby1tZW51PlxuICAgKlxuICAgKiBSZXF1aXNpw6fDo286IEdFVCAvYXBpL3YxL2ZuZC9tZW51P3NlYXJjaD1jb250YXNcbiAgICogYGBgXG4gICAqXG4gICAqID4gw4kgbmVjZXNzw6FyaW8gcXVlIHByb3ByaWVkYWRlIGBwLWZpbHRlcmAgZXN0ZWphIGhhYmlsaXRhZGEuXG4gICAqL1xuICBASW5wdXQoJ3Atc2VydmljZScpIHNldCBzZXJ2aWNlKHZhbHVlOiBzdHJpbmcgfCBQb01lbnVGaWx0ZXIpIHtcbiAgICB0aGlzLl9zZXJ2aWNlID0gdmFsdWUgfHwgdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5jb25maWdTZXJ2aWNlKHRoaXMuc2VydmljZSk7XG4gIH1cblxuICBnZXQgc2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERldmUgc2VyIGluZm9ybWFkbyB1bSBvYmpldG8gcXVlIGRlc2VqYS1zZSB1dGlsaXphciBuYSByZXF1aXNpw6fDo28gZGUgZmlsdHJvIGRvcyBpdGVucyBkZSBtZW51LlxuICAgKlxuICAgKiBDYXNvIHV0aWxpemFkbyB1bSBzZXJ2acOnbyBjdXN0b21pemFkbywgaW1wbGVtZW50YW5kbyBhIGludGVyZmFjZSBgUG9NZW51RmlsdGVyYCwgbyB2YWxvciBkZXN0YSBwcm9wcmllZGFkZVxuICAgKiBzZXLDoSBwYXNzYWRvIGNvbW8gcGFyw6JtZXRybywgbmEgZnVuw6fDo28gYGdldEZpbHRlcmVkRGF0YWAuXG4gICAqXG4gICAqIFF1YW5kbyB1dGlsaXphZGEgdW1hIFVSTCBkZSBzZXJ2acOnbywgc2Vyw6EgcmVhbGl6YWRvIHVtICpHRVQqIG5hIFVSTCBpbmZvcm1hZGEsIHBhc3NhbmRvIG9zIHZhbG9yZXMgaW5mb3JtYWRvc1xuICAgKiBuZXN0YSBwcm9wcmllZGFkZSBlbSBjb25qdW50byBjb20gbyBwYXLDom1ldHJvIGBzZWFyY2hgLCB2ZWphIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tbWVudSBwLXNlcnZpY2U9XCIvYXBpL3YxL2ZuZC9tZW51XCIgW3AtcGFyYW1zXT1cInsgY29tcGFueTogMSwgdXNlcjogMjk3NzY3NTEyIH1cIj5cbiAgICogPC9wby1tZW51PlxuICAgKlxuICAgKiBSZXF1aXNpw6fDo286IEdFVCAvYXBpL3YxL2ZuZC9tZW51P3NlYXJjaD1jb250YXMmY29tcGFueT0xJnVzZXI9Mjk3NzY3NTEyXG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLXBhcmFtcycpIHNldCBwYXJhbXModmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3BhcmFtcyA9IHZhbHVlICYmIGlzVHlwZW9mKHZhbHVlLCAnb2JqZWN0JykgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBwYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENhbWluaG8gcGFyYSBhIGxvZ29tYXJjYSwgcXVlIHNlcsOhIGV4aWJpZGEgcXVhbmRvIG8gY29tcG9uZW50ZSBlc3RpdmVyIGV4cGFuZGlkbywgbG9jYWxpemFkYSBuYSBwYXJ0ZSBzdXBlcmlvci5cbiAgICpcbiAgICogPiAqKkltcG9ydGFudGU6KipcbiAgICogLSBDYXNvIGVzdGEgcHJvcHJpZWRhZGUgZXN0aXZlciBpbmRlZmluaWRhIG91IGludsOhbGlkYSBvIGVzcGHDp28gcGFyYSBsb2dvbWFyY2Egc2Vyw6EgcmVtb3ZpZG8uXG4gICAqIC0gQ29tbyBib2EgcHLDoXRpY2EsIGluZGljYS1zZSB1dGlsaXphciBpbWFnZW5zIGNvbSBhdMOpIGAyNHB4YCBkZSBhbHR1cmEgZSBgMjI0cHhgIGRlIGxhcmd1cmEsXG4gICAqIGNhc28gdWx0cmFwYXNzYXIgZXNzZXMgdmFsb3JlcyBhIGltYWdlbSBzZXLDoSByZWFkZXF1YWRhIG5vIGVzcGHDp28gZGlzcG9uw612ZWwuXG4gICAqL1xuICBASW5wdXQoJ3AtbG9nbycpIHNldCBsb2dvKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9sb2dvID0gaXNUeXBlb2YodmFsdWUsICdzdHJpbmcnKSAmJiB2YWx1ZS50cmltKCkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBsb2dvKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2dvO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVGV4dG8gYWx0ZXJuYXRpdm8gcGFyYSBvIGxvZ28uXG4gICAqXG4gICAqID4gQ2FzbyBlc3RhIHByb3ByaWVkYWRlIHNlamEgaW5kZWZpbmlkYSBvdSBpbnbDoWxpZGEgbyB0ZXh0byBwYWRyw6NvIHNlcsOhIFwiTG9nb21hcmNhIGhvbWVcIi5cbiAgICovXG4gIEBJbnB1dCgncC1sb2dvLWFsdCcpIHNldCBsb2dvQWx0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhbHQgPSBpc1R5cGVvZih2YWx1ZSwgJ3N0cmluZycpICYmIHZhbHVlLnRyaW0oKSA/IHRoaXMubWF4TGVuZ3RoKHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9sb2dvQWx0ID0gYWx0ID8/IHRoaXMuX2xvZ29BbHQ7XG4gIH1cblxuICBnZXQgbG9nb0FsdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nb0FsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIENhbWluaG8gcGFyYSBhIGxvZ29tYXJjYSwgcXVlIHNlcsOhIGV4aWJpZGEgcXVhbmRvIG8gY29tcG9uZW50ZSBlc3RpdmVyIGNvbGFwc2FkbywgbG9jYWxpemFkYSBuYSBwYXJ0ZSBzdXBlcmlvci5cbiAgICpcbiAgICogPiAqKkltcG9ydGFudGU6KipcbiAgICogLSBDYXNvIGVzdGEgcHJvcHJpZWRhZGUgZXN0aXZlciBpbmRlZmluaWRhIG91IGludsOhbGlkYSBwYXNzYSBhIGFzc3VtaXIgbyB2YWxvciBpbmZvcm1hZG8gbmEgcHJvcHJpZWRhZGUgYHAtbG9nb2AgZSBuYSBhdXPDqm5jaWEgZGVzdGEgb1xuICAgKiBlc3Bhw6dvIHBhcmEgbG9nb21hcmNhIHNlcsOhIHJlbW92aWRvLlxuICAgKiAtIENvbW8gYm9hIHByw6F0aWNhLCBpbmRpY2Etc2UgdXRpbGl6YXIgaW1hZ2VucyBjb20gYXTDqSBgNDhweGAgZGUgYWx0dXJhIGUgYDQ4cHhgIGRlIGxhcmd1cmEsXG4gICAqIGNhc28gdWx0cmFwYXNzYXIgZXNzZXMgdmFsb3JlcyBhIGltYWdlbSBzZXLDoSByZWFkZXF1YWRhIG5vIGVzcGHDp28gZGlzcG9uw612ZWwuXG4gICAqIC0gQ2FzbyBuw6NvIGluZm9ybWFyIHVtIHZhbG9yLCBlc3RhIHByb3ByaWVkYWRlIHBhc3NhIGEgYXNzdW1pciBvIHZhbG9yIGluZm9ybWFkbyBuYSBwcm9wcmllZGFkZSBgcC1sb2dvYC5cbiAgICovXG4gIEBJbnB1dCgncC1zaG9ydC1sb2dvJykgc2V0IHNob3J0TG9nbyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fc2hvcnRMb2dvID0gaXNUeXBlb2YodmFsdWUsICdzdHJpbmcnKSAmJiB2YWx1ZS50cmltKCkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBzaG9ydExvZ28oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3J0TG9nbztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZW51R2xvYmFsU2VydmljZTogUG9NZW51R2xvYmFsU2VydmljZSxcbiAgICBwdWJsaWMgbWVudVNlcnZpY2U6IFBvTWVudVNlcnZpY2UsXG4gICAgcHVibGljIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHByb3RlY3RlZCBzZXRNZW51RXh0cmFQcm9wZXJ0aWVzKCkge1xuICAgIHRoaXMuYWxsb3dJY29ucyA9ICEhdGhpcy5tZW51cy5sZW5ndGg7XG4gICAgdGhpcy5hbGxvd0NvbGxhcHNlTWVudSA9ICEhdGhpcy5tZW51cy5sZW5ndGg7XG5cbiAgICB0aGlzLm1lbnVzLmZvckVhY2gobWVudUl0ZW0gPT4ge1xuICAgICAgdGhpcy5fbGV2ZWwgPSAxO1xuICAgICAgdGhpcy5hbGxvd0ljb25zID0gdGhpcy5hbGxvd0ljb25zID8gdmFsaWRWYWx1ZShtZW51SXRlbS5pY29uKSA6IGZhbHNlO1xuICAgICAgdGhpcy5hbGxvd0NvbGxhcHNlTWVudSA9IHRoaXMuYWxsb3dDb2xsYXBzZU1lbnUgJiYgdGhpcy5hbGxvd0ljb25zID8gdmFsaWRWYWx1ZShtZW51SXRlbS5zaG9ydExhYmVsKSA6IGZhbHNlO1xuICAgICAgdGhpcy5yZW1vdmVCYWRnZUFsZXJ0KG1lbnVJdGVtKTtcbiAgICAgIHRoaXMuc2V0TWVudUl0ZW1Qcm9wZXJ0aWVzKG1lbnVJdGVtKTtcblxuICAgICAgaWYgKG1lbnVJdGVtLnN1Ykl0ZW1zKSB7XG4gICAgICAgIHRoaXMuX2xldmVsKys7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1Ykl0ZW1zKG1lbnVJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRNZW51SXRlbVByb3BlcnRpZXMobWVudUl0ZW06IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBtZW51SXRlbVsnaWQnXSA9IG1lbnVJdGVtWydpZCddIHx8IHV1aWQoKTtcbiAgICBtZW51SXRlbVsnbGV2ZWwnXSA9IHRoaXMuX2xldmVsO1xuICAgIG1lbnVJdGVtWyd0eXBlJ10gPSB0aGlzLnNldE1lbnVUeXBlKG1lbnVJdGVtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1lbnVzKG1lbnVzKTogdm9pZCB7XG4gICAgbWVudXMuZm9yRWFjaChtZW51ID0+IHRoaXMudmFsaWRhdGVNZW51KG1lbnUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRNZW51VHlwZShtZW51SXRlbTogUG9NZW51SXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKG1lbnVJdGVtLnN1Ykl0ZW1zICYmIG1lbnVJdGVtLnN1Ykl0ZW1zLmxlbmd0aCA+IDAgJiYgdGhpcy5fbGV2ZWwgPCB0aGlzLm1heExldmVsKSB7XG4gICAgICByZXR1cm4gJ3N1Ykl0ZW1zJztcbiAgICB9XG4gICAgaWYgKCFtZW51SXRlbS5saW5rKSB7XG4gICAgICByZXR1cm4gJ25vTGluayc7XG4gICAgfVxuICAgIGlmIChpc0V4dGVybmFsTGluayhtZW51SXRlbS5saW5rKSkge1xuICAgICAgcmV0dXJuICdleHRlcm5hbExpbmsnO1xuICAgIH1cbiAgICByZXR1cm4gJ2ludGVybmFsTGluayc7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ1NlcnZpY2Uoc2VydmljZTogc3RyaW5nIHwgUG9NZW51RmlsdGVyKSB7XG4gICAgaWYgKHR5cGVvZiBzZXJ2aWNlID09PSAnc3RyaW5nJyAmJiBzZXJ2aWNlLnRyaW0oKSkge1xuICAgICAgLy8gc2VydmljZSB1cmxcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuY29uZmlnUHJvcGVydGllcyhzZXJ2aWNlKTtcbiAgICAgIHRoaXMuZmlsdGVyU2VydmljZSA9IHRoaXMubWVudVNlcnZpY2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VydmljZSA9PT0gJ29iamVjdCcgJiYgc2VydmljZS5nZXRGaWx0ZXJlZERhdGEpIHtcbiAgICAgIC8vIGN1c3RvbSBzZXJ2aWNlXG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3ViSXRlbXMobWVudSkge1xuICAgIG1lbnUuc3ViSXRlbXMuZm9yRWFjaCgobWVudUl0ZW0sIGluZGV4LCBtZW51SXRlbXMpID0+IHtcbiAgICAgIGNvbnN0IHByZXZpb3VzSXRlbSA9IG1lbnVJdGVtc1tpbmRleCAtIDFdO1xuICAgICAgaWYgKHByZXZpb3VzSXRlbSAmJiBwcmV2aW91c0l0ZW0uc3ViSXRlbXMpIHtcbiAgICAgICAgdGhpcy5fbGV2ZWwgPSBwcmV2aW91c0l0ZW1bJ2xldmVsJ107XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9sZXZlbCA8PSB0aGlzLm1heExldmVsKSB7XG4gICAgICAgIHRoaXMuc2V0TWVudUl0ZW1Qcm9wZXJ0aWVzKG1lbnVJdGVtKTtcblxuICAgICAgICBpZiAobWVudUl0ZW0uc3ViSXRlbXMpIHtcbiAgICAgICAgICB0aGlzLl9sZXZlbCsrO1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Ykl0ZW1zKG1lbnVJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW1lbnVbJ2JhZGdlQWxlcnQnXSkge1xuICAgICAgICBtZW51ID0gdGhpcy5zZXRNZW51QmFkZ2VBbGVydChtZW51LCBtZW51SXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBtZW51LnN1Ykl0ZW1zID0gT2JqZWN0LmFzc2lnbihbXSwgbWVudS5zdWJJdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJhZGdlQWxlcnQobWVudUl0ZW06IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAobWVudUl0ZW1bJ2JhZGdlQWxlcnQnXSkge1xuICAgICAgZGVsZXRlIG1lbnVJdGVtWydiYWRnZUFsZXJ0J107XG4gICAgfVxuXG4gICAgaWYgKG1lbnVJdGVtLnN1Ykl0ZW1zKSB7XG4gICAgICBtZW51SXRlbS5zdWJJdGVtcy5mb3JFYWNoKHN1Ykl0ZW0gPT4gdGhpcy5yZW1vdmVCYWRnZUFsZXJ0KHN1Ykl0ZW0pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1lbnVCYWRnZUFsZXJ0KHBhcmVudDogUG9NZW51SXRlbSwgY2hpbGQ6IFBvTWVudUl0ZW0pOiBQb01lbnVJdGVtIHtcbiAgICBjb25zdCBjaGlsZEhhc1N1Ykl0ZW1zID0gY2hpbGQuc3ViSXRlbXMgJiYgY2hpbGQuc3ViSXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGNoaWxkSGFzQmFkZ2VBbGVydCA9IGNoaWxkWydiYWRnZUFsZXJ0J107XG4gICAgY29uc3QgY2hpbGRIYXNCYWRnZSA9IGNoaWxkLmJhZGdlICYmIGNvbnZlcnRUb0ludChjaGlsZC5iYWRnZS52YWx1ZSkgPj0gMDtcblxuICAgIHBhcmVudFsnYmFkZ2VBbGVydCddID0gY2hpbGRIYXNCYWRnZUFsZXJ0IHx8IChjaGlsZEhhc0JhZGdlICYmICFjaGlsZEhhc1N1Ykl0ZW1zKTtcblxuICAgIHJldHVybiBwYXJlbnQ7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlTWVudShtZW51SXRlbTogUG9NZW51SXRlbSk6IHZvaWQge1xuICAgIGlmICghbWVudUl0ZW0ubGFiZWwgfHwgbWVudUl0ZW0ubGFiZWwudHJpbSgpID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMubGl0ZXJhbHMuZW1wdHlMYWJlbEVycm9yKTtcbiAgICB9IGVsc2UgaWYgKG1lbnVJdGVtLnN1Ykl0ZW1zKSB7XG4gICAgICBtZW51SXRlbS5zdWJJdGVtcy5mb3JFYWNoKHN1Ykl0ZW0gPT4ge1xuICAgICAgICB0aGlzLnZhbGlkYXRlTWVudShzdWJJdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWF4TGVuZ3RoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID4gTUFYX0xFTkdIVCA/IHZhbHVlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIE1BWF9MRU5HSFQpIDogdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hlY2tBY3RpdmVNZW51QnlVcmwodXJsUm91dGVyKTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoZWNraW5nUm91dGVyQ2hpbGRyZW5GcmFnbWVudHMoKTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHZhbGlkYXRlQ29sbGFwc2VDbGFzcygpO1xufVxuIl19
|
|
@@ -29,7 +29,7 @@ function PoMenuComponent_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
|
29
29
|
} if (rf & 2) {
|
|
30
30
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
31
31
|
i0.ɵɵadvance(2);
|
|
32
|
-
i0.ɵɵproperty("ngClass", ctx_r1.enableCollapse ? "po-menu-short-logo" : "po-menu-logo")("src", ctx_r1.enableCollapse ? ctx_r1.shortLogo || ctx_r1.logo : ctx_r1.logo, i0.ɵɵsanitizeUrl);
|
|
32
|
+
i0.ɵɵproperty("ngClass", ctx_r1.enableCollapse ? "po-menu-short-logo" : "po-menu-logo")("src", ctx_r1.enableCollapse ? ctx_r1.shortLogo || ctx_r1.logo : ctx_r1.logo, i0.ɵɵsanitizeUrl)("alt", ctx_r1.logoAlt);
|
|
33
33
|
} }
|
|
34
34
|
function PoMenuComponent_div_7_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
35
35
|
i0.ɵɵelementContainer(0);
|
|
@@ -553,14 +553,14 @@ PoMenuComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoMenuCompo
|
|
|
553
553
|
} if (rf & 2) {
|
|
554
554
|
let _t;
|
|
555
555
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.menuHeaderTemplate = _t.first);
|
|
556
|
-
} }, features: [i0.ɵɵProvidersFeature([PoMenuItemsService, PoMenuService]), i0.ɵɵInheritDefinitionFeature], decls: 15, vars: 10, consts: [["class", "po-menu-overlay", 3, "click", 4, "ngIf"], [1, "po-menu-mobile", "po-clickable", 3, "click"], [1, "po-icon", "po-icon-menu"], [1, "po-menu", 3, "ngClass"], [1, "po-menu-header"], ["class", "po-menu-header-container-logo", 4, "ngIf"], ["class", "po-menu-header-template", 4, "ngIf"], [3, "p-loading", "p-filter", 4, "ngIf"], [1, "po-menu-body"], [1, "po-menu-outer"], [1, "po-menu-inner"], ["class", "po-menu-item-wrapper", 4, "ngIf"], ["class", "po-menu-item-wrapper", 4, "ngFor", "ngForOf"], ["class", "po-menu-footer", 4, "ngIf"], [1, "po-menu-overlay", 3, "click"], [1, "po-menu-header-container-logo"], ["href", "./"], [3, "ngClass", "src"], [1, "po-menu-header-template"], [4, "ngTemplateOutlet"], [3, "p-loading", "p-filter"], [1, "po-menu-item-wrapper"], [1, "po-menu-item-first"], [1, "po-menu-icon-container", "po-menu-item-no-data"], [1, "po-icon", "po-icon-info", "po-menu-icon-item", "po-lg-2"], [1, "po-lg-10", "po-menu-icon-label"], [3, "p-action", "p-badge-alert", "p-badge-color", "p-badge-value", "p-collapsed-menu", "p-icon", "p-id", "p-label", "p-level", "p-link", "p-short-label", "p-sub-items", "p-type"], [1, "po-menu-footer"], [1, "po-menu-collapse-button-icon", "po-clickable", 3, "click"], [1, "po-icon"]], template: function PoMenuComponent_Template(rf, ctx) { if (rf & 1) {
|
|
556
|
+
} }, features: [i0.ɵɵProvidersFeature([PoMenuItemsService, PoMenuService]), i0.ɵɵInheritDefinitionFeature], decls: 15, vars: 10, consts: [["class", "po-menu-overlay", 3, "click", 4, "ngIf"], [1, "po-menu-mobile", "po-clickable", 3, "click"], [1, "po-icon", "po-icon-menu"], [1, "po-menu", 3, "ngClass"], [1, "po-menu-header"], ["class", "po-menu-header-container-logo", 4, "ngIf"], ["class", "po-menu-header-template", 4, "ngIf"], [3, "p-loading", "p-filter", 4, "ngIf"], [1, "po-menu-body"], [1, "po-menu-outer"], [1, "po-menu-inner"], ["class", "po-menu-item-wrapper", 4, "ngIf"], ["class", "po-menu-item-wrapper", 4, "ngFor", "ngForOf"], ["class", "po-menu-footer", 4, "ngIf"], [1, "po-menu-overlay", 3, "click"], [1, "po-menu-header-container-logo"], ["href", "./"], [3, "ngClass", "src", "alt"], [1, "po-menu-header-template"], [4, "ngTemplateOutlet"], [3, "p-loading", "p-filter"], [1, "po-menu-item-wrapper"], [1, "po-menu-item-first"], [1, "po-menu-icon-container", "po-menu-item-no-data"], [1, "po-icon", "po-icon-info", "po-menu-icon-item", "po-lg-2"], [1, "po-lg-10", "po-menu-icon-label"], [3, "p-action", "p-badge-alert", "p-badge-color", "p-badge-value", "p-collapsed-menu", "p-icon", "p-id", "p-label", "p-level", "p-link", "p-short-label", "p-sub-items", "p-type"], [1, "po-menu-footer"], [1, "po-menu-collapse-button-icon", "po-clickable", 3, "click"], [1, "po-icon"]], template: function PoMenuComponent_Template(rf, ctx) { if (rf & 1) {
|
|
557
557
|
i0.ɵɵtemplate(0, PoMenuComponent_div_0_Template, 1, 0, "div", 0);
|
|
558
558
|
i0.ɵɵelementStart(1, "nav")(2, "div", 1);
|
|
559
559
|
i0.ɵɵlistener("click", function PoMenuComponent_Template_div_click_2_listener() { return ctx.toggleMenuMobile(); });
|
|
560
560
|
i0.ɵɵelement(3, "span", 2);
|
|
561
561
|
i0.ɵɵelementEnd();
|
|
562
562
|
i0.ɵɵelementStart(4, "div", 3)(5, "div", 4);
|
|
563
|
-
i0.ɵɵtemplate(6, PoMenuComponent_div_6_Template, 3,
|
|
563
|
+
i0.ɵɵtemplate(6, PoMenuComponent_div_6_Template, 3, 3, "div", 5);
|
|
564
564
|
i0.ɵɵtemplate(7, PoMenuComponent_div_7_Template, 2, 1, "div", 6);
|
|
565
565
|
i0.ɵɵtemplate(8, PoMenuComponent_po_menu_filter_8_Template, 1, 1, "po-menu-filter", 7);
|
|
566
566
|
i0.ɵɵelementEnd();
|
|
@@ -589,9 +589,9 @@ PoMenuComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PoMenuCompo
|
|
|
589
589
|
} }, directives: [i6.NgIf, i6.NgClass, i6.NgTemplateOutlet, i7.PoMenuFilterComponent, i8.PoIconComponent, i6.NgForOf, i9.PoMenuItemComponent], encapsulation: 2 });
|
|
590
590
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoMenuComponent, [{
|
|
591
591
|
type: Component,
|
|
592
|
-
args: [{ selector: 'po-menu', providers: [PoMenuItemsService, PoMenuService], template: "<div *ngIf=\"mobileOpened\" class=\"po-menu-overlay\" (click)=\"toggleMenuMobile()\"></div>\n<nav>\n <div class=\"po-menu-mobile po-clickable\" (click)=\"toggleMenuMobile()\">\n <span class=\"po-icon po-icon-menu\"></span>\n </div>\n\n <div class=\"po-menu\" [ngClass]=\"{ 'po-menu-animation': mobileOpened }\">\n <div class=\"po-menu-header\">\n <div *ngIf=\"logo || (shortLogo && enableCollapse)\" class=\"po-menu-header-container-logo\">\n <a href=\"./\">\n <img\n [ngClass]=\"enableCollapse ? 'po-menu-short-logo' : 'po-menu-logo'\"\n [src]=\"enableCollapse ? shortLogo || logo : logo\"\n />\n </a>\n </div>\n\n <div *ngIf=\"!enableCollapse && menuHeaderTemplate\" class=\"po-menu-header-template\">\n <ng-container *ngTemplateOutlet=\"menuHeaderTemplate.templateRef\"></ng-container>\n </div>\n\n <po-menu-filter *ngIf=\"filter && !enableCollapse\" [p-loading]=\"filterLoading\" (p-filter)=\"debounceFilter($event)\">\n </po-menu-filter>\n </div>\n\n <div class=\"po-menu-body\">\n <!-- Inner e outer para esconder scroll -->\n <div class=\"po-menu-outer\">\n <div class=\"po-menu-inner\">\n <div *ngIf=\"noData\" class=\"po-menu-item-wrapper\">\n <div class=\"po-menu-item-first\">\n <div class=\"po-menu-icon-container po-menu-item-no-data\">\n <po-icon class=\"po-icon po-icon-info po-menu-icon-item po-lg-2\"></po-icon>\n <div class=\"po-lg-10 po-menu-icon-label\">{{ literals.itemNotFound }}</div>\n </div>\n </div>\n </div>\n\n <div *ngFor=\"let menu of filteredItems; let menuIndex = index\" class=\"po-menu-item-wrapper\">\n <po-menu-item\n [class.po-menu-item-first]=\"menuIndex === 0\"\n [p-action]=\"menu.action\"\n [p-badge-alert]=\"menu.badgeAlert\"\n [p-badge-color]=\"menu.badge ? menu.badge.color : undefined\"\n [p-badge-value]=\"menu.badge ? menu.badge.value : undefined\"\n [p-collapsed-menu]=\"enableCollapse\"\n [p-icon]=\"allowIcons ? menu.icon : null\"\n [p-id]=\"menu.id\"\n [p-label]=\"menu.label\"\n [p-level]=\"menu.level\"\n [p-link]=\"menu.link\"\n [p-short-label]=\"menu.shortLabel\"\n [p-sub-items]=\"menu.subItems\"\n [p-type]=\"menu.type\"\n >\n </po-menu-item>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"hasFooter\" class=\"po-menu-footer\">\n <a class=\"po-menu-collapse-button-icon po-clickable\" (click)=\"toggle()\">\n <span\n class=\"po-icon\"\n [class.po-icon-menu-close]=\"enableCollapseButton\"\n [class.po-icon-menu-open]=\"enableCollapse\"\n >\n </span>\n </a>\n </div>\n </div>\n</nav>\n" }]
|
|
592
|
+
args: [{ selector: 'po-menu', providers: [PoMenuItemsService, PoMenuService], template: "<div *ngIf=\"mobileOpened\" class=\"po-menu-overlay\" (click)=\"toggleMenuMobile()\"></div>\n<nav>\n <div class=\"po-menu-mobile po-clickable\" (click)=\"toggleMenuMobile()\">\n <span class=\"po-icon po-icon-menu\"></span>\n </div>\n\n <div class=\"po-menu\" [ngClass]=\"{ 'po-menu-animation': mobileOpened }\">\n <div class=\"po-menu-header\">\n <div *ngIf=\"logo || (shortLogo && enableCollapse)\" class=\"po-menu-header-container-logo\">\n <a href=\"./\">\n <img\n [ngClass]=\"enableCollapse ? 'po-menu-short-logo' : 'po-menu-logo'\"\n [src]=\"enableCollapse ? shortLogo || logo : logo\"\n [alt]=\"logoAlt\"\n />\n </a>\n </div>\n\n <div *ngIf=\"!enableCollapse && menuHeaderTemplate\" class=\"po-menu-header-template\">\n <ng-container *ngTemplateOutlet=\"menuHeaderTemplate.templateRef\"></ng-container>\n </div>\n\n <po-menu-filter *ngIf=\"filter && !enableCollapse\" [p-loading]=\"filterLoading\" (p-filter)=\"debounceFilter($event)\">\n </po-menu-filter>\n </div>\n\n <div class=\"po-menu-body\">\n <!-- Inner e outer para esconder scroll -->\n <div class=\"po-menu-outer\">\n <div class=\"po-menu-inner\">\n <div *ngIf=\"noData\" class=\"po-menu-item-wrapper\">\n <div class=\"po-menu-item-first\">\n <div class=\"po-menu-icon-container po-menu-item-no-data\">\n <po-icon class=\"po-icon po-icon-info po-menu-icon-item po-lg-2\"></po-icon>\n <div class=\"po-lg-10 po-menu-icon-label\">{{ literals.itemNotFound }}</div>\n </div>\n </div>\n </div>\n\n <div *ngFor=\"let menu of filteredItems; let menuIndex = index\" class=\"po-menu-item-wrapper\">\n <po-menu-item\n [class.po-menu-item-first]=\"menuIndex === 0\"\n [p-action]=\"menu.action\"\n [p-badge-alert]=\"menu.badgeAlert\"\n [p-badge-color]=\"menu.badge ? menu.badge.color : undefined\"\n [p-badge-value]=\"menu.badge ? menu.badge.value : undefined\"\n [p-collapsed-menu]=\"enableCollapse\"\n [p-icon]=\"allowIcons ? menu.icon : null\"\n [p-id]=\"menu.id\"\n [p-label]=\"menu.label\"\n [p-level]=\"menu.level\"\n [p-link]=\"menu.link\"\n [p-short-label]=\"menu.shortLabel\"\n [p-sub-items]=\"menu.subItems\"\n [p-type]=\"menu.type\"\n >\n </po-menu-item>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"hasFooter\" class=\"po-menu-footer\">\n <a class=\"po-menu-collapse-button-icon po-clickable\" (click)=\"toggle()\">\n <span\n class=\"po-icon\"\n [class.po-icon-menu-close]=\"enableCollapseButton\"\n [class.po-icon-menu-open]=\"enableCollapse\"\n >\n </span>\n </a>\n </div>\n </div>\n</nav>\n" }]
|
|
593
593
|
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.Router }, { type: i2.PoMenuItemsService }, { type: i3.PoMenuGlobalService }, { type: i4.PoMenuService }, { type: i5.PoLanguageService }]; }, { menuHeaderTemplate: [{
|
|
594
594
|
type: ContentChild,
|
|
595
595
|
args: [PoMenuHeaderTemplateDirective, { static: true }]
|
|
596
596
|
}] }); })();
|
|
597
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tbWVudS9wby1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1tZW51L3BvLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBTWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBRzVHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ3pCM0QsK0JBQStFO0lBQTdCLHlKQUFTLHlCQUFrQixJQUFDO0lBQUMsaUJBQU07OztJQVEvRSwrQkFBeUYsWUFBQTtJQUVyRiwwQkFHRTtJQUNKLGlCQUFJLEVBQUE7OztJQUhBLGVBQWtFO0lBQWxFLHVGQUFrRSxnR0FBQTs7O0lBT3RFLHdCQUFnRjs7O0lBRGxGLCtCQUFtRjtJQUNqRix5RkFBZ0Y7SUFDbEYsaUJBQU07OztJQURXLGVBQWdEO0lBQWhELHdFQUFnRDs7OztJQUdqRSwwQ0FBa0g7SUFB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QixJQUFDO1FBQ25FLDBCQUEwQztRQUM1QyxpQkFBTTtRQUVOLDhCQUF1RSxhQUFBO1FBRW5FLGdFQU9NO1FBRU4sZ0VBRU07UUFFTixzRkFDaUI7UUFDbkIsaUJBQU07UUFFTiw4QkFBMEIsY0FBQSxlQUFBO1FBSXBCLG1FQU9NO1FBRU4sb0VBa0JNO1FBQ1IsaUJBQU0sRUFBQSxFQUFBO1FBSVYsbUVBU007UUFDUixpQkFBTSxFQUFBOztRQXZFRix1Q0FBa0I7UUFNRCxlQUFpRDtRQUFqRCxzRUFBaUQ7UUFFNUQsZUFBMkM7UUFBM0Msc0VBQTJDO1FBUzNDLGVBQTJDO1FBQTNDLG9FQUEyQztRQUloQyxlQUErQjtRQUEvQix3REFBK0I7UUFRdEMsZUFBWTtRQUFaLGlDQUFZO1FBU0ksZUFBa0I7UUFBbEIsMkNBQWtCO1FBdUJ4QyxlQUFlO1FBQWYsb0NBQWU7O3VGRDBEWixlQUFlO2NBTDNCLFNBQVM7MkJBQ0UsU0FBUyxhQUVSLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO3lRQUdpQixrQkFBa0I7a0JBQWhGLFlBQVk7bUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZ2V0Rm9ybWF0dGVkTGluaywgaXNNb2JpbGUsIG9wZW5FeHRlcm5hbExpbmssIHV1aWQgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9NZW51QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tbWVudS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb01lbnVIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tbWVudS1oZWFkZXItdGVtcGxhdGUvcG8tbWVudS1oZWFkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvTWVudUl0ZW0gfSBmcm9tICcuL3BvLW1lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9NZW51SXRlbUZpbHRlcmVkIH0gZnJvbSAnLi9wby1tZW51LWl0ZW0vcG8tbWVudS1pdGVtLWZpbHRlcmVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb01lbnVJdGVtc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLW1lbnUtaXRlbXMuc2VydmljZSc7XG5pbXBvcnQgeyBQb01lbnVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1tZW51LWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTWVudVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5jb25zdCBwb01lbnVEZWJvdW5jZVRpbWUgPSA0MDA7XG5jb25zdCBwb01lbnVNaW5MZW5ndGggPSAzO1xuY29uc3QgcG9NZW51Um9vdExldmVsID0gMTtcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9NZW51QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEFwYXJlY2UgY29tcGxldG8gZW0gdGVsYXMgY29tIGxhcmd1cmEgbWFpb3IgcXVlIDEyMDBweCwgY2FzbyBjb250csOhcmlvIG8gbWVudSDDqSBlc2NvbmRpZG8gZSBjaGFtYWRvIHBvciBtZWlvIGRlIHVtIGJvdMOjby5cbiAqXG4gKiBPIG1lbnUgdGFtYsOpbSBwb2RlIHNlciBjb2xhcHNhZG8uIEVzc2Egb3DDp8OjbyDDqSBoYWJpbGl0YWRhIHF1YW5kbyB0b2RvcyBvcyBpdGVucyBkZSBwcmltZWlybyBuw612ZWwgcG9zc3XDrXJlbSDDrWNvbmVzIGUgdGV4dG9zIGN1cnRvcy5cbiAqIFNlIGNvbGFwc2Fkbywgc29tZW50ZSBvcyBpdGVucyBkZSBwcmltZWlybyBuw612ZWwgc2Vyw6NvIGV4aWJpZG9zIGUsIGNhc28gbyBpdGVtIHNlbGVjaW9uYWRvIHBvc3N1YSBzdWItbsOtdmVpcyxcbiAqIGVudMOjbyBvIG1lbnUgYWx0ZXJuYXLDoSBub3ZhbWVudGUgcGFyYSBvIGVzdGFkbyBhYmVydG8uXG4gKlxuICogRXhpc3RlIGEgcG9zc2liaWxpZGFkZSBkZSBjdXN0b21pemFyIGEgbG9nb21hcmNhLCBxdWUgw6kgZXhpYmlkYSBuYSBwYXJ0ZSBzdXBlcmlvciBkbyBjb21wb25lbnRlLlxuICpcbiAqIEUgcGFyYSBhZGljaW9uYXIgdW0gY29udGXDumRvIHBlcnNvbmFsaXphZG8gZW50cmUgYSBsb2dvbWFyY2EgZSBvIGNhbXBvIGRlIGZpbHRybyxcbiAqIGJhc3RhIGFkaWNpb25hciBlc3RlIGNvbnRlw7pkbyBjb20gYSBkaXJldGl2YSBbKipwLW1lbnUtaGVhZGVyLXRlbXBsYXRlKipdKC9kb2N1bWVudGF0aW9uL3BvLW1lbnUtaGVhZGVyLXRlbXBsYXRlKS5cbiAqXG4gKiBDYXNvIHV0aWxpemFyIG8gZmlsdHJvIGRlIG1lbnVzLCDDqSBwb3Nzw612ZWwgcmVhbGl6YXIgYnVzY2FzIGVtIHNlcnZpw6dvLCBhcGVuYXMgaW5mb3JtYW5kbyBhIFVSTCBkbyBzZXJ2acOnbyBvdSBhIGluc3TDom5jaWEgZGVcbiAqIHVtIHNlcnZpw6dvIGN1c3RvbWl6YWRvIGltcGxlbWVudGFuZG8gYSBpbnRlcmZhY2UgYFBvTWVudUZpbHRlcmAuXG4gKlxuICogUGFyYSBvIG1lbnUgZnVuY2lvbmFyIGNvcnJldGFtZW50ZSDDqSBuZWNlc3PDoXJpbyBpbXBvcnRhciBvIGBSb3V0ZXJNb2R1bGVgIGUgYFJvdXRlc2AgZG8gbcOzZHVsbyBwcmluY2lwYWwgZGVcbiAqICBzdWEgYXBsaWNhw6fDo286XG4gKlxuICogYGBgYFxuICogaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuICpcbiAqIC4uLlxuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtcbiAqICAgICBSb3V0ZXJNb2R1bGUsXG4gKiAgICAgUm91dGVzLFxuICogICAgIC4uLlxuICogICAgIFBvTW9kdWxlLFxuICogICAgIC4uLlxuICogICBdLFxuICogICBkZWNsYXJhdGlvbnM6IFtcbiAqICAgICBBcHBDb21wb25lbnRcbiAqICAgXSxcbiAqICAgcHJvdmlkZXJzOiBbXSxcbiAqICAgYm9vdHN0cmFwOiBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUgeyB9XG4gKiBgYGBcbiAqXG4gKiBBbMOpbSBkaXNzbyDDqSBuZWNlc3PDoXJpbyBjcmlhciB1bSBtw7NkdWxvIGNvbmZpZ3VyYW5kbyBhcyByb3RhcyBkYSBhcGxpY2HDp8Ojby5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuICpcbiAqIGltcG9ydCB7IEhlbGxvV29ybGRDb21wb25lbnQgfSBmcm9tICcuL2hlbGxvLXdvcmxkL2hlbGxvLXdvcmxkLmNvbXBvbmVudCc7XG4gKlxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtwYXRoOiAnaGVsbG8td29ybGQnLCBjb21wb25lbnQ6IEhlbGxvV29ybGRDb21wb25lbnR9XG4gKiBdO1xuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yUm9vdChyb3V0ZXMsIHt1c2VIYXNoOiB0cnVlfSldLFxuICogICBleHBvcnRzOiBbUm91dGVyTW9kdWxlXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBSb3V0aW5nTW9kdWxlIHt9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tZW51LWJhc2ljXCIgdGl0bGU9XCJQTyBNZW51IEJhc2ljXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1iYXNpYy9zYW1wbGUtcG8tbWVudS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1iYXNpYy9zYW1wbGUtcG8tbWVudS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tZW51LWxhYnNcIiB0aXRsZT1cIlBPIE1lbnUgTGFic1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtbGFicy9zYW1wbGUtcG8tbWVudS1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tZW51LWxhYnMvc2FtcGxlLXBvLW1lbnUtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tZW51LWh1bWFuLXJlc291cmNlc1wiIHRpdGxlPVwiUE8gTWVudSAtIEh1bWFuIFJlc291cmNlc1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzL3NhbXBsZS1wby1tZW51LWh1bWFuLXJlc291cmNlcy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1odW1hbi1yZXNvdXJjZXMvc2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1odW1hbi1yZXNvdXJjZXMvc2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb01lbnVJdGVtc1NlcnZpY2UsIFBvTWVudVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFBvTWVudUNvbXBvbmVudCBleHRlbmRzIFBvTWVudUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgRG9DaGVjayB7XG4gIEBDb250ZW50Q2hpbGQoUG9NZW51SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIG1lbnVIZWFkZXJUZW1wbGF0ZTogUG9NZW51SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW07XG4gIGNvbGxhcHNlZE1vYmlsZTogYm9vbGVhbjtcbiAgZmlsdGVyTG9hZGluZyA9IGZhbHNlO1xuICBncm91cGVkTWVudUl0ZW06IFBvTWVudUl0ZW07XG4gIGlkID0gdXVpZCgpO1xuICBsaW5rQWN0aXZlOiBzdHJpbmc7XG4gIG1vYmlsZU9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBub0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGltZW91dEZpbHRlcjogYW55O1xuXG4gIHByaXZhdGUgZmlsdGVyaW5nSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZW51SW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZW51UHJldmlvdXMgPSBudWxsO1xuICBwcml2YXRlIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgaXRlbVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJvdXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBtZW51SXRlbXNTZXJ2aWNlOiBQb01lbnVJdGVtc1NlcnZpY2UsXG4gICAgbWVudUdsb2JhbFNlcnZpY2U6IFBvTWVudUdsb2JhbFNlcnZpY2UsXG4gICAgbWVudVNlcnZpY2U6IFBvTWVudVNlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICBzdXBlcihtZW51R2xvYmFsU2VydmljZSwgbWVudVNlcnZpY2UsIGxhbmd1YWdlU2VydmljZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0FjdGl2ZUl0ZW1NZW51U3ViTWVudSgpIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVNZW51SXRlbVsnbGV2ZWwnXSA+IHRoaXMuZ3JvdXBlZE1lbnVJdGVtWydsZXZlbCddO1xuICB9XG5cbiAgZ2V0IGVuYWJsZUNvbGxhcHNlKCkge1xuICAgIHJldHVybiB0aGlzLmlzQ29sbGFwc2VkICYmICF0aGlzLmNvbGxhcHNlZE1vYmlsZTtcbiAgfVxuXG4gIGdldCBlbmFibGVDb2xsYXBzZUJ1dHRvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0NvbGxhcHNlTWVudSAmJiAhdGhpcy5jb2xsYXBzZWQgJiYgIXRoaXMubW9iaWxlT3BlbmVkO1xuICB9XG5cbiAgZ2V0IGhhc0Zvb3RlcigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVDb2xsYXBzZUJ1dHRvbiB8fCB0aGlzLmVuYWJsZUNvbGxhcHNlO1xuICB9XG5cbiAgZ2V0IGlzQ29sbGFwc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmFsbG93Q29sbGFwc2VNZW51ICYmIHRoaXMuY29sbGFwc2VkO1xuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICh0aGlzLmZpbHRlcmluZ0l0ZW1zICYmIHRoaXMuZmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWVudUN1cnJlbnQgPSB0aGlzLnN0cmluZ2lmeSh0aGlzLm1lbnVzKTtcblxuICAgIGlmICh0aGlzLm1lbnVQcmV2aW91cyAhPT0gbWVudUN1cnJlbnQgfHwgIXRoaXMubWVudUluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1lbnUoKTtcbiAgICAgIHRoaXMudmFsaWRhdGVDb2xsYXBzZUNsYXNzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5pdGVtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMucmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVHbG9iYWxTZXJ2aWNlLnNlbmRSZW1vdmVkQXBwbGljYXRpb25NZW51KHRoaXMuaWQpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpYmVUb01lbnVJdGVtKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JvdXRlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5tZW51R2xvYmFsU2VydmljZS5zZW5kQXBwbGljYXRpb25NZW51KHRoaXMpO1xuICB9XG5cbiAgYWN0aXZhdGVNZW51QnlVcmwodXJsUGF0aDogc3RyaW5nLCBtZW51czogQXJyYXk8UG9NZW51SXRlbT4pIHtcbiAgICBpZiAobWVudXMpIHtcbiAgICAgIGNvbnN0IHVybFBhdGhXaXRob3V0TGFzdEZyYWdtZW50ID0gdXJsUGF0aC5zdWJzdHIoMCwgdXJsUGF0aC5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgIHJldHVybiBtZW51cy5zb21lKG1lbnUgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRNZW51TGluayA9IGdldEZvcm1hdHRlZExpbmsobWVudS5saW5rKTtcbiAgICAgICAgY29uc3QgbWVudUxpbmtQYXRoID0gYCR7dXJsUGF0aFdpdGhvdXRMYXN0RnJhZ21lbnR9JHtmb3JtYXR0ZWRNZW51TGluay5zdWJzdHIoXG4gICAgICAgICAgZm9ybWF0dGVkTWVudUxpbmsubGFzdEluZGV4T2YoJy8nKVxuICAgICAgICApfWA7XG5cbiAgICAgICAgaWYgKG1lbnVMaW5rUGF0aCA9PT0gdXJsUGF0aCAmJiBtZW51TGlua1BhdGggPT09IGZvcm1hdHRlZE1lbnVMaW5rKSB7XG4gICAgICAgICAgdGhpcy5saW5rQWN0aXZlID0gZm9ybWF0dGVkTWVudUxpbms7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKG1lbnUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlTWVudUJ5VXJsKHVybFBhdGgsIG1lbnUuc3ViSXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGVja0FjdGl2ZU1lbnVCeVVybCh1cmxQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGlua0FjdGl2ZSB8fCB0aGlzLmxpbmtBY3RpdmUgIT09IHVybFBhdGgpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51QnlVcmwodXJsUGF0aCwgdGhpcy5tZW51cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIDxhIGlkPVwiY29sYXBzZU1ldGhvZFwiPjwvYT5cbiAgICpcbiAgICogKk3DqXRvZG8gcGFyYSBjb2xhcHNhciAocmV0cmFpcikgbyBtZW51LlxuICAgKi9cbiAgY29sbGFwc2UoKSB7XG4gICAgdGhpcy52YWxpZGF0ZVRvZ2dsZU1lbnUodHJ1ZSk7XG4gIH1cblxuICBkZWJvdW5jZUZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRGaWx0ZXIpO1xuXG4gICAgdGhpcy50aW1lb3V0RmlsdGVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZpbHRlclByb2Nlc3MoZmlsdGVyKTtcbiAgICB9LCBwb01lbnVEZWJvdW5jZVRpbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIDxhIGlkPVwiZXhwYW5kTWV0aG9kXCI+PC9hPlxuICAgKlxuICAgKiAqTcOpdG9kbyBwYXJhIGV4cGFuZGlyIChhdW1lbnRhcikgbyBtZW51LlxuICAgKi9cbiAgZXhwYW5kKCkge1xuICAgIHRoaXMudmFsaWRhdGVUb2dnbGVNZW51KGZhbHNlKTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvTWVudUl0ZW0oKSB7XG4gICAgdGhpcy5pdGVtU3Vic2NyaXB0aW9uID0gdGhpcy5tZW51SXRlbXNTZXJ2aWNlLnJlY2VpdmVGcm9tQ2hpbGRNZW51Q2xpY2tlZCgpLnN1YnNjcmliZSgobWVudTogUG9NZW51SXRlbSkgPT4ge1xuICAgICAgdGhpcy5jbGlja01lbnVJdGVtKG1lbnUpO1xuICAgIH0pO1xuICB9XG5cbiAgc3Vic2NyaWJlVG9Sb3V0ZSgpIHtcbiAgICB0aGlzLnJvdXRlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHwgdmFsIGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgICAgICBjb25zdCB1cmxSb3V0ZXIgPSB0aGlzLmNoZWNraW5nUm91dGVyQ2hpbGRyZW5GcmFnbWVudHMoKTtcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZU1lbnVCeVVybCh1cmxSb3V0ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIDxhIGlkPVwidG9nZ2xlTWV0aG9kXCI+PC9hPlxuICAgKiAqTcOpdG9kbyBxdWUgY29sYXBzYSBlIGV4cGFuZGUgbyBtZW51IGFsdGVybmFkYW1lbnRlLlxuICAgKlxuICAgKiA+ICpPcyBtw6l0b2RvcyBhcGVuYXMgdsOjbyBjb2xhcHNhci9leHBhbmRpciBvIG1lbnUgc2U6XG4gICAqICAtIFRvZG9zIG9zIGl0ZW5zIGRlIG1lbnUgdGl2ZXJlbSB2YWxvciBuYXMgcHJvcHJpZWRhZGVzIGBpY29uYCBlIGBzaG9ydExhYmVsYC5cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLnZhbGlkYXRlVG9nZ2xlTWVudSghdGhpcy5jb2xsYXBzZWQpO1xuICB9XG5cbiAgdG9nZ2xlTWVudU1vYmlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vYmlsZU9wZW5lZCA9ICF0aGlzLm1vYmlsZU9wZW5lZDtcbiAgICB0aGlzLmNvbGxhcHNlZE1vYmlsZSA9IHRoaXMuY29sbGFwc2VkICYmIHRoaXMubW9iaWxlT3BlbmVkO1xuXG4gICAgdGhpcy52YWxpZGF0ZUNvbGxhcHNlQ2xhc3ModGhpcy5jb2xsYXBzZWRNb2JpbGUpO1xuXG4gICAgaWYgKGlzTW9iaWxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb2JpbGVPcGVuZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlUmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tpbmdSb3V0ZXJDaGlsZHJlbkZyYWdtZW50cygpIHtcbiAgICBjb25zdCBjaGlsZHJlblByaW1hcnkgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpLnJvb3QuY2hpbGRyZW5bJ3ByaW1hcnknXTtcblxuICAgIHJldHVybiBjaGlsZHJlblByaW1hcnkgPyBgLyR7Y2hpbGRyZW5QcmltYXJ5LnNlZ21lbnRzLm1hcChpdCA9PiBpdC5wYXRoKS5qb2luKCcvJyl9YCA6ICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlQ29sbGFwc2VDbGFzcyhjb2xsYXBzZWRNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xuICAgIHRoaXMucmVuZGVyZXJbdGhpcy5pc0NvbGxhcHNlZCAmJiAhY29sbGFwc2VkTW9iaWxlID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHdyYXBwZXIsICdwby1jb2xsYXBzZWQtbWVudScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZUNvbGxhcHNlU3ViTWVudUl0ZW0oKSB7XG4gICAgdGhpcy5jbGVhckdyb3VwTWVudUlmRmlyc3RMZXZlbCh0aGlzLmFjdGl2ZU1lbnVJdGVtKTtcblxuICAgIGlmICghdGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5hY3RpdmVNZW51SXRlbVsnbGV2ZWwnXSA+IHBvTWVudVJvb3RMZXZlbCAmJiB0aGlzLmlzQWN0aXZlSXRlbU1lbnVTdWJNZW51KSB7XG4gICAgICB0aGlzLm9wZW5QYXJlbnRNZW51KHRoaXMuYWN0aXZlTWVudUl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVNZW51SXRlbShtZW51OiBQb01lbnVJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVNZW51SXRlbSA9IG1lbnU7XG4gICAgdGhpcy5saW5rQWN0aXZlID0gbWVudS5saW5rO1xuICAgIGlmICh0aGlzLmFjdGl2ZU1lbnVJdGVtWydsZXZlbCddID4gcG9NZW51Um9vdExldmVsKSB7XG4gICAgICB0aGlzLm9wZW5QYXJlbnRNZW51KHRoaXMuYWN0aXZlTWVudUl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyb3VwZWRNZW51SXRlbSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMubWVudUl0ZW1zU2VydmljZS5zZW5kVG9DaGlsZE1lbnVDbGlja2VkKHtcbiAgICAgIGFjdGl2ZTogdGhpcy5hY3RpdmVNZW51SXRlbSxcbiAgICAgIGdyb3VwZWQ6IHRoaXMuZ3JvdXBlZE1lbnVJdGVtLFxuICAgICAgYWN0aXZhdGVkQnlSb3V0ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVTdWJNZW51cyhtZW51czogQXJyYXk8UG9NZW51SXRlbT4pIHtcbiAgICByZXR1cm4gbWVudXMuZXZlcnkobWVudSA9PiBtZW51WydsZXZlbCddID4gcG9NZW51Um9vdExldmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJHcm91cE1lbnVJZkZpcnN0TGV2ZWwoYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW0pIHtcbiAgICBpZiAoYWN0aXZlTWVudUl0ZW1bJ2xldmVsJ10gPT09IHBvTWVudVJvb3RMZXZlbCkge1xuICAgICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja01lbnVJdGVtKG1lbnU6IFBvTWVudUl0ZW0pIHtcbiAgICBpZiAobWVudS5hY3Rpb24pIHtcbiAgICAgIHRoaXMuZXhlY3V0ZU1lbnVBY3Rpb24obWVudSk7XG4gICAgfVxuXG4gICAgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ2V4dGVybmFsTGluaycpIHtcbiAgICAgIG9wZW5FeHRlcm5hbExpbmsobWVudS5saW5rKTtcbiAgICB9IGVsc2UgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ2ludGVybmFsTGluaycpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShtZW51KTtcbiAgICB9IGVsc2UgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ3N1Ykl0ZW1zJykge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyaW5nSXRlbXMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdyb3VwTWVudUl0ZW0obWVudSk7XG4gICAgfVxuXG4gICAgaWYgKG1lbnVbJ3R5cGUnXSAhPT0gJ3N1Ykl0ZW1zJykge1xuICAgICAgdGhpcy5tb2JpbGVPcGVuZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb01lbnVJdGVtRmlsdGVyZWQobWVudUl0ZW06IGFueSA9IHsgbGFiZWw6ICcnLCBsaW5rOiAnJyB9KTogUG9NZW51SXRlbUZpbHRlcmVkIHtcbiAgICBjb25zdCB7IGxhYmVsLCBsaW5rIH0gPSBtZW51SXRlbTtcblxuICAgIGNvbnN0IG1lbnVJdGVtRmlsdGVyZWQ6IFBvTWVudUl0ZW1GaWx0ZXJlZCA9IHsgbGFiZWwsIGxpbmsgfTtcblxuICAgIHRoaXMuc2V0TWVudUl0ZW1Qcm9wZXJ0aWVzKG1lbnVJdGVtRmlsdGVyZWQpO1xuXG4gICAgcmV0dXJuIG1lbnVJdGVtRmlsdGVyZWQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc2l6ZUxpc3RlbmVyKCkge1xuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMudG9nZ2xlUmVzaXplKCk7XG4gICAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVNZW51QWN0aW9uKG1lbnU6IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBtZW51LmFjdGlvbihtZW51KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVySXRlbXMoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0cmltRmlsdGVyID0gZmlsdGVyICYmIGZpbHRlci50cmltKCk7XG5cbiAgICBpZiAodHJpbUZpbHRlcikge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gW107XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2VcbiAgICAgICAgPyBhd2FpdCB0aGlzLmZpbHRlck9uU2VydmljZSh0cmltRmlsdGVyKVxuICAgICAgICA6IHRoaXMuZmlsdGVyTG9jYWxJdGVtcyh0cmltRmlsdGVyKTtcbiAgICAgIHRoaXMuZmlsdGVyaW5nSXRlbXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbLi4udGhpcy5tZW51c107XG4gICAgICB0aGlzLmZpbHRlcmluZ0l0ZW1zID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJMb2NhbEl0ZW1zKGZpbHRlcjogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IFtdO1xuXG4gICAgdGhpcy5maW5kSXRlbXModGhpcy5tZW51cywgZmlsdGVyLnRvTG93ZXJDYXNlKCksIGZpbHRlcmVkSXRlbXMpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlclByb2Nlc3MoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbHRlckxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5maWx0ZXJJdGVtcyhmaWx0ZXIpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc2hvd05vRGF0YSgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXNTZXJ2aWNlLnNlbmRUb0NoaWxkTWVudUNsaWNrZWQoeyBhY3RpdmU6IHRoaXMuYWN0aXZlTWVudUl0ZW0sIGdyb3VwZWQ6IHRoaXMuZ3JvdXBlZE1lbnVJdGVtIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyT25TZXJ2aWNlKHNlYXJjaDogc3RyaW5nID0gJycpIHtcbiAgICBpZiAoc2VhcmNoLmxlbmd0aCA+PSBwb01lbnVNaW5MZW5ndGgpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2VcbiAgICAgICAgLmdldEZpbHRlcmVkRGF0YShzZWFyY2gsIHRoaXMucGFyYW1zKVxuICAgICAgICAucGlwZShtYXAobWVudUl0ZW1zRmlsdGVyZWQgPT4gbWVudUl0ZW1zRmlsdGVyZWQubWFwKG1lbnVJdGVtID0+IHRoaXMuY29udmVydFRvTWVudUl0ZW1GaWx0ZXJlZChtZW51SXRlbSkpKSlcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZEl0ZW1zO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZEl0ZW1zKG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPiwgZmlsdGVyOiBzdHJpbmcsIGZpbHRlcmVkSXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICBtZW51cy5mb3JFYWNoKG1lbnUgPT4ge1xuICAgICAgY29uc3QgaGFzQWN0aW9uID0gbWVudS5hY3Rpb24gfHwgbWVudS5saW5rO1xuICAgICAgY29uc3QgbGFiZWxIYXNGaWx0ZXIgPSBtZW51LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKTtcblxuICAgICAgaWYgKGxhYmVsSGFzRmlsdGVyICYmIGhhc0FjdGlvbikge1xuICAgICAgICBjb25zdCBuZXdNZW51ID0geyAuLi5tZW51IH07XG5cbiAgICAgICAgaWYgKG5ld01lbnUuc3ViSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgIGRlbGV0ZSBuZXdNZW51LnN1Ykl0ZW1zO1xuICAgICAgICAgIG5ld01lbnVbJ3R5cGUnXSA9IHRoaXMuc2V0TWVudVR5cGUobmV3TWVudSk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJlZEl0ZW1zLnB1c2gobmV3TWVudSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZW51LnN1Ykl0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmluZEl0ZW1zKG1lbnUuc3ViSXRlbXMsIGZpbHRlciwgZmlsdGVyZWRJdGVtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnQobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+LCBtZW51SXRlbTogUG9NZW51SXRlbSk6IFBvTWVudUl0ZW0ge1xuICAgIGNvbnN0IGdldFBhcmVudCA9IGZ1bmN0aW9uIChtZW51SXRlbXM6IEFycmF5PFBvTWVudUl0ZW0+LCBpZCkge1xuICAgICAgaWYgKG1lbnVJdGVtcykge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWVudUl0ZW1zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IG1lbnUgPSBtZW51SXRlbXNbaW5kZXhdO1xuICAgICAgICAgIGlmIChtZW51LnN1Ykl0ZW1zICYmIG1lbnUuc3ViSXRlbXMuZmluZChzdWJJdGVtID0+IHN1Ykl0ZW1bJ2lkJ10gPT09IGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZvdW5kID0gZ2V0UGFyZW50KG1lbnUuc3ViSXRlbXMsIGlkKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBnZXRQYXJlbnQobWVudXMsIG1lbnVJdGVtWydpZCddKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFJvb3RQYXJlbnQobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+LCBtZW51OiBQb01lbnVJdGVtKTogUG9NZW51SXRlbSB7XG4gICAgY29uc3QgZmluZFBhcmVudCA9IHRoaXMuZmluZFBhcmVudDtcblxuICAgIGNvbnN0IGdldFJvb3RQYXJlbnQgPSBmdW5jdGlvbiAobWVudUl0ZW1zOiBBcnJheTxQb01lbnVJdGVtPiwgbWVudUl0ZW0pOiBQb01lbnVJdGVtIHtcbiAgICAgIGxldCBwYXJlbnQgPSBmaW5kUGFyZW50KG1lbnVJdGVtcywgbWVudUl0ZW0pO1xuXG4gICAgICBpZiAocGFyZW50WydsZXZlbCddICE9PSBwb01lbnVSb290TGV2ZWwpIHtcbiAgICAgICAgcGFyZW50ID0gZ2V0Um9vdFBhcmVudChtZW51SXRlbXMsIHBhcmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH07XG4gICAgcmV0dXJuIGdldFJvb3RQYXJlbnQobWVudXMsIG1lbnUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVNZW51UGFyZW50KG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPiwgYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW0sIGdyb3VwZWRNZW51SXRlbTogUG9NZW51SXRlbSkge1xuICAgIGlmICh0aGlzLmFyZVN1Yk1lbnVzKFtncm91cGVkTWVudUl0ZW0sIGFjdGl2ZU1lbnVJdGVtXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRSb290UGFyZW50KG1lbnVzLCBhY3RpdmVNZW51SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBncm91cE1lbnVJdGVtKG1lbnU6IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMudG9nZ2xlTWVudUNvbGxhcHNlKCk7XG4gICAgfVxuXG4gICAgbWVudVsnaXNPcGVuZWQnXSA9ICFtZW51Wydpc09wZW5lZCddO1xuICAgIHRoaXMuZ3JvdXBlZE1lbnVJdGVtID0gbWVudTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuYWN0aXZlTWVudUl0ZW0gJiZcbiAgICAgIG1lbnVbJ2lzT3BlbmVkJ10gJiZcbiAgICAgIHRoaXMuaXNBY3RpdmVJdGVtTWVudVN1Yk1lbnUgJiZcbiAgICAgIHRoaXMuaXNSb290TWVudUVxdWFsR3JvdXBlZE1lbnUodGhpcy5tZW51cywgdGhpcy5hY3RpdmVNZW51SXRlbSwgbWVudSlcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbSh0aGlzLmFjdGl2ZU1lbnVJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVJdGVtc1NlcnZpY2Uuc2VuZFRvQ2hpbGRNZW51Q2xpY2tlZCh7IGFjdGl2ZTogdGhpcy5hY3RpdmVNZW51SXRlbSwgZ3JvdXBlZDogdGhpcy5ncm91cGVkTWVudUl0ZW0gfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUm9vdE1lbnVFcXVhbEdyb3VwZWRNZW51KFxuICAgIG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPixcbiAgICBhY3RpdmVNZW51SXRlbTogUG9NZW51SXRlbSxcbiAgICBncm91cGVkTWVudUl0ZW06IFBvTWVudUl0ZW1cbiAgKSB7XG4gICAgY29uc3QgYWN0aXZlTWVudVJvb3RQYXJlbnQgPSB0aGlzLmZpbmRSb290UGFyZW50KG1lbnVzLCBhY3RpdmVNZW51SXRlbSk7XG4gICAgcmV0dXJuIGFjdGl2ZU1lbnVSb290UGFyZW50WydpZCddID09PSBncm91cGVkTWVudUl0ZW1bJ2lkJ107XG4gIH1cblxuICBwcml2YXRlIG9wZW5QYXJlbnRNZW51KGNoaWxkTWVudTogUG9NZW51SXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudCh0aGlzLm1lbnVzLCBjaGlsZE1lbnUpO1xuICAgIHBhcmVudFsnaXNPcGVuZWQnXSA9IHRydWU7XG4gICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPSBwYXJlbnQ7XG4gIH1cblxuICBwcml2YXRlIHNob3dOb0RhdGEoKSB7XG4gICAgdGhpcy5ub0RhdGEgPSB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+KTogc3RyaW5nIHtcbiAgICAvLyBuw6NvIGZheiBvIHN0cmluZ2lmeSBkYSBwcm9wcmllZGFkZSBpY29uLCBwb2lzIHBvZGUgY29udGVyIG9iamV0byBjb21wbGV4byBlIGRpc3BhcmFyIHVtIGVycm8uXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMubWVudXMsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnaWNvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVHcm91cGVkTWVudUl0ZW0oKSB7XG4gICAgdGhpcy5ncm91cGVkTWVudUl0ZW1bJ2lzT3BlbmVkJ10gPSAhdGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5hbGxvd0NvbGxhcHNlTWVudTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlTWVudUNvbGxhcHNlKGNvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5jb2xsYXBzZWQgPSBjb2xsYXBzZWQ7XG5cbiAgICBpZiAodGhpcy5ncm91cGVkTWVudUl0ZW0gJiYgdGhpcy5hY3RpdmVNZW51SXRlbSkge1xuICAgICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPVxuICAgICAgICB0aGlzLmdldEFjdGl2ZU1lbnVQYXJlbnQodGhpcy5tZW51cywgdGhpcy5hY3RpdmVNZW51SXRlbSwgdGhpcy5ncm91cGVkTWVudUl0ZW0pIHx8IHRoaXMuZ3JvdXBlZE1lbnVJdGVtO1xuICAgICAgdGhpcy50b2dnbGVHcm91cGVkTWVudUl0ZW0oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVNZW51SXRlbSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUNvbGxhcHNlU3ViTWVudUl0ZW0oKTtcbiAgICAgIHRoaXMubWVudUl0ZW1zU2VydmljZS5zZW5kVG9DaGlsZE1lbnVDbGlja2VkKHtcbiAgICAgICAgYWN0aXZlOiB0aGlzLmFjdGl2ZU1lbnVJdGVtLFxuICAgICAgICBncm91cGVkOiB0aGlzLmdyb3VwZWRNZW51SXRlbSxcbiAgICAgICAgYWN0aXZhdGVkQnlSb3V0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNZW51KCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVJlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5tb2JpbGVPcGVuZWQpIHtcbiAgICAgIHRoaXMubW9iaWxlT3BlbmVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbGxhcHNlZE1vYmlsZSA9IGZhbHNlO1xuICAgICAgdGhpcy52YWxpZGF0ZUNvbGxhcHNlQ2xhc3ModGhpcy5jb2xsYXBzZWRNb2JpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVUb2dnbGVNZW51KGNvbGxhcHNlZDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5hbGxvd0NvbGxhcHNlTWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlTWVudUNvbGxhcHNlKGNvbGxhcHNlZCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnUoKSB7XG4gICAgdGhpcy5tZW51SW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0TWVudUV4dHJhUHJvcGVydGllcygpO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLm1lbnVzXTtcbiAgICB0aGlzLm1lbnVQcmV2aW91cyA9IHRoaXMuc3RyaW5naWZ5KHRoaXMubWVudXMpO1xuICAgIHRoaXMudmFsaWRhdGVNZW51cyh0aGlzLm1lbnVzKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIm1vYmlsZU9wZW5lZFwiIGNsYXNzPVwicG8tbWVudS1vdmVybGF5XCIgKGNsaWNrKT1cInRvZ2dsZU1lbnVNb2JpbGUoKVwiPjwvZGl2PlxuPG5hdj5cbiAgPGRpdiBjbGFzcz1cInBvLW1lbnUtbW9iaWxlIHBvLWNsaWNrYWJsZVwiIChjbGljayk9XCJ0b2dnbGVNZW51TW9iaWxlKClcIj5cbiAgICA8c3BhbiBjbGFzcz1cInBvLWljb24gcG8taWNvbi1tZW51XCI+PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicG8tbWVudVwiIFtuZ0NsYXNzXT1cInsgJ3BvLW1lbnUtYW5pbWF0aW9uJzogbW9iaWxlT3BlbmVkIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tbWVudS1oZWFkZXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJsb2dvIHx8IChzaG9ydExvZ28gJiYgZW5hYmxlQ29sbGFwc2UpXCIgY2xhc3M9XCJwby1tZW51LWhlYWRlci1jb250YWluZXItbG9nb1wiPlxuICAgICAgICA8YSBocmVmPVwiLi9cIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBbbmdDbGFzc109XCJlbmFibGVDb2xsYXBzZSA/ICdwby1tZW51LXNob3J0LWxvZ28nIDogJ3BvLW1lbnUtbG9nbydcIlxuICAgICAgICAgICAgW3NyY109XCJlbmFibGVDb2xsYXBzZSA/IHNob3J0TG9nbyB8fCBsb2dvIDogbG9nb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCIhZW5hYmxlQ29sbGFwc2UgJiYgbWVudUhlYWRlclRlbXBsYXRlXCIgY2xhc3M9XCJwby1tZW51LWhlYWRlci10ZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUhlYWRlclRlbXBsYXRlLnRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHBvLW1lbnUtZmlsdGVyICpuZ0lmPVwiZmlsdGVyICYmICFlbmFibGVDb2xsYXBzZVwiIFtwLWxvYWRpbmddPVwiZmlsdGVyTG9hZGluZ1wiIChwLWZpbHRlcik9XCJkZWJvdW5jZUZpbHRlcigkZXZlbnQpXCI+XG4gICAgICA8L3BvLW1lbnUtZmlsdGVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtYm9keVwiPlxuICAgICAgPCEtLSBJbm5lciBlIG91dGVyIHBhcmEgZXNjb25kZXIgc2Nyb2xsIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtb3V0ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtaW5uZXJcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJwby1tZW51LWl0ZW0td3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtaXRlbS1maXJzdFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG8tbWVudS1pY29uLWNvbnRhaW5lciBwby1tZW51LWl0ZW0tbm8tZGF0YVwiPlxuICAgICAgICAgICAgICAgIDxwby1pY29uIGNsYXNzPVwicG8taWNvbiBwby1pY29uLWluZm8gcG8tbWVudS1pY29uLWl0ZW0gcG8tbGctMlwiPjwvcG8taWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG8tbGctMTAgcG8tbWVudS1pY29uLWxhYmVsXCI+e3sgbGl0ZXJhbHMuaXRlbU5vdEZvdW5kIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtZW51IG9mIGZpbHRlcmVkSXRlbXM7IGxldCBtZW51SW5kZXggPSBpbmRleFwiIGNsYXNzPVwicG8tbWVudS1pdGVtLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxwby1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgW2NsYXNzLnBvLW1lbnUtaXRlbS1maXJzdF09XCJtZW51SW5kZXggPT09IDBcIlxuICAgICAgICAgICAgICBbcC1hY3Rpb25dPVwibWVudS5hY3Rpb25cIlxuICAgICAgICAgICAgICBbcC1iYWRnZS1hbGVydF09XCJtZW51LmJhZGdlQWxlcnRcIlxuICAgICAgICAgICAgICBbcC1iYWRnZS1jb2xvcl09XCJtZW51LmJhZGdlID8gbWVudS5iYWRnZS5jb2xvciA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIFtwLWJhZGdlLXZhbHVlXT1cIm1lbnUuYmFkZ2UgPyBtZW51LmJhZGdlLnZhbHVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgW3AtY29sbGFwc2VkLW1lbnVdPVwiZW5hYmxlQ29sbGFwc2VcIlxuICAgICAgICAgICAgICBbcC1pY29uXT1cImFsbG93SWNvbnMgPyBtZW51Lmljb24gOiBudWxsXCJcbiAgICAgICAgICAgICAgW3AtaWRdPVwibWVudS5pZFwiXG4gICAgICAgICAgICAgIFtwLWxhYmVsXT1cIm1lbnUubGFiZWxcIlxuICAgICAgICAgICAgICBbcC1sZXZlbF09XCJtZW51LmxldmVsXCJcbiAgICAgICAgICAgICAgW3AtbGlua109XCJtZW51LmxpbmtcIlxuICAgICAgICAgICAgICBbcC1zaG9ydC1sYWJlbF09XCJtZW51LnNob3J0TGFiZWxcIlxuICAgICAgICAgICAgICBbcC1zdWItaXRlbXNdPVwibWVudS5zdWJJdGVtc1wiXG4gICAgICAgICAgICAgIFtwLXR5cGVdPVwibWVudS50eXBlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcG8tbWVudS1pdGVtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImhhc0Zvb3RlclwiIGNsYXNzPVwicG8tbWVudS1mb290ZXJcIj5cbiAgICAgIDxhIGNsYXNzPVwicG8tbWVudS1jb2xsYXBzZS1idXR0b24taWNvbiBwby1jbGlja2FibGVcIiAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInBvLWljb25cIlxuICAgICAgICAgIFtjbGFzcy5wby1pY29uLW1lbnUtY2xvc2VdPVwiZW5hYmxlQ29sbGFwc2VCdXR0b25cIlxuICAgICAgICAgIFtjbGFzcy5wby1pY29uLW1lbnUtb3Blbl09XCJlbmFibGVDb2xsYXBzZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmF2PlxuIl19
|
|
597
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tbWVudS9wby1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1tZW51L3BvLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBTWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBRzVHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ3pCM0QsK0JBQStFO0lBQTdCLHlKQUFTLHlCQUFrQixJQUFDO0lBQUMsaUJBQU07OztJQVEvRSwrQkFBeUYsWUFBQTtJQUVyRiwwQkFJRTtJQUNKLGlCQUFJLEVBQUE7OztJQUpBLGVBQWtFO0lBQWxFLHVGQUFrRSxnR0FBQSx1QkFBQTs7O0lBUXRFLHdCQUFnRjs7O0lBRGxGLCtCQUFtRjtJQUNqRix5RkFBZ0Y7SUFDbEYsaUJBQU07OztJQURXLGVBQWdEO0lBQWhELHdFQUFnRDs7OztJQUdqRSwwQ0FB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LHNCQUFrQixJQUFDO1FBQ25FLDBCQUEwQztRQUM1QyxpQkFBTTtRQUVOLDhCQUF1RSxhQUFBO1FBRW5FLGdFQVFNO1FBRU4sZ0VBRU07UUFFTixzRkFDaUI7UUFDbkIsaUJBQU07UUFFTiw4QkFBMEIsY0FBQSxlQUFBO1FBSXBCLG1FQU9NO1FBRU4sb0VBa0JNO1FBQ1IsaUJBQU0sRUFBQSxFQUFBO1FBSVYsbUVBU007UUFDUixpQkFBTSxFQUFBOztRQXhFRix1Q0FBa0I7UUFNRCxlQUFpRDtRQUFqRCxzRUFBaUQ7UUFFNUQsZUFBMkM7UUFBM0Msc0VBQTJDO1FBVTNDLGVBQTJDO1FBQTNDLG9FQUEyQztRQUloQyxlQUErQjtRQUEvQix3REFBK0I7UUFRdEMsZUFBWTtRQUFaLGlDQUFZO1FBU0ksZUFBa0I7UUFBbEIsMkNBQWtCO1FBdUJ4QyxlQUFlO1FBQWYsb0NBQWU7O3VGRHlEWixlQUFlO2NBTDNCLFNBQVM7MkJBQ0UsU0FBUyxhQUVSLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO3lRQUdpQixrQkFBa0I7a0JBQWhGLFlBQVk7bUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZ2V0Rm9ybWF0dGVkTGluaywgaXNNb2JpbGUsIG9wZW5FeHRlcm5hbExpbmssIHV1aWQgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgUG9NZW51QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tbWVudS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb01lbnVIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tbWVudS1oZWFkZXItdGVtcGxhdGUvcG8tbWVudS1oZWFkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvTWVudUl0ZW0gfSBmcm9tICcuL3BvLW1lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9NZW51SXRlbUZpbHRlcmVkIH0gZnJvbSAnLi9wby1tZW51LWl0ZW0vcG8tbWVudS1pdGVtLWZpbHRlcmVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb01lbnVJdGVtc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLW1lbnUtaXRlbXMuc2VydmljZSc7XG5pbXBvcnQgeyBQb01lbnVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wby1tZW51LWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTWVudVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLW1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5jb25zdCBwb01lbnVEZWJvdW5jZVRpbWUgPSA0MDA7XG5jb25zdCBwb01lbnVNaW5MZW5ndGggPSAzO1xuY29uc3QgcG9NZW51Um9vdExldmVsID0gMTtcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9NZW51QmFzZUNvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEFwYXJlY2UgY29tcGxldG8gZW0gdGVsYXMgY29tIGxhcmd1cmEgbWFpb3IgcXVlIDEyMDBweCwgY2FzbyBjb250csOhcmlvIG8gbWVudSDDqSBlc2NvbmRpZG8gZSBjaGFtYWRvIHBvciBtZWlvIGRlIHVtIGJvdMOjby5cbiAqXG4gKiBPIG1lbnUgdGFtYsOpbSBwb2RlIHNlciBjb2xhcHNhZG8uIEVzc2Egb3DDp8OjbyDDqSBoYWJpbGl0YWRhIHF1YW5kbyB0b2RvcyBvcyBpdGVucyBkZSBwcmltZWlybyBuw612ZWwgcG9zc3XDrXJlbSDDrWNvbmVzIGUgdGV4dG9zIGN1cnRvcy5cbiAqIFNlIGNvbGFwc2Fkbywgc29tZW50ZSBvcyBpdGVucyBkZSBwcmltZWlybyBuw612ZWwgc2Vyw6NvIGV4aWJpZG9zIGUsIGNhc28gbyBpdGVtIHNlbGVjaW9uYWRvIHBvc3N1YSBzdWItbsOtdmVpcyxcbiAqIGVudMOjbyBvIG1lbnUgYWx0ZXJuYXLDoSBub3ZhbWVudGUgcGFyYSBvIGVzdGFkbyBhYmVydG8uXG4gKlxuICogRXhpc3RlIGEgcG9zc2liaWxpZGFkZSBkZSBjdXN0b21pemFyIGEgbG9nb21hcmNhLCBxdWUgw6kgZXhpYmlkYSBuYSBwYXJ0ZSBzdXBlcmlvciBkbyBjb21wb25lbnRlLlxuICpcbiAqIEUgcGFyYSBhZGljaW9uYXIgdW0gY29udGXDumRvIHBlcnNvbmFsaXphZG8gZW50cmUgYSBsb2dvbWFyY2EgZSBvIGNhbXBvIGRlIGZpbHRybyxcbiAqIGJhc3RhIGFkaWNpb25hciBlc3RlIGNvbnRlw7pkbyBjb20gYSBkaXJldGl2YSBbKipwLW1lbnUtaGVhZGVyLXRlbXBsYXRlKipdKC9kb2N1bWVudGF0aW9uL3BvLW1lbnUtaGVhZGVyLXRlbXBsYXRlKS5cbiAqXG4gKiBDYXNvIHV0aWxpemFyIG8gZmlsdHJvIGRlIG1lbnVzLCDDqSBwb3Nzw612ZWwgcmVhbGl6YXIgYnVzY2FzIGVtIHNlcnZpw6dvLCBhcGVuYXMgaW5mb3JtYW5kbyBhIFVSTCBkbyBzZXJ2acOnbyBvdSBhIGluc3TDom5jaWEgZGVcbiAqIHVtIHNlcnZpw6dvIGN1c3RvbWl6YWRvIGltcGxlbWVudGFuZG8gYSBpbnRlcmZhY2UgYFBvTWVudUZpbHRlcmAuXG4gKlxuICogUGFyYSBvIG1lbnUgZnVuY2lvbmFyIGNvcnJldGFtZW50ZSDDqSBuZWNlc3PDoXJpbyBpbXBvcnRhciBvIGBSb3V0ZXJNb2R1bGVgIGUgYFJvdXRlc2AgZG8gbcOzZHVsbyBwcmluY2lwYWwgZGVcbiAqICBzdWEgYXBsaWNhw6fDo286XG4gKlxuICogYGBgYFxuICogaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuICpcbiAqIC4uLlxuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtcbiAqICAgICBSb3V0ZXJNb2R1bGUsXG4gKiAgICAgUm91dGVzLFxuICogICAgIC4uLlxuICogICAgIFBvTW9kdWxlLFxuICogICAgIC4uLlxuICogICBdLFxuICogICBkZWNsYXJhdGlvbnM6IFtcbiAqICAgICBBcHBDb21wb25lbnRcbiAqICAgXSxcbiAqICAgcHJvdmlkZXJzOiBbXSxcbiAqICAgYm9vdHN0cmFwOiBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUgeyB9XG4gKiBgYGBcbiAqXG4gKiBBbMOpbSBkaXNzbyDDqSBuZWNlc3PDoXJpbyBjcmlhciB1bSBtw7NkdWxvIGNvbmZpZ3VyYW5kbyBhcyByb3RhcyBkYSBhcGxpY2HDp8Ojby5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuICpcbiAqIGltcG9ydCB7IEhlbGxvV29ybGRDb21wb25lbnQgfSBmcm9tICcuL2hlbGxvLXdvcmxkL2hlbGxvLXdvcmxkLmNvbXBvbmVudCc7XG4gKlxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtwYXRoOiAnaGVsbG8td29ybGQnLCBjb21wb25lbnQ6IEhlbGxvV29ybGRDb21wb25lbnR9XG4gKiBdO1xuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yUm9vdChyb3V0ZXMsIHt1c2VIYXNoOiB0cnVlfSldLFxuICogICBleHBvcnRzOiBbUm91dGVyTW9kdWxlXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBSb3V0aW5nTW9kdWxlIHt9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tZW51LWJhc2ljXCIgdGl0bGU9XCJQTyBNZW51IEJhc2ljXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1iYXNpYy9zYW1wbGUtcG8tbWVudS1iYXNpYy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1iYXNpYy9zYW1wbGUtcG8tbWVudS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tZW51LWxhYnNcIiB0aXRsZT1cIlBPIE1lbnUgTGFic1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtbGFicy9zYW1wbGUtcG8tbWVudS1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tZW51LWxhYnMvc2FtcGxlLXBvLW1lbnUtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tZW51LWh1bWFuLXJlc291cmNlc1wiIHRpdGxlPVwiUE8gTWVudSAtIEh1bWFuIFJlc291cmNlc1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzL3NhbXBsZS1wby1tZW51LWh1bWFuLXJlc291cmNlcy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1odW1hbi1yZXNvdXJjZXMvc2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbWVudS1odW1hbi1yZXNvdXJjZXMvc2FtcGxlLXBvLW1lbnUtaHVtYW4tcmVzb3VyY2VzLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtQb01lbnVJdGVtc1NlcnZpY2UsIFBvTWVudVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFBvTWVudUNvbXBvbmVudCBleHRlbmRzIFBvTWVudUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgRG9DaGVjayB7XG4gIEBDb250ZW50Q2hpbGQoUG9NZW51SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIG1lbnVIZWFkZXJUZW1wbGF0ZTogUG9NZW51SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW07XG4gIGNvbGxhcHNlZE1vYmlsZTogYm9vbGVhbjtcbiAgZmlsdGVyTG9hZGluZyA9IGZhbHNlO1xuICBncm91cGVkTWVudUl0ZW06IFBvTWVudUl0ZW07XG4gIGlkID0gdXVpZCgpO1xuICBsaW5rQWN0aXZlOiBzdHJpbmc7XG4gIG1vYmlsZU9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBub0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGltZW91dEZpbHRlcjogYW55O1xuXG4gIHByaXZhdGUgZmlsdGVyaW5nSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZW51SW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtZW51UHJldmlvdXMgPSBudWxsO1xuICBwcml2YXRlIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgaXRlbVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJvdXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBtZW51SXRlbXNTZXJ2aWNlOiBQb01lbnVJdGVtc1NlcnZpY2UsXG4gICAgbWVudUdsb2JhbFNlcnZpY2U6IFBvTWVudUdsb2JhbFNlcnZpY2UsXG4gICAgbWVudVNlcnZpY2U6IFBvTWVudVNlcnZpY2UsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZVxuICApIHtcbiAgICBzdXBlcihtZW51R2xvYmFsU2VydmljZSwgbWVudVNlcnZpY2UsIGxhbmd1YWdlU2VydmljZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0FjdGl2ZUl0ZW1NZW51U3ViTWVudSgpIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVNZW51SXRlbVsnbGV2ZWwnXSA+IHRoaXMuZ3JvdXBlZE1lbnVJdGVtWydsZXZlbCddO1xuICB9XG5cbiAgZ2V0IGVuYWJsZUNvbGxhcHNlKCkge1xuICAgIHJldHVybiB0aGlzLmlzQ29sbGFwc2VkICYmICF0aGlzLmNvbGxhcHNlZE1vYmlsZTtcbiAgfVxuXG4gIGdldCBlbmFibGVDb2xsYXBzZUJ1dHRvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0NvbGxhcHNlTWVudSAmJiAhdGhpcy5jb2xsYXBzZWQgJiYgIXRoaXMubW9iaWxlT3BlbmVkO1xuICB9XG5cbiAgZ2V0IGhhc0Zvb3RlcigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVDb2xsYXBzZUJ1dHRvbiB8fCB0aGlzLmVuYWJsZUNvbGxhcHNlO1xuICB9XG5cbiAgZ2V0IGlzQ29sbGFwc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmFsbG93Q29sbGFwc2VNZW51ICYmIHRoaXMuY29sbGFwc2VkO1xuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICh0aGlzLmZpbHRlcmluZ0l0ZW1zICYmIHRoaXMuZmlsdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWVudUN1cnJlbnQgPSB0aGlzLnN0cmluZ2lmeSh0aGlzLm1lbnVzKTtcblxuICAgIGlmICh0aGlzLm1lbnVQcmV2aW91cyAhPT0gbWVudUN1cnJlbnQgfHwgIXRoaXMubWVudUluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1lbnUoKTtcbiAgICAgIHRoaXMudmFsaWRhdGVDb2xsYXBzZUNsYXNzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5pdGVtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMucmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVHbG9iYWxTZXJ2aWNlLnNlbmRSZW1vdmVkQXBwbGljYXRpb25NZW51KHRoaXMuaWQpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpYmVUb01lbnVJdGVtKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JvdXRlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5tZW51R2xvYmFsU2VydmljZS5zZW5kQXBwbGljYXRpb25NZW51KHRoaXMpO1xuICB9XG5cbiAgYWN0aXZhdGVNZW51QnlVcmwodXJsUGF0aDogc3RyaW5nLCBtZW51czogQXJyYXk8UG9NZW51SXRlbT4pIHtcbiAgICBpZiAobWVudXMpIHtcbiAgICAgIGNvbnN0IHVybFBhdGhXaXRob3V0TGFzdEZyYWdtZW50ID0gdXJsUGF0aC5zdWJzdHIoMCwgdXJsUGF0aC5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgIHJldHVybiBtZW51cy5zb21lKG1lbnUgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRNZW51TGluayA9IGdldEZvcm1hdHRlZExpbmsobWVudS5saW5rKTtcbiAgICAgICAgY29uc3QgbWVudUxpbmtQYXRoID0gYCR7dXJsUGF0aFdpdGhvdXRMYXN0RnJhZ21lbnR9JHtmb3JtYXR0ZWRNZW51TGluay5zdWJzdHIoXG4gICAgICAgICAgZm9ybWF0dGVkTWVudUxpbmsubGFzdEluZGV4T2YoJy8nKVxuICAgICAgICApfWA7XG5cbiAgICAgICAgaWYgKG1lbnVMaW5rUGF0aCA9PT0gdXJsUGF0aCAmJiBtZW51TGlua1BhdGggPT09IGZvcm1hdHRlZE1lbnVMaW5rKSB7XG4gICAgICAgICAgdGhpcy5saW5rQWN0aXZlID0gZm9ybWF0dGVkTWVudUxpbms7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKG1lbnUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlTWVudUJ5VXJsKHVybFBhdGgsIG1lbnUuc3ViSXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGVja0FjdGl2ZU1lbnVCeVVybCh1cmxQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGlua0FjdGl2ZSB8fCB0aGlzLmxpbmtBY3RpdmUgIT09IHVybFBhdGgpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51QnlVcmwodXJsUGF0aCwgdGhpcy5tZW51cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIDxhIGlkPVwiY29sYXBzZU1ldGhvZFwiPjwvYT5cbiAgICpcbiAgICogKk3DqXRvZG8gcGFyYSBjb2xhcHNhciAocmV0cmFpcikgbyBtZW51LlxuICAgKi9cbiAgY29sbGFwc2UoKSB7XG4gICAgdGhpcy52YWxpZGF0ZVRvZ2dsZU1lbnUodHJ1ZSk7XG4gIH1cblxuICBkZWJvdW5jZUZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRGaWx0ZXIpO1xuXG4gICAgdGhpcy50aW1lb3V0RmlsdGVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZpbHRlclByb2Nlc3MoZmlsdGVyKTtcbiAgICB9LCBwb01lbnVEZWJvdW5jZVRpbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIDxhIGlkPVwiZXhwYW5kTWV0aG9kXCI+PC9hPlxuICAgKlxuICAgKiAqTcOpdG9kbyBwYXJhIGV4cGFuZGlyIChhdW1lbnRhcikgbyBtZW51LlxuICAgKi9cbiAgZXhwYW5kKCkge1xuICAgIHRoaXMudmFsaWRhdGVUb2dnbGVNZW51KGZhbHNlKTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvTWVudUl0ZW0oKSB7XG4gICAgdGhpcy5pdGVtU3Vic2NyaXB0aW9uID0gdGhpcy5tZW51SXRlbXNTZXJ2aWNlLnJlY2VpdmVGcm9tQ2hpbGRNZW51Q2xpY2tlZCgpLnN1YnNjcmliZSgobWVudTogUG9NZW51SXRlbSkgPT4ge1xuICAgICAgdGhpcy5jbGlja01lbnVJdGVtKG1lbnUpO1xuICAgIH0pO1xuICB9XG5cbiAgc3Vic2NyaWJlVG9Sb3V0ZSgpIHtcbiAgICB0aGlzLnJvdXRlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHwgdmFsIGluc3RhbmNlb2YgTmF2aWdhdGlvbkNhbmNlbCkge1xuICAgICAgICBjb25zdCB1cmxSb3V0ZXIgPSB0aGlzLmNoZWNraW5nUm91dGVyQ2hpbGRyZW5GcmFnbWVudHMoKTtcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZU1lbnVCeVVybCh1cmxSb3V0ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIDxhIGlkPVwidG9nZ2xlTWV0aG9kXCI+PC9hPlxuICAgKiAqTcOpdG9kbyBxdWUgY29sYXBzYSBlIGV4cGFuZGUgbyBtZW51IGFsdGVybmFkYW1lbnRlLlxuICAgKlxuICAgKiA+ICpPcyBtw6l0b2RvcyBhcGVuYXMgdsOjbyBjb2xhcHNhci9leHBhbmRpciBvIG1lbnUgc2U6XG4gICAqICAtIFRvZG9zIG9zIGl0ZW5zIGRlIG1lbnUgdGl2ZXJlbSB2YWxvciBuYXMgcHJvcHJpZWRhZGVzIGBpY29uYCBlIGBzaG9ydExhYmVsYC5cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLnZhbGlkYXRlVG9nZ2xlTWVudSghdGhpcy5jb2xsYXBzZWQpO1xuICB9XG5cbiAgdG9nZ2xlTWVudU1vYmlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vYmlsZU9wZW5lZCA9ICF0aGlzLm1vYmlsZU9wZW5lZDtcbiAgICB0aGlzLmNvbGxhcHNlZE1vYmlsZSA9IHRoaXMuY29sbGFwc2VkICYmIHRoaXMubW9iaWxlT3BlbmVkO1xuXG4gICAgdGhpcy52YWxpZGF0ZUNvbGxhcHNlQ2xhc3ModGhpcy5jb2xsYXBzZWRNb2JpbGUpO1xuXG4gICAgaWYgKGlzTW9iaWxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb2JpbGVPcGVuZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlUmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tpbmdSb3V0ZXJDaGlsZHJlbkZyYWdtZW50cygpIHtcbiAgICBjb25zdCBjaGlsZHJlblByaW1hcnkgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpLnJvb3QuY2hpbGRyZW5bJ3ByaW1hcnknXTtcblxuICAgIHJldHVybiBjaGlsZHJlblByaW1hcnkgPyBgLyR7Y2hpbGRyZW5QcmltYXJ5LnNlZ21lbnRzLm1hcChpdCA9PiBpdC5wYXRoKS5qb2luKCcvJyl9YCA6ICcnO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlQ29sbGFwc2VDbGFzcyhjb2xsYXBzZWRNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xuICAgIHRoaXMucmVuZGVyZXJbdGhpcy5pc0NvbGxhcHNlZCAmJiAhY29sbGFwc2VkTW9iaWxlID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHdyYXBwZXIsICdwby1jb2xsYXBzZWQtbWVudScpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZUNvbGxhcHNlU3ViTWVudUl0ZW0oKSB7XG4gICAgdGhpcy5jbGVhckdyb3VwTWVudUlmRmlyc3RMZXZlbCh0aGlzLmFjdGl2ZU1lbnVJdGVtKTtcblxuICAgIGlmICghdGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5hY3RpdmVNZW51SXRlbVsnbGV2ZWwnXSA+IHBvTWVudVJvb3RMZXZlbCAmJiB0aGlzLmlzQWN0aXZlSXRlbU1lbnVTdWJNZW51KSB7XG4gICAgICB0aGlzLm9wZW5QYXJlbnRNZW51KHRoaXMuYWN0aXZlTWVudUl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVNZW51SXRlbShtZW51OiBQb01lbnVJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVNZW51SXRlbSA9IG1lbnU7XG4gICAgdGhpcy5saW5rQWN0aXZlID0gbWVudS5saW5rO1xuICAgIGlmICh0aGlzLmFjdGl2ZU1lbnVJdGVtWydsZXZlbCddID4gcG9NZW51Um9vdExldmVsKSB7XG4gICAgICB0aGlzLm9wZW5QYXJlbnRNZW51KHRoaXMuYWN0aXZlTWVudUl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyb3VwZWRNZW51SXRlbSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMubWVudUl0ZW1zU2VydmljZS5zZW5kVG9DaGlsZE1lbnVDbGlja2VkKHtcbiAgICAgIGFjdGl2ZTogdGhpcy5hY3RpdmVNZW51SXRlbSxcbiAgICAgIGdyb3VwZWQ6IHRoaXMuZ3JvdXBlZE1lbnVJdGVtLFxuICAgICAgYWN0aXZhdGVkQnlSb3V0ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVTdWJNZW51cyhtZW51czogQXJyYXk8UG9NZW51SXRlbT4pIHtcbiAgICByZXR1cm4gbWVudXMuZXZlcnkobWVudSA9PiBtZW51WydsZXZlbCddID4gcG9NZW51Um9vdExldmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJHcm91cE1lbnVJZkZpcnN0TGV2ZWwoYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW0pIHtcbiAgICBpZiAoYWN0aXZlTWVudUl0ZW1bJ2xldmVsJ10gPT09IHBvTWVudVJvb3RMZXZlbCkge1xuICAgICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja01lbnVJdGVtKG1lbnU6IFBvTWVudUl0ZW0pIHtcbiAgICBpZiAobWVudS5hY3Rpb24pIHtcbiAgICAgIHRoaXMuZXhlY3V0ZU1lbnVBY3Rpb24obWVudSk7XG4gICAgfVxuXG4gICAgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ2V4dGVybmFsTGluaycpIHtcbiAgICAgIG9wZW5FeHRlcm5hbExpbmsobWVudS5saW5rKTtcbiAgICB9IGVsc2UgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ2ludGVybmFsTGluaycpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbShtZW51KTtcbiAgICB9IGVsc2UgaWYgKG1lbnVbJ3R5cGUnXSA9PT0gJ3N1Ykl0ZW1zJykge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyaW5nSXRlbXMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdyb3VwTWVudUl0ZW0obWVudSk7XG4gICAgfVxuXG4gICAgaWYgKG1lbnVbJ3R5cGUnXSAhPT0gJ3N1Ykl0ZW1zJykge1xuICAgICAgdGhpcy5tb2JpbGVPcGVuZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb01lbnVJdGVtRmlsdGVyZWQobWVudUl0ZW06IGFueSA9IHsgbGFiZWw6ICcnLCBsaW5rOiAnJyB9KTogUG9NZW51SXRlbUZpbHRlcmVkIHtcbiAgICBjb25zdCB7IGxhYmVsLCBsaW5rIH0gPSBtZW51SXRlbTtcblxuICAgIGNvbnN0IG1lbnVJdGVtRmlsdGVyZWQ6IFBvTWVudUl0ZW1GaWx0ZXJlZCA9IHsgbGFiZWwsIGxpbmsgfTtcblxuICAgIHRoaXMuc2V0TWVudUl0ZW1Qcm9wZXJ0aWVzKG1lbnVJdGVtRmlsdGVyZWQpO1xuXG4gICAgcmV0dXJuIG1lbnVJdGVtRmlsdGVyZWQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc2l6ZUxpc3RlbmVyKCkge1xuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMudG9nZ2xlUmVzaXplKCk7XG4gICAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVNZW51QWN0aW9uKG1lbnU6IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBtZW51LmFjdGlvbihtZW51KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVySXRlbXMoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0cmltRmlsdGVyID0gZmlsdGVyICYmIGZpbHRlci50cmltKCk7XG5cbiAgICBpZiAodHJpbUZpbHRlcikge1xuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gW107XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2VcbiAgICAgICAgPyBhd2FpdCB0aGlzLmZpbHRlck9uU2VydmljZSh0cmltRmlsdGVyKVxuICAgICAgICA6IHRoaXMuZmlsdGVyTG9jYWxJdGVtcyh0cmltRmlsdGVyKTtcbiAgICAgIHRoaXMuZmlsdGVyaW5nSXRlbXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbLi4udGhpcy5tZW51c107XG4gICAgICB0aGlzLmZpbHRlcmluZ0l0ZW1zID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJMb2NhbEl0ZW1zKGZpbHRlcjogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IFtdO1xuXG4gICAgdGhpcy5maW5kSXRlbXModGhpcy5tZW51cywgZmlsdGVyLnRvTG93ZXJDYXNlKCksIGZpbHRlcmVkSXRlbXMpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlclByb2Nlc3MoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbHRlckxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5maWx0ZXJJdGVtcyhmaWx0ZXIpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc2hvd05vRGF0YSgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXNTZXJ2aWNlLnNlbmRUb0NoaWxkTWVudUNsaWNrZWQoeyBhY3RpdmU6IHRoaXMuYWN0aXZlTWVudUl0ZW0sIGdyb3VwZWQ6IHRoaXMuZ3JvdXBlZE1lbnVJdGVtIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyT25TZXJ2aWNlKHNlYXJjaDogc3RyaW5nID0gJycpIHtcbiAgICBpZiAoc2VhcmNoLmxlbmd0aCA+PSBwb01lbnVNaW5MZW5ndGgpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2VcbiAgICAgICAgLmdldEZpbHRlcmVkRGF0YShzZWFyY2gsIHRoaXMucGFyYW1zKVxuICAgICAgICAucGlwZShtYXAobWVudUl0ZW1zRmlsdGVyZWQgPT4gbWVudUl0ZW1zRmlsdGVyZWQubWFwKG1lbnVJdGVtID0+IHRoaXMuY29udmVydFRvTWVudUl0ZW1GaWx0ZXJlZChtZW51SXRlbSkpKSlcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZEl0ZW1zO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZEl0ZW1zKG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPiwgZmlsdGVyOiBzdHJpbmcsIGZpbHRlcmVkSXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICBtZW51cy5mb3JFYWNoKG1lbnUgPT4ge1xuICAgICAgY29uc3QgaGFzQWN0aW9uID0gbWVudS5hY3Rpb24gfHwgbWVudS5saW5rO1xuICAgICAgY29uc3QgbGFiZWxIYXNGaWx0ZXIgPSBtZW51LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKTtcblxuICAgICAgaWYgKGxhYmVsSGFzRmlsdGVyICYmIGhhc0FjdGlvbikge1xuICAgICAgICBjb25zdCBuZXdNZW51ID0geyAuLi5tZW51IH07XG5cbiAgICAgICAgaWYgKG5ld01lbnUuc3ViSXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgIGRlbGV0ZSBuZXdNZW51LnN1Ykl0ZW1zO1xuICAgICAgICAgIG5ld01lbnVbJ3R5cGUnXSA9IHRoaXMuc2V0TWVudVR5cGUobmV3TWVudSk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJlZEl0ZW1zLnB1c2gobmV3TWVudSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZW51LnN1Ykl0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmluZEl0ZW1zKG1lbnUuc3ViSXRlbXMsIGZpbHRlciwgZmlsdGVyZWRJdGVtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnQobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+LCBtZW51SXRlbTogUG9NZW51SXRlbSk6IFBvTWVudUl0ZW0ge1xuICAgIGNvbnN0IGdldFBhcmVudCA9IGZ1bmN0aW9uIChtZW51SXRlbXM6IEFycmF5PFBvTWVudUl0ZW0+LCBpZCkge1xuICAgICAgaWYgKG1lbnVJdGVtcykge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWVudUl0ZW1zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IG1lbnUgPSBtZW51SXRlbXNbaW5kZXhdO1xuICAgICAgICAgIGlmIChtZW51LnN1Ykl0ZW1zICYmIG1lbnUuc3ViSXRlbXMuZmluZChzdWJJdGVtID0+IHN1Ykl0ZW1bJ2lkJ10gPT09IGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGZvdW5kID0gZ2V0UGFyZW50KG1lbnUuc3ViSXRlbXMsIGlkKTtcbiAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBnZXRQYXJlbnQobWVudXMsIG1lbnVJdGVtWydpZCddKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFJvb3RQYXJlbnQobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+LCBtZW51OiBQb01lbnVJdGVtKTogUG9NZW51SXRlbSB7XG4gICAgY29uc3QgZmluZFBhcmVudCA9IHRoaXMuZmluZFBhcmVudDtcblxuICAgIGNvbnN0IGdldFJvb3RQYXJlbnQgPSBmdW5jdGlvbiAobWVudUl0ZW1zOiBBcnJheTxQb01lbnVJdGVtPiwgbWVudUl0ZW0pOiBQb01lbnVJdGVtIHtcbiAgICAgIGxldCBwYXJlbnQgPSBmaW5kUGFyZW50KG1lbnVJdGVtcywgbWVudUl0ZW0pO1xuXG4gICAgICBpZiAocGFyZW50WydsZXZlbCddICE9PSBwb01lbnVSb290TGV2ZWwpIHtcbiAgICAgICAgcGFyZW50ID0gZ2V0Um9vdFBhcmVudChtZW51SXRlbXMsIHBhcmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH07XG4gICAgcmV0dXJuIGdldFJvb3RQYXJlbnQobWVudXMsIG1lbnUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVNZW51UGFyZW50KG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPiwgYWN0aXZlTWVudUl0ZW06IFBvTWVudUl0ZW0sIGdyb3VwZWRNZW51SXRlbTogUG9NZW51SXRlbSkge1xuICAgIGlmICh0aGlzLmFyZVN1Yk1lbnVzKFtncm91cGVkTWVudUl0ZW0sIGFjdGl2ZU1lbnVJdGVtXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRSb290UGFyZW50KG1lbnVzLCBhY3RpdmVNZW51SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBncm91cE1lbnVJdGVtKG1lbnU6IFBvTWVudUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMudG9nZ2xlTWVudUNvbGxhcHNlKCk7XG4gICAgfVxuXG4gICAgbWVudVsnaXNPcGVuZWQnXSA9ICFtZW51Wydpc09wZW5lZCddO1xuICAgIHRoaXMuZ3JvdXBlZE1lbnVJdGVtID0gbWVudTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuYWN0aXZlTWVudUl0ZW0gJiZcbiAgICAgIG1lbnVbJ2lzT3BlbmVkJ10gJiZcbiAgICAgIHRoaXMuaXNBY3RpdmVJdGVtTWVudVN1Yk1lbnUgJiZcbiAgICAgIHRoaXMuaXNSb290TWVudUVxdWFsR3JvdXBlZE1lbnUodGhpcy5tZW51cywgdGhpcy5hY3RpdmVNZW51SXRlbSwgbWVudSlcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVNZW51SXRlbSh0aGlzLmFjdGl2ZU1lbnVJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVJdGVtc1NlcnZpY2Uuc2VuZFRvQ2hpbGRNZW51Q2xpY2tlZCh7IGFjdGl2ZTogdGhpcy5hY3RpdmVNZW51SXRlbSwgZ3JvdXBlZDogdGhpcy5ncm91cGVkTWVudUl0ZW0gfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUm9vdE1lbnVFcXVhbEdyb3VwZWRNZW51KFxuICAgIG1lbnVzOiBBcnJheTxQb01lbnVJdGVtPixcbiAgICBhY3RpdmVNZW51SXRlbTogUG9NZW51SXRlbSxcbiAgICBncm91cGVkTWVudUl0ZW06IFBvTWVudUl0ZW1cbiAgKSB7XG4gICAgY29uc3QgYWN0aXZlTWVudVJvb3RQYXJlbnQgPSB0aGlzLmZpbmRSb290UGFyZW50KG1lbnVzLCBhY3RpdmVNZW51SXRlbSk7XG4gICAgcmV0dXJuIGFjdGl2ZU1lbnVSb290UGFyZW50WydpZCddID09PSBncm91cGVkTWVudUl0ZW1bJ2lkJ107XG4gIH1cblxuICBwcml2YXRlIG9wZW5QYXJlbnRNZW51KGNoaWxkTWVudTogUG9NZW51SXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudCh0aGlzLm1lbnVzLCBjaGlsZE1lbnUpO1xuICAgIHBhcmVudFsnaXNPcGVuZWQnXSA9IHRydWU7XG4gICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPSBwYXJlbnQ7XG4gIH1cblxuICBwcml2YXRlIHNob3dOb0RhdGEoKSB7XG4gICAgdGhpcy5ub0RhdGEgPSB0aGlzLmZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkobWVudXM6IEFycmF5PFBvTWVudUl0ZW0+KTogc3RyaW5nIHtcbiAgICAvLyBuw6NvIGZheiBvIHN0cmluZ2lmeSBkYSBwcm9wcmllZGFkZSBpY29uLCBwb2lzIHBvZGUgY29udGVyIG9iamV0byBjb21wbGV4byBlIGRpc3BhcmFyIHVtIGVycm8uXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMubWVudXMsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnaWNvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVHcm91cGVkTWVudUl0ZW0oKSB7XG4gICAgdGhpcy5ncm91cGVkTWVudUl0ZW1bJ2lzT3BlbmVkJ10gPSAhdGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5hbGxvd0NvbGxhcHNlTWVudTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlTWVudUNvbGxhcHNlKGNvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5jb2xsYXBzZWQgPSBjb2xsYXBzZWQ7XG5cbiAgICBpZiAodGhpcy5ncm91cGVkTWVudUl0ZW0gJiYgdGhpcy5hY3RpdmVNZW51SXRlbSkge1xuICAgICAgdGhpcy5ncm91cGVkTWVudUl0ZW0gPVxuICAgICAgICB0aGlzLmdldEFjdGl2ZU1lbnVQYXJlbnQodGhpcy5tZW51cywgdGhpcy5hY3RpdmVNZW51SXRlbSwgdGhpcy5ncm91cGVkTWVudUl0ZW0pIHx8IHRoaXMuZ3JvdXBlZE1lbnVJdGVtO1xuICAgICAgdGhpcy50b2dnbGVHcm91cGVkTWVudUl0ZW0oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVNZW51SXRlbSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUNvbGxhcHNlU3ViTWVudUl0ZW0oKTtcbiAgICAgIHRoaXMubWVudUl0ZW1zU2VydmljZS5zZW5kVG9DaGlsZE1lbnVDbGlja2VkKHtcbiAgICAgICAgYWN0aXZlOiB0aGlzLmFjdGl2ZU1lbnVJdGVtLFxuICAgICAgICBncm91cGVkOiB0aGlzLmdyb3VwZWRNZW51SXRlbSxcbiAgICAgICAgYWN0aXZhdGVkQnlSb3V0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNZW51KCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVJlc2l6ZSgpIHtcbiAgICBpZiAodGhpcy5tb2JpbGVPcGVuZWQpIHtcbiAgICAgIHRoaXMubW9iaWxlT3BlbmVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbGxhcHNlZE1vYmlsZSA9IGZhbHNlO1xuICAgICAgdGhpcy52YWxpZGF0ZUNvbGxhcHNlQ2xhc3ModGhpcy5jb2xsYXBzZWRNb2JpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVUb2dnbGVNZW51KGNvbGxhcHNlZDogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5hbGxvd0NvbGxhcHNlTWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlTWVudUNvbGxhcHNlKGNvbGxhcHNlZCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnUoKSB7XG4gICAgdGhpcy5tZW51SW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0TWVudUV4dHJhUHJvcGVydGllcygpO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLm1lbnVzXTtcbiAgICB0aGlzLm1lbnVQcmV2aW91cyA9IHRoaXMuc3RyaW5naWZ5KHRoaXMubWVudXMpO1xuICAgIHRoaXMudmFsaWRhdGVNZW51cyh0aGlzLm1lbnVzKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIm1vYmlsZU9wZW5lZFwiIGNsYXNzPVwicG8tbWVudS1vdmVybGF5XCIgKGNsaWNrKT1cInRvZ2dsZU1lbnVNb2JpbGUoKVwiPjwvZGl2PlxuPG5hdj5cbiAgPGRpdiBjbGFzcz1cInBvLW1lbnUtbW9iaWxlIHBvLWNsaWNrYWJsZVwiIChjbGljayk9XCJ0b2dnbGVNZW51TW9iaWxlKClcIj5cbiAgICA8c3BhbiBjbGFzcz1cInBvLWljb24gcG8taWNvbi1tZW51XCI+PC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicG8tbWVudVwiIFtuZ0NsYXNzXT1cInsgJ3BvLW1lbnUtYW5pbWF0aW9uJzogbW9iaWxlT3BlbmVkIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tbWVudS1oZWFkZXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJsb2dvIHx8IChzaG9ydExvZ28gJiYgZW5hYmxlQ29sbGFwc2UpXCIgY2xhc3M9XCJwby1tZW51LWhlYWRlci1jb250YWluZXItbG9nb1wiPlxuICAgICAgICA8YSBocmVmPVwiLi9cIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBbbmdDbGFzc109XCJlbmFibGVDb2xsYXBzZSA/ICdwby1tZW51LXNob3J0LWxvZ28nIDogJ3BvLW1lbnUtbG9nbydcIlxuICAgICAgICAgICAgW3NyY109XCJlbmFibGVDb2xsYXBzZSA/IHNob3J0TG9nbyB8fCBsb2dvIDogbG9nb1wiXG4gICAgICAgICAgICBbYWx0XT1cImxvZ29BbHRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWVuYWJsZUNvbGxhcHNlICYmIG1lbnVIZWFkZXJUZW1wbGF0ZVwiIGNsYXNzPVwicG8tbWVudS1oZWFkZXItdGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwby1tZW51LWZpbHRlciAqbmdJZj1cImZpbHRlciAmJiAhZW5hYmxlQ29sbGFwc2VcIiBbcC1sb2FkaW5nXT1cImZpbHRlckxvYWRpbmdcIiAocC1maWx0ZXIpPVwiZGVib3VuY2VGaWx0ZXIoJGV2ZW50KVwiPlxuICAgICAgPC9wby1tZW51LWZpbHRlcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1tZW51LWJvZHlcIj5cbiAgICAgIDwhLS0gSW5uZXIgZSBvdXRlciBwYXJhIGVzY29uZGVyIHNjcm9sbCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwby1tZW51LW91dGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwby1tZW51LWlubmVyXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YVwiIGNsYXNzPVwicG8tbWVudS1pdGVtLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwby1tZW51LWl0ZW0tZmlyc3RcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLW1lbnUtaWNvbi1jb250YWluZXIgcG8tbWVudS1pdGVtLW5vLWRhdGFcIj5cbiAgICAgICAgICAgICAgICA8cG8taWNvbiBjbGFzcz1cInBvLWljb24gcG8taWNvbi1pbmZvIHBvLW1lbnUtaWNvbi1pdGVtIHBvLWxnLTJcIj48L3BvLWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvLWxnLTEwIHBvLW1lbnUtaWNvbi1sYWJlbFwiPnt7IGxpdGVyYWxzLml0ZW1Ob3RGb3VuZCB9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbWVudSBvZiBmaWx0ZXJlZEl0ZW1zOyBsZXQgbWVudUluZGV4ID0gaW5kZXhcIiBjbGFzcz1cInBvLW1lbnUtaXRlbS13cmFwcGVyXCI+XG4gICAgICAgICAgICA8cG8tbWVudS1pdGVtXG4gICAgICAgICAgICAgIFtjbGFzcy5wby1tZW51LWl0ZW0tZmlyc3RdPVwibWVudUluZGV4ID09PSAwXCJcbiAgICAgICAgICAgICAgW3AtYWN0aW9uXT1cIm1lbnUuYWN0aW9uXCJcbiAgICAgICAgICAgICAgW3AtYmFkZ2UtYWxlcnRdPVwibWVudS5iYWRnZUFsZXJ0XCJcbiAgICAgICAgICAgICAgW3AtYmFkZ2UtY29sb3JdPVwibWVudS5iYWRnZSA/IG1lbnUuYmFkZ2UuY29sb3IgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICBbcC1iYWRnZS12YWx1ZV09XCJtZW51LmJhZGdlID8gbWVudS5iYWRnZS52YWx1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIFtwLWNvbGxhcHNlZC1tZW51XT1cImVuYWJsZUNvbGxhcHNlXCJcbiAgICAgICAgICAgICAgW3AtaWNvbl09XCJhbGxvd0ljb25zID8gbWVudS5pY29uIDogbnVsbFwiXG4gICAgICAgICAgICAgIFtwLWlkXT1cIm1lbnUuaWRcIlxuICAgICAgICAgICAgICBbcC1sYWJlbF09XCJtZW51LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3AtbGV2ZWxdPVwibWVudS5sZXZlbFwiXG4gICAgICAgICAgICAgIFtwLWxpbmtdPVwibWVudS5saW5rXCJcbiAgICAgICAgICAgICAgW3Atc2hvcnQtbGFiZWxdPVwibWVudS5zaG9ydExhYmVsXCJcbiAgICAgICAgICAgICAgW3Atc3ViLWl0ZW1zXT1cIm1lbnUuc3ViSXRlbXNcIlxuICAgICAgICAgICAgICBbcC10eXBlXT1cIm1lbnUudHlwZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3BvLW1lbnUtaXRlbT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJoYXNGb290ZXJcIiBjbGFzcz1cInBvLW1lbnUtZm9vdGVyXCI+XG4gICAgICA8YSBjbGFzcz1cInBvLW1lbnUtY29sbGFwc2UtYnV0dG9uLWljb24gcG8tY2xpY2thYmxlXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJwby1pY29uXCJcbiAgICAgICAgICBbY2xhc3MucG8taWNvbi1tZW51LWNsb3NlXT1cImVuYWJsZUNvbGxhcHNlQnV0dG9uXCJcbiAgICAgICAgICBbY2xhc3MucG8taWNvbi1tZW51LW9wZW5dPVwiZW5hYmxlQ29sbGFwc2VcIlxuICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25hdj5cbiJdfQ==
|