@sumaris-net/ngx-components 2.4.85 → 2.4.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/src/app/admin/admin-routing.module.mjs +5 -5
- package/esm2020/src/app/admin/admin.module.mjs +5 -5
- package/esm2020/src/app/admin/services/person.service.mjs +4 -4
- package/esm2020/src/app/admin/services/validator/person.validator.mjs +4 -4
- package/esm2020/src/app/admin/users/users.mjs +4 -4
- package/esm2020/src/app/admin/users/users.module.mjs +5 -5
- package/esm2020/src/app/core/about/about.modal.mjs +4 -4
- package/esm2020/src/app/core/about/about.module.mjs +5 -5
- package/esm2020/src/app/core/account/account.module.mjs +5 -5
- package/esm2020/src/app/core/account/account.page.mjs +4 -4
- package/esm2020/src/app/core/auth/auth.form.mjs +4 -4
- package/esm2020/src/app/core/auth/auth.modal.mjs +4 -4
- package/esm2020/src/app/core/auth/auth.module.mjs +5 -5
- package/esm2020/src/app/core/core.module.mjs +5 -5
- package/esm2020/src/app/core/core.testing.module.mjs +5 -5
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.component.mjs +4 -4
- package/esm2020/src/app/core/form/buttons/form-buttons-bar.module.mjs +5 -5
- package/esm2020/src/app/core/form/entity/editor.class.mjs +7 -7
- package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +4 -4
- package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +49 -39
- package/esm2020/src/app/core/form/entity/entity-metadata.component.mjs +4 -4
- package/esm2020/src/app/core/form/entity/entity.module.mjs +5 -5
- package/esm2020/src/app/core/form/form.class.mjs +4 -4
- package/esm2020/src/app/core/form/form.module.mjs +5 -5
- package/esm2020/src/app/core/form/list/list.form.mjs +4 -4
- package/esm2020/src/app/core/form/list/list.module.mjs +5 -5
- package/esm2020/src/app/core/form/properties/properties.form.mjs +4 -4
- package/esm2020/src/app/core/form/properties/properties.module.mjs +5 -5
- package/esm2020/src/app/core/form/properties/property.validator.mjs +4 -4
- package/esm2020/src/app/core/form/properties/testing/properties-form.test.mjs +4 -4
- package/esm2020/src/app/core/form/properties/testing/properties-form.testing.module.mjs +5 -5
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.mjs +4 -4
- package/esm2020/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +5 -5
- package/esm2020/src/app/core/form/text-popover/text-form.component.mjs +4 -4
- package/esm2020/src/app/core/form/text-popover/text-popover.component.mjs +4 -4
- package/esm2020/src/app/core/form/text-popover/text-popover.module.mjs +5 -5
- package/esm2020/src/app/core/graphql/graphql.module.mjs +5 -5
- package/esm2020/src/app/core/graphql/graphql.service.mjs +4 -4
- package/esm2020/src/app/core/home/home.mjs +5 -5
- package/esm2020/src/app/core/home/home.module.mjs +5 -5
- package/esm2020/src/app/core/icon/icon.component.mjs +4 -4
- package/esm2020/src/app/core/icon/icon.module.mjs +5 -5
- package/esm2020/src/app/core/install/install-upgrade-card.component.mjs +4 -4
- package/esm2020/src/app/core/install/install-upgrade-card.module.mjs +5 -5
- package/esm2020/src/app/core/menu/menu.component.mjs +4 -4
- package/esm2020/src/app/core/menu/menu.module.mjs +5 -5
- package/esm2020/src/app/core/menu/menu.service.mjs +4 -4
- package/esm2020/src/app/core/offline/update-offline-mode-card.component.mjs +4 -4
- package/esm2020/src/app/core/offline/update-offline-mode-card.module.mjs +5 -5
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +4 -4
- package/esm2020/src/app/core/peer/select-peer.module.mjs +5 -5
- package/esm2020/src/app/core/register/register-confirm.page.mjs +4 -4
- package/esm2020/src/app/core/register/register.form.mjs +4 -4
- package/esm2020/src/app/core/register/register.modal.mjs +4 -4
- package/esm2020/src/app/core/register/register.module.mjs +5 -5
- package/esm2020/src/app/core/services/account.service.mjs +9 -4
- package/esm2020/src/app/core/services/auth-guard.service.mjs +4 -4
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +4 -4
- package/esm2020/src/app/core/services/base-graphql-service.class.mjs +4 -4
- package/esm2020/src/app/core/services/config.service.mjs +4 -4
- package/esm2020/src/app/core/services/crypto.service.mjs +4 -4
- package/esm2020/src/app/core/services/local-settings.service.mjs +10 -10
- package/esm2020/src/app/core/services/model/config.model.mjs +3 -3
- package/esm2020/src/app/core/services/network.service.mjs +4 -4
- package/esm2020/src/app/core/services/pipes/account.pipes.mjs +9 -9
- package/esm2020/src/app/core/services/pipes/department-to-string.pipe.mjs +5 -5
- package/esm2020/src/app/core/services/pipes/person-to-string.pipe.mjs +5 -5
- package/esm2020/src/app/core/services/pipes/usage-mode.pipes.mjs +9 -9
- package/esm2020/src/app/core/services/platform.service.mjs +4 -4
- package/esm2020/src/app/core/services/storage/entities-storage.service.mjs +4 -4
- package/esm2020/src/app/core/services/testing/referential.validator.mjs +4 -4
- package/esm2020/src/app/core/services/validator/account.validator.mjs +4 -4
- package/esm2020/src/app/core/services/validator/base.validator.class.mjs +4 -4
- package/esm2020/src/app/core/services/validator/local-settings.validator.mjs +4 -4
- package/esm2020/src/app/core/services/validator/user-settings.validator.mjs +4 -4
- package/esm2020/src/app/core/settings/settings.module.mjs +5 -5
- package/esm2020/src/app/core/settings/settings.page.mjs +4 -4
- package/esm2020/src/app/core/table/actions-column.component.mjs +4 -4
- package/esm2020/src/app/core/table/async-table.class.mjs +4 -4
- package/esm2020/src/app/core/table/entities-async-table-datasource.class.mjs +4 -4
- package/esm2020/src/app/core/table/entities-table-datasource.class.mjs +4 -4
- package/esm2020/src/app/core/table/memory-table.class.mjs +4 -4
- package/esm2020/src/app/core/table/table-select-columns.component.mjs +4 -4
- package/esm2020/src/app/core/table/table.class.mjs +4 -4
- package/esm2020/src/app/core/table/table.module.mjs +5 -5
- package/esm2020/src/app/core/table/testing/table-validator.service.mjs +4 -4
- package/esm2020/src/app/core/table/testing/table.testing.mjs +4 -4
- package/esm2020/src/app/core/table/testing/table.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/audio/audio.mjs +4 -4
- package/esm2020/src/app/shared/audio/audio.testing.mjs +4 -4
- package/esm2020/src/app/shared/audio/audio.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/capacitor/keyboard.mjs +4 -4
- package/esm2020/src/app/shared/debug/debug.component.mjs +4 -4
- package/esm2020/src/app/shared/debug/debug.module.mjs +5 -5
- package/esm2020/src/app/shared/directives/autofocus.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/autotitle.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/directives.module.mjs +5 -5
- package/esm2020/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/ng-var.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
- package/esm2020/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
- package/esm2020/src/app/shared/directives/resizable/resizable.module.mjs +5 -5
- package/esm2020/src/app/shared/file/file.service.mjs +4 -4
- package/esm2020/src/app/shared/form/field.component.mjs +4 -4
- package/esm2020/src/app/shared/form/loading-spinner.mjs +4 -4
- package/esm2020/src/app/shared/functions.mjs +4 -1
- package/esm2020/src/app/shared/gesture/gesture-config.mjs +4 -4
- package/esm2020/src/app/shared/guard/component-dirty.guard.mjs +4 -4
- package/esm2020/src/app/shared/help/help.modal.mjs +4 -4
- package/esm2020/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +4 -4
- package/esm2020/src/app/shared/hotkeys/hotkeys.service.mjs +4 -4
- package/esm2020/src/app/shared/hotkeys/shared-hotkeys.module.mjs +5 -5
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +4 -4
- package/esm2020/src/app/shared/image/gallery/image-gallery.module.mjs +5 -5
- package/esm2020/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +4 -4
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +4 -4
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/image/image.module.mjs +5 -5
- package/esm2020/src/app/shared/image/image.service.mjs +4 -4
- package/esm2020/src/app/shared/logging/logging-service.class.mjs +4 -4
- package/esm2020/src/app/shared/logging/logging-service.module.mjs +5 -5
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +4 -4
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +5 -5
- package/esm2020/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +4 -4
- package/esm2020/src/app/shared/material/badge/badge.directive.mjs +4 -4
- package/esm2020/src/app/shared/material/badge/badge.module.mjs +5 -5
- package/esm2020/src/app/shared/material/badge/badge.test.mjs +4 -4
- package/esm2020/src/app/shared/material/boolean/boolean.module.mjs +5 -5
- package/esm2020/src/app/shared/material/boolean/material.boolean.mjs +4 -4
- package/esm2020/src/app/shared/material/chips/chips.module.mjs +5 -5
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +4 -4
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/datetime.module.mjs +5 -5
- package/esm2020/src/app/shared/material/datetime/material.date.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/material.dateshort.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/testing/mat-date.test.mjs +4 -4
- package/esm2020/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +4 -4
- package/esm2020/src/app/shared/material/duration/duration.module.mjs +5 -5
- package/esm2020/src/app/shared/material/duration/material.duration.mjs +4 -4
- package/esm2020/src/app/shared/material/latlong/material.latlong.mjs +4 -4
- package/esm2020/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
- package/esm2020/src/app/shared/material/latlong/testing/latlong.test.mjs +4 -4
- package/esm2020/src/app/shared/material/material.module.mjs +5 -5
- package/esm2020/src/app/shared/material/material.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.component.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.container.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.content.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.directive.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.dom-service.mjs +4 -4
- package/esm2020/src/app/shared/material/numpad/numpad.module.mjs +5 -5
- package/esm2020/src/app/shared/material/numpad/testing/numpad.test.mjs +4 -4
- package/esm2020/src/app/shared/material/paginator/material.paginator-i18n.mjs +4 -4
- package/esm2020/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
- package/esm2020/src/app/shared/material/swipe/material.swipe.mjs +4 -4
- package/esm2020/src/app/shared/material/swipe/swipe.module.mjs +5 -5
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +4 -4
- package/esm2020/src/app/shared/pipes/arrays.pipe.mjs +25 -25
- package/esm2020/src/app/shared/pipes/colors.pipe.mjs +4 -4
- package/esm2020/src/app/shared/pipes/date-diff-duration.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +7 -7
- package/esm2020/src/app/shared/pipes/date-from-now.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/duration.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/file-size.pipe.mjs +4 -4
- package/esm2020/src/app/shared/pipes/form.pipes.mjs +19 -19
- package/esm2020/src/app/shared/pipes/highlight.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/latlong-format.pipe.mjs +10 -10
- package/esm2020/src/app/shared/pipes/maps.pipe.mjs +13 -13
- package/esm2020/src/app/shared/pipes/math.pipes.mjs +13 -13
- package/esm2020/src/app/shared/pipes/ng-init.pipe.mjs +4 -4
- package/esm2020/src/app/shared/pipes/number-format.pipe.mjs +5 -5
- package/esm2020/src/app/shared/pipes/pipes.module.mjs +5 -5
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +8 -8
- package/esm2020/src/app/shared/pipes/string.pipes.mjs +22 -22
- package/esm2020/src/app/shared/pipes/translate-context.pipe.mjs +9 -9
- package/esm2020/src/app/shared/services/memory-entity-service.class.mjs +4 -4
- package/esm2020/src/app/shared/services/progress-bar.service.mjs +4 -4
- package/esm2020/src/app/shared/services/startable-service.class.mjs +6 -1
- package/esm2020/src/app/shared/services/translate-context.service.mjs +4 -4
- package/esm2020/src/app/shared/shared-routing.module.mjs +8 -8
- package/esm2020/src/app/shared/shared.module.mjs +5 -5
- package/esm2020/src/app/shared/shared.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/storage/storage-explorer.component.mjs +4 -4
- package/esm2020/src/app/shared/storage/storage-explorer.module.mjs +5 -5
- package/esm2020/src/app/shared/storage/storage.service.mjs +4 -4
- package/esm2020/src/app/shared/testing/observable.test.mjs +4 -4
- package/esm2020/src/app/shared/testing/tests.page.mjs +4 -4
- package/esm2020/src/app/shared/toast/toast.testing.mjs +6 -6
- package/esm2020/src/app/shared/toast/toast.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/toolbar/modal-toolbar.mjs +4 -4
- package/esm2020/src/app/shared/toolbar/toolbar.mjs +5 -5
- package/esm2020/src/app/shared/toolbar/toolbar.module.mjs +5 -5
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.mjs +4 -4
- package/esm2020/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +5 -5
- package/esm2020/src/app/shared/upload-file/upload-file-popover.component.mjs +4 -4
- package/esm2020/src/app/shared/upload-file/upload-file.component.mjs +4 -4
- package/esm2020/src/app/shared/validator/form-error-adapter.class.mjs +4 -4
- package/esm2020/src/app/social/job/job.module.mjs +5 -5
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +4 -4
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +4 -4
- package/esm2020/src/app/social/job/progression/job-progression.service.mjs +4 -4
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +4 -4
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +4 -4
- package/esm2020/src/app/social/job/testing/job.testing.module.mjs +5 -5
- package/esm2020/src/app/social/message/message.form.mjs +4 -4
- package/esm2020/src/app/social/message/message.modal.mjs +4 -4
- package/esm2020/src/app/social/message/message.module.mjs +5 -5
- package/esm2020/src/app/social/message/message.service.mjs +4 -4
- package/esm2020/src/app/social/social.module.mjs +5 -5
- package/esm2020/src/app/social/social.testing.module.mjs +5 -5
- package/esm2020/src/app/social/user-event/notification/user-event-notification.icon.mjs +4 -4
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +4 -4
- package/esm2020/src/app/social/user-event/testing/user-event.testing.mjs +4 -4
- package/esm2020/src/app/social/user-event/testing/user-event.testing.module.mjs +5 -5
- package/esm2020/src/app/social/user-event/testing/user-event.testing.service.mjs +4 -4
- package/esm2020/src/app/social/user-event/user-event.module.mjs +5 -5
- package/esm2020/src/app/social/user-event/user-event.service.mjs +4 -4
- package/fesm2015/sumaris-net.ngx-components.mjs +898 -871
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +891 -869
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/entity/entity-editor.class.d.ts +33 -29
- package/src/app/core/services/account.service.d.ts +5 -0
- package/src/app/core/services/local-settings.service.d.ts +1 -1
- package/src/app/core/services/platform.service.d.ts +2 -2
- package/src/app/shared/file/file.utils.d.ts +1 -1
- package/src/app/shared/functions.d.ts +1 -0
- package/src/app/shared/services/startable-service.class.d.ts +1 -0
|
@@ -301,6 +301,11 @@ export class AccountService extends BaseGraphqlService {
|
|
|
301
301
|
// Profile less then user
|
|
302
302
|
return !PersonUtils.hasUpperOrEqualsProfile(this._data.profiles, 'USER');
|
|
303
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
*
|
|
306
|
+
* @param recorderDepartment
|
|
307
|
+
* @deprecated use ProgramRefService.canUserWriteDataForDepartment() instead
|
|
308
|
+
*/
|
|
304
309
|
canUserWriteDataForDepartment(recorderDepartment) {
|
|
305
310
|
if (ReferentialUtils.isEmpty(recorderDepartment)) {
|
|
306
311
|
return this.isAdmin();
|
|
@@ -1108,9 +1113,9 @@ export class AccountService extends BaseGraphqlService {
|
|
|
1108
1113
|
return Toasts.show(this.toastController, this.translate, opts);
|
|
1109
1114
|
}
|
|
1110
1115
|
}
|
|
1111
|
-
AccountService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
1112
|
-
AccountService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
1113
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
1116
|
+
AccountService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountService, deps: [{ token: i1.NetworkService }, { token: i2.GraphqlService }, { token: i3.LocalSettingsService }, { token: i4.Storage }, { token: i5.FileService }, { token: i6.TranslateService, optional: true }, { token: i7.ToastController, optional: true }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1117
|
+
AccountService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountService, providedIn: 'root' });
|
|
1118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountService, decorators: [{
|
|
1114
1119
|
type: Injectable,
|
|
1115
1120
|
args: [{ providedIn: 'root', deps: [ENVIRONMENT] }]
|
|
1116
1121
|
}], ctorParameters: function () { return [{ type: i1.NetworkService }, { type: i2.GraphqlService }, { type: i3.LocalSettingsService }, { type: i4.Storage }, { type: i5.FileService }, { type: i6.TranslateService, decorators: [{
|
|
@@ -1121,4 +1126,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
1121
1126
|
type: Inject,
|
|
1122
1127
|
args: [ENVIRONMENT]
|
|
1123
1128
|
}] }]; } });
|
|
1124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLGFBQWEsRUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM5QyxPQUFPLEVBQVMsV0FBVyxFQUFtQixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBMkIsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFDLGVBQWUsRUFBRSxJQUFJLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQWMsR0FBRyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHckQsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQU90RCxPQUFPLEVBQUMscUJBQXFCLEVBQWUsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FB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QUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBRSxXQUFXLENBQUUsRUFBQzs7MEJBaUVsRCxRQUFROzswQkFDUixRQUFROzswQkFDUixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDcnlwdG9TZXJ2aWNlLCBLZXlwYWlyfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7RGVwYXJ0bWVudH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7UGVyc29uLCBQZXJzb25VdGlscywgVXNlclByb2ZpbGVMYWJlbH0gZnJvbSAnLi9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzLCBVc2FnZU1vZGUsIFVzZXJTZXR0aW5nc30gZnJvbSAnLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmV0Y2hQb2xpY3ksIGdxbH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xuXG5pbXBvcnQge2lzTmlsLCBzbGVlcCwgdG9OdW1iZXJ9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtCYXNlR3JhcGhxbFNlcnZpY2V9IGZyb20gJy4vYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtFcnJvckNvZGVzLCBTZXJ2ZXJFcnJvckNvZGVzfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQge0dyYXBocWxTZXJ2aWNlfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtGb3JtRmllbGREZWZpbml0aW9ufSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge05ldHdvcmtTZXJ2aWNlfSBmcm9tICcuL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge0F1dGhUb2tlblR5cGV9IGZyb20gJy4vbmV0d29yay50eXBlcyc7XG5pbXBvcnQge0ZpbGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtNSU5JRllfRU5USVRZX0ZPUl9QT0QsIFJlZmVyZW50aWFsLCBSZWZlcmVudGlhbFV0aWxzfSBmcm9tICcuL21vZGVsL3JlZmVyZW50aWFsLm1vZGVsJztcbmltcG9ydCB7U3RhdHVzSWRzfSBmcm9tICcuL21vZGVsL21vZGVsLmVudW0nO1xuaW1wb3J0IHtCYXNlNTh9IGZyb20gJy4vYmFzZTU4JztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge2Zyb21EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHtmaXJzdE5vdE5pbFByb21pc2V9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Jhc2VFbnRpdHlHcmFwaHFsTXV0YXRpb25zLCBCYXNlRW50aXR5R3JhcGhxbFN1YnNjcmlwdGlvbnN9IGZyb20gJy4vYmFzZS1lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge01vbWVudH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7U2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7T3ZlcmxheUV2ZW50RGV0YWlsfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQge1RvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQWNjb3VudERldGFpbHMge1xuICBsb2FkZWQ6IGJvb2xlYW47XG4gIGtleXBhaXI6IEtleXBhaXI7XG4gIGF1dGhUb2tlbjogc3RyaW5nO1xuICBhdXRoQmFzaWM/OiBzdHJpbmc7XG4gIHB1YmtleTogc3RyaW5nO1xuICBwZXJzb246IFBlcnNvbjtcbiAgZGVwYXJ0bWVudDogRGVwYXJ0bWVudDtcbiAgbWFpblByb2ZpbGU6IFN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aERhdGEge1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICBvZmZsaW5lPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJEYXRhIGV4dGVuZHMgQXV0aERhdGEge1xuICBhY2NvdW50OiBBY2NvdW50O1xufVxuXG5jb25zdCBUT0tFTl9TVE9SQUdFX0tFWSA9ICd0b2tlbic7XG5jb25zdCBQVUJLRVlfU1RPUkFHRV9LRVkgPSAncHVia2V5JztcbmNvbnN0IFNFQ0tFWV9TVE9SQUdFX0tFWSA9ICdzZWNrZXknO1xuY29uc3QgQUNDT1VOVF9TVE9SQUdFX0tFWSA9ICdhY2NvdW50JztcblxuY29uc3QgREVGQVVMVF9BVkFUQVJfSU1BR0UgPSAnYXNzZXRzL2ltZy9wZXJzb24ucG5nJztcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEdyYXBoUUwgcXVlcmllc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmNvbnN0IEZyYWdtZW50cyA9IHtcbiAgYWNjb3VudDogZ3FsYFxuICAgIGZyYWdtZW50IEFjY291bnRGcmFnbWVudCBvbiBBY2NvdW50Vk8ge1xuICAgICAgaWRcbiAgICAgIGZpcnN0TmFtZVxuICAgICAgbGFzdE5hbWVcbiAgICAgIGVtYWlsXG4gICAgICBwdWJrZXlcbiAgICAgIGF2YXRhclxuICAgICAgc3RhdHVzSWRcbiAgICAgIHVwZGF0ZURhdGVcbiAgICAgIGNyZWF0aW9uRGF0ZVxuICAgICAgcHJvZmlsZXNcbiAgICAgIHNldHRpbmdzIHtcbiAgICAgICAgLi4uVXNlclNldHRpbmdzRnJhZ21lbnRcbiAgICAgIH1cbiAgICAgIGRlcGFydG1lbnQge1xuICAgICAgICBpZFxuICAgICAgICBsYWJlbFxuICAgICAgICBuYW1lXG4gICAgICAgIF9fdHlwZW5hbWVcbiAgICAgIH1cbiAgICAgIF9fdHlwZW5hbWVcbiAgICB9YCxcblxuICBzZXR0aW5nczogZ3FsYGZyYWdtZW50IFVzZXJTZXR0aW5nc0ZyYWdtZW50IG9uIFVzZXJTZXR0aW5nc1ZPIHtcbiAgICBpZFxuICAgIGxvY2FsZVxuICAgIGxhdExvbmdGb3JtYXRcbiAgICBjb250ZW50XG4gICAgbm9uY2VcbiAgICB1cGRhdGVEYXRlXG4gICAgX190eXBlbmFtZVxuICB9YFxufTtcblxuLy8gTG9hZCBhY2NvdW50IHF1ZXJ5XG5jb25zdCBMb2FkUXVlcnk6IGFueSA9IGdxbGBcbiAgcXVlcnkgQWNjb3VudCB7XG4gICAgZGF0YTogYWNjb3VudCB7XG4gICAgICAuLi5BY2NvdW50RnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuYWNjb3VudH1cbiAgJHtGcmFnbWVudHMuc2V0dGluZ3N9XG5gO1xuXG4vLyBDaGVjayBlbWFpbCBxdWVyeVxuY29uc3QgSXNFbWFpbEV4aXN0c1F1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IElzRW1haWxFeGlzdHMoJGVtYWlsOiBTdHJpbmcsICRoYXNoOiBTdHJpbmcpe1xuICAgIGlzRW1haWxFeGlzdHMoZW1haWw6ICRlbWFpbCwgaGFzaDogJGhhc2gpXG4gIH1cbmA7XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSXNFbWFpbEV4aXN0c1ZhcmlhYmxlcyB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbn1cblxuLy8gU2F2ZSAoY3JlYXRlIG9yIHVwZGF0ZSkgYWNjb3VudCBtdXRhdGlvblxuY29uc3QgQWNjb3VudE11dGF0aW9uczogUGFydGlhbDxCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucz4gJiB7IGNyZWF0ZTogYW55LCBzYXZlU2V0dGluZ3M6IGFueTsgfSA9IHtcbiAgc2F2ZTogZ3FsYCBtdXRhdGlvbiBTYXZlQWNjb3VudCgkZGF0YTpBY2NvdW50Vk9JbnB1dCl7XG4gICAgZGF0YTogc2F2ZUFjY291bnQoYWNjb3VudDogJGRhdGEpe1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfWAsXG5cbiAgY3JlYXRlOiBncWxgbXV0YXRpb24gQ3JlYXRlQWNjb3VudCgkZGF0YTpBY2NvdW50Vk9JbnB1dCl7XG4gICAgZGF0YTogY3JlYXRlQWNjb3VudChhY2NvdW50OiAkZGF0YSl7XG4gICAgICAuLi5BY2NvdW50RnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuYWNjb3VudH1cbiAgJHtGcmFnbWVudHMuc2V0dGluZ3N9YCxcblxuICBzYXZlU2V0dGluZ3M6IGdxbGBtdXRhdGlvbiBTYXZlU2V0dGluZ3MoJGRhdGE6VXNlclNldHRpbmdzVk9JbnB1dCl7XG4gICAgZGF0YTogc2F2ZVNldHRpbmdzKHNldHRpbmdzOiAkZGF0YSl7XG4gICAgICAuLi5Vc2VyU2V0dGluZ3NGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0ZyYWdtZW50cy5zZXR0aW5nc31gXG59O1xuXG4vLyBTZW50IGNvbmZpcm1hdGlvbiBlbWFpbFxuY29uc3QgU2VuZENvbmZpcm1FbWFpbE11dGF0aW9uOiBhbnkgPSBncWxgXG4gIG11dGF0aW9uIHNlbmRBY2NvdW50Q29uZmlybWF0aW9uRW1haWwoJGVtYWlsOlN0cmluZywgJGxvY2FsZTpTdHJpbmcpe1xuICAgIHNlbmRBY2NvdW50Q29uZmlybWF0aW9uRW1haWwoZW1haWw6ICRlbWFpbCwgbG9jYWxlOiAkbG9jYWxlKVxuICB9XG5gO1xuXG4vLyBDb25maXJtIGFjY291bnQgZW1haWxcbmNvbnN0IENvbmZpcm1FbWFpbE11dGF0aW9uOiBhbnkgPSBncWxgXG4gIG11dGF0aW9uIGNvbmZpcm1BY2NvdW50RW1haWwoJGVtYWlsOlN0cmluZywgJGNvZGU6U3RyaW5nKXtcbiAgICBjb25maXJtQWNjb3VudEVtYWlsKGVtYWlsOiAkZW1haWwsIGNvZGU6ICRjb2RlKVxuICB9XG5gO1xuXG4vLyBBdXRoZW50aWNhdGlvbiAgcXVlcnlcbmNvbnN0IEF1dGhRdWVyeTogYW55ID0gZ3FsYFxuICBxdWVyeSBBdXRoKCR0b2tlbjogU3RyaW5nKXtcbiAgICBhdXRoZW50aWNhdGUodG9rZW46ICR0b2tlbilcbiAgfVxuYDtcblxuLy8gTmV3IGF1dGggY2hhbGxlbmdlIHF1ZXJ5XG5jb25zdCBBdXRoQ2hhbGxlbmdlUXVlcnk6IGFueSA9IGdxbGBcbiAgcXVlcnkgQXV0aENoYWxsZW5nZXtcbiAgICBhdXRoQ2hhbGxlbmdle1xuICAgICAgY2hhbGxlbmdlXG4gICAgICBwdWJrZXlcbiAgICAgIHNpZ25hdHVyZVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgQWNjb3VudFN1YnNjcmlwdGlvbnM6IEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyA9IHtcbiAgbGlzdGVuQ2hhbmdlczogZ3FsYHN1YnNjcmlwdGlvbiB1cGRhdGVBY2NvdW50KCRpbnRlcnZhbDogSW50KXtcbiAgICBkYXRhOiB1cGRhdGVBY2NvdW50KGludGVydmFsOiAkaW50ZXJ2YWwpIHtcbiAgICAgIGlkXG4gICAgICB1cGRhdGVEYXRlXG4gICAgfVxuICB9YFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50V2F0Y2hPcHRpb25zIHtcbiAgaW50ZXJ2YWxJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCcsIGRlcHM6IFsgRU5WSVJPTk1FTlQgXX0pXG5leHBvcnQgY2xhc3MgQWNjb3VudFNlcnZpY2UgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8QWNjb3VudCwgYW55LCBudW1iZXIsIEFjY291bnQ+IHtcblxuICBvbkxvZ2luID0gbmV3IFN1YmplY3Q8QWNjb3VudD4oKTtcbiAgb25Mb2dvdXQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBvbkNoYW5nZSA9IG5ldyBTdWJqZWN0PEFjY291bnQ+KCk7XG4gIG9uQXV0aFRva2VuQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG9uQXV0aEJhc2ljQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5hYmxlTGlzdGVuQ2hhbmdlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2FjaGU6IEFjY291bnREZXRhaWxzID0ge1xuICAgIGxvYWRlZDogZmFsc2UsXG4gICAga2V5cGFpcjogbnVsbCxcbiAgICBhdXRoVG9rZW46IG51bGwsXG4gICAgYXV0aEJhc2ljOiBudWxsLFxuICAgIHB1YmtleTogbnVsbCxcbiAgICBtYWluUHJvZmlsZTogbnVsbCxcbiAgICBwZXJzb246IG51bGwsXG4gICAgZGVwYXJ0bWVudDogbnVsbFxuICB9O1xuICBwcml2YXRlIF8kYWRkaXRpb25hbEZpZWxkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybUZpZWxkRGVmaW5pdGlvbltdPihbXSk7XG4gIHByaXZhdGUgX3Rva2VuVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhUb2tlblR5cGU+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IGFjY291bnQoKTogQWNjb3VudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxvYWRlZCA/IHRoaXMuX2RhdGEgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgcGVyc29uKCk6IFBlcnNvbiB7XG4gICAgaWYgKHRoaXMuX2NhY2hlLmxvYWRlZCAmJiAhdGhpcy5fY2FjaGUucGVyc29uKSB7XG4gICAgICB0aGlzLl9jYWNoZS5wZXJzb24gPSB0aGlzLl9jYWNoZS5sb2FkZWQgPyB0aGlzLl9kYXRhLmFzUGVyc29uKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYWNoZS5wZXJzb247XG4gIH1cblxuICBnZXQgZGVwYXJ0bWVudCgpOiBEZXBhcnRtZW50IHtcbiAgICBpZiAodGhpcy5fY2FjaGUubG9hZGVkICYmICF0aGlzLl9jYWNoZS5kZXBhcnRtZW50KSB7XG4gICAgICB0aGlzLl9jYWNoZS5kZXBhcnRtZW50ID0gdGhpcy5fY2FjaGUubG9hZGVkID8gdGhpcy5fZGF0YS5hc1BlcnNvbigpLmRlcGFydG1lbnQgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYWNoZS5kZXBhcnRtZW50O1xuICB9XG5cbiAgZ2V0IHRva2VuVHlwZSgpOiBBdXRoVG9rZW5UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5UeXBlJC52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlblR5cGUodmFsdWU6IEF1dGhUb2tlblR5cGUpIHtcbiAgICBpZiAodGhpcy5fdG9rZW5UeXBlJC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFVzaW5nIGF1dGhlbnRpY2F0aW9uIHRva2VuIHR5cGU6ICcgKyB2YWx1ZSk7XG4gICAgICB0aGlzLl90b2tlblR5cGUkLm5leHQodmFsdWUpO1xuICAgICAgLy8gUmVzZXQgdmFsdWVzXG4gICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcm90ZWN0ZWQgZmlsZTogRmlsZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSAoIWVudmlyb25tZW50LmFjY291bnQgfHwgZW52aXJvbm1lbnQuYWNjb3VudC5lbmFibGVMaXN0ZW5DaGFuZ2VzICE9PSBmYWxzZSk7IC8vIFRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzID0gdG9OdW1iZXIoZW52aXJvbm1lbnQuYWNjb3VudCAmJiBlbnZpcm9ubWVudC5hY2NvdW50Lmxpc3RlbkludGVydmFsSW5TZWNvbmRzLCAwKTsgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50LXNlcnZpY2VdIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICAvLyBTZW5kIGF1dGggdG9rZW4gdG8gdGhlIGdyYXBocWwgbGF5ZXIsIHdoZW4gY2hhbmdlZFxuICAgIHRoaXMub25BdXRoVG9rZW5DaGFuZ2Uuc3Vic2NyaWJlKCh0b2tlbikgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhUb2tlbih0b2tlbikpO1xuICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2Uuc3Vic2NyaWJlKChiYXNpYykgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhCYXNpYyhiYXNpYykpO1xuXG4gICAgLy8gRm9yY2UgbmV0d29yayB0byB3YWl0IGFjY291bnQgc2VydmljZSwgYWZ0ZXIgZ2V0dGluZyBjb25uZWN0aW9uIHRvIHRoZSBwZWVyXG4gICAgdGhpcy5uZXR3b3JrLm9uKCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCBhc3luYyAob25saW5lKSA9PiB7XG4gICAgICAvLyBJZiBvbmxpbmUsIHdhaXQgYSBmdWxsIHJlc3RhcnQsIGJlY2F1c2UgaXQgY2FuIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgaWYgKG9ubGluZSAmJiAoIXRoaXMuc3RhcnRlZCB8fCB0aGlzLmlzTG9naW4oKSkpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEZvcmNlIG5ldHdvcmtTZXJ2aWNlLnRyeU9ubGluZSgpIHRvIHdhaXQsIHRoYXQgZ3JhcGhxbCBhbmQgYWNjb3VudCBzZXJ2aWNlIGlzIHJlc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBzbGVlcCg1MDApOyAvLyB3YWl0IGdyYXBocWwgc2VydmljZSB0byBiZSByZXN0YXJ0ZWRcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8QWNjb3VudD4ge1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgLy8gV2FpdCB0b2tlbiB0eXBlIHRvIGJlIHNldFxuICAgICAgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX3Rva2VuVHlwZSQpXG4gICAgXSk7XG5cbiAgICAvLyBMaXN0ZW4gZ3JhcGhxbCBzdGFydCAob3IgcmVzdGFydClcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5ncmFwaHFsLnN0b3BTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQgJiYgdGhpcy5pc0xvZ2luKCkpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gUmVzdGFydGluZywgdG8gcmV0cnkgdG8gYXV0aGVudGljYXRlLi4uJyk7XG4gICAgICAgICAgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgICBhd2FpdCB0aGlzLmxpc3RlblNldHRpbmdzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYWRBdXRoVG9rZW4gPSB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoQmFzaWMgPSB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoID0gaGFkQXV0aFRva2VuIHx8IGhhZEF1dGhCYXNpYztcbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgIGlmIChoYWRBdXRoKSB7XG4gICAgICB0aGlzLm9uTG9nb3V0Lm5leHQoKTtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgaWYgKGhhZEF1dGhUb2tlbikgdGhpcy5vbkF1dGhUb2tlbkNoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFkQXV0aEJhc2ljKSB0aGlzLm9uQXV0aEJhc2ljQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBpc0xvZ2luKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLl9jYWNoZS5wdWJrZXkgJiYgdGhpcy5fY2FjaGUubG9hZGVkKTtcbiAgfVxuXG4gIGlzQXV0aCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5fY2FjaGUucHVia2V5ICYmIHRoaXMuX2NhY2hlLmtleXBhaXIgJiYgdGhpcy5fY2FjaGUua2V5cGFpci5zZWNyZXRLZXkpO1xuICB9XG5cbiAgaGFzTWluUHJvZmlsZSh1c2VyUHJvZmlsZTogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEUgb3IgVEVNUE9SQVJZXG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnB1YmtleSB8fFxuICAgICAgKHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUgJiYgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLlRFTVBPUkFSWSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIFBlcnNvblV0aWxzLmhhc1VwcGVyT3JFcXVhbHNQcm9maWxlKHRoaXMuX2RhdGEucHJvZmlsZXMsIHVzZXJQcm9maWxlKTtcbiAgfVxuXG4gIGhhc0V4YWN0UHJvZmlsZShsYWJlbDogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEUgb3IgVEVNUE9SQVJZXG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnB1YmtleSB8fFxuICAgICAgKHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUgJiYgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLlRFTVBPUkFSWSkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEucHJvZmlsZXMuc29tZShwcm9maWxlID0+IHByb2ZpbGUgPT09IGxhYmVsKTtcbiAgfVxuXG4gIGhhc1Byb2ZpbGVBbmRJc0VuYWJsZSh1c2VyUHJvZmlsZTogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEVcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8IHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgdXNlclByb2ZpbGUpO1xuICB9XG5cbiAgaXNBZG1pbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQcm9maWxlQW5kSXNFbmFibGUoJ0FETUlOJyk7XG4gIH1cblxuICBpc1N1cGVydmlzb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvZmlsZUFuZElzRW5hYmxlKCdTVVBFUlZJU09SJyk7XG4gIH1cblxuICBpc1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvZmlsZUFuZElzRW5hYmxlKCdVU0VSJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHBhcmFtIG1vZGVcbiAgICovXG4gIGlzVXNhZ2VNb2RlKG1vZGU6IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzVXNhZ2VNb2RlKG1vZGUpO1xuICB9XG5cbiAgaXNPbmx5R3Vlc3QoKTogYm9vbGVhbiB7XG4gICAgLy8gU2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRSBvciBURU1QT1JBUllcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8XG4gICAgICAodGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSAmJiB0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBQcm9maWxlIGxlc3MgdGhlbiB1c2VyXG4gICAgcmV0dXJuICFQZXJzb25VdGlscy5oYXNVcHBlck9yRXF1YWxzUHJvZmlsZSh0aGlzLl9kYXRhLnByb2ZpbGVzLCAnVVNFUicpO1xuICB9XG5cbiAgY2FuVXNlcldyaXRlRGF0YUZvckRlcGFydG1lbnQocmVjb3JkZXJEZXBhcnRtZW50OiBSZWZlcmVudGlhbCB8IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChSZWZlcmVudGlhbFV0aWxzLmlzRW1wdHkocmVjb3JkZXJEZXBhcnRtZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNBZG1pbigpO1xuICAgIH1cblxuICAgIC8vIFNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEVcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8IHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fZGF0YS5kZXBhcnRtZW50IHx8ICF0aGlzLl9kYXRhLmRlcGFydG1lbnQuaWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignVXNlciBhY2NvdW50IGhhcyBubyBkZXBhcnRtZW50ICEgVW5hYmxlIHRvIGNoZWNrIHdyaXRlIHJpZ2h0IGFnYWluc3QgcmVjb3JkZXJEZXBhcnRtZW50Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2FtZSByZWNvcmRlciBkZXBhcnRtZW50OiBPSywgdXNlciBjYW4gd3JpdGVcbiAgICBpZiAodGhpcy5fZGF0YS5kZXBhcnRtZW50LmlkID09PSByZWNvcmRlckRlcGFydG1lbnQuaWQpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gRWxzZSwgY2hlY2sgaWYgc3VwZXJ2aXNvciAob3IgbW9yZSlcbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgJ1NVUEVSVklTT1InKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKGRhdGE6IFJlZ2lzdGVyRGF0YSk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICh0aGlzLmlzTG9naW4oKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIGFscmVhZHkgbG9naW4uIFBsZWFzZSBsb2dvdXQgYmVmb3JlIHJlZ2lzdGVyLicpO1xuICAgIH1cbiAgICBpZiAoIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCB1c2VybmFtZSBvciBwYXNzd29yZCcpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gUmVnaXN0ZXIgbmV3IHVzZXIgYWNjb3VudC4uLicsIGRhdGEuYWNjb3VudCk7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gZmFsc2U7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBrZXlwYWlyID0gYXdhaXQgQ3J5cHRvU2VydmljZS5zY3J5cHRLZXlwYWlyKGRhdGEudXNlcm5hbWUsIGRhdGEucGFzc3dvcmQpO1xuICAgICAgZGF0YS5hY2NvdW50LnB1YmtleSA9IEJhc2U1OC5lbmNvZGUoa2V5cGFpci5wdWJsaWNLZXkpO1xuXG4gICAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgICAgZGF0YS5hY2NvdW50LnNldHRpbmdzID0gZGF0YS5hY2NvdW50LnNldHRpbmdzIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgIGRhdGEuYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUgPSB0aGlzLnNldHRpbmdzLmxvY2FsZTtcbiAgICAgIGRhdGEuYWNjb3VudC5zZXR0aW5ncy5sYXRMb25nRm9ybWF0ID0gdGhpcy5zZXR0aW5ncy5sYXRMb25nRm9ybWF0O1xuICAgICAgZGF0YS5hY2NvdW50LnNldHRpbmdzLmNvbnRlbnQgPSBkYXRhLmFjY291bnQuc2V0dGluZ3MuY29udGVudCB8fCB7fTtcbiAgICAgIGRhdGEuYWNjb3VudC5kZXBhcnRtZW50LmlkID0gZGF0YS5hY2NvdW50LmRlcGFydG1lbnQuaWQgfHwgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0RGVwYXJ0bWVudElkO1xuXG4gICAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0ga2V5cGFpcjtcbiAgICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCB0aGlzLnNhdmVSZW1vdGVseShkYXRhLmFjY291bnQsIGtleXBhaXIpO1xuXG4gICAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgICAgYWNjb3VudC5hdmF0YXIgPSBhY2NvdW50LmF2YXRhciB8fCAodGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsICsgREVGQVVMVF9BVkFUQVJfSU1BR0UpO1xuICAgICAgdGhpcy5fY2FjaGUubWFpblByb2ZpbGUgPSBQZXJzb25VdGlscy5nZXRNYWluUHJvZmlsZShhY2NvdW50LnByb2ZpbGVzKTtcblxuICAgICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBhY2NvdW50LnB1YmtleTtcblxuICAgICAgLy8gVHJ5IHRvIGF1dGggb24gcG9kXG4gICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZShkYXRhKTtcblxuICAgICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuXG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgICAgLy8gRW1pdCBldmVudHNcbiAgICAgIHRoaXMub25Mb2dpbi5uZXh0KHRoaXMuX2RhdGEpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgICAvLyBMaXN0ZW4gcmVtb3RlIGNoYW5nZXNcbiAgICAgIGlmICh0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzKSB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGF1dGhlbnRpY2F0ZShkYXRhPzogQXV0aERhdGEpIHtcbiAgICAvLyBXYWl0IHRoZSBhdXRoIHRva2VuLCB0aGVuIGNvbnRpbnVlXG4gICAgY29uc3QgdG9rZW5UeXBlID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX3Rva2VuVHlwZSQpO1xuXG4gICAgLy8gQmFzaWMgYXV0aFxuICAgIGlmICh0b2tlblR5cGUgPT09ICdiYXNpYycgfHwgdG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykge1xuXG4gICAgICAvLyBHZW5lcmF0ZSB0aGUgYXV0aEJhc2ljLCBpZiB1c2VkXG4gICAgICBpZiAoIXRoaXMuX2NhY2hlLmF1dGhCYXNpYykge1xuICAgICAgICAvLyBTa2lwIGlmIHRva2VuIGFscmVhZHkgcHJvdmlkZWRcbiAgICAgICAgaWYgKCEodGhpcy5fY2FjaGUuYXV0aFRva2VuICYmIHRva2VuVHlwZSA9PT0gJ2Jhc2ljLWFuZC10b2tlbicpKSB7XG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLnVzZXJuYW1lIHx8ICFkYXRhLnBhc3N3b3JkKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdXNlcm5hbWUgYW5kIHBhc3N3b3JkJyk7XG4gICAgICAgICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gQ3J5cHRvU2VydmljZS5lbmNvZGVCYXNlNjQoYCR7ZGF0YS51c2VybmFtZX06JHtkYXRhLnBhc3N3b3JkfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9uQXV0aEJhc2ljQ2hhbmdlLm5leHQodGhpcy5fY2FjaGUuYXV0aEJhc2ljKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB0aGUgYXV0aFRva2VuLCBpZiB1c2VkXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gJ3Rva2VuJyB8fCB0b2tlblR5cGUgPT09ICdiYXNpYy1hbmQtdG9rZW4nKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZUFuZEdldFRva2VuKHRoaXMuX2NhY2hlLmF1dGhUb2tlbik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBOZXZlciBhdXRoZW50aWNhdGUsIG9yIG5vdCByZWFkeSBmb3Igb2ZmbGluZSBtb2RlID0+IGV4aXRcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcmdldCBhdXRoQmFzaWMsIHRvIHN3aXRjaCB0byBhdXRoVG9rZW5cbiAgICBpZiAodG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykge1xuICAgICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9naW4oZGF0YTogQXV0aERhdGEpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCB1c2VybmFtZSBvciBwYXNzd29yZCcpO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIExvZ2luLi4uJyk7XG5cbiAgICBsZXQga2V5cGFpcjtcbiAgICB0cnkge1xuICAgICAga2V5cGFpciA9IGF3YWl0IENyeXB0b1NlcnZpY2Uuc2NyeXB0S2V5cGFpcihkYXRhLnVzZXJuYW1lLCBkYXRhLnBhc3N3b3JkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlVOS05PV05fRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5TQ1JZUFRfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gU3RvcmUgcHVia2V5K2tleXBhaXJcbiAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBCYXNlNTguZW5jb2RlKGtleXBhaXIucHVibGljS2V5KTtcbiAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0ga2V5cGFpcjtcblxuICAgIC8vIFRyeSB0byBsb2FkIHByZXZpb3VzIHRva2VuXG4gICAgbGV0IHByZXZpb3VzVG9rZW46IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoVE9LRU5fU1RPUkFHRV9LRVkpO1xuICAgIHByZXZpb3VzVG9rZW4gPSBwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4uc3RhcnRzV2l0aCh0aGlzLl9jYWNoZS5wdWJrZXkpICYmIHByZXZpb3VzVG9rZW4gfHwgbnVsbDtcblxuICAgIC8vIE9mZmxpbmUgbW9kZVxuICAgIGNvbnN0IG9mZmxpbmUgPSB0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkgJiYgKHRoaXMubmV0d29yay5vZmZsaW5lIHx8IGRhdGEub2ZmbGluZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKG9mZmxpbmUpICB7XG4gICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBwcmV2aW91c1Rva2VuO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgbmV0d29yayBpZiBzZXQgYXMgb2ZmbGluZVxuICAgICAgdGhpcy5uZXR3b3JrLnNldEZvcmNlT2ZmbGluZSh0cnVlLCB7c2hvd1RvYXN0OiBmYWxzZX0pO1xuICAgICAgY29uc29sZS5pbmZvKGBbYWNjb3VudF0gTG9naW4gW09LXSB7cHVia2V5OiAke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9fSwge29mZmxpbmU6IHRydWV9YCk7XG4gICAgfVxuXG4gICAgLy8gT25saW5lIG1vZGU6IHRyeSB0byBhdXRoIG9uIHBvZFxuICAgIGVsc2Uge1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE5ldmVyIGF1dGhlbnRpY2F0ZSwgb3Igbm90IHJlYWR5IGZvciBvZmZsaW5lIG1vZGUgPT4gZXhpdFxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCBhY2NvdW50IGRhdGFcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSh7b2ZmbGluZSwgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknfSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGFjY291bnQgbm90IGZvdW5kLCBjaGVjayBpZiBlbWFpbCBpcyB2YWxpZFxuICAgICAgaWYgKGVyciAmJiArKGVyci5jb2RlKSA9PT0gRXJyb3JDb2Rlcy5MT0FEX0FDQ09VTlRfRVJST1IpIHtcblxuICAgICAgICAvLyBDaGVjayBlbWFpbCBleGlzdHNcbiAgICAgICAgaWYgKGRhdGEudXNlcm5hbWUuaW5kZXhPZignQCcpICE9PSAtMSkge1xuICAgICAgICAgIGxldCBpc0VtYWlsRXhpc3RzO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpc0VtYWlsRXhpc3RzID0gYXdhaXQgdGhpcy5pc0VtYWlsRXhpc3RzKGRhdGEudXNlcm5hbWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKG90aGVyRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycjsgLy8gcmVzZW5kIHRoZSBmaXJzdCBlcnJvclxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVtYWlsIG5vdCBleGlzdHMgKG5vIGFjY291bnQpXG4gICAgICAgICAgaWYgKCFpc0VtYWlsRXhpc3RzKSB7XG4gICAgICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVU5LTk9XTl9BQ0NPVU5UX0VNQUlMLCBtZXNzYWdlOiAnRVJST1IuVU5LTk9XTl9BQ0NPVU5UX0VNQUlMJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtYWlsIGV4aXN0cywgc28gZXJyb3IgPSAnYmFkIHBhc3N3b3JkJ1xuICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuQkFEX1BBU1NXT1JELCBtZXNzYWdlOiAnRVJST1IuQkFEX1BBU1NXT1JEJyB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7IC8vIHJlc2VuZCB0aGUgZmlyc3QgZXJyb3JcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3RvcmUgdG8gbG9jYWwgc3RvcmFnZVxuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnQgdG8gb2JzZXJ2ZXJzXG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHRoaXMuc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZChvcHRzPzoge3Nob3dUb2FzdD86IGJvb2xlYW59KTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjaGVjayBhY2NvdW50IGluIG9mZmxpbmUgbW9kZScpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gUmVsb2FkaW5nIGFjY291bnQuLi5gKTtcbiAgICBjb25zdCB3YXNMb2dpbiA9IHRoaXMuaXNMb2dpbigpO1xuXG4gICAgdHJ5IHtcblxuICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuXG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gUmVsb2FkaW5nIGFjY291bnQgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgICAgLy8gRW1pdCBsb2dpbiBldmVudCB0byBzdWJzY3JpYmVyc1xuICAgICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdBQ0NPVU5ULklORk8uUkVMT0FERUQnLCB0eXBlOiAnaW5mbyd9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ2Fubm90IHJlbG9hZCBidXQgd2FzIGxvZ2luOiBmb3JjZSB0byBsb2dvdXRcbiAgICAgIGlmICh3YXNMb2dpbiAmJiAhdGhpcy5pc0xvZ2luKCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIFJlbG9hZGluZyBhY2NvdW50IGZhaWxlZC4gV2lsbCBmb3JjZSBsb2dvdXQuLi5gLCBlcnJvcik7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50LCB0byB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRcbiAgICovXG4gIGFzeW5jIHNhdmUoYWNjb3VudDogQWNjb3VudCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuICAgIGlmICh0aGlzLl9jYWNoZS5wdWJrZXkgIT09IGFjY291bnQucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ05vdCB1c2VyIGFjY291bnQnKTtcblxuICAgIGFjY291bnQgPSBhd2FpdCB0aGlzLnNhdmVSZW1vdGVseShhY2NvdW50LCB0aGlzLl9jYWNoZS5rZXlwYWlyKTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuXG4gICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIFNhdmUgbG9jYWxseSAoaW4gc3RvcmFnZSlcbiAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAvLyBTZW5kIGV2ZW50XG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBjb25zdCBoYWRBdXRoVG9rZW4gPSB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoQmFzaWMgPSB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgJiYgdHJ1ZTtcbiAgICBjb25zdCBwdWJrZXkgPSB0aGlzLl9jYWNoZSAmJiB0aGlzLl9jYWNoZS5wdWJrZXk7XG5cbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBkYXRhIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShQVUJLRVlfU1RPUkFHRV9LRVkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFRPS0VOX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShBQ0NPVU5UX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgcHVia2V5ICYmIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSArICcjJyArIHB1YmtleSkgfHwgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gT2ZmbGluZSBmZWF0dXJlcyBlbmFibGU6IG5lZWQgdG8ga2VlcCBzb21lIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIC8vIEFsd2F5cyByZW1vdmUgb25seSBzZWNyZXQga2V5XG4gICAgICAvLyBCdXQga2VlcDpcbiAgICAgIC8vIC0gYWNjb3VudCBieSBwdWJrZXlcbiAgICAgIC8vIC0gYXV0aCB0b2tlblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFBVQktFWV9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gcGFnZSBoaXN0b3J5LCBpbiBsb2NhbCBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuY2xlYXJQYWdlSGlzdG9yeSgpO1xuXG4gICAgLy8gTm90aWZ5IG9ic2VydmVyc1xuICAgIHRoaXMub25Mb2dvdXQubmV4dCgpO1xuICAgIGlmIChoYWRBdXRoVG9rZW4pIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIGlmIChoYWRBdXRoQmFzaWMpIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMub25DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkKG9wdHM/OiB7XG4gICAgb2ZmbGluZT86IGJvb2xlYW47XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8QWNjb3VudCB8IHVuZGVmaW5lZD4ge1xuXG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBMb2FkaW5nIGFjY291bnQuLi5gKTtcbiAgICBsZXQganNvbjogYW55O1xuXG4gICAgLy8gTG9hZCBsb2NhbGx5XG4gICAgY29uc3Qgb2ZmbGluZSA9IHRoaXMubmV0d29yay5vZmZsaW5lXG4gICAgICAmJiAoIW9wdHMgfHwgKG9wdHMuZmV0Y2hQb2xpY3kgIT09ICduZXR3b3JrLW9ubHknICYmIG9wdHMuZmV0Y2hQb2xpY3kgIT09ICduby1jYWNoZScpKVxuICAgICAgfHwgKG9wdHMgJiYgb3B0cy5vZmZsaW5lID09PSB0cnVlKTtcbiAgICBpZiAob2ZmbGluZSkge1xuICAgICAganNvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoQUNDT1VOVF9TVE9SQUdFX0tFWSk7XG4gICAgICBqc29uID0ganNvbiAmJiAodHlwZW9mIGpzb24gPT09ICdzdHJpbmcnKSAmJiBKU09OLnBhcnNlKGpzb24pIHx8IGpzb247XG4gICAgICBqc29uID0ganNvbiAmJiB0aGlzLl9jYWNoZS5wdWJrZXkgJiYgKGpzb24ucHVia2V5ID09PSB0aGlzLl9jYWNoZS5wdWJrZXkpICYmIGpzb24gfHwgbnVsbDtcbiAgICAgIGlmICghanNvbiAmJiB0aGlzLl9jYWNoZS5wdWJrZXkpIHtcbiAgICAgICAganNvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoQUNDT1VOVF9TVE9SQUdFX0tFWSArICcjJyArIHRoaXMuX2NhY2hlLnB1YmtleSk7XG4gICAgICAgIGpzb24gPSBqc29uICYmICh0eXBlb2YganNvbiA9PT0gJ3N0cmluZycpICYmIEpTT04ucGFyc2UoanNvbikgfHwganNvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIHJlbW90ZWx5XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgICBxdWVyeTogTG9hZFF1ZXJ5LFxuICAgICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkxPQURfQUNDT1VOVF9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQUNDT1VOVF9FUlJPUicgfSxcbiAgICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSB8fCAnbm8tY2FjaGUnIHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBqc29uID0gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoanNvbikge1xuICAgICAgY29uc3QgYWNjb3VudCA9IEFjY291bnQuZnJvbU9iamVjdChqc29uKTtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGFjY291bnQpO1xuICAgICAgIHJldHVybiBhY2NvdW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2FjY291bnRdIEFjY291bnQgbm90IGZvdW5kICFgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZW1haWwgaXMgYXZhaWxhYmxlIGZvciBuZXcgYWNjb3VudCByZWdpc3RyYXRpb24uXG4gICAqIFRocm93IGFuIGVycm9yIGlmIG5vdCBhdmFpbGFibGVcbiAgICpcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqL1xuICBhc3luYyBjaGVja0VtYWlsQXZhaWxhYmxlKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0VtYWlsRXhpc3RzID0gYXdhaXQgdGhpcy5pc0VtYWlsRXhpc3RzKGVtYWlsKTtcbiAgICBpZiAoaXNFbWFpbEV4aXN0cykge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkVNQUlMX0FMUkVBRFlfUkVHSVNURVJFRCwgbWVzc2FnZTogJ0VSUk9SLkVNQUlMX0FMUkVBRFlfUkVHSVNURVJFRCcgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZW1haWwgaXMgZXhpc3RzIGluIHNlcnZlci5cbiAgICpcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqL1xuICBhc3luYyBpc0VtYWlsRXhpc3RzKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIENoZWNraW5nIGlmIHsnICsgZW1haWwgKyAnfSBleGlzdHMuLi4nKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBpc0VtYWlsRXhpc3RzOiBib29sZWFuIH0sIElzRW1haWxFeGlzdHNWYXJpYWJsZXM+KHtcbiAgICAgIHF1ZXJ5OiBJc0VtYWlsRXhpc3RzUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGhhc2g6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gRW1haWwgZXhpc3Q6ICcgKyAoZGF0YSAmJiBkYXRhLmlzRW1haWxFeGlzdHMpKTtcblxuICAgIHJldHVybiBkYXRhICYmIGRhdGEuaXNFbWFpbEV4aXN0cztcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb25maXJtYXRpb25FbWFpbChlbWFpbDogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCB0aGlzLnNldHRpbmdzLmxvY2FsZTtcbiAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gU2VuZGluZyBjb25maXJtYXRpb24gZW1haWwgdG8geycgKyBlbWFpbCArICd9IHdpdGggbG9jYWxlIHsnICsgbG9jYWxlICsgJ30uLi4nKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPGJvb2xlYW4+KHtcbiAgICAgIG11dGF0aW9uOiBTZW5kQ29uZmlybUVtYWlsTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGxvY2FsZVxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuU0VOVF9DT05GSVJNQVRJT05fRU1BSUxfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuU0VOVF9BQ0NPVU5UX0NPTkZJUk1BVElPTl9FTUFJTF9GQUlMRUQnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb25maXJtRW1haWwoZW1haWw6IFN0cmluZywgY29kZTogU3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gU2VuZG5nIGNvbmZpcm0gcmVxdWVzdCBmb3IgZW1haWwgeycgKyBlbWFpbCArICd9IHdpdGggY29kZSB7JyArIGNvZGUgKyAnfS4uLicpO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGNvbmZpcm1BY2NvdW50RW1haWw6IGJvb2xlYW4gfT4oe1xuICAgICAgbXV0YXRpb246IENvbmZpcm1FbWFpbE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICBjb2RlXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5DT05GSVJNX0VNQUlMX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkNPTkZJUk1fQUNDT1VOVF9FTUFJTF9GQUlMRUQnXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcyAmJiByZXMuY29uZmlybUFjY291bnRFbWFpbDtcbiAgfVxuXG4gIGxpc3RlbkNoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBTdWJzY3JpcHRpb24ge1xuICAgIGlmICh0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzKSByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigpOyAvLyBBbHJlYWR5IHN0YXJ0ZWQ6IHNraXBcblxuICAgIHJldHVybiB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcyhvcHRzKTtcbiAgfVxuXG4gIGdldCBhZGRpdGlvbmFsRmllbGRzKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgJGFkZGl0aW9uYWxGaWVsZHMoKTogT2JzZXJ2YWJsZTxGb3JtRmllbGREZWZpbml0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRBZGRpdGlvbmFsRmllbGQoa2V5OiBzdHJpbmcpOiBGb3JtRmllbGREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMuZ2V0VmFsdWUoKS5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gIH1cblxuICByZWdpc3RlckFkZGl0aW9uYWxGaWVsZChmaWVsZDogRm9ybUZpZWxkRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLmdldFZhbHVlKCk7XG4gICAgaWYgKCEhdmFsdWVzLmZpbmQoZiA9PiBmLmtleSA9PT0gZmllbGQua2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFjY291bnQgZmllbGQge2tleTogJHtmaWVsZC5rZXl9fSBhbHJlYWR5IGRlZmluZS5gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gRm91bmQgYWRkaXRpb25hbCBhY2NvdW50J3MgZmllbGQge2tleTogJHtmaWVsZC5rZXl9fWApO1xuICAgIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLm5leHQodmFsdWVzLmNvbmNhdChmaWVsZCkpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCByZXNldERhdGEoKSB7XG4gICAgdGhpcy5zdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5wZXJzb24gPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLmRlcGFydG1lbnQgPSBudWxsO1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgQWNjb3VudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWREYXRhKG9wdHM/OiB7XG4gICAgb2ZmbGluZT86IGJvb2xlYW47XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuXG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjb3VudCA9IChhd2FpdCB0aGlzLmxvYWQob3B0cykpIHx8IG5ldyBBY2NvdW50KCk7XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0c1xuICAgICAgYWNjb3VudC5hdmF0YXIgPSBhY2NvdW50LmF2YXRhciB8fCAodGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsICsgREVGQVVMVF9BVkFUQVJfSU1BR0UpO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncyA9IGFjY291bnQuc2V0dGluZ3MgfHwgbmV3IFVzZXJTZXR0aW5ncygpO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUgPSBhY2NvdW50LnNldHRpbmdzLmxvY2FsZSB8fCB0aGlzLnNldHRpbmdzLmxvY2FsZTtcbiAgICAgIGFjY291bnQuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCA9IGFjY291bnQuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCB8fCB0aGlzLnNldHRpbmdzLmxhdExvbmdGb3JtYXQgfHwgJ0RETU0nO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncy5jb250ZW50ID0gYWNjb3VudC5zZXR0aW5ncy5jb250ZW50IHx8IHt9O1xuXG4gICAgICAvLyBSZWFkIG1haW4gcHJvZmlsZVxuICAgICAgdGhpcy5fY2FjaGUubWFpblByb2ZpbGUgPSBQZXJzb25VdGlscy5nZXRNYWluUHJvZmlsZShhY2NvdW50LnByb2ZpbGVzKTtcblxuICAgICAgLy8gVXBkYXRlLCBpbnN0ZWFkIG9mIHJlcGxhY2UgaXRcbiAgICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICAgIHRoaXMuX2RhdGEuZnJvbU9iamVjdChhY2NvdW50KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9kYXRhID0gYWNjb3VudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IHRydWU7XG5cbiAgICAgIC8vIEFwcGx5IHNldHRpbmdzLCBmb3VuZCBpbiByZW1vdGUgYWNjb3VudFxuICAgICAgaWYgKGFjY291bnQuc2V0dGluZ3MpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgLi4udGhpcy5zZXR0aW5ncy5zZXR0aW5ncyxcbiAgICAgICAgICAuLi5hY2NvdW50LnNldHRpbmdzLmFzTG9jYWxTZXR0aW5ncygpXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseShzZXR0aW5ncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICBpZiAoZXJyb3IuY29kZSAmJiBlcnJvci5tZXNzYWdlKSB0aHJvdyBlcnJvcjtcblxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuTE9BRF9BQ0NPVU5UX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuTE9BRF9BQ0NPVU5UX0VSUk9SJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbGlzdGVuU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPntcbiAgICAvLyBXaGVuIHNldHRpbmdzIGNoYW5nZWQ6IHNhdmUgaXQgcmVtb3RlbHlcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZXR0aW5ncy5vbkNoYW5nZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNMb2dpbigpICYmIHRoaXMubmV0d29yay5vbmxpbmUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShzZXR0aW5ncyA9PiB0aGlzLnNhdmVMb2NhbFNldHRpbmdzUmVtb3RlbHkoc2V0dGluZ3MpKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxBY2NvdW50IHwgdW5kZWZpbmVkPiB7XG5cbiAgICAvLyBSZXN0b3JlIGZyb20gc3RvcmFnZVxuICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQoUFVCS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQoVE9LRU5fU1RPUkFHRV9LRVkpLFxuICAgICAgdGhpcy5zdG9yYWdlLmdldChTRUNLRVlfU1RPUkFHRV9LRVkpXG4gICAgXSk7XG4gICAgbGV0IHB1YmtleSA9IHZhbHVlc1swXTtcbiAgICBsZXQgdG9rZW4gPSB2YWx1ZXNbMV07XG4gICAgY29uc3Qgc2Vja2V5ID0gdmFsdWVzWzJdO1xuXG4gICAgLy8gREVWIG9ubHkgLSBhdXRoIGJ5IHRva2VuXG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24gJiYgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QXV0aFZhbHVlcz8udG9rZW4pIHtcbiAgICAgIHRva2VuID0gdG9rZW4gfHwgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QXV0aFZhbHVlcy50b2tlbjtcbiAgICAgIHB1YmtleSA9IHB1YmtleSB8fCB0b2tlbj8uc3BsaXQoJzonLCAyKVswXTtcbiAgICB9XG5cbiAgICAvLyBRdWl0IGlmIG5vIHB1YmtleSAobm90IGxvZ2dlZClcbiAgICBpZiAoIXB1YmtleSkgcmV0dXJuO1xuXG4gICAgLy8gUXVpdCBpZiBjb3VsZCBub3QgYXV0aCBvbiBwb2RcbiAgICBjb25zdCBjYW5SZW1vdGVBdXRoID0gdG9rZW4gfHwgc2Vja2V5IHx8IGZhbHNlO1xuICAgIGlmICghY2FuUmVtb3RlQXV0aCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZXN0b3JhdGlvbi4uLmApO1xuXG4gICAgdGhpcy5fY2FjaGUuYXV0aFRva2VuID0gdG9rZW47XG4gICAgdGhpcy5fY2FjaGUucHVia2V5ID0gcHVia2V5O1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBzZWNrZXkgJiYge1xuICAgICAgcHVibGljS2V5OiBCYXNlNTguZGVjb2RlKHB1YmtleSksXG4gICAgICBzZWNyZXRLZXk6IEJhc2U1OC5kZWNvZGUoc2Vja2V5KVxuICAgIH0gfHwgbnVsbDtcblxuICAgIC8vIE9ubGluZSBtb2RlOiB0cnkgdG8gY29ubmVjdCB0byBwb2RcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9ubGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgIXRoaXMuX2NhY2hlLmF1dGhCYXNpYykgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBPZmZsaW5lIGZlYXR1cmUgYXJlIGVuYWJsZTogY29udGludWUgaW4gb2ZmbGluZSBtb2RlXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBVbmFibGUgdG8gYXV0aGVudGljYXRlIG9uIHBvZDogZm9yY2luZyBvZmZsaW5lIG1vZGUnKTtcbiAgICAgICAgICB0aGlzLm5ldHdvcmsuc2V0Rm9yY2VPZmZsaW5lKHRydWUsIHtzaG93VG9hc3Q6IGZhbHNlfSk7XG4gICAgICAgICAgLy8gQ29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBvZmZsaW5lIGZlYXR1cmVzIGVuYWJsZSAoPW9mZmxpbmUgbW9kZSBub3QgYWxsb3dlZClcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCB0aGUgYWNjb3VudCwgZnJvbSBwdWJrZXlcbiAgICBsZXQganNvbkFjY291bnQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7cHVia2V5fWApO1xuICAgIGlmICghanNvbkFjY291bnQpIHtcbiAgICAgIC8vIFRyeSB1c2luZyB0aGUgb2xkIHN0b3JhZ2Uga2V5XG4gICAgICBjb25zdCBhY2NvdW50U3RyID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChBQ0NPVU5UX1NUT1JBR0VfS0VZKTtcbiAgICAgIGpzb25BY2NvdW50ID0gYWNjb3VudFN0ciAmJiAoKHR5cGVvZiBhY2NvdW50U3RyID09PSAnc3RyaW5nJykgJiYgSlNPTi5wYXJzZShqc29uQWNjb3VudCkgfHwgYWNjb3VudFN0cik7XG4gICAgfVxuXG4gICAgLy8gSW52YWxpZCBhY2NvdW50OiBkbyBub3QgdXNlIGl0XG4gICAgaWYgKCFqc29uQWNjb3VudCB8fCBqc29uQWNjb3VudC5wdWJrZXkgIT09IHB1YmtleSkge1xuXG4gICAgICAvLyBERVYgb25seTogY3JlYXRlIGEgZmFrZSBhY2NvdW50IHdpdGggZ2l2ZW4gdXNlcm5hbWVcbiAgICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uICYmIHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEF1dGhWYWx1ZXMudXNlcm5hbWUpIHtcbiAgICAgICAgY29uc3QgdXNlcm5hbWUgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRBdXRoVmFsdWVzLnVzZXJuYW1lO1xuICAgICAgICBqc29uQWNjb3VudCA9IHtwdWJrZXksIHVzZXJuYW1lLCBmaXJzdE5hbWU6IHVzZXJuYW1lLCBsYXN0TmFtZTogdXNlcm5hbWV9O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gdG8gZW50aXR5XG4gICAgY29uc3QgYWNjb3VudCA9IEFjY291bnQuZnJvbU9iamVjdChqc29uQWNjb3VudCk7XG5cbiAgICAvLyBVcGRhdGUgZGF0YVxuICAgIHRoaXMuX2RhdGEgPSBhY2NvdW50O1xuICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoYWNjb3VudC5wcm9maWxlcyk7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgcmVzdG9yYXRpb24gW09LXSB7cHVia2V5OiAke3B1YmtleS5zdWJzdHIoMCwgOCl9fSwge3Byb2ZpbGU6ICR7dGhpcy5fY2FjaGUubWFpblByb2ZpbGV9fWApO1xuXG4gICAgcmV0dXJuIGFjY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhY2NvdW50IGludG8gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlTG9jYWxseSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQnKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBhY2NvdW50IHske3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHJpbmcoMCwgNil9fSBpbiBsb2NhbCBzdG9yYWdlLi4uYCk7XG5cbiAgICAvLyBDb252ZXJ0IGFjY291bnQgdG8ganNvblxuICAgIGNvbnN0IGpzb24gPSB0aGlzLl9kYXRhLmFzT2JqZWN0KHtrZWVwVHlwZW5hbWU6IHRydWV9KTtcbiAgICBjb25zdCBzZWNrZXkgPSB0aGlzLl9jYWNoZS5rZXlwYWlyICYmIHRoaXMuX2NhY2hlLmtleXBhaXIuc2VjcmV0S2V5ICYmIEJhc2U1OC5lbmNvZGUodGhpcy5fY2FjaGUua2V5cGFpci5zZWNyZXRLZXkpIHx8IG51bGw7XG5cbiAgICAvLyBDb252ZXJ0IGF2YXRhciBVUkwgdG8gZGF0YVVybCAoZS5nLiAnZGF0YTppbWFnZS9wbmc6PGJhc2U2NCBjb250ZW50PicpXG4gICAgY29uc3QgaGFzQXZhdGFyVXJsID0ganNvbi5hdmF0YXIgJiYgIWpzb24uYXZhdGFyLmVuZHNXaXRoKERFRkFVTFRfQVZBVEFSX0lNQUdFKSAmJlxuICAgICAgKGpzb24uYXZhdGFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCAoanNvbi5hdmF0YXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkpO1xuICAgIGlmIChoYXNBdmF0YXJVcmwgJiYgdGhpcy5uZXR3b3JrLm9ubGluZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlLmdldEltYWdlKGpzb24uYXZhdGFyLCB7XG4gICAgICAgIHRodW1ibmFpbDogdHJ1ZSxcbiAgICAgICAgb3V0cHV0VHlwZTogJ2RhdGFVcmwnXG4gICAgICB9KVxuICAgICAgICAudGhlbihkYXRhVXJsID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVVybCAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEltYWdlIGZldGNoZWQ6ICcsIGRhdGFVcmwuc3Vic3RyaW5nKDAsIDUwKSk7XG5cbiAgICAgICAgICAvLyBUT0RPOiBtYWtlIHN1cmUgdG8gZGlzcGxheSBCYXNlNjQgaW1hZ2UgaW4gdGhlIG1lbnUgdG9wIGhlYWRlclxuICAgICAgICAgIC8vanNvbkFjY291bnQuYXZhdGFyID0gZGF0YVVybDtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIEVycm9yIHdoaWxlIGZldGNoaW5nIGltYWdlOiAke2pzb24uYXZhdGFyfTogJHtlcnJ9YCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoUFVCS0VZX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5wdWJrZXkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KFRPS0VOX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5hdXRoVG9rZW4pLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7dGhpcy5fY2FjaGUucHVia2V5fWAsIGpzb24pLFxuICAgICAgICAvLyBTZWNyZXQga2V5IChvcHRpb25hbClcbiAgICAgICAgc2Vja2V5ICYmIHRoaXMuc3RvcmFnZS5zZXQoU0VDS0VZX1NUT1JBR0VfS0VZLCBzZWNrZXkpIHx8IHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgLy8gUmVtb3ZlIG9sZCBzdG9yYWdlIGtleVxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEFDQ09VTlRfU1RPUkFHRV9LRVkpXG4gICAgICBdKTtcblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gQWNjb3VudCBzYXZlZCBpbiBsb2NhbCBzdG9yYWdlJyk7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2FjY291bnRdIEVycm9yIHdoaWxlIHNhdmluZyBhY2NvdW50IGxvY2FsbHk6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgfVxuICB9XG5cbiAgIGFzeW5jIHNhdmVMb2NhbFNldHRpbmdzUmVtb3RlbHkoc291cmNlOiBMb2NhbFNldHRpbmdzKXtcbiAgICAgaWYgKCFzb3VyY2UgfHwgIXRoaXMuaXNMb2dpbigpIHx8IHNvdXJjZS5hY2NvdW50SW5oZXJpdGFuY2UgPT09IGZhbHNlKSByZXR1cm47IC8vIFNraXBcbiAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudDtcblxuICAgICAvLyBNZXJnZSBsb2NhbCBzZXR0aW5ncyBpbnRvIGFjY291bnQncyBzZXR0aW5nc1xuICAgICBjb25zdCBzZXR0aW5ncyA9IFVzZXJTZXR0aW5ncy5mcm9tT2JqZWN0KGFjY291bnQuc2V0dGluZ3MpIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgY29uc3QgY2hhbmdlZCA9IHNldHRpbmdzLm1lcmdlKHNvdXJjZSwgWydsb2NhbGUnLCAnbGF0TG9uZ0Zvcm1hdCcsICdwcm9wZXJ0aWVzJ10pO1xuXG4gICAgIGlmICghY2hhbmdlZCkgcmV0dXJuOyAvLyBTa2lwIGlmIHVuY2hhbmdlZFxuXG4gICAgIC8vIFNhdmUgcmVtb3RlbHlcbiAgICAgdGhpcy5hY2NvdW50LnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgIGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzUmVtb3RlbHkoc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBhY2NvdW50XG4gICAqIEBwYXJhbSBrZXlQYWlyXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVJlbW90ZWx5KGFjY291bnQ6IEFjY291bnQsIGtleVBhaXI/OiBLZXlwYWlyKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgYWNjb3VudC5wdWJrZXkgPSBhY2NvdW50LnB1YmtleSB8fCAoa2V5UGFpciAmJiBCYXNlNTguZW5jb2RlKGtleVBhaXIucHVibGljS2V5KSk7XG4gICAgaWYgKCFhY2NvdW50LnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFjY291bnQgcHVia2V5Jyk7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBhY2NvdW50IHJlbW90ZWx5Li4uYCk7XG5cbiAgICBjb25zdCBpc05ldyA9IGlzTmlsKGFjY291bnQuaWQpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhbiB1cGRhdGU6IGdldCBleGlzdGluZyBhY2NvdW50J3MgdXBkYXRlRGF0ZSwgdG8gYXZvaWQgJ3ZlcnNpb24gZXJyb3InIHdoZW4gc2F2aW5nXG4gICAgaWYgKCFpc05ldykge1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50ID0gYXdhaXQgdGhpcy5sb2FkKHsgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknIH0pO1xuICAgICAgaWYgKCFleGlzdGluZ0FjY291bnQgfHwgIWV4aXN0aW5nQWNjb3VudC51cGRhdGVEYXRlKSB7XG4gICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5BQ0NPVU5UX05PVF9FWElTVFMsIG1lc3NhZ2U6ICdFUlJPUi5BQ0NPVU5UX05PVF9FWElTVFMnIH07XG4gICAgICB9XG4gICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoZXhpc3RpbmdBY2NvdW50LCBhY2NvdW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gYWNjb3VudC5hc09iamVjdChNSU5JRllfRU5USVRZX0ZPUl9QT0QpO1xuXG4gICAgLy8gVXNlciBub3QgYWxsb3cgdG8gY2hhbmdlIGhpcyBwcm9maWxlc1xuICAgIGRlbGV0ZSBqc29uLnByb2ZpbGVzO1xuXG4gICAgLy8gRXhlY3V0ZSBtdXRhdGlvblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IEFjY291bnQgfT4oe1xuICAgICAgbXV0YXRpb246IGlzTmV3ID8gQWNjb3VudE11dGF0aW9ucy5jcmVhdGUgOiBBY2NvdW50TXV0YXRpb25zLnNhdmUsXG4gICAgICB2YXJpYWJsZXM6IHsgZGF0YToganNvbiB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TQVZFX0FDQ09VTlRfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX0FDQ09VTlRfRVJST1InXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKGRhdGEsIGFjY291bnQpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZW1vdGVseSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIHJldHVybiBhY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgdXNlciBzZXR0aW5nc1xuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3NcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlU2V0dGluZ3NSZW1vdGVseShzZXR0aW5nczogVXNlclNldHRpbmdzKSB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBzZXR0aW5ncyByZW1vdGVseS4uLmApO1xuXG4gICAgY29uc3QganNvbiA9IHNldHRpbmdzLmFzT2JqZWN0KE1JTklGWV9FTlRJVFlfRk9SX1BPRCk7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogVXNlclNldHRpbmdzIH0+KHtcbiAgICAgIG11dGF0aW9uOiBBY2NvdW50TXV0YXRpb25zLnNhdmVTZXR0aW5ncyxcbiAgICAgIHZhcmlhYmxlczogeyBkYXRhOiBqc29uIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNBVkVfU0VUVElOR1NfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX1NFVFRJTkdTX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ29weSB1cGRhdGUgcHJvcGVydGllc1xuICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKGRhdGEsIHNldHRpbmdzKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNldHRpbmdzIHJlbW90ZWx5IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgLy8gU2F2ZSBpbnRvIGFjY291bnRcbiAgICBpZiAodGhpcy5hY2NvdW50KSB0aGlzLmFjY291bnQuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhdXRoZW50aWNhdGVBbmRHZXRUb2tlbih0b2tlbj86IHN0cmluZywgY291bnRlcj86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG5cbiAgICBpZiAoIWNvdW50ZXIpIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZC4uLicpO1xuXG4gICAgaWYgKGNvdW50ZXIgPiA0KSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBGYWlsZWQgdG8gYXV0aGVudGljYXRpb24gb24gcG9kIChhZnRlciAke2NvdW50ZXJ9IGF0dGVtcHRzKWApO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkFVVEhfU0VSVkVSX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuQVVUSF9TRVJWRVJfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdmFsaWRcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBhdXRoZW50aWNhdGU6IGJvb2xlYW4gfSwgeyB0b2tlbjogc3RyaW5nIH0+KHtcbiAgICAgICAgcXVlcnk6IEF1dGhRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICAgICBtZXNzYWdlOiAnRVJST1IuVU5BVVRIT1JJWkVEJ1xuICAgICAgICB9LFxuICAgICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRva2VuIGlzIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2ZXJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuYXV0aGVudGljYXRlKSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSB0b2tlblxuICAgICAgICB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodG9rZW4pO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZCBbT0tdIHtwdWJrZXk6ICcke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9J31gKTtcbiAgICAgICAgcmV0dXJuIHRva2VuOyAvLyByZXR1cm4gdGhlIHRva2VuXG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh3aWxsIHJldHJ5IHdpdGggYW5vdGhlciBjaGFsbGVuZ2UpXG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYSBuZXcgdG9rZW5cbiAgICBjb25zdCBjaGFsbGVuZ2VFcnJvciA9IHtcbiAgICAgIGNvZGU6IEVycm9yQ29kZXMuQVVUSF9DSEFMTEVOR0VfRVJST1IsXG4gICAgICBtZXNzYWdlOiAnRVJST1IuQVVUSF9DSEFMTEVOR0VfRVJST1InXG4gICAgfTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHtcbiAgICAgIGF1dGhDaGFsbGVuZ2U6IHtcbiAgICAgICAgcHVia2V5OiBzdHJpbmc7XG4gICAgICAgIGNoYWxsZW5nZTogc3RyaW5nO1xuICAgICAgICBzaWduYXR1cmU6IHN0cmluZztcbiAgICAgIH07XG4gICAgfT4oe1xuICAgICAgcXVlcnk6IEF1dGhDaGFsbGVuZ2VRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICBlcnJvcjogY2hhbGxlbmdlRXJyb3IsXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGNoYWxsZW5nZVxuICAgIGlmICghZGF0YSB8fCAhZGF0YS5hdXRoQ2hhbGxlbmdlKSB0aHJvdyBjaGFsbGVuZ2VFcnJvcjsgLy8gU2hvdWxkIG5ldmVyIG9jY3VyXG5cbiAgICAvLyBDaGVjayBzZXJ2ZXIgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnbmF0dXJlT0sgPSBhd2FpdCBDcnlwdG9TZXJ2aWNlLnZlcmlmeShcbiAgICAgIGRhdGEuYXV0aENoYWxsZW5nZS5jaGFsbGVuZ2UsXG4gICAgICBkYXRhLmF1dGhDaGFsbGVuZ2Uuc2lnbmF0dXJlLFxuICAgICAgZGF0YS5hdXRoQ2hhbGxlbmdlLnB1YmtleVxuICAgICk7XG4gICAgaWYgKCFzaWduYXR1cmVPSykge1xuICAgICAgY29uc29sZS53YXJuKCdGSVhNRTogQmFkIHBlZXIgc2lnbmF0dXJlIG9uIGF1dGggY2hhbGxlbmdlICEnLCBkYXRhLmF1dGhDaGFsbGVuZ2UpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBjaGVjayBzZXJ2ZXIgcHVia2V5IGFzIGEgdmFsaWQgY2VydGlmaWNhdGVcblxuICAgIC8vIERvIHRoZSBjaGFsbGVuZ2VcbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBDcnlwdG9TZXJ2aWNlLnNpZ24oZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZSwgdGhpcy5fY2FjaGUua2V5cGFpcik7XG4gICAgY29uc3QgbmV3VG9rZW4gPSBgJHt0aGlzLl9jYWNoZS5wdWJrZXl9OiR7ZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZX18JHtzaWduYXR1cmV9YDtcblxuICAgIC8vIGl0ZXJhdGUgd2l0aCB0aGUgbmV3IHRva2VuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlQW5kR2V0VG9rZW4obmV3VG9rZW4sIChjb3VudGVyIHx8IDEpICsgMSAvKiBpbmNyZW1lbnQgKi8pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcyhvcHRzPzogQWNjb3VudFdhdGNoT3B0aW9ucyk6IFN1YnNjcmlwdGlvbiB7XG4gICAgaWYgKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pIHRoaXMuc3RvcExpc3RlblJlbW90ZUNoYW5nZXMoKTsgLy8gU3RvcCBwcmV2aW91cyBzdWJzY3JpcHRpb25cbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCk7IC8vIE9mZmxpbmU6IHNraXBcblxuICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLndhdGNoQ2hhbmdlcyhvcHRzKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFJlbW90ZSB1cGRhdGUgZGV0ZWN0ZWQgYXQgJHtkYXRhLnVwZGF0ZURhdGV9YCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyICYmICtlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFtXU10gQWNjb3VudCBub3QgZXhpc3RzIGFueW1vcmU6IGZvcmNlIHVzZXIgdG8gbG9nb3V0Li4uJywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgK2Vyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbYWNjb3VudF0gW1dTXSBBY2NvdW50IG5vdCBhdXRob3JpemVkOiBmb3JjZSB1c2VyIHRvIGxvZ291dC4uLicsIGVycik7XG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBbV1NdIFJlY2VpdmVkIGVycm9yOicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gU3RvcCB3YXRjaGluZyByZW1vdGUgY2hhbmdlc2ApO1xuICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdhdGNoQ2hhbmdlcyhvcHRzPzogQWNjb3VudFdhdGNoT3B0aW9ucyk6IE9ic2VydmFibGU8QWNjb3VudD4ge1xuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIC8vIFdhaXQgc2VydmljZSByZWFkeSwgdGhlbiBsb29wXG4gICAgICByZXR1cm4gZnJvbSh0aGlzLnJlYWR5KCkpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLndhdGNoQ2hhbmdlcyhvcHRzKSkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBsb2dnZWQgaW4nKTtcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHdhdGNoIGFjY291bnQgY2hhbmdlczogbmV0d29yayBpcyBvZmZsaW5lLicpO1xuXG4gICAgY29uc3QgdmFyaWFibGVzID0ge1xuICAgICAgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdHMgJiYgb3B0cy5pbnRlcnZhbEluU2Vjb25kcywgdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHMpXG4gICAgfTtcblxuICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBXYXRjaGluZyByZW1vdGUgY2hhbmdlcywgZXZlcnkgJHt2YXJpYWJsZXMuaW50ZXJ2YWx9c2ApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8e2RhdGE6IGFueX0+KHtcbiAgICAgIHF1ZXJ5OiBBY2NvdW50U3Vic2NyaXB0aW9ucy5saXN0ZW5DaGFuZ2VzLFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TVUJTQ1JJQkVfQUNDT1VOVF9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkFDQ09VTlQuU1VCU0NSSUJFX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoe2RhdGF9KSA9PiBkYXRhKSxcbiAgICAgICAgLy8gS2VlcCBvbmx5IGlmIG5ld2VyXG4gICAgICAgIGZpbHRlcihkYXRhID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VXBkYXRlRGF0ZTogTW9tZW50ID0gZnJvbURhdGVJU09TdHJpbmcodGhpcy5fZGF0YT8udXBkYXRlRGF0ZSk7XG4gICAgICAgICAgY29uc3QgcmVtb3RlVXBkYXRlRGF0ZTogTW9tZW50ID0gZnJvbURhdGVJU09TdHJpbmcoZGF0YT8udXBkYXRlRGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIChyZW1vdGVVcGRhdGVEYXRlICYmICghY3VycmVudFVwZGF0ZURhdGUgfHwgIXJlbW90ZVVwZGF0ZURhdGUuaXNTYW1lKGN1cnJlbnRVcGRhdGVEYXRlLCAnbWlsbGlzZWNvbmQnKSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlKHNvdXJjZTogQWNjb3VudCB8IHVuZGVmaW5lZCwgdGFyZ2V0OiBBY2NvdW50KSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZCB8fCB0YXJnZXQuaWQ7XG4gICAgdGFyZ2V0LnVwZGF0ZURhdGUgPSBzb3VyY2UudXBkYXRlRGF0ZSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcblxuICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKHNvdXJjZS5zZXR0aW5ncywgdGFyZ2V0LnNldHRpbmdzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlU2V0dGluZ3Moc291cmNlOiBVc2VyU2V0dGluZ3MgfCB1bmRlZmluZWQsIHRhcmdldDogVXNlclNldHRpbmdzKSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZCB8fCB0YXJnZXQuaWQ7XG4gICAgdGFyZ2V0LnVwZGF0ZURhdGUgPSBzb3VyY2UudXBkYXRlRGF0ZSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Q8VCA9IGFueT4ob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cbn1cbiJdfQ==
|
|
1129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLGFBQWEsRUFBVSxNQUFNLGtCQUFrQixDQUFDO0FBRXhELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM5QyxPQUFPLEVBQVMsV0FBVyxFQUFtQixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBMkIsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFDLGVBQWUsRUFBRSxJQUFJLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQWMsR0FBRyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHckQsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQU90RCxPQUFPLEVBQUMscUJBQXFCLEVBQWUsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FB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VUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUUsV0FBVyxDQUFFLEVBQUM7OzBCQWlFbEQsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q3J5cHRvU2VydmljZSwgS2V5cGFpcn0gZnJvbSAnLi9jcnlwdG8uc2VydmljZSc7XG5pbXBvcnQge0RlcGFydG1lbnR9IGZyb20gJy4vbW9kZWwvZGVwYXJ0bWVudC5tb2RlbCc7XG5pbXBvcnQge0FjY291bnR9IGZyb20gJy4vbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQge1BlcnNvbiwgUGVyc29uVXRpbHMsIFVzZXJQcm9maWxlTGFiZWx9IGZyb20gJy4vbW9kZWwvcGVyc29uLm1vZGVsJztcbmltcG9ydCB7TG9jYWxTZXR0aW5ncywgVXNhZ2VNb2RlLCBVc2VyU2V0dGluZ3N9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGZyb20sIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ZldGNoUG9saWN5LCBncWx9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcblxuaW1wb3J0IHtpc05pbCwgc2xlZXAsIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7QmFzZUdyYXBocWxTZXJ2aWNlfSBmcm9tICcuL2Jhc2UtZ3JhcGhxbC1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RXJyb3JDb2RlcywgU2VydmVyRXJyb3JDb2Rlc30gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtHcmFwaHFsU2VydmljZX0gZnJvbSAnLi4vZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtBdXRoVG9rZW5UeXBlfSBmcm9tICcuL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHtGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7TUlOSUZZX0VOVElUWV9GT1JfUE9ELCBSZWZlcmVudGlhbCwgUmVmZXJlbnRpYWxVdGlsc30gZnJvbSAnLi9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5pbXBvcnQge1N0YXR1c0lkc30gZnJvbSAnLi9tb2RlbC9tb2RlbC5lbnVtJztcbmltcG9ydCB7QmFzZTU4fSBmcm9tICcuL2Jhc2U1OCc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7Zmlyc3ROb3ROaWxQcm9taXNlfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCYXNlRW50aXR5R3JhcGhxbE11dGF0aW9ucywgQmFzZUVudGl0eUdyYXBocWxTdWJzY3JpcHRpb25zfSBmcm9tICcuL2Jhc2UtZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQge092ZXJsYXlFdmVudERldGFpbH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFjY291bnREZXRhaWxzIHtcbiAgbG9hZGVkOiBib29sZWFuO1xuICBrZXlwYWlyOiBLZXlwYWlyO1xuICBhdXRoVG9rZW46IHN0cmluZztcbiAgYXV0aEJhc2ljPzogc3RyaW5nO1xuICBwdWJrZXk6IHN0cmluZztcbiAgcGVyc29uOiBQZXJzb247XG4gIGRlcGFydG1lbnQ6IERlcGFydG1lbnQ7XG4gIG1haW5Qcm9maWxlOiBTdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEF1dGhEYXRhIHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgb2ZmbGluZT86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRGF0YSBleHRlbmRzIEF1dGhEYXRhIHtcbiAgYWNjb3VudDogQWNjb3VudDtcbn1cblxuY29uc3QgVE9LRU5fU1RPUkFHRV9LRVkgPSAndG9rZW4nO1xuY29uc3QgUFVCS0VZX1NUT1JBR0VfS0VZID0gJ3B1YmtleSc7XG5jb25zdCBTRUNLRVlfU1RPUkFHRV9LRVkgPSAnc2Vja2V5JztcbmNvbnN0IEFDQ09VTlRfU1RPUkFHRV9LRVkgPSAnYWNjb3VudCc7XG5cbmNvbnN0IERFRkFVTFRfQVZBVEFSX0lNQUdFID0gJ2Fzc2V0cy9pbWcvcGVyc29uLnBuZyc7XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBHcmFwaFFMIHF1ZXJpZXNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5jb25zdCBGcmFnbWVudHMgPSB7XG4gIGFjY291bnQ6IGdxbGBcbiAgICBmcmFnbWVudCBBY2NvdW50RnJhZ21lbnQgb24gQWNjb3VudFZPIHtcbiAgICAgIGlkXG4gICAgICBmaXJzdE5hbWVcbiAgICAgIGxhc3ROYW1lXG4gICAgICBlbWFpbFxuICAgICAgcHVia2V5XG4gICAgICBhdmF0YXJcbiAgICAgIHN0YXR1c0lkXG4gICAgICB1cGRhdGVEYXRlXG4gICAgICBjcmVhdGlvbkRhdGVcbiAgICAgIHByb2ZpbGVzXG4gICAgICBzZXR0aW5ncyB7XG4gICAgICAgIC4uLlVzZXJTZXR0aW5nc0ZyYWdtZW50XG4gICAgICB9XG4gICAgICBkZXBhcnRtZW50IHtcbiAgICAgICAgaWRcbiAgICAgICAgbGFiZWxcbiAgICAgICAgbmFtZVxuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICB9XG4gICAgICBfX3R5cGVuYW1lXG4gICAgfWAsXG5cbiAgc2V0dGluZ3M6IGdxbGBmcmFnbWVudCBVc2VyU2V0dGluZ3NGcmFnbWVudCBvbiBVc2VyU2V0dGluZ3NWTyB7XG4gICAgaWRcbiAgICBsb2NhbGVcbiAgICBsYXRMb25nRm9ybWF0XG4gICAgY29udGVudFxuICAgIG5vbmNlXG4gICAgdXBkYXRlRGF0ZVxuICAgIF9fdHlwZW5hbWVcbiAgfWBcbn07XG5cbi8vIExvYWQgYWNjb3VudCBxdWVyeVxuY29uc3QgTG9hZFF1ZXJ5OiBhbnkgPSBncWxgXG4gIHF1ZXJ5IEFjY291bnQge1xuICAgIGRhdGE6IGFjY291bnQge1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfVxuYDtcblxuLy8gQ2hlY2sgZW1haWwgcXVlcnlcbmNvbnN0IElzRW1haWxFeGlzdHNRdWVyeTogYW55ID0gZ3FsYFxuICBxdWVyeSBJc0VtYWlsRXhpc3RzKCRlbWFpbDogU3RyaW5nLCAkaGFzaDogU3RyaW5nKXtcbiAgICBpc0VtYWlsRXhpc3RzKGVtYWlsOiAkZW1haWwsIGhhc2g6ICRoYXNoKVxuICB9XG5gO1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElzRW1haWxFeGlzdHNWYXJpYWJsZXMge1xuICBlbWFpbDogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG59XG5cbi8vIFNhdmUgKGNyZWF0ZSBvciB1cGRhdGUpIGFjY291bnQgbXV0YXRpb25cbmNvbnN0IEFjY291bnRNdXRhdGlvbnM6IFBhcnRpYWw8QmFzZUVudGl0eUdyYXBocWxNdXRhdGlvbnM+ICYgeyBjcmVhdGU6IGFueTsgc2F2ZVNldHRpbmdzOiBhbnkgfSA9IHtcbiAgc2F2ZTogZ3FsYCBtdXRhdGlvbiBTYXZlQWNjb3VudCgkZGF0YTpBY2NvdW50Vk9JbnB1dCl7XG4gICAgZGF0YTogc2F2ZUFjY291bnQoYWNjb3VudDogJGRhdGEpe1xuICAgICAgLi4uQWNjb3VudEZyYWdtZW50XG4gICAgfVxuICB9XG4gICR7RnJhZ21lbnRzLmFjY291bnR9XG4gICR7RnJhZ21lbnRzLnNldHRpbmdzfWAsXG5cbiAgY3JlYXRlOiBncWxgbXV0YXRpb24gQ3JlYXRlQWNjb3VudCgkZGF0YTpBY2NvdW50Vk9JbnB1dCl7XG4gICAgZGF0YTogY3JlYXRlQWNjb3VudChhY2NvdW50OiAkZGF0YSl7XG4gICAgICAuLi5BY2NvdW50RnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuYWNjb3VudH1cbiAgJHtGcmFnbWVudHMuc2V0dGluZ3N9YCxcblxuICBzYXZlU2V0dGluZ3M6IGdxbGBtdXRhdGlvbiBTYXZlU2V0dGluZ3MoJGRhdGE6VXNlclNldHRpbmdzVk9JbnB1dCl7XG4gICAgZGF0YTogc2F2ZVNldHRpbmdzKHNldHRpbmdzOiAkZGF0YSl7XG4gICAgICAuLi5Vc2VyU2V0dGluZ3NGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0ZyYWdtZW50cy5zZXR0aW5nc31gXG59O1xuXG4vLyBTZW50IGNvbmZpcm1hdGlvbiBlbWFpbFxuY29uc3QgU2VuZENvbmZpcm1FbWFpbE11dGF0aW9uOiBhbnkgPSBncWxgXG4gIG11dGF0aW9uIHNlbmRBY2NvdW50Q29uZmlybWF0aW9uRW1haWwoJGVtYWlsOlN0cmluZywgJGxvY2FsZTpTdHJpbmcpe1xuICAgIHNlbmRBY2NvdW50Q29uZmlybWF0aW9uRW1haWwoZW1haWw6ICRlbWFpbCwgbG9jYWxlOiAkbG9jYWxlKVxuICB9XG5gO1xuXG4vLyBDb25maXJtIGFjY291bnQgZW1haWxcbmNvbnN0IENvbmZpcm1FbWFpbE11dGF0aW9uOiBhbnkgPSBncWxgXG4gIG11dGF0aW9uIGNvbmZpcm1BY2NvdW50RW1haWwoJGVtYWlsOlN0cmluZywgJGNvZGU6U3RyaW5nKXtcbiAgICBjb25maXJtQWNjb3VudEVtYWlsKGVtYWlsOiAkZW1haWwsIGNvZGU6ICRjb2RlKVxuICB9XG5gO1xuXG4vLyBBdXRoZW50aWNhdGlvbiAgcXVlcnlcbmNvbnN0IEF1dGhRdWVyeTogYW55ID0gZ3FsYFxuICBxdWVyeSBBdXRoKCR0b2tlbjogU3RyaW5nKXtcbiAgICBhdXRoZW50aWNhdGUodG9rZW46ICR0b2tlbilcbiAgfVxuYDtcblxuLy8gTmV3IGF1dGggY2hhbGxlbmdlIHF1ZXJ5XG5jb25zdCBBdXRoQ2hhbGxlbmdlUXVlcnk6IGFueSA9IGdxbGBcbiAgcXVlcnkgQXV0aENoYWxsZW5nZXtcbiAgICBhdXRoQ2hhbGxlbmdle1xuICAgICAgY2hhbGxlbmdlXG4gICAgICBwdWJrZXlcbiAgICAgIHNpZ25hdHVyZVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgQWNjb3VudFN1YnNjcmlwdGlvbnM6IEJhc2VFbnRpdHlHcmFwaHFsU3Vic2NyaXB0aW9ucyA9IHtcbiAgbGlzdGVuQ2hhbmdlczogZ3FsYHN1YnNjcmlwdGlvbiB1cGRhdGVBY2NvdW50KCRpbnRlcnZhbDogSW50KXtcbiAgICBkYXRhOiB1cGRhdGVBY2NvdW50KGludGVydmFsOiAkaW50ZXJ2YWwpIHtcbiAgICAgIGlkXG4gICAgICB1cGRhdGVEYXRlXG4gICAgfVxuICB9YFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50V2F0Y2hPcHRpb25zIHtcbiAgaW50ZXJ2YWxJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCcsIGRlcHM6IFsgRU5WSVJPTk1FTlQgXX0pXG5leHBvcnQgY2xhc3MgQWNjb3VudFNlcnZpY2UgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8QWNjb3VudCwgYW55LCBudW1iZXIsIEFjY291bnQ+IHtcblxuICBvbkxvZ2luID0gbmV3IFN1YmplY3Q8QWNjb3VudD4oKTtcbiAgb25Mb2dvdXQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBvbkNoYW5nZSA9IG5ldyBTdWJqZWN0PEFjY291bnQ+KCk7XG4gIG9uQXV0aFRva2VuQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG9uQXV0aEJhc2ljQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5hYmxlTGlzdGVuQ2hhbmdlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuSW50ZXJ2YWxJblNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2FjaGU6IEFjY291bnREZXRhaWxzID0ge1xuICAgIGxvYWRlZDogZmFsc2UsXG4gICAga2V5cGFpcjogbnVsbCxcbiAgICBhdXRoVG9rZW46IG51bGwsXG4gICAgYXV0aEJhc2ljOiBudWxsLFxuICAgIHB1YmtleTogbnVsbCxcbiAgICBtYWluUHJvZmlsZTogbnVsbCxcbiAgICBwZXJzb246IG51bGwsXG4gICAgZGVwYXJ0bWVudDogbnVsbFxuICB9O1xuICBwcml2YXRlIF8kYWRkaXRpb25hbEZpZWxkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Rm9ybUZpZWxkRGVmaW5pdGlvbltdPihbXSk7XG4gIHByaXZhdGUgX3Rva2VuVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhUb2tlblR5cGU+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IGFjY291bnQoKTogQWNjb3VudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLmxvYWRlZCA/IHRoaXMuX2RhdGEgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgcGVyc29uKCk6IFBlcnNvbiB7XG4gICAgaWYgKHRoaXMuX2NhY2hlLmxvYWRlZCAmJiAhdGhpcy5fY2FjaGUucGVyc29uKSB7XG4gICAgICB0aGlzLl9jYWNoZS5wZXJzb24gPSB0aGlzLl9jYWNoZS5sb2FkZWQgPyB0aGlzLl9kYXRhLmFzUGVyc29uKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYWNoZS5wZXJzb247XG4gIH1cblxuICBnZXQgZGVwYXJ0bWVudCgpOiBEZXBhcnRtZW50IHtcbiAgICBpZiAodGhpcy5fY2FjaGUubG9hZGVkICYmICF0aGlzLl9jYWNoZS5kZXBhcnRtZW50KSB7XG4gICAgICB0aGlzLl9jYWNoZS5kZXBhcnRtZW50ID0gdGhpcy5fY2FjaGUubG9hZGVkID8gdGhpcy5fZGF0YS5hc1BlcnNvbigpLmRlcGFydG1lbnQgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYWNoZS5kZXBhcnRtZW50O1xuICB9XG5cbiAgZ2V0IHRva2VuVHlwZSgpOiBBdXRoVG9rZW5UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5UeXBlJC52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlblR5cGUodmFsdWU6IEF1dGhUb2tlblR5cGUpIHtcbiAgICBpZiAodGhpcy5fdG9rZW5UeXBlJC52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFVzaW5nIGF1dGhlbnRpY2F0aW9uIHRva2VuIHR5cGU6ICcgKyB2YWx1ZSk7XG4gICAgICB0aGlzLl90b2tlblR5cGUkLm5leHQodmFsdWUpO1xuICAgICAgLy8gUmVzZXQgdmFsdWVzXG4gICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuX2NhY2hlLmF1dGhCYXNpYyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZ3JhcGhxbDogR3JhcGhxbFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcm90ZWN0ZWQgZmlsZTogRmlsZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMgPSAoIWVudmlyb25tZW50LmFjY291bnQgfHwgZW52aXJvbm1lbnQuYWNjb3VudC5lbmFibGVMaXN0ZW5DaGFuZ2VzICE9PSBmYWxzZSk7IC8vIFRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMuX2xpc3RlbkludGVydmFsSW5TZWNvbmRzID0gdG9OdW1iZXIoZW52aXJvbm1lbnQuYWNjb3VudCAmJiBlbnZpcm9ubWVudC5hY2NvdW50Lmxpc3RlbkludGVydmFsSW5TZWNvbmRzLCAwKTsgLy8gbm8gdGltZXIgYnkgZGVmYXVsdFxuXG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thY2NvdW50LXNlcnZpY2VdIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICAvLyBTZW5kIGF1dGggdG9rZW4gdG8gdGhlIGdyYXBocWwgbGF5ZXIsIHdoZW4gY2hhbmdlZFxuICAgIHRoaXMub25BdXRoVG9rZW5DaGFuZ2Uuc3Vic2NyaWJlKCh0b2tlbikgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhUb2tlbih0b2tlbikpO1xuICAgIHRoaXMub25BdXRoQmFzaWNDaGFuZ2Uuc3Vic2NyaWJlKChiYXNpYykgPT4gdGhpcy5ncmFwaHFsLnNldEF1dGhCYXNpYyhiYXNpYykpO1xuXG4gICAgLy8gRm9yY2UgbmV0d29yayB0byB3YWl0IGFjY291bnQgc2VydmljZSwgYWZ0ZXIgZ2V0dGluZyBjb25uZWN0aW9uIHRvIHRoZSBwZWVyXG4gICAgdGhpcy5uZXR3b3JrLm9uKCdiZWZvcmVUcnlPbmxpbmVGaW5pc2gnLCBhc3luYyAob25saW5lKSA9PiB7XG4gICAgICAvLyBJZiBvbmxpbmUsIHdhaXQgYSBmdWxsIHJlc3RhcnQsIGJlY2F1c2UgaXQgY2FuIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgaWYgKG9ubGluZSAmJiAoIXRoaXMuc3RhcnRlZCB8fCB0aGlzLmlzTG9naW4oKSkpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEZvcmNlIG5ldHdvcmtTZXJ2aWNlLnRyeU9ubGluZSgpIHRvIHdhaXQsIHRoYXQgZ3JhcGhxbCBhbmQgYWNjb3VudCBzZXJ2aWNlIGlzIHJlc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBzbGVlcCg1MDApOyAvLyB3YWl0IGdyYXBocWwgc2VydmljZSB0byBiZSByZXN0YXJ0ZWRcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8QWNjb3VudD4ge1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLFxuICAgICAgLy8gV2FpdCB0b2tlbiB0eXBlIHRvIGJlIHNldFxuICAgICAgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX3Rva2VuVHlwZSQpXG4gICAgXSk7XG5cbiAgICAvLyBMaXN0ZW4gZ3JhcGhxbCBzdGFydCAob3IgcmVzdGFydClcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5ncmFwaHFsLnN0b3BTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQgJiYgdGhpcy5pc0xvZ2luKCkpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gUmVzdGFydGluZywgdG8gcmV0cnkgdG8gYXV0aGVudGljYXRlLi4uJyk7XG4gICAgICAgICAgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgICBhd2FpdCB0aGlzLmxpc3RlblNldHRpbmdzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYWRBdXRoVG9rZW4gPSB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoQmFzaWMgPSB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoID0gaGFkQXV0aFRva2VuIHx8IGhhZEF1dGhCYXNpYztcbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgIGlmIChoYWRBdXRoKSB7XG4gICAgICB0aGlzLm9uTG9nb3V0Lm5leHQoKTtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgaWYgKGhhZEF1dGhUb2tlbikgdGhpcy5vbkF1dGhUb2tlbkNoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFkQXV0aEJhc2ljKSB0aGlzLm9uQXV0aEJhc2ljQ2hhbmdlLm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBpc0xvZ2luKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLl9jYWNoZS5wdWJrZXkgJiYgdGhpcy5fY2FjaGUubG9hZGVkKTtcbiAgfVxuXG4gIGlzQXV0aCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5fY2FjaGUucHVia2V5ICYmIHRoaXMuX2NhY2hlLmtleXBhaXIgJiYgdGhpcy5fY2FjaGUua2V5cGFpci5zZWNyZXRLZXkpO1xuICB9XG5cbiAgaGFzTWluUHJvZmlsZSh1c2VyUHJvZmlsZTogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEUgb3IgVEVNUE9SQVJZXG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnB1YmtleSB8fFxuICAgICAgKHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUgJiYgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLlRFTVBPUkFSWSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIFBlcnNvblV0aWxzLmhhc1VwcGVyT3JFcXVhbHNQcm9maWxlKHRoaXMuX2RhdGEucHJvZmlsZXMsIHVzZXJQcm9maWxlKTtcbiAgfVxuXG4gIGhhc0V4YWN0UHJvZmlsZShsYWJlbDogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEUgb3IgVEVNUE9SQVJZXG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnB1YmtleSB8fFxuICAgICAgKHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUgJiYgdGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLlRFTVBPUkFSWSkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEucHJvZmlsZXMuc29tZShwcm9maWxlID0+IHByb2ZpbGUgPT09IGxhYmVsKTtcbiAgfVxuXG4gIGhhc1Byb2ZpbGVBbmRJc0VuYWJsZSh1c2VyUHJvZmlsZTogVXNlclByb2ZpbGVMYWJlbCk6IGJvb2xlYW4ge1xuICAgIC8vIHNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEVcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8IHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgdXNlclByb2ZpbGUpO1xuICB9XG5cbiAgaXNBZG1pbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNQcm9maWxlQW5kSXNFbmFibGUoJ0FETUlOJyk7XG4gIH1cblxuICBpc1N1cGVydmlzb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvZmlsZUFuZElzRW5hYmxlKCdTVVBFUlZJU09SJyk7XG4gIH1cblxuICBpc1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvZmlsZUFuZElzRW5hYmxlKCdVU0VSJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHBhcmFtIG1vZGVcbiAgICovXG4gIGlzVXNhZ2VNb2RlKG1vZGU6IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzVXNhZ2VNb2RlKG1vZGUpO1xuICB9XG5cbiAgaXNPbmx5R3Vlc3QoKTogYm9vbGVhbiB7XG4gICAgLy8gU2hvdWxkIGJlIGxvZ2luLCBhbmQgc3RhdHVzIEVOQUJMRSBvciBURU1QT1JBUllcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8XG4gICAgICAodGhpcy5fZGF0YS5zdGF0dXNJZCAhPT0gU3RhdHVzSWRzLkVOQUJMRSAmJiB0aGlzLl9kYXRhLnN0YXR1c0lkICE9PSBTdGF0dXNJZHMuVEVNUE9SQVJZKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBQcm9maWxlIGxlc3MgdGhlbiB1c2VyXG4gICAgcmV0dXJuICFQZXJzb25VdGlscy5oYXNVcHBlck9yRXF1YWxzUHJvZmlsZSh0aGlzLl9kYXRhLnByb2ZpbGVzLCAnVVNFUicpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByZWNvcmRlckRlcGFydG1lbnRcbiAgICogQGRlcHJlY2F0ZWQgdXNlIFByb2dyYW1SZWZTZXJ2aWNlLmNhblVzZXJXcml0ZURhdGFGb3JEZXBhcnRtZW50KCkgaW5zdGVhZFxuICAgKi9cbiAgY2FuVXNlcldyaXRlRGF0YUZvckRlcGFydG1lbnQocmVjb3JkZXJEZXBhcnRtZW50OiBSZWZlcmVudGlhbCB8IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChSZWZlcmVudGlhbFV0aWxzLmlzRW1wdHkocmVjb3JkZXJEZXBhcnRtZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNBZG1pbigpO1xuICAgIH1cblxuICAgIC8vIFNob3VsZCBiZSBsb2dpbiwgYW5kIHN0YXR1cyBFTkFCTEVcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEucHVia2V5IHx8IHRoaXMuX2RhdGEuc3RhdHVzSWQgIT09IFN0YXR1c0lkcy5FTkFCTEUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fZGF0YS5kZXBhcnRtZW50IHx8ICF0aGlzLl9kYXRhLmRlcGFydG1lbnQuaWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignVXNlciBhY2NvdW50IGhhcyBubyBkZXBhcnRtZW50ICEgVW5hYmxlIHRvIGNoZWNrIHdyaXRlIHJpZ2h0IGFnYWluc3QgcmVjb3JkZXJEZXBhcnRtZW50Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2FtZSByZWNvcmRlciBkZXBhcnRtZW50OiBPSywgdXNlciBjYW4gd3JpdGVcbiAgICBpZiAodGhpcy5fZGF0YS5kZXBhcnRtZW50LmlkID09PSByZWNvcmRlckRlcGFydG1lbnQuaWQpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gRWxzZSwgY2hlY2sgaWYgc3VwZXJ2aXNvciAob3IgbW9yZSlcbiAgICByZXR1cm4gUGVyc29uVXRpbHMuaGFzVXBwZXJPckVxdWFsc1Byb2ZpbGUodGhpcy5fZGF0YS5wcm9maWxlcywgJ1NVUEVSVklTT1InKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKGRhdGE6IFJlZ2lzdGVyRGF0YSk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICh0aGlzLmlzTG9naW4oKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIGFscmVhZHkgbG9naW4uIFBsZWFzZSBsb2dvdXQgYmVmb3JlIHJlZ2lzdGVyLicpO1xuICAgIH1cbiAgICBpZiAoIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCB1c2VybmFtZSBvciBwYXNzd29yZCcpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gUmVnaXN0ZXIgbmV3IHVzZXIgYWNjb3VudC4uLicsIGRhdGEuYWNjb3VudCk7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gZmFsc2U7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBrZXlwYWlyID0gYXdhaXQgQ3J5cHRvU2VydmljZS5zY3J5cHRLZXlwYWlyKGRhdGEudXNlcm5hbWUsIGRhdGEucGFzc3dvcmQpO1xuICAgICAgZGF0YS5hY2NvdW50LnB1YmtleSA9IEJhc2U1OC5lbmNvZGUoa2V5cGFpci5wdWJsaWNLZXkpO1xuXG4gICAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgICAgZGF0YS5hY2NvdW50LnNldHRpbmdzID0gZGF0YS5hY2NvdW50LnNldHRpbmdzIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgIGRhdGEuYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUgPSB0aGlzLnNldHRpbmdzLmxvY2FsZTtcbiAgICAgIGRhdGEuYWNjb3VudC5zZXR0aW5ncy5sYXRMb25nRm9ybWF0ID0gdGhpcy5zZXR0aW5ncy5sYXRMb25nRm9ybWF0O1xuICAgICAgZGF0YS5hY2NvdW50LnNldHRpbmdzLmNvbnRlbnQgPSBkYXRhLmFjY291bnQuc2V0dGluZ3MuY29udGVudCB8fCB7fTtcbiAgICAgIGRhdGEuYWNjb3VudC5kZXBhcnRtZW50LmlkID0gZGF0YS5hY2NvdW50LmRlcGFydG1lbnQuaWQgfHwgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0RGVwYXJ0bWVudElkO1xuXG4gICAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0ga2V5cGFpcjtcbiAgICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCB0aGlzLnNhdmVSZW1vdGVseShkYXRhLmFjY291bnQsIGtleXBhaXIpO1xuXG4gICAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgICAgYWNjb3VudC5hdmF0YXIgPSBhY2NvdW50LmF2YXRhciB8fCAodGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsICsgREVGQVVMVF9BVkFUQVJfSU1BR0UpO1xuICAgICAgdGhpcy5fY2FjaGUubWFpblByb2ZpbGUgPSBQZXJzb25VdGlscy5nZXRNYWluUHJvZmlsZShhY2NvdW50LnByb2ZpbGVzKTtcblxuICAgICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBhY2NvdW50LnB1YmtleTtcblxuICAgICAgLy8gVHJ5IHRvIGF1dGggb24gcG9kXG4gICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZShkYXRhKTtcblxuICAgICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuXG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgICAgLy8gRW1pdCBldmVudHNcbiAgICAgIHRoaXMub25Mb2dpbi5uZXh0KHRoaXMuX2RhdGEpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgICAvLyBMaXN0ZW4gcmVtb3RlIGNoYW5nZXNcbiAgICAgIGlmICh0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzKSB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGF1dGhlbnRpY2F0ZShkYXRhPzogQXV0aERhdGEpIHtcbiAgICAvLyBXYWl0IHRoZSBhdXRoIHRva2VuLCB0aGVuIGNvbnRpbnVlXG4gICAgY29uc3QgdG9rZW5UeXBlID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX3Rva2VuVHlwZSQpO1xuXG4gICAgLy8gQmFzaWMgYXV0aFxuICAgIGlmICh0b2tlblR5cGUgPT09ICdiYXNpYycgfHwgdG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykge1xuXG4gICAgICAvLyBHZW5lcmF0ZSB0aGUgYXV0aEJhc2ljLCBpZiB1c2VkXG4gICAgICBpZiAoIXRoaXMuX2NhY2hlLmF1dGhCYXNpYykge1xuICAgICAgICAvLyBTa2lwIGlmIHRva2VuIGFscmVhZHkgcHJvdmlkZWRcbiAgICAgICAgaWYgKCEodGhpcy5fY2FjaGUuYXV0aFRva2VuICYmIHRva2VuVHlwZSA9PT0gJ2Jhc2ljLWFuZC10b2tlbicpKSB7XG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLnVzZXJuYW1lIHx8ICFkYXRhLnBhc3N3b3JkKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdXNlcm5hbWUgYW5kIHBhc3N3b3JkJyk7XG4gICAgICAgICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gQ3J5cHRvU2VydmljZS5lbmNvZGVCYXNlNjQoYCR7ZGF0YS51c2VybmFtZX06JHtkYXRhLnBhc3N3b3JkfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9uQXV0aEJhc2ljQ2hhbmdlLm5leHQodGhpcy5fY2FjaGUuYXV0aEJhc2ljKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB0aGUgYXV0aFRva2VuLCBpZiB1c2VkXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gJ3Rva2VuJyB8fCB0b2tlblR5cGUgPT09ICdiYXNpYy1hbmQtdG9rZW4nKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZUFuZEdldFRva2VuKHRoaXMuX2NhY2hlLmF1dGhUb2tlbik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBOZXZlciBhdXRoZW50aWNhdGUsIG9yIG5vdCByZWFkeSBmb3Igb2ZmbGluZSBtb2RlID0+IGV4aXRcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvcmdldCBhdXRoQmFzaWMsIHRvIHN3aXRjaCB0byBhdXRoVG9rZW5cbiAgICBpZiAodG9rZW5UeXBlID09PSAnYmFzaWMtYW5kLXRva2VuJykge1xuICAgICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vbkF1dGhCYXNpY0NoYW5nZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9naW4oZGF0YTogQXV0aERhdGEpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEudXNlcm5hbWUgfHwgIWRhdGEucGFzc3dvcmQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCB1c2VybmFtZSBvciBwYXNzd29yZCcpO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIExvZ2luLi4uJyk7XG5cbiAgICBsZXQga2V5cGFpcjtcbiAgICB0cnkge1xuICAgICAga2V5cGFpciA9IGF3YWl0IENyeXB0b1NlcnZpY2Uuc2NyeXB0S2V5cGFpcihkYXRhLnVzZXJuYW1lLCBkYXRhLnBhc3N3b3JkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLlVOS05PV05fRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5TQ1JZUFRfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gU3RvcmUgcHVia2V5K2tleXBhaXJcbiAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBCYXNlNTguZW5jb2RlKGtleXBhaXIucHVibGljS2V5KTtcbiAgICB0aGlzLl9jYWNoZS5rZXlwYWlyID0ga2V5cGFpcjtcblxuICAgIC8vIFRyeSB0byBsb2FkIHByZXZpb3VzIHRva2VuXG4gICAgbGV0IHByZXZpb3VzVG9rZW46IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoVE9LRU5fU1RPUkFHRV9LRVkpO1xuICAgIHByZXZpb3VzVG9rZW4gPSBwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4uc3RhcnRzV2l0aCh0aGlzLl9jYWNoZS5wdWJrZXkpICYmIHByZXZpb3VzVG9rZW4gfHwgbnVsbDtcblxuICAgIC8vIE9mZmxpbmUgbW9kZVxuICAgIGNvbnN0IG9mZmxpbmUgPSB0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkgJiYgKHRoaXMubmV0d29yay5vZmZsaW5lIHx8IGRhdGEub2ZmbGluZSA9PT0gdHJ1ZSk7XG4gICAgaWYgKG9mZmxpbmUpICB7XG4gICAgICB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gPSBwcmV2aW91c1Rva2VuO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgbmV0d29yayBpZiBzZXQgYXMgb2ZmbGluZVxuICAgICAgdGhpcy5uZXR3b3JrLnNldEZvcmNlT2ZmbGluZSh0cnVlLCB7c2hvd1RvYXN0OiBmYWxzZX0pO1xuICAgICAgY29uc29sZS5pbmZvKGBbYWNjb3VudF0gTG9naW4gW09LXSB7cHVia2V5OiAke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9fSwge29mZmxpbmU6IHRydWV9YCk7XG4gICAgfVxuXG4gICAgLy8gT25saW5lIG1vZGU6IHRyeSB0byBhdXRoIG9uIHBvZFxuICAgIGVsc2Uge1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE5ldmVyIGF1dGhlbnRpY2F0ZSwgb3Igbm90IHJlYWR5IGZvciBvZmZsaW5lIG1vZGUgPT4gZXhpdFxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9hZCBhY2NvdW50IGRhdGFcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSh7b2ZmbGluZSwgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknfSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGFjY291bnQgbm90IGZvdW5kLCBjaGVjayBpZiBlbWFpbCBpcyB2YWxpZFxuICAgICAgaWYgKGVyciAmJiArKGVyci5jb2RlKSA9PT0gRXJyb3JDb2Rlcy5MT0FEX0FDQ09VTlRfRVJST1IpIHtcblxuICAgICAgICAvLyBDaGVjayBlbWFpbCBleGlzdHNcbiAgICAgICAgaWYgKGRhdGEudXNlcm5hbWUuaW5kZXhPZignQCcpICE9PSAtMSkge1xuICAgICAgICAgIGxldCBpc0VtYWlsRXhpc3RzO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpc0VtYWlsRXhpc3RzID0gYXdhaXQgdGhpcy5pc0VtYWlsRXhpc3RzKGRhdGEudXNlcm5hbWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKG90aGVyRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycjsgLy8gcmVzZW5kIHRoZSBmaXJzdCBlcnJvclxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVtYWlsIG5vdCBleGlzdHMgKG5vIGFjY291bnQpXG4gICAgICAgICAgaWYgKCFpc0VtYWlsRXhpc3RzKSB7XG4gICAgICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuVU5LTk9XTl9BQ0NPVU5UX0VNQUlMLCBtZXNzYWdlOiAnRVJST1IuVU5LTk9XTl9BQ0NPVU5UX0VNQUlMJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtYWlsIGV4aXN0cywgc28gZXJyb3IgPSAnYmFkIHBhc3N3b3JkJ1xuICAgICAgICB0aHJvdyB7IGNvZGU6IEVycm9yQ29kZXMuQkFEX1BBU1NXT1JELCBtZXNzYWdlOiAnRVJST1IuQkFEX1BBU1NXT1JEJyB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7IC8vIHJlc2VuZCB0aGUgZmlyc3QgZXJyb3JcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3RvcmUgdG8gbG9jYWwgc3RvcmFnZVxuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnQgdG8gb2JzZXJ2ZXJzXG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgaWYgKHRoaXMuX2VuYWJsZUxpc3RlbkNoYW5nZXMpIHRoaXMuc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZChvcHRzPzoge3Nob3dUb2FzdD86IGJvb2xlYW59KTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG4gICAgaWYgKHRoaXMubmV0d29yay5vZmZsaW5lKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjaGVjayBhY2NvdW50IGluIG9mZmxpbmUgbW9kZScpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gUmVsb2FkaW5nIGFjY291bnQuLi5gKTtcbiAgICBjb25zdCB3YXNMb2dpbiA9IHRoaXMuaXNMb2dpbigpO1xuXG4gICAgdHJ5IHtcblxuICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgYXdhaXQgdGhpcy5zYXZlTG9jYWxseSgpO1xuXG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gUmVsb2FkaW5nIGFjY291bnQgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgICAgLy8gRW1pdCBsb2dpbiBldmVudCB0byBzdWJzY3JpYmVyc1xuICAgICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdBQ0NPVU5ULklORk8uUkVMT0FERUQnLCB0eXBlOiAnaW5mbyd9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ2Fubm90IHJlbG9hZCBidXQgd2FzIGxvZ2luOiBmb3JjZSB0byBsb2dvdXRcbiAgICAgIGlmICh3YXNMb2dpbiAmJiAhdGhpcy5pc0xvZ2luKCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIFJlbG9hZGluZyBhY2NvdW50IGZhaWxlZC4gV2lsbCBmb3JjZSBsb2dvdXQuLi5gLCBlcnJvcik7XG4gICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50LCB0byB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICpcbiAgICogQHBhcmFtIGFjY291bnRcbiAgICovXG4gIGFzeW5jIHNhdmUoYWNjb3VudDogQWNjb3VudCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuICAgIGlmICh0aGlzLl9jYWNoZS5wdWJrZXkgIT09IGFjY291bnQucHVia2V5KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ05vdCB1c2VyIGFjY291bnQnKTtcblxuICAgIGFjY291bnQgPSBhd2FpdCB0aGlzLnNhdmVSZW1vdGVseShhY2NvdW50LCB0aGlzLl9jYWNoZS5rZXlwYWlyKTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIGFjY291bnQuYXZhdGFyID0gYWNjb3VudC5hdmF0YXIgfHwgKHRoaXMuZW52aXJvbm1lbnQuYmFzZVVybCArIERFRkFVTFRfQVZBVEFSX0lNQUdFKTtcbiAgICB0aGlzLl9jYWNoZS5tYWluUHJvZmlsZSA9IFBlcnNvblV0aWxzLmdldE1haW5Qcm9maWxlKGFjY291bnQucHJvZmlsZXMpO1xuXG4gICAgdGhpcy5fZGF0YSA9IGFjY291bnQ7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIFNhdmUgbG9jYWxseSAoaW4gc3RvcmFnZSlcbiAgICBhd2FpdCB0aGlzLnNhdmVMb2NhbGx5KCk7XG5cbiAgICAvLyBTZW5kIGV2ZW50XG4gICAgdGhpcy5vbkxvZ2luLm5leHQodGhpcy5fZGF0YSk7XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBjb25zdCBoYWRBdXRoVG9rZW4gPSB0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgdHJ1ZTtcbiAgICBjb25zdCBoYWRBdXRoQmFzaWMgPSB0aGlzLl9jYWNoZS5hdXRoQmFzaWMgJiYgdHJ1ZTtcbiAgICBjb25zdCBwdWJrZXkgPSB0aGlzLl9jYWNoZSAmJiB0aGlzLl9jYWNoZS5wdWJrZXk7XG5cbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcblxuICAgICAgLy8gUmVtb3ZlIGFsbCBkYXRhIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShQVUJLRVlfU1RPUkFHRV9LRVkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFRPS0VOX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShBQ0NPVU5UX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgcHVia2V5ICYmIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSArICcjJyArIHB1YmtleSkgfHwgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gT2ZmbGluZSBmZWF0dXJlcyBlbmFibGU6IG5lZWQgdG8ga2VlcCBzb21lIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIC8vIEFsd2F5cyByZW1vdmUgb25seSBzZWNyZXQga2V5XG4gICAgICAvLyBCdXQga2VlcDpcbiAgICAgIC8vIC0gYWNjb3VudCBieSBwdWJrZXlcbiAgICAgIC8vIC0gYXV0aCB0b2tlblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKFBVQktFWV9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoQUNDT1VOVF9TVE9SQUdFX0tFWSksXG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKVxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gcGFnZSBoaXN0b3J5LCBpbiBsb2NhbCBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuY2xlYXJQYWdlSGlzdG9yeSgpO1xuXG4gICAgLy8gTm90aWZ5IG9ic2VydmVyc1xuICAgIHRoaXMub25Mb2dvdXQubmV4dCgpO1xuICAgIGlmIChoYWRBdXRoVG9rZW4pIHRoaXMub25BdXRoVG9rZW5DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIGlmIChoYWRBdXRoQmFzaWMpIHRoaXMub25BdXRoQmFzaWNDaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICAgIHRoaXMub25DaGFuZ2UubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkKG9wdHM/OiB7XG4gICAgb2ZmbGluZT86IGJvb2xlYW47XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8QWNjb3VudCB8IHVuZGVmaW5lZD4ge1xuXG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBMb2FkaW5nIGFjY291bnQuLi5gKTtcbiAgICBsZXQganNvbjogYW55O1xuXG4gICAgLy8gTG9hZCBsb2NhbGx5XG4gICAgY29uc3Qgb2ZmbGluZSA9IHRoaXMubmV0d29yay5vZmZsaW5lXG4gICAgICAmJiAoIW9wdHMgfHwgKG9wdHMuZmV0Y2hQb2xpY3kgIT09ICduZXR3b3JrLW9ubHknICYmIG9wdHMuZmV0Y2hQb2xpY3kgIT09ICduby1jYWNoZScpKVxuICAgICAgfHwgKG9wdHMgJiYgb3B0cy5vZmZsaW5lID09PSB0cnVlKTtcbiAgICBpZiAob2ZmbGluZSkge1xuICAgICAganNvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoQUNDT1VOVF9TVE9SQUdFX0tFWSk7XG4gICAgICBqc29uID0ganNvbiAmJiAodHlwZW9mIGpzb24gPT09ICdzdHJpbmcnKSAmJiBKU09OLnBhcnNlKGpzb24pIHx8IGpzb247XG4gICAgICBqc29uID0ganNvbiAmJiB0aGlzLl9jYWNoZS5wdWJrZXkgJiYgKGpzb24ucHVia2V5ID09PSB0aGlzLl9jYWNoZS5wdWJrZXkpICYmIGpzb24gfHwgbnVsbDtcbiAgICAgIGlmICghanNvbiAmJiB0aGlzLl9jYWNoZS5wdWJrZXkpIHtcbiAgICAgICAganNvbiA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoQUNDT1VOVF9TVE9SQUdFX0tFWSArICcjJyArIHRoaXMuX2NhY2hlLnB1YmtleSk7XG4gICAgICAgIGpzb24gPSBqc29uICYmICh0eXBlb2YganNvbiA9PT0gJ3N0cmluZycpICYmIEpTT04ucGFyc2UoanNvbikgfHwganNvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIHJlbW90ZWx5XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgICBxdWVyeTogTG9hZFF1ZXJ5LFxuICAgICAgICBlcnJvcjogeyBjb2RlOiBFcnJvckNvZGVzLkxPQURfQUNDT1VOVF9FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQUNDT1VOVF9FUlJPUicgfSxcbiAgICAgICAgZmV0Y2hQb2xpY3k6IG9wdHMgJiYgb3B0cy5mZXRjaFBvbGljeSB8fCAnbm8tY2FjaGUnIHx8IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBqc29uID0gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoanNvbikge1xuICAgICAgY29uc3QgYWNjb3VudCA9IEFjY291bnQuZnJvbU9iamVjdChqc29uKTtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGFjY291bnQpO1xuICAgICAgIHJldHVybiBhY2NvdW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2FjY291bnRdIEFjY291bnQgbm90IGZvdW5kICFgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZW1haWwgaXMgYXZhaWxhYmxlIGZvciBuZXcgYWNjb3VudCByZWdpc3RyYXRpb24uXG4gICAqIFRocm93IGFuIGVycm9yIGlmIG5vdCBhdmFpbGFibGVcbiAgICpcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqL1xuICBhc3luYyBjaGVja0VtYWlsQXZhaWxhYmxlKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0VtYWlsRXhpc3RzID0gYXdhaXQgdGhpcy5pc0VtYWlsRXhpc3RzKGVtYWlsKTtcbiAgICBpZiAoaXNFbWFpbEV4aXN0cykge1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkVNQUlMX0FMUkVBRFlfUkVHSVNURVJFRCwgbWVzc2FnZTogJ0VSUk9SLkVNQUlMX0FMUkVBRFlfUkVHSVNURVJFRCcgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZW1haWwgaXMgZXhpc3RzIGluIHNlcnZlci5cbiAgICpcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqL1xuICBhc3luYyBpc0VtYWlsRXhpc3RzKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIENoZWNraW5nIGlmIHsnICsgZW1haWwgKyAnfSBleGlzdHMuLi4nKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBpc0VtYWlsRXhpc3RzOiBib29sZWFuIH0sIElzRW1haWxFeGlzdHNWYXJpYWJsZXM+KHtcbiAgICAgIHF1ZXJ5OiBJc0VtYWlsRXhpc3RzUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGhhc2g6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gRW1haWwgZXhpc3Q6ICcgKyAoZGF0YSAmJiBkYXRhLmlzRW1haWxFeGlzdHMpKTtcblxuICAgIHJldHVybiBkYXRhICYmIGRhdGEuaXNFbWFpbEV4aXN0cztcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb25maXJtYXRpb25FbWFpbChlbWFpbDogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCB0aGlzLnNldHRpbmdzLmxvY2FsZTtcbiAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gU2VuZGluZyBjb25maXJtYXRpb24gZW1haWwgdG8geycgKyBlbWFpbCArICd9IHdpdGggbG9jYWxlIHsnICsgbG9jYWxlICsgJ30uLi4nKTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPGJvb2xlYW4+KHtcbiAgICAgIG11dGF0aW9uOiBTZW5kQ29uZmlybUVtYWlsTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZW1haWwsXG4gICAgICAgIGxvY2FsZVxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuU0VOVF9DT05GSVJNQVRJT05fRU1BSUxfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuU0VOVF9BQ0NPVU5UX0NPTkZJUk1BVElPTl9FTUFJTF9GQUlMRUQnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb25maXJtRW1haWwoZW1haWw6IFN0cmluZywgY29kZTogU3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gU2VuZG5nIGNvbmZpcm0gcmVxdWVzdCBmb3IgZW1haWwgeycgKyBlbWFpbCArICd9IHdpdGggY29kZSB7JyArIGNvZGUgKyAnfS4uLicpO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGNvbmZpcm1BY2NvdW50RW1haWw6IGJvb2xlYW4gfT4oe1xuICAgICAgbXV0YXRpb246IENvbmZpcm1FbWFpbE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICBjb2RlXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5DT05GSVJNX0VNQUlMX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkNPTkZJUk1fQUNDT1VOVF9FTUFJTF9GQUlMRUQnXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcyAmJiByZXMuY29uZmlybUFjY291bnRFbWFpbDtcbiAgfVxuXG4gIGxpc3RlbkNoYW5nZXMob3B0cz86IEFjY291bnRXYXRjaE9wdGlvbnMpOiBTdWJzY3JpcHRpb24ge1xuICAgIGlmICh0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzKSByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigpOyAvLyBBbHJlYWR5IHN0YXJ0ZWQ6IHNraXBcblxuICAgIHJldHVybiB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcyhvcHRzKTtcbiAgfVxuXG4gIGdldCBhZGRpdGlvbmFsRmllbGRzKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgJGFkZGl0aW9uYWxGaWVsZHMoKTogT2JzZXJ2YWJsZTxGb3JtRmllbGREZWZpbml0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXRBZGRpdGlvbmFsRmllbGQoa2V5OiBzdHJpbmcpOiBGb3JtRmllbGREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fJGFkZGl0aW9uYWxGaWVsZHMuZ2V0VmFsdWUoKS5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gIH1cblxuICByZWdpc3RlckFkZGl0aW9uYWxGaWVsZChmaWVsZDogRm9ybUZpZWxkRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLmdldFZhbHVlKCk7XG4gICAgaWYgKCEhdmFsdWVzLmZpbmQoZiA9PiBmLmtleSA9PT0gZmllbGQua2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZGRpdGlvbmFsIGFjY291bnQgZmllbGQge2tleTogJHtmaWVsZC5rZXl9fSBhbHJlYWR5IGRlZmluZS5gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gRm91bmQgYWRkaXRpb25hbCBhY2NvdW50J3MgZmllbGQge2tleTogJHtmaWVsZC5rZXl9fWApO1xuICAgIHRoaXMuXyRhZGRpdGlvbmFsRmllbGRzLm5leHQodmFsdWVzLmNvbmNhdChmaWVsZCkpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCByZXNldERhdGEoKSB7XG4gICAgdGhpcy5zdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLmF1dGhUb2tlbiA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGUuYXV0aEJhc2ljID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5wdWJrZXkgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZS5wZXJzb24gPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlLmRlcGFydG1lbnQgPSBudWxsO1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgQWNjb3VudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWREYXRhKG9wdHM/OiB7XG4gICAgb2ZmbGluZT86IGJvb2xlYW47XG4gICAgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTtcbiAgfSk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCcpO1xuXG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjb3VudCA9IChhd2FpdCB0aGlzLmxvYWQob3B0cykpIHx8IG5ldyBBY2NvdW50KCk7XG5cbiAgICAgIC8vIFNldCBkZWZhdWx0c1xuICAgICAgYWNjb3VudC5hdmF0YXIgPSBhY2NvdW50LmF2YXRhciB8fCAodGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsICsgREVGQVVMVF9BVkFUQVJfSU1BR0UpO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncyA9IGFjY291bnQuc2V0dGluZ3MgfHwgbmV3IFVzZXJTZXR0aW5ncygpO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncy5sb2NhbGUgPSBhY2NvdW50LnNldHRpbmdzLmxvY2FsZSB8fCB0aGlzLnNldHRpbmdzLmxvY2FsZTtcbiAgICAgIGFjY291bnQuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCA9IGFjY291bnQuc2V0dGluZ3MubGF0TG9uZ0Zvcm1hdCB8fCB0aGlzLnNldHRpbmdzLmxhdExvbmdGb3JtYXQgfHwgJ0RETU0nO1xuICAgICAgYWNjb3VudC5zZXR0aW5ncy5jb250ZW50ID0gYWNjb3VudC5zZXR0aW5ncy5jb250ZW50IHx8IHt9O1xuXG4gICAgICAvLyBSZWFkIG1haW4gcHJvZmlsZVxuICAgICAgdGhpcy5fY2FjaGUubWFpblByb2ZpbGUgPSBQZXJzb25VdGlscy5nZXRNYWluUHJvZmlsZShhY2NvdW50LnByb2ZpbGVzKTtcblxuICAgICAgLy8gVXBkYXRlLCBpbnN0ZWFkIG9mIHJlcGxhY2UgaXRcbiAgICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICAgIHRoaXMuX2RhdGEuZnJvbU9iamVjdChhY2NvdW50KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9kYXRhID0gYWNjb3VudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhY2hlLmxvYWRlZCA9IHRydWU7XG5cbiAgICAgIC8vIEFwcGx5IHNldHRpbmdzLCBmb3VuZCBpbiByZW1vdGUgYWNjb3VudFxuICAgICAgaWYgKGFjY291bnQuc2V0dGluZ3MpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgLi4udGhpcy5zZXR0aW5ncy5zZXR0aW5ncyxcbiAgICAgICAgICAuLi5hY2NvdW50LnNldHRpbmdzLmFzTG9jYWxTZXR0aW5ncygpXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseShzZXR0aW5ncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICBpZiAoZXJyb3IuY29kZSAmJiBlcnJvci5tZXNzYWdlKSB0aHJvdyBlcnJvcjtcblxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyB7XG4gICAgICAgIGNvZGU6IEVycm9yQ29kZXMuTE9BRF9BQ0NPVU5UX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuTE9BRF9BQ0NPVU5UX0VSUk9SJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbGlzdGVuU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPntcbiAgICAvLyBXaGVuIHNldHRpbmdzIGNoYW5nZWQ6IHNhdmUgaXQgcmVtb3RlbHlcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZXR0aW5ncy5vbkNoYW5nZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNMb2dpbigpICYmIHRoaXMubmV0d29yay5vbmxpbmUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShzZXR0aW5ncyA9PiB0aGlzLnNhdmVMb2NhbFNldHRpbmdzUmVtb3RlbHkoc2V0dGluZ3MpKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxBY2NvdW50IHwgdW5kZWZpbmVkPiB7XG5cbiAgICAvLyBSZXN0b3JlIGZyb20gc3RvcmFnZVxuICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQoUFVCS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXQoVE9LRU5fU1RPUkFHRV9LRVkpLFxuICAgICAgdGhpcy5zdG9yYWdlLmdldChTRUNLRVlfU1RPUkFHRV9LRVkpXG4gICAgXSk7XG4gICAgbGV0IHB1YmtleSA9IHZhbHVlc1swXTtcbiAgICBsZXQgdG9rZW4gPSB2YWx1ZXNbMV07XG4gICAgY29uc3Qgc2Vja2V5ID0gdmFsdWVzWzJdO1xuXG4gICAgLy8gREVWIG9ubHkgLSBhdXRoIGJ5IHRva2VuXG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24gJiYgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QXV0aFZhbHVlcz8udG9rZW4pIHtcbiAgICAgIHRva2VuID0gdG9rZW4gfHwgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QXV0aFZhbHVlcy50b2tlbjtcbiAgICAgIHB1YmtleSA9IHB1YmtleSB8fCB0b2tlbj8uc3BsaXQoJzonLCAyKVswXTtcbiAgICB9XG5cbiAgICAvLyBRdWl0IGlmIG5vIHB1YmtleSAobm90IGxvZ2dlZClcbiAgICBpZiAoIXB1YmtleSkgcmV0dXJuO1xuXG4gICAgLy8gUXVpdCBpZiBjb3VsZCBub3QgYXV0aCBvbiBwb2RcbiAgICBjb25zdCBjYW5SZW1vdGVBdXRoID0gdG9rZW4gfHwgc2Vja2V5IHx8IGZhbHNlO1xuICAgIGlmICghY2FuUmVtb3RlQXV0aCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZXN0b3JhdGlvbi4uLmApO1xuXG4gICAgdGhpcy5fY2FjaGUuYXV0aFRva2VuID0gdG9rZW47XG4gICAgdGhpcy5fY2FjaGUucHVia2V5ID0gcHVia2V5O1xuICAgIHRoaXMuX2NhY2hlLmtleXBhaXIgPSBzZWNrZXkgJiYge1xuICAgICAgcHVibGljS2V5OiBCYXNlNTguZGVjb2RlKHB1YmtleSksXG4gICAgICBzZWNyZXRLZXk6IEJhc2U1OC5kZWNvZGUoc2Vja2V5KVxuICAgIH0gfHwgbnVsbDtcblxuICAgIC8vIE9ubGluZSBtb2RlOiB0cnkgdG8gY29ubmVjdCB0byBwb2RcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9ubGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRoZW50aWNhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZS5hdXRoVG9rZW4gJiYgIXRoaXMuX2NhY2hlLmF1dGhCYXNpYykgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBPZmZsaW5lIGZlYXR1cmUgYXJlIGVuYWJsZTogY29udGludWUgaW4gb2ZmbGluZSBtb2RlXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmhhc09mZmxpbmVGZWF0dXJlKCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBVbmFibGUgdG8gYXV0aGVudGljYXRlIG9uIHBvZDogZm9yY2luZyBvZmZsaW5lIG1vZGUnKTtcbiAgICAgICAgICB0aGlzLm5ldHdvcmsuc2V0Rm9yY2VPZmZsaW5lKHRydWUsIHtzaG93VG9hc3Q6IGZhbHNlfSk7XG4gICAgICAgICAgLy8gQ29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBvZmZsaW5lIGZlYXR1cmVzIGVuYWJsZSAoPW9mZmxpbmUgbW9kZSBub3QgYWxsb3dlZClcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCB0aGUgYWNjb3VudCwgZnJvbSBwdWJrZXlcbiAgICBsZXQganNvbkFjY291bnQgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7cHVia2V5fWApO1xuICAgIGlmICghanNvbkFjY291bnQpIHtcbiAgICAgIC8vIFRyeSB1c2luZyB0aGUgb2xkIHN0b3JhZ2Uga2V5XG4gICAgICBjb25zdCBhY2NvdW50U3RyID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChBQ0NPVU5UX1NUT1JBR0VfS0VZKTtcbiAgICAgIGpzb25BY2NvdW50ID0gYWNjb3VudFN0ciAmJiAoKHR5cGVvZiBhY2NvdW50U3RyID09PSAnc3RyaW5nJykgJiYgSlNPTi5wYXJzZShqc29uQWNjb3VudCkgfHwgYWNjb3VudFN0cik7XG4gICAgfVxuXG4gICAgLy8gSW52YWxpZCBhY2NvdW50OiBkbyBub3QgdXNlIGl0XG4gICAgaWYgKCFqc29uQWNjb3VudCB8fCBqc29uQWNjb3VudC5wdWJrZXkgIT09IHB1YmtleSkge1xuXG4gICAgICAvLyBERVYgb25seTogY3JlYXRlIGEgZmFrZSBhY2NvdW50IHdpdGggZ2l2ZW4gdXNlcm5hbWVcbiAgICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uICYmIHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEF1dGhWYWx1ZXMudXNlcm5hbWUpIHtcbiAgICAgICAgY29uc3QgdXNlcm5hbWUgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRBdXRoVmFsdWVzLnVzZXJuYW1lO1xuICAgICAgICBqc29uQWNjb3VudCA9IHtwdWJrZXksIHVzZXJuYW1lLCBmaXJzdE5hbWU6IHVzZXJuYW1lLCBsYXN0TmFtZTogdXNlcm5hbWV9O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gdG8gZW50aXR5XG4gICAgY29uc3QgYWNjb3VudCA9IEFjY291bnQuZnJvbU9iamVjdChqc29uQWNjb3VudCk7XG5cbiAgICAvLyBVcGRhdGUgZGF0YVxuICAgIHRoaXMuX2RhdGEgPSBhY2NvdW50O1xuICAgIHRoaXMuX2NhY2hlLm1haW5Qcm9maWxlID0gUGVyc29uVXRpbHMuZ2V0TWFpblByb2ZpbGUoYWNjb3VudC5wcm9maWxlcyk7XG4gICAgdGhpcy5fY2FjaGUubG9hZGVkID0gdHJ1ZTtcblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICB0aGlzLm9uTG9naW4ubmV4dCh0aGlzLl9kYXRhKTtcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG5cbiAgICBpZiAodGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcykgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIEFjY291bnQgcmVzdG9yYXRpb24gW09LXSB7cHVia2V5OiAke3B1YmtleS5zdWJzdHIoMCwgOCl9fSwge3Byb2ZpbGU6ICR7dGhpcy5fY2FjaGUubWFpblByb2ZpbGV9fWApO1xuXG4gICAgcmV0dXJuIGFjY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhY2NvdW50IGludG8gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlTG9jYWxseSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2NhY2hlLnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQnKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBhY2NvdW50IHske3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHJpbmcoMCwgNil9fSBpbiBsb2NhbCBzdG9yYWdlLi4uYCk7XG5cbiAgICAvLyBDb252ZXJ0IGFjY291bnQgdG8ganNvblxuICAgIGNvbnN0IGpzb24gPSB0aGlzLl9kYXRhLmFzT2JqZWN0KHtrZWVwVHlwZW5hbWU6IHRydWV9KTtcbiAgICBjb25zdCBzZWNrZXkgPSB0aGlzLl9jYWNoZS5rZXlwYWlyICYmIHRoaXMuX2NhY2hlLmtleXBhaXIuc2VjcmV0S2V5ICYmIEJhc2U1OC5lbmNvZGUodGhpcy5fY2FjaGUua2V5cGFpci5zZWNyZXRLZXkpIHx8IG51bGw7XG5cbiAgICAvLyBDb252ZXJ0IGF2YXRhciBVUkwgdG8gZGF0YVVybCAoZS5nLiAnZGF0YTppbWFnZS9wbmc6PGJhc2U2NCBjb250ZW50PicpXG4gICAgY29uc3QgaGFzQXZhdGFyVXJsID0ganNvbi5hdmF0YXIgJiYgIWpzb24uYXZhdGFyLmVuZHNXaXRoKERFRkFVTFRfQVZBVEFSX0lNQUdFKSAmJlxuICAgICAgKGpzb24uYXZhdGFyLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCAoanNvbi5hdmF0YXIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkpO1xuICAgIGlmIChoYXNBdmF0YXJVcmwgJiYgdGhpcy5uZXR3b3JrLm9ubGluZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlLmdldEltYWdlKGpzb24uYXZhdGFyLCB7XG4gICAgICAgIHRodW1ibmFpbDogdHJ1ZSxcbiAgICAgICAgb3V0cHV0VHlwZTogJ2RhdGFVcmwnXG4gICAgICB9KVxuICAgICAgICAudGhlbihkYXRhVXJsID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVVybCAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FjY291bnRdIEltYWdlIGZldGNoZWQ6ICcsIGRhdGFVcmwuc3Vic3RyaW5nKDAsIDUwKSk7XG5cbiAgICAgICAgICAvLyBUT0RPOiBtYWtlIHN1cmUgdG8gZGlzcGxheSBCYXNlNjQgaW1hZ2UgaW4gdGhlIG1lbnUgdG9wIGhlYWRlclxuICAgICAgICAgIC8vanNvbkFjY291bnQuYXZhdGFyID0gZGF0YVVybDtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW2FjY291bnRdIEVycm9yIHdoaWxlIGZldGNoaW5nIGltYWdlOiAke2pzb24uYXZhdGFyfTogJHtlcnJ9YCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoUFVCS0VZX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5wdWJrZXkpLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KFRPS0VOX1NUT1JBR0VfS0VZLCB0aGlzLl9jYWNoZS5hdXRoVG9rZW4pLFxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0KGAke0FDQ09VTlRfU1RPUkFHRV9LRVl9IyR7dGhpcy5fY2FjaGUucHVia2V5fWAsIGpzb24pLFxuICAgICAgICAvLyBTZWNyZXQga2V5IChvcHRpb25hbClcbiAgICAgICAgc2Vja2V5ICYmIHRoaXMuc3RvcmFnZS5zZXQoU0VDS0VZX1NUT1JBR0VfS0VZLCBzZWNrZXkpIHx8IHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VDS0VZX1NUT1JBR0VfS0VZKSxcbiAgICAgICAgLy8gUmVtb3ZlIG9sZCBzdG9yYWdlIGtleVxuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEFDQ09VTlRfU1RPUkFHRV9LRVkpXG4gICAgICBdKTtcblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYWNjb3VudF0gQWNjb3VudCBzYXZlZCBpbiBsb2NhbCBzdG9yYWdlJyk7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2FjY291bnRdIEVycm9yIHdoaWxlIHNhdmluZyBhY2NvdW50IGxvY2FsbHk6ICcgKyAoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciksIGVycik7XG4gICAgfVxuICB9XG5cbiAgIGFzeW5jIHNhdmVMb2NhbFNldHRpbmdzUmVtb3RlbHkoc291cmNlOiBMb2NhbFNldHRpbmdzKXtcbiAgICAgaWYgKCFzb3VyY2UgfHwgIXRoaXMuaXNMb2dpbigpIHx8IHNvdXJjZS5hY2NvdW50SW5oZXJpdGFuY2UgPT09IGZhbHNlKSByZXR1cm47IC8vIFNraXBcbiAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudDtcblxuICAgICAvLyBNZXJnZSBsb2NhbCBzZXR0aW5ncyBpbnRvIGFjY291bnQncyBzZXR0aW5nc1xuICAgICBjb25zdCBzZXR0aW5ncyA9IFVzZXJTZXR0aW5ncy5mcm9tT2JqZWN0KGFjY291bnQuc2V0dGluZ3MpIHx8IG5ldyBVc2VyU2V0dGluZ3MoKTtcbiAgICAgY29uc3QgY2hhbmdlZCA9IHNldHRpbmdzLm1lcmdlKHNvdXJjZSwgWydsb2NhbGUnLCAnbGF0TG9uZ0Zvcm1hdCcsICdwcm9wZXJ0aWVzJ10pO1xuXG4gICAgIGlmICghY2hhbmdlZCkgcmV0dXJuOyAvLyBTa2lwIGlmIHVuY2hhbmdlZFxuXG4gICAgIC8vIFNhdmUgcmVtb3RlbHlcbiAgICAgdGhpcy5hY2NvdW50LnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgIGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzUmVtb3RlbHkoc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgYW4gdXNlciBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBhY2NvdW50XG4gICAqIEBwYXJhbSBrZXlQYWlyXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVJlbW90ZWx5KGFjY291bnQ6IEFjY291bnQsIGtleVBhaXI/OiBLZXlwYWlyKTogUHJvbWlzZTxBY2NvdW50PiB7XG4gICAgYWNjb3VudC5wdWJrZXkgPSBhY2NvdW50LnB1YmtleSB8fCAoa2V5UGFpciAmJiBCYXNlNTguZW5jb2RlKGtleVBhaXIucHVibGljS2V5KSk7XG4gICAgaWYgKCFhY2NvdW50LnB1YmtleSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFjY291bnQgcHVia2V5Jyk7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBhY2NvdW50IHJlbW90ZWx5Li4uYCk7XG5cbiAgICBjb25zdCBpc05ldyA9IGlzTmlsKGFjY291bnQuaWQpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhbiB1cGRhdGU6IGdldCBleGlzdGluZyBhY2NvdW50J3MgdXBkYXRlRGF0ZSwgdG8gYXZvaWQgJ3ZlcnNpb24gZXJyb3InIHdoZW4gc2F2aW5nXG4gICAgaWYgKCFpc05ldykge1xuICAgICAgY29uc3QgZXhpc3RpbmdBY2NvdW50ID0gYXdhaXQgdGhpcy5sb2FkKHsgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknIH0pO1xuICAgICAgaWYgKCFleGlzdGluZ0FjY291bnQgfHwgIWV4aXN0aW5nQWNjb3VudC51cGRhdGVEYXRlKSB7XG4gICAgICAgIHRocm93IHsgY29kZTogRXJyb3JDb2Rlcy5BQ0NPVU5UX05PVF9FWElTVFMsIG1lc3NhZ2U6ICdFUlJPUi5BQ0NPVU5UX05PVF9FWElTVFMnIH07XG4gICAgICB9XG4gICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoZXhpc3RpbmdBY2NvdW50LCBhY2NvdW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBqc29uID0gYWNjb3VudC5hc09iamVjdChNSU5JRllfRU5USVRZX0ZPUl9QT0QpO1xuXG4gICAgLy8gVXNlciBub3QgYWxsb3cgdG8gY2hhbmdlIGhpcyBwcm9maWxlc1xuICAgIGRlbGV0ZSBqc29uLnByb2ZpbGVzO1xuXG4gICAgLy8gRXhlY3V0ZSBtdXRhdGlvblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IEFjY291bnQgfT4oe1xuICAgICAgbXV0YXRpb246IGlzTmV3ID8gQWNjb3VudE11dGF0aW9ucy5jcmVhdGUgOiBBY2NvdW50TXV0YXRpb25zLnNhdmUsXG4gICAgICB2YXJpYWJsZXM6IHsgZGF0YToganNvbiB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TQVZFX0FDQ09VTlRfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX0FDQ09VTlRfRVJST1InXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKGRhdGEsIGFjY291bnQpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gQWNjb3VudCByZW1vdGVseSBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIHJldHVybiBhY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBvciB1cGRhdGUgdXNlciBzZXR0aW5nc1xuICAgKlxuICAgKiBAcGFyYW0gc2V0dGluZ3NcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlU2V0dGluZ3NSZW1vdGVseShzZXR0aW5nczogVXNlclNldHRpbmdzKSB7XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNhdmluZyBzZXR0aW5ncyByZW1vdGVseS4uLmApO1xuXG4gICAgY29uc3QganNvbiA9IHNldHRpbmdzLmFzT2JqZWN0KE1JTklGWV9FTlRJVFlfRk9SX1BPRCk7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogVXNlclNldHRpbmdzIH0+KHtcbiAgICAgIG11dGF0aW9uOiBBY2NvdW50TXV0YXRpb25zLnNhdmVTZXR0aW5ncyxcbiAgICAgIHZhcmlhYmxlczogeyBkYXRhOiBqc29uIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNBVkVfU0VUVElOR1NfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdFUlJPUi5TQVZFX1NFVFRJTkdTX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ29weSB1cGRhdGUgcHJvcGVydGllc1xuICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKGRhdGEsIHNldHRpbmdzKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFNldHRpbmdzIHJlbW90ZWx5IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuXG4gICAgLy8gU2F2ZSBpbnRvIGFjY291bnRcbiAgICBpZiAodGhpcy5hY2NvdW50KSB0aGlzLmFjY291bnQuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhdXRoZW50aWNhdGVBbmRHZXRUb2tlbih0b2tlbj86IHN0cmluZywgY291bnRlcj86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLl9jYWNoZS5wdWJrZXkpIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgbG9nZ2VkJyk7XG5cbiAgICBpZiAoIWNvdW50ZXIpIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZC4uLicpO1xuXG4gICAgaWYgKGNvdW50ZXIgPiA0KSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBGYWlsZWQgdG8gYXV0aGVudGljYXRpb24gb24gcG9kIChhZnRlciAke2NvdW50ZXJ9IGF0dGVtcHRzKWApO1xuICAgICAgdGhyb3cgeyBjb2RlOiBFcnJvckNvZGVzLkFVVEhfU0VSVkVSX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuQVVUSF9TRVJWRVJfRVJST1InIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdmFsaWRcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdyYXBocWwucXVlcnk8eyBhdXRoZW50aWNhdGU6IGJvb2xlYW4gfSwgeyB0b2tlbjogc3RyaW5nIH0+KHtcbiAgICAgICAgcXVlcnk6IEF1dGhRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCxcbiAgICAgICAgICBtZXNzYWdlOiAnRVJST1IuVU5BVVRIT1JJWkVEJ1xuICAgICAgICB9LFxuICAgICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRva2VuIGlzIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2ZXJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuYXV0aGVudGljYXRlKSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSB0b2tlblxuICAgICAgICB0aGlzLm9uQXV0aFRva2VuQ2hhbmdlLm5leHQodG9rZW4pO1xuXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2FjY291bnRdIEF1dGhlbnRpY2F0aW9uIG9uIHBvZCBbT0tdIHtwdWJrZXk6ICcke3RoaXMuX2NhY2hlLnB1YmtleS5zdWJzdHIoMCwgOCl9J31gKTtcbiAgICAgICAgcmV0dXJuIHRva2VuOyAvLyByZXR1cm4gdGhlIHRva2VuXG4gICAgICB9XG5cbiAgICAgIC8vIENvbnRpbnVlICh3aWxsIHJldHJ5IHdpdGggYW5vdGhlciBjaGFsbGVuZ2UpXG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYSBuZXcgdG9rZW5cbiAgICBjb25zdCBjaGFsbGVuZ2VFcnJvciA9IHtcbiAgICAgIGNvZGU6IEVycm9yQ29kZXMuQVVUSF9DSEFMTEVOR0VfRVJST1IsXG4gICAgICBtZXNzYWdlOiAnRVJST1IuQVVUSF9DSEFMTEVOR0VfRVJST1InXG4gICAgfTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHtcbiAgICAgIGF1dGhDaGFsbGVuZ2U6IHtcbiAgICAgICAgcHVia2V5OiBzdHJpbmc7XG4gICAgICAgIGNoYWxsZW5nZTogc3RyaW5nO1xuICAgICAgICBzaWduYXR1cmU6IHN0cmluZztcbiAgICAgIH07XG4gICAgfT4oe1xuICAgICAgcXVlcnk6IEF1dGhDaGFsbGVuZ2VRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge30sXG4gICAgICBlcnJvcjogY2hhbGxlbmdlRXJyb3IsXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGNoYWxsZW5nZVxuICAgIGlmICghZGF0YSB8fCAhZGF0YS5hdXRoQ2hhbGxlbmdlKSB0aHJvdyBjaGFsbGVuZ2VFcnJvcjsgLy8gU2hvdWxkIG5ldmVyIG9jY3VyXG5cbiAgICAvLyBDaGVjayBzZXJ2ZXIgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnbmF0dXJlT0sgPSBhd2FpdCBDcnlwdG9TZXJ2aWNlLnZlcmlmeShcbiAgICAgIGRhdGEuYXV0aENoYWxsZW5nZS5jaGFsbGVuZ2UsXG4gICAgICBkYXRhLmF1dGhDaGFsbGVuZ2Uuc2lnbmF0dXJlLFxuICAgICAgZGF0YS5hdXRoQ2hhbGxlbmdlLnB1YmtleVxuICAgICk7XG4gICAgaWYgKCFzaWduYXR1cmVPSykge1xuICAgICAgY29uc29sZS53YXJuKCdGSVhNRTogQmFkIHBlZXIgc2lnbmF0dXJlIG9uIGF1dGggY2hhbGxlbmdlICEnLCBkYXRhLmF1dGhDaGFsbGVuZ2UpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBjaGVjayBzZXJ2ZXIgcHVia2V5IGFzIGEgdmFsaWQgY2VydGlmaWNhdGVcblxuICAgIC8vIERvIHRoZSBjaGFsbGVuZ2VcbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBDcnlwdG9TZXJ2aWNlLnNpZ24oZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZSwgdGhpcy5fY2FjaGUua2V5cGFpcik7XG4gICAgY29uc3QgbmV3VG9rZW4gPSBgJHt0aGlzLl9jYWNoZS5wdWJrZXl9OiR7ZGF0YS5hdXRoQ2hhbGxlbmdlLmNoYWxsZW5nZX18JHtzaWduYXR1cmV9YDtcblxuICAgIC8vIGl0ZXJhdGUgd2l0aCB0aGUgbmV3IHRva2VuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXV0aGVudGljYXRlQW5kR2V0VG9rZW4obmV3VG9rZW4sIChjb3VudGVyIHx8IDEpICsgMSAvKiBpbmNyZW1lbnQgKi8pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcyhvcHRzPzogQWNjb3VudFdhdGNoT3B0aW9ucyk6IFN1YnNjcmlwdGlvbiB7XG4gICAgaWYgKHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24pIHRoaXMuc3RvcExpc3RlblJlbW90ZUNoYW5nZXMoKTsgLy8gU3RvcCBwcmV2aW91cyBzdWJzY3JpcHRpb25cbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCk7IC8vIE9mZmxpbmU6IHNraXBcblxuICAgIHRoaXMuX2xpc3RlbkNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLndhdGNoQ2hhbmdlcyhvcHRzKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjY291bnRdIFJlbW90ZSB1cGRhdGUgZGV0ZWN0ZWQgYXQgJHtkYXRhLnVwZGF0ZURhdGV9YCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyICYmICtlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnW2FjY291bnRdIFtXU10gQWNjb3VudCBub3QgZXhpc3RzIGFueW1vcmU6IGZvcmNlIHVzZXIgdG8gbG9nb3V0Li4uJywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgK2Vyci5jb2RlID09PSBTZXJ2ZXJFcnJvckNvZGVzLlVOQVVUSE9SSVpFRCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbYWNjb3VudF0gW1dTXSBBY2NvdW50IG5vdCBhdXRob3JpemVkOiBmb3JjZSB1c2VyIHRvIGxvZ291dC4uLicsIGVycik7XG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1thY2NvdW50XSBbV1NdIFJlY2VpdmVkIGVycm9yOicsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWNjb3VudF0gU3RvcCB3YXRjaGluZyByZW1vdGUgY2hhbmdlc2ApO1xuICAgICAgdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdGVuQ2hhbmdlc1N1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdG9wTGlzdGVuUmVtb3RlQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9saXN0ZW5DaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHdhdGNoQ2hhbmdlcyhvcHRzPzogQWNjb3VudFdhdGNoT3B0aW9ucyk6IE9ic2VydmFibGU8QWNjb3VudD4ge1xuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIC8vIFdhaXQgc2VydmljZSByZWFkeSwgdGhlbiBsb29wXG4gICAgICByZXR1cm4gZnJvbSh0aGlzLnJlYWR5KCkpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLndhdGNoQ2hhbmdlcyhvcHRzKSkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fY2FjaGUucHVia2V5KSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBsb2dnZWQgaW4nKTtcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHdhdGNoIGFjY291bnQgY2hhbmdlczogbmV0d29yayBpcyBvZmZsaW5lLicpO1xuXG4gICAgY29uc3QgdmFyaWFibGVzID0ge1xuICAgICAgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdHMgJiYgb3B0cy5pbnRlcnZhbEluU2Vjb25kcywgdGhpcy5fbGlzdGVuSW50ZXJ2YWxJblNlY29uZHMpXG4gICAgfTtcblxuICAgIGNvbnNvbGUuZGVidWcoYFthY2NvdW50XSBXYXRjaGluZyByZW1vdGUgY2hhbmdlcywgZXZlcnkgJHt2YXJpYWJsZXMuaW50ZXJ2YWx9c2ApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8e2RhdGE6IGFueX0+KHtcbiAgICAgIHF1ZXJ5OiBBY2NvdW50U3Vic2NyaXB0aW9ucy5saXN0ZW5DaGFuZ2VzLFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TVUJTQ1JJQkVfQUNDT1VOVF9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLkFDQ09VTlQuU1VCU0NSSUJFX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoe2RhdGF9KSA9PiBkYXRhKSxcbiAgICAgICAgLy8gS2VlcCBvbmx5IGlmIG5ld2VyXG4gICAgICAgIGZpbHRlcihkYXRhID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VXBkYXRlRGF0ZTogTW9tZW50ID0gZnJvbURhdGVJU09TdHJpbmcodGhpcy5fZGF0YT8udXBkYXRlRGF0ZSk7XG4gICAgICAgICAgY29uc3QgcmVtb3RlVXBkYXRlRGF0ZTogTW9tZW50ID0gZnJvbURhdGVJU09TdHJpbmcoZGF0YT8udXBkYXRlRGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIChyZW1vdGVVcGRhdGVEYXRlICYmICghY3VycmVudFVwZGF0ZURhdGUgfHwgIXJlbW90ZVVwZGF0ZURhdGUuaXNTYW1lKGN1cnJlbnRVcGRhdGVEYXRlLCAnbWlsbGlzZWNvbmQnKSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlKHNvdXJjZTogQWNjb3VudCB8IHVuZGVmaW5lZCwgdGFyZ2V0OiBBY2NvdW50KSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZCB8fCB0YXJnZXQuaWQ7XG4gICAgdGFyZ2V0LnVwZGF0ZURhdGUgPSBzb3VyY2UudXBkYXRlRGF0ZSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcblxuICAgIHRoaXMuY29weUlkQW5kVXBkYXRlRGF0ZVNldHRpbmdzKHNvdXJjZS5zZXR0aW5ncywgdGFyZ2V0LnNldHRpbmdzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3B5SWRBbmRVcGRhdGVEYXRlU2V0dGluZ3Moc291cmNlOiBVc2VyU2V0dGluZ3MgfCB1bmRlZmluZWQsIHRhcmdldDogVXNlclNldHRpbmdzKSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIHRhcmdldC5pZCA9IHNvdXJjZS5pZCB8fCB0YXJnZXQuaWQ7XG4gICAgdGFyZ2V0LnVwZGF0ZURhdGUgPSBzb3VyY2UudXBkYXRlRGF0ZSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Q8VCA9IGFueT4ob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -59,13 +59,13 @@ export class AuthGuardService {
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
AuthGuardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
63
|
-
AuthGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
62
|
+
AuthGuardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AuthGuardService, deps: [{ token: i1.AccountService }, { token: i2.ModalController }, { token: i3.Router }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
63
|
+
AuthGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AuthGuardService, providedIn: 'root' });
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AuthGuardService, decorators: [{
|
|
65
65
|
type: Injectable,
|
|
66
66
|
args: [{ providedIn: 'root' }]
|
|
67
67
|
}], ctorParameters: function () { return [{ type: i1.AccountService }, { type: i2.ModalController }, { type: i3.Router }, { type: undefined, decorators: [{
|
|
68
68
|
type: Inject,
|
|
69
69
|
args: [ENVIRONMENT]
|
|
70
70
|
}] }]; } });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1ndWFyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2F1dGgtZ3VhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUtqRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUdoRCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQW9CLGNBQThCLEVBQzlCLFNBQTBCLEVBQzFCLE1BQWMsRUFDUyxXQUFXO1FBSGxDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ1MsZ0JBQVcsR0FBWCxXQUFXLENBQUE7UUFFcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVcsQ0FDVCxJQUE0QixFQUM1QixLQUEwQjtRQUcxQiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hDLFVBQVU7aUJBQ1QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBK0IsQ0FBQyxDQUFDO1NBQzVFO1FBRUQsY0FBYztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25HLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNSLElBQUksSUFBSSxDQUFDLE1BQU07d0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4REFBOEQsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNwSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN0QztnQkFDRCxVQUFVO2dCQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUErQixDQUFDO1lBQ3JFLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNGLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BKLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUE2QjtRQUNqQyxPQUFPLElBQUksT0FBTyxDQUFVLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBQyxJQUFJLEVBQUMsRUFBQyxDQUFDLENBQUM7WUFDN0YsS0FBSyxDQUFDLFlBQVksRUFBRTtpQkFDakIsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDZCxPQUFPO2lCQUNSO2dCQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7NkdBM0RVLGdCQUFnQixxR0FPUCxXQUFXO2lIQVBwQixnQkFBZ0IsY0FESixNQUFNOzJGQUNsQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFRakIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TW9kYWxDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtBcHBBdXRoTW9kYWx9IGZyb20gJy4uL2F1dGgvYXV0aC5tb2RhbCc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEF1dGhHdWFyZFNlcnZpY2UgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVidWc6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudFxuICApIHtcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgY2FuQWN0aXZhdGUoXG4gICAgbmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4gfCBib29sZWFuIHwgVXJsVHJlZSB7XG5cbiAgICAvLyBJZiBhY2NvdW50IG5vdCBzdGFydGVkOiBsb29wIGFmdGVyIHN0YXJ0ZWRcbiAgICBpZiAoIXRoaXMuYWNjb3VudFNlcnZpY2Uuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKVxuICAgICAgICAvLyBJdGVyYXRlXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuY2FuQWN0aXZhdGUobmV4dCwgc3RhdGUpIGFzIFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+KTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSBsb2dpblxuICAgIGlmICghdGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2F1dGgtZ3VhcmRdIE5lZWQgYXV0aGVudGljYXRpb24gZm9yIHBhZ2UgLycgKyBuZXh0LnVybC5qb2luKCcvJykpO1xuICAgICAgcmV0dXJuIHRoaXMubG9naW4obmV4dClcbiAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYXV0aC1ndWFyZF0gQXV0aGVudGljYXRpb24gY2FuY2VsbGVkLiBDb3VsZCBub3QgYWNjZXNzIHRvIC8nICsgbmV4dC51cmwuam9pbignLycpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5wYXJzZVVybCgnL2hvbWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSXRlcmF0ZVxuICAgICAgICAgIHJldHVybiB0aGlzLmNhbkFjdGl2YXRlKG5leHQsIHN0YXRlKSBhcyBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5leHQuZGF0YSAmJiBuZXh0LmRhdGEucHJvZmlsZSAmJiAhdGhpcy5hY2NvdW50U2VydmljZS5oYXNNaW5Qcm9maWxlKG5leHQuZGF0YS5wcm9maWxlKSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYXV0aC1ndWFyZF0gTm90IGF1dGhvcml6ZWQgYWNjZXNzIHRvIC8nICsgbmV4dC51cmwuam9pbignLycpICsgJy4gTWlzc2luZyByZXF1aXJlZCBwcm9maWxlOiAnICsgbmV4dC5kYXRhLnByb2ZpbGUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thdXRoLWd1YXJkXSBBdXRob3JpemVkIGFjY2VzcyB0byAvJyArIG5leHQudXJsLmpvaW4oJy8nKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsb2dpbihuZXh0PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe2NvbXBvbmVudDogQXBwQXV0aE1vZGFsLCBjb21wb25lbnRQcm9wczoge25leHR9fSk7XG4gICAgICBtb2RhbC5vbkRpZERpc21pc3MoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4gbW9kYWwucHJlc2VudCgpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|