@kirbydesign/designsystem 6.1.1 → 6.1.2-pubtest.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/dropdown/dropdown.component.mjs +26 -18
- package/esm2020/lib/components/modal/footer/modal-footer.component.mjs +13 -8
- package/esm2020/lib/components/modal/modal-wrapper/modal-elements-mover.delegate.mjs +62 -0
- package/esm2020/lib/components/modal/modal-wrapper/modal-wrapper.component.mjs +66 -120
- package/esm2020/lib/components/modal/services/modal.interfaces.mjs +39 -1
- package/esm2020/lib/components/page/page.component.mjs +31 -21
- package/fesm2015/kirbydesign-designsystem.mjs +217 -149
- package/fesm2015/kirbydesign-designsystem.mjs.map +1 -1
- package/fesm2020/kirbydesign-designsystem.mjs +210 -149
- package/fesm2020/kirbydesign-designsystem.mjs.map +1 -1
- package/lib/components/avatar/avatar.component.d.ts +1 -1
- package/lib/components/dropdown/dropdown.component.d.ts +6 -5
- package/lib/components/modal/footer/modal-footer.component.d.ts +5 -2
- package/lib/components/modal/modal-wrapper/modal-elements-mover.delegate.d.ts +14 -0
- package/lib/components/modal/modal-wrapper/modal-wrapper.component.d.ts +13 -16
- package/lib/components/modal/services/modal.interfaces.d.ts +22 -0
- package/lib/components/page/page.component.d.ts +7 -5
- package/package.json +2 -2
- package/scss/_trigger-publish.scss +0 -1
- package/scss/_trigger.scss +0 -1
- package/scss/awesome-stylesheet.scss +0 -1
- package/scss/base/_awesome-partial.scss +0 -1
- package/scss/base/_index.scss +0 -1
- package/scss/base/_interaction-states.scss +0 -1
- package/scss/base/_link.scss +0 -1
- package/scss/base/index.scss +0 -1
- package/scss/interaction-state/_active.scss +0 -1
- package/scss/interaction-state/_focus.scss +0 -1
- package/scss/interaction-state/_hover.scss +0 -1
- package/scss/interaction-state/_index.scss +0 -1
- package/scss/interaction-state/_interaction-state.utilities.scss +0 -1
- package/scss/interaction-state/_layer.scss +0 -1
- package/scss/interaction-state/_state-layer.scss +0 -1
- package/scss/interaction-state/_utilities.scss +0 -1
- package/scss/interaction-state/ionic/_active.scss +0 -1
- package/scss/interaction-state/ionic/_hover.scss +0 -1
- package/scss/interaction-state/ionic/_index.scss +0 -1
- package/scss/interaction-states/_hover.scss +0 -1
- package/scss/interaction-states/_index.scss +0 -1
- package/scss/opt-out/_index.scss +0 -1
- package/scss/opt-out/_link.scss +0 -1
|
@@ -22,7 +22,6 @@ export class DropdownComponent {
|
|
|
22
22
|
this.changeDetectorRef = changeDetectorRef;
|
|
23
23
|
this.keyboardHandlerService = keyboardHandlerService;
|
|
24
24
|
this.state = OpenState.closed;
|
|
25
|
-
this.hasConfiguredSlottedItems = false;
|
|
26
25
|
this.horizontalDirection = HorizontalDirection.right;
|
|
27
26
|
this.verticalDirection = VerticalDirection.down;
|
|
28
27
|
this._items = [];
|
|
@@ -98,6 +97,24 @@ export class DropdownComponent {
|
|
|
98
97
|
get _popoutUp() {
|
|
99
98
|
return this.verticalDirection === VerticalDirection.up;
|
|
100
99
|
}
|
|
100
|
+
set kirbyItemsSlotted(kirbyItems) {
|
|
101
|
+
const hasSlottedItems = this.itemClickUnlisten?.length > 0;
|
|
102
|
+
if (hasSlottedItems) {
|
|
103
|
+
this.unlistenAllSlottedItems();
|
|
104
|
+
}
|
|
105
|
+
// Setup a click listener for each new slotted items
|
|
106
|
+
kirbyItems.forEach((kirbyItem, index) => {
|
|
107
|
+
this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');
|
|
108
|
+
const unlisten = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {
|
|
109
|
+
this.onItemSelect(index);
|
|
110
|
+
});
|
|
111
|
+
this.itemClickUnlisten.push(unlisten);
|
|
112
|
+
});
|
|
113
|
+
this._kirbyItemsSlotted = kirbyItems;
|
|
114
|
+
}
|
|
115
|
+
get kirbyItemsSlotted() {
|
|
116
|
+
return this._kirbyItemsSlotted;
|
|
117
|
+
}
|
|
101
118
|
onToggle(event) {
|
|
102
119
|
event.stopPropagation();
|
|
103
120
|
if (!this.isOpen) {
|
|
@@ -115,18 +132,6 @@ export class DropdownComponent {
|
|
|
115
132
|
// Prevent button focus;
|
|
116
133
|
event.preventDefault();
|
|
117
134
|
}
|
|
118
|
-
ngAfterContentChecked() {
|
|
119
|
-
if (!this.hasConfiguredSlottedItems && this.kirbyItemsSlotted.length) {
|
|
120
|
-
this.kirbyItemsSlotted.forEach((kirbyItem, index) => {
|
|
121
|
-
this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');
|
|
122
|
-
const unlisten = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {
|
|
123
|
-
this.onItemSelect(index);
|
|
124
|
-
});
|
|
125
|
-
this.itemClickUnlisten.push(unlisten);
|
|
126
|
-
});
|
|
127
|
-
this.hasConfiguredSlottedItems = true;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
135
|
/* Utility that makes it easier to set styles on card element
|
|
131
136
|
when using popover*/
|
|
132
137
|
setPopoverCardStyle(style, value) {
|
|
@@ -379,11 +384,14 @@ export class DropdownComponent {
|
|
|
379
384
|
}
|
|
380
385
|
return false;
|
|
381
386
|
}
|
|
382
|
-
|
|
383
|
-
let
|
|
384
|
-
while ((
|
|
385
|
-
|
|
387
|
+
unlistenAllSlottedItems() {
|
|
388
|
+
let unlistenItem;
|
|
389
|
+
while ((unlistenItem = this.itemClickUnlisten.pop()) !== undefined) {
|
|
390
|
+
unlistenItem();
|
|
386
391
|
}
|
|
392
|
+
}
|
|
393
|
+
ngOnDestroy() {
|
|
394
|
+
this.unlistenAllSlottedItems();
|
|
387
395
|
if (this.intersectionObserverRef) {
|
|
388
396
|
this.intersectionObserverRef.disconnect();
|
|
389
397
|
}
|
|
@@ -530,4 +538,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
530
538
|
type: HostListener,
|
|
531
539
|
args: ['keydown.end', ['$event']]
|
|
532
540
|
}] } });
|
|
533
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckYsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7QUFjcEUsTUFBTSxPQUFPLGlCQUFpQjtJQW1KNUIs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dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVN2QyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVNyQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsT0FBTztnQkFjckIsZ0JBQWdCO3NCQUZmLFlBQVk7dUJBQUMsZUFBZTs7c0JBQzVCLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQVc5QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVFoQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVV6QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVd6QyxZQUFZO3NCQUpYLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMxQyxZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDNUMsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQzVDLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZ0I5QyxjQUFjO3NCQUZiLFlBQVk7dUJBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDdkMsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FyZC9jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vaXRlbS9pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vbGlzdC9saXN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIb3Jpem9udGFsRGlyZWN0aW9uLCBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IE9wZW5TdGF0ZSwgVmVydGljYWxEaXJlY3Rpb24gfSBmcm9tICcuL2Ryb3Bkb3duLnR5cGVzJztcbmltcG9ydCB7IEtleWJvYXJkSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2tleWJvYXJkLWhhbmRsZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEcm9wZG93bkNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgc3RhdGljIHJlYWRvbmx5IE9QRU5fREVMQVlfSU5fTVMgPSAxMDA7XG4gIHByaXZhdGUgc3RhdGUgPSBPcGVuU3RhdGUuY2xvc2VkO1xuICBwcml2YXRlIGhhc0NvbmZpZ3VyZWRTbG90dGVkSXRlbXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsRGlyZWN0aW9uIHwgYCR7SG9yaXpvbnRhbERpcmVjdGlvbn1gID1cbiAgICBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICBwcml2YXRlIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbERpcmVjdGlvbiB8IGAke1ZlcnRpY2FsRGlyZWN0aW9ufWAgPSBWZXJ0aWNhbERpcmVjdGlvbi5kb3duO1xuXG4gIHByaXZhdGUgX2l0ZW1zOiBzdHJpbmdbXSB8IGFueVtdID0gW107XG4gIGdldCBpdGVtcygpOiBzdHJpbmdbXSB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IHN0cmluZ1tdIHwgYW55W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXIgPSAtMTtcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRJbmRleCAhPSB2YWx1ZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IHZhbHVlO1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRJbmRleF0gfHwgbnVsbDtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBpdGVtVGV4dFByb3BlcnR5ID0gJ3RleHQnO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyID0gJ1BsZWFzZSBzZWxlY3Q6JztcblxuICBASW5wdXQoKSBzZXQgcG9wb3V0KGRpcmVjdGlvbjogSG9yaXpvbnRhbERpcmVjdGlvbiB8IGAke0hvcml6b250YWxEaXJlY3Rpb259YCkge1xuICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICB9XG5cbiAgZ2V0IHBvcG91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uO1xuICB9XG5cbiAgQElucHV0KClcbiAgYXR0ZW50aW9uTGV2ZWw6ICcxJyB8ICcyJyB8ICczJyB8ICc0JyA9ICczJztcbiAgcmVhZG9ubHkgYXR0ZW50aW9uTGV2ZWxPcGVuID0gJzInO1xuXG4gIEBJbnB1dCgpXG4gIGV4cGFuZD86ICdibG9jayc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgX2lzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXJyb3InKVxuICBASW5wdXQoKVxuICBoYXNFcnJvcjogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzaXplOiAnc20nIHwgJ21kJyA9ICdtZCc7XG5cbiAgQElucHV0KClcbiAgdGFiaW5kZXggPSAwO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2l0aC1wb3BvdmVyJylcbiAgQElucHV0KClcbiAgdXNlUG9wb3ZlciA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gIGdldCBfdGFiaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMudGFiaW5kZXg7XG4gIH1cblxuICAvLyBQcmV2ZW50IElvbmljIGJsdXIgb24gc2Nyb2xsXG4gIEBIb3N0QmluZGluZygnYXR0ci5uby1ibHVyJylcbiAgZ2V0IF9ub0JsdXJPblNjcm9sbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCAodGFwIG9uIG1vYmlsZSwgY2xpY2sva2V5cHJlc3Mgb24gd2ViKVxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4oKTtcblxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgYW55ID0gbnVsbDtcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFRleHRGcm9tSXRlbSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXhwYW5kJylcbiAgZ2V0IF9pc0Jsb2NrTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kID09PSAnYmxvY2snO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBfcm9sZSA9ICdsaXN0Ym94JztcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW5pbmcnKVxuICBnZXQgX2lzT3BlbmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gT3BlblN0YXRlLm9wZW5pbmc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW4nKVxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBPcGVuU3RhdGUub3BlbjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9wb3V0LWxlZnQnKVxuICBnZXQgX3BvcG91dExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9PT0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wb3BvdXQtdXAnKVxuICBnZXQgX3BvcG91dFVwKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsRGlyZWN0aW9uID09PSBWZXJ0aWNhbERpcmVjdGlvbi51cDtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZHJlbihMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgc2xvdHRlZEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICBAVmlld0NoaWxkKENhcmRDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjYXJkRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbXBvbmVudClcbiAgcG9wb3Zlcj86IFBvcG92ZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoQnV0dG9uQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBidXR0b25FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbihJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAga2lyYnlJdGVtc0RlZmF1bHQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG4gIEBDb250ZW50Q2hpbGRyZW4oSXRlbUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGtpcmJ5SXRlbXNTbG90dGVkOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gIHByaXZhdGUgaXRlbUNsaWNrVW5saXN0ZW46ICgoKSA9PiB2b2lkKVtdID0gW107XG4gIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWY6IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIHNob3dEcm9wZG93blRpbWVvdXRJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBrZXlib2FyZEhhbmRsZXJTZXJ2aWNlOiBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlXG4gICkge31cblxuICBvblRvZ2dsZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlKCk7XG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIG9uQnV0dG9uTW91c2VFdmVudChldmVudDogRXZlbnQpIHtcbiAgICAvLyBQcmV2ZW50IGJ1dHRvbiBmb2N1cztcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIGlmICghdGhpcy5oYXNDb25maWd1cmVkU2xvdHRlZEl0ZW1zICYmIHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkLmZvckVhY2goKGtpcmJ5SXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoa2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ29wdGlvbicpO1xuICAgICAgICBjb25zdCB1bmxpc3RlbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkl0ZW1TZWxlY3QoaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2tVbmxpc3Rlbi5wdXNoKHVubGlzdGVuKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5oYXNDb25maWd1cmVkU2xvdHRlZEl0ZW1zID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKiBVdGlsaXR5IHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHNldCBzdHlsZXMgb24gY2FyZCBlbGVtZW50IFxuICB3aGVuIHVzaW5nIHBvcG92ZXIqL1xuICBwcml2YXRlIHNldFBvcG92ZXJDYXJkU3R5bGUoc3R5bGU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy51c2VQb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgdGhpcy5jYXJkRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgc3R5bGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuRGFzaENhc2VcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnVzZVBvcG92ZXIgJiYgdGhpcy5leHBhbmQgPT09ICdibG9jaycpIHtcbiAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCctLWtpcmJ5LWNhcmQtd2lkdGgnLCBgJHt3aWR0aH1weGApO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCdtYXgtd2lkdGgnLCAnaW5pdGlhbCcpO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCdtaW4td2lkdGgnLCAnaW5pdGlhbCcpO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVBbGlnbm1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFsaWdubWVudCgpIHtcbiAgICBpZiAodGhpcy51c2VQb3BvdmVyKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByb290TWFyZ2luOiAnMHB4JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChlbnRyaWVzKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgYXBwbHkgYWxpZ25tZW50IHdoZW4gb3BlbmluZzpcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IE9wZW5TdGF0ZS5vcGVuaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHRpbWVyIHRvIHNob3cgZHJvcGRvd246XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dEcm9wZG93blRpbWVvdXRJZCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LndpZHRoID4gMDtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSAmJiBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA8IDEpIHtcbiAgICAgICAgICB0aGlzLnNldEhvcml6b250YWxEaXJlY3Rpb24oZW50cnkpO1xuICAgICAgICAgIHRoaXMuc2V0VmVydGljYWxEaXJlY3Rpb24oZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZi5vYnNlcnZlKHRoaXMuY2FyZEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3Jpem9udGFsRGlyZWN0aW9uKGVudHJ5OiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KSB7XG4gICAgLy8gSWYgcG9wb3V0IGRpcmVjdGlvbiBpcyBzZXQgdG8gcmlnaHQsIGFuZCB0aGUgZW50cnkgaXMgY3V0IG9mZiB0byB0aGUgcmlnaHQgYnkgJHtlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LnJpZ2h0fXB4XG4gICAgLy8gaXQgaXMgc2V0IHRvIHBvcG91dCBsZWZ0IGluc3RlYWQsIGFuZCB2aWNlIHZlcnNhIGZvciBwb3BvdXQgZGlyZWN0aW9uIGxlZnRcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uID09PSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0KSB7XG4gICAgICBpZiAoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gZW50cnkucm9vdEJvdW5kcy5yaWdodCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QubGVmdCA8IGVudHJ5LnJvb3RCb3VuZHMubGVmdCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmVydGljYWxEaXJlY3Rpb24oZW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpIHtcbiAgICBpZiAoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnRvcCA8IDApIHtcbiAgICAgIC8vIGVudHJ5IGlzIGN1dCBvZmYgYXQgdGhlIHRvcCBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC50b3B9cHhcbiAgICAgIC8vIG9wZW4gZG93bndhcmRzOlxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgfVxuICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tID4gZW50cnkucm9vdEJvdW5kcy5ib3R0b20pIHtcbiAgICAgIC8vIGVudHJ5IGlzIGN1dCBvZmYgYXQgdGhlIGJvdHRvbSBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gLSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LmJvdHRvbX1weFxuICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0VG9wID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgY29uc3QgU1BBQ0lORyA9IDU7IC8vVE9ETzogR2V0IGZyb20gU0NTU1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNhcmQgY2FuIGZpdCBvbiB0b3Agb2YgYnV0dG9uOlxuICAgICAgaWYgKGNvbnRhaW5lck9mZnNldFRvcCA+IGVudHJ5LnRhcmdldC5jbGllbnRIZWlnaHQgKyBTUEFDSU5HKSB7XG4gICAgICAgIC8vIG9wZW4gdXB3YXJkczpcbiAgICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLnVwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5vcGVuaW5nO1xuICAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBkcm9wZG93biBpcyBvcGVuZWQgaW4gY2FzZSB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayBpc24ndCBpbnZva2VkXG4gICAgICB0aGlzLnNob3dEcm9wZG93blRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHRoaXMuc2hvd0Ryb3Bkb3duKCksXG4gICAgICAgIERyb3Bkb3duQ29tcG9uZW50Lk9QRU5fREVMQVlfSU5fTVNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RHJvcGRvd24oKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IE9wZW5TdGF0ZS5vcGVuaW5nKSB7XG4gICAgICB0aGlzLnN0YXRlID0gT3BlblN0YXRlLm9wZW47XG4gICAgICB0aGlzLnBvcG92ZXI/LnNob3coKTtcbiAgICAgIHRoaXMuc2Nyb2xsSXRlbUludG9WaWV3KHRoaXMuc2VsZWN0ZWRJbmRleCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5jbG9zZWQ7XG4gICAgICAvLyBSZXNldCB2ZXJ0aWNhbCBkaXJlY3Rpb24gdG8gZGVmYXVsdFxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgICB0aGlzLnBvcG92ZXI/LmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkl0ZW1TZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3QncyB2YWx1ZS4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqIHJlcXVpcmVkIHRvIGludGVncmF0ZSB3aXRoIEFuZ3VsYXIncyBjb3JlIGZvcm1zIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdEl0ZW1CeVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgc2VsZWN0J3MgdmFsdWVcbiAgICogY2hhbmdlcyBmcm9tIHVzZXIgaW5wdXQuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgKiByZXF1aXJlZCB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdoZW4gdGhlIHNlbGVjdCBpcyBibHVycmVkXG4gICAqIGJ5IHRoZSB1c2VyLiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgcmVxdWlyZWRcbiAgICogdG8gaW50ZWdyYXRlIHdpdGggQW5ndWxhcidzIGNvcmUgZm9ybXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBzZWxlY3QuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSByZXF1aXJlZFxuICAgKiB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFNldHMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT0gdGhpcy5zZWxlY3RlZEluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuc2Nyb2xsSXRlbUludG9WaWV3KGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RJdGVtQnlWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHZhbHVlKTtcbiAgfVxuXG4gIGdldFRleHRGcm9tSXRlbShpdGVtOiBzdHJpbmcgfCBhbnkpIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW1bdGhpcy5pdGVtVGV4dFByb3BlcnR5XTtcbiAgfVxuXG4gIHNjcm9sbEl0ZW1JbnRvVmlldyhpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qga2lyYnlJdGVtcyA9XG4gICAgICB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkICYmIHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQubGVuZ3RoXG4gICAgICAgID8gdGhpcy5raXJieUl0ZW1zU2xvdHRlZFxuICAgICAgICA6IHRoaXMua2lyYnlJdGVtc0RlZmF1bHQ7XG4gICAgaWYgKGtpcmJ5SXRlbXMgJiYga2lyYnlJdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkS2lyYnlJdGVtID0ga2lyYnlJdGVtcy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgaWYgKHNlbGVjdGVkS2lyYnlJdGVtICYmIHNlbGVjdGVkS2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSBzZWxlY3RlZEtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLmNhcmRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1Ub3AgPSBpdGVtRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGl0ZW1Cb3R0b20gPSBpdGVtRWxlbWVudC5vZmZzZXRUb3AgKyBpdGVtRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclZpc2libGVUb3AgPSBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBjb250YWluZXJWaXNpYmxlQm90dG9tID0gc2Nyb2xsQ29udGFpbmVyLmNsaWVudEhlaWdodCArIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGlmIChpdGVtVG9wIDwgY29udGFpbmVyVmlzaWJsZVRvcCkge1xuICAgICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBpdGVtVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1Cb3R0b20gPiBjb250YWluZXJWaXNpYmxlQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IGl0ZW1Cb3R0b20gLSBzY3JvbGxDb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi50YWInLCBbJyRldmVudCddKVxuICBfb25UYWIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgX29uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gIF9vbkZvY3VzKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICB9XG5cbiAgX29uUG9wb3ZlcldpbGxIaWRlKCkge1xuICAgIHRoaXMuc3RhdGUgPSBPcGVuU3RhdGUuY2xvc2VkO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJylcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lc2NhcGUnKVxuICBfb25FbnRlck9yRXNjYXBlKCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIF9vblBvcG92ZXJDbGljayhldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXG4gIF9vbkJsdXIoZXZlbnQ/OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKHRoaXMudXNlUG9wb3ZlcikgcmV0dXJuO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uc3BhY2UnLCBbJyRldmVudCddKVxuICBfb25TcGFjZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pXG4gIF9vbkVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3VwJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93bGVmdCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dyaWdodCcsIFsnJGV2ZW50J10pXG4gIF9vbkFycm93S2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgLy8gTWlycm9yIGRlZmF1bHQgSFRNTDUgc2VsZWN0IGJlaGF2aW91ciAtIHByZXZlbnQgbGVmdC9yaWdodCBhcnJvd3Mgd2hlbiBvcGVuOlxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmtleWJvYXJkSGFuZGxlclNlcnZpY2UuaGFuZGxlKGV2ZW50LCB0aGlzLml0ZW1zLCB0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgIGlmIChuZXdJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0obmV3SW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmhvbWUnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVuZCcsIFsnJGV2ZW50J10pXG4gIF9vbkhvbWVFbmRLZXlzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMua2V5Ym9hcmRIYW5kbGVyU2VydmljZS5oYW5kbGUoZXZlbnQsIHRoaXMuaXRlbXMsIHRoaXMuc2VsZWN0ZWRJbmRleCk7XG4gICAgaWYgKG5ld0luZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0SXRlbShuZXdJbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGxldCB1bmxpc3RlbjogKCkgPT4gdm9pZDtcbiAgICB3aGlsZSAoKHVubGlzdGVuID0gdGhpcy5pdGVtQ2xpY2tVbmxpc3Rlbi5wb3AoKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5saXN0ZW4oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYpIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGJ1dHRvblxuICBraXJieS1idXR0b25cbiAgW3NpemVdPVwic2l6ZVwiXG4gIFthdHRlbnRpb25MZXZlbF09XCJpc09wZW4gPyBhdHRlbnRpb25MZXZlbE9wZW4gOiBhdHRlbnRpb25MZXZlbFwiXG4gIHRhYmluZGV4PVwiLTFcIlxuICAoY2xpY2spPVwib25Ub2dnbGUoJGV2ZW50KVwiXG4gIChtb3VzZWRvd24pPVwib25CdXR0b25Nb3VzZUV2ZW50KCRldmVudClcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICB0eXBlPVwiYnV0dG9uXCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJ0ZXh0XCI+e3sgc2VsZWN0ZWRUZXh0IHx8IHBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICA8a2lyYnktaWNvbiBbbmFtZV09XCJpc09wZW4gPyAnYXJyb3ctdXAnIDogJ2Fycm93LWRvd24nXCI+PC9raXJieS1pY29uPlxuPC9idXR0b24+XG5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VQb3BvdmVyID8gcG9wb3ZlclRlbXBsYXRlIDogaXRlbVdyYXBwZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3BvcG92ZXJUZW1wbGF0ZT5cbiAgPGtpcmJ5LXBvcG92ZXJcbiAgICBbdGFyZ2V0XT1cImJ1dHRvbkVsZW1lbnRcIlxuICAgIFtwb3BvdXRdPVwicG9wb3V0XCJcbiAgICAoY2xpY2spPVwiX29uUG9wb3ZlckNsaWNrKCRldmVudClcIlxuICAgICh3aWxsSGlkZSk9XCJfb25Qb3BvdmVyV2lsbEhpZGUoKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVdyYXBwZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2tpcmJ5LXBvcG92ZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1XcmFwcGVyVGVtcGxhdGU+XG4gIDxraXJieS1jYXJkPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBpdGVtVGVtcGxhdGUgfHwgZGVmYXVsdEl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgc2VsZWN0ZWQ6IGkgPT09IHNlbGVjdGVkSW5kZXgsIGluZGV4OiBpIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9raXJieS1jYXJkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SXRlbVRlbXBsYXRlIGxldC1pdGVtIGxldC1zZWxlY3RlZD1cInNlbGVjdGVkXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgPGtpcmJ5LWl0ZW0gW3NlbGVjdGFibGVdPVwidHJ1ZVwiIFtzZWxlY3RlZF09XCJzZWxlY3RlZFwiIChjbGljayk9XCJvbkl0ZW1TZWxlY3QoaW5kZXgpXCIgcm9sZT1cIm9wdGlvblwiPlxuICAgIDwhLS0gVGFiaW5kZXggZml4ZXMgaXNzdWUgd2l0aCBwb3BvdmVyIGRyb3Bkb3duIG5vdCB3b3JraW5nIGluIHNhZmFyaSAtLT5cbiAgICA8aDMgdGFiaW5kZXg9XCIwXCI+e3sgZ2V0VGV4dEZyb21JdGVtKGl0ZW0pIH19PC9oMz5cbiAgICA8a2lyYnktaWNvbiAqbmdJZj1cInNlbGVjdGVkXCIgbmFtZT1cImNoZWNrbWFyay1zZWxlY3RlZFwiIHNsb3Q9XCJlbmRcIj48L2tpcmJ5LWljb24+XG4gIDwva2lyYnktaXRlbT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
541
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckYsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7QUFjcEUsTUFBTSxPQUFPLGlCQUFpQjtJQXVLNUIsWUFDVSxRQUFtQixFQUNuQixVQUFtQyxFQUNuQyxpQkFBb0MsRUFDcEMsc0JBQThDO1FBSDlDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBektoRCxVQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN6Qix3QkFBbUIsR0FDekIsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBQ3BCLHNCQUFpQixHQUErQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFFdkYsV0FBTSxHQUFxQixFQUFFLENBQUM7UUFVOUIsbUJBQWMsR0FBVyxDQUFDLENBQUMsQ0FBQztRQWFwQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUM7UUFHMUIsZ0JBQVcsR0FBRyxnQkFBZ0IsQ0FBQztRQVcvQixtQkFBYyxHQUEwQixHQUFHLENBQUM7UUFDbkMsdUJBQWtCLEdBQUcsR0FBRyxDQUFDO1FBTWxDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFZakIsU0FBSSxHQUFnQixJQUFJLENBQUM7UUFHekIsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUliLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFhbkI7O1dBRUc7UUFDTyxXQUFNLEdBQStCLElBQUksWUFBWSxFQUFnQixDQUFDO1FBRXhFLFdBQU0sR0FBaUIsSUFBSSxDQUFDO1FBZXBDLFVBQUssR0FBRyxTQUFTLENBQUM7UUE0RFYsc0JBQWlCLEdBQW1CLEVBQUUsQ0FBQztRQTBKdkMsY0FBUyxHQUF5QixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDM0MsZUFBVSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQWxKM0IsQ0FBQztJQXBLSixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQXVCO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3ZELENBQUM7SUFHRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQWEsYUFBYSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLEtBQUssRUFBRTtZQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQztTQUN0RDtJQUNILENBQUM7SUFRRCxJQUFhLE1BQU0sQ0FBQyxTQUF5RDtRQUMzRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQVlELElBQ0ksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQWdCRCxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVFELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFDSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQztJQUNqQyxDQUFDO0lBS0QsSUFDSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixLQUFLLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBZ0JELElBQ0ksaUJBQWlCLENBQUMsVUFBOEM7UUFDbEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDaEM7UUFFRCxvREFBb0Q7UUFDcEQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQWFELFFBQVEsQ0FBQyxLQUFpQjtRQUN4QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQVk7UUFDN0Isd0JBQXdCO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7d0JBQ29CO0lBQ1osbUJBQW1CLENBQUMsS0FBYSxFQUFFLEtBQWE7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUU3QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQzlCLEtBQUssRUFDTCxLQUFLLEVBQ0wsbUJBQW1CLENBQUMsUUFBUSxDQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUU7WUFDOUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDakMsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FBQztZQUNGLE1BQU0sUUFBUSxHQUFpQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN6RCxxQ0FBcUM7Z0JBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFO29CQUNwQyxPQUFPO2lCQUNSO2dCQUVELDZDQUE2QztnQkFDN0MsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO29CQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEM7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekMsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksb0JBQW9CLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFnQztRQUM3RCxtSkFBbUo7UUFDbkosNkVBQTZFO1FBQzdFLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLG1CQUFtQixDQUFDLEtBQUssRUFBRTtZQUMxRCxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7YUFDckQ7U0FDRjthQUFNO1lBQ0wsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUN6RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2FBQ3REO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBZ0M7UUFDM0QsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNwQyxtRUFBbUU7WUFDbkUsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7U0FDakQ7UUFDRCxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDN0QseUdBQXlHO1lBQ3pHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDckYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMscUJBQXFCO1lBQ3hDLDhDQUE4QztZQUM5QyxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLE9BQU8sRUFBRTtnQkFDNUQsZ0JBQWdCO2dCQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2FBQy9DO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDL0IsNkZBQTZGO1lBQzdGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLENBQ3JDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFDekIsaUJBQWlCLENBQUMsZ0JBQWdCLENBQ25DLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQzlCLHNDQUFzQztZQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQ2hELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBS0Q7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUUsVUFBbUI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFhO1FBQzlCLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFtQjtRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBa0I7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNO1lBQ3JELENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNuQyxNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFJLGlCQUFpQixJQUFJLGlCQUFpQixDQUFDLGFBQWEsRUFBRTtnQkFDeEQsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDO2dCQUNwRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztnQkFDdkQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztnQkFDdEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO2dCQUNwRSxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3RELE1BQU0sc0JBQXNCLEdBQUcsZUFBZSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUN4RixJQUFJLE9BQU8sR0FBRyxtQkFBbUIsRUFBRTtvQkFDakMsZUFBZSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7aUJBQ3JDO3FCQUFNLElBQUksVUFBVSxHQUFHLHNCQUFzQixFQUFFO29CQUM5QyxlQUFlLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDO2lCQUN2RTthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBR0QsTUFBTSxDQUFDLEtBQW9CO1FBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDtJQUNILENBQUM7SUFHRCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNsQztJQUNILENBQUM7SUFHRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUlELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFHRCxPQUFPLENBQUMsS0FBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFHRCxRQUFRLENBQUMsS0FBb0I7UUFDM0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFHRCxRQUFRLENBQUMsS0FBb0I7UUFDM0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQU1ELFlBQVksQ0FBQyxLQUFvQjtRQUMvQixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQiwrRUFBK0U7UUFDL0UsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxZQUFZLENBQUMsRUFBRTtZQUM1RSxPQUFPO1NBQ1I7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBSUQsY0FBYyxDQUFDLEtBQW9CO1FBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNGLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxZQUF3QixDQUFDO1FBQzdCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQ2xFLFlBQVksRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDM0M7SUFDSCxDQUFDOztBQTFmZSxrQ0FBZ0IsR0FBRyxHQUFJLENBQUE7aUlBRDVCLGlCQUFpQjtxSEFBakIsaUJBQWlCLDh4Q0FSakI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBQztZQUNoRCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0Ysb0VBK0hhLHlCQUF5QiwyQkFBd0IsV0FBVyw2REFFekQseUJBQXlCLFFBQVUsVUFBVSxvREFZN0MsYUFBYSxRQUFVLFVBQVUsMEVBVnZDLGFBQWEsMkJBQVUsVUFBVSx1REFFakMsZ0JBQWdCLGdGQUVoQixlQUFlLDJCQUF3QixVQUFVLGtFQUU5QyxhQUFhLDJCQUFVLFVBQVUsNkJDbkxqRCw4b0RBK0NBOzJGREhhLGlCQUFpQjtrQkFaN0IsU0FBUzsrQkFDRSxnQkFBZ0IsYUFHZjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBQzs0QkFDaEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OExBY1ksS0FBSztzQkFBakIsS0FBSztnQkFVTyxhQUFhO3NCQUF6QixLQUFLO2dCQVFOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFHTyxNQUFNO3NCQUFsQixLQUFLO2dCQVNOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlGLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxlQUFlO2dCQU81QixRQUFRO3NCQUZQLFdBQVc7dUJBQUMsYUFBYTs7c0JBQ3pCLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixVQUFVO3NCQUZULFdBQVc7dUJBQUMsb0JBQW9COztzQkFDaEMsS0FBSztnQkFJRixTQUFTO3NCQURaLFdBQVc7dUJBQUMsZUFBZTtnQkFPeEIsZUFBZTtzQkFEbEIsV0FBVzt1QkFBQyxjQUFjO2dCQVFqQixNQUFNO3NCQUFmLE1BQU07Z0JBWUgsYUFBYTtzQkFEaEIsV0FBVzt1QkFBQyxjQUFjO2dCQU0zQixLQUFLO3NCQURKLFdBQVc7dUJBQUMsV0FBVztnQkFJcEIsVUFBVTtzQkFEYixXQUFXO3VCQUFDLGtCQUFrQjtnQkFNM0IsTUFBTTtzQkFEVCxXQUFXO3VCQUFDLGVBQWU7Z0JBTXhCLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBTTVCLFNBQVM7c0JBRFosV0FBVzt1QkFBQyxpQkFBaUI7Z0JBTTlCLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHNUUsWUFBWTtzQkFEWCxlQUFlO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFHaEUsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBRzlDLE9BQU87c0JBRE4sU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBRzNCLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBRzlELGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUs3QyxpQkFBaUI7c0JBRHBCLGVBQWU7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkEyUXBELE1BQU07c0JBREwsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU3ZDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU3JDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxPQUFPO2dCQWNyQixnQkFBZ0I7c0JBRmYsWUFBWTt1QkFBQyxlQUFlOztzQkFDNUIsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBVzlCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUWhDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVXpDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV3pDLFlBQVk7c0JBSlgsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQzFDLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUM1QyxZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDNUMsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFnQjlDLGNBQWM7c0JBRmIsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUN2QyxZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuLi9jYXJkL2NhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9pdGVtL2l0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9saXN0L2xpc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IEhvcml6b250YWxEaXJlY3Rpb24sIFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50JztcblxuaW1wb3J0IHsgT3BlblN0YXRlLCBWZXJ0aWNhbERpcmVjdGlvbiB9IGZyb20gJy4vZHJvcGRvd24udHlwZXMnO1xuaW1wb3J0IHsgS2V5Ym9hcmRIYW5kbGVyU2VydmljZSB9IGZyb20gJy4va2V5Ym9hcmQtaGFuZGxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERyb3Bkb3duQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHN0YXRpYyByZWFkb25seSBPUEVOX0RFTEFZX0lOX01TID0gMTAwO1xuICBwcml2YXRlIHN0YXRlID0gT3BlblN0YXRlLmNsb3NlZDtcbiAgcHJpdmF0ZSBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsRGlyZWN0aW9uIHwgYCR7SG9yaXpvbnRhbERpcmVjdGlvbn1gID1cbiAgICBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICBwcml2YXRlIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbERpcmVjdGlvbiB8IGAke1ZlcnRpY2FsRGlyZWN0aW9ufWAgPSBWZXJ0aWNhbERpcmVjdGlvbi5kb3duO1xuXG4gIHByaXZhdGUgX2l0ZW1zOiBzdHJpbmdbXSB8IGFueVtdID0gW107XG4gIGdldCBpdGVtcygpOiBzdHJpbmdbXSB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IHN0cmluZ1tdIHwgYW55W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXIgPSAtMTtcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRJbmRleCAhPSB2YWx1ZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IHZhbHVlO1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRJbmRleF0gfHwgbnVsbDtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBpdGVtVGV4dFByb3BlcnR5ID0gJ3RleHQnO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyID0gJ1BsZWFzZSBzZWxlY3Q6JztcblxuICBASW5wdXQoKSBzZXQgcG9wb3V0KGRpcmVjdGlvbjogSG9yaXpvbnRhbERpcmVjdGlvbiB8IGAke0hvcml6b250YWxEaXJlY3Rpb259YCkge1xuICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICB9XG5cbiAgZ2V0IHBvcG91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uO1xuICB9XG5cbiAgQElucHV0KClcbiAgYXR0ZW50aW9uTGV2ZWw6ICcxJyB8ICcyJyB8ICczJyB8ICc0JyA9ICczJztcbiAgcmVhZG9ubHkgYXR0ZW50aW9uTGV2ZWxPcGVuID0gJzInO1xuXG4gIEBJbnB1dCgpXG4gIGV4cGFuZD86ICdibG9jayc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgX2lzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXJyb3InKVxuICBASW5wdXQoKVxuICBoYXNFcnJvcjogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzaXplOiAnc20nIHwgJ21kJyA9ICdtZCc7XG5cbiAgQElucHV0KClcbiAgdGFiaW5kZXggPSAwO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2l0aC1wb3BvdmVyJylcbiAgQElucHV0KClcbiAgdXNlUG9wb3ZlciA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gIGdldCBfdGFiaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMudGFiaW5kZXg7XG4gIH1cblxuICAvLyBQcmV2ZW50IElvbmljIGJsdXIgb24gc2Nyb2xsXG4gIEBIb3N0QmluZGluZygnYXR0ci5uby1ibHVyJylcbiAgZ2V0IF9ub0JsdXJPblNjcm9sbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCAodGFwIG9uIG1vYmlsZSwgY2xpY2sva2V5cHJlc3Mgb24gd2ViKVxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4oKTtcblxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgYW55ID0gbnVsbDtcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFRleHRGcm9tSXRlbSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXhwYW5kJylcbiAgZ2V0IF9pc0Jsb2NrTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kID09PSAnYmxvY2snO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBfcm9sZSA9ICdsaXN0Ym94JztcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW5pbmcnKVxuICBnZXQgX2lzT3BlbmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gT3BlblN0YXRlLm9wZW5pbmc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW4nKVxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBPcGVuU3RhdGUub3BlbjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9wb3V0LWxlZnQnKVxuICBnZXQgX3BvcG91dExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9PT0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wb3BvdXQtdXAnKVxuICBnZXQgX3BvcG91dFVwKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsRGlyZWN0aW9uID09PSBWZXJ0aWNhbERpcmVjdGlvbi51cDtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZHJlbihMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgc2xvdHRlZEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICBAVmlld0NoaWxkKENhcmRDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjYXJkRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbXBvbmVudClcbiAgcG9wb3Zlcj86IFBvcG92ZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoQnV0dG9uQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBidXR0b25FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbihJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAga2lyYnlJdGVtc0RlZmF1bHQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cbiAgX2tpcmJ5SXRlbXNTbG90dGVkOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICBAQ29udGVudENoaWxkcmVuKEl0ZW1Db21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBzZXQga2lyYnlJdGVtc1Nsb3R0ZWQoa2lyYnlJdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pikge1xuICAgIGNvbnN0IGhhc1Nsb3R0ZWRJdGVtcyA9IHRoaXMuaXRlbUNsaWNrVW5saXN0ZW4/Lmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc1Nsb3R0ZWRJdGVtcykge1xuICAgICAgdGhpcy51bmxpc3RlbkFsbFNsb3R0ZWRJdGVtcygpO1xuICAgIH1cblxuICAgIC8vIFNldHVwIGEgY2xpY2sgbGlzdGVuZXIgZm9yIGVhY2ggbmV3IHNsb3R0ZWQgaXRlbXNcbiAgICBraXJieUl0ZW1zLmZvckVhY2goKGtpcmJ5SXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50LCAncm9sZScsICdvcHRpb24nKTtcbiAgICAgIGNvbnN0IHVubGlzdGVuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oa2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5vbkl0ZW1TZWxlY3QoaW5kZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXRlbUNsaWNrVW5saXN0ZW4ucHVzaCh1bmxpc3Rlbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9raXJieUl0ZW1zU2xvdHRlZCA9IGtpcmJ5SXRlbXM7XG4gIH1cblxuICBnZXQga2lyYnlJdGVtc1Nsb3R0ZWQoKTogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2tpcmJ5SXRlbXNTbG90dGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpdGVtQ2xpY2tVbmxpc3RlbjogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSBpbnRlcnNlY3Rpb25PYnNlcnZlclJlZjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgc2hvd0Ryb3Bkb3duVGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGtleWJvYXJkSGFuZGxlclNlcnZpY2U6IEtleWJvYXJkSGFuZGxlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzT3BlbiA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICB9XG5cbiAgb25CdXR0b25Nb3VzZUV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIC8vIFByZXZlbnQgYnV0dG9uIGZvY3VzO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKiBVdGlsaXR5IHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHNldCBzdHlsZXMgb24gY2FyZCBlbGVtZW50IFxuICB3aGVuIHVzaW5nIHBvcG92ZXIqL1xuICBwcml2YXRlIHNldFBvcG92ZXJDYXJkU3R5bGUoc3R5bGU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy51c2VQb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgdGhpcy5jYXJkRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgc3R5bGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuRGFzaENhc2VcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnVzZVBvcG92ZXIgJiYgdGhpcy5leHBhbmQgPT09ICdibG9jaycpIHtcbiAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCctLWtpcmJ5LWNhcmQtd2lkdGgnLCBgJHt3aWR0aH1weGApO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCdtYXgtd2lkdGgnLCAnaW5pdGlhbCcpO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCdtaW4td2lkdGgnLCAnaW5pdGlhbCcpO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVBbGlnbm1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFsaWdubWVudCgpIHtcbiAgICBpZiAodGhpcy51c2VQb3BvdmVyKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByb290TWFyZ2luOiAnMHB4JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChlbnRyaWVzKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgYXBwbHkgYWxpZ25tZW50IHdoZW4gb3BlbmluZzpcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IE9wZW5TdGF0ZS5vcGVuaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHRpbWVyIHRvIHNob3cgZHJvcGRvd246XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dEcm9wZG93blRpbWVvdXRJZCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LndpZHRoID4gMDtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSAmJiBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA8IDEpIHtcbiAgICAgICAgICB0aGlzLnNldEhvcml6b250YWxEaXJlY3Rpb24oZW50cnkpO1xuICAgICAgICAgIHRoaXMuc2V0VmVydGljYWxEaXJlY3Rpb24oZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZi5vYnNlcnZlKHRoaXMuY2FyZEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3Jpem9udGFsRGlyZWN0aW9uKGVudHJ5OiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KSB7XG4gICAgLy8gSWYgcG9wb3V0IGRpcmVjdGlvbiBpcyBzZXQgdG8gcmlnaHQsIGFuZCB0aGUgZW50cnkgaXMgY3V0IG9mZiB0byB0aGUgcmlnaHQgYnkgJHtlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LnJpZ2h0fXB4XG4gICAgLy8gaXQgaXMgc2V0IHRvIHBvcG91dCBsZWZ0IGluc3RlYWQsIGFuZCB2aWNlIHZlcnNhIGZvciBwb3BvdXQgZGlyZWN0aW9uIGxlZnRcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uID09PSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0KSB7XG4gICAgICBpZiAoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gZW50cnkucm9vdEJvdW5kcy5yaWdodCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QubGVmdCA8IGVudHJ5LnJvb3RCb3VuZHMubGVmdCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmVydGljYWxEaXJlY3Rpb24oZW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpIHtcbiAgICBpZiAoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnRvcCA8IDApIHtcbiAgICAgIC8vIGVudHJ5IGlzIGN1dCBvZmYgYXQgdGhlIHRvcCBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC50b3B9cHhcbiAgICAgIC8vIG9wZW4gZG93bndhcmRzOlxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgfVxuICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tID4gZW50cnkucm9vdEJvdW5kcy5ib3R0b20pIHtcbiAgICAgIC8vIGVudHJ5IGlzIGN1dCBvZmYgYXQgdGhlIGJvdHRvbSBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gLSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LmJvdHRvbX1weFxuICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0VG9wID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgY29uc3QgU1BBQ0lORyA9IDU7IC8vVE9ETzogR2V0IGZyb20gU0NTU1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNhcmQgY2FuIGZpdCBvbiB0b3Agb2YgYnV0dG9uOlxuICAgICAgaWYgKGNvbnRhaW5lck9mZnNldFRvcCA+IGVudHJ5LnRhcmdldC5jbGllbnRIZWlnaHQgKyBTUEFDSU5HKSB7XG4gICAgICAgIC8vIG9wZW4gdXB3YXJkczpcbiAgICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLnVwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5vcGVuaW5nO1xuICAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBkcm9wZG93biBpcyBvcGVuZWQgaW4gY2FzZSB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayBpc24ndCBpbnZva2VkXG4gICAgICB0aGlzLnNob3dEcm9wZG93blRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHRoaXMuc2hvd0Ryb3Bkb3duKCksXG4gICAgICAgIERyb3Bkb3duQ29tcG9uZW50Lk9QRU5fREVMQVlfSU5fTVNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RHJvcGRvd24oKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IE9wZW5TdGF0ZS5vcGVuaW5nKSB7XG4gICAgICB0aGlzLnN0YXRlID0gT3BlblN0YXRlLm9wZW47XG4gICAgICB0aGlzLnBvcG92ZXI/LnNob3coKTtcbiAgICAgIHRoaXMuc2Nyb2xsSXRlbUludG9WaWV3KHRoaXMuc2VsZWN0ZWRJbmRleCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5jbG9zZWQ7XG4gICAgICAvLyBSZXNldCB2ZXJ0aWNhbCBkaXJlY3Rpb24gdG8gZGVmYXVsdFxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgICB0aGlzLnBvcG92ZXI/LmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkl0ZW1TZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3QncyB2YWx1ZS4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqIHJlcXVpcmVkIHRvIGludGVncmF0ZSB3aXRoIEFuZ3VsYXIncyBjb3JlIGZvcm1zIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdEl0ZW1CeVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgc2VsZWN0J3MgdmFsdWVcbiAgICogY2hhbmdlcyBmcm9tIHVzZXIgaW5wdXQuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgKiByZXF1aXJlZCB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdoZW4gdGhlIHNlbGVjdCBpcyBibHVycmVkXG4gICAqIGJ5IHRoZSB1c2VyLiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgcmVxdWlyZWRcbiAgICogdG8gaW50ZWdyYXRlIHdpdGggQW5ndWxhcidzIGNvcmUgZm9ybXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBzZWxlY3QuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSByZXF1aXJlZFxuICAgKiB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFNldHMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT0gdGhpcy5zZWxlY3RlZEluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuc2Nyb2xsSXRlbUludG9WaWV3KGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RJdGVtQnlWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHZhbHVlKTtcbiAgfVxuXG4gIGdldFRleHRGcm9tSXRlbShpdGVtOiBzdHJpbmcgfCBhbnkpIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW1bdGhpcy5pdGVtVGV4dFByb3BlcnR5XTtcbiAgfVxuXG4gIHNjcm9sbEl0ZW1JbnRvVmlldyhpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qga2lyYnlJdGVtcyA9XG4gICAgICB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkICYmIHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQubGVuZ3RoXG4gICAgICAgID8gdGhpcy5raXJieUl0ZW1zU2xvdHRlZFxuICAgICAgICA6IHRoaXMua2lyYnlJdGVtc0RlZmF1bHQ7XG4gICAgaWYgKGtpcmJ5SXRlbXMgJiYga2lyYnlJdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkS2lyYnlJdGVtID0ga2lyYnlJdGVtcy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgaWYgKHNlbGVjdGVkS2lyYnlJdGVtICYmIHNlbGVjdGVkS2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSBzZWxlY3RlZEtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLmNhcmRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1Ub3AgPSBpdGVtRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGl0ZW1Cb3R0b20gPSBpdGVtRWxlbWVudC5vZmZzZXRUb3AgKyBpdGVtRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclZpc2libGVUb3AgPSBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBjb250YWluZXJWaXNpYmxlQm90dG9tID0gc2Nyb2xsQ29udGFpbmVyLmNsaWVudEhlaWdodCArIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGlmIChpdGVtVG9wIDwgY29udGFpbmVyVmlzaWJsZVRvcCkge1xuICAgICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBpdGVtVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1Cb3R0b20gPiBjb250YWluZXJWaXNpYmxlQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IGl0ZW1Cb3R0b20gLSBzY3JvbGxDb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi50YWInLCBbJyRldmVudCddKVxuICBfb25UYWIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgX29uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gIF9vbkZvY3VzKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICB9XG5cbiAgX29uUG9wb3ZlcldpbGxIaWRlKCkge1xuICAgIHRoaXMuc3RhdGUgPSBPcGVuU3RhdGUuY2xvc2VkO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJylcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lc2NhcGUnKVxuICBfb25FbnRlck9yRXNjYXBlKCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIF9vblBvcG92ZXJDbGljayhldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXG4gIF9vbkJsdXIoZXZlbnQ/OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKHRoaXMudXNlUG9wb3ZlcikgcmV0dXJuO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uc3BhY2UnLCBbJyRldmVudCddKVxuICBfb25TcGFjZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pXG4gIF9vbkVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3VwJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93bGVmdCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dyaWdodCcsIFsnJGV2ZW50J10pXG4gIF9vbkFycm93S2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgLy8gTWlycm9yIGRlZmF1bHQgSFRNTDUgc2VsZWN0IGJlaGF2aW91ciAtIHByZXZlbnQgbGVmdC9yaWdodCBhcnJvd3Mgd2hlbiBvcGVuOlxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmtleWJvYXJkSGFuZGxlclNlcnZpY2UuaGFuZGxlKGV2ZW50LCB0aGlzLml0ZW1zLCB0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgIGlmIChuZXdJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0obmV3SW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmhvbWUnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVuZCcsIFsnJGV2ZW50J10pXG4gIF9vbkhvbWVFbmRLZXlzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMua2V5Ym9hcmRIYW5kbGVyU2VydmljZS5oYW5kbGUoZXZlbnQsIHRoaXMuaXRlbXMsIHRoaXMuc2VsZWN0ZWRJbmRleCk7XG4gICAgaWYgKG5ld0luZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0SXRlbShuZXdJbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdW5saXN0ZW5BbGxTbG90dGVkSXRlbXMoKSB7XG4gICAgbGV0IHVubGlzdGVuSXRlbTogKCkgPT4gdm9pZDtcbiAgICB3aGlsZSAoKHVubGlzdGVuSXRlbSA9IHRoaXMuaXRlbUNsaWNrVW5saXN0ZW4ucG9wKCkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVubGlzdGVuSXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5saXN0ZW5BbGxTbG90dGVkSXRlbXMoKTtcbiAgICBpZiAodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZikge1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZi5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG4gIGtpcmJ5LWJ1dHRvblxuICBbc2l6ZV09XCJzaXplXCJcbiAgW2F0dGVudGlvbkxldmVsXT1cImlzT3BlbiA/IGF0dGVudGlvbkxldmVsT3BlbiA6IGF0dGVudGlvbkxldmVsXCJcbiAgdGFiaW5kZXg9XCItMVwiXG4gIChjbGljayk9XCJvblRvZ2dsZSgkZXZlbnQpXCJcbiAgKG1vdXNlZG93bik9XCJvbkJ1dHRvbk1vdXNlRXZlbnQoJGV2ZW50KVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIHR5cGU9XCJidXR0b25cIlxuPlxuICA8c3BhbiBjbGFzcz1cInRleHRcIj57eyBzZWxlY3RlZFRleHQgfHwgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gIDxraXJieS1pY29uIFtuYW1lXT1cImlzT3BlbiA/ICdhcnJvdy11cCcgOiAnYXJyb3ctZG93bidcIj48L2tpcmJ5LWljb24+XG48L2J1dHRvbj5cblxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVzZVBvcG92ZXIgPyBwb3BvdmVyVGVtcGxhdGUgOiBpdGVtV3JhcHBlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3ZlclRlbXBsYXRlPlxuICA8a2lyYnktcG9wb3ZlclxuICAgIFt0YXJnZXRdPVwiYnV0dG9uRWxlbWVudFwiXG4gICAgW3BvcG91dF09XCJwb3BvdXRcIlxuICAgIChjbGljayk9XCJfb25Qb3BvdmVyQ2xpY2soJGV2ZW50KVwiXG4gICAgKHdpbGxIaWRlKT1cIl9vblBvcG92ZXJXaWxsSGlkZSgpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtV3JhcHBlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwva2lyYnktcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVdyYXBwZXJUZW1wbGF0ZT5cbiAgPGtpcmJ5LWNhcmQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGl0ZW1UZW1wbGF0ZSB8fCBkZWZhdWx0SXRlbVRlbXBsYXRlO1xuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBzZWxlY3RlZDogaSA9PT0gc2VsZWN0ZWRJbmRleCwgaW5kZXg6IGkgfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2tpcmJ5LWNhcmQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJdGVtVGVtcGxhdGUgbGV0LWl0ZW0gbGV0LXNlbGVjdGVkPVwic2VsZWN0ZWRcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICA8a2lyYnktaXRlbSBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgW3NlbGVjdGVkXT1cInNlbGVjdGVkXCIgKGNsaWNrKT1cIm9uSXRlbVNlbGVjdChpbmRleClcIiByb2xlPVwib3B0aW9uXCI+XG4gICAgPCEtLSBUYWJpbmRleCBmaXhlcyBpc3N1ZSB3aXRoIHBvcG92ZXIgZHJvcGRvd24gbm90IHdvcmtpbmcgaW4gc2FmYXJpIC0tPlxuICAgIDxoMyB0YWJpbmRleD1cIjBcIj57eyBnZXRUZXh0RnJvbUl0ZW0oaXRlbSkgfX08L2gzPlxuICAgIDxraXJieS1pY29uICpuZ0lmPVwic2VsZWN0ZWRcIiBuYW1lPVwiY2hlY2ttYXJrLXNlbGVjdGVkXCIgc2xvdD1cImVuZFwiPjwva2lyYnktaWNvbj5cbiAgPC9raXJieS1pdGVtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input, Optional, } from '@angular/core';
|
|
2
|
+
import { ModalElementComponent, ModalElementsAdvertiser, ModalElementType, } from '../services/modal.interfaces';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import * as i1 from "../services/modal.interfaces";
|
|
5
|
+
import * as i2 from "@ionic/angular";
|
|
6
|
+
export class ModalFooterComponent extends ModalElementComponent {
|
|
7
|
+
constructor(elementRef, modalElementsAdvertiser) {
|
|
8
|
+
super(ModalElementType.FOOTER, elementRef, modalElementsAdvertiser);
|
|
6
9
|
this.snapToKeyboard = false;
|
|
7
10
|
this.type = 'fixed';
|
|
8
11
|
}
|
|
9
12
|
}
|
|
10
|
-
/** @nocollapse */ ModalFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11
|
-
/** @nocollapse */ ModalFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: ModalFooterComponent, selector: "kirby-modal-footer", inputs: { snapToKeyboard: "snapToKeyboard", type: "type" }, host: { properties: { "class.snap-to-keyboard": "this.snapToKeyboard", "class": "this.type" } }, ngImport: i0, template: "<ion-footer>\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-footer{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:8px 16px;padding-bottom:calc(8px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (max-width: 720px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{background-color:var(--kirby-background-color)}:host(.inline) ion-footer{background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"], components: [{ type:
|
|
13
|
+
/** @nocollapse */ ModalFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalFooterComponent, deps: [{ token: i0.ElementRef }, { token: i1.ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
14
|
+
/** @nocollapse */ ModalFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: ModalFooterComponent, selector: "kirby-modal-footer", inputs: { snapToKeyboard: "snapToKeyboard", type: "type" }, host: { properties: { "class.snap-to-keyboard": "this.snapToKeyboard", "class": "this.type" } }, usesInheritance: true, ngImport: i0, template: "<ion-footer>\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-footer{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:8px 16px;padding-bottom:calc(8px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (max-width: 720px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{background-color:var(--kirby-background-color)}:host(.inline) ion-footer{background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"], components: [{ type: i2.IonFooter, selector: "ion-footer", inputs: ["mode", "translucent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
12
15
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: ModalFooterComponent, decorators: [{
|
|
13
16
|
type: Component,
|
|
14
17
|
args: [{ selector: 'kirby-modal-footer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-footer>\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-footer{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:8px 16px;padding-bottom:calc(8px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (max-width: 720px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{background-color:var(--kirby-background-color)}:host(.inline) ion-footer{background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"] }]
|
|
15
|
-
}],
|
|
18
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ModalElementsAdvertiser, decorators: [{
|
|
19
|
+
type: Optional
|
|
20
|
+
}] }]; }, propDecorators: { snapToKeyboard: [{
|
|
16
21
|
type: HostBinding,
|
|
17
22
|
args: ['class.snap-to-keyboard']
|
|
18
23
|
}, {
|
|
@@ -23,4 +28,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
|
23
28
|
}, {
|
|
24
29
|
type: Input
|
|
25
30
|
}] } });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZm9vdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9tb2RhbC9mb290ZXIvbW9kYWwtZm9vdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9tb2RhbC9mb290ZXIvbW9kYWwtZm9vdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUVMLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2QixnQkFBZ0IsR0FDakIsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQVF0QyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEscUJBQXFCO0lBUzdELFlBQ0UsVUFBbUMsRUFDdkIsdUJBQWdEO1FBRTVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFWdEUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFJdkIsU0FBSSxHQUF1QixPQUFPLENBQUM7SUFPbkMsQ0FBQzs7b0lBZFUsb0JBQW9CO3dIQUFwQixvQkFBb0IsOE9DdkJqQyw0REFHQTsyRkRvQmEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNOzswQkFhNUMsUUFBUTs0Q0FSWCxjQUFjO3NCQUZiLFdBQVc7dUJBQUMsd0JBQXdCOztzQkFDcEMsS0FBSztnQkFLTixJQUFJO3NCQUZILFdBQVc7dUJBQUMsT0FBTzs7c0JBQ25CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBNb2RhbEVsZW1lbnRDb21wb25lbnQsXG4gIE1vZGFsRWxlbWVudHNBZHZlcnRpc2VyLFxuICBNb2RhbEVsZW1lbnRUeXBlLFxufSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RhbC5pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktbW9kYWwtZm9vdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLWZvb3Rlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLWZvb3Rlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxGb290ZXJDb21wb25lbnQgZXh0ZW5kcyBNb2RhbEVsZW1lbnRDb21wb25lbnQge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNuYXAtdG8ta2V5Ym9hcmQnKVxuICBASW5wdXQoKVxuICBzbmFwVG9LZXlib2FyZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBASW5wdXQoKVxuICB0eXBlOiAnaW5saW5lJyB8ICdmaXhlZCcgPSAnZml4ZWQnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIEBPcHRpb25hbCgpIG1vZGFsRWxlbWVudHNBZHZlcnRpc2VyOiBNb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlclxuICApIHtcbiAgICBzdXBlcihNb2RhbEVsZW1lbnRUeXBlLkZPT1RFUiwgZWxlbWVudFJlZiwgbW9kYWxFbGVtZW50c0FkdmVydGlzZXIpO1xuICB9XG59XG4iLCI8aW9uLWZvb3Rlcj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9pb24tZm9vdGVyPlxuIl19
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
/*
|
|
3
|
+
The ModalWrapperComponent class was growing large.
|
|
4
|
+
|
|
5
|
+
Hence the functions responsible for moving modal elements around
|
|
6
|
+
has been encapsulated in this class.
|
|
7
|
+
*/
|
|
8
|
+
export class ModalElementsMoverDelegate {
|
|
9
|
+
constructor(renderer, elementRef) {
|
|
10
|
+
this.renderer = renderer;
|
|
11
|
+
this.elementRef = elementRef;
|
|
12
|
+
}
|
|
13
|
+
addFooter(footerElementRef) {
|
|
14
|
+
// Move the footer next to ion-content
|
|
15
|
+
this.moveChild(footerElementRef, this.elementRef);
|
|
16
|
+
}
|
|
17
|
+
removeFooter(footerElementRef) {
|
|
18
|
+
this.removeChild(footerElementRef);
|
|
19
|
+
}
|
|
20
|
+
addPageProgress(pageProgressElementRef, ionToolbarElement) {
|
|
21
|
+
this.moveChild(pageProgressElementRef, ionToolbarElement);
|
|
22
|
+
}
|
|
23
|
+
removePageProgress(pageProgressElementRef) {
|
|
24
|
+
this.removeChild(pageProgressElementRef);
|
|
25
|
+
}
|
|
26
|
+
/*
|
|
27
|
+
contentTitleElement & ionTitleElement has to be passed
|
|
28
|
+
as arguments to the method; not part of the constructor, as they
|
|
29
|
+
might reference completely different elements between calls.
|
|
30
|
+
|
|
31
|
+
For example in a multi-page routed modal where the elements are destroyed
|
|
32
|
+
and recreated.
|
|
33
|
+
*/
|
|
34
|
+
addTitle(titleElementRef, contentTitleElement, hasCollapsibleTitle, ionTitleElement) {
|
|
35
|
+
this.moveChild(titleElementRef, ionTitleElement);
|
|
36
|
+
// If title is collapsible append it to content area; required by ionic implementation.
|
|
37
|
+
if (hasCollapsibleTitle) {
|
|
38
|
+
const titleElementClone = titleElementRef.nativeElement.cloneNode(true);
|
|
39
|
+
this.moveChild(new ElementRef(titleElementClone), contentTitleElement);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
removeTitle(titleElementRef, hasCollapsibleTitle, contentTitleElement) {
|
|
43
|
+
this.removeChild(titleElementRef);
|
|
44
|
+
if (hasCollapsibleTitle) {
|
|
45
|
+
const kirbyPageTitleElement = contentTitleElement.nativeElement.querySelector('kirby-page-title');
|
|
46
|
+
this.removeChild(new ElementRef(kirbyPageTitleElement));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
moveChild(childElementRef, newParentElementRef) {
|
|
50
|
+
const child = childElementRef.nativeElement;
|
|
51
|
+
const newParent = newParentElementRef.nativeElement;
|
|
52
|
+
this.renderer.removeChild(child.parentElement, child);
|
|
53
|
+
this.renderer.appendChild(newParent, child);
|
|
54
|
+
}
|
|
55
|
+
removeChild(childElementRef, parentElement) {
|
|
56
|
+
const child = childElementRef.nativeElement;
|
|
57
|
+
if (!!child) {
|
|
58
|
+
this.renderer.removeChild(parentElement || child.parentElement, child);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZWxlbWVudHMtbW92ZXIuZGVsZWdhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwtd3JhcHBlci9tb2RhbC1lbGVtZW50cy1tb3Zlci5kZWxlZ2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXREOzs7OztFQUtFO0FBRUYsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFvQixRQUFtQixFQUFVLFVBQW1DO1FBQWhFLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUF5QjtJQUFHLENBQUM7SUFFakYsU0FBUyxDQUFDLGdCQUF5QztRQUN4RCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLFlBQVksQ0FBQyxnQkFBeUM7UUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxlQUFlLENBQ3BCLHNCQUErQyxFQUMvQyxpQkFBb0Q7UUFFcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxzQkFBK0M7UUFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7Ozs7OztNQU9FO0lBQ0ssUUFBUSxDQUNiLGVBQXdDLEVBQ3hDLG1CQUE0QyxFQUM1QyxtQkFBNEIsRUFDNUIsZUFBZ0Q7UUFFaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDakQsdUZBQXVGO1FBQ3ZGLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWdCLENBQUM7WUFDdkYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBRU0sV0FBVyxDQUNoQixlQUF3QyxFQUN4QyxtQkFBNEIsRUFDNUIsbUJBQTRDO1FBRTVDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEMsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLHFCQUFxQixHQUN6QixtQkFBbUIsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUNmLGVBQXdDLEVBQ3hDLG1CQUE0QztRQUU1QyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sV0FBVyxDQUNqQixlQUF3QyxFQUN4QyxhQUFxRDtRQUVyRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQzVDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3hFO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qXG4gIFRoZSBNb2RhbFdyYXBwZXJDb21wb25lbnQgY2xhc3Mgd2FzIGdyb3dpbmcgbGFyZ2UuIFxuXG4gIEhlbmNlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIG1vdmluZyBtb2RhbCBlbGVtZW50cyBhcm91bmQgXG4gIGhhcyBiZWVuIGVuY2Fwc3VsYXRlZCBpbiB0aGlzIGNsYXNzLiBcbiovXG5cbmV4cG9ydCBjbGFzcyBNb2RhbEVsZW1lbnRzTW92ZXJEZWxlZ2F0ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge31cblxuICBwdWJsaWMgYWRkRm9vdGVyKGZvb3RlckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgLy8gTW92ZSB0aGUgZm9vdGVyIG5leHQgdG8gaW9uLWNvbnRlbnRcbiAgICB0aGlzLm1vdmVDaGlsZChmb290ZXJFbGVtZW50UmVmLCB0aGlzLmVsZW1lbnRSZWYpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUZvb3Rlcihmb290ZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMucmVtb3ZlQ2hpbGQoZm9vdGVyRWxlbWVudFJlZik7XG4gIH1cblxuICBwdWJsaWMgYWRkUGFnZVByb2dyZXNzKFxuICAgIHBhZ2VQcm9ncmVzc0VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIGlvblRvb2xiYXJFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJb25Ub29sYmFyRWxlbWVudD5cbiAgKSB7XG4gICAgdGhpcy5tb3ZlQ2hpbGQocGFnZVByb2dyZXNzRWxlbWVudFJlZiwgaW9uVG9vbGJhckVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVBhZ2VQcm9ncmVzcyhwYWdlUHJvZ3Jlc3NFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMucmVtb3ZlQ2hpbGQocGFnZVByb2dyZXNzRWxlbWVudFJlZik7XG4gIH1cblxuICAvKiBcbiAgICAgY29udGVudFRpdGxlRWxlbWVudCAmIGlvblRpdGxlRWxlbWVudCBoYXMgdG8gYmUgcGFzc2VkXG4gICAgIGFzIGFyZ3VtZW50cyB0byB0aGUgbWV0aG9kOyBub3QgcGFydCBvZiB0aGUgY29uc3RydWN0b3IsIGFzIHRoZXkgXG4gICAgIG1pZ2h0IHJlZmVyZW5jZSBjb21wbGV0ZWx5IGRpZmZlcmVudCBlbGVtZW50cyBiZXR3ZWVuIGNhbGxzLiBcblxuICAgICBGb3IgZXhhbXBsZSBpbiBhIG11bHRpLXBhZ2Ugcm91dGVkIG1vZGFsIHdoZXJlIHRoZSBlbGVtZW50cyBhcmUgZGVzdHJveWVkIFxuICAgICBhbmQgcmVjcmVhdGVkLlxuICAqL1xuICBwdWJsaWMgYWRkVGl0bGUoXG4gICAgdGl0bGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBjb250ZW50VGl0bGVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBoYXNDb2xsYXBzaWJsZVRpdGxlOiBib29sZWFuLFxuICAgIGlvblRpdGxlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uVGl0bGVFbGVtZW50PlxuICApIHtcbiAgICB0aGlzLm1vdmVDaGlsZCh0aXRsZUVsZW1lbnRSZWYsIGlvblRpdGxlRWxlbWVudCk7XG4gICAgLy8gSWYgdGl0bGUgaXMgY29sbGFwc2libGUgYXBwZW5kIGl0IHRvIGNvbnRlbnQgYXJlYTsgcmVxdWlyZWQgYnkgaW9uaWMgaW1wbGVtZW50YXRpb24uXG4gICAgaWYgKGhhc0NvbGxhcHNpYmxlVGl0bGUpIHtcbiAgICAgIGNvbnN0IHRpdGxlRWxlbWVudENsb25lID0gdGl0bGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgdGhpcy5tb3ZlQ2hpbGQobmV3IEVsZW1lbnRSZWYodGl0bGVFbGVtZW50Q2xvbmUpLCBjb250ZW50VGl0bGVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlVGl0bGUoXG4gICAgdGl0bGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBoYXNDb2xsYXBzaWJsZVRpdGxlOiBib29sZWFuLFxuICAgIGNvbnRlbnRUaXRsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge1xuICAgIHRoaXMucmVtb3ZlQ2hpbGQodGl0bGVFbGVtZW50UmVmKTtcbiAgICBpZiAoaGFzQ29sbGFwc2libGVUaXRsZSkge1xuICAgICAgY29uc3Qga2lyYnlQYWdlVGl0bGVFbGVtZW50OiBIVE1MRWxlbWVudCA9XG4gICAgICAgIGNvbnRlbnRUaXRsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdraXJieS1wYWdlLXRpdGxlJyk7XG4gICAgICB0aGlzLnJlbW92ZUNoaWxkKG5ldyBFbGVtZW50UmVmKGtpcmJ5UGFnZVRpdGxlRWxlbWVudCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUNoaWxkKFxuICAgIGNoaWxkRWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgbmV3UGFyZW50RWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7XG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBuZXdQYXJlbnQgPSBuZXdQYXJlbnRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChjaGlsZC5wYXJlbnRFbGVtZW50LCBjaGlsZCk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChuZXdQYXJlbnQsIGNoaWxkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQ2hpbGQoXG4gICAgY2hpbGRFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwYXJlbnRFbGVtZW50PzogSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHtcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghIWNoaWxkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHBhcmVudEVsZW1lbnQgfHwgY2hpbGQucGFyZW50RWxlbWVudCwgY2hpbGQpO1xuICAgIH1cbiAgfVxufVxuIl19
|