@fundamental-ngx/core 0.44.0-rc.6 → 0.44.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/esm2022/action-bar/action-bar.component.mjs +3 -2
- package/esm2022/alert/alert-service/alert.service.mjs +3 -3
- package/esm2022/alert/alert-utils/alert-config.mjs +3 -2
- package/esm2022/alert/alert-utils/alert-container.component.mjs +3 -2
- package/esm2022/alert/alert-utils/alert-ref.mjs +3 -2
- package/esm2022/alert/alert.component.mjs +3 -3
- package/esm2022/alert/alert.module.mjs +3 -3
- package/esm2022/avatar/avatar.component.mjs +3 -3
- package/esm2022/bar/directives/bar-element.directive.mjs +3 -2
- package/esm2022/carousel/carousel.component.mjs +4 -4
- package/esm2022/date-picker/date-picker.component.mjs +9 -8
- package/esm2022/datetime-picker/datetime-picker.component.mjs +8 -7
- package/esm2022/dialog/dialog-footer-button/dialog-footer-button.component.mjs +3 -2
- package/esm2022/dialog/directives/dialog-decisive-button.directive.mjs +3 -2
- package/esm2022/feed-list-item/components/item/feed-list-item.component.mjs +4 -4
- package/esm2022/form/form-label/form-label.component.mjs +5 -4
- package/esm2022/inline-help/inline-help.directive.mjs +3 -2
- package/esm2022/input-group/input-group.component.mjs +4 -3
- package/esm2022/link/link.component.mjs +3 -3
- package/esm2022/list/list-item/list-item.component.mjs +6 -6
- package/esm2022/message-box/directives/message-box-decisive-button.directive.mjs +3 -2
- package/esm2022/message-box/message-box-footer-button/message-box-footer-button.component.mjs +3 -2
- package/esm2022/pagination/pagination.component.mjs +10 -10
- package/esm2022/popover/base/base-popover.class.mjs +5 -4
- package/esm2022/popover/popover.component.mjs +3 -2
- package/esm2022/product-switch/product-switch/product-switch.component.mjs +3 -2
- package/esm2022/shellbar/shellbar-actions/shellbar-actions.component.mjs +3 -2
- package/esm2022/slider/slider.component.mjs +5 -4
- package/esm2022/split-button/split-button.component.mjs +4 -3
- package/esm2022/splitter/splitter.component.mjs +3 -2
- package/esm2022/step-input/step-input.component.mjs +4 -4
- package/esm2022/switch/switch.component.mjs +5 -4
- package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +3 -2
- package/esm2022/tabs/tab-list.component.mjs +3 -3
- package/esm2022/time/i18n/time-i18n.mjs +3 -2
- package/esm2022/token/token.component.mjs +4 -4
- package/esm2022/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +8 -7
- package/esm2022/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-action-bar.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-alert.mjs +7 -7
- package/fesm2022/fundamental-ngx-core-alert.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-carousel.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs +8 -7
- package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +7 -6
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +4 -3
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-inline-help.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-input-group.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs +5 -5
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-pagination.mjs +9 -9
- package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-popover.mjs +6 -5
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-product-switch.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-slider.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-split-button.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-splitter.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-step-input.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-switch.mjs +4 -3
- package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs +8 -7
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
- package/fundamental-ngx-core-v0.44.0.tgz +0 -0
- package/package.json +3 -3
- package/schematics/add-dependencies/index.js +4 -4
- package/fundamental-ngx-core-v0.44.0-rc.6.tgz +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
2
|
import { BasePopoverClass } from '@fundamental-ngx/core/popover';
|
|
3
3
|
import { FD_PRODUCT_SWITCH_COMPONENT } from '../tokens';
|
|
4
|
+
import { warnOnce } from '@fundamental-ngx/cdk/utils';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@fundamental-ngx/core/popover";
|
|
6
7
|
import * as i2 from "@fundamental-ngx/core/button";
|
|
@@ -17,7 +18,7 @@ export class ProductSwitchComponent extends BasePopoverClass {
|
|
|
17
18
|
* @deprecated use i18n capabilities instead
|
|
18
19
|
* Input to set the aria label */
|
|
19
20
|
set ariaLabel(value) {
|
|
20
|
-
|
|
21
|
+
warnOnce("Property ariaLabel is deprecated. Use i18n capabilities 'coreProductSwitch.ariaLabel' key instead.");
|
|
21
22
|
this._ariaLabel = value;
|
|
22
23
|
}
|
|
23
24
|
get ariaLabel() {
|
|
@@ -46,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
46
47
|
}], disabled: [{
|
|
47
48
|
type: Input
|
|
48
49
|
}] } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zd2l0Y2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcHJvZHVjdC1zd2l0Y2gvcHJvZHVjdC1zd2l0Y2gvcHJvZHVjdC1zd2l0Y2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcHJvZHVjdC1zd2l0Y2gvcHJvZHVjdC1zd2l0Y2gvcHJvZHVjdC1zd2l0Y2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFhdEQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGdCQUFnQjtJQVg1RDs7UUFZSSw4QkFBOEI7UUFFOUIsY0FBUyxHQUFjLFlBQVksQ0FBQztRQWVwQyw4Q0FBOEM7UUFFOUMsYUFBUSxHQUFHLEtBQUssQ0FBQztLQUlwQjtJQW5CRzs7cUNBRWlDO0lBQ2pDLElBQ0ksU0FBUyxDQUFDLEtBQWE7UUFDdkIsUUFBUSxDQUFDLG9HQUFvRyxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDOzhHQWhCUSxzQkFBc0I7a0dBQXRCLHNCQUFzQiw4SEFQcEI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsMkJBQTJCO2dCQUNwQyxXQUFXLEVBQUUsc0JBQXNCO2FBQ3RDO1NBQ0osaURDaEJMLDhoQ0E2QkE7OzJGRFhhLHNCQUFzQjtrQkFYbEMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBRVosdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsMkJBQTJCOzRCQUNwQyxXQUFXLHdCQUF3Qjt5QkFDdEM7cUJBQ0o7OEJBS0QsU0FBUztzQkFEUixLQUFLO2dCQU9GLFNBQVM7c0JBRFosS0FBSztnQkFZTixRQUFRO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IEJhc2VQb3BvdmVyQ2xhc3MgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBGRF9QUk9EVUNUX1NXSVRDSF9DT01QT05FTlQgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgd2Fybk9uY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtcHJvZHVjdC1zd2l0Y2gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LXN3aXRjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX1BST0RVQ1RfU1dJVENIX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBQcm9kdWN0U3dpdGNoQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RTd2l0Y2hDb21wb25lbnQgZXh0ZW5kcyBCYXNlUG9wb3ZlckNsYXNzIHtcbiAgICAvKiogUGxhY2VtZW50IG9mIGEgcG9wb3Zlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1lbmQnO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBJbnB1dCB0byBzZXQgdGhlIGFyaWEgbGFiZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhcmlhTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICB3YXJuT25jZShcIlByb3BlcnR5IGFyaWFMYWJlbCBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVQcm9kdWN0U3dpdGNoLmFyaWFMYWJlbCcga2V5IGluc3RlYWQuXCIpO1xuICAgICAgICB0aGlzLl9hcmlhTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hcmlhTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHByb2R1Y3Qgc3dpdGNoIGlzIGRpc2FibGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXJpYUxhYmVsOiBzdHJpbmc7XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmQtcHJvZHVjdC1zd2l0Y2hcIj5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgICAgIFtjbG9zZU9uRXNjYXBlS2V5XT1cImNsb3NlT25Fc2NhcGVLZXlcIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJjbG9zZU9uT3V0c2lkZUNsaWNrXCJcbiAgICAgICAgWyhpc09wZW4pXT1cImlzT3BlblwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFt0cmlnZ2Vyc109XCJ0cmlnZ2Vyc1wiXG4gICAgICAgIFtmb2N1c1RyYXBwZWRdPVwiZmFsc2VcIlxuICAgICAgICBbZm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCJcbiAgICAgICAgW25vQXJyb3ddPVwibm9BcnJvd1wiXG4gICAgICAgIFtkaXNhYmxlU2Nyb2xsYmFyXT1cInRydWVcIlxuICAgID5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCAoJ2NvcmVQcm9kdWN0U3dpdGNoLmFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImFyaWFMYWJlbCB8fCAoJ2NvcmVQcm9kdWN0U3dpdGNoLmFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtc2hlbGxiYXJfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJncmlkXCJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICA8L2ZkLXBvcG92ZXI+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -4,6 +4,7 @@ import { FD_PRODUCT_SWITCH_COMPONENT, ProductSwitchComponent } from '@fundamenta
|
|
|
4
4
|
import { ShellbarUserMenuComponent } from '../user-menu/shellbar-user-menu.component';
|
|
5
5
|
import { CdkPortalOutlet } from '@angular/cdk/portal';
|
|
6
6
|
import { FD_SHELLBAR_ACTION_COMPONENT, FD_SHELLBAR_COMPONENT } from '../tokens';
|
|
7
|
+
import { warnOnce } from '@fundamental-ngx/cdk/utils';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@angular/common";
|
|
9
10
|
import * as i2 from "@angular/cdk/portal";
|
|
@@ -59,7 +60,7 @@ export class ShellbarActionsComponent {
|
|
|
59
60
|
* Label for the collapsed item menu.
|
|
60
61
|
*/
|
|
61
62
|
set collapsedItemMenuLabel(value) {
|
|
62
|
-
|
|
63
|
+
warnOnce("Property collapsedItemMenuLabel is deprecated. Use i18n capabilities 'coreShellbar.collapsedItemMenuLabel' key instead.");
|
|
63
64
|
this._collapsedItemMenuLabel = value;
|
|
64
65
|
}
|
|
65
66
|
get collapsedItemMenuLabel() {
|
|
@@ -178,4 +179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
178
179
|
type: HostBinding,
|
|
179
180
|
args: ['class.fd-shellbar__group--basis-auto']
|
|
180
181
|
}] } });
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGxiYXItYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zaGVsbGJhci9zaGVsbGJhci1hY3Rpb25zL3NoZWxsYmFyLWFjdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2hlbGxiYXIvc2hlbGxiYXItYWN0aW9ucy9zaGVsbGJhci1hY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsZUFBZSxFQUNmLEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxFQUNOLFlBQVksRUFFWixXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFxQixNQUFNLGdDQUFnQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBSzNHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQWEsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7QUFLaEY7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQVlILE1BQU0sT0FBTyx3QkFBd0I7SUFWckM7UUFtQkksK0VBQStFO1FBRS9FLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQWtCN0I7O1dBRUc7UUFFSCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQTBCekMsY0FBYztRQUNkLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FB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QVM7dUJBQUMseUJBQXlCO2dCQUtwQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMscUJBQXFCO2dCQUtuQyxzQkFBc0I7c0JBRHJCLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUs1RCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZTtnQkE4QmQsWUFBWTtzQkFEdkIsV0FBVzt1QkFBQyxrQ0FBa0M7Z0JBT25DLGVBQWU7c0JBRDFCLFdBQVc7dUJBQUMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIElucHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgVmlld0NoaWxkLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIGluamVjdCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE9uRGVzdHJveSxcbiAgICBIb3N0QmluZGluZ1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRkRfQ09NQk9CT1hfQ09NUE9ORU5ULCBDb21ib2JveEludGVyZmFjZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb21ib2JveCc7XG5pbXBvcnQgeyBGRF9QUk9EVUNUX1NXSVRDSF9DT01QT05FTlQsIFByb2R1Y3RTd2l0Y2hDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcHJvZHVjdC1zd2l0Y2gnO1xuXG5pbXBvcnQgeyBTaGVsbGJhckFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NoZWxsYmFyLWFjdGlvbi9zaGVsbGJhci1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNoZWxsYmFyVXNlck1lbnUgfSBmcm9tICcuLi9tb2RlbC9zaGVsbGJhci11c2VyLW1lbnUnO1xuaW1wb3J0IHsgU2hlbGxiYXJVc2VyIH0gZnJvbSAnLi4vbW9kZWwvc2hlbGxiYXItdXNlcic7XG5pbXBvcnQgeyBTaGVsbGJhclVzZXJNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vdXNlci1tZW51L3NoZWxsYmFyLXVzZXItbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2RrUG9ydGFsT3V0bGV0LCBEb21Qb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEZEX1NIRUxMQkFSX0FDVElPTl9DT01QT05FTlQsIEZEX1NIRUxMQkFSX0NPTVBPTkVOVCB9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgU2hlbGxiYXJTaXplcyB9IGZyb20gJy4uL21vZGVsL3NoZWxsYmFyLXNpemVzJztcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgcmVwcmVzZW50cyBzaGVsbGJhciBhY3Rpb25zLlxuICogSXQgaXMgYSBjb250YWluZXIgd3JhcHBlciBmb3IgYWxsIHByb2R1Y3QgYWN0aW9ucyBhbmQgbGlua3MgKHJlcXVpcmVkIGVsZW1lbnQpLlxuICogYGBgaHRtbFxuICogPGZkLXNoZWxsYmFyLWFjdGlvbnMgW3VzZXJdPVwidXNlclwiXG4gKiAgICAgICAgICAgICAgICAgICAgICBbdXNlck1lbnVdPVwidXNlck1lbnVcIlxuICogICAgICAgICAgICAgICAgICAgICAgW3Byb2R1Y3RTd2l0Y2hlcl09XCJwcm9kdWN0U3dpdGNoZXJcIj5cbiAqICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBmZFR5cGU9XCJzdGFuZGFyZFwiPkN1c3RvbSBCdXR0b248L2J1dHRvbj5cbiAqXG4gKiAgICAgICAgPGZkLXNoZWxsYmFyLWFjdGlvbiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cImFjdGlvbi5nbHlwaFwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2tdPVwiYWN0aW9uLmNhbGxiYWNrXCJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhY3Rpb24ubGFiZWxcIlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vdGlmaWNhdGlvbkNvdW50XT1cImFjdGlvbi5ub3RpZmljYXRpb25Db3VudFwiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm90aWZpY2F0aW9uTGFiZWxdPVwiYWN0aW9uLm5vdGlmaWNhdGlvbkxhYmVsXCI+XG4gKiAgICAgICAgPC9mZC1zaGVsbGJhci1hY3Rpb24+XG4gKiA8L2ZkLXNoZWxsYmFyLWFjdGlvbnM+XG4gKiBgYGBcbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXNoZWxsYmFyLWFjdGlvbnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaGVsbGJhci1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5mZC1zaGVsbGJhcl9fZ3JvdXBdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLmZkLXNoZWxsYmFyX19ncm91cC0tYWN0aW9uc10nOiAndHJ1ZSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFNoZWxsYmFyQWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqIFRoZSB1c2VyIGRhdGEuICovXG4gICAgQElucHV0KClcbiAgICB1c2VyOiBTaGVsbGJhclVzZXI7XG5cbiAgICAvKiogVGhlIHVzZXIgbWVudSBkYXRhLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlck1lbnU6IFNoZWxsYmFyVXNlck1lbnVbXTtcblxuICAgIC8qKiBXaGVuIHNldCB0byB0cnVlLCBwb3BvdmVyIGxpc3Qgd2lsbCBiZSBjbG9zZWQgYWZ0ZXIgc2VsZWN0aW5nIHRoZSBvcHRpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlUG9wb3Zlck9uU2VsZWN0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIExhYmVsIGZvciB0aGUgY29sbGFwc2VkIGl0ZW0gbWVudS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb2xsYXBzZWRJdGVtTWVudUxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJQcm9wZXJ0eSBjb2xsYXBzZWRJdGVtTWVudUxhYmVsIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZVNoZWxsYmFyLmNvbGxhcHNlZEl0ZW1NZW51TGFiZWwnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2NvbGxhcHNlZEl0ZW1NZW51TGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgY29sbGFwc2VkSXRlbU1lbnVMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGFwc2VkSXRlbU1lbnVMYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gc2VhcmNoIG9wZW5lZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWFyY2hPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEZEX1NIRUxMQkFSX0FDVElPTl9DT01QT05FTlQpXG4gICAgc2hlbGxiYXJBY3Rpb25zOiBRdWVyeUxpc3Q8U2hlbGxiYXJBY3Rpb25Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFNoZWxsYmFyVXNlck1lbnVDb21wb25lbnQpXG4gICAgdXNlckNvbXBvbmVudDogU2hlbGxiYXJVc2VyTWVudUNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChTaGVsbGJhclVzZXJNZW51Q29tcG9uZW50KVxuICAgIHVzZXJDb21wb25lbnRWaWV3OiBTaGVsbGJhclVzZXJNZW51Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEZEX0NPTUJPQk9YX0NPTVBPTkVOVClcbiAgICBjb21ib2JveENvbXBvbmVudDogQ29tYm9ib3hJbnRlcmZhY2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoRkRfUFJPRFVDVF9TV0lUQ0hfQ09NUE9ORU5ULCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwcm9kdWN0U3dpdGNoQ29tcG9uZW50OiBQcm9kdWN0U3dpdGNoQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldClcbiAgICBfcG9ydGFsT3V0bGV0OiBDZGtQb3J0YWxPdXRsZXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hZGRTZWFyY2hJY29uID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWFyY2hQb3J0YWw6IERvbVBvcnRhbDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGZpZWxkLlxuICAgICAqL1xuICAgIHNob3dTZWFyY2ggPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY3VycmVudFNpemU6IFNoZWxsYmFyU2l6ZXM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbGxhcHNlZEl0ZW1NZW51TGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zaGVsbGJhciA9IGluamVjdChGRF9TSEVMTEJBUl9DT01QT05FTlQsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1zaGVsbGJhcl9fZ3JvdXAtLXNocmluaycpXG4gICAgcHJpdmF0ZSBnZXQgX2dyb3VwU2hyaW5rKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9zaGVsbGJhcj8uZ3JvdXBGbGV4Py5hY3Rpb25zPy5zaHJpbms7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXNoZWxsYmFyX19ncm91cC0tYmFzaXMtYXV0bycpXG4gICAgcHJpdmF0ZSBnZXQgX2dyb3VwQmFzaXNBdXRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9zaGVsbGJhcj8uZ3JvdXBGbGV4Py5hY3Rpb25zPy5mbGV4QmFzaXNBdXRvO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VhcmNoQ29tcG9uZW50OiBOdWxsYWJsZTxTZWFyY2hDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9nZ2xlU2VhcmNoOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9zZXRTZWFyY2hWaXNpYmlsaXR5KCF0aGlzLnNob3dTZWFyY2gpO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgdXNlckl0ZW0oKTogU2hlbGxiYXJVc2VyIHtcbiAgICAgICAgaWYgKHRoaXMudXNlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckNvbXBvbmVudC51c2VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcnRhbE91dGxldD8uZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2F0dGFjaFNlYXJjaChwb3J0YWw6IERvbVBvcnRhbCwgc2VhcmNoQ29tcG9uZW50OiBOdWxsYWJsZTxTZWFyY2hDb21wb25lbnQ+LCBzaXplOiBTaGVsbGJhclNpemVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlYXJjaFBvcnRhbCA9IHBvcnRhbDtcbiAgICAgICAgdGhpcy5fYWRkU2VhcmNoSWNvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VycmVudFNpemUgPSBzaXplO1xuICAgICAgICB0aGlzLl9zZWFyY2hDb21wb25lbnQgPSBzZWFyY2hDb21wb25lbnQ7XG4gICAgICAgIHRoaXMuX3RvZ2dsZVNlYXJjaFBvcnRhbCh0aGlzLnNob3dTZWFyY2gpO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGV0YWNoU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcG9ydGFsT3V0bGV0Py5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hZGRTZWFyY2hJY29uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyaWdnZXJJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlUG9wb3Zlck9uU2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2VyQ29tcG9uZW50Vmlldz8ubWVudS5jbG9zZSgpO1xuICAgICAgICB0aGlzLnVzZXJDb21wb25lbnQ/Lm1lbnUuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRTZWFyY2hWaXNpYmlsaXR5KHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93U2VhcmNoID0gdmlzaWJsZTtcbiAgICAgICAgdGhpcy5zZWFyY2hPcGVuLmVtaXQodGhpcy5zaG93U2VhcmNoKTtcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2l6ZSA9PT0gJ3MnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90b2dnbGVTZWFyY2hQb3J0YWwodmlzaWJsZSwgdmlzaWJsZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2dnbGVTZWFyY2hQb3J0YWwodmlzaWJsZTogYm9vbGVhbiwgZm9jdXNTZWFyY2ggPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fcG9ydGFsT3V0bGV0LmRldGFjaCgpO1xuICAgICAgICAgICAgdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaCh0aGlzLl9zZWFyY2hQb3J0YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcG9ydGFsT3V0bGV0LmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgaWYgKGZvY3VzU2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hDb21wb25lbnQ/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiY29tYm9ib3hDb21wb25lbnRcIiBjbGFzcz1cImZkLXNoZWxsYmFyX19hY3Rpb24gZmQtc2hlbGxiYXJfX2FjdGlvbi0tZGVza3RvcFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLWNvbWJvYm94XCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjwhLS0gSWYgcG9ydGFsIG91dGxldCBwbGFjZWQgb3V0c2lkZSBkaXYsIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgcm9vdCBjb250YWluZXIuIFNvIHRoaXMgZGl2IGFjdHVhbGx5IGtlZXBzIG91dGxldCBpbiBkZXNpcmVkIHBsYWNlLiAtLT5cbjxkaXYgY2xhc3M9XCJmZC1zaGVsbGJhcl9fYWN0aW9uXCIgY2RrUG9ydGFsT3V0bGV0PjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZmQtc2hlbGxiYXJfX2FjdGlvbiBmZC1zaGVsbGJhcl9fYWN0aW9uLS1tb2JpbGVcIj5cbiAgICA8ZmQtc2hlbGxiYXItYWN0aW9ucy1tb2JpbGVcbiAgICAgICAgW3NoZWxsYmFyQWN0aW9uc109XCJzaGVsbGJhckFjdGlvbnNcIlxuICAgICAgICBbY29sbGFwc2VkSXRlbU1lbnVMYWJlbF09XCJjb2xsYXBzZWRJdGVtTWVudUxhYmVsXCJcbiAgICAgICAgW3NlYXJjaEV4aXN0c109XCIhIV9zZWFyY2hQb3J0YWxcIlxuICAgICAgICAoc2hvd1NlYXJjaCk9XCJfdG9nZ2xlU2VhcmNoKClcIlxuICAgID48L2ZkLXNoZWxsYmFyLWFjdGlvbnMtbW9iaWxlPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJmZC1zaGVsbGJhcl9fYWN0aW9uIGZkLXNoZWxsYmFyX19hY3Rpb24tLWRlc2t0b3BcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPGZkLXNoZWxsYmFyLWFjdGlvblxuICAgICpuZ0lmPVwiX2FkZFNlYXJjaEljb24gJiYgIXNob3dTZWFyY2hcIlxuICAgIGdseXBoPVwic2VhcmNoXCJcbiAgICBbY2FsbGJhY2tdPVwiX3RvZ2dsZVNlYXJjaFwiXG4+PC9mZC1zaGVsbGJhci1hY3Rpb24+XG5cbjxuZy1jb250ZW50IHNlbGVjdD1cImZkLXNoZWxsYmFyLWFjdGlvblwiPjwvbmctY29udGVudD5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJJdGVtXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2VyQ29tcG9uZW50XCI+XG4gICAgICAgIDxmZC1zaGVsbGJhci11c2VyLW1lbnVcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1lbmRcIlxuICAgICAgICAgICAgW3VzZXJdPVwidXNlclwiXG4gICAgICAgICAgICBbdXNlck1lbnVdPVwidXNlck1lbnVcIlxuICAgICAgICAgICAgKGl0ZW1DbGlja2VkKT1cIl90cmlnZ2VySXRlbXMoKVwiXG4gICAgICAgID48L2ZkLXNoZWxsYmFyLXVzZXItbWVudT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyQ29tcG9uZW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXNoZWxsYmFyLXVzZXItbWVudVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2ICpuZ0lmPVwicHJvZHVjdFN3aXRjaENvbXBvbmVudFwiIGNsYXNzPVwiZmQtc2hlbGxiYXJfX2FjdGlvblwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXByb2R1Y3Qtc3dpdGNoXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGxiYXItYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zaGVsbGJhci9zaGVsbGJhci1hY3Rpb25zL3NoZWxsYmFyLWFjdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2hlbGxiYXIvc2hlbGxiYXItYWN0aW9ucy9zaGVsbGJhci1hY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsZUFBZSxFQUNmLEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxFQUNOLFlBQVksRUFFWixXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFxQixNQUFNLGdDQUFnQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBSzNHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQWEsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEYsT0FBTyxFQUFZLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7O0FBR2hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFZSCxNQUFNLE9BQU8sd0JBQXdCO0lBVnJDO1FBbUJJLCtFQUErRTtRQUUvRSx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFrQjdCOztXQUVHO1FBRUgsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFXLENB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QUMseUJBQXlCO2dCQUt2QyxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMseUJBQXlCO2dCQUtwQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMscUJBQXFCO2dCQUtuQyxzQkFBc0I7c0JBRHJCLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUs1RCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsZUFBZTtnQkE4QmQsWUFBWTtzQkFEdkIsV0FBVzt1QkFBQyxrQ0FBa0M7Z0JBT25DLGVBQWU7c0JBRDFCLFdBQVc7dUJBQUMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIElucHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgVmlld0NoaWxkLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIGluamVjdCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE9uRGVzdHJveSxcbiAgICBIb3N0QmluZGluZ1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRkRfQ09NQk9CT1hfQ09NUE9ORU5ULCBDb21ib2JveEludGVyZmFjZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb21ib2JveCc7XG5pbXBvcnQgeyBGRF9QUk9EVUNUX1NXSVRDSF9DT01QT05FTlQsIFByb2R1Y3RTd2l0Y2hDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcHJvZHVjdC1zd2l0Y2gnO1xuXG5pbXBvcnQgeyBTaGVsbGJhckFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NoZWxsYmFyLWFjdGlvbi9zaGVsbGJhci1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNoZWxsYmFyVXNlck1lbnUgfSBmcm9tICcuLi9tb2RlbC9zaGVsbGJhci11c2VyLW1lbnUnO1xuaW1wb3J0IHsgU2hlbGxiYXJVc2VyIH0gZnJvbSAnLi4vbW9kZWwvc2hlbGxiYXItdXNlcic7XG5pbXBvcnQgeyBTaGVsbGJhclVzZXJNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vdXNlci1tZW51L3NoZWxsYmFyLXVzZXItbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2RrUG9ydGFsT3V0bGV0LCBEb21Qb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IEZEX1NIRUxMQkFSX0FDVElPTl9DT01QT05FTlQsIEZEX1NIRUxMQkFSX0NPTVBPTkVOVCB9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IE51bGxhYmxlLCB3YXJuT25jZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFNoZWxsYmFyU2l6ZXMgfSBmcm9tICcuLi9tb2RlbC9zaGVsbGJhci1zaXplcyc7XG5cbi8qKlxuICogVGhlIGNvbXBvbmVudCB0aGF0IHJlcHJlc2VudHMgc2hlbGxiYXIgYWN0aW9ucy5cbiAqIEl0IGlzIGEgY29udGFpbmVyIHdyYXBwZXIgZm9yIGFsbCBwcm9kdWN0IGFjdGlvbnMgYW5kIGxpbmtzIChyZXF1aXJlZCBlbGVtZW50KS5cbiAqIGBgYGh0bWxcbiAqIDxmZC1zaGVsbGJhci1hY3Rpb25zIFt1c2VyXT1cInVzZXJcIlxuICogICAgICAgICAgICAgICAgICAgICAgW3VzZXJNZW51XT1cInVzZXJNZW51XCJcbiAqICAgICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0U3dpdGNoZXJdPVwicHJvZHVjdFN3aXRjaGVyXCI+XG4gKiAgICAgICAgPGJ1dHRvbiBmZC1idXR0b24gZmRUeXBlPVwic3RhbmRhcmRcIj5DdXN0b20gQnV0dG9uPC9idXR0b24+XG4gKlxuICogICAgICAgIDxmZC1zaGVsbGJhci1hY3Rpb24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbHlwaF09XCJhY3Rpb24uZ2x5cGhcIlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbGxiYWNrXT1cImFjdGlvbi5jYWxsYmFja1wiXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYWN0aW9uLmxhYmVsXCJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub3RpZmljYXRpb25Db3VudF09XCJhY3Rpb24ubm90aWZpY2F0aW9uQ291bnRcIlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vdGlmaWNhdGlvbkxhYmVsXT1cImFjdGlvbi5ub3RpZmljYXRpb25MYWJlbFwiPlxuICogICAgICAgIDwvZmQtc2hlbGxiYXItYWN0aW9uPlxuICogPC9mZC1zaGVsbGJhci1hY3Rpb25zPlxuICogYGBgXG4gKi9cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1zaGVsbGJhci1hY3Rpb25zJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2hlbGxiYXItYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MuZmQtc2hlbGxiYXJfX2dyb3VwXSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1zaGVsbGJhcl9fZ3JvdXAtLWFjdGlvbnNdJzogJ3RydWUnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTaGVsbGJhckFjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKiBUaGUgdXNlciBkYXRhLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlcjogU2hlbGxiYXJVc2VyO1xuXG4gICAgLyoqIFRoZSB1c2VyIG1lbnUgZGF0YS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVzZXJNZW51OiBTaGVsbGJhclVzZXJNZW51W107XG5cbiAgICAvKiogV2hlbiBzZXQgdG8gdHJ1ZSwgcG9wb3ZlciBsaXN0IHdpbGwgYmUgY2xvc2VkIGFmdGVyIHNlbGVjdGluZyB0aGUgb3B0aW9uICovXG4gICAgQElucHV0KClcbiAgICBjbG9zZVBvcG92ZXJPblNlbGVjdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBMYWJlbCBmb3IgdGhlIGNvbGxhcHNlZCBpdGVtIG1lbnUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY29sbGFwc2VkSXRlbU1lbnVMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgXCJQcm9wZXJ0eSBjb2xsYXBzZWRJdGVtTWVudUxhYmVsIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZVNoZWxsYmFyLmNvbGxhcHNlZEl0ZW1NZW51TGFiZWwnIGtleSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2NvbGxhcHNlZEl0ZW1NZW51TGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgY29sbGFwc2VkSXRlbU1lbnVMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGFwc2VkSXRlbU1lbnVMYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gc2VhcmNoIG9wZW5lZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWFyY2hPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEZEX1NIRUxMQkFSX0FDVElPTl9DT01QT05FTlQpXG4gICAgc2hlbGxiYXJBY3Rpb25zOiBRdWVyeUxpc3Q8U2hlbGxiYXJBY3Rpb25Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFNoZWxsYmFyVXNlck1lbnVDb21wb25lbnQpXG4gICAgdXNlckNvbXBvbmVudDogU2hlbGxiYXJVc2VyTWVudUNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChTaGVsbGJhclVzZXJNZW51Q29tcG9uZW50KVxuICAgIHVzZXJDb21wb25lbnRWaWV3OiBTaGVsbGJhclVzZXJNZW51Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEZEX0NPTUJPQk9YX0NPTVBPTkVOVClcbiAgICBjb21ib2JveENvbXBvbmVudDogQ29tYm9ib3hJbnRlcmZhY2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoRkRfUFJPRFVDVF9TV0lUQ0hfQ09NUE9ORU5ULCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwcm9kdWN0U3dpdGNoQ29tcG9uZW50OiBQcm9kdWN0U3dpdGNoQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldClcbiAgICBfcG9ydGFsT3V0bGV0OiBDZGtQb3J0YWxPdXRsZXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hZGRTZWFyY2hJY29uID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWFyY2hQb3J0YWw6IERvbVBvcnRhbDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGZpZWxkLlxuICAgICAqL1xuICAgIHNob3dTZWFyY2ggPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY3VycmVudFNpemU6IFNoZWxsYmFyU2l6ZXM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbGxhcHNlZEl0ZW1NZW51TGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zaGVsbGJhciA9IGluamVjdChGRF9TSEVMTEJBUl9DT01QT05FTlQsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1zaGVsbGJhcl9fZ3JvdXAtLXNocmluaycpXG4gICAgcHJpdmF0ZSBnZXQgX2dyb3VwU2hyaW5rKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9zaGVsbGJhcj8uZ3JvdXBGbGV4Py5hY3Rpb25zPy5zaHJpbms7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXNoZWxsYmFyX19ncm91cC0tYmFzaXMtYXV0bycpXG4gICAgcHJpdmF0ZSBnZXQgX2dyb3VwQmFzaXNBdXRvKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9zaGVsbGJhcj8uZ3JvdXBGbGV4Py5hY3Rpb25zPy5mbGV4QmFzaXNBdXRvO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VhcmNoQ29tcG9uZW50OiBOdWxsYWJsZTxTZWFyY2hDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9nZ2xlU2VhcmNoOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9zZXRTZWFyY2hWaXNpYmlsaXR5KCF0aGlzLnNob3dTZWFyY2gpO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgdXNlckl0ZW0oKTogU2hlbGxiYXJVc2VyIHtcbiAgICAgICAgaWYgKHRoaXMudXNlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckNvbXBvbmVudC51c2VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcnRhbE91dGxldD8uZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2F0dGFjaFNlYXJjaChwb3J0YWw6IERvbVBvcnRhbCwgc2VhcmNoQ29tcG9uZW50OiBOdWxsYWJsZTxTZWFyY2hDb21wb25lbnQ+LCBzaXplOiBTaGVsbGJhclNpemVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlYXJjaFBvcnRhbCA9IHBvcnRhbDtcbiAgICAgICAgdGhpcy5fYWRkU2VhcmNoSWNvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VycmVudFNpemUgPSBzaXplO1xuICAgICAgICB0aGlzLl9zZWFyY2hDb21wb25lbnQgPSBzZWFyY2hDb21wb25lbnQ7XG4gICAgICAgIHRoaXMuX3RvZ2dsZVNlYXJjaFBvcnRhbCh0aGlzLnNob3dTZWFyY2gpO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGV0YWNoU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcG9ydGFsT3V0bGV0Py5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hZGRTZWFyY2hJY29uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyaWdnZXJJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlUG9wb3Zlck9uU2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2VyQ29tcG9uZW50Vmlldz8ubWVudS5jbG9zZSgpO1xuICAgICAgICB0aGlzLnVzZXJDb21wb25lbnQ/Lm1lbnUuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRTZWFyY2hWaXNpYmlsaXR5KHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93U2VhcmNoID0gdmlzaWJsZTtcbiAgICAgICAgdGhpcy5zZWFyY2hPcGVuLmVtaXQodGhpcy5zaG93U2VhcmNoKTtcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2l6ZSA9PT0gJ3MnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90b2dnbGVTZWFyY2hQb3J0YWwodmlzaWJsZSwgdmlzaWJsZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2dnbGVTZWFyY2hQb3J0YWwodmlzaWJsZTogYm9vbGVhbiwgZm9jdXNTZWFyY2ggPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fcG9ydGFsT3V0bGV0LmRldGFjaCgpO1xuICAgICAgICAgICAgdGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaCh0aGlzLl9zZWFyY2hQb3J0YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcG9ydGFsT3V0bGV0LmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgaWYgKGZvY3VzU2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hDb21wb25lbnQ/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiY29tYm9ib3hDb21wb25lbnRcIiBjbGFzcz1cImZkLXNoZWxsYmFyX19hY3Rpb24gZmQtc2hlbGxiYXJfX2FjdGlvbi0tZGVza3RvcFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLWNvbWJvYm94XCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjwhLS0gSWYgcG9ydGFsIG91dGxldCBwbGFjZWQgb3V0c2lkZSBkaXYsIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgcm9vdCBjb250YWluZXIuIFNvIHRoaXMgZGl2IGFjdHVhbGx5IGtlZXBzIG91dGxldCBpbiBkZXNpcmVkIHBsYWNlLiAtLT5cbjxkaXYgY2xhc3M9XCJmZC1zaGVsbGJhcl9fYWN0aW9uXCIgY2RrUG9ydGFsT3V0bGV0PjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZmQtc2hlbGxiYXJfX2FjdGlvbiBmZC1zaGVsbGJhcl9fYWN0aW9uLS1tb2JpbGVcIj5cbiAgICA8ZmQtc2hlbGxiYXItYWN0aW9ucy1tb2JpbGVcbiAgICAgICAgW3NoZWxsYmFyQWN0aW9uc109XCJzaGVsbGJhckFjdGlvbnNcIlxuICAgICAgICBbY29sbGFwc2VkSXRlbU1lbnVMYWJlbF09XCJjb2xsYXBzZWRJdGVtTWVudUxhYmVsXCJcbiAgICAgICAgW3NlYXJjaEV4aXN0c109XCIhIV9zZWFyY2hQb3J0YWxcIlxuICAgICAgICAoc2hvd1NlYXJjaCk9XCJfdG9nZ2xlU2VhcmNoKClcIlxuICAgID48L2ZkLXNoZWxsYmFyLWFjdGlvbnMtbW9iaWxlPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJmZC1zaGVsbGJhcl9fYWN0aW9uIGZkLXNoZWxsYmFyX19hY3Rpb24tLWRlc2t0b3BcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPGZkLXNoZWxsYmFyLWFjdGlvblxuICAgICpuZ0lmPVwiX2FkZFNlYXJjaEljb24gJiYgIXNob3dTZWFyY2hcIlxuICAgIGdseXBoPVwic2VhcmNoXCJcbiAgICBbY2FsbGJhY2tdPVwiX3RvZ2dsZVNlYXJjaFwiXG4+PC9mZC1zaGVsbGJhci1hY3Rpb24+XG5cbjxuZy1jb250ZW50IHNlbGVjdD1cImZkLXNoZWxsYmFyLWFjdGlvblwiPjwvbmctY29udGVudD5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJJdGVtXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2VyQ29tcG9uZW50XCI+XG4gICAgICAgIDxmZC1zaGVsbGJhci11c2VyLW1lbnVcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1lbmRcIlxuICAgICAgICAgICAgW3VzZXJdPVwidXNlclwiXG4gICAgICAgICAgICBbdXNlck1lbnVdPVwidXNlck1lbnVcIlxuICAgICAgICAgICAgKGl0ZW1DbGlja2VkKT1cIl90cmlnZ2VySXRlbXMoKVwiXG4gICAgICAgID48L2ZkLXNoZWxsYmFyLXVzZXItbWVudT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyQ29tcG9uZW50XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXNoZWxsYmFyLXVzZXItbWVudVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2ICpuZ0lmPVwicHJvZHVjdFN3aXRjaENvbXBvbmVudFwiIGNsYXNzPVwiZmQtc2hlbGxiYXJfX2FjdGlvblwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXByb2R1Y3Qtc3dpdGNoXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
|
|
@@ -8,6 +8,7 @@ import { LiveAnnouncer } from '@angular/cdk/a11y';
|
|
|
8
8
|
import { BehaviorSubject, combineLatest, fromEvent, of, Subject } from 'rxjs';
|
|
9
9
|
import { debounceTime, distinctUntilChanged, map, mapTo, skip, startWith, switchMap, take, takeUntil } from 'rxjs/operators';
|
|
10
10
|
import { PopoverComponent } from '@fundamental-ngx/core/popover';
|
|
11
|
+
import { warnOnce } from '@fundamental-ngx/cdk/utils';
|
|
11
12
|
import { SliderRangeHandles, SliderValueTargets } from './slider.model';
|
|
12
13
|
import { MIN_DISTANCE_BETWEEN_TICKS } from './constants';
|
|
13
14
|
import { applyCssClass, KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';
|
|
@@ -84,7 +85,7 @@ export class SliderComponent {
|
|
|
84
85
|
* @deprecated no longer used, use i18n capabilities instead
|
|
85
86
|
*/
|
|
86
87
|
set singleSliderCurrentValuePrefix(value) {
|
|
87
|
-
|
|
88
|
+
warnOnce('Property singleSliderCurrentValuePrefix is deprecated. Use i18n capabilities instead.');
|
|
88
89
|
this._singleSliderCurrentValuePrefix = value;
|
|
89
90
|
}
|
|
90
91
|
get singleSliderCurrentValuePrefix() {
|
|
@@ -97,7 +98,7 @@ export class SliderComponent {
|
|
|
97
98
|
* * @deprecated no longer used, use i18n capabilities instead
|
|
98
99
|
*/
|
|
99
100
|
set rangeSliderHandle1CurrentValuePrefix(value) {
|
|
100
|
-
|
|
101
|
+
warnOnce('Property rangeSliderHandle1CurrentValuePrefix is deprecated. Use i18n capabilities instead.');
|
|
101
102
|
this._rangeSliderHandle1CurrentValuePrefix = value;
|
|
102
103
|
}
|
|
103
104
|
get rangeSliderHandle1CurrentValuePrefix() {
|
|
@@ -110,7 +111,7 @@ export class SliderComponent {
|
|
|
110
111
|
* * @deprecated no longer used, use i18n capabilities instead
|
|
111
112
|
*/
|
|
112
113
|
set rangeSliderHandle2CurrentValuePrefix(value) {
|
|
113
|
-
|
|
114
|
+
warnOnce('Property rangeSliderHandle2CurrentValuePrefix is deprecated. Use i18n capabilities instead.');
|
|
114
115
|
this._rangeSliderHandle2CurrentValuePrefix = value;
|
|
115
116
|
}
|
|
116
117
|
get rangeSliderHandle2CurrentValuePrefix() {
|
|
@@ -842,4 +843,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
842
843
|
type: HostBinding,
|
|
843
844
|
args: ['class.fd-slider--range']
|
|
844
845
|
}], buildComponentCssClass: [] } });
|
|
845
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2xpZGVyL3NsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwr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QjtzQkFEakMsS0FBSztnQkFrQkYsb0NBQW9DO3NCQUR2QyxLQUFLO2dCQWtCRixvQ0FBb0M7c0JBRHZDLEtBQUs7Z0JBZ0JGLEtBQUs7c0JBRFIsS0FBSztnQkFpQk4sT0FBTztzQkFITixTQUFTO3VCQUFDLE9BQU8sRUFBRTt3QkFDaEIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQU9ELE1BQU07c0JBSEwsU0FBUzt1QkFBQyxRQUFRLEVBQUU7d0JBQ2pCLElBQUksRUFBRSxVQUFVO3FCQUNuQjtnQkFPRCxZQUFZO3NCQUhYLFNBQVM7dUJBQUMsY0FBYyxFQUFFO3dCQUN2QixJQUFJLEVBQUUsVUFBVTtxQkFDbkI7Z0JBT0QsWUFBWTtzQkFIWCxTQUFTO3VCQUFDLGNBQWMsRUFBRTt3QkFDdkIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQUtELFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBSzlCLHNCQUFzQjtzQkFEckIsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBV3BDLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBd0pyQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFNQQUNFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGRlYm91bmNlVGltZSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBtYXAsXG4gICAgbWFwVG8sXG4gICAgc2tpcCxcbiAgICBzdGFydFdpdGgsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgU2xpZGVyQ29udHJvbFZhbHVlLFxuICAgIFNsaWRlckN1c3RvbVZhbHVlLFxuICAgIFNsaWRlclJhbmdlSGFuZGxlcyxcbiAgICBTbGlkZXJUaWNrTWFyayxcbiAgICBTbGlkZXJWYWx1ZVRhcmdldHNcbn0gZnJvbSAnLi9zbGlkZXIubW9kZWwnO1xuaW1wb3J0IHsgTUlOX0RJU1RBTkNFX0JFVFdFRU5fVElDS1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhcHBseUNzc0NsYXNzLCBDc3NDbGFzc0J1aWxkZXIsIEtleVV0aWwsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5leHBvcnQgY29uc3QgU0xJREVSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5sZXQgc2xpZGVySWQgPSAwO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1zbGlkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NsaWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFNMSURFUl9WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woU2xpZGVyQ29tcG9uZW50KSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyh7XG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNULFxuICAgICAgICAgICAgbW9kaWZpZXJzOiB7XG4gICAgICAgICAgICAgICAgW0NvbnRlbnREZW5zaXR5TW9kZS5DT1pZXTogJ2ZkLXNsaWRlci0tbGcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcobW91c2VlbnRlciknOiAndGhpcy5fY29tcG9uZW50SG92ZXJlZCQubmV4dCh0cnVlKScsXG4gICAgICAgICcobW91c2VsZWF2ZSknOiAndGhpcy5fY29tcG9uZW50SG92ZXJlZCQubmV4dChmYWxzZSknLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdvblRvdWNoZWQoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIENzc0NsYXNzQnVpbGRlciwgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIFNsaWRlciBpZCwgaXQgaGFzIHNvbWUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0LCAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSAnZmQtc2xpZGVyLWlkLScgKyBzbGlkZXJJZCsrO1xuXG4gICAgLyoqIFVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBJRCBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVscyBzbGlkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgc2xpZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIE1pbmltdW0gdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fbWluKTtcbiAgICAgICAgaWYgKCgodGhpcy5tYXggLSBuZXdWYWx1ZSkgLyB0aGlzLnN0ZXApICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbWluKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuXG4gICAgLyoqIE1heGltdW0gdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fbWF4KTtcbiAgICAgICAgaWYgKCgobmV3VmFsdWUgLSB0aGlzLm1pbikgLyB0aGlzLnN0ZXApICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuXG4gICAgLyoqIFN0ZXAgdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RlcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMuX3N0ZXApO1xuICAgICAgICBpZiAoKCh0aGlzLm1heCAtIHRoaXMubWluKSAvIG5ld1ZhbHVlKSAlIDEgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICAgIH1cblxuICAgIC8qKiBKdW1wIHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGp1bXAodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9qdW1wID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMuX2p1bXApO1xuICAgIH1cbiAgICBnZXQganVtcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fanVtcDtcbiAgICB9XG5cbiAgICAvKiogUHV0IGEgbGFiZWwgb24gZXZlcnkgTi10aCB0aWNrbWFyay4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aWNrbWFya3NCZXR3ZWVuTGFiZWxzKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdGlja21hcmtzQmV0d2VlbkxhYmVscyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl90aWNrbWFya3NCZXR3ZWVuTGFiZWxzKTtcbiAgICB9XG4gICAgZ2V0IHRpY2ttYXJrc0JldHdlZW5MYWJlbHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpY2ttYXJrc0JldHdlZW5MYWJlbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpZGVyIG1vZGUuXG4gICAgICogT3B0aW9ucyBpbmNsdWRlOiAnc2luZ2xlJyB8ICdyYW5nZSdcbiAgICAgKiBUaGUgZGVmYXVsdCBpcyBzZXQgdG8gJ3NpbmdsZSdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vZGU6ICdzaW5nbGUnIHwgJ3JhbmdlJyA9ICdzaW5nbGUnO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGljayBtYXJrcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dUaWNrcyA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGljayBtYXJrIGxhYmVscy4gTXVzdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJ3Nob3dUaWNrcycgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dUaWNrc0xhYmVscyA9IGZhbHNlO1xuXG4gICAgLyoqIEFycmF5IG9mIGN1c3RvbSB2YWx1ZXMgdG8gdXNlIGZvciBTbGlkZXIuICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21WYWx1ZXM6IFNsaWRlckN1c3RvbVZhbHVlW10gPSBbXTtcblxuICAgIC8qKiBUb29sdGlwIGNhbiBiZSB0d28gdHlwZXMsICdyZWFkb25seScgdG8gZGlzcGxheSB2YWx1ZSBhbmQgJ2VkaXRhYmxlJyB0byBtYWtlIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZGlzcGxheSB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRvb2x0aXBNb2RlOiAncmVhZG9ubHknIHwgJ2VkaXRhYmxlJztcblxuICAgIC8qKiBIaWRlcyBkaXNwbGF5IG9mIGNvbG9yZWQgcHJvZ3Jlc3MgYmFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZVByb2dyZXNzQmFyID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29udHJvbCBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBzbGlkZXIgY3VycmVudCB2YWx1ZSB2ZXJib3NlIHN0cmluZy5cbiAgICAgKiBUaGlzIHdpbGwgYmUgcmVhZCBvbmx5IG9uY2UgYnkgc2NyZWVuIHJlYWRlciBhbmQgdXBvbiBzbGlkZXIgdmFsdWUgY2hhbmdlLFxuICAgICAqIHRoaXMgc3RyaW5nIHdpbGwgbm90IGJlIHJlYWQuXG4gICAgICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSBzaW5nbGVTbGlkZXJDdXJyZW50VmFsdWVQcmVmaXggaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3NpbmdsZVNsaWRlckN1cnJlbnRWYWx1ZVByZWZpeCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaW5nbGVTbGlkZXJDdXJyZW50VmFsdWVQcmVmaXg7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHJhbmdlIHNsaWRlciBoYW5kbGUgMSBjdXJyZW50IHZhbHVlIHN1cHBvcnRpbmcgc3RyaW5nXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmFuZ2VTbGlkZXJIYW5kbGUxQ3VycmVudFZhbHVlUHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSByYW5nZVNsaWRlckhhbmRsZTFDdXJyZW50VmFsdWVQcmVmaXggaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2xpZGVySGFuZGxlMUN1cnJlbnRWYWx1ZVByZWZpeCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgcmFuZ2VTbGlkZXJIYW5kbGUxQ3VycmVudFZhbHVlUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5nZVNsaWRlckhhbmRsZTFDdXJyZW50VmFsdWVQcmVmaXg7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmFuZ2VTbGlkZXJIYW5kbGUxQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHJhbmdlIHNsaWRlciBoYW5kbGUgMiBjdXJyZW50IHZhbHVlIHN1cHBvcnRpbmcgc3RyaW5nXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdQcm9wZXJ0eSByYW5nZVNsaWRlckhhbmRsZTJDdXJyZW50VmFsdWVQcmVmaXggaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2xpZGVySGFuZGxlMkN1cnJlbnRWYWx1ZVByZWZpeCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5nZVNsaWRlckhhbmRsZTJDdXJyZW50VmFsdWVQcmVmaXg7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wb3NpdGlvbjogbnVtYmVyIHwgbnVtYmVyW10gPSAwO1xuXG4gICAgLyoqIENvbnRyb2wgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCk6IFNsaWRlckNvbnRyb2xWYWx1ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcG9wb3ZlclZhbHVlUmVmKCk6IG51bWJlcltdIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLl9wb3NpdGlvbiBhcyBudW1iZXIsIHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyYWNrJywge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICB0cmFja0VsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaGFuZGxlJywge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICBoYW5kbGU6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdyYW5nZUhhbmRsZTEnLCB7XG4gICAgICAgIHJlYWQ6IEVsZW1lbnRSZWZcbiAgICB9KVxuICAgIHJhbmdlSGFuZGxlMTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3JhbmdlSGFuZGxlMicsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgcmFuZ2VIYW5kbGUyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihQb3BvdmVyQ29tcG9uZW50KVxuICAgIF9wb3BvdmVyczogUXVlcnlMaXN0PFBvcG92ZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCdzbGlkZXJUb29sdGlwV3JhcHBlcicpXG4gICAgX3NsaWRlclRvb2x0aXBXcmFwcGVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3ZhbHVlOiBudW1iZXIgfCBTbGlkZXJUaWNrTWFyayB8IFNsaWRlclRpY2tNYXJrW10gfCBudW1iZXJbXSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcm9ncmVzcyA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtc2xpZGVyLS1yYW5nZScpXG4gICAgX2lzUmFuZ2UgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZTFQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGUyUG9zaXRpb24gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMVZhbHVlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZTJWYWx1ZSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9yYW5nZVByb2dyZXNzID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RpY2tNYXJrczogU2xpZGVyVGlja01hcmtbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2xpZGVyVmFsdWVUYXJnZXRzID0gU2xpZGVyVmFsdWVUYXJnZXRzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcG9wb3ZlcklucHV0RmllbGRDbGFzcyA9IGBmZC1zbGlkZXItcG9wb3Zlci1pbnB1dC0ke3NsaWRlcklkfWA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc1J0bCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHdoZXRoZXIgdG8gdXNlIHZhbHVlIHdpdGggYSBwcmVmaXggZm9yIGFubm91bmNpbmdcbiAgICAgKi9cbiAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXggPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9taW4gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXggPSAxMDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0ZXAgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9qdW1wID0gMTA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RpY2ttYXJrc0JldHdlZW5MYWJlbHMgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZXNCeVN0ZXBzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2NvbXBvbmVudEhvdmVyZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9oYW5kbGVGb2N1c2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcmFuZ2VIYW5kbGUxRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3JhbmdlSGFuZGxlMkZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9wb3BvdmVySW5wdXRGaWVsZEhvdmVyZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICBfY29udGVudERlbnNpdHlPYnNlcnZlci5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1J0bCgpO1xuICAgICAgICB0aGlzLl9hdHRhY2hSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLl9vblJlc2l6ZSgpO1xuICAgICAgICBpZiAodGhpcy5fdmFsdWVzQnlTdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFZhbHVlc0J5U3RlcHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tJc0luUmFuZ2VNb2RlKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFRpY2tNYXJrcygpO1xuICAgICAgICB0aGlzLl9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk7XG4gICAgICAgIHRoaXMuX3JlY2FsY0hhbmRsZVBvc2l0aW9ucygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0ludGVyYWN0aW9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGlzUnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZT8ucnRsLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXRWYWx1ZW5vdyhwb3NpdGlvbjogbnVtYmVyIHwgbnVtYmVyW10sIHNsaWRlclZhbHVlVGFyZ2V0OiBTbGlkZXJWYWx1ZVRhcmdldHMpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0aGlzLmN1c3RvbVZhbHVlc1twb3NpdGlvbiBhcyBudW1iZXJdLmxhYmVsXG4gICAgICAgICAgICA6IHRoaXMuX3BvcG92ZXJWYWx1ZVJlZltzbGlkZXJWYWx1ZVRhcmdldF07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbWluVmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLm1pbiBhcyBudW1iZXJdLmxhYmVsIDogdGhpcy5taW47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbWF4VmFsdWUoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLm1heCBhcyBudW1iZXJdLmxhYmVsIDogdGhpcy5tYXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmZC1zbGlkZXInLFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA/ICdpcy1kaXNhYmxlZCcgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2UgPyAnZmQtc2xpZGVyLS1yYW5nZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc2hvd1RpY2tzICYmIHRoaXMuc2hvd1RpY2tzTGFiZWxzID8gJ2ZkLXNsaWRlci0td2l0aC1sYWJlbHMnIDogJycsXG4gICAgICAgICAgICB0aGlzLmNsYXNzLFxuICAgICAgICAgICAgdGhpcy5fcGxhdGZvcm0uRURHRSB8fCB0aGlzLl9wbGF0Zm9ybS5UUklERU5UID8gJ2ZkLXNsaWRlcl9fYWx0ZXJuYXRpdmUtdGljay13aWR0aCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBTbGlkZXJDb250cm9sVmFsdWUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25UcmFja0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24oZXZlbnQpKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmhhbmRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVGcm9tTW91c2Vtb3ZlID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZW1vdmUnLCAobW92ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24obW92ZUV2ZW50KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGhhbmRsZUluZGV4OiBTbGlkZXJSYW5nZUhhbmRsZXM7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSBTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5yYW5nZUhhbmRsZTIubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLlNlY29uZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jYWxjdWxhdGVWYWx1ZUZyb21Qb2ludGVyUG9zaXRpb24obW92ZUV2ZW50LCBmYWxzZSkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKGhhbmRsZUluZGV4LCB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZUZyb21Nb3VzZXVwID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZXVwJywgKCkgPT4ge1xuICAgICAgICAgICAgdW5zdWJzY3JpYmVGcm9tTW91c2Vtb3ZlKCk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZUZyb21Nb3VzZXVwKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsb3dlZEtleXM6IG51bWJlcltdID0gW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVywgRE9XTl9BUlJPVywgRU5URVIsIFNQQUNFXTtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgYWxsb3dlZEtleXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5qdW1wIDogdGhpcy5zdGVwO1xuICAgICAgICBsZXQgbmV3VmFsdWU6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBwcmV2VmFsdWUgPSB0aGlzLl9wb3NpdGlvbiBhcyBudW1iZXI7XG4gICAgICAgIGxldCBoYW5kbGVJbmRleDogU2xpZGVyUmFuZ2VIYW5kbGVzIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5yYW5nZUhhbmRsZTEubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHByZXZWYWx1ZSA9IHRoaXMuX2hhbmRsZTFWYWx1ZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVJbmRleCA9IFNsaWRlclJhbmdlSGFuZGxlcy5GaXJzdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJldlZhbHVlID0gdGhpcy5faGFuZGxlMlZhbHVlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLlNlY29uZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1J0bCgpKSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSArIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSAtIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlIC0gZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZWYWx1ZSArIGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLl9wcm9jZXNzTmV3VmFsdWUobmV3VmFsdWUgYXMgbnVtYmVyLCAhdGhpcy5faXNSYW5nZSk7XG4gICAgICAgIGlmICghdGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oaGFuZGxlSW5kZXgsIG5ld1ZhbHVlIGFzIG51bWJlcik7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3VwZGF0ZVZhbHVlRnJvbUlucHV0KHZhbHVlOiBzdHJpbmcsIHRhcmdldDogU2xpZGVyVmFsdWVUYXJnZXRzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fcHJvY2Vzc05ld1ZhbHVlKCt2YWx1ZSkgYXMgbnVtYmVyO1xuICAgICAgICBpZiAoIXRoaXMuX2lzUmFuZ2UgJiYgdGFyZ2V0ID09PSBTbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUikge1xuICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlUG9wb3ZlcnNQb3NpdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQgPT09IFNsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gU2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnJhbmdlSGFuZGxlMi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0VmFsdWUodGhpcy5fY29uc3RydWN0UmFuZ2VNb2RlbFZhbHVlKCkpO1xuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRWYWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlLCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlKCh2YWx1ZSA/PyBbMC4wXSkgYXMgbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGUoKHZhbHVlID8/IDApIGFzIG51bWJlciB8IFNsaWRlclRpY2tNYXJrKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9wb3BvdmVycy5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLnJlZnJlc2hQb3NpdGlvbigpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihldmVudDogTW91c2VFdmVudCwgdGFrZUN1c3RvbVZhbHVlID0gdHJ1ZSk6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCB3aWR0aCB9ID0gdGhpcy50cmFja0VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCBwZXJjZW50YWdlID0gKGV2ZW50LmNsaWVudFggLSBsZWZ0KSAvIHdpZHRoO1xuICAgICAgICBpZiAodGhpcy5faXNSdGwpIHtcbiAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSAxIC0gcGVyY2VudGFnZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMubWluICsgcGVyY2VudGFnZSAqICh0aGlzLm1heCAtIHRoaXMubWluKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NOZXdWYWx1ZShuZXdWYWx1ZSwgdGFrZUN1c3RvbVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb2Nlc3NOZXdWYWx1ZShuZXdWYWx1ZTogbnVtYmVyLCB0YWtlQ3VzdG9tVmFsdWUgPSB0cnVlKTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsge1xuICAgICAgICBpZiAobmV3VmFsdWUgPiB0aGlzLm1heCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLm1heDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGNvbnN0IHN0ZXBEaWZmQXJyYXkgPSB0aGlzLl92YWx1ZXNCeVN0ZXBzXG4gICAgICAgICAgICAubWFwKChzdGVwVmFsdWUpID0+ICh7XG4gICAgICAgICAgICAgICAgZGlmZjogTWF0aC5hYnMoc3RlcFZhbHVlIC0gbmV3VmFsdWUpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzdGVwVmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGlmZiAtIGIuZGlmZik7XG4gICAgICAgIGxldCB2YWx1ZTogU2xpZGVyVGlja01hcmsgfCBudW1iZXIgPSBzdGVwRGlmZkFycmF5WzBdLnZhbHVlO1xuICAgICAgICBpZiAodGFrZUN1c3RvbVZhbHVlICYmIHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jdXN0b21WYWx1ZXNbdmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihoYW5kbGVJbmRleDogU2xpZGVyUmFuZ2VIYW5kbGVzLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fY2FsY1Byb2dyZXNzKHZhbHVlLCB0cnVlKTtcbiAgICAgICAgaWYgKGhhbmRsZUluZGV4ID09PSBTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTFWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMVBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhbmRsZUluZGV4ID09PSBTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTJQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JhbmdlUHJvZ3Jlc3MgPSBNYXRoLmFicyh0aGlzLl9oYW5kbGUyUG9zaXRpb24gLSB0aGlzLl9oYW5kbGUxUG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0UmFuZ2VNb2RlbFZhbHVlKCk6IG51bWJlcltdIHwgU2xpZGVyVGlja01hcmtbXSB7XG4gICAgICAgIGxldCByYW5nZUxvd2VyVmFsdWU6IG51bWJlciB8IHN0cmluZztcbiAgICAgICAgbGV0IHJhbmdlSGlnaGVyVmFsdWU6IG51bWJlciB8IHN0cmluZztcbiAgICAgICAgbGV0IHJhbmdlVmFsdWU6IG51bWJlcltdIHwgU2xpZGVyVGlja01hcmtbXSA9IFtcbiAgICAgICAgICAgIE1hdGgubWluKHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlKSxcbiAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuX2hhbmRsZTFWYWx1ZSwgdGhpcy5faGFuZGxlMlZhbHVlKVxuICAgICAgICBdO1xuICAgICAgICByYW5nZUxvd2VyVmFsdWUgPSByYW5nZVZhbHVlWzBdO1xuICAgICAgICByYW5nZUhpZ2hlclZhbHVlID0gcmFuZ2VWYWx1ZVsxXTtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuY3VzdG9tVmFsdWVzW3JhbmdlVmFsdWVbMF1dIHx8IHRoaXMuY3VzdG9tVmFsdWVzWzBdO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5jdXN0b21WYWx1ZXNbcmFuZ2VWYWx1ZVsxXV0gfHwgdGhpcy5jdXN0b21WYWx1ZXNbdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICByYW5nZVZhbHVlID0gW21pbiwgbWF4XTtcbiAgICAgICAgICAgIHJhbmdlTG93ZXJWYWx1ZSA9IHJhbmdlVmFsdWVbMF0ubGFiZWw7XG4gICAgICAgICAgICByYW5nZUhpZ2hlclZhbHVlID0gcmFuZ2VWYWx1ZVsxXS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKCdyYW5nZSB2YWx1ZSBiZXR3ZWVuICcgKyByYW5nZUxvd2VyVmFsdWUgKyAnIGFuZCAnICsgcmFuZ2VIaWdoZXJWYWx1ZSwgJ3BvbGl0ZScpO1xuICAgICAgICByZXR1cm4gcmFuZ2VWYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2F0dGFjaFJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29uUmVzaXplKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFRpY2tNYXJrcygpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RWYWx1ZXNCeVN0ZXBzKCk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzQnlTdGVwcyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGg6ICh0aGlzLm1heCAtIHRoaXMubWluKSAvIHRoaXMuc3RlcCArIDFcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChfLCBpKSA9PiBOdW1iZXIoKHRoaXMubWluICsgaSAqIHRoaXMuc3RlcCkudG9GaXhlZCgyKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RUaWNrTWFya3MoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zaG93VGlja3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubWluID0gMDtcbiAgICAgICAgICAgIHRoaXMubWF4ID0gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21WYWx1ZXNMZW5ndGggPSB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5fdGlja01hcmtzID0gdGhpcy5jdXN0b21WYWx1ZXMubWFwKChpdGVtLCBpKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICgxMDAgLyBjdXN0b21WYWx1ZXNMZW5ndGgpICogaVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLm1heCAtIHRoaXMubWluO1xuICAgICAgICAgICAgY29uc3QgdGlja01hcmtzQ291bnQgPSB0b3RhbCAvIHRoaXMuc3RlcCArIDE7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF4VGlja01hcmtzTnVtYmVyICE9PSB1bmRlZmluZWQgJiYgdGlja01hcmtzQ291bnQgPiB0aGlzLl9tYXhUaWNrTWFya3NOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90aWNrTWFya3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7dGhpcy5taW59YFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke3RoaXMubWF4fWBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRpY2tNYXJrc0NvdW50ICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogdGlja01hcmtzQ291bnRcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5yb3VuZChpICogdGhpcy5zdGVwICogMTAwKSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gKHZhbHVlIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke3RoaXMubWluICsgdmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9tYXhUaWNrTWFya3NOdW1iZXIoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyYWNrRWwgfHwgIXRoaXMudHJhY2tFbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy50cmFja0VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyBNSU5fRElTVEFOQ0VfQkVUV0VFTl9USUNLUyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjUHJvZ3Jlc3ModmFsdWU6IG51bWJlciwgc2tpcFJ0bCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHByb2dyZXNzID0gKCh2YWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSkgKiAxMDA7XG4gICAgICAgIGlmICghc2tpcFJ0bCAmJiB0aGlzLl9pc1J0bCkge1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSAxMDAgLSBwcm9ncmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvZ3Jlc3MgPiAxMDApIHtcbiAgICAgICAgICAgIHJldHVybiAxMDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2dyZXNzIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb2dyZXNzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVjYWxjSGFuZGxlUG9zaXRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMVBvc2l0aW9uID0gdGhpcy5fY2FsY1Byb2dyZXNzKHRoaXMuX2hhbmRsZTFWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUyUG9zaXRpb24gPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModGhpcy5faGFuZGxlMlZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlUHJvZ3Jlc3MgPSBNYXRoLmFicyh0aGlzLl9oYW5kbGUyUG9zaXRpb24gLSB0aGlzLl9oYW5kbGUxUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzID0gdGhpcy5fY2FsY1Byb2dyZXNzKHRoaXMuX3Bvc2l0aW9uIGFzIG51bWJlciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja0lzSW5SYW5nZU1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzUmFuZ2UgPSB0aGlzLm1vZGUgPT09ICdyYW5nZSc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUnRsIGNoYW5nZSBzdWJzY3JpcHRpb24gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb1J0bCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydGxTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaXNSdGw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzUnRsID0gaXNSdGw7XG4gICAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNpbmdlTW9kZSh2YWx1ZTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmspOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGVXaXRoQ3VzdG9tVmFsdWUodmFsdWUgYXMgU2xpZGVyVGlja01hcmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRTaW5nZU1vZGVEZWZhdWx0KGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLm1pbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNpbmdlTW9kZURlZmF1bHQodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHRoaXMuX2NhbGNQcm9ncmVzcyh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2luZ2VNb2RlV2l0aEN1c3RvbVZhbHVlKHNsaWRlclRpY2tNYXJrOiBTbGlkZXJUaWNrTWFyayk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9ICh0aGlzLl9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbihzbGlkZXJUaWNrTWFyaykgYXMgbnVtYmVyKSB8fCB0aGlzLm1pbjtcbiAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZURlZmF1bHQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFJhbmdlTW9kZSh2YWx1ZTogbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlV2l0aEN1c3RvbVZhbHVlcyh2YWx1ZSBhcyBTbGlkZXJUaWNrTWFya1tdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdEhhbmRsZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlWzBdLCB0aGlzLm1pbik7XG4gICAgICAgIGNvbnN0IHNlY29uZEhhbmRsZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlWzFdLCB0aGlzLm1heCk7XG4gICAgICAgIHRoaXMuX2luaXRSYW5nZU1vZGVEZWZhdWx0KFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0UmFuZ2VNb2RlRGVmYXVsdChbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV06IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdO1xuICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0LCBmaXJzdEhhbmRsZSk7XG4gICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kLCBzZWNvbmRIYW5kbGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFJhbmdlTW9kZVdpdGhDdXN0b21WYWx1ZXMoW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdOiBTbGlkZXJUaWNrTWFya1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb24oW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdKSB8fCBbdGhpcy5taW4sIHRoaXMubWF4XTtcbiAgICAgICAgdGhpcy5faW5pdFJhbmdlTW9kZURlZmF1bHQodmFsdWUgYXMgbnVtYmVyW10pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb24odmFsdWU6IFNsaWRlclRpY2tNYXJrIHwgU2xpZGVyVGlja01hcmtbXSk6IG51bWJlciB8IG51bWJlcltdIHtcbiAgICAgICAgdGhpcy5taW4gPSAwO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbnModmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Q3VzdG9tVmFsdWVzUG9zaXRpb25zKHZhbHVlOiBTbGlkZXJUaWNrTWFyayB8IFNsaWRlclRpY2tNYXJrW10pOiBudW1iZXIgfCBudW1iZXJbXSB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgKHZhbHVlIGFzIFNsaWRlclRpY2tNYXJrW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2UgPyBbMCwgdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMV0gOiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgbGV0IFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUoZmlyc3RIYW5kbGUpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RIYW5kbGUgPSB0aGlzLmN1c3RvbVZhbHVlc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VPZkN1c3RvbVZhbHVlKHNlY29uZEhhbmRsZSkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmRIYW5kbGUgPSB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SGFuZGxlUG9zaXRpb24gPSB0aGlzLmN1c3RvbVZhbHVlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGZpcnN0SGFuZGxlLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZEhhbmRsZVBvc2l0aW9uID0gdGhpcy5jdXN0b21WYWx1ZXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBzZWNvbmRIYW5kbGUudmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhlcyA9IFtcbiAgICAgICAgICAgICAgICBmaXJzdEhhbmRsZVBvc2l0aW9uID49IDAgPyBmaXJzdEhhbmRsZVBvc2l0aW9uIDogMCxcbiAgICAgICAgICAgICAgICBzZWNvbmRIYW5kbGVQb3NpdGlvbiA+PSAwID8gc2Vjb25kSGFuZGxlUG9zaXRpb24gOiB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgZmlyc3RIYW5kbGUgPSB2YWx1ZSBhcyBTbGlkZXJUaWNrTWFyaztcbiAgICAgICAgICAgIGlmICghdGhpcy5faW5zdGFuY2VPZkN1c3RvbVZhbHVlKGZpcnN0SGFuZGxlKSkge1xuICAgICAgICAgICAgICAgIGZpcnN0SGFuZGxlID0gdGhpcy5jdXN0b21WYWx1ZXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSBmaXJzdEhhbmRsZS52YWx1ZSkgfHwgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5zdGFuY2VPZkN1c3RvbVZhbHVlKG9iamVjdDogYW55KTogb2JqZWN0IGlzIFNsaWRlckN1c3RvbVZhbHVlIHtcbiAgICAgICAgcmV0dXJuICEhb2JqZWN0ICYmICd2YWx1ZScgaW4gb2JqZWN0ICYmICdsYWJlbCcgaW4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9JbnRlcmFjdGlvbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRm9jdXNlZCQsXG4gICAgICAgICAgICB0aGlzLl9yYW5nZUhhbmRsZTFGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlSGFuZGxlMkZvY3VzZWQkLFxuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcklucHV0RmllbGRGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudEhvdmVyZWQkLFxuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcklucHV0RmllbGRIb3ZlcmVkJFxuICAgICAgICBdKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgICAgICBtYXAoKHN0YXRlcykgPT4gc3RhdGVzLnNvbWUoQm9vbGVhbikpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoZm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBmb2N1c2VkLCBjaGVjayBmb3IgdGhlIGVkZ2UgY2FzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBob3ZlciBpcyBvbiB0aGUgZmQtcG9wb3Zlci1ib2R5LCB0aGF0IGlzIGEgcGFyZW50IGZvciB0aGUgdG9vbHRpcC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiB0cnVlLCB3aGVuIGhvdmVyaW5nIHRoZSBnYXAgYmV0d2VlbiBoYW5kbGUgYW5kIHRoZSB0b29sdGlwLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNQb3BvdmVySG92ZXJlZCgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZvY3VzZWQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3BvdmVycy5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLm9wZW4oKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRQcmVmaXgoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wb3ZlcnMuZm9yRWFjaCgocG9wb3ZlcikgPT4gcG9wb3Zlci5jbG9zZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiByZXNldCBkZWZhdWx0IHByZWZpeCBvbiBsZWF2aW5nIHRoZSBzbGlkZXIgKi9cbiAgICBwcml2YXRlIF9yZXNldFByZWZpeCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcmVzZXQgcHJlZml4IHN0cmluZyBmb3Igc2xpZGVyIGN1cnJlbnQgdmFsdWUgdGhhdCBuZWVkIHRvIGJlIGFubm91bmNlZFxuICAgICAgICB0aGlzLl91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgaW5wdXQgcG9wb3ZlciBlbGVtZW50IGlzIGhvdmVyZWQuXG4gICAgICogV2lsbCBhbHNvIHJldHVybiB0cnVlLCB3aGVuIGhvdmVyaW5nIHRoZSBnYXAgYmV0d2VlbiBoYW5kbGUgYW5kIHRoZSB0b29sdGlwLlxuICAgICAqIElmIHllcywgcmV0dXJucyBcInRydWVcIiBpbnN0YW50bHkgYW5kIFwiZmFsc2VcIiBvbmNlIGl0J3Mgbm90IGhvdmVyZWQgYW55bW9yZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1BvcG92ZXJIb3ZlcmVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBwb3BvdmVyQm9keSA9IHRoaXMuX3NsaWRlclRvb2x0aXBXcmFwcGVycy5maXJzdD8ubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdmZC1wb3BvdmVyLWJvZHknKTtcbiAgICAgICAgaWYgKHBvcG92ZXJCb2R5Py5tYXRjaGVzKCc6aG92ZXInKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21FdmVudChwb3BvdmVyQm9keSwgJ21vdXNlbGVhdmUnKS5waXBlKG1hcFRvKGZhbHNlKSwgdGFrZSgxKSwgc3RhcnRXaXRoKHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX2lubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIl9pc1JhbmdlID8gcmFuZ2VNb2RlIDogc2luZ2xlTW9kZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2tcIiAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIiAjdHJhY2s+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJfaXNSYW5nZSA/IHJhbmdlTW9kZVRyYWNrIDogc2luZ2xlTW9kZVRyYWNrXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX190aWNrLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fdGlja3NcIiAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGlja3NcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aWNrIG9mIF90aWNrTWFya3M7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX3RpY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwidGljay5wb3NpdGlvbiB8fCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1zbGlkZXJfX3RpY2stLWluLXJhbmdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoaWRlUHJvZ3Jlc3NCYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2lzUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aWNrLnZhbHVlID49IF9wb3NpdGlvblswXSAmJiB0aWNrLnZhbHVlIDw9IF9wb3NpdGlvblsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRpY2sudmFsdWUgPD0gX3Bvc2l0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX2xhYmVsc1wiICpuZ0lmPVwic2hvd1RpY2tzICYmIHNob3dUaWNrc0xhYmVsc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGljayBvZiBfdGlja01hcmtzOyBpbmRleCBhcyBpOyBsYXN0IGFzIGxhc3Q7IGZpcnN0IGFzIGZpcnN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpcnN0IHx8IGxhc3QgfHwgaSAlIHRpY2ttYXJrc0JldHdlZW5MYWJlbHMgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9fbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInRpY2sucG9zaXRpb24gfHwgMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVNb2RlVHJhY2s+XG4gICAgPGRpdiAqbmdJZj1cIiFoaWRlUHJvZ3Jlc3NCYXJcIiBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2stcmFuZ2VcIiBbc3R5bGUud2lkdGguJV09XCJfcHJvZ3Jlc3NcIj48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmFuZ2VNb2RlVHJhY2s+XG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFoaWRlUHJvZ3Jlc3NCYXJcIlxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9fdHJhY2stcmFuZ2VcIlxuICAgICAgICBbc3R5bGUud2lkdGguJV09XCJfcmFuZ2VQcm9ncmVzc1wiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX2hhbmRsZTFQb3NpdGlvbiA8IF9oYW5kbGUyUG9zaXRpb24gPyBfaGFuZGxlMVBvc2l0aW9uIDogX2hhbmRsZTJQb3NpdGlvblwiXG4gICAgPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaW5nbGVNb2RlPlxuICAgIDxkaXZcbiAgICAgICAgI2hhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9faGFuZGxlLS1sZ109XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgYXJpYUxhYmVsIHx8ICdjb3JlU2xpZGVyLnNpbmdsZU1pbk1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbZmRQb3BvdmVyVHJpZ2dlcl09XCJ0b29sdGlwTW9kZSA/IHNpbmdsZVNsaWRlclBvcG92ZXIgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCInY29yZVNsaWRlci5zaW5nbGVWYWx1ZW1pbkRldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtaW5WYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCInY29yZVNsaWRlci5zaW5nbGVWYWx1ZW1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtYXhWYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLnNpbmdsZVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfcG9zaXRpb24sIF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLnNpbmdsZVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfcG9zaXRpb24sIF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKVxuICAgICAgICBcIlxuICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgW3Bvc2l0aW9uXT1cIl9wcm9ncmVzc1wiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25IYW5kbGVDbGljaygkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoZm9jdXMpPVwiX2hhbmRsZUZvY3VzZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAoYmx1cik9XCJfaGFuZGxlRm9jdXNlZCQubmV4dChmYWxzZSlcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgI3NpbmdsZVNsaWRlclBvcG92ZXJcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYXBwZW5kVG9dPVwiaGFuZGxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTW9kZVwiXG4gICAgICAgIGNsYXNzPVwiZmQtcG9wb3Zlci0tc2xpZGVyXCJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC1wb3BvdmVyXCJcbiAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcG9wb3ZlcklubmVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFyZ2V0OiBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIsIHBvc2l0aW9uOiBfcG9zaXRpb24gfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmFuZ2VNb2RlPlxuICAgIDxkaXZcbiAgICAgICAgI3JhbmdlSGFuZGxlMVxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9faGFuZGxlLS1sZ109XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgYXJpYUxhYmVsIHx8ICdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMU1pbk1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbZmRQb3BvdmVyVHJpZ2dlcl09XCJ0b29sdGlwTW9kZSA/IHJhbmdlU2xpZGVyUG9wb3ZlcjEgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZW1pbkRldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtaW5WYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZW1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtYXhWYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMVZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMVZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMVZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSkgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSlcbiAgICAgICAgXCJcbiAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgIFtwb3NpdGlvbl09XCJfaGFuZGxlMVBvc2l0aW9uXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkhhbmRsZUNsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIl9yYW5nZUhhbmRsZTFGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgKGJsdXIpPVwiX3JhbmdlSGFuZGxlMUZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgICNyYW5nZUhhbmRsZTJcbiAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXJfX2hhbmRsZVwiXG4gICAgICAgIFtjbGFzcy5mZC1zbGlkZXJfX2hhbmRsZS0tbGddPVwiX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb3p5JCB8IGFzeW5jXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICByb2xlPVwic2xpZGVyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgIGFyaWFMYWJlbCB8fCAnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJNaW5NYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH1cbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgW2ZkUG9wb3ZlclRyaWdnZXJdPVwidG9vbHRpcE1vZGUgPyByYW5nZVNsaWRlclBvcG92ZXIyIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVtaW5EZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWluVmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwiJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVtYXhEZXRhaWxzJyB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogbWF4VmFsdWUgfVwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX2hhbmRsZTJWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX2hhbmRsZTJWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyKVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVldGV4dF09XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMlZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpXG4gICAgICAgIFwiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX2hhbmRsZTJQb3NpdGlvblwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25IYW5kbGVDbGljaygkZXZlbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJfcmFuZ2VIYW5kbGUyRm9jdXNlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChibHVyKT1cIl9yYW5nZUhhbmRsZTJGb2N1c2VkJC5uZXh0KGZhbHNlKVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgI3JhbmdlU2xpZGVyUG9wb3ZlcjFcbiAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYXBwZW5kVG9dPVwicmFuZ2VIYW5kbGUxXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiF0b29sdGlwTW9kZVwiXG4gICAgICAgIGFkZGl0aW9uYWxCb2R5Q2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXAtcG9wb3ZlclwiXG4gICAgICAgIGNsYXNzPVwiZmQtcG9wb3Zlci0tc2xpZGVyXCJcbiAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcG9wb3ZlcklubmVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFyZ2V0OiBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEsIHBvc2l0aW9uOiBfaGFuZGxlMVZhbHVlIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLXBvcG92ZXI+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAjcmFuZ2VTbGlkZXJQb3BvdmVyMlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFthcHBlbmRUb109XCJyYW5nZUhhbmRsZTJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNb2RlXCJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC1wb3BvdmVyXCJcbiAgICAgICAgY2xhc3M9XCJmZC1wb3BvdmVyLS1zbGlkZXJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBwb3BvdmVySW5uZXI7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyB0YXJnZXQ6IF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMiwgcG9zaXRpb246IF9oYW5kbGUyVmFsdWUgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcG9wb3ZlcklubmVyIGxldC10YXJnZXQ9XCJ0YXJnZXRcIiBsZXQtcG9zaXRpb249XCJwb3NpdGlvblwiPlxuICAgIDxkaXZcbiAgICAgICAgI3NsaWRlclRvb2x0aXBXcmFwcGVyXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwLXdyYXBwZXJcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIl9wb3BvdmVySW5wdXRGaWVsZEhvdmVyZWQkLm5leHQoZmFsc2UpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIoY3VzdG9tVmFsdWVzICYmIGN1c3RvbVZhbHVlcy5sZW5ndGggPiAwKSB8fCB0b29sdGlwTW9kZSA9PT0gJ3JlYWRvbmx5J1wiIGNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwXCI+XG4gICAgICAgICAgICB7eyBjdXN0b21WYWx1ZXMgJiYgY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDAgPyBjdXN0b21WYWx1ZXNbcG9zaXRpb25dLmxhYmVsIDogX3BvcG92ZXJWYWx1ZVJlZlt0YXJnZXRdIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3BvcG92ZXJJbnB1dEZpZWxkXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBmZGtPbmx5RGlnaXRzXG4gICAgICAgICAgICBbZGVjaW1hbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5jaF09XCIoJycgKyBfcG9wb3ZlclZhbHVlUmVmW3RhcmdldF0pLmxlbmd0aCArIDJcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1pbnB1dCBmZC1zbGlkZXItLXRvb2x0aXAge3sgX3BvcG92ZXJJbnB1dEZpZWxkQ2xhc3MgfX1cIlxuICAgICAgICAgICAgKm5nSWY9XCJjdXN0b21WYWx1ZXM/Lmxlbmd0aCA9PT0gMCAmJiB0b29sdGlwTW9kZSA9PT0gJ2VkaXRhYmxlJ1wiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIl9wb3BvdmVyVmFsdWVSZWZbdGFyZ2V0XVwiXG4gICAgICAgICAgICAoYmx1cik9XCJfdXBkYXRlVmFsdWVGcm9tSW5wdXQocG9wb3ZlcklucHV0RmllbGQudmFsdWUsIHRhcmdldClcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX3VwZGF0ZVZhbHVlRnJvbUlucHV0KHBvcG92ZXJJbnB1dEZpZWxkLnZhbHVlLCB0YXJnZXQpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJfcG9wb3ZlcklucHV0RmllbGRGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgICAgIChibHVyKT1cIl9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
846
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvc2xpZGVyL3NsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEVBQ0gsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwr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SztnQkFVRiw4QkFBOEI7c0JBRGpDLEtBQUs7Z0JBa0JGLG9DQUFvQztzQkFEdkMsS0FBSztnQkFrQkYsb0NBQW9DO3NCQUR2QyxLQUFLO2dCQWdCRixLQUFLO3NCQURSLEtBQUs7Z0JBaUJOLE9BQU87c0JBSE4sU0FBUzt1QkFBQyxPQUFPLEVBQUU7d0JBQ2hCLElBQUksRUFBRSxVQUFVO3FCQUNuQjtnQkFPRCxNQUFNO3NCQUhMLFNBQVM7dUJBQUMsUUFBUSxFQUFFO3dCQUNqQixJQUFJLEVBQUUsVUFBVTtxQkFDbkI7Z0JBT0QsWUFBWTtzQkFIWCxTQUFTO3VCQUFDLGNBQWMsRUFBRTt3QkFDdkIsSUFBSSxFQUFFLFVBQVU7cUJBQ25CO2dCQU9ELFlBQVk7c0JBSFgsU0FBUzt1QkFBQyxjQUFjLEVBQUU7d0JBQ3ZCLElBQUksRUFBRSxVQUFVO3FCQUNuQjtnQkFLRCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQUs5QixzQkFBc0I7c0JBRHJCLFlBQVk7dUJBQUMsc0JBQXNCO2dCQVdwQyxRQUFRO3NCQURQLFdBQVc7dUJBQUMsd0JBQXdCO2dCQXdKckMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBTUEFDRSwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgbWFwLFxuICAgIG1hcFRvLFxuICAgIHNraXAsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRha2VVbnRpbFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgTnVsbGFibGUsIHdhcm5PbmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBTbGlkZXJDb250cm9sVmFsdWUsXG4gICAgU2xpZGVyQ3VzdG9tVmFsdWUsXG4gICAgU2xpZGVyUmFuZ2VIYW5kbGVzLFxuICAgIFNsaWRlclRpY2tNYXJrLFxuICAgIFNsaWRlclZhbHVlVGFyZ2V0c1xufSBmcm9tICcuL3NsaWRlci5tb2RlbCc7XG5pbXBvcnQgeyBNSU5fRElTVEFOQ0VfQkVUV0VFTl9USUNLUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFwcGx5Q3NzQ2xhc3MsIENzc0NsYXNzQnVpbGRlciwgS2V5VXRpbCwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEZvcm1JdGVtQ29udHJvbCwgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbmV4cG9ydCBjb25zdCBTTElERVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xpZGVyQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcbmxldCBzbGlkZXJJZCA9IDA7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXNsaWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2xpZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgU0xJREVSX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICByZWdpc3RlckZvcm1JdGVtQ29udHJvbChTbGlkZXJDb21wb25lbnQpLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIGRlZmF1bHRDb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QsXG4gICAgICAgICAgICBtb2RpZmllcnM6IHtcbiAgICAgICAgICAgICAgICBbQ29udGVudERlbnNpdHlNb2RlLkNPWlldOiAnZmQtc2xpZGVyLS1sZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhtb3VzZWVudGVyKSc6ICd0aGlzLl9jb21wb25lbnRIb3ZlcmVkJC5uZXh0KHRydWUpJyxcbiAgICAgICAgJyhtb3VzZWxlYXZlKSc6ICd0aGlzLl9jb21wb25lbnRIb3ZlcmVkJC5uZXh0KGZhbHNlKScsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ29uVG91Y2hlZCgpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQ3NzQ2xhc3NCdWlsZGVyLCBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogU2xpZGVyIGlkLCBpdCBoYXMgc29tZSBkZWZhdWx0IHZhbHVlIGlmIG5vdCBzZXQsICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBpZCA9ICdmZC1zbGlkZXItaWQtJyArIHNsaWRlcklkKys7XG5cbiAgICAvKiogVXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIElEIG9mIHRoZSBlbGVtZW50IHRoYXQgbGFiZWxzIHNsaWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBzbGlkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogTWluaW11bSB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl9taW4pO1xuICAgICAgICBpZiAoKCh0aGlzLm1heCAtIG5ld1ZhbHVlKSAvIHRoaXMuc3RlcCkgJSAxICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgICB9XG5cbiAgICAvKiogTWF4aW11bSB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCB0aGlzLl9tYXgpO1xuICAgICAgICBpZiAoKChuZXdWYWx1ZSAtIHRoaXMubWluKSAvIHRoaXMuc3RlcCkgJSAxICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICB9XG5cbiAgICAvKiogU3RlcCB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGVwKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fc3RlcCk7XG4gICAgICAgIGlmICgoKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gbmV3VmFsdWUpICUgMSAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0ZXAgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXA7XG4gICAgfVxuXG4gICAgLyoqIEp1bXAgdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQganVtcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2p1bXAgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgdGhpcy5fanVtcCk7XG4gICAgfVxuICAgIGdldCBqdW1wKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qdW1wO1xuICAgIH1cblxuICAgIC8qKiBQdXQgYSBsYWJlbCBvbiBldmVyeSBOLXRoIHRpY2ttYXJrLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRpY2ttYXJrc0JldHdlZW5MYWJlbHModmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl90aWNrbWFya3NCZXR3ZWVuTGFiZWxzID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMuX3RpY2ttYXJrc0JldHdlZW5MYWJlbHMpO1xuICAgIH1cbiAgICBnZXQgdGlja21hcmtzQmV0d2VlbkxhYmVscygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGlja21hcmtzQmV0d2VlbkxhYmVscztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTbGlkZXIgbW9kZS5cbiAgICAgKiBPcHRpb25zIGluY2x1ZGU6ICdzaW5nbGUnIHwgJ3JhbmdlJ1xuICAgICAqIFRoZSBkZWZhdWx0IGlzIHNldCB0byAnc2luZ2xlJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9kZTogJ3NpbmdsZScgfCAncmFuZ2UnID0gJ3NpbmdsZSc7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aWNrIG1hcmtzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1RpY2tzID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aWNrIG1hcmsgbGFiZWxzLiBNdXN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnc2hvd1RpY2tzJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1RpY2tzTGFiZWxzID0gZmFsc2U7XG5cbiAgICAvKiogQXJyYXkgb2YgY3VzdG9tIHZhbHVlcyB0byB1c2UgZm9yIFNsaWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbVZhbHVlczogU2xpZGVyQ3VzdG9tVmFsdWVbXSA9IFtdO1xuXG4gICAgLyoqIFRvb2x0aXAgY2FuIGJlIHR3byB0eXBlcywgJ3JlYWRvbmx5JyB0byBkaXNwbGF5IHZhbHVlIGFuZCAnZWRpdGFibGUnIHRvIG1ha2UgdGhlIGFiaWxpdHkgdG8gc2V0IGFuZCBkaXNwbGF5IHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9vbHRpcE1vZGU6ICdyZWFkb25seScgfCAnZWRpdGFibGUnO1xuXG4gICAgLyoqIEhpZGVzIGRpc3BsYXkgb2YgY29sb3JlZCBwcm9ncmVzcyBiYXIuICovXG4gICAgQElucHV0KClcbiAgICBoaWRlUHJvZ3Jlc3NCYXIgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb250cm9sIGlzIGRpc2FibGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIHNsaWRlciBjdXJyZW50IHZhbHVlIHZlcmJvc2Ugc3RyaW5nLlxuICAgICAqIFRoaXMgd2lsbCBiZSByZWFkIG9ubHkgb25jZSBieSBzY3JlZW4gcmVhZGVyIGFuZCB1cG9uIHNsaWRlciB2YWx1ZSBjaGFuZ2UsXG4gICAgICogdGhpcyBzdHJpbmcgd2lsbCBub3QgYmUgcmVhZC5cbiAgICAgKiBAZGVwcmVjYXRlZCBubyBsb25nZXIgdXNlZCwgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzaW5nbGVTbGlkZXJDdXJyZW50VmFsdWVQcmVmaXgodmFsdWU6IHN0cmluZykge1xuICAgICAgICB3YXJuT25jZSgnUHJvcGVydHkgc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4IGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkLicpO1xuICAgICAgICB0aGlzLl9zaW5nbGVTbGlkZXJDdXJyZW50VmFsdWVQcmVmaXggPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHNpbmdsZVNsaWRlckN1cnJlbnRWYWx1ZVByZWZpeCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2luZ2xlU2xpZGVyQ3VycmVudFZhbHVlUHJlZml4O1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NpbmdsZVNsaWRlckN1cnJlbnRWYWx1ZVByZWZpeDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiByYW5nZSBzbGlkZXIgaGFuZGxlIDEgY3VycmVudCB2YWx1ZSBzdXBwb3J0aW5nIHN0cmluZ1xuICAgICAqIFRoaXMgd2lsbCBiZSByZWFkIG9ubHkgb25jZSBieSBzY3JlZW4gcmVhZGVyIGFuZCB1cG9uIHNsaWRlciB2YWx1ZSBjaGFuZ2UsXG4gICAgICogdGhpcyBzdHJpbmcgd2lsbCBub3QgYmUgcmVhZC5cbiAgICAgKiAqIEBkZXByZWNhdGVkIG5vIGxvbmdlciB1c2VkLCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJhbmdlU2xpZGVySGFuZGxlMUN1cnJlbnRWYWx1ZVByZWZpeCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHdhcm5PbmNlKCdQcm9wZXJ0eSByYW5nZVNsaWRlckhhbmRsZTFDdXJyZW50VmFsdWVQcmVmaXggaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWQuJyk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2xpZGVySGFuZGxlMUN1cnJlbnRWYWx1ZVByZWZpeCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgcmFuZ2VTbGlkZXJIYW5kbGUxQ3VycmVudFZhbHVlUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYW5nZVNsaWRlckhhbmRsZTFDdXJyZW50VmFsdWVQcmVmaXg7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmFuZ2VTbGlkZXJIYW5kbGUxQ3VycmVudFZhbHVlUHJlZml4OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHJhbmdlIHNsaWRlciBoYW5kbGUgMiBjdXJyZW50IHZhbHVlIHN1cHBvcnRpbmcgc3RyaW5nXG4gICAgICogVGhpcyB3aWxsIGJlIHJlYWQgb25seSBvbmNlIGJ5IHNjcmVlbiByZWFkZXIgYW5kIHVwb24gc2xpZGVyIHZhbHVlIGNoYW5nZSxcbiAgICAgKiB0aGlzIHN0cmluZyB3aWxsIG5vdCBiZSByZWFkLlxuICAgICAqICogQGRlcHJlY2F0ZWQgbm8gbG9uZ2VyIHVzZWQsIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgd2Fybk9uY2UoJ1Byb3BlcnR5IHJhbmdlU2xpZGVySGFuZGxlMkN1cnJlbnRWYWx1ZVByZWZpeCBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZC4nKTtcbiAgICAgICAgdGhpcy5fcmFuZ2VTbGlkZXJIYW5kbGUyQ3VycmVudFZhbHVlUHJlZml4ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCByYW5nZVNsaWRlckhhbmRsZTJDdXJyZW50VmFsdWVQcmVmaXgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhbmdlU2xpZGVySGFuZGxlMkN1cnJlbnRWYWx1ZVByZWZpeDtcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yYW5nZVNsaWRlckhhbmRsZTJDdXJyZW50VmFsdWVQcmVmaXg6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Bvc2l0aW9uOiBudW1iZXIgfCBudW1iZXJbXSA9IDA7XG5cbiAgICAvKiogQ29udHJvbCB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBTbGlkZXJDb250cm9sVmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKTogU2xpZGVyQ29udHJvbFZhbHVlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9wb3BvdmVyVmFsdWVSZWYoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gW3RoaXMuX3Bvc2l0aW9uIGFzIG51bWJlciwgdGhpcy5faGFuZGxlMVZhbHVlLCB0aGlzLl9oYW5kbGUyVmFsdWVdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndHJhY2snLCB7XG4gICAgICAgIHJlYWQ6IEVsZW1lbnRSZWZcbiAgICB9KVxuICAgIHRyYWNrRWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdoYW5kbGUnLCB7XG4gICAgICAgIHJlYWQ6IEVsZW1lbnRSZWZcbiAgICB9KVxuICAgIGhhbmRsZTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3JhbmdlSGFuZGxlMScsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgcmFuZ2VIYW5kbGUxOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgncmFuZ2VIYW5kbGUyJywge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSlcbiAgICByYW5nZUhhbmRsZTI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKFBvcG92ZXJDb21wb25lbnQpXG4gICAgX3BvcG92ZXJzOiBRdWVyeUxpc3Q8UG9wb3ZlckNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3NsaWRlclRvb2x0aXBXcmFwcGVyJylcbiAgICBfc2xpZGVyVG9vbHRpcFdyYXBwZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdmFsdWU6IG51bWJlciB8IFNsaWRlclRpY2tNYXJrIHwgU2xpZGVyVGlja01hcmtbXSB8IG51bWJlcltdID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Byb2dyZXNzID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1zbGlkZXItLXJhbmdlJylcbiAgICBfaXNSYW5nZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMVBvc2l0aW9uID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZTJQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGUxVmFsdWUgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlMlZhbHVlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3JhbmdlUHJvZ3Jlc3MgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdGlja01hcmtzOiBTbGlkZXJUaWNrTWFya1tdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zbGlkZXJWYWx1ZVRhcmdldHMgPSBTbGlkZXJWYWx1ZVRhcmdldHM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wb3BvdmVySW5wdXRGaWVsZENsYXNzID0gYGZkLXNsaWRlci1wb3BvdmVyLWlucHV0LSR7c2xpZGVySWR9YDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzUnRsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogd2hldGhlciB0byB1c2UgdmFsdWUgd2l0aCBhIHByZWZpeCBmb3IgYW5ub3VuY2luZ1xuICAgICAqL1xuICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21pbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21heCA9IDEwMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RlcCA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2p1bXAgPSAxMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdGlja21hcmtzQmV0d2VlbkxhYmVscyA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlc0J5U3RlcHM6IG51bWJlcltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfY29tcG9uZW50SG92ZXJlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2hhbmRsZUZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9yYW5nZUhhbmRsZTFGb2N1c2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcmFuZ2VIYW5kbGUyRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3BvcG92ZXJJbnB1dEZpZWxkRm9jdXNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHJlYWRvbmx5IF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7XG4gICAgICAgIF9jb250ZW50RGVuc2l0eU9ic2VydmVyLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvUnRsKCk7XG4gICAgICAgIHRoaXMuX2F0dGFjaFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMuX29uUmVzaXplKCk7XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZXNCeVN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fY29uc3RydWN0VmFsdWVzQnlTdGVwcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgICAgICB0aGlzLl9jaGVja0lzSW5SYW5nZU1vZGUoKTtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0VGlja01hcmtzKCk7XG4gICAgICAgIHRoaXMuX2NvbnN0cnVjdFZhbHVlc0J5U3RlcHMoKTtcbiAgICAgICAgdGhpcy5fcmVjYWxjSGFuZGxlUG9zaXRpb25zKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvSW50ZXJhY3Rpb25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgaXNSdGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldFZhbHVlbm93KHBvc2l0aW9uOiBudW1iZXIgfCBudW1iZXJbXSwgc2xpZGVyVmFsdWVUYXJnZXQ6IFNsaWRlclZhbHVlVGFyZ2V0cyk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRoaXMuY3VzdG9tVmFsdWVzW3Bvc2l0aW9uIGFzIG51bWJlcl0ubGFiZWxcbiAgICAgICAgICAgIDogdGhpcy5fcG9wb3ZlclZhbHVlUmVmW3NsaWRlclZhbHVlVGFyZ2V0XTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBtaW5WYWx1ZSgpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCA/IHRoaXMuY3VzdG9tVmFsdWVzW3RoaXMubWluIGFzIG51bWJlcl0ubGFiZWwgOiB0aGlzLm1pbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBtYXhWYWx1ZSgpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCA/IHRoaXMuY3VzdG9tVmFsdWVzW3RoaXMubWF4IGFzIG51bWJlcl0ubGFiZWwgOiB0aGlzLm1heDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3NzQ2xhc3NCdWlsZGVyIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHNpbmdsZSBzdHJpbmdcbiAgICAgKiBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igb3JkZXIgd2hpY2ggY3NzIGNsYXNzZXMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICBAYXBwbHlDc3NDbGFzc1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2ZkLXNsaWRlcicsXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID8gJ2lzLWRpc2FibGVkJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5faXNSYW5nZSA/ICdmZC1zbGlkZXItLXJhbmdlJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5zaG93VGlja3MgJiYgdGhpcy5zaG93VGlja3NMYWJlbHMgPyAnZmQtc2xpZGVyLS13aXRoLWxhYmVscycgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuY2xhc3MsXG4gICAgICAgICAgICB0aGlzLl9wbGF0Zm9ybS5FREdFIHx8IHRoaXMuX3BsYXRmb3JtLlRSSURFTlQgPyAnZmQtc2xpZGVyX19hbHRlcm5hdGl2ZS10aWNrLXdpZHRoJyA6ICcnXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DaGFuZ2U6ICh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFNsaWRlckNvbnRyb2xWYWx1ZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogU2xpZGVyQ29udHJvbFZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHZhbHVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRyYWNrQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihldmVudCkpO1xuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSGFuZGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1bnN1YnNjcmliZUZyb21Nb3VzZW1vdmUgPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ21vdXNlbW92ZScsIChtb3ZlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBvcG92ZXJzUG9zaXRpb24oKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNSYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihtb3ZlRXZlbnQpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaGFuZGxlSW5kZXg6IFNsaWRlclJhbmdlSGFuZGxlcztcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMucmFuZ2VIYW5kbGUxLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVJbmRleCA9IFNsaWRlclJhbmdlSGFuZGxlcy5GaXJzdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSBTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NhbGN1bGF0ZVZhbHVlRnJvbVBvaW50ZXJQb3NpdGlvbihtb3ZlRXZlbnQsIGZhbHNlKSBhcyBudW1iZXI7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYW5nZUhhbmRsZVZhbHVlQW5kUG9zaXRpb24oaGFuZGxlSW5kZXgsIHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NvbnN0cnVjdFJhbmdlTW9kZWxWYWx1ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlRnJvbU1vdXNldXAgPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ21vdXNldXAnLCAoKSA9PiB7XG4gICAgICAgICAgICB1bnN1YnNjcmliZUZyb21Nb3VzZW1vdmUoKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlRnJvbU1vdXNldXAoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxvd2VkS2V5czogbnVtYmVyW10gPSBbTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFVQX0FSUk9XLCBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0VdO1xuICAgICAgICBpZiAoIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBhbGxvd2VkS2V5cykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkaWZmID0gZXZlbnQuc2hpZnRLZXkgPyB0aGlzLmp1bXAgOiB0aGlzLnN0ZXA7XG4gICAgICAgIGxldCBuZXdWYWx1ZTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsgfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IHByZXZWYWx1ZSA9IHRoaXMuX3Bvc2l0aW9uIGFzIG51bWJlcjtcbiAgICAgICAgbGV0IGhhbmRsZUluZGV4OiBTbGlkZXJSYW5nZUhhbmRsZXMgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLnJhbmdlSGFuZGxlMS5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcHJldlZhbHVlID0gdGhpcy5faGFuZGxlMVZhbHVlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUluZGV4ID0gU2xpZGVyUmFuZ2VIYW5kbGVzLkZpcnN0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMucmFuZ2VIYW5kbGUyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwcmV2VmFsdWUgPSB0aGlzLl9oYW5kbGUyVmFsdWU7XG4gICAgICAgICAgICAgICAgaGFuZGxlSW5kZXggPSBTbGlkZXJSYW5nZUhhbmRsZXMuU2Vjb25kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzUnRsKCkpIHtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlICsgZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlIC0gZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBwcmV2VmFsdWUgLSBkaWZmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gcHJldlZhbHVlICsgZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuX3Byb2Nlc3NOZXdWYWx1ZShuZXdWYWx1ZSBhcyBudW1iZXIsICF0aGlzLl9pc1JhbmdlKTtcbiAgICAgICAgaWYgKCF0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihoYW5kbGVJbmRleCwgbmV3VmFsdWUgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuX2NvbnN0cnVjdFJhbmdlTW9kZWxWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdXBkYXRlVmFsdWVGcm9tSW5wdXQodmFsdWU6IHN0cmluZywgdGFyZ2V0OiBTbGlkZXJWYWx1ZVRhcmdldHMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl9wcm9jZXNzTmV3VmFsdWUoK3ZhbHVlKSBhcyBudW1iZXI7XG4gICAgICAgIGlmICghdGhpcy5faXNSYW5nZSAmJiB0YXJnZXQgPT09IFNsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQb3BvdmVyc1Bvc2l0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gU2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjEpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3QsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VIYW5kbGUxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0ID09PSBTbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMikge1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VIYW5kbGUyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVBvcG92ZXJzUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFZhbHVlKHZhbHVlOiBTbGlkZXJDb250cm9sVmFsdWUsIGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRSYW5nZU1vZGUoKHZhbHVlID8/IFswLjBdKSBhcyBudW1iZXJbXSB8IFNsaWRlclRpY2tNYXJrW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZSgodmFsdWUgPz8gMCkgYXMgbnVtYmVyIHwgU2xpZGVyVGlja01hcmspO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZVBvcG92ZXJzUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJzLmZvckVhY2goKHBvcG92ZXIpID0+IHBvcG92ZXIucmVmcmVzaFBvc2l0aW9uKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVmFsdWVGcm9tUG9pbnRlclBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50LCB0YWtlQ3VzdG9tVmFsdWUgPSB0cnVlKTogbnVtYmVyIHwgU2xpZGVyVGlja01hcmsge1xuICAgICAgICBjb25zdCB7IGxlZnQsIHdpZHRoIH0gPSB0aGlzLnRyYWNrRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSAoZXZlbnQuY2xpZW50WCAtIGxlZnQpIC8gd2lkdGg7XG4gICAgICAgIGlmICh0aGlzLl9pc1J0bCkge1xuICAgICAgICAgICAgcGVyY2VudGFnZSA9IDEgLSBwZXJjZW50YWdlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5taW4gKyBwZXJjZW50YWdlICogKHRoaXMubWF4IC0gdGhpcy5taW4pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc05ld1ZhbHVlKG5ld1ZhbHVlLCB0YWtlQ3VzdG9tVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc05ld1ZhbHVlKG5ld1ZhbHVlOiBudW1iZXIsIHRha2VDdXN0b21WYWx1ZSA9IHRydWUpOiBudW1iZXIgfCBTbGlkZXJUaWNrTWFyayB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMubWluO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VzZVNsaWRlclZhbHVlUHJlZml4ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgY29uc3Qgc3RlcERpZmZBcnJheSA9IHRoaXMuX3ZhbHVlc0J5U3RlcHNcbiAgICAgICAgICAgIC5tYXAoKHN0ZXBWYWx1ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBkaWZmOiBNYXRoLmFicyhzdGVwVmFsdWUgLSBuZXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0ZXBWYWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5kaWZmIC0gYi5kaWZmKTtcbiAgICAgICAgbGV0IHZhbHVlOiBTbGlkZXJUaWNrTWFyayB8IG51bWJlciA9IHN0ZXBEaWZmQXJyYXlbMF0udmFsdWU7XG4gICAgICAgIGlmICh0YWtlQ3VzdG9tVmFsdWUgJiYgdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmN1c3RvbVZhbHVlc1t2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKGhhbmRsZUluZGV4OiBTbGlkZXJSYW5nZUhhbmRsZXMsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModmFsdWUsIHRydWUpO1xuICAgICAgICBpZiAoaGFuZGxlSW5kZXggPT09IFNsaWRlclJhbmdlSGFuZGxlcy5GaXJzdCkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMVZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUxUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFuZGxlSW5kZXggPT09IFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlMlBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmFuZ2VQcm9ncmVzcyA9IE1hdGguYWJzKHRoaXMuX2hhbmRsZTJQb3NpdGlvbiAtIHRoaXMuX2hhbmRsZTFQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RSYW5nZU1vZGVsVmFsdWUoKTogbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdIHtcbiAgICAgICAgbGV0IHJhbmdlTG93ZXJWYWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xuICAgICAgICBsZXQgcmFuZ2VIaWdoZXJWYWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xuICAgICAgICBsZXQgcmFuZ2VWYWx1ZTogbnVtYmVyW10gfCBTbGlkZXJUaWNrTWFya1tdID0gW1xuICAgICAgICAgICAgTWF0aC5taW4odGhpcy5faGFuZGxlMVZhbHVlLCB0aGlzLl9oYW5kbGUyVmFsdWUpLFxuICAgICAgICAgICAgTWF0aC5tYXgodGhpcy5faGFuZGxlMVZhbHVlLCB0aGlzLl9oYW5kbGUyVmFsdWUpXG4gICAgICAgIF07XG4gICAgICAgIHJhbmdlTG93ZXJWYWx1ZSA9IHJhbmdlVmFsdWVbMF07XG4gICAgICAgIHJhbmdlSGlnaGVyVmFsdWUgPSByYW5nZVZhbHVlWzFdO1xuICAgICAgICBpZiAodGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy5jdXN0b21WYWx1ZXNbcmFuZ2VWYWx1ZVswXV0gfHwgdGhpcy5jdXN0b21WYWx1ZXNbMF07XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLmN1c3RvbVZhbHVlc1tyYW5nZVZhbHVlWzFdXSB8fCB0aGlzLmN1c3RvbVZhbHVlc1t0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHJhbmdlVmFsdWUgPSBbbWluLCBtYXhdO1xuICAgICAgICAgICAgcmFuZ2VMb3dlclZhbHVlID0gcmFuZ2VWYWx1ZVswXS5sYWJlbDtcbiAgICAgICAgICAgIHJhbmdlSGlnaGVyVmFsdWUgPSByYW5nZVZhbHVlWzFdLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UoJ3JhbmdlIHZhbHVlIGJldHdlZW4gJyArIHJhbmdlTG93ZXJWYWx1ZSArICcgYW5kICcgKyByYW5nZUhpZ2hlclZhbHVlLCAncG9saXRlJyk7XG4gICAgICAgIHJldHVybiByYW5nZVZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXR0YWNoUmVzaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb25SZXNpemUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29uc3RydWN0VGlja01hcmtzKCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFZhbHVlc0J5U3RlcHMoKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNCeVN0ZXBzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aDogKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gdGhpcy5zdGVwICsgMVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKF8sIGkpID0+IE51bWJlcigodGhpcy5taW4gKyBpICogdGhpcy5zdGVwKS50b0ZpeGVkKDIpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnN0cnVjdFRpY2tNYXJrcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dUaWNrcykge1xuICAgICAgICAgICAgdGhpcy5fdGlja01hcmtzID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5taW4gPSAwO1xuICAgICAgICAgICAgdGhpcy5tYXggPSB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbVZhbHVlc0xlbmd0aCA9IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB0aGlzLl90aWNrTWFya3MgPSB0aGlzLmN1c3RvbVZhbHVlcy5tYXAoKGl0ZW0sIGkpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogKDEwMCAvIGN1c3RvbVZhbHVlc0xlbmd0aCkgKiBpXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMubWF4IC0gdGhpcy5taW47XG4gICAgICAgICAgICBjb25zdCB0aWNrTWFya3NDb3VudCA9IHRvdGFsIC8gdGhpcy5zdGVwICsgMTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXhUaWNrTWFya3NOdW1iZXIgIT09IHVuZGVmaW5lZCAmJiB0aWNrTWFya3NDb3VudCA+IHRoaXMuX21heFRpY2tNYXJrc051bWJlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RpY2tNYXJrcyA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBgJHt0aGlzLm1pbn1gXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdG90YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7dGhpcy5tYXh9YFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGlja01hcmtzQ291bnQgJSAxID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGlja01hcmtzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiB0aWNrTWFya3NDb3VudFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLnJvdW5kKGkgKiB0aGlzLnN0ZXAgKiAxMDApIC8gMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSAodmFsdWUgLyAodGhpcy5tYXggLSB0aGlzLm1pbikpICogMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7dGhpcy5taW4gKyB2YWx1ZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX21heFRpY2tNYXJrc051bWJlcigpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMudHJhY2tFbCB8fCAhdGhpcy50cmFja0VsLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnRyYWNrRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIE1JTl9ESVNUQU5DRV9CRVRXRUVOX1RJQ0tTKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGNQcm9ncmVzcyh2YWx1ZTogbnVtYmVyLCBza2lwUnRsID0gZmFsc2UpOiBudW1iZXIge1xuICAgICAgICBsZXQgcHJvZ3Jlc3MgPSAoKHZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcbiAgICAgICAgaWYgKCFza2lwUnRsICYmIHRoaXMuX2lzUnRsKSB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IDEwMCAtIHByb2dyZXNzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9ncmVzcyA+IDEwMCkge1xuICAgICAgICAgICAgcmV0dXJuIDEwMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvZ3Jlc3MgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWNhbGNIYW5kbGVQb3NpdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGUxUG9zaXRpb24gPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModGhpcy5faGFuZGxlMVZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZTJQb3NpdGlvbiA9IHRoaXMuX2NhbGNQcm9ncmVzcyh0aGlzLl9oYW5kbGUyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VQcm9ncmVzcyA9IE1hdGguYWJzKHRoaXMuX2hhbmRsZTJQb3NpdGlvbiAtIHRoaXMuX2hhbmRsZTFQb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSB0aGlzLl9jYWxjUHJvZ3Jlc3ModGhpcy5fcG9zaXRpb24gYXMgbnVtYmVyLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrSXNJblJhbmdlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNSYW5nZSA9IHRoaXMubW9kZSA9PT0gJ3JhbmdlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSdGwgY2hhbmdlIHN1YnNjcmlwdGlvbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmliZVRvUnRsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpc1J0bDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNSdGwgPSBpc1J0bDtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2luZ2VNb2RlKHZhbHVlOiBudW1iZXIgfCBTbGlkZXJUaWNrTWFyayk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZVdpdGhDdXN0b21WYWx1ZSh2YWx1ZSBhcyBTbGlkZXJUaWNrTWFyayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdFNpbmdlTW9kZURlZmF1bHQoY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIHRoaXMubWluKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2luZ2VNb2RlRGVmYXVsdCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzID0gdGhpcy5fY2FsY1Byb2dyZXNzKHZhbHVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTaW5nZU1vZGVXaXRoQ3VzdG9tVmFsdWUoc2xpZGVyVGlja01hcms6IFNsaWRlclRpY2tNYXJrKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuX2dldEN1c3RvbVZhbHVlc1Bvc2l0aW9uKHNsaWRlclRpY2tNYXJrKSBhcyBudW1iZXIpIHx8IHRoaXMubWluO1xuICAgICAgICB0aGlzLl9pbml0U2luZ2VNb2RlRGVmYXVsdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0UmFuZ2VNb2RlKHZhbHVlOiBudW1iZXJbXSB8IFNsaWRlclRpY2tNYXJrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRSYW5nZU1vZGVXaXRoQ3VzdG9tVmFsdWVzKHZhbHVlIGFzIFNsaWRlclRpY2tNYXJrW10pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0SGFuZGxlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWVbMF0sIHRoaXMubWluKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kSGFuZGxlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWVbMV0sIHRoaXMubWF4KTtcbiAgICAgICAgdGhpcy5faW5pdFJhbmdlTW9kZURlZmF1bHQoW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRSYW5nZU1vZGVEZWZhdWx0KFtmaXJzdEhhbmRsZSwgc2Vjb25kSGFuZGxlXTogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV07XG4gICAgICAgIHRoaXMuX3NldFJhbmdlSGFuZGxlVmFsdWVBbmRQb3NpdGlvbihTbGlkZXJSYW5nZUhhbmRsZXMuRmlyc3QsIGZpcnN0SGFuZGxlKTtcbiAgICAgICAgdGhpcy5fc2V0UmFuZ2VIYW5kbGVWYWx1ZUFuZFBvc2l0aW9uKFNsaWRlclJhbmdlSGFuZGxlcy5TZWNvbmQsIHNlY29uZEhhbmRsZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0UmFuZ2VNb2RlV2l0aEN1c3RvbVZhbHVlcyhbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV06IFNsaWRlclRpY2tNYXJrW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbihbZmlyc3RIYW5kbGUsIHNlY29uZEhhbmRsZV0pIHx8IFt0aGlzLm1pbiwgdGhpcy5tYXhdO1xuICAgICAgICB0aGlzLl9pbml0UmFuZ2VNb2RlRGVmYXVsdCh2YWx1ZSBhcyBudW1iZXJbXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbih2YWx1ZTogU2xpZGVyVGlja01hcmsgfCBTbGlkZXJUaWNrTWFya1tdKTogbnVtYmVyIHwgbnVtYmVyW10ge1xuICAgICAgICB0aGlzLm1pbiA9IDA7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5jdXN0b21WYWx1ZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEN1c3RvbVZhbHVlc1Bvc2l0aW9ucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRDdXN0b21WYWx1ZXNQb3NpdGlvbnModmFsdWU6IFNsaWRlclRpY2tNYXJrIHwgU2xpZGVyVGlja01hcmtbXSk6IG51bWJlciB8IG51bWJlcltdIHtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAodmFsdWUgYXMgU2xpZGVyVGlja01hcmtbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNSYW5nZSA/IFswLCB0aGlzLmN1c3RvbVZhbHVlcy5sZW5ndGggLSAxXSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgW2ZpcnN0SGFuZGxlLCBzZWNvbmRIYW5kbGVdID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2luc3RhbmNlT2ZDdXN0b21WYWx1ZShmaXJzdEhhbmRsZSkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdEhhbmRsZSA9IHRoaXMuY3VzdG9tVmFsdWVzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUoc2Vjb25kSGFuZGxlKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZEhhbmRsZSA9IHRoaXMuY3VzdG9tVmFsdWVzW3RoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RIYW5kbGVQb3NpdGlvbiA9IHRoaXMuY3VzdG9tVmFsdWVzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gZmlyc3RIYW5kbGUudmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kSGFuZGxlUG9zaXRpb24gPSB0aGlzLmN1c3RvbVZhbHVlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHNlY29uZEhhbmRsZS52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBpbmRleGVzID0gW1xuICAgICAgICAgICAgICAgIGZpcnN0SGFuZGxlUG9zaXRpb24gPj0gMCA/IGZpcnN0SGFuZGxlUG9zaXRpb24gOiAwLFxuICAgICAgICAgICAgICAgIHNlY29uZEhhbmRsZVBvc2l0aW9uID49IDAgPyBzZWNvbmRIYW5kbGVQb3NpdGlvbiA6IHRoaXMuY3VzdG9tVmFsdWVzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gaW5kZXhlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBmaXJzdEhhbmRsZSA9IHZhbHVlIGFzIFNsaWRlclRpY2tNYXJrO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUoZmlyc3RIYW5kbGUpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RIYW5kbGUgPSB0aGlzLmN1c3RvbVZhbHVlc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVZhbHVlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGZpcnN0SGFuZGxlLnZhbHVlKSB8fCAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnN0YW5jZU9mQ3VzdG9tVmFsdWUob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgU2xpZGVyQ3VzdG9tVmFsdWUge1xuICAgICAgICByZXR1cm4gISFvYmplY3QgJiYgJ3ZhbHVlJyBpbiBvYmplY3QgJiYgJ2xhYmVsJyBpbiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0ludGVyYWN0aW9uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVGb2N1c2VkJCxcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlSGFuZGxlMUZvY3VzZWQkLFxuICAgICAgICAgICAgdGhpcy5fcmFuZ2VIYW5kbGUyRm9jdXNlZCQsXG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkLFxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50SG92ZXJlZCQsXG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVySW5wdXRGaWVsZEhvdmVyZWQkXG4gICAgICAgIF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBza2lwKDEpLFxuICAgICAgICAgICAgICAgIG1hcCgoc3RhdGVzKSA9PiBzdGF0ZXMuc29tZShCb29sZWFuKSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChmb2N1c2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90IGZvY3VzZWQsIGNoZWNrIGZvciB0aGUgZWRnZSBjYXNlLFxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGhvdmVyIGlzIG9uIHRoZSBmZC1wb3BvdmVyLWJvZHksIHRoYXQgaXMgYSBwYXJlbnQgZm9yIHRoZSB0b29sdGlwLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRydWUsIHdoZW4gaG92ZXJpbmcgdGhlIGdhcCBiZXR3ZWVuIGhhbmRsZSBhbmQgdGhlIHRvb2x0aXAuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1BvcG92ZXJIb3ZlcmVkKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJzLmZvckVhY2goKHBvcG92ZXIpID0+IHBvcG92ZXIub3BlbigpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldFByZWZpeCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3BvdmVycy5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLmNsb3NlKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIHJlc2V0IGRlZmF1bHQgcHJlZml4IG9uIGxlYXZpbmcgdGhlIHNsaWRlciAqL1xuICAgIHByaXZhdGUgX3Jlc2V0UHJlZml4KCk6IHZvaWQge1xuICAgICAgICAvLyByZXNldCBwcmVmaXggc3RyaW5nIGZvciBzbGlkZXIgY3VycmVudCB2YWx1ZSB0aGF0IG5lZWQgdG8gYmUgYW5ub3VuY2VkXG4gICAgICAgIHRoaXMuX3VzZVNsaWRlclZhbHVlUHJlZml4ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDaGVja3Mgd2hldGhlciBpbnB1dCBwb3BvdmVyIGVsZW1lbnQgaXMgaG92ZXJlZC5cbiAgICAgKiBXaWxsIGFsc28gcmV0dXJuIHRydWUsIHdoZW4gaG92ZXJpbmcgdGhlIGdhcCBiZXR3ZWVuIGhhbmRsZSBhbmQgdGhlIHRvb2x0aXAuXG4gICAgICogSWYgeWVzLCByZXR1cm5zIFwidHJ1ZVwiIGluc3RhbnRseSBhbmQgXCJmYWxzZVwiIG9uY2UgaXQncyBub3QgaG92ZXJlZCBhbnltb3JlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzUG9wb3ZlckhvdmVyZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJCb2R5ID0gdGhpcy5fc2xpZGVyVG9vbHRpcFdyYXBwZXJzLmZpcnN0Py5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2ZkLXBvcG92ZXItYm9keScpO1xuICAgICAgICBpZiAocG9wb3ZlckJvZHk/Lm1hdGNoZXMoJzpob3ZlcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHBvcG92ZXJCb2R5LCAnbW91c2VsZWF2ZScpLnBpcGUobWFwVG8oZmFsc2UpLCB0YWtlKDEpLCBzdGFydFdpdGgodHJ1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9faW5uZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX2lzUmFuZ2UgPyByYW5nZU1vZGUgOiBzaW5nbGVNb2RlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX190cmFja1wiIChjbGljayk9XCJvblRyYWNrQ2xpY2soJGV2ZW50KVwiICN0cmFjaz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIl9pc1JhbmdlID8gcmFuZ2VNb2RlVHJhY2sgOiBzaW5nbGVNb2RlVHJhY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmZC1zbGlkZXJfX3RpY2std3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtc2xpZGVyX190aWNrc1wiIChjbGljayk9XCJvblRyYWNrQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUaWNrc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRpY2sgb2YgX3RpY2tNYXJrczsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9fdGlja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJ0aWNrLnBvc2l0aW9uIHx8IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9fdGljay0taW4tcmFuZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWhpZGVQcm9ncmVzc0JhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfaXNSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRpY2sudmFsdWUgPj0gX3Bvc2l0aW9uWzBdICYmIHRpY2sudmFsdWUgPD0gX3Bvc2l0aW9uWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGljay52YWx1ZSA8PSBfcG9zaXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXNsaWRlcl9fbGFiZWxzXCIgKm5nSWY9XCJzaG93VGlja3MgJiYgc2hvd1RpY2tzTGFiZWxzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0aWNrIG9mIF90aWNrTWFya3M7IGluZGV4IGFzIGk7IGxhc3QgYXMgbGFzdDsgZmlyc3QgYXMgZmlyc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlyc3QgfHwgbGFzdCB8fCBpICUgdGlja21hcmtzQmV0d2VlbkxhYmVscyA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX19sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwidGljay5wb3NpdGlvbiB8fCAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHRpY2subGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NpbmdsZU1vZGVUcmFjaz5cbiAgICA8ZGl2ICpuZ0lmPVwiIWhpZGVQcm9ncmVzc0JhclwiIGNsYXNzPVwiZmQtc2xpZGVyX190cmFjay1yYW5nZVwiIFtzdHlsZS53aWR0aC4lXT1cIl9wcm9ncmVzc1wiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyYW5nZU1vZGVUcmFjaz5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWhpZGVQcm9ncmVzc0JhclwiXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX190cmFjay1yYW5nZVwiXG4gICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIl9yYW5nZVByb2dyZXNzXCJcbiAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgIFtwb3NpdGlvbl09XCJfaGFuZGxlMVBvc2l0aW9uIDwgX2hhbmRsZTJQb3NpdGlvbiA/IF9oYW5kbGUxUG9zaXRpb24gOiBfaGFuZGxlMlBvc2l0aW9uXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NpbmdsZU1vZGU+XG4gICAgPGRpdlxuICAgICAgICAjaGFuZGxlXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX19oYW5kbGVcIlxuICAgICAgICBbY2xhc3MuZmQtc2xpZGVyX19oYW5kbGUtLWxnXT1cIl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ296eSQgfCBhc3luY1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBhcmlhTGFiZWwgfHwgJ2NvcmVTbGlkZXIuc2luZ2xlTWluTWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgbWluOiBtaW5WYWx1ZSwgbWF4OiBtYXhWYWx1ZSB9XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgIFtmZFBvcG92ZXJUcmlnZ2VyXT1cInRvb2x0aXBNb2RlID8gc2luZ2xlU2xpZGVyUG9wb3ZlciA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIidjb3JlU2xpZGVyLnNpbmdsZVZhbHVlbWluRGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1pblZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIidjb3JlU2xpZGVyLnNpbmdsZVZhbHVlbWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1heFZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIuc2luZ2xlVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX3Bvc2l0aW9uLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIuc2luZ2xlVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9wb3NpdGlvbiwgX3NsaWRlclZhbHVlVGFyZ2V0cy5TSU5HTEVfU0xJREVSKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX3Bvc2l0aW9uLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlNJTkdMRV9TTElERVIpXG4gICAgICAgIFwiXG4gICAgICAgIGZkLXNsaWRlci1wb3NpdGlvblxuICAgICAgICBbcG9zaXRpb25dPVwiX3Byb2dyZXNzXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkhhbmRsZUNsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChmb2N1cyk9XCJfaGFuZGxlRm9jdXNlZCQubmV4dCh0cnVlKVwiXG4gICAgICAgIChibHVyKT1cIl9oYW5kbGVGb2N1c2VkJC5uZXh0KGZhbHNlKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAjc2luZ2xlU2xpZGVyUG9wb3ZlclxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFthcHBlbmRUb109XCJoYW5kbGVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNb2RlXCJcbiAgICAgICAgY2xhc3M9XCJmZC1wb3BvdmVyLS1zbGlkZXJcIlxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwLXBvcG92ZXJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBwb3BvdmVySW5uZXI7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyB0YXJnZXQ6IF9zbGlkZXJWYWx1ZVRhcmdldHMuU0lOR0xFX1NMSURFUiwgcG9zaXRpb246IF9wb3NpdGlvbiB9XG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyYW5nZU1vZGU+XG4gICAgPGRpdlxuICAgICAgICAjcmFuZ2VIYW5kbGUxXG4gICAgICAgIGNsYXNzPVwiZmQtc2xpZGVyX19oYW5kbGVcIlxuICAgICAgICBbY2xhc3MuZmQtc2xpZGVyX19oYW5kbGUtLWxnXT1cIl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ296eSQgfCBhc3luY1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBhcmlhTGFiZWwgfHwgJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxTWluTWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgbWluOiBtaW5WYWx1ZSwgbWF4OiBtYXhWYWx1ZSB9XG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgIFtmZFBvcG92ZXJUcmlnZ2VyXT1cInRvb2x0aXBNb2RlID8gcmFuZ2VTbGlkZXJQb3BvdmVyMSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIidjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMVZhbHVlbWluRGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1pblZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIidjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMVZhbHVlbWF4RGV0YWlscycgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IG1heFZhbHVlIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUxVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSkgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9oYW5kbGUxVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSlcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZXRleHRdPVwiXG4gICAgICAgICAgICBfdXNlU2xpZGVyVmFsdWVQcmVmaXhcbiAgICAgICAgICAgICAgICA/ICgnY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTFWYWx1ZU5vd0RldGFpbHMnXG4gICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB2YWx1ZTogZ2V0VmFsdWVub3coX2hhbmRsZTFWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKSB9KVxuICAgICAgICAgICAgICAgIDogZ2V0VmFsdWVub3coX2hhbmRsZTFWYWx1ZSwgX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIxKVxuICAgICAgICBcIlxuICAgICAgICBmZC1zbGlkZXItcG9zaXRpb25cbiAgICAgICAgW3Bvc2l0aW9uXT1cIl9oYW5kbGUxUG9zaXRpb25cIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uSGFuZGxlQ2xpY2soJGV2ZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwiX3JhbmdlSGFuZGxlMUZvY3VzZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAoYmx1cik9XCJfcmFuZ2VIYW5kbGUxRm9jdXNlZCQubmV4dChmYWxzZSlcIlxuICAgID48L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgI3JhbmdlSGFuZGxlMlxuICAgICAgICBjbGFzcz1cImZkLXNsaWRlcl9faGFuZGxlXCJcbiAgICAgICAgW2NsYXNzLmZkLXNsaWRlcl9faGFuZGxlLS1sZ109XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgIHJvbGU9XCJzbGlkZXJcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgYXJpYUxhYmVsIHx8ICdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMk1pbk1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IG1pbjogbWluVmFsdWUsIG1heDogbWF4VmFsdWUgfVxuICAgICAgICBcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbZmRQb3BvdmVyVHJpZ2dlcl09XCJ0b29sdGlwTW9kZSA/IHJhbmdlU2xpZGVyUG9wb3ZlcjIgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1pbl09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJWYWx1ZW1pbkRldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtaW5WYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCInY29yZVNsaWRlci5tdWx0aXBsZUhhbmRsZTJWYWx1ZW1heERldGFpbHMnIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBtYXhWYWx1ZSB9XCJcbiAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJcbiAgICAgICAgICAgIF91c2VTbGlkZXJWYWx1ZVByZWZpeFxuICAgICAgICAgICAgICAgID8gKCdjb3JlU2xpZGVyLm11bHRpcGxlSGFuZGxlMlZhbHVlTm93RGV0YWlscydcbiAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHZhbHVlOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpIH0pXG4gICAgICAgICAgICAgICAgOiBnZXRWYWx1ZW5vdyhfaGFuZGxlMlZhbHVlLCBfc2xpZGVyVmFsdWVUYXJnZXRzLlJBTkdFX1NMSURFUjIpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cIlxuICAgICAgICAgICAgX3VzZVNsaWRlclZhbHVlUHJlZml4XG4gICAgICAgICAgICAgICAgPyAoJ2NvcmVTbGlkZXIubXVsdGlwbGVIYW5kbGUyVmFsdWVOb3dEZXRhaWxzJ1xuICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdmFsdWU6IGdldFZhbHVlbm93KF9oYW5kbGUyVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMikgfSlcbiAgICAgICAgICAgICAgICA6IGdldFZhbHVlbm93KF9oYW5kbGUyVmFsdWUsIF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMilcbiAgICAgICAgXCJcbiAgICAgICAgZmQtc2xpZGVyLXBvc2l0aW9uXG4gICAgICAgIFtwb3NpdGlvbl09XCJfaGFuZGxlMlBvc2l0aW9uXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkhhbmRsZUNsaWNrKCRldmVudCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIl9yYW5nZUhhbmRsZTJGb2N1c2VkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgKGJsdXIpPVwiX3JhbmdlSGFuZGxlMkZvY3VzZWQkLm5leHQoZmFsc2UpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8ZmQtcG9wb3ZlclxuICAgICAgICAjcmFuZ2VTbGlkZXJQb3BvdmVyMVxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFthcHBlbmRUb109XCJyYW5nZUhhbmRsZTFcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIXRvb2x0aXBNb2RlXCJcbiAgICAgICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXNsaWRlci0tdG9vbHRpcC1wb3BvdmVyXCJcbiAgICAgICAgY2xhc3M9XCJmZC1wb3BvdmVyLS1zbGlkZXJcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBwb3BvdmVySW5uZXI7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyB0YXJnZXQ6IF9zbGlkZXJWYWx1ZVRhcmdldHMuUkFOR0VfU0xJREVSMSwgcG9zaXRpb246IF9oYW5kbGUxVmFsdWUgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtcG9wb3Zlcj5cblxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgICNyYW5nZVNsaWRlclBvcG92ZXIyXG4gICAgICAgIFt0cmlnZ2Vyc109XCJbXVwiXG4gICAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cInJhbmdlSGFuZGxlMlwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhdG9vbHRpcE1vZGVcIlxuICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtc2xpZGVyLS10b29sdGlwLXBvcG92ZXJcIlxuICAgICAgICBjbGFzcz1cImZkLXBvcG92ZXItLXNsaWRlclwiXG4gICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHBvcG92ZXJJbm5lcjtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHRhcmdldDogX3NsaWRlclZhbHVlVGFyZ2V0cy5SQU5HRV9TTElERVIyLCBwb3NpdGlvbjogX2hhbmRsZTJWYWx1ZSB9XG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwb3BvdmVySW5uZXIgbGV0LXRhcmdldD1cInRhcmdldFwiIGxldC1wb3NpdGlvbj1cInBvc2l0aW9uXCI+XG4gICAgPGRpdlxuICAgICAgICAjc2xpZGVyVG9vbHRpcFdyYXBwZXJcbiAgICAgICAgY2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXAtd3JhcHBlclwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJfcG9wb3ZlcklucHV0RmllbGRIb3ZlcmVkJC5uZXh0KHRydWUpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiX3BvcG92ZXJJbnB1dEZpZWxkSG92ZXJlZCQubmV4dChmYWxzZSlcIlxuICAgID5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihjdXN0b21WYWx1ZXMgJiYgY3VzdG9tVmFsdWVzLmxlbmd0aCA+IDApIHx8IHRvb2x0aXBNb2RlID09PSAncmVhZG9ubHknXCIgY2xhc3M9XCJmZC1zbGlkZXItLXRvb2x0aXBcIj5cbiAgICAgICAgICAgIHt7IGN1c3RvbVZhbHVlcyAmJiBjdXN0b21WYWx1ZXMubGVuZ3RoID4gMCA/IGN1c3RvbVZhbHVlc1twb3NpdGlvbl0ubGFiZWwgOiBfcG9wb3ZlclZhbHVlUmVmW3RhcmdldF0gfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjcG9wb3ZlcklucHV0RmllbGRcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIGZka09ubHlEaWdpdHNcbiAgICAgICAgICAgIFtkZWNpbWFsXT1cInRydWVcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLmNoXT1cIignJyArIF9wb3BvdmVyVmFsdWVSZWZbdGFyZ2V0XSkubGVuZ3RoICsgMlwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0IGZkLXNsaWRlci0tdG9vbHRpcCB7eyBfcG9wb3ZlcklucHV0RmllbGRDbGFzcyB9fVwiXG4gICAgICAgICAgICAqbmdJZj1cImN1c3RvbVZhbHVlcz8ubGVuZ3RoID09PSAwICYmIHRvb2x0aXBNb2RlID09PSAnZWRpdGFibGUnXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiX3BvcG92ZXJWYWx1ZVJlZlt0YXJnZXRdXCJcbiAgICAgICAgICAgIChibHVyKT1cIl91cGRhdGVWYWx1ZUZyb21JbnB1dChwb3BvdmVySW5wdXRGaWVsZC52YWx1ZSwgdGFyZ2V0KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJfdXBkYXRlVmFsdWVGcm9tSW5wdXQocG9wb3ZlcklucHV0RmllbGQudmFsdWUsIHRhcmdldClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIl9wb3BvdmVySW5wdXRGaWVsZEZvY3VzZWQkLm5leHQodHJ1ZSlcIlxuICAgICAgICAgICAgKGJsdXIpPVwiX3BvcG92ZXJJbnB1dEZpZWxkRm9jdXNlZCQubmV4dChmYWxzZSlcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|