@c8y/ngx-components 1017.0.8 → 1017.0.10
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/core/dynamic-component/dynamic-component.component.d.ts +1 -0
- package/core/dynamic-component/dynamic-component.model.d.ts +45 -9
- package/esm2020/actility-device-registration/actility-device-registration.component.mjs +3 -3
- package/esm2020/context-dashboard/context-dashboard.component.mjs +3 -3
- package/esm2020/context-dashboard/dashboard-detail.component.mjs +3 -3
- package/esm2020/context-dashboard/device-info-dashboard/device-info-dashboard.component.mjs +43 -51
- package/esm2020/context-dashboard/widget-preview.component.mjs +3 -3
- package/esm2020/core/authentication/sms-challenge.component.mjs +3 -3
- package/esm2020/core/authentication/totp-challenge.component.mjs +3 -3
- package/esm2020/core/breadcrumb/breadcrumb-outlet.component.mjs +3 -3
- package/esm2020/core/dashboard/dashboard-child.component.mjs +3 -3
- package/esm2020/core/dashboard/widget-time-context.component.mjs +3 -3
- package/esm2020/core/data-grid/data-grid.component.mjs +3 -3
- package/esm2020/core/date-picker/date-picker.component.mjs +3 -3
- package/esm2020/core/drop-area/drop-area.component.mjs +3 -3
- package/esm2020/core/dynamic-component/dynamic-component.component.mjs +21 -5
- package/esm2020/core/dynamic-component/dynamic-component.model.mjs +7 -1
- package/esm2020/core/file-picker/file-picker.component.mjs +3 -3
- package/esm2020/core/header/application/app-switcher.component.mjs +3 -3
- package/esm2020/core/login/credentials.component.mjs +3 -3
- package/esm2020/core/login/login.component.mjs +3 -3
- package/esm2020/core/modal/modal.component.mjs +3 -3
- package/esm2020/core/select/typeahead.component.mjs +3 -3
- package/esm2020/device-grid/columns/alarms.cell-renderer.component.mjs +3 -3
- package/esm2020/loriot-device-registration/loriot-device-registration-button.component.mjs +3 -1
- package/esm2020/loriot-device-registration/loriot-device-registration.component.mjs +3 -3
- package/esm2020/operations/bulk-operations-list/bulk-operations-list.component.mjs +3 -3
- package/esm2020/operations/operations-list/operations-list-item.component.mjs +3 -3
- package/esm2020/operations/operations-list/operations-list.component.mjs +3 -3
- package/esm2020/register-device/bulk/bulk-device-registration-modal.component.mjs +3 -3
- package/esm2020/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.mjs +3 -3
- package/esm2020/register-device/extensible/single/extensible-device-registration-modal.component.mjs +3 -3
- package/esm2020/register-device/general/general-device-registration.component.mjs +3 -3
- package/esm2020/repository/software/device-tab/device-software-list.component.mjs +3 -3
- package/esm2020/repository/software/device-tab/installed-software.component.mjs +3 -3
- package/esm2020/repository/software/list/add-software-modal.component.mjs +3 -3
- package/esm2020/sigfox-device-registration/sigfox-device-registration.component.mjs +3 -3
- package/fesm2015/c8y-ngx-components-actility-device-registration.mjs +2 -2
- package/fesm2015/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +48 -56
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-device-grid.mjs +2 -2
- package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-loriot-device-registration.mjs +4 -2
- package/fesm2015/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.mjs +2 -2
- package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-operations-operations-list.mjs +4 -4
- package/fesm2015/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-register-device.mjs +8 -8
- package/fesm2015/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-repository-software.mjs +6 -6
- package/fesm2015/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-sigfox-device-registration.mjs +2 -2
- package/fesm2015/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +72 -46
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-actility-device-registration.mjs +2 -2
- package/fesm2020/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +48 -56
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-grid.mjs +2 -2
- package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-loriot-device-registration.mjs +4 -2
- package/fesm2020/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-operations-bulk-operations-list.mjs +2 -2
- package/fesm2020/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-operations-operations-list.mjs +4 -4
- package/fesm2020/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-register-device.mjs +8 -8
- package/fesm2020/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-repository-software.mjs +6 -6
- package/fesm2020/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-sigfox-device-registration.mjs +2 -2
- package/fesm2020/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +54 -32
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +6 -9
- package/package.json +2 -2
|
@@ -94,6 +94,7 @@ export declare class DynamicComponentComponent implements OnDestroy {
|
|
|
94
94
|
ngOnChanges(changes: SimpleChanges): Promise<void>;
|
|
95
95
|
ngOnDestroy(): void;
|
|
96
96
|
private loadComponent;
|
|
97
|
+
private getComponentType;
|
|
97
98
|
private subscribeForOverlayChange;
|
|
98
99
|
private callOnBeforeSaveHook;
|
|
99
100
|
static ɵfac: i0.ɵɵFactoryDeclaration<DynamicComponentComponent, never>;
|
|
@@ -73,19 +73,12 @@ export declare function hookComponent(components: GenericHookType<DynamicCompone
|
|
|
73
73
|
* ></c8y-dynamic-component>
|
|
74
74
|
* ```
|
|
75
75
|
*/
|
|
76
|
-
export
|
|
76
|
+
export declare type DynamicComponentDefinition = DynamicComponentDefinitionBase & DynamicComponents;
|
|
77
|
+
export interface DynamicComponentDefinitionBase {
|
|
77
78
|
/**
|
|
78
79
|
* Unique serializable id
|
|
79
80
|
*/
|
|
80
81
|
id: string;
|
|
81
|
-
/**
|
|
82
|
-
* The component which is used when the component should be displayed (e.g. on a dashboard)
|
|
83
|
-
*/
|
|
84
|
-
component: Type<any>;
|
|
85
|
-
/**
|
|
86
|
-
* The configuration component used when a widget is added or edited.
|
|
87
|
-
*/
|
|
88
|
-
configComponent?: Type<any>;
|
|
89
82
|
/**
|
|
90
83
|
* The label shown for this dynamic component on add widgets
|
|
91
84
|
*/
|
|
@@ -123,6 +116,49 @@ export interface DynamicComponentDefinition {
|
|
|
123
116
|
*/
|
|
124
117
|
priority?: number;
|
|
125
118
|
}
|
|
119
|
+
export declare type DynamicComponents = EagerDynamicComponents | LazyDynamicComponents;
|
|
120
|
+
export interface EagerDynamicComponents {
|
|
121
|
+
/**
|
|
122
|
+
* The component which is used when the component should be displayed (e.g. on a dashboard)
|
|
123
|
+
*/
|
|
124
|
+
component: Type<any>;
|
|
125
|
+
loadComponent?: never;
|
|
126
|
+
/**
|
|
127
|
+
* The configuration component used when a widget is added or edited.
|
|
128
|
+
*/
|
|
129
|
+
configComponent?: Type<any>;
|
|
130
|
+
loadConfigComponent?: never;
|
|
131
|
+
}
|
|
132
|
+
export interface LazyDynamicComponents {
|
|
133
|
+
/**
|
|
134
|
+
* A function returning a promise of the component which is used when the component should be displayed (e.g. on a dashboard)
|
|
135
|
+
*
|
|
136
|
+
* A sample function to be provided could look like this:
|
|
137
|
+
* ```
|
|
138
|
+
* async function loadViewComponent() {
|
|
139
|
+
* const { LazyWidgetViewComponent } = await import('./lazy-widget-view');
|
|
140
|
+
* return LazyWidgetViewComponent;
|
|
141
|
+
* }
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
loadComponent: () => Promise<Type<any>>;
|
|
145
|
+
component?: never;
|
|
146
|
+
/**
|
|
147
|
+
* A function returning a promise of the configuration component used when a widget is added or edited.
|
|
148
|
+
*
|
|
149
|
+
* A sample function to be provided could look like this:
|
|
150
|
+
* ```
|
|
151
|
+
* async function loadConfigComponent() {
|
|
152
|
+
* const { LazyWidgetConfigComponent } = await import('./lazy-widget-config');
|
|
153
|
+
* return LazyWidgetConfigComponent;
|
|
154
|
+
* }
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
loadConfigComponent?: () => Promise<Type<any>>;
|
|
158
|
+
configComponent?: never;
|
|
159
|
+
}
|
|
160
|
+
export declare function isLazyDynamicComponents(componentDefinition: DynamicComponents): componentDefinition is LazyDynamicComponents;
|
|
161
|
+
export declare function isEagerDynamicComponents(componentDefinition: DynamicComponents): componentDefinition is EagerDynamicComponents;
|
|
126
162
|
export declare enum DynamicComponentErrorStrategy {
|
|
127
163
|
/**
|
|
128
164
|
* Will not render/initialize the Widget in case an error was detected.
|
|
@@ -231,9 +231,9 @@ export class ActilityDeviceRegistrationComponent {
|
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
233
|
ActilityDeviceRegistrationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ActilityDeviceRegistrationComponent, deps: [{ token: i1.BsModalRef }, { token: i2.ActilityDeviceRegistrationService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
234
|
-
ActilityDeviceRegistrationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ActilityDeviceRegistrationComponent, selector: "c8y-actility-registration", ngImport: i0, template: "<c8y-modal [headerClasses]=\"'dialog-header'\"
|
|
234
|
+
ActilityDeviceRegistrationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ActilityDeviceRegistrationComponent, selector: "c8y-actility-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Actility LoRa registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <!--Formly schema is rendered-->\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n c8y-modal-body\n linear\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Actility device' | translate }}\n </p>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n ></formly-form>\n </div>\n\n <c8y-stepper-buttons\n [labels]=\"registrationStepLabels\"\n (onNext)=\"register($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form?.valid\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <!--success scenario-->\n <div class=\"p-16 text-center\" *ngIf=\"state === 'registrationPending'\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead m-b-0\"\n ></c8y-operation-result>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <!--Failure scenario-->\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <div\n *ngFor=\"let msg of errorMessages$ | async\"\n class=\"m-b-8\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n (click)=\"bsModalRef.hide()\"\n type=\"button\"\n class=\"btn btn-default\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i3.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i5.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i3.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: i6.FormlyForm, selector: "formly-form", inputs: ["model", "fields", "options", "form"], outputs: ["modelChange"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
|
|
235
235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ActilityDeviceRegistrationComponent, decorators: [{
|
|
236
236
|
type: Component,
|
|
237
|
-
args: [{ selector: 'c8y-actility-registration', template: "<c8y-modal [headerClasses]=\"'dialog-header'\"
|
|
237
|
+
args: [{ selector: 'c8y-actility-registration', template: "<c8y-modal\n [title]=\"'Actility LoRa registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <!--Formly schema is rendered-->\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n c8y-modal-body\n linear\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Actility device' | translate }}\n </p>\n <formly-form\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n ></formly-form>\n </div>\n\n <c8y-stepper-buttons\n [labels]=\"registrationStepLabels\"\n (onNext)=\"register($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form?.valid\"\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <!--success scenario-->\n <div class=\"p-16 text-center\" *ngIf=\"state === 'registrationPending'\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"success\"\n class=\"lead m-b-0\"\n ></c8y-operation-result>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <!--Failure scenario-->\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n type=\"error\"\n class=\"lead\"\n ></c8y-operation-result>\n <div\n *ngFor=\"let msg of errorMessages$ | async\"\n class=\"m-b-8\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n (click)=\"bsModalRef.hide()\"\n type=\"button\"\n class=\"btn btn-default\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n" }]
|
|
238
238
|
}], ctorParameters: function () { return [{ type: i1.BsModalRef }, { type: i2.ActilityDeviceRegistrationService }, { type: i3.GainsightService }]; } });
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWxpdHktZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hY3RpbGl0eS1kZXZpY2UtcmVnaXN0cmF0aW9uL2FjdGlsaXR5LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWN0aWxpdHktZGV2aWNlLXJlZ2lzdHJhdGlvbi9hY3RpbGl0eS1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUYsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyxTQUFTLEVBQ1YsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFZaEQsTUFBTSxPQUFPLG1DQUFtQztJQStMOUMsWUFDUyxVQUFzQixFQUNyQixtQkFBc0QsRUFDdEQsZ0JBQWtDO1FBRm5DLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFtQztRQUN0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LElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE1BQU0sY0FBYyxHQUErQixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDOUQsT0FBUSxjQUFzQixDQUFDLFVBQVUsQ0FBQztRQUMxQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOztnSUEvUFUsbUNBQW1DO29IQUFuQyxtQ0FBbUMsaUVDekJoRCxnNUdBc0dBOzJGRDdFYSxtQ0FBbUM7a0JBSi9DLFNBQVM7K0JBQ0UsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrU3RlcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDOHlTdGVwcGVyLCBHYWluc2lnaHRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVmZXIsIGZvcmtKb2luLCBmcm9tLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWN0aWxpdHlEZXZpY2VSZWdpc3RyYXRpb24gfSBmcm9tICcuL2FjdGlsaXR5LWRldmljZS1yZWdpc3RyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgQWN0aWxpdHlEZXZpY2VSZWdpc3RyYXRpb25TZXJ2aWNlLFxuICBFcnJvck5hbWVcbn0gZnJvbSAnLi9hY3RpbGl0eS1kZXZpY2UtcmVnaXN0cmF0aW9uLnNlcnZpY2UnO1xudHlwZSBTdGF0ZSA9XG4gIHwgJ2xvYWRQZW5kaW5nJ1xuICB8ICdsb2FkU3VjY2VzcydcbiAgfCAnbG9hZEVycm9yJ1xuICB8ICdyZWdpc3RyYXRpb25QZW5kaW5nJ1xuICB8ICdyZWdpc3RyYXRpb25TdWNjZXNzJ1xuICB8ICdyZWdpc3RyYXRpb25FcnJvcic7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWN0aWxpdHktcmVnaXN0cmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICdhY3RpbGl0eS1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBY3RpbGl0eURldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudCB7XG4gIHN0ZXBwZXI6IEM4eVN0ZXBwZXI7XG4gIHJlZ2lzdHJhdGlvblN0ZXBMYWJlbHMgPSB7XG4gICAgbmV4dDogZ2V0dGV4dCgnUmVnaXN0ZXInKVxuICB9O1xuICBmaW5hbFN0ZXBMYWJlbHMgPSB7XG4gICAgY3VzdG9tOiBnZXR0ZXh0KCdDbG9zZScpXG4gIH07XG5cbiAgc3RhdGU6IFN0YXRlID0gJ2xvYWRQZW5kaW5nJztcbiAgZXJyb3JzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXJyb3JbXT4oW10pO1xuICBlcnJvck1lc3NhZ2VzJCA9IHRoaXMuZXJyb3JzJC5waXBlKFxuICAgIG1hcChlcnJvcnMgPT4gZXJyb3JzLm1hcChlcnJvciA9PiBlcnJvci5tZXNzYWdlKSksXG4gICAgbWFwKG1lc3NhZ2VzID0+IHVuaXEobWVzc2FnZXMpKVxuICApO1xuXG4gIGNvbm5lY3Rpb25zJCA9IHRoaXMuZ2V0Q29ubmVjdGlvbnMkKCk7XG4gIGRldmljZVByb3RvY29scyQgPSB0aGlzLmdldERldmljZVByb3RvY29scyQoKTtcbiAgdW5zdWJzY3JpYmUkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgbG9hZCQgPSB0aGlzLmNvbm5lY3Rpb25zJC5waXBlKFxuICAgIGNhdGNoRXJyb3IoKGVycm9yOiBFcnJvcikgPT4gb2YoZXJyb3IpKSxcbiAgICBzd2l0Y2hNYXAoY29ubmVjdGlvbnMgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb25uZWN0aW9ucyBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgIGNvbm5lY3Rpb25zLm5hbWUgPT09IEVycm9yTmFtZS5Ob0Nvbm5lY3Rpdml0eVNldHRpbmdzRXJyb3JcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gb2YoW2Nvbm5lY3Rpb25zXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JrSm9pbihbXG4gICAgICAgIG9mKGNvbm5lY3Rpb25zKSxcbiAgICAgICAgdGhpcy5kZXZpY2VQcm90b2NvbHMkLnBpcGUoY2F0Y2hFcnJvcigoZXJyb3I6IEVycm9yKSA9PiBvZihlcnJvcikpKVxuICAgICAgXSk7XG4gICAgfSksXG4gICAgbWFwKHJlc3VsdHMgPT4gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSksXG4gICAgc3dpdGNoTWFwKGVycm9ycyA9PiAoZXJyb3JzLmxlbmd0aCA9PT0gMCA/IG9mKFtdKSA6IHRocm93RXJyb3IoZXJyb3JzKSkpXG4gICk7XG5cbiAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBtb2RlbCA9IHt9IGFzIEFjdGlsaXR5RGV2aWNlUmVnaXN0cmF0aW9uO1xuXG4gIC8vIEZvcm1seSBzY2hlbWEgZGVmaW5pdGlvbiB0byByZW5kZXIgYWN0aWxpdHkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmb3JtXG4gIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdjb25uZWN0aW9uJyxcbiAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25uZWN0aW9uJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBjOHlGb3JPcHRpb25zOiB0aGlzLmNvbm5lY3Rpb25zJCxcbiAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlUHJvcGVydGllczogWyduYW1lJ11cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2RldmljZVByb2ZpbGUnLFxuICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0RldmljZSBwcm9maWxlJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkaXNwbGF5UHJvcGVydHk6ICduYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdJV00tTFIzJyxcbiAgICAgICAgdmFsdWVQcm9wZXJ0aWVzOiBbJ2lkJywgJ25hbWUnLCAndHlwZU1BQyddXG4gICAgICB9LFxuICAgICAgaG9va3M6IHtcbiAgICAgICAgb25Jbml0OiBmaWVsZCA9PiB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbkNvbnRyb2wgPSBmaWVsZC5mb3JtLmdldCgnY29ubmVjdGlvbicpO1xuICAgICAgICAgIGNvbm5lY3Rpb25Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgICAgICAgIG1lcmdlTWFwKCh7IG5hbWUgfSkgPT4gdGhpcy5nZXREZXZpY2VQcm9maWxlcyQobmFtZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBwcm9maWxlcyA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLmM4eUZvck9wdGlvbnMgPSBvZihwcm9maWxlcyk7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZC5mb3JtLmNvbnRyb2xzLmRldmljZVByb2ZpbGUuc2V0RXJyb3JzKHsgZGV2aWNlUHJvZmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0b3JzLmRldmljZVByb2ZpbGUubWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIGRldmljZVByb2ZpbGU6IHtcbiAgICAgICAgICBleHByZXNzaW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC5zdGF0dXMgPT09ICdWQUxJRCc7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiAoKSA9PiAnJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdkZXZpY2VUeXBlJyxcbiAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdEZXZpY2UgcHJvdG9jb2wnKSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGM4eUZvck9wdGlvbnM6IHRoaXMuZGV2aWNlUHJvdG9jb2xzJCxcbiAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlUHJvcGVydGllczogWydpZCcsICduYW1lJ11cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2RldkVVSScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiAnMDAxOEEyMDAwMDAwMDAwNCcsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdEZXZpY2UgRVVJJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBwYXR0ZXJuOiAnXihbYS1mQS1GMC05XXsxNn0pJCdcbiAgICAgIH0sXG4gICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgICAgcGF0dGVybjogZ2V0dGV4dCgnTXVzdCBiZSBhIHZhbGlkIDE2IGRpZ2l0IGhleGFkZWNpbWFsIG51bWJlci4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdhcHBsaWNhdGlvbkVVSScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiAnNzBCM0Q1MzI2MDAwMDAwMycsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBcHBsaWNhdGlvbiBFVUknKSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHBhdHRlcm46ICdeKFthLWZBLUYwLTldezE2fSkkJ1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb246IHtcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICBwYXR0ZXJuOiBnZXR0ZXh0KCdNdXN0IGJlIGEgdmFsaWQgMTYgZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyLicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2FwcGxpY2F0aW9uS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0FwcGxpY2F0aW9uIGtleScpLFxuICAgICAgICBwbGFjZWhvbGRlcjogJzI1OERCNTQwMjNFQTc0RjBENTUwODVGNzM1MTczN0QwJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHBhdHRlcm46ICdeKFthLWZBLUYwLTldezMyfSkkJ1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb246IHtcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICBwYXR0ZXJuOiBnZXR0ZXh0KCdNdXN0IGJlIGEgdmFsaWQgMzIgZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyLicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2Nvbm5lY3Rpdml0eVBsYW4nLFxuICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0Nvbm5lY3Rpdml0eSBwbGFuJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdPbmx5IGNvbm5lY3Rpdml0eSBwbGFucyB3aXRoIGZyZWUgc2xvdHMgYXJlIGRpc3BsYXllZCcpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdEZXYtb3BlIHRlc3RpbmcgQ1AnLFxuICAgICAgICBkaXNwbGF5UHJvcGVydHk6ICduYW1lJyxcbiAgICAgICAgdmFsdWVQcm9wZXJ0aWVzOiBbJ2lkJywgJ3JlZicsICduYW1lJywgJ2dyYW50ZWRDb25uZWN0aW9ucycsICd1c2VkQ29ubmVjdGlvbnMnXVxuICAgICAgfSxcbiAgICAgIGhvb2tzOiB7XG4gICAgICAgIG9uSW5pdDogZmllbGQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Db250cm9sID0gZmllbGQuZm9ybS5nZXQoJ2Nvbm5lY3Rpb24nKTtcbiAgICAgICAgICBjb25uZWN0aW9uQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICAgICAgICBtZXJnZU1hcCgoeyBuYW1lIH0pID0+IHRoaXMuZ2V0Q29ubmVjdGl2aXR5UGxhbnMkKG5hbWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgcHJvZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5jOHlGb3JPcHRpb25zID0gb2YocHJvZmlsZXMpO1xuICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybS5jb250cm9scy5jb25uZWN0aXZpdHlQbGFuLnNldEVycm9ycyh7IGNvbm5lY3Rpdml0eVBsYW46IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsaWRhdG9ycy5jb25uZWN0aXZpdHlQbGFuLm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBjb25uZWN0aXZpdHlQbGFuOiB7XG4gICAgICAgICAgZXhwcmVzc2lvbjogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuc3RhdHVzID09PSAnVkFMSUQnO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogKCkgPT4gJydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIHJlZ2lzdHJhdGlvblNlcnZpY2U6IEFjdGlsaXR5RGV2aWNlUmVnaXN0cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sb2FkJC5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbG9hZFN1Y2Nlc3MnO1xuICAgICAgfSxcbiAgICAgIGVycm9ycyA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbG9hZEVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMkLm5leHQoZXJyb3JzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGl2aXR5UGxhbnMkKG5hbWUpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLnJlZ2lzdHJhdGlvblNlcnZpY2UuZ2V0Q29ubmVjdGl2aXR5UGxhbnMobmFtZSkpKS5waXBlKFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgZ2V0RGV2aWNlUHJvZmlsZXMkKG5hbWUpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLnJlZ2lzdHJhdGlvblNlcnZpY2UuZ2V0RGV2aWNlUHJvZmlsZXMobmFtZSkpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIGdldERldmljZVByb3RvY29scyQoKSB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5yZWdpc3RyYXRpb25TZXJ2aWNlLmdldERldmljZVByb3RvY29scygpKSkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9ucyQoKSB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5yZWdpc3RyYXRpb25TZXJ2aWNlLmdldENvbm5lY3Rpb25zKCkpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKGV2ZW50OiB7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfSkge1xuICAgIGV2ZW50LnN0ZXBwZXIubmV4dCgpO1xuICAgIHRoaXMuc3RhdGUgPSAncmVnaXN0cmF0aW9uUGVuZGluZyc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFjdGlsaXR5RGV2aWNlID0gdGhpcy5nZXRBY3RpbGl0eURldmljZVRvU2VuZCgpO1xuICAgICAgYXdhaXQgdGhpcy5yZWdpc3RyYXRpb25TZXJ2aWNlLnJlZ2lzdGVyKGFjdGlsaXR5RGV2aWNlKTtcbiAgICAgIHRoaXMuc3RhdGUgPSAncmVnaXN0cmF0aW9uU3VjY2Vzcyc7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KCdkbURldmljZVJlZ2lzdHJhdGlvbicsIHtcbiAgICAgICAgYWN0aW9uOiAncmVnaXN0cmF0aW9uU3VjY2VzcycsXG4gICAgICAgIG5hbWU6ICdhY3RpbGl0eVJlZ2lzdHJhdGlvbidcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ3JlZ2lzdHJhdGlvbkVycm9yJztcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoJ2RtRGV2aWNlUmVnaXN0cmF0aW9uJywge1xuICAgICAgICBhY3Rpb246ICdyZWdpc3RyYXRpb25GYWlsdXJlJyxcbiAgICAgICAgbmFtZTogJ2FjdGlsaXR5UmVnaXN0cmF0aW9uJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLmVycm9ycyQubmV4dChbZXJyb3JdKTtcbiAgICB9XG4gIH1cblxuICBnZXRBY3RpbGl0eURldmljZVRvU2VuZCgpIHtcbiAgICBjb25zdCBhY3RpbGl0eURldmljZTogQWN0aWxpdHlEZXZpY2VSZWdpc3RyYXRpb24gPSBjbG9uZURlZXAodGhpcy5tb2RlbCk7XG4gICAgYWN0aWxpdHlEZXZpY2UubG5zQ29ubmVjdGlvbk5hbWUgPSB0aGlzLm1vZGVsLmNvbm5lY3Rpb24ubmFtZTtcbiAgICBkZWxldGUgKGFjdGlsaXR5RGV2aWNlIGFzIGFueSkuY29ubmVjdGlvbjtcbiAgICByZXR1cm4gYWN0aWxpdHlEZXZpY2U7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxjOHktbW9kYWwgW2hlYWRlckNsYXNzZXNdPVwiJ2RpYWxvZy1oZWFkZXInXCIgW2N1c3RvbUZvb3Rlcl09XCJ0cnVlXCI+XG4gIDxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICAgIDxzcGFuIFtjOHlJY29uXT1cIidjOHktZGV2aWNlLWNvbm5lY3QnXCI+PC9zcGFuPlxuICAgIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCI+e3sgJ0FjdGlsaXR5IExvUmEgcmVnaXN0cmF0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSA9PT0gJ2xvYWRQZW5kaW5nJzsgZWxzZSByZWdpc3RyYXRpb25Gb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXJcIj5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tRm9ybWx5IHNjaGVtYSBpcyByZW5kZXJlZC0tPlxuICA8bmctdGVtcGxhdGUgI3JlZ2lzdHJhdGlvbkZvcm0+XG4gICAgPGM4eS1zdGVwcGVyXG4gICAgICBbaGlkZVN0ZXBQcm9ncmVzc109XCJ0cnVlXCJcbiAgICAgIGxpbmVhclxuICAgICAgaWQ9XCJtb2RhbC1ib2R5XCJcbiAgICAgICpuZ0lmPVwiKGVycm9yTWVzc2FnZXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMDsgZWxzZSBlcnJvck1lc3NhZ2VzUHJlc2VudFwiXG4gICAgPlxuICAgICAgPGNkay1zdGVwIFtzdGVwQ29udHJvbF09XCJmb3JtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWItMTZcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cIm1vZGFsLXN1YnRpdGxlIHN0aWNreS10b3BcIj5cbiAgICAgICAgICAgIHt7ICdSZWdpc3RlciBhIHNpbmdsZSBBY3RpbGl0eSBkZXZpY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxmb3JtbHktZm9ybVxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtbHktZ3JvdXAtYXJyYXktY29scyBkLWJsb2NrIHAtbC0yNCBwLXItMjQgcC10LTE2XCJcbiAgICAgICAgICA+PC9mb3JtbHktZm9ybT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGM4eS1zdGVwcGVyLWJ1dHRvbnNcbiAgICAgICAgICBbbGFiZWxzXT1cInJlZ2lzdHJhdGlvblN0ZXBMYWJlbHNcIlxuICAgICAgICAgIChvbk5leHQpPVwicmVnaXN0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQ2FuY2VsKT1cImJzTW9kYWxSZWYuaGlkZSgpXCJcbiAgICAgICAgICBbc2hvd0J1dHRvbnNdPVwieyBjYW5jZWw6IHRydWUsIG5leHQ6IHRydWUgfVwiXG4gICAgICAgICAgW3BlbmRpbmddPVwic3RhdGUgPT09ICdyZWdpc3RyYXRpb25QZW5kaW5nJ1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtPy52YWxpZFwiXG4gICAgICAgICAgY2xhc3M9XCJzdGlja3ktYm90dG9tIGQtYmxvY2sgcC10LTE2IHAtYi0xNiBzZXBhcmF0b3ItdG9wIGJnLWxldmVsLTBcIlxuICAgICAgICA+PC9jOHktc3RlcHBlci1idXR0b25zPlxuICAgICAgPC9jZGstc3RlcD5cbiAgICAgIDxjZGstc3RlcCBzdGF0ZT1cImZpbmFsXCI+XG4gICAgICAgIDwhLS1zdWNjZXNzIHNjZW5hcmlvLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IHRleHQtY2VudGVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gJ3JlZ2lzdHJhdGlvblBlbmRpbmcnXCI+XG4gICAgICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS0yNFwiPlxuICAgICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgICAgKm5nSWY9XCJzdGF0ZSA9PT0gJ3JlZ2lzdHJhdGlvblN1Y2Nlc3MnXCJcbiAgICAgICAgICAgIHRleHQ9XCJ7eyAnRGV2aWNlIHJlZ2lzdGVyZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVhZCBtLWItMFwiXG4gICAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Yzh5LXN0ZXBwZXItYnV0dG9uc1xuICAgICAgICAgIGNsYXNzPVwic3RpY2t5LWJvdHRvbSBkLWJsb2NrIHAtdC0xNiBwLWItMTYgc2VwYXJhdG9yLXRvcCBiZy1sZXZlbC0wXCJcbiAgICAgICAgICAob25DdXN0b20pPVwiYnNNb2RhbFJlZi5oaWRlKClcIlxuICAgICAgICAgIFtzaG93QnV0dG9uc109XCJ7IGN1c3RvbTogdHJ1ZSB9XCJcbiAgICAgICAgICBbbGFiZWxzXT1cImZpbmFsU3RlcExhYmVsc1wiXG4gICAgICAgID48L2M4eS1zdGVwcGVyLWJ1dHRvbnM+XG4gICAgICA8L2Nkay1zdGVwPlxuICAgIDwvYzh5LXN0ZXBwZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLUZhaWx1cmUgc2NlbmFyaW8tLT5cbiAgPG5nLXRlbXBsYXRlICNlcnJvck1lc3NhZ2VzUHJlc2VudD5cbiAgICA8ZGl2IGNsYXNzPVwibS0yNFwiPlxuICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICpuZ0lmPVwic3RhdGUgPT09ICdyZWdpc3RyYXRpb25FcnJvcidcIlxuICAgICAgICB0ZXh0PVwie3sgJ0ZhaWxlZCB0byByZWdpc3RlcicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgbXNnIG9mIGVycm9yTWVzc2FnZXMkIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cIm0tYi04XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICd0ZXh0LWNlbnRlcic6IHN0YXRlID09PSAncmVnaXN0cmF0aW9uRXJyb3InLFxuICAgICAgICAgICdhbGVydCBhbGVydC1kYW5nZXInOiBzdGF0ZSA9PT0gJ2xvYWRFcnJvcidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibXNnIHwgdHJhbnNsYXRlXCI+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0aXRsZT1cInt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAoY2xpY2spPVwiYnNNb2RhbFJlZi5oaWRlKClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgPlxuICAgICAgICB7eyAnQ2xvc2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYzh5LW1vZGFsPlxuIl19
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWxpdHktZGV2aWNlLXJlZ2lzdHJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hY3RpbGl0eS1kZXZpY2UtcmVnaXN0cmF0aW9uL2FjdGlsaXR5LWRldmljZS1yZWdpc3RyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWN0aWxpdHktZGV2aWNlLXJlZ2lzdHJhdGlvbi9hY3RpbGl0eS1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUYsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyxTQUFTLEVBQ1YsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFZaEQsTUFBTSxPQUFPLG1DQUFtQztJQStMOUMsWUFDUyxVQUFzQixFQUNyQixtQkFBc0QsRUFDdEQsZ0JBQWtDO1FBRm5DLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDckIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFtQztRQUN0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LElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE1BQU0sY0FBYyxHQUErQixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDOUQsT0FBUSxjQUFzQixDQUFDLFVBQVUsQ0FBQztRQUMxQyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOztnSUEvUFUsbUNBQW1DO29IQUFuQyxtQ0FBbUMsaUVDekJoRCw2M0dBeUdBOzJGRGhGYSxtQ0FBbUM7a0JBSi9DLFNBQVM7K0JBQ0UsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrU3RlcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDOHlTdGVwcGVyLCBHYWluc2lnaHRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVmZXIsIGZvcmtKb2luLCBmcm9tLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWN0aWxpdHlEZXZpY2VSZWdpc3RyYXRpb24gfSBmcm9tICcuL2FjdGlsaXR5LWRldmljZS1yZWdpc3RyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgQWN0aWxpdHlEZXZpY2VSZWdpc3RyYXRpb25TZXJ2aWNlLFxuICBFcnJvck5hbWVcbn0gZnJvbSAnLi9hY3RpbGl0eS1kZXZpY2UtcmVnaXN0cmF0aW9uLnNlcnZpY2UnO1xudHlwZSBTdGF0ZSA9XG4gIHwgJ2xvYWRQZW5kaW5nJ1xuICB8ICdsb2FkU3VjY2VzcydcbiAgfCAnbG9hZEVycm9yJ1xuICB8ICdyZWdpc3RyYXRpb25QZW5kaW5nJ1xuICB8ICdyZWdpc3RyYXRpb25TdWNjZXNzJ1xuICB8ICdyZWdpc3RyYXRpb25FcnJvcic7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWN0aWxpdHktcmVnaXN0cmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICdhY3RpbGl0eS1kZXZpY2UtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBY3RpbGl0eURldmljZVJlZ2lzdHJhdGlvbkNvbXBvbmVudCB7XG4gIHN0ZXBwZXI6IEM4eVN0ZXBwZXI7XG4gIHJlZ2lzdHJhdGlvblN0ZXBMYWJlbHMgPSB7XG4gICAgbmV4dDogZ2V0dGV4dCgnUmVnaXN0ZXInKVxuICB9O1xuICBmaW5hbFN0ZXBMYWJlbHMgPSB7XG4gICAgY3VzdG9tOiBnZXR0ZXh0KCdDbG9zZScpXG4gIH07XG5cbiAgc3RhdGU6IFN0YXRlID0gJ2xvYWRQZW5kaW5nJztcbiAgZXJyb3JzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXJyb3JbXT4oW10pO1xuICBlcnJvck1lc3NhZ2VzJCA9IHRoaXMuZXJyb3JzJC5waXBlKFxuICAgIG1hcChlcnJvcnMgPT4gZXJyb3JzLm1hcChlcnJvciA9PiBlcnJvci5tZXNzYWdlKSksXG4gICAgbWFwKG1lc3NhZ2VzID0+IHVuaXEobWVzc2FnZXMpKVxuICApO1xuXG4gIGNvbm5lY3Rpb25zJCA9IHRoaXMuZ2V0Q29ubmVjdGlvbnMkKCk7XG4gIGRldmljZVByb3RvY29scyQgPSB0aGlzLmdldERldmljZVByb3RvY29scyQoKTtcbiAgdW5zdWJzY3JpYmUkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgbG9hZCQgPSB0aGlzLmNvbm5lY3Rpb25zJC5waXBlKFxuICAgIGNhdGNoRXJyb3IoKGVycm9yOiBFcnJvcikgPT4gb2YoZXJyb3IpKSxcbiAgICBzd2l0Y2hNYXAoY29ubmVjdGlvbnMgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb25uZWN0aW9ucyBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgIGNvbm5lY3Rpb25zLm5hbWUgPT09IEVycm9yTmFtZS5Ob0Nvbm5lY3Rpdml0eVNldHRpbmdzRXJyb3JcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gb2YoW2Nvbm5lY3Rpb25zXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JrSm9pbihbXG4gICAgICAgIG9mKGNvbm5lY3Rpb25zKSxcbiAgICAgICAgdGhpcy5kZXZpY2VQcm90b2NvbHMkLnBpcGUoY2F0Y2hFcnJvcigoZXJyb3I6IEVycm9yKSA9PiBvZihlcnJvcikpKVxuICAgICAgXSk7XG4gICAgfSksXG4gICAgbWFwKHJlc3VsdHMgPT4gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSksXG4gICAgc3dpdGNoTWFwKGVycm9ycyA9PiAoZXJyb3JzLmxlbmd0aCA9PT0gMCA/IG9mKFtdKSA6IHRocm93RXJyb3IoZXJyb3JzKSkpXG4gICk7XG5cbiAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBtb2RlbCA9IHt9IGFzIEFjdGlsaXR5RGV2aWNlUmVnaXN0cmF0aW9uO1xuXG4gIC8vIEZvcm1seSBzY2hlbWEgZGVmaW5pdGlvbiB0byByZW5kZXIgYWN0aWxpdHkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmb3JtXG4gIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdjb25uZWN0aW9uJyxcbiAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25uZWN0aW9uJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBjOHlGb3JPcHRpb25zOiB0aGlzLmNvbm5lY3Rpb25zJCxcbiAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlUHJvcGVydGllczogWyduYW1lJ11cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2RldmljZVByb2ZpbGUnLFxuICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0RldmljZSBwcm9maWxlJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkaXNwbGF5UHJvcGVydHk6ICduYW1lJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdJV00tTFIzJyxcbiAgICAgICAgdmFsdWVQcm9wZXJ0aWVzOiBbJ2lkJywgJ25hbWUnLCAndHlwZU1BQyddXG4gICAgICB9LFxuICAgICAgaG9va3M6IHtcbiAgICAgICAgb25Jbml0OiBmaWVsZCA9PiB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbkNvbnRyb2wgPSBmaWVsZC5mb3JtLmdldCgnY29ubmVjdGlvbicpO1xuICAgICAgICAgIGNvbm5lY3Rpb25Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgICAgICAgIG1lcmdlTWFwKCh7IG5hbWUgfSkgPT4gdGhpcy5nZXREZXZpY2VQcm9maWxlcyQobmFtZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICBwcm9maWxlcyA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLmM4eUZvck9wdGlvbnMgPSBvZihwcm9maWxlcyk7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZC5mb3JtLmNvbnRyb2xzLmRldmljZVByb2ZpbGUuc2V0RXJyb3JzKHsgZGV2aWNlUHJvZmlsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0b3JzLmRldmljZVByb2ZpbGUubWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIGRldmljZVByb2ZpbGU6IHtcbiAgICAgICAgICBleHByZXNzaW9uOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC5zdGF0dXMgPT09ICdWQUxJRCc7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiAoKSA9PiAnJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdkZXZpY2VUeXBlJyxcbiAgICAgIHR5cGU6ICd0eXBlYWhlYWQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdEZXZpY2UgcHJvdG9jb2wnKSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGM4eUZvck9wdGlvbnM6IHRoaXMuZGV2aWNlUHJvdG9jb2xzJCxcbiAgICAgICAgZGlzcGxheVByb3BlcnR5OiAnbmFtZScsXG4gICAgICAgIHZhbHVlUHJvcGVydGllczogWydpZCcsICduYW1lJ11cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2RldkVVSScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiAnMDAxOEEyMDAwMDAwMDAwNCcsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdEZXZpY2UgRVVJJyksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBwYXR0ZXJuOiAnXihbYS1mQS1GMC05XXsxNn0pJCdcbiAgICAgIH0sXG4gICAgICB2YWxpZGF0aW9uOiB7XG4gICAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgICAgcGF0dGVybjogZ2V0dGV4dCgnTXVzdCBiZSBhIHZhbGlkIDE2IGRpZ2l0IGhleGFkZWNpbWFsIG51bWJlci4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdhcHBsaWNhdGlvbkVVSScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiAnNzBCM0Q1MzI2MDAwMDAwMycsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBcHBsaWNhdGlvbiBFVUknKSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHBhdHRlcm46ICdeKFthLWZBLUYwLTldezE2fSkkJ1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb246IHtcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICBwYXR0ZXJuOiBnZXR0ZXh0KCdNdXN0IGJlIGEgdmFsaWQgMTYgZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyLicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2FwcGxpY2F0aW9uS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0FwcGxpY2F0aW9uIGtleScpLFxuICAgICAgICBwbGFjZWhvbGRlcjogJzI1OERCNTQwMjNFQTc0RjBENTUwODVGNzM1MTczN0QwJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHBhdHRlcm46ICdeKFthLWZBLUYwLTldezMyfSkkJ1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb246IHtcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICBwYXR0ZXJuOiBnZXR0ZXh0KCdNdXN0IGJlIGEgdmFsaWQgMzIgZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyLicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2Nvbm5lY3Rpdml0eVBsYW4nLFxuICAgICAgdHlwZTogJ3R5cGVhaGVhZCcsXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0Nvbm5lY3Rpdml0eSBwbGFuJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdPbmx5IGNvbm5lY3Rpdml0eSBwbGFucyB3aXRoIGZyZWUgc2xvdHMgYXJlIGRpc3BsYXllZCcpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdEZXYtb3BlIHRlc3RpbmcgQ1AnLFxuICAgICAgICBkaXNwbGF5UHJvcGVydHk6ICduYW1lJyxcbiAgICAgICAgdmFsdWVQcm9wZXJ0aWVzOiBbJ2lkJywgJ3JlZicsICduYW1lJywgJ2dyYW50ZWRDb25uZWN0aW9ucycsICd1c2VkQ29ubmVjdGlvbnMnXVxuICAgICAgfSxcbiAgICAgIGhvb2tzOiB7XG4gICAgICAgIG9uSW5pdDogZmllbGQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Db250cm9sID0gZmllbGQuZm9ybS5nZXQoJ2Nvbm5lY3Rpb24nKTtcbiAgICAgICAgICBjb25uZWN0aW9uQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICAgICAgICBtZXJnZU1hcCgoeyBuYW1lIH0pID0+IHRoaXMuZ2V0Q29ubmVjdGl2aXR5UGxhbnMkKG5hbWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgcHJvZmlsZXMgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5jOHlGb3JPcHRpb25zID0gb2YocHJvZmlsZXMpO1xuICAgICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybS5jb250cm9scy5jb25uZWN0aXZpdHlQbGFuLnNldEVycm9ycyh7IGNvbm5lY3Rpdml0eVBsYW46IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsaWRhdG9ycy5jb25uZWN0aXZpdHlQbGFuLm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdmFsaWRhdG9yczoge1xuICAgICAgICBjb25uZWN0aXZpdHlQbGFuOiB7XG4gICAgICAgICAgZXhwcmVzc2lvbjogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuc3RhdHVzID09PSAnVkFMSUQnO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogKCkgPT4gJydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYnNNb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIHJlZ2lzdHJhdGlvblNlcnZpY2U6IEFjdGlsaXR5RGV2aWNlUmVnaXN0cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sb2FkJC5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbG9hZFN1Y2Nlc3MnO1xuICAgICAgfSxcbiAgICAgIGVycm9ycyA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnbG9hZEVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMkLm5leHQoZXJyb3JzKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGl2aXR5UGxhbnMkKG5hbWUpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLnJlZ2lzdHJhdGlvblNlcnZpY2UuZ2V0Q29ubmVjdGl2aXR5UGxhbnMobmFtZSkpKS5waXBlKFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgZ2V0RGV2aWNlUHJvZmlsZXMkKG5hbWUpIHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gZnJvbSh0aGlzLnJlZ2lzdHJhdGlvblNlcnZpY2UuZ2V0RGV2aWNlUHJvZmlsZXMobmFtZSkpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIGdldERldmljZVByb3RvY29scyQoKSB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5yZWdpc3RyYXRpb25TZXJ2aWNlLmdldERldmljZVByb3RvY29scygpKSkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9ucyQoKSB7XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IGZyb20odGhpcy5yZWdpc3RyYXRpb25TZXJ2aWNlLmdldENvbm5lY3Rpb25zKCkpKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKGV2ZW50OiB7IHN0ZXBwZXI6IEM4eVN0ZXBwZXI7IHN0ZXA6IENka1N0ZXAgfSkge1xuICAgIGV2ZW50LnN0ZXBwZXIubmV4dCgpO1xuICAgIHRoaXMuc3RhdGUgPSAncmVnaXN0cmF0aW9uUGVuZGluZyc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFjdGlsaXR5RGV2aWNlID0gdGhpcy5nZXRBY3RpbGl0eURldmljZVRvU2VuZCgpO1xuICAgICAgYXdhaXQgdGhpcy5yZWdpc3RyYXRpb25TZXJ2aWNlLnJlZ2lzdGVyKGFjdGlsaXR5RGV2aWNlKTtcbiAgICAgIHRoaXMuc3RhdGUgPSAncmVnaXN0cmF0aW9uU3VjY2Vzcyc7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KCdkbURldmljZVJlZ2lzdHJhdGlvbicsIHtcbiAgICAgICAgYWN0aW9uOiAncmVnaXN0cmF0aW9uU3VjY2VzcycsXG4gICAgICAgIG5hbWU6ICdhY3RpbGl0eVJlZ2lzdHJhdGlvbidcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnN0YXRlID0gJ3JlZ2lzdHJhdGlvbkVycm9yJztcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoJ2RtRGV2aWNlUmVnaXN0cmF0aW9uJywge1xuICAgICAgICBhY3Rpb246ICdyZWdpc3RyYXRpb25GYWlsdXJlJyxcbiAgICAgICAgbmFtZTogJ2FjdGlsaXR5UmVnaXN0cmF0aW9uJ1xuICAgICAgfSk7XG4gICAgICB0aGlzLmVycm9ycyQubmV4dChbZXJyb3JdKTtcbiAgICB9XG4gIH1cblxuICBnZXRBY3RpbGl0eURldmljZVRvU2VuZCgpIHtcbiAgICBjb25zdCBhY3RpbGl0eURldmljZTogQWN0aWxpdHlEZXZpY2VSZWdpc3RyYXRpb24gPSBjbG9uZURlZXAodGhpcy5tb2RlbCk7XG4gICAgYWN0aWxpdHlEZXZpY2UubG5zQ29ubmVjdGlvbk5hbWUgPSB0aGlzLm1vZGVsLmNvbm5lY3Rpb24ubmFtZTtcbiAgICBkZWxldGUgKGFjdGlsaXR5RGV2aWNlIGFzIGFueSkuY29ubmVjdGlvbjtcbiAgICByZXR1cm4gYWN0aWxpdHlEZXZpY2U7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxjOHktbW9kYWxcbiAgW3RpdGxlXT1cIidBY3RpbGl0eSBMb1JhIHJlZ2lzdHJhdGlvbicgfCB0cmFuc2xhdGVcIlxuICBbaGVhZGVyQ2xhc3Nlc109XCInZGlhbG9nLWhlYWRlcidcIlxuICBbY3VzdG9tRm9vdGVyXT1cInRydWVcIlxuPlxuICA8bmctY29udGFpbmVyIGM4eS1tb2RhbC10aXRsZT5cbiAgICA8c3BhbiBbYzh5SWNvbl09XCInYzh5LWRldmljZS1jb25uZWN0J1wiPjwvc3Bhbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlID09PSAnbG9hZFBlbmRpbmcnOyBlbHNlIHJlZ2lzdHJhdGlvbkZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS1Gb3JtbHkgc2NoZW1hIGlzIHJlbmRlcmVkLS0+XG4gIDxuZy10ZW1wbGF0ZSAjcmVnaXN0cmF0aW9uRm9ybT5cbiAgICA8Yzh5LXN0ZXBwZXJcbiAgICAgIFtoaWRlU3RlcFByb2dyZXNzXT1cInRydWVcIlxuICAgICAgYzh5LW1vZGFsLWJvZHlcbiAgICAgIGxpbmVhclxuICAgICAgKm5nSWY9XCIoZXJyb3JNZXNzYWdlcyQgfCBhc3luYykubGVuZ3RoID09PSAwOyBlbHNlIGVycm9yTWVzc2FnZXNQcmVzZW50XCJcbiAgICA+XG4gICAgICA8Y2RrLXN0ZXAgW3N0ZXBDb250cm9sXT1cImZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtYi0xNlwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibW9kYWwtc3VidGl0bGUgc3RpY2t5LXRvcFwiPlxuICAgICAgICAgICAge3sgJ1JlZ2lzdGVyIGEgc2luZ2xlIEFjdGlsaXR5IGRldmljZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGZvcm1seS1mb3JtXG4gICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcbiAgICAgICAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm1seS1ncm91cC1hcnJheS1jb2xzIGQtYmxvY2sgcC1sLTI0IHAtci0yNCBwLXQtMTZcIlxuICAgICAgICAgID48L2Zvcm1seS1mb3JtPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8Yzh5LXN0ZXBwZXItYnV0dG9uc1xuICAgICAgICAgIFtsYWJlbHNdPVwicmVnaXN0cmF0aW9uU3RlcExhYmVsc1wiXG4gICAgICAgICAgKG9uTmV4dCk9XCJyZWdpc3RlcigkZXZlbnQpXCJcbiAgICAgICAgICAob25DYW5jZWwpPVwiYnNNb2RhbFJlZi5oaWRlKClcIlxuICAgICAgICAgIFtzaG93QnV0dG9uc109XCJ7IGNhbmNlbDogdHJ1ZSwgbmV4dDogdHJ1ZSB9XCJcbiAgICAgICAgICBbcGVuZGluZ109XCJzdGF0ZSA9PT0gJ3JlZ2lzdHJhdGlvblBlbmRpbmcnXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm0/LnZhbGlkXCJcbiAgICAgICAgICBjbGFzcz1cInN0aWNreS1ib3R0b20gZC1ibG9jayBwLXQtMTYgcC1iLTE2IHNlcGFyYXRvci10b3AgYmctbGV2ZWwtMFwiXG4gICAgICAgID48L2M4eS1zdGVwcGVyLWJ1dHRvbnM+XG4gICAgICA8L2Nkay1zdGVwPlxuICAgICAgPGNkay1zdGVwIHN0YXRlPVwiZmluYWxcIj5cbiAgICAgICAgPCEtLXN1Y2Nlc3Mgc2NlbmFyaW8tLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXJcIiAqbmdJZj1cInN0YXRlID09PSAncmVnaXN0cmF0aW9uUGVuZGluZydcIj5cbiAgICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTI0XCI+XG4gICAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgICAqbmdJZj1cInN0YXRlID09PSAncmVnaXN0cmF0aW9uU3VjY2VzcydcIlxuICAgICAgICAgICAgdGV4dD1cInt7ICdEZXZpY2UgcmVnaXN0ZXJlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJsZWFkIG0tYi0wXCJcbiAgICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxjOHktc3RlcHBlci1idXR0b25zXG4gICAgICAgICAgY2xhc3M9XCJzdGlja3ktYm90dG9tIGQtYmxvY2sgcC10LTE2IHAtYi0xNiBzZXBhcmF0b3ItdG9wIGJnLWxldmVsLTBcIlxuICAgICAgICAgIChvbkN1c3RvbSk9XCJic01vZGFsUmVmLmhpZGUoKVwiXG4gICAgICAgICAgW3Nob3dCdXR0b25zXT1cInsgY3VzdG9tOiB0cnVlIH1cIlxuICAgICAgICAgIFtsYWJlbHNdPVwiZmluYWxTdGVwTGFiZWxzXCJcbiAgICAgICAgPjwvYzh5LXN0ZXBwZXItYnV0dG9ucz5cbiAgICAgIDwvY2RrLXN0ZXA+XG4gICAgPC9jOHktc3RlcHBlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tRmFpbHVyZSBzY2VuYXJpby0tPlxuICA8bmctdGVtcGxhdGUgI2Vycm9yTWVzc2FnZXNQcmVzZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtLTI0XCI+XG4gICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgKm5nSWY9XCJzdGF0ZSA9PT0gJ3JlZ2lzdHJhdGlvbkVycm9yJ1wiXG4gICAgICAgIHRleHQ9XCJ7eyAnRmFpbGVkIHRvIHJlZ2lzdGVyJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBtc2cgb2YgZXJyb3JNZXNzYWdlcyQgfCBhc3luY1wiXG4gICAgICAgIGNsYXNzPVwibS1iLThcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3RleHQtY2VudGVyJzogc3RhdGUgPT09ICdyZWdpc3RyYXRpb25FcnJvcicsXG4gICAgICAgICAgJ2FsZXJ0IGFsZXJ0LWRhbmdlcic6IHN0YXRlID09PSAnbG9hZEVycm9yJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJtc2cgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHRpdGxlPVwie3sgJ0Nsb3NlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIChjbGljayk9XCJic01vZGFsUmVmLmhpZGUoKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9jOHktbW9kYWw+XG4iXX0=
|
|
@@ -445,7 +445,7 @@ export class ContextDashboardComponent {
|
|
|
445
445
|
}
|
|
446
446
|
}
|
|
447
447
|
ContextDashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ContextDashboardService }, { token: i3.AlertService }, { token: i0.Renderer2 }, { token: CONTEXT_DASHBOARD_CONFIG }, { token: i4.WidgetService }, { token: i5.BsModalService }, { token: i6.InventoryService }, { token: i3.GainsightService }, { token: i3.ActionBarService }, { token: i7.TranslateService }, { token: i3.ModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
448
|
-
ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", disabled: "disabled", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title>\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'more'\" *ngIf=\"defaultWidgets.length > 0\">\n <button\n
|
|
448
|
+
ContextDashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ContextDashboardComponent, selector: "c8y-context-dashboard", inputs: { name: "name", childrenClasses: "childrenClasses", context: "context", setTitle: "setTitle", disabled: "disabled", defaultWidgets: "defaultWidgets", canCopy: "canCopy", canDelete: "canDelete", isLoading: "isLoading", breadcrumbSettings: "breadcrumbSettings" }, host: { properties: { "class": "this.class" }, styleAttribute: "\n display: block;\n ", classAttribute: "dashboard c8y-grid-dashboard" }, ngImport: i0, template: "<c8y-title>\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'more'\" *ngIf=\"defaultWidgets.length > 0\">\n <button\n type=\"button\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n class=\"btn btn-clean\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n >\n <i c8yIcon=\"reset\" class=\"m-r-4\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.WidgetsDashboardComponent, selector: "c8y-widgets-dashboard", inputs: ["widgets", "context", "contextDashboard", "settings", "breadcrumb"], outputs: ["onAddWidget", "onEditWidget", "onDeleteWidget", "onChangeDashboard", "onEditDashboard", "onCopyDashboard", "onDeleteDashboard", "onFreeze", "onChangeStart", "onChangeEnd"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
449
449
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ContextDashboardComponent, decorators: [{
|
|
450
450
|
type: Component,
|
|
451
451
|
args: [{ selector: 'c8y-context-dashboard', host: {
|
|
@@ -453,7 +453,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
453
453
|
display: block;
|
|
454
454
|
`,
|
|
455
455
|
class: 'dashboard c8y-grid-dashboard'
|
|
456
|
-
}, template: "<c8y-title>\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'more'\" *ngIf=\"defaultWidgets.length > 0\">\n <button\n
|
|
456
|
+
}, template: "<c8y-title>\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'more'\" *ngIf=\"defaultWidgets.length > 0\">\n <button\n type=\"button\"\n title=\"{{ 'Reset dashboard' | translate }}\"\n class=\"btn btn-clean\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"dashboard?.isFrozen || disabled\"\n >\n <i c8yIcon=\"reset\" class=\"m-r-4\"></i>\n {{ 'Reset dashboard' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [settings]=\"{\n isLoading: isLoading,\n isFrozen: dashboard?.isFrozen,\n isDisabled: disabled,\n canDelete: canDelete,\n translateWidgetTitle: dashboard?.translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n (onFreeze)=\"toggleFreeze($event)\"\n (onChangeDashboard)=\"updateDashboardChildren($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"editDashboard()\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n" }]
|
|
457
457
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ContextDashboardService }, { type: i3.AlertService }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
458
458
|
type: Inject,
|
|
459
459
|
args: [CONTEXT_DASHBOARD_CONFIG]
|
|
@@ -481,4 +481,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
481
481
|
type: HostBinding,
|
|
482
482
|
args: ['class']
|
|
483
483
|
}] } });
|
|
484
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixZQUFZLEVBR1osb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFJUCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBSUwsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUN0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFB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QUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUN6RSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztzSEFqZlUseUJBQXlCLGtLQXNDMUIsd0JBQXdCOzBHQXRDdkIseUJBQXlCLDZkQ25EdEMsODRDQTJDQTsyRkRRYSx5QkFBeUI7a0JBVnJDLFNBQVM7K0JBQ0UsdUJBQXVCLFFBRTNCO3dCQUNKLEtBQUssRUFBRTs7S0FFTjt3QkFDRCxLQUFLLEVBQUUsOEJBQThCO3FCQUN0Qzs7MEJBd0NFLE1BQU07MkJBQUMsd0JBQXdCOzRQQXBDbEMsSUFBSTtzQkFESCxLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7Z0JBR04sT0FBTztzQkFETixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLEtBQUs7c0JBREosV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJTZXJ2aWNlLFxuICBBbGVydFNlcnZpY2UsXG4gIEJyZWFkY3J1bWJJdGVtLFxuICBEYXNoYm9hcmRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ2hhbmdlLFxuICBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCxcbiAgRGFzaGJvYXJkU2V0dGluZ3MsXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgVmlld0NvbnRleHQsXG4gIFdpZGdldCxcbiAgV2lkZ2V0Q2hhbmdlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBmaW5kSW5kZXgsIGtleUJ5LCBvbWl0LCB2YWx1ZXMsIHNvbWUsIGtlYmFiQ2FzZSwgZXZlcnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dERhc2hib2FyZCxcbiAgQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gIENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRyxcbiAgV0lER0VUX0hFQURFUl9DTEFTU0VTXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQtZGV0YWlsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRDb25maWdDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50JztcbmltcG9ydCB7IFdpZGdldFNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IGRhc2hib2FyZCBpcyBhIGRhc2hib2FyZCB3aGljaCByZXNvbHZlcyBpdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoZGV2aWNlIG9yIGdyb3VwKVxuICogaXQgaXMgZGlzcGxheWVkIG9uLiBJdCB1c3VhbGx5IHVzZXMgdGhlIHJvdXRlLmRhdGEgZm9yIGl0LCBidXQgeW91IGNhbiBwYXNzXG4gKiBhIGRpZmZlcmVudCBtYW5hZ2VkT2JqZWN0IHRvIHRoZSBbbW9dIGlucHV0IHBhcmFtZXRlciB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRleHQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoaWxkcmVuQ2xhc3NlcyA9ICcnO1xuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHNldFRpdGxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRXaWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBASW5wdXQoKVxuICBjYW5Db3B5OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgY2FuRGVsZXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgYnJlYWRjcnVtYlNldHRpbmdzOiBCcmVhZGNydW1iSXRlbTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgY2xhc3MgPSAnJztcblxuICB3aWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgdGl0bGU6IHN0cmluZztcblxuICBwcml2YXRlIGRhdGFTdWI6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29udGV4dERhc2hib2FyZFNlcnZpY2U6IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEluamVjdChDT05URVhUX0RBU0hCT0FSRF9DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbDogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uQmFyU2VydmljZTogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGN1cnJlbnQgY29udGV4dCB0byB0aGUgd2lkZ2V0XG4gICAqIEBwYXJhbSB3aWRnZXQgVGhlIHdpZGdldCB0byBhcHBseSB0aGUgY29udGV4dCB0by5cbiAgICovXG4gIGFwcGx5RGV2aWNlVGFyZ2V0KHdpZGdldCkge1xuICAgIGlmICh3aWRnZXQuY29uZmlnLmRldmljZSkge1xuICAgICAgd2lkZ2V0LmNvbmZpZy5kZXZpY2UgPSB7IGlkOiB0aGlzLmNvbnRleHQuaWQsIG5hbWU6IHRoaXMuY29udGV4dC5uYW1lIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHJvdXRlIGxpc3RlbmVyLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVN1Yikge1xuICAgICAgdGhpcy5kYXRhU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIHRoZSBkYXNoYm9hcmQgd2lkZ2V0cyB0byB0aGUgZGVmYXVsdCB3aWRnZXRzLlxuICAgKi9cbiAgYXN5bmMgcmVzdG9yZSgpIHtcbiAgICBjb25zdCBtZXNnID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIHJlc2V0IHRoaXMgZGFzaGJvYXJkLiBBbGwgY2hhbmdlcyB0byB0aGUgZGFzaGJvYXJkIHdpbGwgZ2V0IGxvc3QgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKGdldHRleHQoJ1Jlc2V0IGRhc2hib2FyZCcpLCBtZXNnLCBTdGF0dXMuV0FSTklORywge1xuICAgICAgICBvazogZ2V0dGV4dCgnUmVzZXRgZGFzaGJvYXJkYCcpLFxuICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5tYXBXaWRnZXRzKHRoaXMuZGVmYXVsdFdpZGdldHMpO1xuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbGwgZGFzaGJvYXJkcyBjaGlsZHJlbidzLiBVc2VmdWwgZm9yIHBvc2l0aW9uIGNoYW5nZXMgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZCB0byBjaGFuZ2UuXG4gICAqL1xuICBhc3luYyB1cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBjaGlsZDtcbiAgICBjb25zdCBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QgPSB0aGlzLm1vO1xuICAgIGNvbnN0IG1hcHBlZENoaWxkcmVuOiB7IFtpZDogc3RyaW5nXTogV2lkZ2V0IH0gPSBrZXlCeShcbiAgICAgIGNoaWxkcmVuLm1hcChjID0+IHRoaXMuY29tcG9uZW50VG9XaWRnZXQoYykpLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IG1hcHBlZENoaWxkcmVuO1xuICAgIHJldHVybiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShkYXNoYm9hcmRNTyk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIHRoZSBkYXNoYm9hcmQgYW5kIGN1cnJlbnQgY29udGV4dCB0byBhIGNsaXBib2FyZC5cbiAgICovXG4gIGFzeW5jIGNvcHlEYXNoYm9hcmQoKSB7XG4gICAgY29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhPy5jb250ZXh0O1xuICAgIGlmICh0aGlzLmNhbkNvcHlEYXNoYm9hcmQodmlld0NvbnRleHQpKSB7XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNvcHlDbGlwYm9hcmQgPSB7XG4gICAgICAgIGRhc2hib2FyZDogY2xvbmVEZWVwKHRoaXMubW8uYzh5X0Rhc2hib2FyZCksXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBjb250ZXh0OiB2aWV3Q29udGV4dCxcbiAgICAgICAgICBjb250ZXh0RGF0YTogdGhpcy5jb250ZXh0XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmICh2aWV3Q29udGV4dCkge1xuICAgICAgICBjb25zdCBjdHggPSB2aWV3Q29udGV4dC5zcGxpdCgnLycpLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICdEYXNoYm9hcmQgY29waWVkLiBOYXZpZ2F0ZSB0byB0aGUgZGVzaXJlZCB7eyBjdHggfX0gYW5kIHNlbGVjdCBcIlBhc3RlIGRhc2hib2FyZFwiJyxcbiAgICAgICAgICB7IGN0eCB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWxlcnQuc3VjY2Vzcyhtc2cpO1xuICAgICAgfVxuICAgICAgdGhpcy5hY3Rpb25CYXJTZXJ2aWNlLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBjb21wbGV0ZSBkYXNoYm9hcmQgYW5kIG5hdmlnYXRlIGF3YXkuXG4gICAqL1xuICBhc3luYyBkZWxldGVEYXNoYm9hcmQoKSB7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5kZWxldGUodGhpcy5tbyk7XG4gICAgaWYgKHRoaXMucm91dGUucGFyZW50KSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm91dGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgY3VycmVudCBkYXNoYm9hcmRcbiAgICovXG4gIGFzeW5jIGVkaXREYXNoYm9hcmQoKSB7XG4gICAgY29uc3QgaXNSZXBvcnQgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzUmVwb3J0KHRoaXMubW8pO1xuICAgIGlmIChpc1JlcG9ydCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBpY29uLCBwcmlvcml0eSwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXNoYm9hcmQsIHsgbmFtZSwgaWNvbiwgcHJpb3JpdHksIGM4eV9Jc05hdmlnYXRvck5vZGUsIGRlc2NyaXB0aW9uIH0pO1xuICAgIH1cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBkYXNoYm9hcmQ6IHRoaXMuZGFzaGJvYXJkLFxuICAgICAgZGV2aWNlVHlwZTogdGhpcy5jb250ZXh0LnR5cGUsXG4gICAgICBpc0RldmljZVR5cGU6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pLFxuICAgICAgaXNOYW1lZERhc2hib2FyZDogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc05hbWVkKHRoaXMubW8pLFxuICAgICAgaXNSZXBvcnRcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLWxnJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgfSkuY29udGVudCBhcyBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhc2hib2FyZE1PID0gY2xvbmVEZWVwKHRoaXMubW8pO1xuICAgICAgY29uc3QgY2ZnID0gYXdhaXQgbW9kYWwucmVzdWx0O1xuICAgICAgaWYgKGlzUmVwb3J0KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgaWNvbiwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgcHJpb3JpdHksIGRlc2NyaXB0aW9uLCAuLi5kYXNoYm9hcmRDZmcgfSA9IGNmZztcbiAgICAgICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZCA9IGRhc2hib2FyZENmZztcbiAgICAgICAgdGhpcy51cGRhdGVSZXBvcnQoe1xuICAgICAgICAgIGlkOiB0aGlzLmNvbnRleHQuaWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGM4eV9Jc05hdmlnYXRvck5vZGUsXG4gICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkID0gY2ZnO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShkYXNoYm9hcmRNTyk7XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnJlZnJlc2hUYWJzKGRhc2hib2FyZE1PKTtcbiAgICAgIHRoaXMub25Mb2FkKCk7XG4gICAgICBtb2RhbC5jbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXNoYm9hcmQ/LmRldmljZVR5cGUgJiYgISF0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRWRpdHMgYSB3aWRnZXQgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgd2lkZ2V0IGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGVkaXRXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGNoYW5nZS5zb3VyY2U7XG4gICAgY29uc3QgY29tcG9uZW50ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLmdldFdpZGdldERlZmluaXRpb24oXG4gICAgICBjaGFuZ2Uud2lkZ2V0Lm5hbWUgfHwgY2hhbmdlLndpZGdldC5jb21wb25lbnRJZFxuICAgICk7XG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuYWRkV2lkZ2V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkV2lkZ2V0KHtcbiAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHsgLi4uY29tcG9uZW50LmRhdGEsIC4uLmNoYW5nZS53aWRnZXQsIF94OiB4LCBfeTogeSwgX3dpZHRoOiB3aWR0aCwgX2hlaWdodDogaGVpZ2h0IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgd2lkZ2V0IHRvIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBzZWxlY3RlZCBEZWZpbmUgYSBzZWxlY3RlZCBjb21wb25lbnQgdG8gc3dpdGNoIHRvIGVkaXQgbW9kZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIGFkZFdpZGdldChzZWxlY3RlZD86IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgbW86IHRoaXMubW8sXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQuYzh5X1JlcG9ydCA/IHt9IDogdGhpcy5jb250ZXh0LFxuICAgICAgc2VsZWN0ZWQ6IGNsb25lRGVlcChzZWxlY3RlZClcbiAgICB9O1xuXG4gICAgY29uc3QgbW9kYWwgPSB0aGlzLmJzTW9kYWwuc2hvdyhXaWRnZXRDb25maWdDb21wb25lbnQsIHtcbiAgICAgIGNsYXNzOiAnbW9kYWwtbGcnLFxuICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICB9KS5jb250ZW50IGFzIFdpZGdldENvbmZpZ0NvbXBvbmVudDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBuZXdXaWRnZXQgPSBhd2FpdCBtb2RhbC5yZXN1bHQ7XG4gICAgICBpZiAoIXRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbltuZXdXaWRnZXQuaWRdID0gbmV3V2lkZ2V0O1xuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBuZXdXaWRnZXQuY2xhc3NlcyA9IHRoaXMubWVyZ2VXaWRnZXRDbGFzc2VzKG5ld1dpZGdldCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVdpZGdldChuZXdXaWRnZXQpO1xuICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHdpZGdldCBvciBhZGRzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0IG9uXG4gICAqIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSB3aWRnZXQgVGhlIG5ldyB3aWRnZXRcbiAgICovXG4gIGFzeW5jIHVwZGF0ZVdpZGdldCh3aWRnZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0aGlzLndpZGdldHMsIHsgaWQ6IHdpZGdldC5pZCB9KTtcbiAgICBjb25zdCBpc05ldyA9IGluZGV4ID09PSAtMTtcbiAgICBjb25zdCBtYXBwZWRXaWRnZXQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICB0aGlzLndpZGdldHMucHVzaChtYXBwZWRXaWRnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKGluZGV4LCAxLCBtYXBwZWRXaWRnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgd2lkZ2V0IGFuZCByZWFycmFuZ2VzIHRoZSByZW1haW5pbmcgb25lc1xuICAgKiBpZiBuZWNlc3NhcnkuXG4gICAqIEBwYXJhbSBjaGFuZ2UgVGhlIGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIGNvbnN0IHdpZGdldFRpdGxlID0gY2hhbmdlLndpZGdldC50aXRsZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdSZW1vdmUgd2lkZ2V0JyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byByZW1vdmUgd2lkZ2V0IFwie3sgd2lkZ2V0VGl0bGUgfX1cIiBmcm9tIHlvdXIgZGFzaGJvYXJkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgd2lkZ2V0VGl0bGUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7XG4gICAgICAgICAgb2s6IGdldHRleHQoJ1JlbW92ZScpLFxuICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBvbiBjYW5jZWw6IGRvIG5vdGhpbmdcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB3aWRnZXQsIHNvdXJjZSB9ID0gY2hhbmdlO1xuICAgICAgZGVsZXRlIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlblt3aWRnZXQuaWRdO1xuICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMud2lkZ2V0cy5maW5kKCh7IGlkIH0pID0+IGlkID09PSB3aWRnZXQuaWQpO1xuICAgICAgdGhpcy53aWRnZXRzLnNwbGljZSh0aGlzLndpZGdldHMuaW5kZXhPZihyZW1vdmVkKSwgMSk7XG5cbiAgICAgIGNvbnN0IHsgZGFzaGJvYXJkIH0gPSBzb3VyY2U7XG4gICAgICBkYXNoYm9hcmQuY2hpbGRyZW4gPSBkYXNoYm9hcmQuY2hpbGRyZW4uZmlsdGVyKGMgPT4gYy5kYXRhLmlkICE9PSB3aWRnZXQuaWQpO1xuXG4gICAgICAvLyB1c2luZyBzZXRUaW1lb3V0IHRvIGdpdmUgdGhlIGNvbXBvbmVudCB0aGUgY2hhbmNlIHRvIHJlbW92ZSBpdC5cbiAgICAgIGNvbnN0IHNsZWVwID0gdGltZW91dCA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCkpO1xuICAgICAgYXdhaXQgc2xlZXAoMCk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHNvdXJjZSk7XG4gICAgICBjaGlsZC5jb2xsYXBzZVVwQWxsKCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURhc2hib2FyZENoaWxkcmVuKGNoaWxkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBkcmFnZ2VkLWVsZW1lbnRcbiAgICogKHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBib2R5KSBoYXMgdGhlIHJpZ2h0IHN0eWxpbmcuXG4gICAqL1xuICBhZGREYXNoYm9hcmRDbGFzc1RvQm9keSgpIHtcbiAgICB0aGlzLmNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaChjc3NDbGFzcyA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIGNzc0NsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCB0aGUgZHJhZ2dlZC1lbGVtZW50XG4gICAqICh3aGljaCBpcyBhdHRhY2hlZCB0byB0aGUgYm9keSkgaGFzIHRoZSByaWdodCBzdHlsaW5nLlxuICAgKi9cbiAgcmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpIHtcbiAgICB0aGlzLmNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaChjc3NDbGFzcyA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIGNzc0NsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBkYXNoYm9hcmQgc2V0dGluZ3MgdG8gZnJvemVuIG9yIHZpY2UgdmVyc2EuXG4gICAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgY3VycmVudCBzZXR0aW5ncyBvZiB0aGUgZGFzaGJvYXJkLlxuICAgKi9cbiAgYXN5bmMgdG9nZ2xlRnJlZXplKHNldHRpbmdzOiBEYXNoYm9hcmRTZXR0aW5ncykge1xuICAgIHRoaXMudG9nZ2xlSXNGcm96ZW5GbGFnKHNldHRpbmdzKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBpZiAodGhpcy5kYXNoYm9hcmQuaXNGcm96ZW4pIHtcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ1lvdXIgZGFzaGJvYXJkIGlzIGxvY2tlZCBub3cuJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ1lvdXIgZGFzaGJvYXJkIGlzIHVubG9ja2VkIG5vdy4nKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB0aGlzLnRvZ2dsZUlzRnJvemVuRmxhZyhzZXR0aW5ncyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZXBvcnQobW86IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkudXBkYXRlKG1vKTtcbiAgICB0aGlzLmNvbnRleHQgPSByZXMuZGF0YTtcbiAgICBpZiAodGhpcy5yb3V0ZS5wYXJlbnQpIHtcbiAgICAgIHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGEgPSB0aGlzLmNvbnRleHQ7XG4gICAgfVxuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlTmF2aWdhdG9ySXRlbShyZXMuZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUlzRnJvemVuRmxhZyhzZXR0aW5nczogRGFzaGJvYXJkU2V0dGluZ3MpIHtcbiAgICBzZXR0aW5ncy5pc0Zyb3plbiA9ICFzZXR0aW5ncy5pc0Zyb3plbjtcbiAgICB0aGlzLmRhc2hib2FyZC5pc0Zyb3plbiA9IHNldHRpbmdzLmlzRnJvemVuO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29udGV4dERhc2hib2FyZCgpIHtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGRhc2hib2FyZCB9KSA9PiB7XG4gICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhO1xuICAgICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dD8ubmFtZTtcbiAgICAgIHRoaXMubW8gPSBkYXNoYm9hcmQ7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMubW8uYzh5X0Rhc2hib2FyZDtcbiAgICAgIHRoaXMub25Mb2FkKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkTmFtZWREYXNoYm9hcmQoKSB7XG4gICAgdGhpcy5kYXRhU3ViID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldE5hbWVkRGFzaGJvYXJkT3JDcmVhdGUodGhpcy5uYW1lLCB0aGlzLmRlZmF1bHRXaWRnZXRzLCB0aGlzLmNvbnRleHQpXG4gICAgICAuc3Vic2NyaWJlKG1vID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuICAgICAgICB0aGlzLm1vID0gbW87XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5tby5jOHlfRGFzaGJvYXJkO1xuICAgICAgICB0aGlzLm9uTG9hZCh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkxvYWQodHJhY2tFeHBlcmllbmNlPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNhbkVkaXREYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNhbkVkaXREYXNoYm9hcmQodGhpcy5tbyk7XG4gICAgdGhpcy5kaXNhYmxlZCA9ICFjYW5FZGl0RGFzaGJvYXJkO1xuICAgIHRoaXMuY2FuQ29weSA9XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlRGFzaGJvYXJkKHRoaXMubW8pIHx8XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKSB8fFxuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0dyb3VwRGFzaGJvYXJkKHRoaXMubW8pO1xuICAgIGNvbnN0IGRhc2hib2FyZENoaWxkcmVuID0gY2xvbmVEZWVwKHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbik7XG4gICAgY29uc3QgaXNEZXZpY2VUeXBlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbyk7XG4gICAgY29uc3QgaXNSZXBvcnQgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzUmVwb3J0KHRoaXMubW8pO1xuICAgIGNvbnN0IGRhc2hib2FyZENsYXNzZXMgPSB7XG4gICAgICAnYzh5LWdyaWQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIGRhc2hib2FyZDogdHJ1ZSxcbiAgICAgIC4uLnRoaXMuZGFzaGJvYXJkLmNsYXNzZXNcbiAgICB9O1xuXG4gICAgdGhpcy53aWRnZXRzID0gYXdhaXQgUHJvbWlzZS5hbGw8V2lkZ2V0PihcbiAgICAgIHZhbHVlcyhkYXNoYm9hcmRDaGlsZHJlbikubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5jbGFzc2VzID0gdGhpcy5tZXJnZVdpZGdldENsYXNzZXMod2lkZ2V0KTtcbiAgICAgICAgaWYgKGlzRGV2aWNlVHlwZSkge1xuICAgICAgICAgIHRoaXMuYXBwbHlEZXZpY2VUYXJnZXQod2lkZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhY2tFeHBlcmllbmNlKSB7XG4gICAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnbG9hZFdpZGdldCcsIHtcbiAgICAgICAgICAgIHdpZGdldE5hbWU6IHdpZGdldC5jb21wb25lbnRJZCB8fCB3aWRnZXQubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5jbGFzcyA9IE9iamVjdC5rZXlzKGRhc2hib2FyZENsYXNzZXMpLmpvaW4oJyAnKTtcbiAgICBpZiAoaXNSZXBvcnQpIHtcbiAgICAgIHRoaXMuYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VXaWRnZXRDbGFzc2VzKHdpZGdldDogV2lkZ2V0KSB7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2xhc3MgPSBXSURHRVRfSEVBREVSX0NMQVNTRVMuZmluZChcbiAgICAgIGVsID0+IHdpZGdldC5jbGFzc2VzICYmIHdpZGdldC5jbGFzc2VzW2VsLmNsYXNzXVxuICAgICk7XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3NlcyA9IGhhc0hlYWRlckNsYXNzXG4gICAgICA/IHsgLi4ud2lkZ2V0LmNsYXNzZXMgfVxuICAgICAgOiB7IC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMsIC4uLndpZGdldC5jbGFzc2VzIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhcmQ6IHRydWUsXG4gICAgICAnY2FyZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgW2tlYmFiQ2FzZSh3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWUpXTogdHJ1ZSxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRUb1dpZGdldChjaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub21pdChjaGlsZC5kYXRhLCBbJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JywgJ3RyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0J10pLCAvLyByZW1vdmUgbGVnYWN5XG4gICAgICAuLi4oe1xuICAgICAgICBfeDogY2hpbGQueCxcbiAgICAgICAgX3k6IGNoaWxkLnksXG4gICAgICAgIF93aWR0aDogY2hpbGQud2lkdGgsXG4gICAgICAgIF9oZWlnaHQ6IGNoaWxkLmhlaWdodFxuICAgICAgfSBhcyBXaWRnZXQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5zZXRUaXRsZSA9IHRydWU7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dC5uYW1lO1xuICAgIHRoaXMuYnJlYWRjcnVtYlNldHRpbmdzID0ge1xuICAgICAgaWNvbjogJ3RoJyxcbiAgICAgIGxhYmVsOiAnUmVwb3J0cycsXG4gICAgICBwYXRoOiAncmVwb3J0cydcbiAgICB9O1xuICAgIHRoaXMuY2FuRGVsZXRlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNhbkNvcHlEYXNoYm9hcmQodmlld0NvbnRleHQ6IFZpZXdDb250ZXh0KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnZhbGlkRGFzaGJvYXJkQ2hpbGRyZW4oKSAmJiB2aWV3Q29udGV4dCkge1xuICAgICAgY29uc3QgY3R4ID0gdmlld0NvbnRleHQuc3BsaXQoJy8nKS5zaGlmdCgpO1xuICAgICAgY29uc3QgbXNnID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICdPbmx5IGRhc2hib2FyZHMgd2l0aCB3aWRnZXRzIHJlZmVyZW5jaW5nIHRoZSBjdXJyZW50IHt7IGN0eCB9fSBjYW4gYmUgY29waWVkLicsXG4gICAgICAgIHsgY3R4IH1cbiAgICAgICk7XG4gICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkRGFzaGJvYXJkQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gY2hpbGQuY29uZmlnIHx8IHt9O1xuICAgICAgY29uc3QgZGF0YVBvaW50cyA9IGNvbmZpZy5kYXRhcG9pbnRzIHx8IFtdO1xuXG4gICAgICByZXR1cm4gIShcbiAgICAgICAgKGNvbmZpZy5kZXZpY2UgJiYgY29uZmlnLmRldmljZS5pZCAhPT0gdGhpcy5jb250ZXh0LmlkKSB8fFxuICAgICAgICBzb21lKGRhdGFQb2ludHMsIGRhdGFQb2ludCA9PiBkYXRhUG9pbnQuX190YXJnZXQuaWQgIT09IHRoaXMuY29udGV4dC5pZClcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+XG4gIHt7IHRpdGxlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCInbW9yZSdcIiAqbmdJZj1cImRlZmF1bHRXaWRnZXRzLmxlbmd0aCA+IDBcIj5cbiAgPGJ1dHRvblxuICAgIChjbGljayk9XCJyZXN0b3JlKClcIlxuICAgIHB4LWV2ZW50PVwiUmVzZXQgZGFzaGJvYXJkXCJcbiAgICBbZGlzYWJsZWRdPVwiZGFzaGJvYXJkPy5pc0Zyb3plbiB8fCBkaXNhYmxlZFwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInJvdGF0ZS1sZWZ0XCI+PC9pPlxuICAgIDxzcGFuIGNsYXNzPVwibS1sLTRcIiB0cmFuc2xhdGU+UmVzZXQgZGFzaGJvYXJkPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS13aWRnZXRzLWRhc2hib2FyZFxuICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgW2NvbnRleHREYXNoYm9hcmRdPVwiZGFzaGJvYXJkXCJcbiAgW3dpZGdldHNdPVwid2lkZ2V0c1wiXG4gIFtzZXR0aW5nc109XCJ7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaXNGcm96ZW46IGRhc2hib2FyZD8uaXNGcm96ZW4sXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgY2FuRGVsZXRlOiBjYW5EZWxldGUsXG4gICAgdHJhbnNsYXRlV2lkZ2V0VGl0bGU6IGRhc2hib2FyZD8udHJhbnNsYXRlV2lkZ2V0VGl0bGUsXG4gICAgYWxsb3dGdWxsc2NyZWVuOiBtb2R1bGVDb25maWcuYWxsb3dGdWxsc2NyZWVuLFxuICAgIHRpdGxlOiBzZXRUaXRsZSA/IGRhc2hib2FyZC5uYW1lIHx8IHRpdGxlIDogdW5kZWZpbmVkLFxuICAgIHdpZGdldE1hcmdpbjogZGFzaGJvYXJkPy53aWRnZXRNYXJnaW4sXG4gICAgY2FuQ29weTogY2FuQ29weVxuICB9XCJcbiAgW2JyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYlNldHRpbmdzXCJcbiAgKG9uRnJlZXplKT1cInRvZ2dsZUZyZWV6ZSgkZXZlbnQpXCJcbiAgKG9uQ2hhbmdlRGFzaGJvYXJkKT1cInVwZGF0ZURhc2hib2FyZENoaWxkcmVuKCRldmVudClcIlxuICAob25BZGRXaWRnZXQpPVwiYWRkV2lkZ2V0KClcIlxuICAob25FZGl0V2lkZ2V0KT1cImVkaXRXaWRnZXQoJGV2ZW50KVwiXG4gIChvbkRlbGV0ZVdpZGdldCk9XCJkZWxldGVXaWRnZXQoJGV2ZW50KVwiXG4gIChvbkNoYW5nZVN0YXJ0KT1cImFkZERhc2hib2FyZENsYXNzVG9Cb2R5KClcIlxuICAob25DaGFuZ2VFbmQpPVwicmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpXCJcbiAgKG9uRWRpdERhc2hib2FyZCk9XCJlZGl0RGFzaGJvYXJkKClcIlxuICAob25Db3B5RGFzaGJvYXJkKT1cImNvcHlEYXNoYm9hcmQoKVwiXG4gIChvbkRlbGV0ZURhc2hib2FyZCk9XCJkZWxldGVEYXNoYm9hcmQoKVwiXG4+PC9jOHktd2lkZ2V0cy1kYXNoYm9hcmQ+XG4iXX0=
|
|
484
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvY29udGV4dC1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixZQUFZLEVBR1osb0JBQW9CLEVBSXBCLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFJUCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBSUwsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUN0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFB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QUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUN6RSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztzSEFqZlUseUJBQXlCLGtLQXNDMUIsd0JBQXdCOzBHQXRDdkIseUJBQXlCLDZkQ25EdEMsODhDQTZDQTsyRkRNYSx5QkFBeUI7a0JBVnJDLFNBQVM7K0JBQ0UsdUJBQXVCLFFBRTNCO3dCQUNKLEtBQUssRUFBRTs7S0FFTjt3QkFDRCxLQUFLLEVBQUUsOEJBQThCO3FCQUN0Qzs7MEJBd0NFLE1BQU07MkJBQUMsd0JBQXdCOzRQQXBDbEMsSUFBSTtzQkFESCxLQUFLO2dCQUdOLGVBQWU7c0JBRGQsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7Z0JBR04sT0FBTztzQkFETixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLEtBQUs7c0JBREosV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJTZXJ2aWNlLFxuICBBbGVydFNlcnZpY2UsXG4gIEJyZWFkY3J1bWJJdGVtLFxuICBEYXNoYm9hcmRDaGFuZ2UsXG4gIERhc2hib2FyZENoaWxkQ2hhbmdlLFxuICBEYXNoYm9hcmRDaGlsZENvbXBvbmVudCxcbiAgRGFzaGJvYXJkU2V0dGluZ3MsXG4gIER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgVmlld0NvbnRleHQsXG4gIFdpZGdldCxcbiAgV2lkZ2V0Q2hhbmdlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBmaW5kSW5kZXgsIGtleUJ5LCBvbWl0LCB2YWx1ZXMsIHNvbWUsIGtlYmFiQ2FzZSwgZXZlcnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dERhc2hib2FyZCxcbiAgQ29udGV4dERhc2hib2FyZENvbmZpZyxcbiAgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gIENPTlRFWFRfREFTSEJPQVJEX0NPTkZJRyxcbiAgV0lER0VUX0hFQURFUl9DTEFTU0VTXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQtZGV0YWlsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXaWRnZXRDb25maWdDb21wb25lbnQgfSBmcm9tICcuL3dpZGdldC1jb25maWcuY29tcG9uZW50JztcbmltcG9ydCB7IFdpZGdldFNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IGRhc2hib2FyZCBpcyBhIGRhc2hib2FyZCB3aGljaCByZXNvbHZlcyBpdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoZGV2aWNlIG9yIGdyb3VwKVxuICogaXQgaXMgZGlzcGxheWVkIG9uLiBJdCB1c3VhbGx5IHVzZXMgdGhlIHJvdXRlLmRhdGEgZm9yIGl0LCBidXQgeW91IGNhbiBwYXNzXG4gKiBhIGRpZmZlcmVudCBtYW5hZ2VkT2JqZWN0IHRvIHRoZSBbbW9dIGlucHV0IHBhcmFtZXRlciB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbnRleHQtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIHN0eWxlOiBgXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICBgLFxuICAgIGNsYXNzOiAnZGFzaGJvYXJkIGM4eS1ncmlkLWRhc2hib2FyZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGNoaWxkcmVuQ2xhc3NlcyA9ICcnO1xuICBASW5wdXQoKVxuICBjb250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHNldFRpdGxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRXaWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBASW5wdXQoKVxuICBjYW5Db3B5OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgY2FuRGVsZXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgYnJlYWRjcnVtYlNldHRpbmdzOiBCcmVhZGNydW1iSXRlbTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgY2xhc3MgPSAnJztcblxuICB3aWRnZXRzOiBXaWRnZXRbXSA9IFtdO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZDtcbiAgdGl0bGU6IHN0cmluZztcblxuICBwcml2YXRlIGRhdGFTdWI6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29udGV4dERhc2hib2FyZFNlcnZpY2U6IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEluamVjdChDT05URVhUX0RBU0hCT0FSRF9DT05GSUcpIHB1YmxpYyBtb2R1bGVDb25maWc6IENvbnRleHREYXNoYm9hcmRDb25maWcsXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbDogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uQmFyU2VydmljZTogQWN0aW9uQmFyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgdGhpcy5sb2FkQ29udGV4dERhc2hib2FyZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWROYW1lZERhc2hib2FyZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGN1cnJlbnQgY29udGV4dCB0byB0aGUgd2lkZ2V0XG4gICAqIEBwYXJhbSB3aWRnZXQgVGhlIHdpZGdldCB0byBhcHBseSB0aGUgY29udGV4dCB0by5cbiAgICovXG4gIGFwcGx5RGV2aWNlVGFyZ2V0KHdpZGdldCkge1xuICAgIGlmICh3aWRnZXQuY29uZmlnLmRldmljZSkge1xuICAgICAgd2lkZ2V0LmNvbmZpZy5kZXZpY2UgPSB7IGlkOiB0aGlzLmNvbnRleHQuaWQsIG5hbWU6IHRoaXMuY29udGV4dC5uYW1lIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHJvdXRlIGxpc3RlbmVyLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVN1Yikge1xuICAgICAgdGhpcy5kYXRhU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIHRoZSBkYXNoYm9hcmQgd2lkZ2V0cyB0byB0aGUgZGVmYXVsdCB3aWRnZXRzLlxuICAgKi9cbiAgYXN5bmMgcmVzdG9yZSgpIHtcbiAgICBjb25zdCBtZXNnID0gZ2V0dGV4dChcbiAgICAgICdZb3UgYXJlIGFib3V0IHRvIHJlc2V0IHRoaXMgZGFzaGJvYXJkLiBBbGwgY2hhbmdlcyB0byB0aGUgZGFzaGJvYXJkIHdpbGwgZ2V0IGxvc3QgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKGdldHRleHQoJ1Jlc2V0IGRhc2hib2FyZCcpLCBtZXNnLCBTdGF0dXMuV0FSTklORywge1xuICAgICAgICBvazogZ2V0dGV4dCgnUmVzZXRgZGFzaGJvYXJkYCcpLFxuICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5tby5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5tYXBXaWRnZXRzKHRoaXMuZGVmYXVsdFdpZGdldHMpO1xuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBhd2FpdCB0aGlzLm9uTG9hZCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbGwgZGFzaGJvYXJkcyBjaGlsZHJlbidzLiBVc2VmdWwgZm9yIHBvc2l0aW9uIGNoYW5nZXMgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoaWxkIFRoZSBjaGlsZCB0byBjaGFuZ2UuXG4gICAqL1xuICBhc3luYyB1cGRhdGVEYXNoYm9hcmRDaGlsZHJlbihjaGlsZDogRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfCBEYXNoYm9hcmRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBjaGlsZDtcbiAgICBjb25zdCBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QgPSB0aGlzLm1vO1xuICAgIGNvbnN0IG1hcHBlZENoaWxkcmVuOiB7IFtpZDogc3RyaW5nXTogV2lkZ2V0IH0gPSBrZXlCeShcbiAgICAgIGNoaWxkcmVuLm1hcChjID0+IHRoaXMuY29tcG9uZW50VG9XaWRnZXQoYykpLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IG1hcHBlZENoaWxkcmVuO1xuICAgIHJldHVybiB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShkYXNoYm9hcmRNTyk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIHRoZSBkYXNoYm9hcmQgYW5kIGN1cnJlbnQgY29udGV4dCB0byBhIGNsaXBib2FyZC5cbiAgICovXG4gIGFzeW5jIGNvcHlEYXNoYm9hcmQoKSB7XG4gICAgY29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhPy5jb250ZXh0O1xuICAgIGlmICh0aGlzLmNhbkNvcHlEYXNoYm9hcmQodmlld0NvbnRleHQpKSB7XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNvcHlDbGlwYm9hcmQgPSB7XG4gICAgICAgIGRhc2hib2FyZDogY2xvbmVEZWVwKHRoaXMubW8uYzh5X0Rhc2hib2FyZCksXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBjb250ZXh0OiB2aWV3Q29udGV4dCxcbiAgICAgICAgICBjb250ZXh0RGF0YTogdGhpcy5jb250ZXh0XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmICh2aWV3Q29udGV4dCkge1xuICAgICAgICBjb25zdCBjdHggPSB2aWV3Q29udGV4dC5zcGxpdCgnLycpLnNoaWZ0KCk7XG4gICAgICAgIGNvbnN0IG1zZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICdEYXNoYm9hcmQgY29waWVkLiBOYXZpZ2F0ZSB0byB0aGUgZGVzaXJlZCB7eyBjdHggfX0gYW5kIHNlbGVjdCBcIlBhc3RlIGRhc2hib2FyZFwiJyxcbiAgICAgICAgICB7IGN0eCB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWxlcnQuc3VjY2Vzcyhtc2cpO1xuICAgICAgfVxuICAgICAgdGhpcy5hY3Rpb25CYXJTZXJ2aWNlLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBjb21wbGV0ZSBkYXNoYm9hcmQgYW5kIG5hdmlnYXRlIGF3YXkuXG4gICAqL1xuICBhc3luYyBkZWxldGVEYXNoYm9hcmQoKSB7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5kZWxldGUodGhpcy5tbyk7XG4gICAgaWYgKHRoaXMucm91dGUucGFyZW50KSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocm91dGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgY3VycmVudCBkYXNoYm9hcmRcbiAgICovXG4gIGFzeW5jIGVkaXREYXNoYm9hcmQoKSB7XG4gICAgY29uc3QgaXNSZXBvcnQgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzUmVwb3J0KHRoaXMubW8pO1xuICAgIGlmIChpc1JlcG9ydCkge1xuICAgICAgY29uc3QgeyBuYW1lLCBpY29uLCBwcmlvcml0eSwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXNoYm9hcmQsIHsgbmFtZSwgaWNvbiwgcHJpb3JpdHksIGM4eV9Jc05hdmlnYXRvck5vZGUsIGRlc2NyaXB0aW9uIH0pO1xuICAgIH1cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBkYXNoYm9hcmQ6IHRoaXMuZGFzaGJvYXJkLFxuICAgICAgZGV2aWNlVHlwZTogdGhpcy5jb250ZXh0LnR5cGUsXG4gICAgICBpc0RldmljZVR5cGU6IHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuaXNEZXZpY2VUeXBlKHRoaXMubW8pLFxuICAgICAgaXNOYW1lZERhc2hib2FyZDogdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc05hbWVkKHRoaXMubW8pLFxuICAgICAgaXNSZXBvcnRcbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5ic01vZGFsLnNob3coRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLWxnJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgfSkuY29udGVudCBhcyBEYXNoYm9hcmREZXRhaWxDb21wb25lbnQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhc2hib2FyZE1PID0gY2xvbmVEZWVwKHRoaXMubW8pO1xuICAgICAgY29uc3QgY2ZnID0gYXdhaXQgbW9kYWwucmVzdWx0O1xuICAgICAgaWYgKGlzUmVwb3J0KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgaWNvbiwgYzh5X0lzTmF2aWdhdG9yTm9kZSwgcHJpb3JpdHksIGRlc2NyaXB0aW9uLCAuLi5kYXNoYm9hcmRDZmcgfSA9IGNmZztcbiAgICAgICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZCA9IGRhc2hib2FyZENmZztcbiAgICAgICAgdGhpcy51cGRhdGVSZXBvcnQoe1xuICAgICAgICAgIGlkOiB0aGlzLmNvbnRleHQuaWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGM4eV9Jc05hdmlnYXRvck5vZGUsXG4gICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkID0gY2ZnO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZShkYXNoYm9hcmRNTyk7XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLnJlZnJlc2hUYWJzKGRhc2hib2FyZE1PKTtcbiAgICAgIHRoaXMub25Mb2FkKCk7XG4gICAgICBtb2RhbC5jbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXNoYm9hcmQ/LmRldmljZVR5cGUgJiYgISF0aGlzLmRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRWRpdHMgYSB3aWRnZXQgb24gdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgd2lkZ2V0IGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGVkaXRXaWRnZXQoY2hhbmdlOiBXaWRnZXRDaGFuZ2UpIHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGNoYW5nZS5zb3VyY2U7XG4gICAgY29uc3QgY29tcG9uZW50ID0gYXdhaXQgdGhpcy53aWRnZXRTZXJ2aWNlLmdldFdpZGdldERlZmluaXRpb24oXG4gICAgICBjaGFuZ2Uud2lkZ2V0Lm5hbWUgfHwgY2hhbmdlLndpZGdldC5jb21wb25lbnRJZFxuICAgICk7XG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuYWRkV2lkZ2V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkV2lkZ2V0KHtcbiAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHsgLi4uY29tcG9uZW50LmRhdGEsIC4uLmNoYW5nZS53aWRnZXQsIF94OiB4LCBfeTogeSwgX3dpZHRoOiB3aWR0aCwgX2hlaWdodDogaGVpZ2h0IH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgd2lkZ2V0IHRvIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBzZWxlY3RlZCBEZWZpbmUgYSBzZWxlY3RlZCBjb21wb25lbnQgdG8gc3dpdGNoIHRvIGVkaXQgbW9kZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIGFkZFdpZGdldChzZWxlY3RlZD86IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uKSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgbW86IHRoaXMubW8sXG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQuYzh5X1JlcG9ydCA/IHt9IDogdGhpcy5jb250ZXh0LFxuICAgICAgc2VsZWN0ZWQ6IGNsb25lRGVlcChzZWxlY3RlZClcbiAgICB9O1xuXG4gICAgY29uc3QgbW9kYWwgPSB0aGlzLmJzTW9kYWwuc2hvdyhXaWRnZXRDb25maWdDb21wb25lbnQsIHtcbiAgICAgIGNsYXNzOiAnbW9kYWwtbGcnLFxuICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICB9KS5jb250ZW50IGFzIFdpZGdldENvbmZpZ0NvbXBvbmVudDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBuZXdXaWRnZXQgPSBhd2FpdCBtb2RhbC5yZXN1bHQ7XG4gICAgICBpZiAoIXRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbltuZXdXaWRnZXQuaWRdID0gbmV3V2lkZ2V0O1xuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBuZXdXaWRnZXQuY2xhc3NlcyA9IHRoaXMubWVyZ2VXaWRnZXRDbGFzc2VzKG5ld1dpZGdldCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVdpZGdldChuZXdXaWRnZXQpO1xuICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhIHdpZGdldCBvciBhZGRzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0IG9uXG4gICAqIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSB3aWRnZXQgVGhlIG5ldyB3aWRnZXRcbiAgICovXG4gIGFzeW5jIHVwZGF0ZVdpZGdldCh3aWRnZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0aGlzLndpZGdldHMsIHsgaWQ6IHdpZGdldC5pZCB9KTtcbiAgICBjb25zdCBpc05ldyA9IGluZGV4ID09PSAtMTtcbiAgICBjb25zdCBtYXBwZWRXaWRnZXQgPSBhd2FpdCB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICB0aGlzLndpZGdldHMucHVzaChtYXBwZWRXaWRnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldHMuc3BsaWNlKGluZGV4LCAxLCBtYXBwZWRXaWRnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgd2lkZ2V0IGFuZCByZWFycmFuZ2VzIHRoZSByZW1haW5pbmcgb25lc1xuICAgKiBpZiBuZWNlc3NhcnkuXG4gICAqIEBwYXJhbSBjaGFuZ2UgVGhlIGNoYW5nZSBldmVudC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVdpZGdldChjaGFuZ2U6IFdpZGdldENoYW5nZSkge1xuICAgIGNvbnN0IHdpZGdldFRpdGxlID0gY2hhbmdlLndpZGdldC50aXRsZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdSZW1vdmUgd2lkZ2V0JyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byByZW1vdmUgd2lkZ2V0IFwie3sgd2lkZ2V0VGl0bGUgfX1cIiBmcm9tIHlvdXIgZGFzaGJvYXJkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgd2lkZ2V0VGl0bGUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7XG4gICAgICAgICAgb2s6IGdldHRleHQoJ1JlbW92ZScpLFxuICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBvbiBjYW5jZWw6IGRvIG5vdGhpbmdcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB3aWRnZXQsIHNvdXJjZSB9ID0gY2hhbmdlO1xuICAgICAgZGVsZXRlIHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlblt3aWRnZXQuaWRdO1xuICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMud2lkZ2V0cy5maW5kKCh7IGlkIH0pID0+IGlkID09PSB3aWRnZXQuaWQpO1xuICAgICAgdGhpcy53aWRnZXRzLnNwbGljZSh0aGlzLndpZGdldHMuaW5kZXhPZihyZW1vdmVkKSwgMSk7XG5cbiAgICAgIGNvbnN0IHsgZGFzaGJvYXJkIH0gPSBzb3VyY2U7XG4gICAgICBkYXNoYm9hcmQuY2hpbGRyZW4gPSBkYXNoYm9hcmQuY2hpbGRyZW4uZmlsdGVyKGMgPT4gYy5kYXRhLmlkICE9PSB3aWRnZXQuaWQpO1xuXG4gICAgICAvLyB1c2luZyBzZXRUaW1lb3V0IHRvIGdpdmUgdGhlIGNvbXBvbmVudCB0aGUgY2hhbmNlIHRvIHJlbW92ZSBpdC5cbiAgICAgIGNvbnN0IHNsZWVwID0gdGltZW91dCA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCkpO1xuICAgICAgYXdhaXQgc2xlZXAoMCk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHNvdXJjZSk7XG4gICAgICBjaGlsZC5jb2xsYXBzZVVwQWxsKCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURhc2hib2FyZENoaWxkcmVuKGNoaWxkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IHRoZSBkcmFnZ2VkLWVsZW1lbnRcbiAgICogKHdoaWNoIGlzIGF0dGFjaGVkIHRvIHRoZSBib2R5KSBoYXMgdGhlIHJpZ2h0IHN0eWxpbmcuXG4gICAqL1xuICBhZGREYXNoYm9hcmRDbGFzc1RvQm9keSgpIHtcbiAgICB0aGlzLmNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaChjc3NDbGFzcyA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIGNzc0NsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCB0aGUgZHJhZ2dlZC1lbGVtZW50XG4gICAqICh3aGljaCBpcyBhdHRhY2hlZCB0byB0aGUgYm9keSkgaGFzIHRoZSByaWdodCBzdHlsaW5nLlxuICAgKi9cbiAgcmVtb3ZlRGFzaGJvYXJkQ2xhc3NGcm9tQm9keSgpIHtcbiAgICB0aGlzLmNsYXNzLnNwbGl0KCcgJykuZm9yRWFjaChjc3NDbGFzcyA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIGNzc0NsYXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBkYXNoYm9hcmQgc2V0dGluZ3MgdG8gZnJvemVuIG9yIHZpY2UgdmVyc2EuXG4gICAqIEBwYXJhbSBzZXR0aW5ncyBUaGUgY3VycmVudCBzZXR0aW5ncyBvZiB0aGUgZGFzaGJvYXJkLlxuICAgKi9cbiAgYXN5bmMgdG9nZ2xlRnJlZXplKHNldHRpbmdzOiBEYXNoYm9hcmRTZXR0aW5ncykge1xuICAgIHRoaXMudG9nZ2xlSXNGcm96ZW5GbGFnKHNldHRpbmdzKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS51cGRhdGUodGhpcy5tbyk7XG4gICAgICBpZiAodGhpcy5kYXNoYm9hcmQuaXNGcm96ZW4pIHtcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ1lvdXIgZGFzaGJvYXJkIGlzIGxvY2tlZCBub3cuJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ1lvdXIgZGFzaGJvYXJkIGlzIHVubG9ja2VkIG5vdy4nKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICB0aGlzLnRvZ2dsZUlzRnJvemVuRmxhZyhzZXR0aW5ncyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZXBvcnQobW86IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkudXBkYXRlKG1vKTtcbiAgICB0aGlzLmNvbnRleHQgPSByZXMuZGF0YTtcbiAgICBpZiAodGhpcy5yb3V0ZS5wYXJlbnQpIHtcbiAgICAgIHRoaXMucm91dGUucGFyZW50LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGEgPSB0aGlzLmNvbnRleHQ7XG4gICAgfVxuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UudXBkYXRlTmF2aWdhdG9ySXRlbShyZXMuZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUlzRnJvemVuRmxhZyhzZXR0aW5nczogRGFzaGJvYXJkU2V0dGluZ3MpIHtcbiAgICBzZXR0aW5ncy5pc0Zyb3plbiA9ICFzZXR0aW5ncy5pc0Zyb3plbjtcbiAgICB0aGlzLmRhc2hib2FyZC5pc0Zyb3plbiA9IHNldHRpbmdzLmlzRnJvemVuO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29udGV4dERhc2hib2FyZCgpIHtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGRhc2hib2FyZCB9KSA9PiB7XG4gICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLnJvdXRlLnBhcmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhO1xuICAgICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dD8ubmFtZTtcbiAgICAgIHRoaXMubW8gPSBkYXNoYm9hcmQ7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMubW8uYzh5X0Rhc2hib2FyZDtcbiAgICAgIHRoaXMub25Mb2FkKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkTmFtZWREYXNoYm9hcmQoKSB7XG4gICAgdGhpcy5kYXRhU3ViID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldE5hbWVkRGFzaGJvYXJkT3JDcmVhdGUodGhpcy5uYW1lLCB0aGlzLmRlZmF1bHRXaWRnZXRzLCB0aGlzLmNvbnRleHQpXG4gICAgICAuc3Vic2NyaWJlKG1vID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuICAgICAgICB0aGlzLm1vID0gbW87XG4gICAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5tby5jOHlfRGFzaGJvYXJkO1xuICAgICAgICB0aGlzLm9uTG9hZCh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkxvYWQodHJhY2tFeHBlcmllbmNlPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNhbkVkaXREYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNhbkVkaXREYXNoYm9hcmQodGhpcy5tbyk7XG4gICAgdGhpcy5kaXNhYmxlZCA9ICFjYW5FZGl0RGFzaGJvYXJkO1xuICAgIHRoaXMuY2FuQ29weSA9XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlRGFzaGJvYXJkKHRoaXMubW8pIHx8XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzRGV2aWNlVHlwZSh0aGlzLm1vKSB8fFxuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0dyb3VwRGFzaGJvYXJkKHRoaXMubW8pO1xuICAgIGNvbnN0IGRhc2hib2FyZENoaWxkcmVuID0gY2xvbmVEZWVwKHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbik7XG4gICAgY29uc3QgaXNEZXZpY2VUeXBlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbyk7XG4gICAgY29uc3QgaXNSZXBvcnQgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmlzUmVwb3J0KHRoaXMubW8pO1xuICAgIGNvbnN0IGRhc2hib2FyZENsYXNzZXMgPSB7XG4gICAgICAnYzh5LWdyaWQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIGRhc2hib2FyZDogdHJ1ZSxcbiAgICAgIC4uLnRoaXMuZGFzaGJvYXJkLmNsYXNzZXNcbiAgICB9O1xuXG4gICAgdGhpcy53aWRnZXRzID0gYXdhaXQgUHJvbWlzZS5hbGw8V2lkZ2V0PihcbiAgICAgIHZhbHVlcyhkYXNoYm9hcmRDaGlsZHJlbikubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5jbGFzc2VzID0gdGhpcy5tZXJnZVdpZGdldENsYXNzZXMod2lkZ2V0KTtcbiAgICAgICAgaWYgKGlzRGV2aWNlVHlwZSkge1xuICAgICAgICAgIHRoaXMuYXBwbHlEZXZpY2VUYXJnZXQod2lkZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhY2tFeHBlcmllbmNlKSB7XG4gICAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCgnbG9hZFdpZGdldCcsIHtcbiAgICAgICAgICAgIHdpZGdldE5hbWU6IHdpZGdldC5jb21wb25lbnRJZCB8fCB3aWRnZXQubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFNlcnZpY2UubWFwTGVnYWN5KHdpZGdldCk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5jbGFzcyA9IE9iamVjdC5rZXlzKGRhc2hib2FyZENsYXNzZXMpLmpvaW4oJyAnKTtcbiAgICBpZiAoaXNSZXBvcnQpIHtcbiAgICAgIHRoaXMuYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VXaWRnZXRDbGFzc2VzKHdpZGdldDogV2lkZ2V0KSB7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2xhc3MgPSBXSURHRVRfSEVBREVSX0NMQVNTRVMuZmluZChcbiAgICAgIGVsID0+IHdpZGdldC5jbGFzc2VzICYmIHdpZGdldC5jbGFzc2VzW2VsLmNsYXNzXVxuICAgICk7XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3NlcyA9IGhhc0hlYWRlckNsYXNzXG4gICAgICA/IHsgLi4ud2lkZ2V0LmNsYXNzZXMgfVxuICAgICAgOiB7IC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMsIC4uLndpZGdldC5jbGFzc2VzIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhcmQ6IHRydWUsXG4gICAgICAnY2FyZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgW2tlYmFiQ2FzZSh3aWRnZXQuY29tcG9uZW50SWQgfHwgd2lkZ2V0Lm5hbWUpXTogdHJ1ZSxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRUb1dpZGdldChjaGlsZDogRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub21pdChjaGlsZC5kYXRhLCBbJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JywgJ3RyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0J10pLCAvLyByZW1vdmUgbGVnYWN5XG4gICAgICAuLi4oe1xuICAgICAgICBfeDogY2hpbGQueCxcbiAgICAgICAgX3k6IGNoaWxkLnksXG4gICAgICAgIF93aWR0aDogY2hpbGQud2lkdGgsXG4gICAgICAgIF9oZWlnaHQ6IGNoaWxkLmhlaWdodFxuICAgICAgfSBhcyBXaWRnZXQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVwb3J0RGFzaGJvYXJkU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5zZXRUaXRsZSA9IHRydWU7XG4gICAgdGhpcy50aXRsZSA9IHRoaXMuY29udGV4dC5uYW1lO1xuICAgIHRoaXMuYnJlYWRjcnVtYlNldHRpbmdzID0ge1xuICAgICAgaWNvbjogJ3RoJyxcbiAgICAgIGxhYmVsOiAnUmVwb3J0cycsXG4gICAgICBwYXRoOiAncmVwb3J0cydcbiAgICB9O1xuICAgIHRoaXMuY2FuRGVsZXRlID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNhbkNvcHlEYXNoYm9hcmQodmlld0NvbnRleHQ6IFZpZXdDb250ZXh0KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnZhbGlkRGFzaGJvYXJkQ2hpbGRyZW4oKSAmJiB2aWV3Q29udGV4dCkge1xuICAgICAgY29uc3QgY3R4ID0gdmlld0NvbnRleHQuc3BsaXQoJy8nKS5zaGlmdCgpO1xuICAgICAgY29uc3QgbXNnID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICdPbmx5IGRhc2hib2FyZHMgd2l0aCB3aWRnZXRzIHJlZmVyZW5jaW5nIHRoZSBjdXJyZW50IHt7IGN0eCB9fSBjYW4gYmUgY29waWVkLicsXG4gICAgICAgIHsgY3R4IH1cbiAgICAgICk7XG4gICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkRGFzaGJvYXJkQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMubW8uYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gY2hpbGQuY29uZmlnIHx8IHt9O1xuICAgICAgY29uc3QgZGF0YVBvaW50cyA9IGNvbmZpZy5kYXRhcG9pbnRzIHx8IFtdO1xuXG4gICAgICByZXR1cm4gIShcbiAgICAgICAgKGNvbmZpZy5kZXZpY2UgJiYgY29uZmlnLmRldmljZS5pZCAhPT0gdGhpcy5jb250ZXh0LmlkKSB8fFxuICAgICAgICBzb21lKGRhdGFQb2ludHMsIGRhdGFQb2ludCA9PiBkYXRhUG9pbnQuX190YXJnZXQuaWQgIT09IHRoaXMuY29udGV4dC5pZClcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+XG4gIHt7IHRpdGxlIH19XG48L2M4eS10aXRsZT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCInbW9yZSdcIiAqbmdJZj1cImRlZmF1bHRXaWRnZXRzLmxlbmd0aCA+IDBcIj5cbiAgPGJ1dHRvblxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwie3sgJ1Jlc2V0IGRhc2hib2FyZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1jbGVhblwiXG4gICAgcHgtZXZlbnQ9XCJSZXNldCBkYXNoYm9hcmRcIlxuICAgIChjbGljayk9XCJyZXN0b3JlKClcIlxuICAgIFtkaXNhYmxlZF09XCJkYXNoYm9hcmQ/LmlzRnJvemVuIHx8IGRpc2FibGVkXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJyZXNldFwiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAge3sgJ1Jlc2V0IGRhc2hib2FyZCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktd2lkZ2V0cy1kYXNoYm9hcmRcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtjb250ZXh0RGFzaGJvYXJkXT1cImRhc2hib2FyZFwiXG4gIFt3aWRnZXRzXT1cIndpZGdldHNcIlxuICBbc2V0dGluZ3NdPVwie1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGlzRnJvemVuOiBkYXNoYm9hcmQ/LmlzRnJvemVuLFxuICAgIGlzRGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGNhbkRlbGV0ZTogY2FuRGVsZXRlLFxuICAgIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiBkYXNoYm9hcmQ/LnRyYW5zbGF0ZVdpZGdldFRpdGxlLFxuICAgIGFsbG93RnVsbHNjcmVlbjogbW9kdWxlQ29uZmlnLmFsbG93RnVsbHNjcmVlbixcbiAgICB0aXRsZTogc2V0VGl0bGUgPyBkYXNoYm9hcmQubmFtZSB8fCB0aXRsZSA6IHVuZGVmaW5lZCxcbiAgICB3aWRnZXRNYXJnaW46IGRhc2hib2FyZD8ud2lkZ2V0TWFyZ2luLFxuICAgIGNhbkNvcHk6IGNhbkNvcHlcbiAgfVwiXG4gIFticmVhZGNydW1iXT1cImJyZWFkY3J1bWJTZXR0aW5nc1wiXG4gIChvbkZyZWV6ZSk9XCJ0b2dnbGVGcmVlemUoJGV2ZW50KVwiXG4gIChvbkNoYW5nZURhc2hib2FyZCk9XCJ1cGRhdGVEYXNoYm9hcmRDaGlsZHJlbigkZXZlbnQpXCJcbiAgKG9uQWRkV2lkZ2V0KT1cImFkZFdpZGdldCgpXCJcbiAgKG9uRWRpdFdpZGdldCk9XCJlZGl0V2lkZ2V0KCRldmVudClcIlxuICAob25EZWxldGVXaWRnZXQpPVwiZGVsZXRlV2lkZ2V0KCRldmVudClcIlxuICAob25DaGFuZ2VTdGFydCk9XCJhZGREYXNoYm9hcmRDbGFzc1RvQm9keSgpXCJcbiAgKG9uQ2hhbmdlRW5kKT1cInJlbW92ZURhc2hib2FyZENsYXNzRnJvbUJvZHkoKVwiXG4gIChvbkVkaXREYXNoYm9hcmQpPVwiZWRpdERhc2hib2FyZCgpXCJcbiAgKG9uQ29weURhc2hib2FyZCk9XCJjb3B5RGFzaGJvYXJkKClcIlxuICAob25EZWxldGVEYXNoYm9hcmQpPVwiZGVsZXRlRGFzaGJvYXJkKClcIlxuPjwvYzh5LXdpZGdldHMtZGFzaGJvYXJkPlxuIl19
|