@sumaris-net/ngx-components 2.7.0-rc3 → 2.7.0-rc5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/public_api.mjs +2 -3
- package/esm2022/src/app/admin/services/filter/person.filter.mjs +1 -1
- package/esm2022/src/app/admin/services/person.service.mjs +2 -2
- package/esm2022/src/app/admin/services/validator/person.validator.mjs +1 -1
- package/esm2022/src/app/admin/users/users.mjs +3 -3
- package/esm2022/src/app/core/about/about.modal.mjs +1 -1
- package/esm2022/src/app/core/account/account.page.mjs +1 -1
- package/esm2022/src/app/core/account/new-token.modal.mjs +1 -1
- package/esm2022/src/app/core/account/token.table.mjs +1 -1
- package/esm2022/src/app/core/auth/auth.form.mjs +1 -1
- package/esm2022/src/app/core/auth/auth.modal.mjs +1 -1
- package/esm2022/src/app/core/form/entity/editor.class.mjs +1 -1
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +1 -1
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -3
- package/esm2022/src/app/core/form/form.class.mjs +1 -1
- package/esm2022/src/app/core/form/form.utils.mjs +1 -1
- package/esm2022/src/app/core/form/list/list.form.mjs +1 -1
- package/esm2022/src/app/core/form/properties/properties.form.mjs +1 -1
- package/esm2022/src/app/core/form/properties/properties.table.mjs +2 -2
- package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +1 -1
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +1 -1
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +1 -1
- package/esm2022/src/app/core/graphql/graphql.service.mjs +1 -1
- package/esm2022/src/app/core/graphql/graphql.utils.mjs +1 -1
- package/esm2022/src/app/core/home/home.mjs +3 -3
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +1 -1
- package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
- package/esm2022/src/app/core/menu/menu.model.mjs +1 -1
- package/esm2022/src/app/core/menu/menu.service.mjs +1 -1
- package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +1 -1
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +1 -1
- package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
- package/esm2022/src/app/core/register/register.form.mjs +1 -1
- package/esm2022/src/app/core/register/register.modal.mjs +1 -1
- package/esm2022/src/app/core/services/account.service.mjs +1 -1
- package/esm2022/src/app/core/services/auth-guard.service.mjs +1 -1
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +1 -1
- package/esm2022/src/app/core/services/base-graphql-service.class.mjs +1 -1
- package/esm2022/src/app/core/services/base58.mjs +1 -1
- package/esm2022/src/app/core/services/config.service.mjs +1 -1
- package/esm2022/src/app/core/services/errors.mjs +3 -3
- package/esm2022/src/app/core/services/local-settings.service.mjs +1 -1
- package/esm2022/src/app/core/services/model/account.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/config.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/entity.decorators.mjs +1 -1
- package/esm2022/src/app/core/services/model/entity.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/filter.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/person.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/referential.model.mjs +3 -3
- package/esm2022/src/app/core/services/model/token.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +1 -1
- package/esm2022/src/app/core/services/network.service.mjs +1 -1
- package/esm2022/src/app/core/services/network.types.mjs +1 -1
- package/esm2022/src/app/core/services/network.utils.mjs +1 -1
- package/esm2022/src/app/core/services/platform.service.mjs +2 -2
- package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +1 -1
- package/esm2022/src/app/core/services/storage/entity-store.class.mjs +1 -1
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +1 -1
- package/esm2022/src/app/core/services/validator/account.validator.mjs +1 -1
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +1 -1
- package/esm2022/src/app/core/services/validator/user-token.validator.mjs +1 -1
- package/esm2022/src/app/core/settings/settings.page.mjs +2 -2
- package/esm2022/src/app/core/table/actions-column.component.mjs +1 -1
- package/esm2022/src/app/core/table/async-table.class.mjs +1 -1
- package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +1 -1
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +2 -2
- package/esm2022/src/app/core/table/memory-table.class.mjs +1 -1
- package/esm2022/src/app/core/table/table.class.mjs +1 -1
- package/esm2022/src/app/core/table/table.utils.mjs +1 -1
- package/esm2022/src/app/core/table/testing/table.testing.mjs +1 -1
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +4 -4
- package/esm2022/src/app/shared/alerts.mjs +1 -1
- package/esm2022/src/app/shared/audio/audio.mjs +1 -1
- package/esm2022/src/app/shared/capacitor/keyboard.mjs +1 -1
- package/esm2022/src/app/shared/dates.mjs +1 -1
- package/esm2022/src/app/shared/directives/autofocus.directive.mjs +1 -1
- package/esm2022/src/app/shared/directives/autotitle.directive.mjs +1 -1
- package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +1 -1
- package/esm2022/src/app/shared/directives/ng-var.directive.mjs +1 -1
- package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +1 -1
- package/esm2022/src/app/shared/events.mjs +1 -1
- package/esm2022/src/app/shared/file/csv.utils.mjs +1 -1
- package/esm2022/src/app/shared/file/file.service.mjs +1 -1
- package/esm2022/src/app/shared/file/file.utils.mjs +1 -1
- package/esm2022/src/app/shared/file/images.utils.mjs +1 -1
- package/esm2022/src/app/shared/file/json.utils.mjs +1 -1
- package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
- package/esm2022/src/app/shared/form/field.component.mjs +2 -2
- package/esm2022/src/app/shared/forms.mjs +1 -1
- package/esm2022/src/app/shared/functions.mjs +1 -1
- package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +1 -1
- package/esm2022/src/app/shared/gesture/gesture-config.mjs +2 -2
- package/esm2022/src/app/shared/graph/colors.utils.mjs +1 -1
- package/esm2022/src/app/shared/graph/graph-colors.mjs +8 -8
- package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +1 -1
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +1 -1
- package/esm2022/src/app/shared/http/http.utils.mjs +1 -1
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +1 -1
- package/esm2022/src/app/shared/image/image.service.mjs +1 -1
- package/esm2022/src/app/shared/inputs.mjs +1 -1
- package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +1 -1
- package/esm2022/src/app/shared/logging/logger.model.mjs +1 -1
- package/esm2022/src/app/shared/logging/logging-service.class.mjs +1 -1
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +1 -1
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +1 -1
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +1 -1
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +2 -2
- package/esm2022/src/app/shared/material/badge/badge.directive.mjs +1 -1
- package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +6 -11
- package/esm2022/src/app/shared/material/boolean/material-boolean.mjs +262 -0
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +4 -5
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +1 -1
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +2 -2
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +1 -1
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +1 -1
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +1 -1
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +2 -2
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +2 -2
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +2 -2
- package/esm2022/src/app/shared/material/duration/duration.utils.mjs +1 -1
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +1 -1
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +2 -2
- package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +1 -1
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +1 -1
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +1 -1
- package/esm2022/src/app/shared/material/material.module.mjs +5 -5
- package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +1 -1
- package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +1 -1
- package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +1 -1
- package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +1 -1
- package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +1 -1
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +1 -1
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +1 -1
- package/esm2022/src/app/shared/material/testing/common.test.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +1 -1
- package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +1 -1
- package/esm2022/src/app/shared/observables.mjs +1 -1
- package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +1 -1
- package/esm2022/src/app/shared/pipes/colors.pipe.mjs +1 -1
- package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +1 -1
- package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +1 -1
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +1 -1
- package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +1 -1
- package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +1 -1
- package/esm2022/src/app/shared/pipes/math.pipes.mjs +1 -1
- package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +1 -1
- package/esm2022/src/app/shared/pipes/property.pipes.mjs +1 -1
- package/esm2022/src/app/shared/platforms.mjs +1 -1
- package/esm2022/src/app/shared/services/job.utils.mjs +1 -1
- package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/progress-bar.service.mjs +1 -1
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +1 -1
- package/esm2022/src/app/shared/services/startable-service.class.mjs +1 -1
- package/esm2022/src/app/shared/services/translate-context.service.mjs +1 -1
- package/esm2022/src/app/shared/services.mjs +2 -2
- package/esm2022/src/app/shared/shared-routing.module.mjs +1 -1
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +1 -1
- package/esm2022/src/app/shared/storage/storage.service.mjs +1 -1
- package/esm2022/src/app/shared/testing/observable.test.mjs +1 -1
- package/esm2022/src/app/shared/toast/toast.testing.mjs +2 -2
- package/esm2022/src/app/shared/toast/toasts.mjs +1 -1
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +1 -1
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +1 -1
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +1 -1
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +1 -1
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +1 -1
- package/esm2022/src/app/shared/validator/validators.mjs +3 -3
- package/esm2022/src/app/shared/version/versions.mjs +1 -1
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +1 -1
- package/esm2022/src/app/social/job/progression/job-progression.list.mjs +1 -1
- package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +1 -1
- package/esm2022/src/app/social/message/message.form.mjs +1 -1
- package/esm2022/src/app/social/message/message.modal.mjs +1 -1
- package/esm2022/src/app/social/message/message.service.mjs +1 -1
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +1 -1
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +1 -1
- package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +1 -1
- package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +1 -1
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +1 -1
- package/esm2022/src/app/social/user-event/user-event.service.mjs +1 -1
- package/esm2022/src/environments/environment.loader.mjs +1 -1
- package/esm2022/src/environments/environment.mjs +3 -3
- package/fesm2022/sumaris-net.ngx-components.mjs +186 -452
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +6 -6
- package/public_api.d.ts +1 -2
- package/src/app/shared/material/boolean/boolean.module.d.ts +14 -15
- package/src/app/shared/material/boolean/{material.boolean.d.ts → material-boolean.d.ts} +16 -20
- package/src/theme/_ngx-components.scss +11 -11
- package/src/theme/_ngx-components.table.scss +1 -0
- package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +0 -266
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +0 -271
- package/src/app/shared/material/boolean/material-boolean2.d.ts +0 -66
|
@@ -509,4 +509,4 @@ export class AbstractUserEventService extends BaseGraphqlService {
|
|
|
509
509
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AbstractUserEventService, decorators: [{
|
|
510
510
|
type: Directive
|
|
511
511
|
}], ctorParameters: () => [{ type: i1.GraphqlService }, { type: i2.AccountService }, { type: i3.NetworkService }, { type: i4.TranslateService }, { type: undefined }] });
|
|
512
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC91c2VyLWV2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFXLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFXNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHM0YsT0FBTyxFQUFFLGtCQUFrQixFQUE2QixNQUFNLGdEQUFnRCxDQUFDO0FBQy9HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7OztBQUlwRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsa0JBQWtCLENBQUMsQ0FBQztBQTJFMUcsTUFBTSxPQUFnQix3QkFVcEIsU0FBUSxrQkFBNEI7SUFrQnhCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFuQk8sT0FBTyxDQUFJO0lBQ1gsU0FBUyxDQUFhO0lBQ3RCLGFBQWEsQ0FBYTtJQUMxQixhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDL0Msd0JBQXdCLENBQWtD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IEluamVjdGlvblRva2VuLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZldGNoUG9saWN5IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBTb2NpYWxFcnJvckNvZGVzIH0gZnJvbSAnLi4vc29jaWFsLmVycm9ycyc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSVVzZXJFdmVudCwgSVVzZXJFdmVudEZpbHRlciB9IGZyb20gJy4vdXNlci1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge1xuICBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucyxcbiAgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zLFxuICBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsXG4gIElFbnRpdGllc1NlcnZpY2UsXG4gIExvYWRSZXN1bHQsXG4gIFBhZ2UsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgdG9OdW1iZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUdyYXBocWxTZXJ2aWNlLCBCYXNlR3JhcGhxbFNlcnZpY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlscyB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IERhdGVVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgSVN0YXJ0YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgTUlOSUZZX0VOVElUWV9GT1JfUE9EIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGUgfSBmcm9tICdncmFwaHFsL2luZGV4JztcbmltcG9ydCB7IE11dGFibGVXYXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2Jhc2UtZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgQVBQX1VTRVJfRVZFTlRfU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJVXNlckV2ZW50U2VydmljZTxhbnksIGFueT4+KCdVc2VyRXZlbnRTZXJ2aWNlJyk7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBVc2VyRXZlbnRMb2FkT3B0aW9ucyBleHRlbmRzIEVudGl0aWVzU2VydmljZUxvYWRPcHRpb25zIHtcbiAgd2l0aENvbnRlbnQ/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIGZhbHNlXG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVXNlckV2ZW50V2F0Y2hPcHRpb25zIGV4dGVuZHMgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zIHtcbiAgd2l0aENvbnRlbnQ/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIGZhbHNlXG59XG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRRdWVyaWVzIHtcbiAgbG9hZEFsbDogYW55O1xuICBsb2FkQWxsV2l0aENvbnRlbnQ6IGFueTtcbiAgY291bnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJFdmVudE11dGF0aW9ucyB7XG4gIHNhdmU6IGFueTtcbiAgbWFya0FzUmVhZD86IGFueTtcbiAgZGVsZXRlQnlJZHM6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV2ZW50U3Vic2NyaXB0aW9ucyB7XG4gIGxpc3RlbkFsbENoYW5nZXM6IGFueTtcbiAgbGlzdGVuQ291bnRDaGFuZ2VzPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRMaXN0ZW5lcjxFIGV4dGVuZHMgSVVzZXJFdmVudDxFLCBJRD4sIElEID0gbnVtYmVyPiB7XG4gIGFjY2VwdDogKEUpID0+IGJvb2xlYW47XG4gIG9uUmVjZWl2ZWQ/OiAoRSkgPT4gUHJvbWlzZTxFPiB8IEUgfCB1bmRlZmluZWQ7XG4gIG9uUmVhZD86IChFKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRXZlbnRTZXJ2aWNlT3B0aW9uczxcbiAgUSBleHRlbmRzIElVc2VyRXZlbnRRdWVyaWVzID0gSVVzZXJFdmVudFF1ZXJpZXMsXG4gIE0gZXh0ZW5kcyBJVXNlckV2ZW50TXV0YXRpb25zID0gSVVzZXJFdmVudE11dGF0aW9ucyxcbiAgUyBleHRlbmRzIElVc2VyRXZlbnRTdWJzY3JpcHRpb25zID0gSVVzZXJFdmVudFN1YnNjcmlwdGlvbnNcbiAgPiBleHRlbmRzIEJhc2VHcmFwaHFsU2VydmljZU9wdGlvbnMge1xuICBxdWVyaWVzOiBRO1xuICBtdXRhdGlvbnM/OiBQYXJ0aWFsPE0+O1xuICBzdWJzY3JpcHRpb25zPzogUGFydGlhbDxTPjtcbiAgd2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5PzogTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV2ZW50U2VydmljZTxcbiAgRSBleHRlbmRzIElVc2VyRXZlbnQ8RSwgSUQ+LFxuICBGIGV4dGVuZHMgSVVzZXJFdmVudEZpbHRlcjxFLCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBXTyBleHRlbmRzIFVzZXJFdmVudFdhdGNoT3B0aW9ucyA9IFVzZXJFdmVudFdhdGNoT3B0aW9ucyxcbiAgTE8gZXh0ZW5kcyBVc2VyRXZlbnRMb2FkT3B0aW9ucyA9IFVzZXJFdmVudExvYWRPcHRpb25zXG4gID5cbiAgZXh0ZW5kcyBJRW50aXRpZXNTZXJ2aWNlPEUsIEYsIFdPPiwgSVN0YXJ0YWJsZVNlcnZpY2Uge1xuXG4gIGNvdW50U3ViamVjdDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIGFkZChlbnRpdHk6IEUpOiBQcm9taXNlPEU+O1xuXG4gIGxvYWQoaWQ6IElELCBvcHRzPzogTE8pOiBQcm9taXNlPEU+O1xuXG4gIGNvdW50KGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IHsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSB9KTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIGxpc3RlbkNvdW50Q2hhbmdlcyhmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiBXTyAmIHsgaW50ZXJ2YWw/OiBudW1iZXI7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3kgfSk6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBsaXN0ZW5BbGxDaGFuZ2VzKGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IFdPICYgeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSB9KTogT2JzZXJ2YWJsZTxFW10+O1xuXG4gIHNhdmUoZW50aXR5OiBFLCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTxFPjtcblxuICBkZWxldGUoZW50aXR5OiBFKTogUHJvbWlzZTxhbnk+O1xuXG4gIG1hcmtBbGxBc1JlYWQoZW50aXRpZXM6IEVbXSk7XG5cbiAgcmVnaXN0ZXJMaXN0ZW5lcihsaXN0ZW5lcjogSVVzZXJFdmVudExpc3RlbmVyPEUsIElEPik7XG5cbiAgcmVzZXRDb3VudCgpO1xufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVzZXJFdmVudFNlcnZpY2U8XG4gIEUgZXh0ZW5kcyBJVXNlckV2ZW50PEUsIElELCBhbnk+LFxuICBGIGV4dGVuZHMgSVVzZXJFdmVudEZpbHRlcjxFLCBJRCwgYW55PixcbiAgSUQgPSBudW1iZXIsXG4gIFdPIGV4dGVuZHMgVXNlckV2ZW50V2F0Y2hPcHRpb25zID0gVXNlckV2ZW50V2F0Y2hPcHRpb25zLFxuICBMTyBleHRlbmRzIFVzZXJFdmVudExvYWRPcHRpb25zID0gVXNlckV2ZW50TG9hZE9wdGlvbnMsXG4gIFEgZXh0ZW5kcyBJVXNlckV2ZW50UXVlcmllcyA9IElVc2VyRXZlbnRRdWVyaWVzLFxuICBNIGV4dGVuZHMgSVVzZXJFdmVudE11dGF0aW9ucyA9IElVc2VyRXZlbnRNdXRhdGlvbnMsXG4gIFMgZXh0ZW5kcyBJVXNlckV2ZW50U3Vic2NyaXB0aW9ucyA9IElVc2VyRXZlbnRTdWJzY3JpcHRpb25zXG4gID5cbiAgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8RSwgRiwgSUQ+XG4gIGltcGxlbWVudHMgSVVzZXJFdmVudFNlcnZpY2U8RSwgRiwgSUQsIFdPLCBMTz4sIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJpZXM6IFE7XG4gIHByb3RlY3RlZCByZWFkb25seSBtdXRhdGlvbnM6IFBhcnRpYWw8TT47XG4gIHByb3RlY3RlZCByZWFkb25seSBzdWJzY3JpcHRpb25zOiBQYXJ0aWFsPFM+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvdW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTogTXV0YWJsZVdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeTtcbiAgcHJvdGVjdGVkIHJlc2V0Q291bnREYXRlOiBNb21lbnQ7XG4gIHByb3RlY3RlZCBsaXN0ZW5lcnM6IElVc2VyRXZlbnRMaXN0ZW5lcjxFLCBJRD5bXSA9IFtdO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9saXN0ZW5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBnZXQgY291bnRTdWJqZWN0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvdW50U3ViamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgb3B0aW9uczogVXNlckV2ZW50U2VydmljZU9wdGlvbnM8USwgTSwgUz5cbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgb3B0aW9ucyk7XG4gICAgdGhpcy5xdWVyaWVzID0gb3B0aW9ucy5xdWVyaWVzO1xuICAgIHRoaXMubXV0YXRpb25zID0gb3B0aW9ucy5tdXRhdGlvbnMgfHwgPFBhcnRpYWw8TT4+e307XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gb3B0aW9ucy5zdWJzY3JpcHRpb25zIHx8IDxQYXJ0aWFsPFM+Pnt9O1xuICAgIHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ID0gb3B0aW9ucy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgfHwgJ3VwZGF0ZS1jYWNoZSc7XG4gICAgdGhpcy5fbG9nUHJlZml4ID0gJ1t1c2VyLWV2ZW50LXNlcnZpY2VdICc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgLy8gVXBkYXRlIGNvbXBvbmVudCB3aGVuIHJlZnJlc2ggaXMgbmVlZCAoPWxvZ2luIGV2ZW50cylcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4sXG4gICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQsXG4gICAgICAgIHRpbWVyKDEwMDApIC8vIFN0YXJ0cyB3aXRoIC0gIGZpcnN0IGF0dGVtcHQgaWYgYWNjb3VudCBpcyByZWFkeVxuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBXYWl0IGFjY291bnQgc2VydmljZSByZWFkeSAoY2FuIGJlIHJlc3RhcnRlZClcbiAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmFjY291bnRTZXJ2aWNlLnJlYWR5KCkpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmFjY291bnRTZXJ2aWNlLmlzTG9naW4oKSksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUobG9naW4gPT4ge1xuICAgICAgICAgIGlmIChsb2dpbikge1xuICAgICAgICAgICAgdGhpcy5vbkxvZ2luKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Mb2dvdXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGFzRmlsdGVyKGZpbHRlcjogUGFydGlhbDxGPik6IEY7XG5cbiAgYWJzdHJhY3QgZnJvbU9iamVjdChzb3VyY2U6IGFueSk6IEU7XG5cbiAgd2F0Y2hBbGwob2Zmc2V0OiBudW1iZXIsIHNpemU6IG51bWJlciwgc29ydEJ5Pzogc3RyaW5nLCBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbiwgZmlsdGVyPzogUGFydGlhbDxGPiwgb3B0aW9ucz86IFdPKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PEU+PiB7XG4gICAgcmV0dXJuIHRoaXMud2F0Y2hQYWdlKDxQYWdlPnsgb2Zmc2V0LCBzaXplLCBzb3J0QnksIHNvcnREaXJlY3Rpb24gfSwgZmlsdGVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHdhdGNoUGFnZShwYWdlOiBQYWdlLFxuICAgICAgICAgICAgZmlsdGVyPzogUGFydGlhbDxGPixcbiAgICAgICAgICAgIG9wdHM/OiBXTyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxFPj4ge1xuXG4gICAgbGV0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIGZpbHRlciA9IHRoaXMuZGVmYXVsdEZpbHRlcigpO1xuICAgIH1cbiAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Mb2FkaW5nIHVzZXIgZXZlbnRzLi4uYCwgZmlsdGVyKTtcblxuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIC8vIEZvcmNlIHJlY2lwaWVudCB0byBjdXJyZW50IGlzc3VlciwgaWYgbm90IGFkbWluIGFuZCBub3Qgc3BlY2lmaWVkXG4gICAgaWYgKGlzRW1wdHlBcnJheShmaWx0ZXI/LnJlY2lwaWVudHMpIHx8ICF0aGlzLmFjY291bnRTZXJ2aWNlLmlzQWRtaW4oKSkge1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gdGhpcy5kZWZhdWx0UmVjaXBpZW50KCk7XG4gICAgICBpZiAoIWZpbHRlcj8ucmVjaXBpZW50cz8uaW5jbHVkZXMocmVjaXBpZW50KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t1c2VyLWV2ZW50cy1zZXJ2aWNlXSBGb3JjZSB1c2VyIGV2ZW50IGZpbHRlci5yZWNpcGllbnQ9JyArIHJlY2lwaWVudCk7XG4gICAgICAgIGZpbHRlci5yZWNpcGllbnRzID0gW3JlY2lwaWVudF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2l0aENvbnRlbnQgPSBvcHRzPy53aXRoQ29udGVudCA9PT0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLm11dGFibGVXYXRjaFF1ZXJ5PExvYWRSZXN1bHQ8RT4sIHsgZmlsdGVyOiBhbnk7IHBhZ2U6IFBhZ2UgfT4oe1xuICAgICAgcXVlcnlOYW1lOiB3aXRoQ29udGVudCA/ICdMb2FkQWxsV2l0aENvbnRlbnQnIDogJ0xvYWRBbGwnLFxuICAgICAgcXVlcnk6IHdpdGhDb250ZW50ID8gdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCA6IHRoaXMucXVlcmllcy5sb2FkQWxsLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICBzb3J0Qnk6ICdjcmVhdGlvbkRhdGUnLFxuICAgICAgICAgIC4uLnBhZ2UsXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHNvcnREaXJlY3Rpb246IChwYWdlLnNvcnREaXJlY3Rpb24gfHwgJ2Rlc2MnKS50b1VwcGVyQ2FzZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcjogZmlsdGVyICYmIGZpbHRlci5hc1BvZE9iamVjdCgpXG4gICAgICB9LFxuICAgICAgYXJyYXlGaWVsZE5hbWU6ICdkYXRhJyxcbiAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuTE9BRF9VU0VSX0VWRU5UU19FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5MT0FEX1VTRVJfRVZFTlRTX0VSUk9SJyB9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdHM/LmZldGNoUG9saWN5IHx8ICdjYWNoZS1maXJzdCcsXG4gICAgICBpbnNlcnRGaWx0ZXJGbjogZmlsdGVyICYmIGZpbHRlci5hc0ZpbHRlckZuKClcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1lcmdlTWFwKGFzeW5jIChyZXMpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKChyZXM/LmRhdGEgfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLnByb2Nlc3NVc2VyRXZlbnQodmFsdWUpKSk7XG5cbiAgICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH0ke2RhdGEubGVuZ3RofSB1c2VyIGV2ZW50cyBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICAgICAgICBub3cgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE11c3QgcmUtb3JkZXIgYmVjYXVzZSBvZiBsaXN0ZW5BbGxDaGFuZ2VzIHJlc3VsdCB3aWxsIGFkZCBuZXcgZXZlbnQgYXQgdGhlIGVuZFxuICAgICAgICAgIGRhdGEgPSBFbnRpdHlVdGlscy5zb3J0KGRhdGEsIHBhZ2Uuc29ydEJ5LCBwYWdlLnNvcnREaXJlY3Rpb24pO1xuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gPExvYWRSZXN1bHQ8RT4+e1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHRvdGFsOiB0b051bWJlcihyZXM/LnRvdGFsLCBkYXRhLmxlbmd0aClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gQWRkIGZldGNoIG1vcmUgY2FwYWJpbGl0eSwgaWYgdG90YWwgd2FzIGZldGNoZWRcbiAgICAgICAgICBpZiAoaXNOb3ROaWwocmVzLnRvdGFsKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dE9mZnNldCA9IChwYWdlLm9mZnNldCB8fCAwKSArIGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG5leHRPZmZzZXQgPCByZXN1bHQudG90YWwpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LmZldGNoTW9yZSA9IChfKSA9PiB0aGlzLmxvYWRQYWdlKHsuLi5wYWdlLCBvZmZzZXQ6IG5leHRPZmZzZXR9LCBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgey4uLm9wdHMsIGZldGNoUG9saWN5OiA8RmV0Y2hQb2xpY3k+J25vLWNhY2hlJ30gYXMgdW5rbm93biBhcyBMT1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgYXN5bmMgbG9hZFBhZ2UocGFnZTogUGFnZSxcbiAgICAgICAgICAgICAgICAgZmlsdGVyPzogUGFydGlhbDxGPixcbiAgICAgICAgICAgICAgICAgb3B0cz86IExPKTogUHJvbWlzZTxMb2FkUmVzdWx0PEU+PiB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICghZmlsdGVyKSBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcblxuICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUxvYWRpbmcgdXNlciBldmVudHMuLi5gLCBmaWx0ZXIpO1xuXG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgLy8gRm9yY2UgcmVjaXBpZW50IHRvIGN1cnJlbnQgaXNzdWVyLCBpZiBub3QgYWRtaW4gYW5kIG5vdCBzcGVjaWZpZWRcbiAgICBpZiAoaXNFbXB0eUFycmF5KGZpbHRlcj8ucmVjaXBpZW50cykgfHwgIXRoaXMuYWNjb3VudFNlcnZpY2UuaXNBZG1pbigpKSB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0aGlzLmRlZmF1bHRSZWNpcGllbnQoKTtcbiAgICAgIGlmICghZmlsdGVyPy5yZWNpcGllbnRzPy5pbmNsdWRlcyhyZWNpcGllbnQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3VzZXItZXZlbnRzLXNlcnZpY2VdIEZvcmNlIHVzZXIgZXZlbnQgZmlsdGVyLnJlY2lwaWVudD0nICsgcmVjaXBpZW50KTtcbiAgICAgICAgZmlsdGVyLnJlY2lwaWVudHMgPSBbcmVjaXBpZW50XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aXRoQ29udGVudCA9IG9wdHM/LndpdGhDb250ZW50ID09PSB0cnVlO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PExvYWRSZXN1bHQ8RT4+KHtcbiAgICAgIHF1ZXJ5OiB3aXRoQ29udGVudCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnQgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgc29ydEJ5OiAnY3JlYXRpb25EYXRlJyxcbiAgICAgICAgICAuLi5wYWdlLFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiAocGFnZS5zb3J0RGlyZWN0aW9uIHx8ICdkZXNjJykudG9VcHBlckNhc2UoKVxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXI6IGZpbHRlciAmJiBmaWx0ZXIuYXNQb2RPYmplY3QoKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuTE9BRF9VU0VSX0VWRU5UU19FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5MT0FEX1VTRVJfRVZFTlRTX0VSUk9SJyB9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdHM/LmZldGNoUG9saWN5XG4gICAgfSk7XG4gICAgbGV0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbCgocmVzPy5kYXRhIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5wcm9jZXNzVXNlckV2ZW50KHZhbHVlKSkpO1xuXG4gICAgaWYgKG5vdykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9JHtkYXRhLmxlbmd0aH0gdXNlciBldmVudHMgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgLy8gTXVzdCByZS1vcmRlciBiZWNhdXNlIG9mIGxpc3RlbkFsbENoYW5nZXMgcmVzdWx0IHdpbGwgYWRkIG5ldyBldmVudCBhdCB0aGUgZW5kXG4gICAgZGF0YSA9IEVudGl0eVV0aWxzLnNvcnQoZGF0YSwgcGFnZS5zb3J0QnksIHBhZ2Uuc29ydERpcmVjdGlvbik7XG5cbiAgICBjb25zdCByZXN1bHQgPSA8TG9hZFJlc3VsdDxFPj57XG4gICAgICBkYXRhLFxuICAgICAgdG90YWw6IHRvTnVtYmVyKHJlcz8udG90YWwsIGRhdGEubGVuZ3RoKVxuICAgIH07XG5cbiAgICAvLyBBZGQgZmV0Y2ggbW9yZSBjYXBhYmlsaXR5LCBpZiB0b3RhbCB3YXMgZmV0Y2hlZFxuICAgIGlmIChpc05vdE5pbChyZXMudG90YWwpKSB7XG4gICAgICBjb25zdCBuZXh0T2Zmc2V0ID0gKHBhZ2Uub2Zmc2V0IHx8IDApICsgZGF0YS5sZW5ndGg7XG4gICAgICBpZiAobmV4dE9mZnNldCA8IHJlc3VsdC50b3RhbCkge1xuICAgICAgICByZXN1bHQuZmV0Y2hNb3JlID0gKF8pID0+IHRoaXMubG9hZFBhZ2Uoey4uLnBhZ2UsIG9mZnNldDogbmV4dE9mZnNldH0sIGZpbHRlciwgb3B0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoaWQ6IElELCBvcHRzPzogTE8pOiBQcm9taXNlPEU+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICBmaWx0ZXIuaW5jbHVkZWRJZHMgPSBbaWRdO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5sb2FkUGFnZSh7b2Zmc2V0OiAwLCBzaXplOiAxfSwgZmlsdGVyLCBvcHRzKTtcbiAgICByZXR1cm4gZGF0YSAmJiBkYXRhWzBdO1xuICB9XG5cbiAgYXN5bmMgYWRkKGVudGl0eTogRSk6IFByb21pc2U8RT4ge1xuICAgIGVudGl0eSA9IGF3YWl0IHRoaXMucHJvY2Vzc1VzZXJFdmVudChlbnRpdHkpO1xuXG4gICAgaWYgKCFlbnRpdHkpIHJldHVybjsgLy8gUmVqZWN0ZWRcblxuICAgIGNvbnN0IHdpdGhDb250ZW50ID0gISFlbnRpdHkuY29udGVudDtcblxuICAgIC8vIEFkZCB1c2VyIGV2ZW50IGxvY2FsbHlcbiAgICBpZiAodGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICBpZiAod2l0aENvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMoXG4gICAgICAgICAgdGhpcy5ncmFwaHFsLmNhY2hlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50LFxuICAgICAgICAgICAgZGF0YTogZW50aXR5XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMoXG4gICAgICAgIHRoaXMuZ3JhcGhxbC5jYWNoZSxcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAuLi5lbnRpdHksXG4gICAgICAgICAgICBjb250ZW50OiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb3VudFxuICAgIHRoaXMuX2NvdW50U3ViamVjdC5uZXh0KHRoaXMuX2NvdW50U3ViamVjdC52YWx1ZSArIDEpO1xuXG4gICAgLy8gQWRkIGlkXG4gICAgY29uc29sZS5sb2coJ1RPRE86IGFkZCBhbiBJRCB0byB1c2VyIGV2ZW50ID8nKTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhc3luYyBjb3VudChmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiB7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3kgfSk6IFByb21pc2U8bnVtYmVyPiB7XG5cbiAgICBpZiAoIXRoaXMucXVlcmllcz8uY291bnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9UXVlcnkgJ2NvdW50JyBub3QgcHJvdmlkZWQsIHNraXAuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVyKSBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICAvLyBBcHBseSBsYXN0IHJlc2V0IGRhdGUgYXMgc3RhcnQgZGF0ZVxuICAgIGZpbHRlci5zdGFydERhdGUgPSB0aGlzLnJlc2V0Q291bnREYXRlO1xuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9Q291bnRpbmcgdXNlciBldmVudHMgd2l0aCBmaWx0ZXI6YCwgZmlsdGVyKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IHRvdGFsOiBudW1iZXIgfT4oe1xuICAgICAgcXVlcnk6IHRoaXMucXVlcmllcy5jb3VudCxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlci5hc1BvZE9iamVjdCgpXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHsgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5DT1VOVF9VU0VSX0VWRU5UX0VSUk9SLCBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLkNPVU5UX1VTRVJfRVZFTlRfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogb3B0aW9ucz8uZmV0Y2hQb2xpY3kgfHwgJ25ldHdvcmstb25seSdcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLnRvdGFsO1xuICB9XG5cbiAgbGlzdGVuQ291bnRDaGFuZ2VzKGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IFdPICYgeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSB9KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblxuICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zPy5saXN0ZW5Db3VudENoYW5nZXMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9U3Vic2NyaXB0aW9uIHF1ZXJ5ICdsaXN0ZW5Db3VudENoYW5nZXMnIG5vdCBwcm92aWRlZCwgc2tpcC5gKTtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVyKSBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICAvLyBBcHBseSBsYXN0IHJlc2V0IGRhdGUgYXMgc3RhcnQgZGF0ZVxuICAgIGZpbHRlci5zdGFydERhdGUgPSB0aGlzLnJlc2V0Q291bnREYXRlO1xuICAgIGZpbHRlci5leGNsdWRlUmVhZCA9IHRydWU7XG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1bV1NdIExpc3RlbmluZyBjb3VudCBjaGFuZ2VzIGZvciB1c2VyIGV2ZW50cyB3aXRoIGZpbHRlcjpgLCBmaWx0ZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8eyB0b3RhbDogbnVtYmVyIH0sIHsgZmlsdGVyOiBhbnk7IGludGVydmFsOiBudW1iZXIgfT4oe1xuICAgICAgcXVlcnk6IHRoaXMuc3Vic2NyaXB0aW9ucy5saXN0ZW5Db3VudENoYW5nZXMsXG4gICAgICBmZXRjaFBvbGljeTogb3B0aW9ucz8uZmV0Y2hQb2xpY3ksXG4gICAgICB2YXJpYWJsZXM6IHsgZmlsdGVyOiBmaWx0ZXIuYXNQb2RPYmplY3QoKSwgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdGlvbnM/LmludGVydmFsLCAxMCkgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuU1VCU0NSSUJFX1VTRVJfRVZFTlRTX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUidcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgbWFwKCh7IHRvdGFsIH0pID0+IHtcbiAgICAgICAgICBpZiAodG90YWwgJiYgdGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVJlY2VpdmVkIG5ldyB1c2VyIGV2ZW50cyBjb3VudDpgLCB0b3RhbCk7XG4gICAgICAgICAgLy8gdXBkYXRlIGNvdW50XG4gICAgICAgICAgdGhpcy5fY291bnRTdWJqZWN0Lm5leHQodG90YWwpO1xuICAgICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgfVxuXG4gIGxpc3RlbkFsbENoYW5nZXMoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRzPzogV08gJiB7IGludGVydmFsPzogbnVtYmVyOyBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5OyB0b0VudGl0eT86IGJvb2xlYW4gfSk6IE9ic2VydmFibGU8RVtdPiB7XG5cbiAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucz8ubGlzdGVuQWxsQ2hhbmdlcykge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH1TdWJzY3JpcHRpb24gcXVlcnkgJ2xpc3RlbkFsbENoYW5nZXMnIG5vdCBwcm92aWRlZCwgc2tpcC5gKTtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVyKSBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICBjb25zdCB3aXRoQ29udGVudCA9IG9wdHM/LndpdGhDb250ZW50ID09PSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1bV1NdIExpc3RlbmluZyBjaGFuZ2VzIGZvciB1c2VyIGV2ZW50cyB3aXRoIGZpbHRlcjpgLCBmaWx0ZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8eyBkYXRhOiBhbnlbXSB9LCB7IGZpbHRlcjogYW55OyBpbnRlcnZhbDogbnVtYmVyIH0+KHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnN1YnNjcmlwdGlvbnMubGlzdGVuQWxsQ2hhbmdlcyxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRzPy5mZXRjaFBvbGljeSxcbiAgICAgIHZhcmlhYmxlczogeyBmaWx0ZXI6IGZpbHRlci5hc1BvZE9iamVjdCgpLCBpbnRlcnZhbDogdG9OdW1iZXIob3B0cz8uaW50ZXJ2YWwsIDEwKSB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5TVUJTQ1JJQkVfVVNFUl9FVkVOVFNfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuU1VCU0NSSUJFX1VTRVJfRVZFTlRTX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pLnBpcGUoXG4gICAgICBtZXJnZU1hcChhc3luYyAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgdGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVJlY2VpdmVkIG5ldyB1c2VyIGV2ZW50czpgLCBkYXRhKTtcblxuICAgICAgICAvLyBVcGRhdGUgY2FjaGUgKHdpbGwgdXBkYXRlIHdhdGNoQWxsIHF1ZXJpZXMpXG4gICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhxbC5jYWNoZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcXVlcnk6IHdpdGhDb250ZW50ID8gdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCA6IHRoaXMucXVlcmllcy5sb2FkQWxsLFxuICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gZW50aXRpZXNcbiAgICAgICAgaWYgKCFvcHRzIHx8IG9wdHMudG9FbnRpdHkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKChkYXRhIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5wcm9jZXNzVXNlckV2ZW50KHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShlbnRpdHk6IEUpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm47IC8vIHNraXBcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbChbZW50aXR5XSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGwoZW50aXRpZXM6IEVbXSwgb3B0cz86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgaWRzID0gZW50aXRpZXMgJiYgZW50aXRpZXNcbiAgICAgIC5tYXAodCA9PiB0LmlkKTtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGlkcykpIHJldHVybjsgLy8gc3RvcCwgaWYgbm90aGluZyBlbHNlIHRvIGRvXG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RGVsZXRpbmcgZXZlbnRzLi4uIGlkczpgLCBpZHMpO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxhbnk+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5kZWxldGVCeUlkcyxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpZHNcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IChjYWNoZSkgPT4ge1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICBpZiAodGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGcm9tTXV0YWJsZUNhY2hlZFF1ZXJpZXNCeUlkcyhjYWNoZSwge1xuICAgICAgICAgICAgcXVlcmllczogdGhpcy5nZXRMb2FkUXVlcmllcygpLFxuICAgICAgICAgICAgaWRzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUV2ZW50cyBkZWxldGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShlbnRpdHk6IEUsIG9wdGlvbnM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMpOiBQcm9taXNlPEU+IHtcbiAgICB0aGlzLmZpbGxEZWZhdWx0UHJvcGVydGllcyhlbnRpdHkpO1xuXG4gICAgLy8gVHJhbnNmb3JtIGludG8ganNvblxuICAgIGNvbnN0IHdpdGhDb250ZW50ID0gISFlbnRpdHkuY29udGVudDtcbiAgICBjb25zdCBqc29uID0gZW50aXR5LmFzT2JqZWN0KE1JTklGWV9FTlRJVFlfRk9SX1BPRCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2F2aW5nIHVzZXIgZXZlbnQuLi5gLCBqc29uKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLnNhdmUsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZGF0YToganNvblxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuU0FWRV9VU0VSX0VWRU5UX0VSUk9SLCBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLlNBVkVfVVNFUl9FVkVOVF9FUlJPUicgfSxcbiAgICAgIHVwZGF0ZTogKHByb3h5LCB7IGRhdGEgfSkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgZW50aXR5XG4gICAgICAgIGNvbnN0IHNhdmVkRW50aXR5ID0gZGF0YSAmJiBkYXRhLmRhdGE7XG4gICAgICAgIGlmIChzYXZlZEVudGl0eSkge1xuICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXNlciBldmVudCBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBlbnRpdHkpO1xuICAgICAgICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZShzYXZlZEVudGl0eSwgZW50aXR5KTtcblxuICAgICAgICAgIC8vIEFkZCB0byBjYWNoZVxuICAgICAgICAgIGlmICh0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9PT0gJ3VwZGF0ZS1jYWNoZScpIHtcbiAgICAgICAgICAgIGlmICh3aXRoQ29udGVudCkge1xuICAgICAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhwcm94eSwge1xuICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50LFxuICAgICAgICAgICAgICAgIGRhdGE6IHNhdmVkRW50aXR5XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMocHJveHksIHtcbiAgICAgICAgICAgICAgcXVlcnk6IHRoaXMucXVlcmllcy5sb2FkQWxsLFxuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgLi4uc2F2ZWRFbnRpdHksXG4gICAgICAgICAgICAgICAgY29udGVudDogbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhc3luYyBzYXZlQWxsKGVudGl0aWVzOiBFW10sIG9wdHM/OiBhbnkpOiBQcm9taXNlPEVbXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChlbnRpdGllc1xuICAgICAgLm1hcChlbnRpdHkgPT4gdGhpcy5zYXZlKGVudGl0eSwgb3B0cykpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG1hcmtBbGxBc1JlYWQoZW50aXRpZXM6IEVbXSkge1xuXG4gICAgY29uc3QgdXNlckV2ZW50V2l0aG91dFJlYWRMaXN0ZW5lcnM6IEVbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIChlbnRpdGllcyB8fCBbXSkpIHtcbiAgICAgIC8vIEdldCBvblJlYWQgbGlzdGVuZXJzXG4gICAgICBjb25zdCBvblJlYWRMaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHwgW10pLmZpbHRlcihsaXN0ZW5lciA9PiAhIWxpc3RlbmVyLm9uUmVhZCkuZmlsdGVyKGxpc3RlbmVyID0+IGxpc3RlbmVyLmFjY2VwdChlbnRpdHkpKTtcbiAgICAgIGlmIChvblJlYWRMaXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2Ygb25SZWFkTGlzdGVuZXJzKSB7XG4gICAgICAgICAgYXdhaXQgbGlzdGVuZXIub25SZWFkKGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZCB0byB0aGlzIGxpc3QgZm9yIGRlZmF1bHQgb3BlcmF0aW9uXG4gICAgICAgIHVzZXJFdmVudFdpdGhvdXRSZWFkTGlzdGVuZXJzLnB1c2goZW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVc2UgZGVmYXVsdFxuICAgIGF3YWl0IHRoaXMuZGVmYXVsdE1hcmtBc1JlYWQodXNlckV2ZW50V2l0aG91dFJlYWRMaXN0ZW5lcnMpO1xuICB9XG5cbiAgcmVnaXN0ZXJMaXN0ZW5lcihsaXN0ZW5lcjogSVVzZXJFdmVudExpc3RlbmVyPEUsIElEPikge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnMpIHRoaXMubGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICByZXNldENvdW50KCkge1xuICAgIHRoaXMuX2NvdW50U3ViamVjdC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5yZXNldENvdW50RGF0ZSA9IERhdGVVdGlscy5tb21lbnQoKTtcbiAgICAvLyByZXN0YXJ0IGxpc3RlbmluZyBjb3VudCBjaGFuZ2VzXG4gICAgdGhpcy5zdGFydExpc3RlbkNvdW50Q2hhbmdlcygpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25Mb2dpbigpIHtcbiAgICAvLyBHZXQgZmlyc3QgY291bnRcbiAgICBjb25zdCBjb3VudCA9IGF3YWl0IHRoaXMuY291bnQodW5kZWZpbmVkKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVJlY2VpdmluZyB1c2VyIGV2ZW50cyBjb3VudGAsIGNvdW50KTtcbiAgICAvLyBVcGRhdGUgY291bnRcbiAgICB0aGlzLl9jb3VudFN1YmplY3QubmV4dChjb3VudCk7XG5cbiAgICAvLyBUaGVuIGxpc3RlbiBjaGFuZ2VzXG4gICAgdGhpcy5zdGFydExpc3RlbkNvdW50Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTG9nb3V0KCkge1xuICAgIC8vIFJlc2V0IGNvdW50ZXJcbiAgICB0aGlzLl9jb3VudFN1YmplY3QubmV4dCgwKTtcbiAgICAvLyBTdG9wIGxpc3RlbmluZ1xuICAgIHRoaXMuc3RvcExpc3RlbkNvdW50Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0TGlzdGVuQ291bnRDaGFuZ2VzKCkge1xuICAgIHRoaXMuc3RvcExpc3RlbkNvdW50Q2hhbmdlcygpO1xuICAgIHRoaXMuX2xpc3RlblN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuQ291bnRDaGFuZ2VzKHVuZGVmaW5lZCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RvcExpc3RlbkNvdW50Q2hhbmdlcygpIHtcbiAgICB0aGlzLl9saXN0ZW5TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fbGlzdGVuU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHByb2Nlc3NVc2VyRXZlbnQoc291cmNlOiBhbnkpOiBQcm9taXNlPEU+IHtcblxuICAgIC8vIENvbnZlcnQganNvbiBzb3VyY2UgdG8gSVVzZXJFdmVudFxuICAgIGxldCB0YXJnZXQgPSB0aGlzLmZyb21PYmplY3Qoc291cmNlKTtcblxuICAgIC8vIEdldCBsaXN0ZW5lcnNcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHwgW10pXG4gICAgICAuZmlsdGVyKGxpc3RlbmVyID0+ICEhbGlzdGVuZXIub25SZWNlaXZlZClcbiAgICAgIC5maWx0ZXIobGlzdGVuZXIgPT4gbGlzdGVuZXIuYWNjZXB0KHRhcmdldCkpO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzKSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGxpc3RlbmVyLm9uUmVjZWl2ZWQodGFyZ2V0KTtcbiAgICAgICAgdGFyZ2V0ID0gKHJlcyBpbnN0YW5jZW9mIFByb21pc2UpID8gYXdhaXQgcmVzIDogcmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1FdmVudCBoYXMgYmVlbiByZWplY3RlZCBieSBhIGxpc3RlbmVyYCwgc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBkZWZhdWx0TWFya0FzUmVhZCh1c2VyRXZlbnRzOiBFW10pIHtcbiAgICBpZiAoIXVzZXJFdmVudHMpIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLl9sb2dQcmVmaXh9SW52YWxpZCBldmVudCB0byBzYXZlYCk7XG4gICAgaWYgKCF1c2VyRXZlbnRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgLy8gc2V0IHJlYWQgZGF0ZVxuICAgIHVzZXJFdmVudHMuZm9yRWFjaCh1c2VyRXZlbnQgPT4gdXNlckV2ZW50LnJlYWREYXRlID0gRGF0ZVV0aWxzLm1vbWVudCgpKTtcblxuICAgIC8vIHNwbGl0IGxvY2FsL3JlbW90ZSBlbnRpdGllc1xuICAgIGNvbnN0IGxvY2FsRW50aXRpZXMgPSB1c2VyRXZlbnRzLmZpbHRlcihFbnRpdHlVdGlscy5pc0xvY2FsKTtcbiAgICBjb25zdCByZW1vdGVFbnRpdGllcyA9IHVzZXJFdmVudHMuZmlsdGVyKEVudGl0eVV0aWxzLmlzUmVtb3RlKTtcblxuICAgIC8vIHNhdmUgbG9jYWwgZW50aXRpZXNcbiAgICBpZiAobG9jYWxFbnRpdGllcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2F2ZSBsb2NhbCB1c2VyIGV2ZW50YCk7XG4gICAgICAvLyBUT0RPICEhISEhISEhISEhISFcbiAgICB9XG4gICAgLy8gbWFyayByZW1vdGUgZW50aXRpZXMgYXMgcmVhZFxuICAgIGlmIChyZW1vdGVFbnRpdGllcy5sZW5ndGgpIHtcbiAgICAgIGlmICghdGhpcy5tdXRhdGlvbnM/Lm1hcmtBc1JlYWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH1NdXRhdGlvbiBxdWVyeSAnbWFya0FzUmVhZCcgbm90IHByb3ZpZGVkLCBza2lwLmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENvbGxlY3QgaWRzXG4gICAgICBjb25zdCBpZHMgPSByZW1vdGVFbnRpdGllcy5tYXAodmFsdWUgPT4gdmFsdWUuaWQpO1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TWFyayB1c2VyIGV2ZW50cyBhcyByZWFkLi4uYCwgaWRzKTtcblxuICAgICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5tYXJrQXNSZWFkLFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHsgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5TQVZFX1VTRVJfRVZFTlRfRVJST1IsIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuU0FWRV9VU0VSX0VWRU5UX0VSUk9SJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXNlciBldmVudHMgbWFya2VkIGFzIHJlYWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCwgaWRzKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdEZpbHRlcigpOiBGIHtcbiAgICAvLyBCeSBkZWZhdWx0XG4gICAgcmV0dXJuIDxGPntcbiAgICAgIHJlY2lwaWVudHM6IFt0aGlzLmRlZmF1bHRSZWNpcGllbnQoKV1cbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGRlZmF1bHRSZWNpcGllbnQoKTogYW55O1xuXG4gIHByb3RlY3RlZCBmaWxsRGVmYXVsdFByb3BlcnRpZXMoZW50aXR5OiBFKSB7XG4gIH1cblxuICBwcm90ZWN0ZWQgdW5yZWFkRXZlbnRzKGV2ZW50czogRVtdKTogbnVtYmVyIHtcbiAgICAvLyBkZWZhdWx0IGNhbGN1bGF0aW9uIG9uIHVucmVhZCBldmVudHMgZnJvbSBhIGxpc3RcbiAgICBpZiAoaXNFbXB0eUFycmF5KGV2ZW50cykpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbGFzdFJlYWREYXRlID0gZXZlbnRzXG4gICAgICAuZmlsdGVyKGV2ZW50ID0+IGlzTm90TmlsKGV2ZW50LnJlYWREYXRlKSlcbiAgICAgIC5yZWR1Y2UoKGxhc3REYXRlLCBldmVudCkgPT4gRGF0ZVV0aWxzLm1heChsYXN0RGF0ZSwgZXZlbnQucmVhZERhdGUpLCB1bmRlZmluZWQgYXMgTW9tZW50KTtcbiAgICByZXR1cm4gZXZlbnRzXG4gICAgICAuZmlsdGVyKGV2ZW50ID0+IGV2ZW50LmNyZWF0aW9uRGF0ZS5pc1NhbWVPckFmdGVyKGxhc3RSZWFkRGF0ZSkpLmxlbmd0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlKHNvdXJjZTogRSwgdGFyZ2V0OiBFKSB7XG4gICAgRW50aXR5VXRpbHMuY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2UsIHRhcmdldCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TG9hZFF1ZXJpZXMoKTogRG9jdW1lbnROb2RlW10ge1xuICAgIHJldHVybiBbdGhpcy5xdWVyaWVzLmxvYWRBbGwsIHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnRdLmZpbHRlcihpc05vdE5pbCk7XG4gIH1cblxufVxuIl19
|
|
512
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC91c2VyLWV2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFXLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFXNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHM0YsT0FBTyxFQUFFLGtCQUFrQixFQUE2QixNQUFNLGdEQUFnRCxDQUFDO0FBQy9HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7OztBQUlwRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsa0JBQWtCLENBQUMsQ0FBQztBQTJFMUcsTUFBTSxPQUFnQix3QkFVcEIsU0FBUSxrQkFBNEI7SUFrQnhCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFuQk8sT0FBTyxDQUFJO0lBQ1gsU0FBUyxDQUFhO0lBQ3RCLGFBQWEsQ0FBYTtJQUMxQixhQUFhLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDL0Msd0JBQXdCLENBQWtD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LE1BQU0sQ0FBQztJQUM1RSxDQUFDO0lBRVMsbUJBQW1CLENBQUMsTUFBUyxFQUFFLE1BQVM7UUFDaEQsV0FBVyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRixDQUFDO3VHQXhsQm1CLHdCQUF3QjsyRkFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUQ3QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3Rpb25Ub2tlbiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGZXRjaFBvbGljeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgU29jaWFsRXJyb3JDb2RlcyB9IGZyb20gJy4uL3NvY2lhbC5lcnJvcnMnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmFwaHFsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElVc2VyRXZlbnQsIElVc2VyRXZlbnRGaWx0ZXIgfSBmcm9tICcuL3VzZXItZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHtcbiAgRW50aXRpZXNTZXJ2aWNlTG9hZE9wdGlvbnMsXG4gIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyxcbiAgRW50aXR5U2VydmljZUxvYWRPcHRpb25zLFxuICBJRW50aXRpZXNTZXJ2aWNlLFxuICBMb2FkUmVzdWx0LFxuICBQYWdlLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOZXR3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VHcmFwaHFsU2VydmljZSwgQmFzZUdyYXBocWxTZXJ2aWNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IElTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IE1JTklGWV9FTlRJVFlfRk9SX1BPRCB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvcmVmZXJlbnRpYWwubW9kZWwnO1xuaW1wb3J0IHsgRG9jdW1lbnROb2RlIH0gZnJvbSAnZ3JhcGhxbC9pbmRleCc7XG5pbXBvcnQgeyBNdXRhYmxlV2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5IH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9iYXNlLWVudGl0eS1zZXJ2aWNlLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IEFQUF9VU0VSX0VWRU5UX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48SVVzZXJFdmVudFNlcnZpY2U8YW55LCBhbnk+PignVXNlckV2ZW50U2VydmljZScpO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVXNlckV2ZW50TG9hZE9wdGlvbnMgZXh0ZW5kcyBFbnRpdGllc1NlcnZpY2VMb2FkT3B0aW9ucyB7XG4gIHdpdGhDb250ZW50PzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byBmYWxzZVxufVxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFVzZXJFdmVudFdhdGNoT3B0aW9ucyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyB7XG4gIHdpdGhDb250ZW50PzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byBmYWxzZVxufVxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV2ZW50UXVlcmllcyB7XG4gIGxvYWRBbGw6IGFueTtcbiAgbG9hZEFsbFdpdGhDb250ZW50OiBhbnk7XG4gIGNvdW50PzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRNdXRhdGlvbnMge1xuICBzYXZlOiBhbnk7XG4gIG1hcmtBc1JlYWQ/OiBhbnk7XG4gIGRlbGV0ZUJ5SWRzOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJFdmVudFN1YnNjcmlwdGlvbnMge1xuICBsaXN0ZW5BbGxDaGFuZ2VzOiBhbnk7XG4gIGxpc3RlbkNvdW50Q2hhbmdlcz86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV2ZW50TGlzdGVuZXI8RSBleHRlbmRzIElVc2VyRXZlbnQ8RSwgSUQ+LCBJRCA9IG51bWJlcj4ge1xuICBhY2NlcHQ6IChFKSA9PiBib29sZWFuO1xuICBvblJlY2VpdmVkPzogKEUpID0+IFByb21pc2U8RT4gfCBFIHwgdW5kZWZpbmVkO1xuICBvblJlYWQ/OiAoRSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckV2ZW50U2VydmljZU9wdGlvbnM8XG4gIFEgZXh0ZW5kcyBJVXNlckV2ZW50UXVlcmllcyA9IElVc2VyRXZlbnRRdWVyaWVzLFxuICBNIGV4dGVuZHMgSVVzZXJFdmVudE11dGF0aW9ucyA9IElVc2VyRXZlbnRNdXRhdGlvbnMsXG4gIFMgZXh0ZW5kcyBJVXNlckV2ZW50U3Vic2NyaXB0aW9ucyA9IElVc2VyRXZlbnRTdWJzY3JpcHRpb25zXG4gID4gZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2VPcHRpb25zIHtcbiAgcXVlcmllczogUTtcbiAgbXV0YXRpb25zPzogUGFydGlhbDxNPjtcbiAgc3Vic2NyaXB0aW9ucz86IFBhcnRpYWw8Uz47XG4gIHdhdGNoUXVlcmllc1VwZGF0ZVBvbGljeT86IE11dGFibGVXYXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3k7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJFdmVudFNlcnZpY2U8XG4gIEUgZXh0ZW5kcyBJVXNlckV2ZW50PEUsIElEPixcbiAgRiBleHRlbmRzIElVc2VyRXZlbnRGaWx0ZXI8RSwgSUQ+LFxuICBJRCA9IG51bWJlcixcbiAgV08gZXh0ZW5kcyBVc2VyRXZlbnRXYXRjaE9wdGlvbnMgPSBVc2VyRXZlbnRXYXRjaE9wdGlvbnMsXG4gIExPIGV4dGVuZHMgVXNlckV2ZW50TG9hZE9wdGlvbnMgPSBVc2VyRXZlbnRMb2FkT3B0aW9uc1xuICA+XG4gIGV4dGVuZHMgSUVudGl0aWVzU2VydmljZTxFLCBGLCBXTz4sIElTdGFydGFibGVTZXJ2aWNlIHtcblxuICBjb3VudFN1YmplY3Q6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBhZGQoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcblxuICBsb2FkKGlkOiBJRCwgb3B0cz86IExPKTogUHJvbWlzZTxFPjtcblxuICBjb3VudChmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiB7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3kgfSk6IFByb21pc2U8bnVtYmVyPjtcblxuICBsaXN0ZW5Db3VudENoYW5nZXMoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogV08gJiB7IGludGVydmFsPzogbnVtYmVyOyBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5IH0pOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgbGlzdGVuQWxsQ2hhbmdlcyhmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiBXTyAmIHsgaW50ZXJ2YWw/OiBudW1iZXI7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3kgfSk6IE9ic2VydmFibGU8RVtdPjtcblxuICBzYXZlKGVudGl0eTogRSwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8RT47XG5cbiAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8YW55PjtcblxuICBtYXJrQWxsQXNSZWFkKGVudGl0aWVzOiBFW10pO1xuXG4gIHJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXI6IElVc2VyRXZlbnRMaXN0ZW5lcjxFLCBJRD4pO1xuXG4gIHJlc2V0Q291bnQoKTtcbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVc2VyRXZlbnRTZXJ2aWNlPFxuICBFIGV4dGVuZHMgSVVzZXJFdmVudDxFLCBJRCwgYW55PixcbiAgRiBleHRlbmRzIElVc2VyRXZlbnRGaWx0ZXI8RSwgSUQsIGFueT4sXG4gIElEID0gbnVtYmVyLFxuICBXTyBleHRlbmRzIFVzZXJFdmVudFdhdGNoT3B0aW9ucyA9IFVzZXJFdmVudFdhdGNoT3B0aW9ucyxcbiAgTE8gZXh0ZW5kcyBVc2VyRXZlbnRMb2FkT3B0aW9ucyA9IFVzZXJFdmVudExvYWRPcHRpb25zLFxuICBRIGV4dGVuZHMgSVVzZXJFdmVudFF1ZXJpZXMgPSBJVXNlckV2ZW50UXVlcmllcyxcbiAgTSBleHRlbmRzIElVc2VyRXZlbnRNdXRhdGlvbnMgPSBJVXNlckV2ZW50TXV0YXRpb25zLFxuICBTIGV4dGVuZHMgSVVzZXJFdmVudFN1YnNjcmlwdGlvbnMgPSBJVXNlckV2ZW50U3Vic2NyaXB0aW9uc1xuICA+XG4gIGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlPEUsIEYsIElEPlxuICBpbXBsZW1lbnRzIElVc2VyRXZlbnRTZXJ2aWNlPEUsIEYsIElELCBXTywgTE8+LCBPbkRlc3Ryb3kge1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWVyaWVzOiBRO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbXV0YXRpb25zOiBQYXJ0aWFsPE0+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogUGFydGlhbDxTPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb3VudFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCByZWFkb25seSB3YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3k6IE11dGFibGVXYXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3k7XG4gIHByb3RlY3RlZCByZXNldENvdW50RGF0ZTogTW9tZW50O1xuICBwcm90ZWN0ZWQgbGlzdGVuZXJzOiBJVXNlckV2ZW50TGlzdGVuZXI8RSwgSUQ+W10gPSBbXTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfbGlzdGVuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IGNvdW50U3ViamVjdCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9jb3VudFN1YmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG9wdGlvbnM6IFVzZXJFdmVudFNlcnZpY2VPcHRpb25zPFEsIE0sIFM+XG4gICkge1xuICAgIHN1cGVyKGdyYXBocWwsIG9wdGlvbnMpO1xuICAgIHRoaXMucXVlcmllcyA9IG9wdGlvbnMucXVlcmllcztcbiAgICB0aGlzLm11dGF0aW9ucyA9IG9wdGlvbnMubXV0YXRpb25zIHx8IDxQYXJ0aWFsPE0+Pnt9O1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG9wdGlvbnMuc3Vic2NyaXB0aW9ucyB8fCA8UGFydGlhbDxTPj57fTtcbiAgICB0aGlzLndhdGNoUXVlcmllc1VwZGF0ZVBvbGljeSA9IG9wdGlvbnMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5IHx8ICd1cGRhdGUtY2FjaGUnO1xuICAgIHRoaXMuX2xvZ1ByZWZpeCA9ICdbdXNlci1ldmVudC1zZXJ2aWNlXSAnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIC8vIFVwZGF0ZSBjb21wb25lbnQgd2hlbiByZWZyZXNoIGlzIG5lZWQgKD1sb2dpbiBldmVudHMpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBtZXJnZShcbiAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLFxuICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LFxuICAgICAgICB0aW1lcigxMDAwKSAvLyBTdGFydHMgd2l0aCAtICBmaXJzdCBhdHRlbXB0IGlmIGFjY291bnQgaXMgcmVhZHlcbiAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gV2FpdCBhY2NvdW50IHNlcnZpY2UgcmVhZHkgKGNhbiBiZSByZXN0YXJ0ZWQpXG4gICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5hY2NvdW50U2VydmljZS5yZWFkeSgpKSxcbiAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKGxvZ2luID0+IHtcbiAgICAgICAgICBpZiAobG9naW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Mb2dpbigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uTG9nb3V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhYnN0cmFjdCBhc0ZpbHRlcihmaWx0ZXI6IFBhcnRpYWw8Rj4pOiBGO1xuXG4gIGFic3RyYWN0IGZyb21PYmplY3Qoc291cmNlOiBhbnkpOiBFO1xuXG4gIHdhdGNoQWxsKG9mZnNldDogbnVtYmVyLCBzaXplOiBudW1iZXIsIHNvcnRCeT86IHN0cmluZywgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sIGZpbHRlcj86IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiBXTyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxFPj4ge1xuICAgIHJldHVybiB0aGlzLndhdGNoUGFnZSg8UGFnZT57IG9mZnNldCwgc2l6ZSwgc29ydEJ5LCBzb3J0RGlyZWN0aW9uIH0sIGZpbHRlciwgb3B0aW9ucyk7XG4gIH1cblxuICB3YXRjaFBhZ2UocGFnZTogUGFnZSxcbiAgICAgICAgICAgIGZpbHRlcj86IFBhcnRpYWw8Rj4sXG4gICAgICAgICAgICBvcHRzPzogV08pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8RT4+IHtcblxuICAgIGxldCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICB9XG4gICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TG9hZGluZyB1c2VyIGV2ZW50cy4uLmAsIGZpbHRlcik7XG5cbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICAvLyBGb3JjZSByZWNpcGllbnQgdG8gY3VycmVudCBpc3N1ZXIsIGlmIG5vdCBhZG1pbiBhbmQgbm90IHNwZWNpZmllZFxuICAgIGlmIChpc0VtcHR5QXJyYXkoZmlsdGVyPy5yZWNpcGllbnRzKSB8fCAhdGhpcy5hY2NvdW50U2VydmljZS5pc0FkbWluKCkpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9IHRoaXMuZGVmYXVsdFJlY2lwaWVudCgpO1xuICAgICAgaWYgKCFmaWx0ZXI/LnJlY2lwaWVudHM/LmluY2x1ZGVzKHJlY2lwaWVudCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdXNlci1ldmVudHMtc2VydmljZV0gRm9yY2UgdXNlciBldmVudCBmaWx0ZXIucmVjaXBpZW50PScgKyByZWNpcGllbnQpO1xuICAgICAgICBmaWx0ZXIucmVjaXBpZW50cyA9IFtyZWNpcGllbnRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdpdGhDb250ZW50ID0gb3B0cz8ud2l0aENvbnRlbnQgPT09IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5tdXRhYmxlV2F0Y2hRdWVyeTxMb2FkUmVzdWx0PEU+LCB7IGZpbHRlcjogYW55OyBwYWdlOiBQYWdlIH0+KHtcbiAgICAgIHF1ZXJ5TmFtZTogd2l0aENvbnRlbnQgPyAnTG9hZEFsbFdpdGhDb250ZW50JyA6ICdMb2FkQWxsJyxcbiAgICAgIHF1ZXJ5OiB3aXRoQ29udGVudCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnQgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgc29ydEJ5OiAnY3JlYXRpb25EYXRlJyxcbiAgICAgICAgICAuLi5wYWdlLFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiAocGFnZS5zb3J0RGlyZWN0aW9uIHx8ICdkZXNjJykudG9VcHBlckNhc2UoKVxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXI6IGZpbHRlciAmJiBmaWx0ZXIuYXNQb2RPYmplY3QoKVxuICAgICAgfSxcbiAgICAgIGFycmF5RmllbGROYW1lOiAnZGF0YScsXG4gICAgICBlcnJvcjogeyBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLkxPQURfVVNFUl9FVkVOVFNfRVJST1IsIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuTE9BRF9VU0VSX0VWRU5UU19FUlJPUicgfSxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRzPy5mZXRjaFBvbGljeSB8fCAnY2FjaGUtZmlyc3QnLFxuICAgICAgaW5zZXJ0RmlsdGVyRm46IGZpbHRlciAmJiBmaWx0ZXIuYXNGaWx0ZXJGbigpXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtZXJnZU1hcChhc3luYyAocmVzKSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbCgocmVzPy5kYXRhIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5wcm9jZXNzVXNlckV2ZW50KHZhbHVlKSkpO1xuXG4gICAgICAgICAgaWYgKG5vdykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9JHtkYXRhLmxlbmd0aH0gdXNlciBldmVudHMgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgICAgICAgbm93ID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNdXN0IHJlLW9yZGVyIGJlY2F1c2Ugb2YgbGlzdGVuQWxsQ2hhbmdlcyByZXN1bHQgd2lsbCBhZGQgbmV3IGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgICBkYXRhID0gRW50aXR5VXRpbHMuc29ydChkYXRhLCBwYWdlLnNvcnRCeSwgcGFnZS5zb3J0RGlyZWN0aW9uKTtcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IDxMb2FkUmVzdWx0PEU+PntcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0b3RhbDogdG9OdW1iZXIocmVzPy50b3RhbCwgZGF0YS5sZW5ndGgpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIEFkZCBmZXRjaCBtb3JlIGNhcGFiaWxpdHksIGlmIHRvdGFsIHdhcyBmZXRjaGVkXG4gICAgICAgICAgaWYgKGlzTm90TmlsKHJlcy50b3RhbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSAocGFnZS5vZmZzZXQgfHwgMCkgKyBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChuZXh0T2Zmc2V0IDwgcmVzdWx0LnRvdGFsKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5mZXRjaE1vcmUgPSAoXykgPT4gdGhpcy5sb2FkUGFnZSh7Li4ucGFnZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0fSwgZmlsdGVyLFxuICAgICAgICAgICAgICAgIHsuLi5vcHRzLCBmZXRjaFBvbGljeTogPEZldGNoUG9saWN5Piduby1jYWNoZSd9IGFzIHVua25vd24gYXMgTE9cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRQYWdlKHBhZ2U6IFBhZ2UsXG4gICAgICAgICAgICAgICAgIGZpbHRlcj86IFBhcnRpYWw8Rj4sXG4gICAgICAgICAgICAgICAgIG9wdHM/OiBMTyk6IFByb21pc2U8TG9hZFJlc3VsdDxFPj4ge1xuXG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAoIWZpbHRlcikgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG5cbiAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Mb2FkaW5nIHVzZXIgZXZlbnRzLi4uYCwgZmlsdGVyKTtcblxuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIC8vIEZvcmNlIHJlY2lwaWVudCB0byBjdXJyZW50IGlzc3VlciwgaWYgbm90IGFkbWluIGFuZCBub3Qgc3BlY2lmaWVkXG4gICAgaWYgKGlzRW1wdHlBcnJheShmaWx0ZXI/LnJlY2lwaWVudHMpIHx8ICF0aGlzLmFjY291bnRTZXJ2aWNlLmlzQWRtaW4oKSkge1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gdGhpcy5kZWZhdWx0UmVjaXBpZW50KCk7XG4gICAgICBpZiAoIWZpbHRlcj8ucmVjaXBpZW50cz8uaW5jbHVkZXMocmVjaXBpZW50KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t1c2VyLWV2ZW50cy1zZXJ2aWNlXSBGb3JjZSB1c2VyIGV2ZW50IGZpbHRlci5yZWNpcGllbnQ9JyArIHJlY2lwaWVudCk7XG4gICAgICAgIGZpbHRlci5yZWNpcGllbnRzID0gW3JlY2lwaWVudF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2l0aENvbnRlbnQgPSBvcHRzPy53aXRoQ29udGVudCA9PT0gdHJ1ZTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTxMb2FkUmVzdWx0PEU+Pih7XG4gICAgICBxdWVyeTogd2l0aENvbnRlbnQgPyB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50IDogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgcGFnZToge1xuICAgICAgICAgIHNvcnRCeTogJ2NyZWF0aW9uRGF0ZScsXG4gICAgICAgICAgLi4ucGFnZSxcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogKHBhZ2Uuc29ydERpcmVjdGlvbiB8fCAnZGVzYycpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIgJiYgZmlsdGVyLmFzUG9kT2JqZWN0KClcbiAgICAgIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLkxPQURfVVNFUl9FVkVOVFNfRVJST1IsIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuTE9BRF9VU0VSX0VWRU5UU19FUlJPUicgfSxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRzPy5mZXRjaFBvbGljeVxuICAgIH0pO1xuICAgIGxldCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwoKHJlcz8uZGF0YSB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMucHJvY2Vzc1VzZXJFdmVudCh2YWx1ZSkpKTtcblxuICAgIGlmIChub3cpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSR7ZGF0YS5sZW5ndGh9IHVzZXIgZXZlbnRzIGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIC8vIE11c3QgcmUtb3JkZXIgYmVjYXVzZSBvZiBsaXN0ZW5BbGxDaGFuZ2VzIHJlc3VsdCB3aWxsIGFkZCBuZXcgZXZlbnQgYXQgdGhlIGVuZFxuICAgIGRhdGEgPSBFbnRpdHlVdGlscy5zb3J0KGRhdGEsIHBhZ2Uuc29ydEJ5LCBwYWdlLnNvcnREaXJlY3Rpb24pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gPExvYWRSZXN1bHQ8RT4+e1xuICAgICAgZGF0YSxcbiAgICAgIHRvdGFsOiB0b051bWJlcihyZXM/LnRvdGFsLCBkYXRhLmxlbmd0aClcbiAgICB9O1xuXG4gICAgLy8gQWRkIGZldGNoIG1vcmUgY2FwYWJpbGl0eSwgaWYgdG90YWwgd2FzIGZldGNoZWRcbiAgICBpZiAoaXNOb3ROaWwocmVzLnRvdGFsKSkge1xuICAgICAgY29uc3QgbmV4dE9mZnNldCA9IChwYWdlLm9mZnNldCB8fCAwKSArIGRhdGEubGVuZ3RoO1xuICAgICAgaWYgKG5leHRPZmZzZXQgPCByZXN1bHQudG90YWwpIHtcbiAgICAgICAgcmVzdWx0LmZldGNoTW9yZSA9IChfKSA9PiB0aGlzLmxvYWRQYWdlKHsuLi5wYWdlLCBvZmZzZXQ6IG5leHRPZmZzZXR9LCBmaWx0ZXIsIG9wdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsb2FkKGlkOiBJRCwgb3B0cz86IExPKTogUHJvbWlzZTxFPiB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgZmlsdGVyLmluY2x1ZGVkSWRzID0gW2lkXTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMubG9hZFBhZ2Uoe29mZnNldDogMCwgc2l6ZTogMX0sIGZpbHRlciwgb3B0cyk7XG4gICAgcmV0dXJuIGRhdGEgJiYgZGF0YVswXTtcbiAgfVxuXG4gIGFzeW5jIGFkZChlbnRpdHk6IEUpOiBQcm9taXNlPEU+IHtcbiAgICBlbnRpdHkgPSBhd2FpdCB0aGlzLnByb2Nlc3NVc2VyRXZlbnQoZW50aXR5KTtcblxuICAgIGlmICghZW50aXR5KSByZXR1cm47IC8vIFJlamVjdGVkXG5cbiAgICBjb25zdCB3aXRoQ29udGVudCA9ICEhZW50aXR5LmNvbnRlbnQ7XG5cbiAgICAvLyBBZGQgdXNlciBldmVudCBsb2NhbGx5XG4gICAgaWYgKHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ID09PSAndXBkYXRlLWNhY2hlJykge1xuICAgICAgaWYgKHdpdGhDb250ZW50KSB7XG4gICAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKFxuICAgICAgICAgIHRoaXMuZ3JhcGhxbC5jYWNoZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCxcbiAgICAgICAgICAgIGRhdGE6IGVudGl0eVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKFxuICAgICAgICB0aGlzLmdyYXBocWwuY2FjaGUsXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgLi4uZW50aXR5LFxuICAgICAgICAgICAgY29udGVudDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY291bnRcbiAgICB0aGlzLl9jb3VudFN1YmplY3QubmV4dCh0aGlzLl9jb3VudFN1YmplY3QudmFsdWUgKyAxKTtcblxuICAgIC8vIEFkZCBpZFxuICAgIGNvbnNvbGUubG9nKCdUT0RPOiBhZGQgYW4gSUQgdG8gdXNlciBldmVudCA/Jyk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgYXN5bmMgY291bnQoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogeyBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5IH0pOiBQcm9taXNlPG51bWJlcj4ge1xuXG4gICAgaWYgKCF0aGlzLnF1ZXJpZXM/LmNvdW50KSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5fbG9nUHJlZml4fVF1ZXJ5ICdjb3VudCcgbm90IHByb3ZpZGVkLCBza2lwLmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWZpbHRlcikgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgLy8gQXBwbHkgbGFzdCByZXNldCBkYXRlIGFzIHN0YXJ0IGRhdGVcbiAgICBmaWx0ZXIuc3RhcnREYXRlID0gdGhpcy5yZXNldENvdW50RGF0ZTtcbiAgICBmaWx0ZXIgPSB0aGlzLmFzRmlsdGVyKGZpbHRlcik7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUNvdW50aW5nIHVzZXIgZXZlbnRzIHdpdGggZmlsdGVyOmAsIGZpbHRlcik7XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyB0b3RhbDogbnVtYmVyIH0+KHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMuY291bnQsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIuYXNQb2RPYmplY3QoKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuQ09VTlRfVVNFUl9FVkVOVF9FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5DT1VOVF9VU0VSX0VWRU5UX0VSUk9SJyB9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5IHx8ICduZXR3b3JrLW9ubHknXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcy50b3RhbDtcbiAgfVxuXG4gIGxpc3RlbkNvdW50Q2hhbmdlcyhmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiBXTyAmIHsgaW50ZXJ2YWw/OiBudW1iZXI7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3kgfSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cbiAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucz8ubGlzdGVuQ291bnRDaGFuZ2VzKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5fbG9nUHJlZml4fVN1YnNjcmlwdGlvbiBxdWVyeSAnbGlzdGVuQ291bnRDaGFuZ2VzJyBub3QgcHJvdmlkZWQsIHNraXAuYCk7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbHRlcikgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgLy8gQXBwbHkgbGFzdCByZXNldCBkYXRlIGFzIHN0YXJ0IGRhdGVcbiAgICBmaWx0ZXIuc3RhcnREYXRlID0gdGhpcy5yZXNldENvdW50RGF0ZTtcbiAgICBmaWx0ZXIuZXhjbHVkZVJlYWQgPSB0cnVlO1xuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9W1dTXSBMaXN0ZW5pbmcgY291bnQgY2hhbmdlcyBmb3IgdXNlciBldmVudHMgd2l0aCBmaWx0ZXI6YCwgZmlsdGVyKTtcblxuICAgIHJldHVybiB0aGlzLmdyYXBocWwuc3Vic2NyaWJlPHsgdG90YWw6IG51bWJlciB9LCB7IGZpbHRlcjogYW55OyBpbnRlcnZhbDogbnVtYmVyIH0+KHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnN1YnNjcmlwdGlvbnMubGlzdGVuQ291bnRDaGFuZ2VzLFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5LFxuICAgICAgdmFyaWFibGVzOiB7IGZpbHRlcjogZmlsdGVyLmFzUG9kT2JqZWN0KCksIGludGVydmFsOiB0b051bWJlcihvcHRpb25zPy5pbnRlcnZhbCwgMTApIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TVUJTQ1JJQkVfVVNFUl9FVkVOVFNfRVJST1InXG4gICAgICB9XG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgoeyB0b3RhbCB9KSA9PiB7XG4gICAgICAgICAgaWYgKHRvdGFsICYmIHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBuZXcgdXNlciBldmVudHMgY291bnQ6YCwgdG90YWwpO1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3VudFxuICAgICAgICAgIHRoaXMuX2NvdW50U3ViamVjdC5uZXh0KHRvdGFsKTtcbiAgICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuXG4gIH1cblxuICBsaXN0ZW5BbGxDaGFuZ2VzKGZpbHRlcjogUGFydGlhbDxGPiwgb3B0cz86IFdPICYgeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTsgdG9FbnRpdHk/OiBib29sZWFuIH0pOiBPYnNlcnZhYmxlPEVbXT4ge1xuXG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnM/Lmxpc3RlbkFsbENoYW5nZXMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9U3Vic2NyaXB0aW9uIHF1ZXJ5ICdsaXN0ZW5BbGxDaGFuZ2VzJyBub3QgcHJvdmlkZWQsIHNraXAuYCk7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbHRlcikgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgY29uc3Qgd2l0aENvbnRlbnQgPSBvcHRzPy53aXRoQ29udGVudCA9PT0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9W1dTXSBMaXN0ZW5pbmcgY2hhbmdlcyBmb3IgdXNlciBldmVudHMgd2l0aCBmaWx0ZXI6YCwgZmlsdGVyKTtcblxuICAgIHJldHVybiB0aGlzLmdyYXBocWwuc3Vic2NyaWJlPHsgZGF0YTogYW55W10gfSwgeyBmaWx0ZXI6IGFueTsgaW50ZXJ2YWw6IG51bWJlciB9Pih7XG4gICAgICBxdWVyeTogdGhpcy5zdWJzY3JpcHRpb25zLmxpc3RlbkFsbENoYW5nZXMsXG4gICAgICBmZXRjaFBvbGljeTogb3B0cz8uZmV0Y2hQb2xpY3ksXG4gICAgICB2YXJpYWJsZXM6IHsgZmlsdGVyOiBmaWx0ZXIuYXNQb2RPYmplY3QoKSwgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdHM/LmludGVydmFsLCAxMCkgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuU1VCU0NSSUJFX1VTRVJfRVZFTlRTX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUidcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgbWVyZ2VNYXAoYXN5bmMgKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBuZXcgdXNlciBldmVudHM6YCwgZGF0YSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGNhY2hlICh3aWxsIHVwZGF0ZSB3YXRjaEFsbCBxdWVyaWVzKVxuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGRhdGEpKSB7XG4gICAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMoXG4gICAgICAgICAgICB0aGlzLmdyYXBocWwuY2FjaGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHF1ZXJ5OiB3aXRoQ29udGVudCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnQgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb252ZXJ0IHRvIGVudGl0aWVzXG4gICAgICAgIGlmICghb3B0cyB8fCBvcHRzLnRvRW50aXR5ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbCgoZGF0YSB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMucHJvY2Vzc1VzZXJFdmVudCh2YWx1ZSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gIH1cblxuICBhc3luYyBkZWxldGUoZW50aXR5OiBFKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuOyAvLyBza2lwXG4gICAgYXdhaXQgdGhpcy5kZWxldGVBbGwoW2VudGl0eV0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQWxsKGVudGl0aWVzOiBFW10sIG9wdHM/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGlkcyA9IGVudGl0aWVzICYmIGVudGl0aWVzXG4gICAgICAubWFwKHQgPT4gdC5pZCk7XG4gICAgaWYgKGlzRW1wdHlBcnJheShpZHMpKSByZXR1cm47IC8vIHN0b3AsIGlmIG5vdGhpbmcgZWxzZSB0byBkb1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fURlbGV0aW5nIGV2ZW50cy4uLiBpZHM6YCwgaWRzKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8YW55Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuZGVsZXRlQnlJZHMsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaWRzXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiAoY2FjaGUpID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hRdWVyaWVzVXBkYXRlUG9saWN5ID09PSAndXBkYXRlLWNhY2hlJykge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbU11dGFibGVDYWNoZWRRdWVyaWVzQnlJZHMoY2FjaGUsIHtcbiAgICAgICAgICAgIHF1ZXJpZXM6IHRoaXMuZ2V0TG9hZFF1ZXJpZXMoKSxcbiAgICAgICAgICAgIGlkc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1FdmVudHMgZGVsZXRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZW50aXR5OiBFLCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTxFPiB7XG4gICAgdGhpcy5maWxsRGVmYXVsdFByb3BlcnRpZXMoZW50aXR5KTtcblxuICAgIC8vIFRyYW5zZm9ybSBpbnRvIGpzb25cbiAgICBjb25zdCB3aXRoQ29udGVudCA9ICEhZW50aXR5LmNvbnRlbnQ7XG4gICAgY29uc3QganNvbiA9IGVudGl0eS5hc09iamVjdChNSU5JRllfRU5USVRZX0ZPUl9QT0QpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVNhdmluZyB1c2VyIGV2ZW50Li4uYCwganNvbik7XG5cbiAgICBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogYW55IH0+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5zYXZlLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGRhdGE6IGpzb25cbiAgICAgIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNBVkVfVVNFUl9FVkVOVF9FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TQVZFX1VTRVJfRVZFTlRfRVJST1InIH0sXG4gICAgICB1cGRhdGU6IChwcm94eSwgeyBkYXRhIH0pID0+IHtcbiAgICAgICAgLy8gVXBkYXRlIGVudGl0eVxuICAgICAgICBjb25zdCBzYXZlZEVudGl0eSA9IGRhdGEgJiYgZGF0YS5kYXRhO1xuICAgICAgICBpZiAoc2F2ZWRFbnRpdHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVVzZXIgZXZlbnQgc2F2ZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCwgZW50aXR5KTtcbiAgICAgICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc2F2ZWRFbnRpdHksIGVudGl0eSk7XG5cbiAgICAgICAgICAvLyBBZGQgdG8gY2FjaGVcbiAgICAgICAgICBpZiAodGhpcy53YXRjaFF1ZXJpZXNVcGRhdGVQb2xpY3kgPT09ICd1cGRhdGUtY2FjaGUnKSB7XG4gICAgICAgICAgICBpZiAod2l0aENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMocHJveHksIHtcbiAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCxcbiAgICAgICAgICAgICAgICBkYXRhOiBzYXZlZEVudGl0eVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKHByb3h5LCB7XG4gICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIC4uLnNhdmVkRW50aXR5LFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbChlbnRpdGllczogRVtdLCBvcHRzPzogYW55KTogUHJvbWlzZTxFW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZW50aXRpZXNcbiAgICAgIC5tYXAoZW50aXR5ID0+IHRoaXMuc2F2ZShlbnRpdHksIG9wdHMpKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBtYXJrQWxsQXNSZWFkKGVudGl0aWVzOiBFW10pIHtcblxuICAgIGNvbnN0IHVzZXJFdmVudFdpdGhvdXRSZWFkTGlzdGVuZXJzOiBFW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiAoZW50aXRpZXMgfHwgW10pKSB7XG4gICAgICAvLyBHZXQgb25SZWFkIGxpc3RlbmVyc1xuICAgICAgY29uc3Qgb25SZWFkTGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8IFtdKS5maWx0ZXIobGlzdGVuZXIgPT4gISFsaXN0ZW5lci5vblJlYWQpLmZpbHRlcihsaXN0ZW5lciA9PiBsaXN0ZW5lci5hY2NlcHQoZW50aXR5KSk7XG4gICAgICBpZiAob25SZWFkTGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIG9uUmVhZExpc3RlbmVycykge1xuICAgICAgICAgIGF3YWl0IGxpc3RlbmVyLm9uUmVhZChlbnRpdHkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBZGQgdG8gdGhpcyBsaXN0IGZvciBkZWZhdWx0IG9wZXJhdGlvblxuICAgICAgICB1c2VyRXZlbnRXaXRob3V0UmVhZExpc3RlbmVycy5wdXNoKGVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXNlIGRlZmF1bHRcbiAgICBhd2FpdCB0aGlzLmRlZmF1bHRNYXJrQXNSZWFkKHVzZXJFdmVudFdpdGhvdXRSZWFkTGlzdGVuZXJzKTtcbiAgfVxuXG4gIHJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXI6IElVc2VyRXZlbnRMaXN0ZW5lcjxFLCBJRD4pIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzKSB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgcmVzZXRDb3VudCgpIHtcbiAgICB0aGlzLl9jb3VudFN1YmplY3QubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMucmVzZXRDb3VudERhdGUgPSBEYXRlVXRpbHMubW9tZW50KCk7XG4gICAgLy8gcmVzdGFydCBsaXN0ZW5pbmcgY291bnQgY2hhbmdlc1xuICAgIHRoaXMuc3RhcnRMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTG9naW4oKSB7XG4gICAgLy8gR2V0IGZpcnN0IGNvdW50XG4gICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLmNvdW50KHVuZGVmaW5lZCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZpbmcgdXNlciBldmVudHMgY291bnRgLCBjb3VudCk7XG4gICAgLy8gVXBkYXRlIGNvdW50XG4gICAgdGhpcy5fY291bnRTdWJqZWN0Lm5leHQoY291bnQpO1xuXG4gICAgLy8gVGhlbiBsaXN0ZW4gY2hhbmdlc1xuICAgIHRoaXMuc3RhcnRMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvZ291dCgpIHtcbiAgICAvLyBSZXNldCBjb3VudGVyXG4gICAgdGhpcy5fY291bnRTdWJqZWN0Lm5leHQoMCk7XG4gICAgLy8gU3RvcCBsaXN0ZW5pbmdcbiAgICB0aGlzLnN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydExpc3RlbkNvdW50Q2hhbmdlcygpIHtcbiAgICB0aGlzLnN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgICB0aGlzLl9saXN0ZW5TdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbkNvdW50Q2hhbmdlcyh1bmRlZmluZWQpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKSB7XG4gICAgdGhpcy5fbGlzdGVuU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2xpc3RlblN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBwcm9jZXNzVXNlckV2ZW50KHNvdXJjZTogYW55KTogUHJvbWlzZTxFPiB7XG5cbiAgICAvLyBDb252ZXJ0IGpzb24gc291cmNlIHRvIElVc2VyRXZlbnRcbiAgICBsZXQgdGFyZ2V0ID0gdGhpcy5mcm9tT2JqZWN0KHNvdXJjZSk7XG5cbiAgICAvLyBHZXQgbGlzdGVuZXJzXG4gICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8IFtdKVxuICAgICAgLmZpbHRlcihsaXN0ZW5lciA9PiAhIWxpc3RlbmVyLm9uUmVjZWl2ZWQpXG4gICAgICAuZmlsdGVyKGxpc3RlbmVyID0+IGxpc3RlbmVyLmFjY2VwdCh0YXJnZXQpKTtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBjb25zdCByZXMgPSBsaXN0ZW5lci5vblJlY2VpdmVkKHRhcmdldCk7XG4gICAgICAgIHRhcmdldCA9IChyZXMgaW5zdGFuY2VvZiBQcm9taXNlKSA/IGF3YWl0IHJlcyA6IHJlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RXZlbnQgaGFzIGJlZW4gcmVqZWN0ZWQgYnkgYSBsaXN0ZW5lcmAsIHNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZGVmYXVsdE1hcmtBc1JlYWQodXNlckV2ZW50czogRVtdKSB7XG4gICAgaWYgKCF1c2VyRXZlbnRzKSB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fUludmFsaWQgZXZlbnQgdG8gc2F2ZWApO1xuICAgIGlmICghdXNlckV2ZW50cy5sZW5ndGgpIHJldHVybjtcblxuICAgIC8vIHNldCByZWFkIGRhdGVcbiAgICB1c2VyRXZlbnRzLmZvckVhY2godXNlckV2ZW50ID0+IHVzZXJFdmVudC5yZWFkRGF0ZSA9IERhdGVVdGlscy5tb21lbnQoKSk7XG5cbiAgICAvLyBzcGxpdCBsb2NhbC9yZW1vdGUgZW50aXRpZXNcbiAgICBjb25zdCBsb2NhbEVudGl0aWVzID0gdXNlckV2ZW50cy5maWx0ZXIoRW50aXR5VXRpbHMuaXNMb2NhbCk7XG4gICAgY29uc3QgcmVtb3RlRW50aXRpZXMgPSB1c2VyRXZlbnRzLmZpbHRlcihFbnRpdHlVdGlscy5pc1JlbW90ZSk7XG5cbiAgICAvLyBzYXZlIGxvY2FsIGVudGl0aWVzXG4gICAgaWYgKGxvY2FsRW50aXRpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVNhdmUgbG9jYWwgdXNlciBldmVudGApO1xuICAgICAgLy8gVE9ETyAhISEhISEhISEhISEhXG4gICAgfVxuICAgIC8vIG1hcmsgcmVtb3RlIGVudGl0aWVzIGFzIHJlYWRcbiAgICBpZiAocmVtb3RlRW50aXRpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMubXV0YXRpb25zPy5tYXJrQXNSZWFkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9TXV0YXRpb24gcXVlcnkgJ21hcmtBc1JlYWQnIG5vdCBwcm92aWRlZCwgc2tpcC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDb2xsZWN0IGlkc1xuICAgICAgY29uc3QgaWRzID0gcmVtb3RlRW50aXRpZXMubWFwKHZhbHVlID0+IHZhbHVlLmlkKTtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fU1hcmsgdXNlciBldmVudHMgYXMgcmVhZC4uLmAsIGlkcyk7XG5cbiAgICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMubWFya0FzUmVhZCxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgaWRzXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuU0FWRV9VU0VSX0VWRU5UX0VSUk9SLCBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLlNBVkVfVVNFUl9FVkVOVF9FUlJPUicgfSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVVzZXIgZXZlbnRzIG1hcmtlZCBhcyByZWFkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGlkcyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRGaWx0ZXIoKTogRiB7XG4gICAgLy8gQnkgZGVmYXVsdFxuICAgIHJldHVybiA8Rj57XG4gICAgICByZWNpcGllbnRzOiBbdGhpcy5kZWZhdWx0UmVjaXBpZW50KCldXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBkZWZhdWx0UmVjaXBpZW50KCk6IGFueTtcblxuICBwcm90ZWN0ZWQgZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eTogRSkge1xuICB9XG5cbiAgcHJvdGVjdGVkIHVucmVhZEV2ZW50cyhldmVudHM6IEVbXSk6IG51bWJlciB7XG4gICAgLy8gZGVmYXVsdCBjYWxjdWxhdGlvbiBvbiB1bnJlYWQgZXZlbnRzIGZyb20gYSBsaXN0XG4gICAgaWYgKGlzRW1wdHlBcnJheShldmVudHMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxhc3RSZWFkRGF0ZSA9IGV2ZW50c1xuICAgICAgLmZpbHRlcihldmVudCA9PiBpc05vdE5pbChldmVudC5yZWFkRGF0ZSkpXG4gICAgICAucmVkdWNlKChsYXN0RGF0ZSwgZXZlbnQpID0+IERhdGVVdGlscy5tYXgobGFzdERhdGUsIGV2ZW50LnJlYWREYXRlKSwgdW5kZWZpbmVkIGFzIE1vbWVudCk7XG4gICAgcmV0dXJuIGV2ZW50c1xuICAgICAgLmZpbHRlcihldmVudCA9PiBldmVudC5jcmVhdGlvbkRhdGUuaXNTYW1lT3JBZnRlcihsYXN0UmVhZERhdGUpKS5sZW5ndGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2U6IEUsIHRhcmdldDogRSkge1xuICAgIEVudGl0eVV0aWxzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc291cmNlLCB0YXJnZXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldExvYWRRdWVyaWVzKCk6IERvY3VtZW50Tm9kZVtdIHtcbiAgICByZXR1cm4gW3RoaXMucXVlcmllcy5sb2FkQWxsLCB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50XS5maWx0ZXIoaXNOb3ROaWwpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -80,4 +80,4 @@ export class EnvironmentHttpLoader extends EnvironmentLoader {
|
|
|
80
80
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: EnvironmentHttpLoader, decorators: [{
|
|
81
81
|
type: Injectable
|
|
82
82
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined }] });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFHMUQsTUFBTSxPQUFnQixpQkFBaUI7dUdBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUR0QyxTQUFTOztBQVFWLE1BQU0sT0FBTyxxQkFBMkQsU0FBUSxpQkFBb0I7SUFRNUU7SUFQTCxVQUFVLEdBQUcsdUJBQXVCLENBQUM7SUFFNUMsTUFBTSxDQUFVO0lBQ2hCLFlBQVksQ0FBSTtJQUNoQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ1AsdUJBQXVCLENBQVM7SUFFbkQsWUFBc0IsSUFBZ0IsRUFBRSxrQkFBc0I7UUFDNUQsS0FBSyxFQUFFLENBQUM7UUFEWSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBRXBDLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGtCQUFrQixJQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDO1FBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7WUFDbkUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHFFQUFxRSxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsaUJBQWlCO1FBRTdELElBQUksQ0FBQztZQUNILDRCQUE0QjtZQUM1QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxRQUFRO2dCQUNSLG9CQUFvQjtnQkFFcEIsaUNBQWlDO2dCQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBRTVELGlDQUFpQztnQkFDakMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzNCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBRXBCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBVztRQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHNDQUFzQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRWxHLE9BQU8sY0FBYyxDQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ2pDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDZCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLDZCQUE2QixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hGLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxJQUFJLENBQUMsTUFBTTtvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsc0NBQXNDLENBQUMsQ0FBQztZQUMzRixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHdDQUF3QyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEcsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQztJQUNKLENBQUM7dUdBeEVVLHFCQUFxQjsyR0FBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIG9mLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uL2FwcC9zaGFyZWQvZnVuY3Rpb25zJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW52aXJvbm1lbnRMb2FkZXI8VCBleHRlbmRzIEVudmlyb25tZW50ID0gRW52aXJvbm1lbnQ+IHtcbiAgYWJzdHJhY3QgbG9hZCgpOiBQcm9taXNlPFQ+O1xuXG4gIGFic3RyYWN0IGdldCgpOiBUO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRIdHRwTG9hZGVyPFQgZXh0ZW5kcyBFbnZpcm9ubWVudCA9IEVudmlyb25tZW50PiBleHRlbmRzIEVudmlyb25tZW50TG9hZGVyPFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nUHJlZml4ID0gJ1tlbnZpcm9ubWVudC1sb2FkZXJdICc7XG5cbiAgcHJvdGVjdGVkIF9kZWJ1ZzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9lbnZpcm9ubWVudDogVDtcbiAgcHJvdGVjdGVkIF9sb2FkZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9leHRlcm5hbEVudmlyb25tZW50VXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsIGRlZmF1bHRFbnZpcm9ubWVudD86IFQpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIENvcHkgZGVmYXVsdCBlbnZpcm9ubWVudCAoYmVjYXVzZSBjYW4gYmUgcmVhZG9ubHkpXG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0RW52aXJvbm1lbnQgfHwgPFQ+e30pO1xuICAgIHRoaXMuX2V4dGVybmFsRW52aXJvbm1lbnRVcmwgPSB0aGlzLl9lbnZpcm9ubWVudC5leHRlcm5hbEVudmlyb25tZW50VXJsO1xuICAgIHRoaXMuX2RlYnVnID0gIXRoaXMuX2Vudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb2FkZWQgZW52aXJvbm1lbnQuIFNob3VsZCBiZSBjYWxsIGFmdGVyIGxvYWRlZFxuICAgKi9cbiAgZ2V0KCk6IFQge1xuICAgIGlmICghdGhpcy5fbG9hZGVkICYmIGlzTm90TmlsT3JCbGFuayh0aGlzLl9leHRlcm5hbEVudmlyb25tZW50VXJsKSkge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH1FbnZpcm9ubWVudEh0dHBMb2FkZXIuZ2V0KCkgc2hvdWxkIGJlIGNhbGxlZCBBRlRFUiBsb2FkKCkgZmluaXNoZWQuYCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCkgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50OyAvLyBBbHJlYWR5IGxvYWRlZFxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIElmIGl0IGhhcyBhbiBleHRlcm5hbCB1cmxcbiAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsodGhpcy5fZXh0ZXJuYWxFbnZpcm9ubWVudFVybCkpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9hd2FpdCBzbGVlcCg0MDAwKTtcblxuICAgICAgICAvLyBMb2FkIGV4dGVybmFsIGVudmlyb25tZW50IGZpbGVcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuZmV0Y2godGhpcy5fZXh0ZXJuYWxFbnZpcm9ubWVudFVybCk7XG5cbiAgICAgICAgLy8gUGF0Y2ggdGhlIGV4aXN0aW5nIGVudmlyb25tZW50XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9lbnZpcm9ubWVudCwganNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbiAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyBmZXRjaCh1cmw6IHN0cmluZyk6IFByb21pc2U8UGFydGlhbDxUPj4ge1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TG9hZGluZyBleHRlcm5hbCBlbnZpcm9ubWVudCBmcm9tIHske3VybH19Li4uYCk7XG5cbiAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmh0dHAuZ2V0PFBhcnRpYWw8VD4+KHVybCkucGlwZShcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICAgIHRhcCgoanNvbikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RXh0ZXJuYWwgZW52aXJvbm1lbnQgbG9hZGVkYCwganNvbik7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmVycm9yKGAke3RoaXMuX2xvZ1ByZWZpeH1FeHRlcm5hbCBlbnZpcm9ubWVudCBub3QgZm91bmQgKDQwNClgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke3RoaXMuX2xvZ1ByZWZpeH1GYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBlbnZpcm9ubWVudDogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
import 'zone.js/plugins/zone-error';
|
|
11
11
|
import { StorageDrivers } from '../app/shared/storage/storage.utils';
|
|
12
12
|
export const environment = Object.freeze({
|
|
13
|
-
name: '@sumaris-net/ngx-components',
|
|
14
|
-
version: undefined,
|
|
13
|
+
name: '@sumaris-net/ngx-components', // overridden by ENVIRONMENT token
|
|
14
|
+
version: undefined, // overridden by ENVIRONMENT token
|
|
15
15
|
// Do NOT set to false - because this value will be used by releases
|
|
16
16
|
production: true,
|
|
17
17
|
// Do NOT set - because this value will be used by releases
|
|
@@ -94,4 +94,4 @@ export const environment = Object.freeze({
|
|
|
94
94
|
listenIntervalInSeconds: 60,
|
|
95
95
|
},
|
|
96
96
|
});
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdGQUFnRjtBQUNoRiwyRUFBMkU7QUFDM0UsZ0VBQWdFO0FBR2hFOzs7OztHQUtHO0FBQ0gsT0FBTyw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFckUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFnQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3BELElBQUksRUFBRSw2QkFBNkIsRUFBRSxrQ0FBa0M7SUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQ0FBa0M7SUFFdEQsb0VBQW9FO0lBQ3BFLFVBQVUsRUFBRSxJQUFJO0lBRWhCLDJEQUEyRDtJQUMzRCwrQkFBK0I7SUFFL0IsT0FBTyxFQUFFLEdBQUc7SUFDWixhQUFhLEVBQUUsSUFBSTtJQUNuQixvQkFBb0IsRUFBRSxNQUFNO0lBQzVCLGlCQUFpQixFQUFFLGFBQWE7SUFFaEMsc0JBQXNCO0lBQ3RCLFlBQVksRUFBRSxLQUFLO0lBRW5CLHdCQUF3QjtJQUN4QixnQkFBZ0I7SUFFaEIsY0FBYyxFQUFFLE9BQU87SUFDdkIsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLFdBQVc7UUFDakIsSUFBSSxFQUFFLElBQUk7S0FDWDtJQUVELFlBQVksRUFBRTtRQUNaO1lBQ0UsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWDtRQUNEO1lBQ0UsSUFBSSxFQUFFLFlBQVk7WUFDbEIsSUFBSSxFQUFFLEdBQUc7U0FDVjtRQUNEO1lBQ0UsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixJQUFJLEVBQUUsR0FBRztTQUNWO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLElBQUksRUFBRSxHQUFHO1NBQ1Y7UUFDRDtZQUNFLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsSUFBSSxFQUFFLEdBQUc7U0FDVjtLQUNGO0lBQ0QsY0FBYyxFQUFFLFNBQVM7SUFDekIsd0JBQXdCLEVBQUUsK0RBQStEO0lBRXpGLFVBQVU7SUFDVixPQUFPLEVBQUU7UUFDUCxXQUFXLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDO0tBQ3BIO0lBRUQsUUFBUTtJQUNSLFNBQVMsRUFBRSxxRUFBcUU7SUFDaEYsY0FBYyxFQUFFLDhFQUE4RTtJQUM5RixRQUFRLEVBQUUsMkJBQTJCO0lBQ3JDLE9BQU8sRUFBRSxnR0FBZ0c7SUFFekcsY0FBYztJQUNkLGlCQUFpQixFQUFFO0lBQ2pCLHFDQUFxQztJQUNyQyx3Q0FBd0M7SUFDeEMsbUNBQW1DO0lBQ25DLG1EQUFtRDtLQUNwRDtJQUVELE9BQU8sRUFBRTtRQUNQLG1CQUFtQixFQUFFLElBQUk7UUFDekIsdUJBQXVCLEVBQUUsRUFBRTtLQUM1QjtJQUVELFlBQVksRUFBRTtRQUNaLG1CQUFtQixFQUFFLElBQUk7UUFDekIsdUJBQXVCLEVBQUUsRUFBRTtLQUM1QjtDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBjYW4gYmUgcmVwbGFjZWQgZHVyaW5nIGJ1aWxkIGJ5IHVzaW5nIHRoZSBgZmlsZVJlcGxhY2VtZW50c2AgYXJyYXkuXG4vLyBgbmcgYnVpbGQgLS0tcHJvZGAgcmVwbGFjZXMgYGVudmlyb25tZW50LnRzYCB3aXRoIGBlbnZpcm9ubWVudC5wcm9kLnRzYC5cbi8vIFRoZSBsaXN0IG9mIGZpbGUgcmVwbGFjZW1lbnRzIGNhbiBiZSBmb3VuZCBpbiBgYW5ndWxhci5qc29uYC5cblxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL2Vudmlyb25tZW50LmNsYXNzJztcbi8qXG4gKiBJbiBkZXZlbG9wbWVudCBtb2RlLCB0byBpZ25vcmUgem9uZSByZWxhdGVkIGVycm9yIHN0YWNrIGZyYW1lcyBzdWNoIGFzXG4gKiBgem9uZS5ydW5gLCBgem9uZURlbGVnYXRlLmludm9rZVRhc2tgIGZvciBlYXNpZXIgZGVidWdnaW5nLCB5b3UgY2FuXG4gKiBpbXBvcnQgdGhlIGZvbGxvd2luZyBmaWxlLCBidXQgcGxlYXNlIGNvbW1lbnQgaXQgb3V0IGluIHByb2R1Y3Rpb24gbW9kZVxuICogYmVjYXVzZSBpdCB3aWxsIGhhdmUgcGVyZm9ybWFuY2UgaW1wYWN0IHdoZW4gdGhyb3cgZXJyb3JcbiAqL1xuaW1wb3J0ICd6b25lLmpzL3BsdWdpbnMvem9uZS1lcnJvcic7XG5pbXBvcnQgeyBTdG9yYWdlRHJpdmVycyB9IGZyb20gJy4uL2FwcC9zaGFyZWQvc3RvcmFnZS9zdG9yYWdlLnV0aWxzJztcblxuZXhwb3J0IGNvbnN0IGVudmlyb25tZW50OiBFbnZpcm9ubWVudCA9IE9iamVjdC5mcmVlemUoe1xuICBuYW1lOiAnQHN1bWFyaXMtbmV0L25neC1jb21wb25lbnRzJywgLy8gb3ZlcnJpZGRlbiBieSBFTlZJUk9OTUVOVCB0b2tlblxuICB2ZXJzaW9uOiB1bmRlZmluZWQsIC8vIG92ZXJyaWRkZW4gYnkgRU5WSVJPTk1FTlQgdG9rZW5cblxuICAvLyBEbyBOT1Qgc2V0IHRvIGZhbHNlIC0gYmVjYXVzZSB0aGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBieSByZWxlYXNlc1xuICBwcm9kdWN0aW9uOiB0cnVlLFxuXG4gIC8vIERvIE5PVCBzZXQgLSBiZWNhdXNlIHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGJ5IHJlbGVhc2VzXG4gIC8vZXh0ZXJuYWxFbnZpcm9ubWVudFVybDogbnVsbCxcblxuICBiYXNlVXJsOiAnLycsXG4gIGRlZmF1bHRMb2NhbGU6ICdmcicsXG4gIGRlZmF1bHRMYXRMb25nRm9ybWF0OiAnRERNTScsXG4gIGFwb2xsb0ZldGNoUG9saWN5OiAnY2FjaGUtZmlyc3QnLFxuXG4gIC8vIEZJWE1FOiBlbmFibGUgY2FjaGVcbiAgcGVyc2lzdENhY2hlOiBmYWxzZSxcblxuICAvLyBUT0RPOiBtYWtlIHRoaXMgd29ya3NcbiAgLy9vZmZsaW5lOiB0cnVlLFxuXG4gIHBlZXJNaW5WZXJzaW9uOiAnMS44LjAnLFxuICBkZWZhdWx0UGVlcjoge1xuICAgIGhvc3Q6ICdsb2NhbGhvc3QnLFxuICAgIHBvcnQ6IDgwODFcbiAgfSxcblxuICBkZWZhdWx0UGVlcnM6IFtcbiAgICB7XG4gICAgICBob3N0OiAnbG9jYWxob3N0JyxcbiAgICAgIHBvcnQ6IDgwODAsXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnbG9jYWxob3N0JyxcbiAgICAgIHBvcnQ6IDgwODEsXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnMTkyLjE2OC4wLjQ1JyxcbiAgICAgIHBvcnQ6IDgwODAsXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnMTkyLjE2OC4wLjI0JyxcbiAgICAgIHBvcnQ6IDgwODAsXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnMTkyLjE2OC4wLjI5JyxcbiAgICAgIHBvcnQ6IDgwODAsXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnc2loLnNmYS5zYycsXG4gICAgICBwb3J0OiA0NDMsXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAndGVzdC5zdW1hcmlzLm5ldCcsXG4gICAgICBwb3J0OiA0NDMsXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnb3Blbi5zdW1hcmlzLm5ldCcsXG4gICAgICBwb3J0OiA0NDMsXG4gICAgfSxcbiAgICB7XG4gICAgICBob3N0OiAnc2VydmVyLmUtaXMucHJvJyxcbiAgICAgIHBvcnQ6IDQ0MyxcbiAgICB9LFxuICBdLFxuICBkZWZhdWx0QXBwTmFtZTogJ1NVTUFSaVMnLFxuICBkZWZhdWx0QW5kcm9pZEluc3RhbGxVcmw6ICdodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM/aWQ9bmV0LnN1bWFyaXMuYXBwJyxcblxuICAvLyBTdG9yYWdlXG4gIHN0b3JhZ2U6IHtcbiAgICBkcml2ZXJPcmRlcjogW1N0b3JhZ2VEcml2ZXJzLlNRTExpdGUsIFN0b3JhZ2VEcml2ZXJzLkluZGV4ZWREQiwgU3RvcmFnZURyaXZlcnMuV2ViU1FMLCBTdG9yYWdlRHJpdmVycy5Mb2NhbFN0b3JhZ2VdLFxuICB9LFxuXG4gIC8vIEFib3V0XG4gIHNvdXJjZVVybDogJ2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL25neC1zdW1hcmlzLWNvbXBvbmVudHMnLFxuICByZXBvcnRJc3N1ZVVybDogJ2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL25neC1zdW1hcmlzLWNvbXBvbmVudHMvLS9pc3N1ZXMnLFxuICBmb3J1bVVybDogJ2h0dHBzOi8vZm9ydW0uc3VtYXJpcy5uZXQnLFxuICBoZWxwVXJsOiAnaHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1kb2MvLS9ibG9iL21hc3Rlci91c2VyLW1hbnVhbC9pbmRleF9mci5tZCcsXG5cbiAgLy8gRGV2ZWxvcG1lbnRcbiAgZGVmYXVsdEF1dGhWYWx1ZXM6IHtcbiAgICAvLyBCYXNpYyBhdXRoICh1c2luZyBQZXJzb24udXNlcm5hbWUpXG4gICAgLy8gdXNlcm5hbWU6ICdhZG1xMicsIHBhc3N3b3JkOiAncTIyMDA2J1xuICAgIC8vIFRva2VuIGF1dGggKHVzaW5nIFBlcnNvbi5wdWJrZXkpXG4gICAgLy91c2VybmFtZTogJ2FkbWluQHN1bWFyaXMubmV0JywgcGFzc3dvcmQ6ICdhZG1pbicsXG4gIH0sXG5cbiAgYWNjb3VudDoge1xuICAgIGVuYWJsZUxpc3RlbkNoYW5nZXM6IHRydWUsXG4gICAgbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IDYwLFxuICB9LFxuXG4gIGVudGl0eUVkaXRvcjoge1xuICAgIGVuYWJsZUxpc3RlbkNoYW5nZXM6IHRydWUsXG4gICAgbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IDYwLFxuICB9LFxufSk7XG5cbiJdfQ==
|