@microsoft/windows-admin-center-sdk 4.123.0 → 4.232.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/assets/strings/cs-CZ/strings.json +1 -1
- package/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/fr-FR/strings.json +1 -1
- package/angular/assets/strings/hu-HU/strings.json +1 -1
- package/angular/assets/strings/id-ID/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ja-JP/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pl-PL/strings.json +1 -1
- package/angular/assets/strings/pt-BR/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/ru-RU/strings.json +1 -1
- package/angular/assets/strings/strings.json +1 -1
- package/angular/assets/strings/sv-SE/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/esm2020/src/controls/accordion/accordion-panel/accordion-panel.component.mjs +36 -12
- package/angular/esm2020/src/controls/actions/containers/action-container.component.mjs +2 -3
- package/angular/esm2020/src/controls/alert-bar/alert-bar.component.mjs +2 -2
- package/angular/esm2020/src/controls/breadcrumb-header/breadcrumb-header.component.mjs +1 -1
- package/angular/esm2020/src/controls/common/base.component.mjs +1 -1
- package/angular/esm2020/src/controls/common/spacer-base.component.mjs +25 -1
- package/angular/esm2020/src/controls/context-menu/context-menu.component.mjs +2 -3
- package/angular/esm2020/src/controls/data-table/data-table.component.mjs +7 -7
- package/angular/esm2020/src/controls/dialog/base-dialog.component.mjs +2 -4
- package/angular/esm2020/src/controls/dialog/confirmation-list-dialog/confirmation-list-dialog.component.mjs +2 -2
- package/angular/esm2020/src/controls/dropdown/dropdown.component.mjs +1 -4
- package/angular/esm2020/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.mjs +59 -0
- package/angular/esm2020/src/controls/form/form-field/array/array-form-field.component.mjs +24 -35
- package/angular/esm2020/src/controls/form/form-field/clock/clock-form-field.component.mjs +10 -7
- package/angular/esm2020/src/controls/form/form-field/form-field-accessibility-manager-base.service.mjs +105 -0
- package/angular/esm2020/src/controls/form/form-field/form-field.component.mjs +1 -1
- package/angular/esm2020/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.mjs +38 -0
- package/angular/esm2020/src/controls/form/form-field/list/list-form-field.component.mjs +56 -38
- package/angular/esm2020/src/controls/form/form-field/number/number-form-field.component.mjs +22 -4
- package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.mjs +54 -0
- package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.mjs +67 -67
- package/angular/esm2020/src/controls/form/form-field/radio-group/classic/radio-group-form-field.component.mjs +5 -5
- package/angular/esm2020/src/controls/form/forms.module.mjs +19 -2
- package/angular/esm2020/src/controls/icon/icon-text/icon-text.component.mjs +6 -6
- package/angular/esm2020/src/controls/icon/layered-icon/status/status-icon.component.mjs +1 -1
- package/angular/esm2020/src/controls/layout/editable-layout.component.mjs +2 -3
- package/angular/esm2020/src/controls/node-credentials-form/node-credentials-form.component.mjs +2 -2
- package/angular/esm2020/src/controls/page-alert-bar/page-alert-bar.component.mjs +4 -4
- package/angular/esm2020/src/controls/property-grid/property-grid.component.mjs +33 -13
- package/angular/esm2020/src/controls/schema/tabbed-form-loader.component.mjs +2 -2
- package/angular/esm2020/src/controls/settings/common-settings/common-settings.component.mjs +5 -5
- package/angular/esm2020/src/controls/settings/settings-form.directive.mjs +3 -7
- package/angular/esm2020/src/controls/settings/settings-form.service.mjs +2 -4
- package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
- package/angular/esm2020/src/controls/split-view/split-view.component.mjs +2 -2
- package/angular/esm2020/src/controls/wizard/models/wizard-step-snap-in-output.mjs +1 -1
- package/angular/esm2020/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.mjs +3 -3
- package/angular/esm2020/src/data/extension-broker/snap-in-listener.mjs +80 -0
- package/angular/esm2020/src/data/index.mjs +2 -1
- package/angular/esm2020/src/directives/router/router-link.directive.mjs +2 -2
- package/angular/esm2020/src/directives/svg/svg.directive.mjs +2 -3
- package/angular/esm2020/src/generated/strings.mjs +1 -1
- package/angular/esm2020/src/service/navigation.service.mjs +3 -8
- package/angular/esm2020/src/service/user-alive.service.mjs +2 -4
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +665 -239
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
- package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +636 -237
- package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
- package/angular/package.json +1 -1
- package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +13 -4
- package/angular/src/controls/common/spacer-base.component.d.ts +11 -2
- package/angular/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.d.ts +38 -0
- package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +3 -1
- package/angular/src/controls/form/form-field/form-field-accessibility-manager-base.service.d.ts +37 -0
- package/angular/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.d.ts +25 -0
- package/angular/src/controls/form/form-field/list/list-form-field.component.d.ts +12 -2
- package/angular/src/controls/form/form-field/number/number-form-field.component.d.ts +8 -0
- package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.d.ts +37 -0
- package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.d.ts +12 -8
- package/angular/src/controls/icon/icon-text/icon-text.component.d.ts +1 -1
- package/angular/src/controls/property-grid/property-grid.component.d.ts +2 -0
- package/angular/src/controls/wizard/models/wizard-step-snap-in-output.d.ts +1 -1
- package/{core → angular/src}/data/extension-broker/snap-in-listener.d.ts +49 -46
- package/angular/src/data/index.d.ts +1 -0
- package/angular/src/directives/svg/svg.directive.d.ts +1 -2
- package/angular/src/generated/strings.d.ts +12 -0
- package/core/async/cancellation.js +312 -0
- package/core/async/index.js +312 -0
- package/core/async/progress.js +312 -0
- package/core/azure/azure-constants.d.ts +2 -2
- package/core/azure/azure-constants.d.ts.map +1 -1
- package/core/azure/azure-constants.js +322 -3
- package/core/azure/azure-constants.js.map +1 -1
- package/core/azure/azure-logging.js +312 -0
- package/core/azure/azure-manager.js +312 -0
- package/core/azure/models/aadAppConfig-data.js +312 -0
- package/core/azure/models/azureArcStatusEnum.js +312 -0
- package/core/azure/models/azureTokenResult-data.js +312 -0
- package/core/azure/resources/deployment-operation-request-body.js +312 -0
- package/core/azure/resources/deployment-operation-response.js +312 -0
- package/core/azure/resources/location-data.js +315 -0
- package/core/azure/resources/resource-group-data.js +312 -0
- package/core/azure/resources/subscription-data.js +312 -0
- package/core/base/data-store/browser-storage-data-store.js +315 -0
- package/core/base/data-store/cached-data-store.js +312 -0
- package/core/base/data-store/data-store.js +312 -0
- package/core/base/data-store/local-data-store.js +312 -0
- package/core/base/data-store/memory-data-store.js +312 -0
- package/core/base/data-store/session-data-store.js +312 -0
- package/core/base/date/date-like.js +312 -0
- package/core/base/date/date-range.js +312 -0
- package/core/base/date/date-time.js +312 -0
- package/core/base/date/date-type.js +312 -0
- package/core/base/date/time-unit.js +312 -0
- package/core/base/decorators/base.js +312 -0
- package/core/base/decorators/debounce.decorators.js +312 -0
- package/core/base/decorators/delay.decorator.js +315 -0
- package/core/base/decorators/yield.decorator.js +312 -0
- package/core/base/environment.js +312 -0
- package/core/base/json.js +312 -0
- package/core/base/msft-sme.mock.js +316 -0
- package/core/base/polyfills/array.js +315 -0
- package/core/base/polyfills/string.js +312 -0
- package/core/base/rxjs-lifetime-manager.js +312 -0
- package/core/base/utilities.js +312 -0
- package/core/base/versioned-object.js +312 -0
- package/core/data/accessibility-manager.js +312 -0
- package/core/data/active-directory/active-directory.js +312 -0
- package/core/data/active-directory/models/account-info.js +312 -0
- package/core/data/active-directory/models/active-directory-search-options.js +312 -0
- package/core/data/active-directory/models/search-type.js +312 -0
- package/core/data/animation.js +312 -0
- package/core/data/app-context.js +312 -0
- package/core/data/asset-manager.js +315 -0
- package/core/data/base64-array-buffer.js +312 -0
- package/core/data/batch-connection.js +312 -0
- package/core/data/cim-connection.js +312 -0
- package/core/data/cim-stream.js +312 -0
- package/core/data/cim.js +312 -0
- package/core/data/column-picker.js +312 -0
- package/core/data/cookie.js +312 -0
- package/core/data/core-environment.js +315 -0
- package/core/data/crypto.js +312 -0
- package/core/data/deployment-share.js +312 -0
- package/core/data/disposable.js +312 -0
- package/core/data/electron.js +315 -0
- package/core/data/error-extended.js +312 -0
- package/core/data/extension-broker/dialog-listener.js +312 -0
- package/core/data/extension-broker/extension-broker.js +312 -0
- package/core/data/extension-broker/extension-listener.js +312 -0
- package/core/data/extension-broker/model/extension-broker-request-payload.js +312 -0
- package/core/data/extension-broker/model/extension-broker-response-error.js +312 -0
- package/core/data/extension-broker/model/extension-broker-response-payload.js +312 -0
- package/core/data/extension-broker/model/extension-entries.js +315 -0
- package/core/data/extension-broker/model/extension-instance.js +315 -0
- package/core/data/extension-broker/model/extension-rect.js +312 -0
- package/core/data/extension-broker/model/extension-search-options.js +312 -0
- package/core/data/extension-broker/service-listener.js +312 -0
- package/core/data/extension-broker/worker-listener.js +312 -0
- package/core/data/extension-broker/worker-set.js +312 -0
- package/core/data/file-transfer.js +312 -0
- package/core/data/gateway-connection.js +312 -0
- package/core/data/gateway-status.js +312 -0
- package/core/data/gateway-url-builder.js +312 -0
- package/core/data/gateway-url-translator.d.ts +1 -0
- package/core/data/gateway-url-translator.d.ts.map +1 -1
- package/core/data/gateway-url-translator.js +337 -6
- package/core/data/gateway-url-translator.js.map +1 -1
- package/core/data/gateway-urls.js +312 -0
- package/core/data/globalization.js +315 -0
- package/core/data/http-constants.js +315 -0
- package/core/data/http.js +312 -0
- package/core/data/jobs/jobs-manager.js +312 -0
- package/core/data/jobs/models/job-credentials.js +312 -0
- package/core/data/jobs/models/job-node.js +312 -0
- package/core/data/jobs/models/job-paginated-response.js +315 -0
- package/core/data/jobs/models/job-pagination-options.js +315 -0
- package/core/data/jobs/models/job.js +312 -0
- package/core/data/jobs/models/node-job.js +312 -0
- package/core/data/jobs/models/powershell-job.js +312 -0
- package/core/data/language.js +315 -0
- package/core/data/lifetime-data.js +312 -0
- package/core/data/localization-manager.js +312 -0
- package/core/data/native-q.js +312 -0
- package/core/data/net.d.ts.map +1 -1
- package/core/data/net.js +313 -1
- package/core/data/net.js.map +1 -1
- package/core/data/node-connection.d.ts.map +1 -1
- package/core/data/node-connection.js +312 -2
- package/core/data/node-connection.js.map +1 -1
- package/core/data/node-extension-install.js +312 -0
- package/core/data/powershell-alternate.js +312 -0
- package/core/data/powershell-batch.js +312 -0
- package/core/data/powershell-connection.js +312 -0
- package/core/data/powershell-crypto.js +312 -0
- package/core/data/powershell-stream.js +312 -0
- package/core/data/powershell.js +312 -0
- package/core/data/query-cache.js +312 -0
- package/core/data/resource-cache.js +312 -0
- package/core/data/schedule-reboot.js +312 -0
- package/core/data/settings-manager.js +312 -0
- package/core/data/settings-manger.mock.js +312 -0
- package/core/data/sme-extension.js +312 -0
- package/core/data/ssh-stream.js +312 -0
- package/core/data/units.js +312 -0
- package/core/data/uri-builder.js +315 -0
- package/core/data/wdac-operations.js +312 -0
- package/core/data/websocket-stream.js +312 -0
- package/core/diagnostics/error-monitor.js +312 -0
- package/core/diagnostics/log-level.js +312 -0
- package/core/diagnostics/log-record.js +312 -0
- package/core/diagnostics/logging-constants.js +312 -0
- package/core/diagnostics/logging.js +312 -0
- package/core/diagnostics/logging.mock.js +312 -0
- package/core/diagnostics/sme-web-telemetry-models.js +312 -0
- package/core/diagnostics/sme-web-telemetry.d.ts +1 -2
- package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
- package/core/diagnostics/sme-web-telemetry.js +336 -15
- package/core/diagnostics/sme-web-telemetry.js.map +1 -1
- package/core/diagnostics/telemetry-control-type.js +312 -0
- package/core/diagnostics/telemetry-options.js +312 -0
- package/core/diagnostics/telemetry-record.js +312 -0
- package/core/dom/dom.js +312 -0
- package/core/frame/frame-connection.js +312 -0
- package/core/frame/frame-connection.mock.js +312 -0
- package/core/frame/shell-navigation-connection.js +312 -0
- package/core/generated/powershell-scripts.d.ts.map +1 -1
- package/core/generated/powershell-scripts.js +313 -1
- package/core/generated/powershell-scripts.js.map +1 -1
- package/core/generated/strings.js +312 -0
- package/core/host/host-core-manager.js +312 -0
- package/core/host/host-core-message-type.js +312 -0
- package/core/host/host-core-messages.js +312 -0
- package/core/index.d.ts +0 -1
- package/core/index.d.ts.map +1 -1
- package/core/index.js +312 -1
- package/core/index.js.map +1 -1
- package/core/manifest/environment-modules.js +312 -0
- package/core/manifest/manifest-loader.js +312 -0
- package/core/notification/client-notification-instance.js +312 -0
- package/core/notification/client-notification.js +312 -0
- package/core/notification/notification-connection.js +312 -0
- package/core/notification/notification-link-type.js +312 -0
- package/core/notification/notification-manager.js +312 -0
- package/core/notification/notification-message.js +312 -0
- package/core/notification/notification-state.js +312 -0
- package/core/notification/notification.js +312 -0
- package/core/notification/powershell-notification.js +312 -0
- package/core/notification/socket-signalr.js +312 -0
- package/core/notification/work-item-connection.js +312 -0
- package/core/notification/work-item-manager.js +312 -0
- package/core/notification/work-item-request.js +312 -0
- package/core/performance/performance-profile-data-type.js +312 -0
- package/core/performance/performance-profile-data.js +312 -0
- package/core/performance/performance-profile-database.js +312 -0
- package/core/performance/performance-profile-record.js +312 -0
- package/core/performance/performance-profile.d.ts.map +1 -1
- package/core/performance/performance-profile.js +321 -9
- package/core/performance/performance-profile.js.map +1 -1
- package/core/performance/performance-tracker.js +312 -0
- package/core/polyfills.js +312 -0
- package/core/resources/scripts/public/crypto/Get-DecryptedDataFromNode.ps1 +216 -0
- package/core/resources/scripts/public/crypto/Get-EncryptionJWKOnNode.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-CimWin32LogicalDisk.ps1 +218 -0
- package/core/resources/scripts/public/inventory/Get-CimWin32NetworkAdapter.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-CimWin32PhysicalMemory.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-CimWin32Processor.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-ClusterInventory.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-ClusterNodes.ps1 +216 -0
- package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +246 -8
- package/core/rpc/alive/rpc-alive-client.js +312 -0
- package/core/rpc/alive/rpc-alive-handler.js +312 -0
- package/core/rpc/alive/rpc-alive-model.js +315 -0
- package/core/rpc/alive/rpc-alive-subject-server.js +312 -0
- package/core/rpc/alive/rpc-observable-alive-client.js +312 -0
- package/core/rpc/alive/rpc-observable-alive-model.js +312 -0
- package/core/rpc/alive/rpc-observable-alive-server.js +312 -0
- package/core/rpc/azure/rpc-azure-model.js +312 -0
- package/core/rpc/azure/rpc-azure-request-client.js +312 -0
- package/core/rpc/azure/rpc-azure-request-handler.js +312 -0
- package/core/rpc/azure/rpc-azure-request-subject-server.js +312 -0
- package/core/rpc/azure/rpc-azure-response-client.js +312 -0
- package/core/rpc/azure/rpc-azure-response-handler.js +315 -0
- package/core/rpc/credssp/rpc-credssp-model.js +312 -0
- package/core/rpc/credssp/rpc-credssp-request-client.js +312 -0
- package/core/rpc/credssp/rpc-credssp-request-handler.js +315 -0
- package/core/rpc/credssp/rpc-credssp-request-subject-server.js +312 -0
- package/core/rpc/credssp/rpc-credssp-response-client.js +312 -0
- package/core/rpc/credssp/rpc-credssp-response-handler.js +315 -0
- package/core/rpc/dialog/rpc-dialog-client.js +312 -0
- package/core/rpc/dialog/rpc-dialog-handler.js +312 -0
- package/core/rpc/dialog/rpc-dialog-model.js +312 -0
- package/core/rpc/dialog/rpc-dialog-subject-server.js +315 -0
- package/core/rpc/electron/rpc-electron-model.js +312 -0
- package/core/rpc/electron/rpc-electron-request-client.js +312 -0
- package/core/rpc/electron/rpc-electron-request-handler.js +312 -0
- package/core/rpc/electron/rpc-electron-request-subject-server.js +312 -0
- package/core/rpc/electron/rpc-electron-response-client.js +312 -0
- package/core/rpc/electron/rpc-electron-response-handler.js +312 -0
- package/core/rpc/elevate/rpc-observable-elevate-client.js +312 -0
- package/core/rpc/elevate/rpc-observable-elevate-model.js +312 -0
- package/core/rpc/elevate/rpc-observable-elevate-server.js +312 -0
- package/core/rpc/error-monitor/rpc-observable-error-monitor-client.js +312 -0
- package/core/rpc/error-monitor/rpc-observable-error-monitor-model.js +315 -0
- package/core/rpc/error-monitor/rpc-observable-error-monitor-server.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-model.js +315 -0
- package/core/rpc/extension-broker/rpc-extension-broker-module-request-subject-server.js +315 -0
- package/core/rpc/extension-broker/rpc-extension-broker-request-client.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-request-handler.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-request-subject-server.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-response-client.js +312 -0
- package/core/rpc/extension-broker/rpc-extension-broker-response-handler.js +312 -0
- package/core/rpc/extension-data/rpc-observable-extension-data-client.js +312 -0
- package/core/rpc/extension-data/rpc-observable-extension-data-model.js +312 -0
- package/core/rpc/extension-data/rpc-observable-extension-data-server.js +312 -0
- package/core/rpc/forward/rpc-forward-auto-client.js +312 -0
- package/core/rpc/forward/rpc-forward-down-client.js +315 -0
- package/core/rpc/forward/rpc-forward-down-handler.js +312 -0
- package/core/rpc/forward/rpc-forward-model.js +312 -0
- package/core/rpc/forward/rpc-forward-up-client.js +312 -0
- package/core/rpc/forward/rpc-forward-up-handler.js +312 -0
- package/core/rpc/forward/rpc-forward-up-subject-server.js +312 -0
- package/core/rpc/log/rpc-log-client.js +312 -0
- package/core/rpc/log/rpc-log-handler.js +312 -0
- package/core/rpc/log/rpc-log-model.js +312 -0
- package/core/rpc/log/rpc-log-subject-server.js +312 -0
- package/core/rpc/notification/rpc-notification-client.js +312 -0
- package/core/rpc/notification/rpc-notification-handler.js +312 -0
- package/core/rpc/notification/rpc-notification-model.js +312 -0
- package/core/rpc/notification/rpc-notification-subject-server.js +312 -0
- package/core/rpc/overlay/rpc-overlay-close-client.js +312 -0
- package/core/rpc/overlay/rpc-overlay-close-handler.js +312 -0
- package/core/rpc/overlay/rpc-overlay-model.js +312 -0
- package/core/rpc/overlay/rpc-overlay-open-client.js +315 -0
- package/core/rpc/overlay/rpc-overlay-open-handler.js +312 -0
- package/core/rpc/overlay/rpc-overlay-open-subject-server.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-client.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-config-client.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-config-server.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-model.js +312 -0
- package/core/rpc/performance/rpc-observable-performance-server.js +312 -0
- package/core/rpc/report/rpc-report-client.js +312 -0
- package/core/rpc/report/rpc-report-handler.js +312 -0
- package/core/rpc/report/rpc-report-model.js +312 -0
- package/core/rpc/report/rpc-report-subject-server.js +315 -0
- package/core/rpc/rpc-base.js +312 -0
- package/core/rpc/rpc-channel.js +312 -0
- package/core/rpc/rpc-forwarder.js +312 -0
- package/core/rpc/rpc-inbound-client.js +312 -0
- package/core/rpc/rpc-inbound.js +312 -0
- package/core/rpc/rpc-manager.js +312 -0
- package/core/rpc/rpc-module-subject-server.js +315 -0
- package/core/rpc/rpc-observable-client.js +312 -0
- package/core/rpc/rpc-observable-request.js +312 -0
- package/core/rpc/rpc-observable-result.js +312 -0
- package/core/rpc/rpc-observable-server.js +312 -0
- package/core/rpc/rpc-outbound-client.js +312 -0
- package/core/rpc/rpc-outbound.js +312 -0
- package/core/rpc/rpc-subject-server.js +312 -0
- package/core/rpc/rpc.js +312 -0
- package/core/rpc/seek/rpc-seek-client.js +312 -0
- package/core/rpc/seek/rpc-seek-handler.js +315 -0
- package/core/rpc/seek/rpc-seek-model.js +312 -0
- package/core/rpc/settings/rpc-settings-client.js +315 -0
- package/core/rpc/settings/rpc-settings-handler.js +312 -0
- package/core/rpc/settings/rpc-settings-model.js +312 -0
- package/core/rpc/settings/rpc-settings-subject-server.js +312 -0
- package/core/rpc/shell-navigate/rpc-shell-navigate-client.js +312 -0
- package/core/rpc/shell-navigate/rpc-shell-navigate-handler.js +312 -0
- package/core/rpc/shell-navigate/rpc-shell-navigate-model.js +312 -0
- package/core/rpc/shell-navigate/rpc-shell-navigate-subject-server.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-model.js +315 -0
- package/core/rpc/sme-extension/rpc-sme-extension-request-client.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-request-handler.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-request-subject-server.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-response-client.js +312 -0
- package/core/rpc/sme-extension/rpc-sme-extension-response-handler.js +312 -0
- package/core/rpc/telemetry/rpc-telemetry-client.js +312 -0
- package/core/rpc/telemetry/rpc-telemetry-handler.js +315 -0
- package/core/rpc/telemetry/rpc-telemetry-model.js +312 -0
- package/core/rpc/telemetry/rpc-telemetry-subject-server.js +312 -0
- package/core/rpc/update-data/rpc-update-data-client.js +312 -0
- package/core/rpc/update-data/rpc-update-data-handler.js +312 -0
- package/core/rpc/update-data/rpc-update-data-model.js +312 -0
- package/core/rpc/update-data/rpc-update-data-subject-server.js +312 -0
- package/core/rpc/update-theme/rpc-observable-update-theme-client.js +312 -0
- package/core/rpc/update-theme/rpc-observable-update-theme-model.js +312 -0
- package/core/rpc/update-theme/rpc-observable-update-theme-server.js +312 -0
- package/core/rpc/work-item/rpc-work-item-client.js +312 -0
- package/core/rpc/work-item/rpc-work-item-handler.js +312 -0
- package/core/rpc/work-item/rpc-work-item-model.js +312 -0
- package/core/rpc/work-item/rpc-work-item-subject-server.js +312 -0
- package/core/rpc/work-item-find/rpc-work-item-find-client.js +312 -0
- package/core/rpc/work-item-find/rpc-work-item-find-handler.js +312 -0
- package/core/rpc/work-item-find/rpc-work-item-find-model.js +312 -0
- package/core/rpc/work-item-find/rpc-work-item-find-subject-server.js +312 -0
- package/core/security/active-connection.js +312 -0
- package/core/security/authorization-manager.js +312 -0
- package/core/security/connection-manager-settings/common-connection-settings.js +315 -0
- package/core/security/connection-manager-settings/connection-settings.js +312 -0
- package/core/security/connection-manager.js +312 -0
- package/core/security/connection-stream.js +312 -0
- package/core/security/connection.js +312 -0
- package/core/security/credssp-manager.js +312 -0
- package/core/security/sign-on-manager.js +312 -0
- package/core/security/tag-manager.js +312 -0
- package/core/security/tool-condition-validator.js +312 -0
- package/core/security/tool-connection-query.js +312 -0
- package/core/security/user-principal.js +312 -0
- package/core/shared/cluster-inventory/cluster-inventory-cache.js +312 -0
- package/core/shared/cluster-inventory/cluster-inventory.js +312 -0
- package/core/shared/cluster-inventory/cluster-node-inventory.js +312 -0
- package/core/shared/gateway-inventory/gateway-inventory-cache.js +312 -0
- package/core/shared/gateway-inventory/gateway-inventory-detail-cache.js +312 -0
- package/core/shared/gateway-inventory/gateway-inventory-detail.js +312 -0
- package/core/shared/gateway-inventory/gateway-inventory.js +312 -0
- package/core/shared/inventory-query-caches.js +312 -0
- package/core/shared/server-inventory/server-inventory-cache.js +312 -0
- package/core/shared/server-inventory/server-inventory-detail-cache.js +312 -0
- package/core/shared/server-inventory/server-inventory-detail.js +315 -0
- package/core/shared/server-inventory/server-inventory.js +312 -0
- package/core/shared/shared-cache.js +312 -0
- package/core/shared/tool-inventory/tool-inventory-cache.js +312 -0
- package/core/shared/tool-inventory/tool-inventory.js +312 -0
- package/core/special.js +315 -0
- package/core/test-utilities/accessibility-tester.js +312 -0
- package/core/test-utilities/console.mock.js +312 -0
- package/core/test-utilities/jasmine-axe-matcher.js +312 -0
- package/core/test-utilities/wait-async.js +312 -0
- package/core/test.js +312 -0
- package/core/testing.js +312 -0
- package/core/workflow/persistent-local-storage.js +312 -0
- package/core/workflow/persistent-work-item-apply-state.js +316 -0
- package/core/workflow/persistent-work-item-state.js +312 -0
- package/core/workflow/persistent-work-item.js +315 -0
- package/core/workflow/persistent-workflow-builder.js +312 -0
- package/core/workflow/persistent-workflow-context.js +312 -0
- package/core/workflow/persistent-workflow-runner.js +312 -0
- package/core/workflow/persistent-workflow-snapshot.js +312 -0
- package/core/workflow/persistent-workflow-store.js +312 -0
- package/core/workflow/persistent-workflow.js +312 -0
- package/package.json +11 -9
- package/styles/css/main-v2.css +1 -1
- package/styles/fonts/SegoeUI/Bold/SegoeUIBold-5.27.woff +0 -0
- package/styles/fonts/SegoeUI/Light/SegoeUILight-5.27.woff +0 -0
- package/styles/fonts/SegoeUI/Normal/SegoeUI-5.27.woff +0 -0
- package/styles/fonts/SegoeUI/SemiBold/SegoeUISemiBold-5.27.woff +0 -0
- package/styles/fonts/SegoeUI/SemiLight/SegoeUISemiLight-5.27.woff +0 -0
- package/styles/fonts/ServMDL2/ServMDL2-4.66.woff +0 -0
- package/tools/build/webpack/index-html.transform.js +312 -0
- package/tools/build/webpack/shell.index-html.transform.js +312 -0
- package/tools/build/webpack/shell.webpack.config.js +312 -0
- package/tools/build/webpack/webpack.config.js +312 -0
- package/tools/code-formatter/.eslintrc.base.json +3 -1
- package/tools/code-formatter/lint.d.ts.map +1 -1
- package/tools/code-formatter/lint.js +319 -1
- package/tools/code-formatter/lint.js.map +1 -1
- package/tools/code-formatter/utilities.d.ts +7 -0
- package/tools/code-formatter/utilities.d.ts.map +1 -0
- package/tools/code-formatter/utilities.js +395 -0
- package/tools/code-formatter/utilities.js.map +1 -0
- package/tools/gulp-doc-generator/index.js +312 -0
- package/tools/gulp-manifest-resource/index.js +312 -0
- package/tools/gulp-manifest-validator/index.js +312 -0
- package/tools/gulp-merge-json-in-folders/index.js +312 -0
- package/tools/gulp-merge-json-in-folders/json-merge.js +312 -0
- package/tools/gulp-ps-cim/index.js +315 -0
- package/tools/gulp-ps-code/index.d.ts.map +1 -1
- package/tools/gulp-ps-code/index.js +323 -2
- package/tools/gulp-ps-code/index.js.map +1 -1
- package/tools/gulp-ps-code/ps-code-convert.js +312 -0
- package/tools/gulp-ps-manifest/index.js +312 -0
- package/tools/gulp-ps-module/index.d.ts.map +1 -1
- package/tools/gulp-ps-module/index.js +327 -3
- package/tools/gulp-ps-module/index.js.map +1 -1
- package/tools/gulp-ps-resjson/index.js +315 -0
- package/tools/gulp-resjson/index.js +315 -0
- package/tools/gulp-resjson/resjson-convert.js +312 -0
- package/tools/gulp-schema-form/index.js +312 -0
- package/tools/gulp-svg-code/index.js +312 -0
- package/tools/gulp-svg-code/svg-code-convert.js +312 -0
- package/tools/gulp-update-notes-resource/index.d.ts.map +1 -1
- package/tools/gulp-update-notes-resource/index.js +316 -4
- package/tools/gulp-update-notes-resource/index.js.map +1 -1
- package/tools/module-template/.eslintrc.json +3 -0
- package/tools/module-template/build/increment-package-version.ps1 +216 -0
- package/tools/module-template/build/push-incremented-version.ps1 +216 -1
- package/tools/module-template/build/update-powershell-code.ps1 +216 -0
- package/tools/module-template/gulpfile.ts/common/clean.ts +2 -0
- package/tools/module-template/gulpfile.ts/common/pack.ts +17 -5
- package/tools/module-template/gulpfile.ts/common/powershell.ts +40 -2
- package/tools/module-template/gulpfile.ts/common/utilities.ts +1 -0
- package/tools/pack-nuget/index.d.ts.map +1 -1
- package/tools/pack-nuget/index.js +321 -3
- package/tools/pack-nuget/index.js.map +1 -1
- package/tools/scripts/Invoke-PesterTest.ps1 +216 -0
- package/tools/scripts/New-ExtensionPackage.ps1 +373 -6
- package/tools/scripts/Search-NonAsciiText.ps1 +216 -0
- package/tools/scripts/package-information/README.md +3 -0
- package/tools/scripts/package-information/ms-logo.png +0 -0
- package/tools/test-runner/index.js +312 -0
- package/tools/utilities/index.js +312 -0
- package/tools/wac-cli/src/angular15/configs/angular-json-config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/ci-build-yml-config.js +315 -0
- package/tools/wac-cli/src/angular15/configs/config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts +9 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +328 -0
- package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js.map +1 -0
- package/tools/wac-cli/src/angular15/configs/git-ignore-config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/jasmine-test-config.js +315 -0
- package/tools/wac-cli/src/angular15/configs/package-json-config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/replace-config.js +315 -0
- package/tools/wac-cli/src/angular15/configs/tsconfig-config.js +312 -0
- package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +312 -0
- package/tools/wac-cli/src/angular15/main.d.ts +19 -3
- package/tools/wac-cli/src/angular15/main.d.ts.map +1 -1
- package/tools/wac-cli/src/angular15/main.js +353 -7
- package/tools/wac-cli/src/angular15/main.js.map +1 -1
- package/tools/wac-cli/src/angular15/upgrader/angular-json-upgrader.js +316 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/ajax-response-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/css-syntax-error-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/error-updater-angular15.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/form-control-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/iif-updater-util.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/load-children-callback-updater.js +315 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/log-parser.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/observable-throw-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/parameter-count-violation-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/string-replace-updater.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/audit/subjuct-next-updater-util.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/ci-build-yml-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts +18 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.d.ts.map +1 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +361 -0
- package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js.map +1 -0
- package/tools/wac-cli/src/angular15/upgrader/file-replacement-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/git-ignore-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/jasmine-test-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/package-json-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/remove-upgrader.js +315 -0
- package/tools/wac-cli/src/angular15/upgrader/replace-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/tsconfig-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/upgrader/version-json-upgrader.js +312 -0
- package/tools/wac-cli/src/angular15/utils/add-item.js +312 -0
- package/tools/wac-cli/src/angular15/utils/command-runner.js +312 -0
- package/tools/wac-cli/src/angular15/utils/file-comparison.js +315 -0
- package/tools/wac-cli/src/angular15/utils/file-replacement.js +312 -0
- package/tools/wac-cli/src/angular15/utils/file-writer.js +312 -0
- package/tools/wac-cli/src/angular15/utils/logger.js +312 -0
- package/tools/wac-cli/src/angular15/utils/main-debugger.js +312 -0
- package/tools/wac-cli/src/angular15/utils/relative-path.js +312 -0
- package/tools/wac-cli/src/angular15/utils/remove-item.js +312 -0
- package/tools/wac-cli/src/angular15/utils/space-generator.js +312 -0
- package/tools/wac-cli/src/angular15/utils/update-shell-references.js +316 -0
- package/tools/wac-cli/src/common.js +312 -0
- package/tools/wac-cli/src/create/main.js +312 -0
- package/tools/wac-cli/src/eslint/main.js +312 -0
- package/tools/wac-cli/src/index.js +312 -0
- package/tools/wac-cli/src/upgrade/error-updater.js +312 -0
- package/tools/wac-cli/src/upgrade/error-updaters/component-selector-updater.js +315 -0
- package/tools/wac-cli/src/upgrade/error-updaters/only-arrow-functions-updater.js +315 -0
- package/tools/wac-cli/src/upgrade/error-updaters/updater-lookup.js +312 -0
- package/tools/wac-cli/src/upgrade/file-updater.js +312 -0
- package/tools/wac-cli/src/upgrade/get-files.js +312 -0
- package/tools/wac-cli/src/upgrade/main.js +312 -0
- package/tools/wac-cli/src/upgrade/models/error-result.js +312 -0
- package/tools/wac-cli/src/upgrade/models/updater-interface.js +312 -0
- package/tools/wac-cli/src/upgrade/package-updater.js +312 -0
- package/tools/wac-cli/templates/wac-template/src/favicon.ico +0 -0
- package/tools/wac-cli/templates/wac-template/src/karma.conf.js +312 -0
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Error.ps1 +216 -0
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Exception.ps1 +216 -0
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Process.ps1 +216 -1
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Service.ps1 +216 -1
- package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-WinRmState.ps1 +216 -1
- package/core/data/extension-broker/snap-in-listener.d.ts.map +0 -1
- package/core/data/extension-broker/snap-in-listener.js +0 -73
- package/core/data/extension-broker/snap-in-listener.js.map +0 -1
- package/microsoft-windows-admin-center-sdk-4.123.0.tgz +0 -0
|
@@ -977,4 +977,4 @@ export class SmeInternalFormFieldComponent extends FormFieldComponent {
|
|
|
977
977
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SmeInternalFormFieldComponent, [{
|
|
978
978
|
type: Directive
|
|
979
979
|
}], null, null); })();
|
|
980
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDWSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsV0FBVyxFQUFVLFFBQVEsRUFBRSxLQUFLLEVBQTBDLE1BQU0sRUFBaUIsV0FBVyxFQUNqSSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN2RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQXFDLHVCQUF1QixFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBQ3BJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBOEMsa0NBQWtDLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6SCxPQUFPLEVBQWlDLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFekgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJB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S3hDLE9BQU87a0JBRmIsS0FBSzs7a0JBQ0wsV0FBVzttQkFBQyw4QkFBOEI7WUFPcEMsUUFBUTtrQkFEZCxLQUFLO1lBUUssWUFBWTtrQkFEdEIsS0FBSztZQWFDLGVBQWU7a0JBRHJCLEtBQUs7WUFPQyxPQUFPO2tCQURiLEtBQUs7WUFPQyxjQUFjO2tCQURwQixLQUFLO1lBK0JLLGlCQUFpQjtrQkFIM0IsV0FBVzttQkFBQyxvQkFBb0I7O2tCQUNoQyxXQUFXO21CQUFDLGVBQWU7O2tCQUMzQixXQUFXO21CQUFDLG9CQUFvQjtZQVUxQixhQUFhO2tCQURuQixLQUFLO21CQUFDLFVBQVU7WUFPVixPQUFPO2tCQURiLEtBQUs7WUFPQyxjQUFjO2tCQURwQixLQUFLO1lBT0MsY0FBYztrQkFEcEIsS0FBSztZQU9DLEtBQUs7a0JBRFgsS0FBSztZQVFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsa0JBQWtCO1lBOEZ4QixtQkFBbUI7a0JBRHpCLEtBQUs7WUFLQyxNQUFNO2tCQURaLE1BQU07WUFZQSxnQkFBZ0I7a0JBRHRCLFdBQVc7bUJBQUMseUNBQXlDO1lBTzNDLGtCQUFrQjtrQkFENUIsV0FBVzttQkFBQyw2Q0FBNkM7WUFXL0MsZ0JBQWdCO2tCQUQxQixXQUFXO21CQUFDLDJDQUEyQztZQVlqRCxXQUFXO2tCQURqQixLQUFLO1lBNENDLGtCQUFrQjtrQkFEeEIsS0FBSztZQW1SRSxvQkFBb0IsTUFVcEIseUJBQXlCO0FBeWRyQzs7O0dBR0c7QUFFSCxrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQiw2QkFBc0MsU0FBUSxrQkFBbUM7O3dVQUFqRiw2QkFBNkIsU0FBN0IsNkJBQTZCOytHQUE3Qiw2QkFBNkI7dUZBQTdCLDZCQUE2QjtjQUZsRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL2xvZ2dpbmcnO1xyXG5pbXBvcnQgeyBEb20gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RvbS9kb20nO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlzYWJsZWRDaGFuZ2VkRXZlbnQgfSBmcm9tICcuLi8uLi9jb21tb24vZXZlbnRzL2Rpc2FibGVkQ2hhbmdlZC5ldmVudCc7XHJcbmltcG9ydCB7IExheW91dCwgU01FX0xBWU9VVF9QUk9WSURFUiB9IGZyb20gJy4uLy4uL2NvbW1vbi9sYXlvdXQnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnQsIFZhbGlkYXRpb25BbGVydHMsIFZhbGlkYXRpb25BbGVydFNldmVyaXR5LCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0tZmllbGQtYWNjZXNzb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkQWdncmVnYXRhYmxlLCBGb3JtRmllbGRBZ2dyZWdhdG9yLCBTTUVfRk9STV9GSUVMRF9BR0dSRUdBVE9SX1BST1ZJREVSIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWFnZ3JlZ2F0b3InO1xyXG5pbXBvcnQgeyBDaGVja0FzeW5jVmFsaWRhdGlvbkV2ZW50QXJncywgRm9ybUZpZWxkQXN5bmNWYWxpZGF0b3JEaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0tZmllbGQtYXN5bmMtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZENvbnRhaW5lciB9IGZyb20gJy4vZm9ybS1maWVsZC1jb250YWluZXInO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRPcmllbnRhdGlvbiB9IGZyb20gJy4vZm9ybS1maWVsZC1vcmllbnRhdGlvbic7XHJcbmltcG9ydCB7IENoZWNrVmFsaWRhdGlvbkV2ZW50QXJncywgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLXZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY29tcG9uZW50IGNsYXNzIGZvciBmb3JtIGZpZWxkc1xyXG4gKiBBIGNpcmN1bGFyIHJlZmVyZW5jZSB3b3VsZCBiZSBjcmVhdGVkIGJ5IGluamVjdGluZyBib3RoIG5nTW9kZWxcclxuICogYW5kIHByb3ZpZGluZyBAc2VlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGFuZCBAc2VlIFZhbGlkYXRvciBpbXBsZW1lbnRhdGlvbnMgb24gdGhlIHNhbWUgY29tcG9uZW50LlxyXG4gKiBUaGVyZWZvcmUsIHdlIGhhdmUgYnJva2VuIHRoZSBGb3JtRmllbGQgY29tcG9uZW50IGludG8gMyBwYXJ0cy5cclxuICogIC0gVGhlIEBzZWUgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlIGhhbmRsZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIEBzZWUgVmFsaWRhdG9yIGFuZCBAc2VlIE5HX1ZBTElEQVRPUlNcclxuICogIC0gVGhlIEBzZWUgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgaGFuZGxlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQHNlZSBDb250cm9sVmFsdWVBY2Nlc3NvciBhbmQgQHNlZSBOR19WQUxVRV9BQ0NFU1NPUlxyXG4gKiAgLSBUaGlzIEBzZWUgRm9ybUZpZWxkQ29tcG9uZW50IGlzIG91ciBnbHVlIHRoYXQgcHVsbHMgaXQgYWxsIHRvZ2V0aGVyIHdpdGggbGFiZWxzIGFuZCBhbGVydHMgYW5kIGluamVjdHMgdGhlIE5nQ29udHJvbCBpbnN0YW5jZSBzYWZlbHkuXHJcbiAqXHJcbiAqIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIGFsbCB0aHJlZSBjb21wb25lbnRzIG11c3QgdXNlIHRoZSBzYW1lIGJhc2Ugc2VsZWN0b3IgQHNlZSBGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3IuXHJcbiAqIFRoaXMgaXMgZW5mb3JjZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgY29tcG9uZW50LFxyXG4gKiBIb3dldmVyIHRoZSBkaXJlY3RpdmVzIGFyZSBkb25lIGJ5IGNvbnZlbnRpb24gYW5kIHdpbGwganVzdCBjcmFzaCBpZiB0aGUgaW5qZWN0b3IgY2Fubm90IGZpbmQgdGhlbS5cclxuICpcclxuICovXHJcblxyXG4vKipcclxuICpcclxuICogQHNtZURvYyB7QGxhYmVsIEZvcm0gZmllbGRzIEBpZCBzbWUtZm9ybS1maWVsZHMtY29tcG9uZW50fVxyXG4gKlxyXG4gKiBAb3ZlcnZpZXdcclxuICogQGZpbGUge0BmaWxlcGF0aCAuL2V4YW1wbGVzL292ZXJ2aWV3Lm1kfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFNlYXJjaCB3aXRoIGVtcGhhc2l6ZWQgc2VhcmNoIGJ1dHRvbiBAaWQgc2VhcmNoLWVtcGhhc2lzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtZW1waGFzaXplLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtZW1waGFzaXplLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFNlYXJjaCB3aXRoIGhpZGRlbiBsYWJlbCBAaWQgc2VhcmNoLWhpZGRlbn1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWhpZGRlbi1sYWJlbC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWhpZGRlbi1sYWJlbC5jb21wb25lbnQuaHRtbH1cclxuICAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgU2VhcmNoIHdpdGggcmVxdWlyZWQgZmllbGQgQGlkIHNlYXJjaC1yZXF1aXJlZH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLXJlcXVpcmVkLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtcmVxdWlyZWQuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQ2FsZW5kYXIgQGlkIGNhbGVuZGFyfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIENsb2NrIEBpZCBjbG9ja31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY2xvY2suY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2Nsb2NrLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIERhdGV0aW1lIEBpZCBkYXRldGltZX1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGF0ZXRpbWUuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RhdGV0aW1lLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFZhbGlkYXRpb24gZXJyb3IgQGlkIHZhbGlkYXRpb24tZXJyb3J9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tZXJyb3IuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tZXJyb3IuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgVmFsaWRhdGlvbiBwZW5kaW5nIEBpZCB2YWxpZGF0aW9uLXBlbmRpbmd9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tcGVuZGluZy5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1wZW5kaW5nLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFZhbGlkYXRpb24gd2l0aCBjdXN0b20gbWFya2Rvd24gQGlkIHZhbGlkYXRpb24tbWFya2Rvd259XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tbWFya2Rvd24uY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLW1hcmtkb3duLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEJhc2ljIGNvbWJvYm94IEBpZCBjb21ib2JveH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3guY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIENvbWJvYm94IHdpdGggc2VhcmNoIEBpZCBjb21ib2JveC1zZWFyY2h9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LXNlYXJjaC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtc2VhcmNoLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIE11bHRpcGxlIHNlbGVjdCBjb21ib3hib3ggQGlkIGNvbWJvYm94LW11bHRpfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1tdWx0aS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGkuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgTXVsdGlwbGUgc2VsZWN0IGNvbWJvYm94IHdpdGggbWlud2lkdGggQGlkIGNvbWJvYm94LW11bHRpLW1pbndpZHRofVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1tdWx0aS1taW53aWR0aC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGktbWlud2lkdGguY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgTXVsdGlwbGUgc2VsZWN0IGNvbWJvYm94IHdpdGggY3VzdG9tIHRvb2x0aXAgQGlkIGN1c3RvbS10b29sdGlwfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jdXN0b20tdG9vbHRpcC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY3VzdG9tLXRvb2x0aXAuY29tcG9uZW50Lmh0bWx9XHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGb3JtRmllbGRDb21wb25lbnQ8VFN0cmluZ3MsIFRNb2RlbD5cclxuICAgIGV4dGVuZHMgQmFzZUNvbXBvbmVudDxUU3RyaW5ncz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgRm9ybUZpZWxkQWdncmVnYXRhYmxlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzZWxlY3RvciB0aGF0IGFsbCBmb3JtIGZpZWxkcyBtdXN0IHVzZSBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IHdpdGhcclxuICAgICAqIEBzZWUgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgYW5kIEBzZWUgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgc2VsZWN0b3IgPSAnc21lLWZvcm0tZmllbGQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHR5cGUgb2YgZmllbGQgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoLiBUaGlzIGlzIGEgcmVxdWlyZWQgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaGVhZGVyIG9mIHRoaXMgZm9ybSBmaWVsZCBzaG91bGQgYmUgaGlkZGVuIGZyb20gdmlldyAoYnV0IG5vdCBuZWNlc3NhcmlseSBmcm9tIGFyaWEpXHJcbiAgICAgKiBOb3Qgc3VwcG9ydGVkIG9uIGFsbCBmb3JtIGZpZWxkc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGVIZWFkZXI6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdG8gbWFpbnRhaW4gdGhlIHNwYWNlIGxlZnQgYWZ0ZXIgaGlkZGluZyBoZWFkZXJcclxuICAgICAqL1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGlkZUhlYWRlclNwYWNlID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgcmVxdWlyZXMgYSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhpcyByZXF1aXJlcyBhIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXV0b2ZvY3VzOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBsYWNlaG9sZGVyIGZvciB0aGUgaW50ZXJuYWwgZm9ybSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhpcyBjb250cm9sIHRvIHRoZSB1c2VyXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byByZW5kZXIgdGhlIGxhYmVsIGluIHZlcnRpY2FsIG1pZGRsZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHZlcnRpY2FsTWlkZGxlTGFiZWwgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0ZW1wbGF0ZSByZWYgb2YgYSBzdWJmb3JtIG9mIHRoaXMgY29tcG9uZW50LiBUaGUgd2F5IHRoaXMgdGVtcGxhdGUgcmVmIGlzIHVzZWQgdmFyaWVzIGZvcm0gZmllbGQgdG8gZmllbGRcclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZilcclxuICAgIHB1YmxpYyBzdWJGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWVsZDsgQSBkZXNjcmlwdGlvbiBmb3IgdGhlIHVzZXIgb2YgdGhlIG1lYW5pbmcgYW5kIHB1cnBvc2Ugb2YgdGhpcyBmaWVsZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRGVzY3JpcHRpb247XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsRGVzY3JpcHRpb24gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtZm9ybS1maWVsZC1hdXRvLWhlaWdodCcpXHJcbiAgICBwdWJsaWMgY29tcGFjdDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtZm9ybS1maWVsZC1taW5pbWFsJylcclxuICAgIHB1YmxpYyBtaW5pbWFsOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvcm0gZmllbGQgaXMgcmVhZG9ubHkuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5zdHJ1Y3Rpb25zIG9mIHRoaXMgY29udHJvbDsgQSBidWlsdCBpbiBkZXNjcmlwdGlvbiBmb3IgdGhlIHVzZXIgb2YgaG93IHRoaXMgY29udHJvbCB3b3Jrcy5cclxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IHRoZSBjb250cm9sIGFuZCBhcHBsaWVzIHRvIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNvbnRyb2wsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBhcyBhbiBhdHRyaWJ1dGUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IGluc3RydWN0aW9ucygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsSW5zdHJ1Y3Rpb25zO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBpbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxJbnN0cnVjdGlvbnMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHByb3ZpZGVkLCByZW5kZXJzIGEgY3VzdG9tIHRvb2x0aXAgZm9yIHRoaXMgZmllbGRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG9vbHRpcC4gSWYgbm90IHByb3ZpZGVkLCBkZXRhaWxzIHByb3BlcnR5IHdpbGwgYmUgdXNlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHRvb2x0aXA6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGJpbmRpbmcgY29udGV4dCBmb3IgdGhlIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwQ29udGV4dDogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhpcyBmb3JtIGNvbnRyb2wgaXMgdHJ1bHkgZGlzYWJsZWRcclxuICAgICAqIFRoaXMgd2lsbCBiZSB0cnVlIGlmIHRoZSBhY2Nlc3NvciAobW9kZWwpLCBpbnB1dCwgb3IgYW5jZXN0b3IgaXMgZGlzYWJsZWRcclxuICAgICAqIEl0cyB2YWx1ZSBpcyBzZXQgb25seSBvbiBEb0NoZWNrLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIHJldHVybiB0cnVlIGlmIHdlIGFyZSBkaXNhYmxlZCwgb3VyIG1vZGVsIGlzIGRpc2FibGVkIG9yIGFuIGFuY2VzdG9yIGlzIGRpc2FibGVkXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtIGZpZWxkIGlzIHBlbmRpbmcgdmFsaWRhdGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbCAmJiB0aGlzLm5nTW9kZWwucGVuZGluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC50b3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWRpc2FibGVkJylcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kaXNhYmxlZCcpXHJcbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdPckRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpID8gdHJ1ZSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGJvdW5kIGlucHV0IG9mIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eVxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxyXG4gICAgQElucHV0KCdkaXNhYmxlZCcpXHJcbiAgICBwdWJsaWMgZGlzYWJsZWRJbnB1dDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtIGZpZWxkIGlzIGxvYWRpbmdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1lc3NhZ2UgdG8gc2hvdyB3aGlsZSBsb2FkaW5nXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbG9hZGluZ01lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXNzYWdlIHRvIHNob3cgd2hpbGUgcGVuZGluZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHBlbmRpbmdNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgZGF0YVV0YUlkIGlmIHBhc3NlZCBpblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHV0YUlkOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZm9ybSBmaWVsZCdzIFVUQSBpZCBnZXR0ZXIuXHJcbiAgICAgKiBUaGUgSUQgaXMgYmFzZWQgb24gdGhlIGZvcm0gZmllbGQgbmFtZSB0aGF0J3Mgc2V0IG9uIHRoZSBuZ01vZGVsLlxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS11dGEtaWQnKVxyXG4gICAgcHVibGljIGdldCBkYXRhVXRhSWQoKTogc3RyaW5nIHtcclxuICAgICAgICAvLyBGaXJzdCwgZ2V0IHRoZSBuYW1lIGZyb20gdGhlIGF0dHJpYnV0ZSBzZXQgaW4gdGhlIEhUTUxcclxuICAgICAgICBjb25zdCBmb3JtRmllbGROYW1lQXR0cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2Zvcm1jb250cm9sbmFtZScpIHx8IHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJyk7XHJcblxyXG4gICAgICAgIC8vIFRoZW4sIGlmIG5vIEhUTUwgYXR0cmlidXRlIGlzIHNldCwgdHJ5IHRvIGdldCB0aGUgbmFtZSBmcm9tIHRoZSBuZ01vZGVsXHJcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkTmFtZSA9IGZvcm1GaWVsZE5hbWVBdHRyaWJ1dGUgfHwgdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5uYW1lICYmIHRoaXMubmdNb2RlbC5uYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIElmIG5vbmUgb2YgdGhlc2UgYXJlIHNldCwgdGhlbiBsb29rIGZvciB0aGUgdXRhSWQgaW5wdXRcclxuICAgICAgICBjb25zdCBmb3JtRmllbGRJZCA9IGZvcm1GaWVsZE5hbWUgfHwgdGhpcy51dGFJZDtcclxuXHJcbiAgICAgICAgLy8gRmluYWxseSwgb25seSBzZXQgdGhlIGRhdGEtdXRhLWlkIGF0dHJpYnV0ZSBpZiBuZWl0aGVyIG5hbWUgbm9yIGZvcm1jb250cm9sbmFtZSBhcmUgc2V0IG9uIHRoZSBIVE1MIGFscmVhZHlcclxuICAgICAgICByZXR1cm4gTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChmb3JtRmllbGROYW1lQXR0cmlidXRlKSA/IGZvcm1GaWVsZElkIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBjb21iaW5lZCBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldCBpbnRlcm5hbERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZElucHV0IHx8IHRoaXMuZGlzYWJsZWRCeU1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFuY2VzdG9yRGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgYW5jZXN0b3IgZGlzYWJsZWQgc3RhdGUgaXMgYmVpbmcgcmVmbGVjdGVkIGluIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IGRpc2FibGVkIHN0YXRlIGlzIGJlaW5nIHJlZmxlY3RlZCBpbiB0aGUgY3VycmVudCBtb2RlbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV4cGVjdERpc2FibGVkQnlJbnB1dDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgYW5jZXN0b3IgZGlzYWJsZWQgc3RhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkaXNhYmxlZEJ5TW9kZWw6IGJvb2xlYW47XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBmaWVsZE5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBzdHJpbmdzID0gKDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzKS5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uRm9ybS5WYWxpZGF0aW9uO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsIHx8ICgodGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5uYW1lKSA/IHRoaXMubmdNb2RlbC5uYW1lLnRvU3RyaW5nKCkgOiBzdHJpbmdzLlVua25vd25GaWVsZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQuXHJcbiAgICAgKiBzYWZlIHdyYXBwZXIgYXJvdW5kIHRoaXMuYWNjZXNzb3IudmFsdWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBUTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBUTW9kZWwpIHtcclxuICAgICAgICB0aGlzLmFjY2Vzc29yLndyaXRlVmFsdWUodmFsdWUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2hvd0luZm9CdWJibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICghIXRoaXMucmVzb2x2ZWRUaXRsZSB8fCAhIXRoaXMucmVzb2x2ZWRUb29sdGlwVGVtcGxhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVzb2x2ZWRUb29sdGlwVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVzb2x2ZWRUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXAgfHwgdGhpcy5kZXRhaWxzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWdncmVnYXRlIHByb3BlcnR5IGZvciB0aGUgZGV0YWlscyBmb3Igb2YgdGhpcyBjb250cm9sIChkZXNjcmlwdGlvbiBtZXJnZWQgd2l0aCBpbnN0cnVjdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZXRhaWxzOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBhbGVydCB0byBkaXNwbGF5IGZvciB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBub24tZXJyb3IgYWxlcnRzIHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG5vbkVycm9yQWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgbm9uLWVycm9yIGFzeW5jIGFsZXJ0cyB0byBkaXNwbGF5IGZvciB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBub25FcnJvckFzeW5jQWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgaW1tZWRpYXRlIHZhbGlkYXRpb24gaXMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGltbWVkaWF0ZVZhbGlkYXRpb246IGJvb2xlYW47XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxUTW9kZWw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBpbW1lZGlhdGVWYWxpZGF0aW9uLlxyXG4gICAgICogVGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3Nlc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGRlZmF1bHRJbW1lZGlhdGVWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLWVycm9yLWFsZXJ0LWJvcmRlcicpXHJcbiAgICBwdWJsaWMgZXJyb3JBbGVydEJvcmRlcjogQm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgaG9yaXpvbnRhbGx5XHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtb3JpZW50YXRpb24taG9yaXpvbnRhbCcpXHJcbiAgICBwdWJsaWMgZ2V0IGlzSG9yaXpvbnRhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgdmVydGljYWxseVxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLW9yaWVudGF0aW9uLXZlcnRpY2FsJylcclxuICAgIHB1YmxpYyBnZXQgaXNWZXJ0aWNhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGVzaXJlZCBvcmllbnRhdGlvbiBvZiB0aGUgZm9ybSBmaWVsZC5cclxuICAgICAqIFdoZW4gcHJvdmlkZWQsIHRoZSBmb3JtIGZpZWxkIHdpbGwgbm8gbG9uZ2VyIGR5bmFtaWNhbGx5IGNoYW5nIGl0cyBvcmllbnRhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGNhbGN1bGF0ZWQgb3JpZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbGN1bGF0ZWRPcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIE5nQ29udHJvbCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nTW9kZWw6IE5nQ29udHJvbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYWNjZXNzb3I6IEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlPFRNb2RlbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3I6IEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFzeW5jVmFsaWRhdG9yOiBGb3JtRmllbGRBc3luY1ZhbGlkYXRvckRpcmVjdGl2ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkQWdncmVnYXRvciBwYXJlbnQgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYWdncmVnYXRvcjogRm9ybUZpZWxkQWdncmVnYXRvcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgTGF5b3V0IHBhcmVudCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgQ2hhbmdlRGV0ZWN0b3JSZWYgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmb3JtRmllbGRDb250YWluZXI6IEZvcm1GaWVsZENvbnRhaW5lcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3IgdGhlIGF2YWlsYWJsZSB3aWR0aCBmb3Igc3ViZmllbGRzIHRvIGNvbnN1bWVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBzdWJGaWVsZExheW91dFdpZHRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IDxIVE1MRWxlbWVudD50aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBwbGFjZWhvbGRlciBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmllbGRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbERlc2NyaXB0aW9uOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBwbGFjZWhvbGRlciBmb3IgdGhlIGluc3RydWN0aW9ucyBvZiB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbEluc3RydWN0aW9uczogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW5pdGlhbFZhbHVlOiBUTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZSBoYXMgYmVlbiB0cmFja2VkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdmFsdWVJbml0aWFsaXplZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHdpZHRoIHRvIGJhc2UgbGF5b3V0IGRlY2lzaW9ucyBvblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldCBsYXlvdXRXaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgeyByZXR1cm4gMDsgfVxyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudCA/IGVsZW1lbnQub2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIDogZWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGxheW91dCB3aWR0aCBhcyBkZXRlY3RlZCBvbiB0aGUgbGFzdCBEb0NoZWNrKClcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwcmV2aW91c2x5Q2hlY2tlZExheW91dFdpZHRoOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIEBzZWUgRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgdGhlIGFuZ3VsYXIgaW5qZWN0aW9uIHNlcnZpY2UgZm9yIHRoZSBiYXNlIGNsYXNzZXMgQFNtZUluamVjdGFibGVCYXNlIEFubm90YXRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uZ01vZGVsID0gaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuICAgICAgICB0aGlzLmFjY2Vzc29yID0gaW5qZWN0b3IuZ2V0KEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlKTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRvciA9IGluamVjdG9yLmdldChGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUpO1xyXG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0b3IgPSBpbmplY3Rvci5nZXQoRm9ybUZpZWxkQXN5bmNWYWxpZGF0b3JEaXJlY3RpdmUsIG51bGwsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5hZ2dyZWdhdG9yID0gaW5qZWN0b3IuZ2V0KFNNRV9GT1JNX0ZJRUxEX0FHR1JFR0FUT1JfUFJPVklERVIsIG51bGwsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBpbmplY3Rvci5nZXQoU01FX0xBWU9VVF9QUk9WSURFUiwgbnVsbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gJyc7XHJcbiAgICAgICAgdGhpcy5hdXRvZm9jdXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnZhbHVlSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmltbWVkaWF0ZVZhbGlkYXRpb24gPSB0aGlzLmRlZmF1bHRJbW1lZGlhdGVWYWxpZGF0aW9uO1xyXG4gICAgICAgIHRoaXMuYW5jZXN0b3JEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VE1vZGVsPigpO1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlZE9yaWVudGF0aW9uID0gRm9ybUZpZWxkT3JpZW50YXRpb24uSG9yaXpvbnRhbDtcclxuICAgICAgICB0aGlzLnByZXZpb3VzbHlDaGVja2VkTGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG5cclxuICAgICAgICAvLyBSdW50aW1lIExpbnRpbmcgaXMgbm90IG5lY2Vzc2FyaWx5IHVzZWZ1bCBmb3IgZnJhbWV3b3JrIGNvbnRyb2xzIHN1Y2ggYXNcclxuICAgICAgICAvLyBmb3JtIGZpZWxkcyBzaW5jZSB0aGV5IGFyZSBkZXNpZ25lZCB3aXRoIGFjY2Vzc2liaWxpdHkgaW4gbWluZC5cclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc21lLWxpbnQtZGlzYWJsZScsICcnKTtcclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VsZWN0b3IgdG8gYmUgaW4gdGhlICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiPHR5cGU+XCJdJyBmb3JtYXRcclxuICAgICAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gRm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnRm9ybUZpZWxkLmNvbnN0cnVjdG9yJywgYENvbXBvbmVudHMgZGVyaXZlZCBmcm9tICR7Rm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yfSBtdXN0IHVzZSBhIGJhc2Ugc2VsZWN0b3Igb2YgJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9W3R5cGU9XCIuLi5cIl1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIE9uSW5pdCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy50eXBlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwidHlwZVwiIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBvbiBhbGwgJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9IGNvbXBvbmVudHNgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5uZ01vZGVsKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9IGNvbXBvbmVudHMgcmVxdWlyZSB0aGUgdXNlIG9mIGFuIE5nQ29udHJvbCBkaXJlY3RpdmUgc3VjaCBhcyBbbmdNb2RlbF0sIFtmb3JtQ29udHJvbE5hbWVdLCBvciBbZm9ybUNvbnRyb2xdYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIuY2hlY2tWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLmltbWVkaWF0ZVZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLmlzRGlydHkgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLmRpcnR5O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaG9vayB1cCBsYXlvdXQgZGlyZWN0aXZlIHRvIGdldCBsYXlvdXQgd2lkdGhcclxuICAgICAgICBpZiAodGhpcy5sYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5sYXlvdXQubGF5b3V0Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLnlpZWxkT25MYXlvdXRDaGFuZ2VkKCk7IH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgdmFsaWRhdG9ycyBjdXN0b21WYWxpZGF0ZSBldmVudC5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbGlkYXRvci5jdXN0b21WYWxpZGF0ZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIC8vIE1lcmdlIG91ciBhbGVydHMgd2l0aCB0aGUgYWxlcnRzIG9iamVjdCBnaXZlbiBpbiB0aGUgZXZlbnQgYXJnc1xyXG4gICAgICAgICAgICAoYXJnczogQ2hlY2tWYWxpZGF0aW9uRXZlbnRBcmdzKSA9PiB7IE1zZnRTbWUuZGVlcEFzc2lnbihhcmdzLmFsZXJ0cywgdGhpcy52YWxpZGF0ZShhcmdzLmZvcm1Db250cm9sKSk7IH1cclxuICAgICAgICApKTtcclxuXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG91ciB2YWxpZGF0b3JzIGFsZXJ0IGV2ZW50LlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsaWRhdG9yLmFsZXJ0LnN1YnNjcmliZSgoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKSA9PiB7IHRoaXMub25BbGVydChhbGVydHMpOyB9KSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9yICYmICF0aGlzLmFzeW5jVmFsaWRhdG9yLmN1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gb3VyIGFzeW5jVmFsaWRhdG9ycyBjdXN0b21Bc3luY1ZhbGlkYXRlIGV2ZW50LlxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFzeW5jVmFsaWRhdG9yLmN1c3RvbUFzeW5jVmFsaWRhdGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgLy8gTWVyZ2Ugb3VyIGFsZXJ0cyB3aXRoIHRoZSBhbGVydHMgb2JqZWN0IGdpdmVuIGluIHRoZSBldmVudCBhcmdzXHJcbiAgICAgICAgICAgICAgICAoYXJnczogQ2hlY2tBc3luY1ZhbGlkYXRpb25FdmVudEFyZ3MpID0+IHsgYXJncy5hbGVydHMucHVzaCh0aGlzLmFzeW5jVmFsaWRhdGUoYXJncy5mb3JtQ29udHJvbCkpOyB9XHJcbiAgICAgICAgICAgICkpO1xyXG5cclxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG91ciBhc3luY1ZhbGlkYXRvcnMgYXN5bmNBbGVydCBldmVudC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hc3luY1ZhbGlkYXRvci5hc3luY0FsZXJ0LnN1YnNjcmliZSgoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKSA9PiB7IHRoaXMub25Bc3luY0FsZXJ0KGFsZXJ0cyk7IH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbGlzdGVuIHRvIGRpc2FibGVkIHN0YXRlIGNoYW5nZXMgZnJvbSBvdXIgbW9kZWxcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFjY2Vzc29yLmRpc2FibGVkQ2hhbmdlLnN1YnNjcmliZSgoZGlzYWJsZWQgPT4gdGhpcy5uZ01vZGVsRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKSkpKTtcclxuXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG5nTW9kZWwgc3RhdHVzIGNoYW5nZXMuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ01vZGVsLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHN0YXR1cyA9PiB0aGlzLm9uU3RhdHVzQ2hhbmdlZChzdGF0dXMpKSk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ01vZGVsLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uVmFsdWVDaGFuZ2VkKHZhbHVlKSkpO1xyXG5cclxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgcGFyZW50IGFnZ3JlZ2F0b3IsIHRoZW4gcmVnaXN0ZXIgdG8gaXRcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci5hZGRGb3JtRmllbGQodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBvdXIgbW9kZWwgbWF5IGhhdmUgc3RhcnRlZCBpbiB0aGUgZGlzYWJsZWQgc3RhdGUsIHNvIGluaXRpYWxpemUgb3VyIHRyYWNraW5nIHByb3BlcnR5IHRvIHRoZSBjdXJyZW50IGFjY2Vzc29yIHN0YXRlLlxyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRCeU1vZGVsID0gdGhpcy5hY2Nlc3Nvci5kaXNhYmxlZDtcclxuXHJcbiAgICAgICAgLy8gZW5zdXJlIG91ciBtb2RlbCBzdGFydHMgaW4gYSBwcmlzdGluZSBzdGF0ZVxyXG4gICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcblxyXG4gICAgICAgIC8vIGEgYml0IGhhY2t5LCBidXQgdGhpcyB3b3JrcyB0byB0cmlnZ2VyIHZhbGlkYXRpb24gaW1tZWRpYXRlbHkgd2hlbiB0aGUgZm9ybSBsb2Fkcy5cclxuICAgICAgICAvLyB0aGlzIG1ldGhvZCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHdpdGggZWRpdGFibGUgZ3JpZHMgdXNpbmcgZm9ybUZpZWxkQ29udGFpbmVyLCB1c2UgZXhwbGljaXQgaW1tZWRpYXRlVmFsaWRhdGlvbiBjYWxsIGFib3ZlLlxyXG4gICAgICAgIGlmICghdGhpcy5mb3JtRmllbGRDb250YWluZXIgJiYgdGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgRG9DaGVjayBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcclxuICAgICAgICBzdXBlci5uZ0RvQ2hlY2soKTtcclxuICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBvdXIgbGF5b3V0XHJcbiAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG4gICAgICAgIGlmIChsYXlvdXRXaWR0aCAhPT0gdGhpcy5wcmV2aW91c2x5Q2hlY2tlZExheW91dFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogc3luY2hyb25pemVzIHRoZSBleHBlY3RlZCBkaXNhYmxlZCBzdGF0ZSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb2YgdGhlIG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCkge1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGUgPSB0aGlzLmludGVybmFsRGlzYWJsZWQ7XHJcbiAgICAgICAgaWYgKGRpc2FibGUgPT09IHRoaXMuYWNjZXNzb3IuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRpc2FibGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5jZXN0b3JEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kaXNhYmxlZEJ5TW9kZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBbGVydHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZGlzYWJsZWRJbnB1dCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICAgIC8vIGluaXRpYWxpemUgZmllbGRzZXQgYW5jZXN0b3JzLiBPdXIgYW5jZXN0cnkgc2hvdWxkIG5ldmVyIGNoYW5nZSwgc28gd2UgY2FuIHNhdmUgcGVyZiBieSBjb2xsZWN0aW5nIHRoaXMgbm93LlxyXG4gICAgICAgIGNvbnN0IGZpZWxkc2V0QW5jZXN0b3JzID0gPEhUTUxGaWVsZFNldEVsZW1lbnRbXT5Eb20uZ2V0QWxsQW5jZXN0b3JzKFxyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0ZJRUxEU0VUJ1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIGxpc3RlbiB0byB0aGUgY3VzdG9tIGRpc2FibGVkQ2hhbmdlZCBldmVudCBvbiBvdXIgYW5jZXN0b3IgZmllbGRzZXRzXHJcbiAgICAgICAgY29uc3QgZGlzYWJsZWRDaGFuZ2VkT2JzZXJ2YWJsZXMgPSBmaWVsZHNldEFuY2VzdG9ycy5tYXAoZiA9PiBmcm9tRXZlbnQoZiwgRGlzYWJsZWRDaGFuZ2VkRXZlbnQudHlwZU5hbWUpKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgbWVyZ2UoLi4uZGlzYWJsZWRDaGFuZ2VkT2JzZXJ2YWJsZXMpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgPSBmaWVsZHNldEFuY2VzdG9ycy5zb21lKGYgPT4gZi5kaXNhYmxlZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgb3VyIGFuY2VzdHJhbCBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICAgIHRoaXMuYW5jZXN0b3JEaXNhYmxlZCA9IGZpZWxkc2V0QW5jZXN0b3JzLnNvbWUoZiA9PiBmLmRpc2FibGVkKTtcclxuICAgICAgICB0aGlzLnN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgYW5ndWxhciBPbkRlc3Ryb3kgaW50ZXJmYWNlXHJcbiAgICAgKiBkZXJpdmVkIGNsYXNzZXMgYXJlIGFsd2F5cyBleHBlY3RlZCB0byBjYWxsIHN1cGVyLm5nT25EZXN0cm95KCkgd2hlbiBvdmVycmlkaW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBwYXJlbnQgYWdncmVnYXRvciwgdGhlbiByZWdpc3RlciB0byBpdFxyXG4gICAgICAgIGlmICh0aGlzLmFnZ3JlZ2F0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdG9yLnJlbW92ZUZvcm1GaWVsZCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPbiBsYXlvdXQgY2hhbmdlZCBldmVudCBoYW5kbGVyLCBvY2N1cnMgZXZlcnkgdGltZSB0aGUgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG4gICAgICAgIC8vIDYwMHB4IGlzIGJyZWFrcG9pbnQgZm9yIGZvcm0gZmllbGQgdmVydGljYWwvaG9yaXpvbnRhbCBsYXlvdXRcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IGxheW91dFdpZHRoID49IDYwMCA/IEZvcm1GaWVsZE9yaWVudGF0aW9uLkhvcml6b250YWwgOiBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVkT3JpZW50YXRpb24gIT09IG9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlZE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnlpZWxkT25PcmllbnRhdGlvbkNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSBvcmllbnRhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHlpZWxkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uZ0lzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgeWllbGRPbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdJc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGZpZWxkIHRvIGl0cyBpbml0aWFsIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nTW9kZWwucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBiYXNlIG9uIHRoZSBpbml0aWFsIHZhbHVlcyB0eXBlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0Q2xlYXJWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSBmaWVsZHMgdmFsdWUgdG8gdGhlIGNsaXBib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvcHlUb0NsaXBib2FyZCgpIHtcclxuICAgICAgICBNc2Z0U21lLmNvcHlUb0NsaXBib2FyZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkRGlzcGxheUhlYWRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaGlkZUhlYWRlciAmJiAoISEodGhpcy5sYWJlbCB8fCB0aGlzLmRldGFpbHMpIHx8IHRoaXMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhpcyBmb3JtIGZpZWxkIGlzIHZhbGlkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgZm9ybSBmaWVsZCBpcyBkaXJ0eS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIHByaXN0aW5lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzUHJpc3RpbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIGRpcnR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzRGlydHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIGZvY3VzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvY3VzKCkge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICBuZXh0LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC5cclxuICAgICAqIEBwYXJhbSBkaXNhYmxlZCBUaGUgbmV3IGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBuZ01vZGVsRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdERpc2FibGVkID0gdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgfHwgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHBlY3REaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEJ5TW9kZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRCeU1vZGVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgdmFsdWUgdG8gdXNlIHdoZW4gY2xlYXJpbmcgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBpbml0aWFsIHZhbHVlIHR5cGVcclxuICAgICAqIERlcml2ZWQgZmllbGRzIG1heSBvdmVycmlkZSB0aGlzIHRvIGNoYW5nZSB0aGUgY2xlYXIgdmFsdWUgYmVoYXZpb3JcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldENsZWFyVmFsdWUoKTogVE1vZGVsIHtcclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxhbnk+W107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLmluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT4nJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIG9wdGlvbmFsbHkgYnkgZGVyaXZlZCBjb21wb25lbnRzLlxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFzeW5jVmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25BbGVydHM+IHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGFueSB0aW1lIHZhbHVlIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVEZXRhaWxzKCkge1xyXG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXTtcclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMuZGVzY3JpcHRpb24pKSB7XHJcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCh0aGlzLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmluc3RydWN0aW9ucykpIHtcclxuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHRoaXMuaW5zdHJ1Y3Rpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlcGFyYXRlIGRldGFpbHMgYW5kIGluc3RydWN0aW9ucyB3aXRoIGRvdWJsZSBsaW5lIGJyZWFrcy5cclxuICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzLmxlbmd0aCA+IDAgPyBkZXRhaWxzLmpvaW4oJ1xcblxcbicpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzIGluaXRpYWxpemF0aW9uLCBUaGVzZSBjbGFzc2VzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1mb3JtLWZpZWxkJ1xyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNoYW5nZXMsIGluIHRoZSBVSSBvciBwcm9ncmFtbWF0aWNhbGx5LlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLnJlcG9ydENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmdNb2RlbFsndXBkYXRlJ10ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hhbmdlLmVtaXQoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmUtY2FsY3VsYXRlZC5cclxuICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25TdGF0dXNDaGFuZ2VkKHN0YXR1czogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbGVydHMoKTtcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci51cGRhdGVTdGF0dXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25BbGVydChhbGVydHM6IFZhbGlkYXRpb25BbGVydHMpIHtcclxuICAgICAgICB0aGlzLm5vbkVycm9yQWxlcnRzID0gdGhpcy5yZW1vdmVFcnJvckFsZXJ0cyhhbGVydHMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25Bc3luY0FsZXJ0KGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIHRoaXMubm9uRXJyb3JBc3luY0FsZXJ0cyA9IHRoaXMucmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFsZXJ0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZXJyb3IgYWxlcnRzIGZyb20gYSBWYWxpZGF0aW9uQWxlcnQgT2JqZWN0c1xyXG4gICAgICogZXJyb3JzIHdpbGwgYmUgc3VyZmFjZWQgaW4gdGhlIHRoaXMubmdNb2RlbC5jb250cm9sLmVycm9ycyBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgdG8gZmlsdGVyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcbiAgICAgICAgY29uc3Qgbm9uRXJyb3JBbGVydHMgPSB7fTtcclxuICAgICAgICBPYmplY3Qua2V5cyhhbGVydHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWxlcnQgPSBhbGVydHNba2V5XTtcclxuICAgICAgICAgICAgaWYgKGFsZXJ0ICYmICg8VmFsaWRhdGlvbkFsZXJ0PmFsZXJ0KS52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgbm9uRXJyb3JBbGVydHNba2V5XSA9IGFsZXJ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vbkVycm9yQWxlcnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgZm9ybSBmaWVsZCBib3JkZXIgdG8gcmVmbGVjdCBlcnJvciBhbGVydHNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVCb3JkZXJTdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5hbGVydCAmJiB0aGlzLmFsZXJ0LnNldmVyaXR5ID09PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvclxyXG4gICAgICAgICAgICAmJiAodGhpcy5hbGVydC52YWxpZCB8fCB0aGlzLmFsZXJ0LnNob3dXaGVuUHJpc3RpbmUgfHwgdGhpcy5uZ01vZGVsLmRpcnR5KSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQWxlcnRCb3JkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JBbGVydEJvcmRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGFjdGl2ZSBhbGVydHMgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVBbGVydHMoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzO1xyXG4gICAgICAgIHRoaXMuYWxlcnQgPSBudWxsO1xyXG4gICAgICAgIC8vIFdoZW4gaW4gYSBsb2FkaW5nIHN0YXRlLCBzaG93IHRoYXQgYWxlcnQgb25seS5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQgPSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sb2FkaW5nTWVzc2FnZSB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLkxvYWRpbmcubWVzc2FnZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXaGVuIGluIGEgcGVuZGluZyBzdGF0ZSwgc2hvdyB0aGF0IGFsZXJ0IG9ubHkuXHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucGVuZGluZ01lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLlZhbGlkYXRpb24uUGVuZGluZy5tZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGdhdGhlciBvdXIgYWxlcnRzLlxyXG4gICAgICAgIGNvbnN0IGFsZXJ0c0FycmF5OiBNc2Z0U21lLk5hbWVWYWx1ZTxzdHJpbmcsIGFueT5bXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5ub25FcnJvckFsZXJ0cyk7XHJcbiAgICAgICAgdGhpcy5hZGRWaXNpYmxlQWxlcnRzKGFsZXJ0c0FycmF5LCB0aGlzLm5vbkVycm9yQXN5bmNBbGVydHMpO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZXJyb3JzKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYXIgYWN0aXZlIGFsZXJ0IGlmIHRoZXJlIGFyZSBubyBhbGVydHNcclxuICAgICAgICBpZiAoYWxlcnRzQXJyYXkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1GaWVsZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCb3JkZXJTdGF0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb3JtRmllbGRFcnJvck5hbWVzID0geyByZXF1aXJlZDogJ3JlcXVpcmVkJywgaW52YWxpZERpc3BsYXlWYWx1ZTogJ2ludmFsaWREaXNwbGF5VmFsdWUnIH07XHJcbiAgICAgICAgLy8gUHJlIHNvcnQgZm9yIGludmFsaWQgZGlzcGxheSBlcnJvcnMgdG8gY29tZSBiZWZvcmUgcmVxdWlyZWQgZXJyb3JzLCB0aGV5IGhhdmUgdGhlIHNhbWUgc2V2ZXJpdHlcclxuICAgICAgICBhbGVydHNBcnJheS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQgJiYgYi5uYW1lID09PSBmb3JtRmllbGRFcnJvck5hbWVzLmludmFsaWREaXNwbGF5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMuaW52YWxpZERpc3BsYXlWYWx1ZSAmJiBiLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWxlcnRzID0gYWxlcnRzQXJyYXlcclxuICAgICAgICAgICAgLm1hcChlID0+IHRoaXMuZ2V0QWxlcnQoZS5uYW1lLCBlLnZhbHVlKSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHNvcnQgb24gdmFsaWQgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChhLnZhbGlkICE9PSBiLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEudmFsaWQgPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IG9uIHNldmVyaXR5XHJcbiAgICAgICAgICAgICAgICBpZiAoYS5zZXZlcml0eSAhPT0gYi5zZXZlcml0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNldmVyaXR5IDwgYi5zZXZlcml0eSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhleSBhcmUgY29uc2lkZXJlZCBlcXVhbCBmb3Igc29ydGluZ1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzb3J0ZWRBbGVydHMuc29tZShhbGVydCA9PiB7XHJcbiAgICAgICAgICAgIC8vIFNob3cgYWxlcnQgaW4gdGhlc2Ugc2NlbmFyaW9zOlxyXG4gICAgICAgICAgICAvLyAtIElmIHRoZSBmb3JtIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBpdCBpcyBub3QgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgZm9ybVxyXG4gICAgICAgICAgICAvLyAtIElmIGEgY3VzdG9tIGFsZXJ0IG1hcmtzIHNob3dXaGVuUHJpc2l0aW5lIGFzIHRydWVcclxuICAgICAgICAgICAgLy8gLSBJZiB0aGUgYWxlcnQgaXMgbWFya2VkIGFzIHZhbGlkXHJcbiAgICAgICAgICAgIC8vIC0gQW55IG90aGVyIGFsZXJ0cyBhZnRlciB0aGUgZm9ybSBpcyBtYXJrZWQgYXMgZGlydHlcclxuICAgICAgICAgICAgaWYgKGFsZXJ0LnNldmVyaXR5ICE9PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvciB8fCBhbGVydC52YWxpZCB8fCBhbGVydC5zaG93V2hlblByaXN0aW5lIHx8IHRoaXMubmdNb2RlbC5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydCA9IGFsZXJ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQoYWxlcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUJvcmRlclN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRWaXNpYmxlQWxlcnRzKHRhcmdldDogTXNmdFNtZS5OYW1lVmFsdWU8c3RyaW5nLCBhbnk+W10sIGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIGlmICghTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChhbGVydHMpKSB7XHJcbiAgICAgICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleShhbGVydHMsIChrLCB2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISg8VmFsaWRhdGlvbkFsZXJ0PnYpLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKHsgbmFtZTogaywgdmFsdWU6IHYgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldHMgYW4gYWxlcnQgb2JqZWN0IGZyb20gYSBrZXkgYW5kIHZhbGlkYXRpb24gcmVzdWx0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRBbGVydChrZXk6IHN0cmluZywgYWxlcnQ6IFZhbGlkYXRpb25SZXN1bHQpOiBWYWxpZGF0aW9uQWxlcnQge1xyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBmYWxzZSwgbnVsbCwgb3IgdmFsaWQgd2l0aCBubyBtZXNzYWdlLCB0aGVuIGl0cyBub3QgcmVhbGx5IGFuIGFsZXJ0IHRoYXQgbmVlZHMgdG8gYmUgc2hvd24gYW5kIHNob3VsZCBiZSBpZ25vcmVkXHJcbiAgICAgICAgaWYgKGFsZXJ0ID09PSBmYWxzZVxyXG4gICAgICAgICAgICB8fCBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0KVxyXG4gICAgICAgICAgICB8fCAoKGFsZXJ0IGFzIFZhbGlkYXRpb25BbGVydCkudmFsaWQgPT09IHRydWUpICYmIE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKChhbGVydCBhcyBWYWxpZGF0aW9uQWxlcnQpLm1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHByb2Nlc3NlZEFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBhIHN0cmluZywgc2hvdyBpdCBhcyBhbiBlcnJvclxyXG4gICAgICAgIGlmICh0eXBlb2YgYWxlcnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogPHN0cmluZz5hbGVydFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBwcm9jZXNzZWRBbGVydCA9IHRoaXMuZ2V0S25vd25OZ0FsZXJ0KGtleSwgYWxlcnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGFsZXJ0IGlzIGEgc2ltcGxlIHRydWUsIHdlIGRvbnQgcmVhbGx5IGtub3cgaG93IHRvIGRlYWwgd2l0aCBpdCwgc28ganVzdCBjcmVhdGUgYW4gZW1wdHkgdmFsaWRhdGlvbiBvYmplY3RcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0gYWxlcnQgPT09IHRydWUgPyB7fSA6IHsgLi4uYWxlcnQgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB2YWxpZCBpcyBub3Qgc2V0LCB0aGVuIHNldCBpdCBleHBsaWNpdGx5IHRvIGZhbHNlXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChwcm9jZXNzZWRBbGVydC52YWxpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIG1lc3NhZ2UsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UocHJvY2Vzc2VkQWxlcnQubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5tZXNzYWdlID0gYFZhbGlkYXRpb24gZmFpbGVkOiAke2tleX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHNldmVyaXR5IGlzIG5vdCBzZXQgY29ycmVjdGx5IGFuZCB0aGUgZmllbGQgaXMgbm90IHZhbGlkLCB0aGVuIHNldCBpdCB0byBlcnJvclxyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydC52YWxpZCAmJiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKFZhbGlkYXRpb25BbGVydFNldmVyaXR5W3Byb2Nlc3NlZEFsZXJ0LnNldmVyaXR5XSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5zZXZlcml0eSA9IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkQWxlcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFuIGFsZXJ0IG9iamVjdCBmcm9tIGtub3duIGFuZ3VsYXIgYWxlcnQga2V5c1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0S25vd25OZ0FsZXJ0KGtleTogc3RyaW5nLCBhbGVydDogYW55KTogVmFsaWRhdGlvbkFsZXJ0IHtcclxuICAgICAgICBjb25zdCB2U3RyaW5ncyA9ICg8U3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncykuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uVmFsaWRhdGlvbjtcclxuICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICAgIC8vIGZpcnN0IGNoZWNrIGZvciBrbm93biBhbmd1bGFyICdidWlsdC1pbicgdmFsaWRhdGlvbnNcclxuXHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWluJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1pbi5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5taW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4Jzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5tYXgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuUmVxdWlyZWQuZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5FbWFpbC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5NaW5MZW5ndGguZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heExlbmd0aC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5yZXF1aXJlZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLlBhdHRlcm4uZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRQYXR0ZXJuKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UobWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2V2ZXJpdHkgPSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvcjtcclxuXHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShhbGVydCkpIHtcclxuICAgICAgICAgICAgLy8gbWVyZ2UgYWxlcnQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0XHJcbiAgICAgICAgICAgIHZhbGlkID0gISFhbGVydC52YWxpZDtcclxuICAgICAgICAgICAgc2V2ZXJpdHkgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0LnNldmVyaXR5KSA/IHNldmVyaXR5IDogYWxlcnQuc2V2ZXJpdHk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0Lm1lc3NhZ2UpID8gbWVzc2FnZSA6IGFsZXJ0Lm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWxpZDogdmFsaWQsXHJcbiAgICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSxcclxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBzb21lIGNhc2VzLCB3ZSBuZWVkIGEgY29tYmluZWQgdmVyc2lvbiBvZiB0aGUgbGFiZWwgYW5kIGRlc2NyaXB0aW9uIHNvIHRoYXQgdGhlIHNjcmVlbiByZWFkIGNhbiByZWFkIGl0IGFwcHJvcHJpYXRlbHkuXHJcbiAgICAgKiBDb21tb24gY2FzZXMgZm9yIHRoaXMgYXJlIHdoZW4gdXNpbmcgcm9sZT1cImdyb3VwXCIgb3Igcm9sZT1cInJhZGlvR3JvdXBcIiBiZWNhdXNlIHRoZXkgZG9lcyBub3Qgc3VwcG9ydCBhcmlhLWRlc2NyaWJlZGJ5XHJcbiAgICAgKiB3ZSBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBieSBzcGxpdHRpbmcgdGhlIGRlc2NyaXB0aW9uIGFuZCBhbmQgbGFiZWwgd2l0aCBhICcuJyAocGVyaW9kKVwiXHJcbiAgICAgKiBUT0RPOiB2ZXJpZnkgaG93IHRoaXMgbG9jYWxpemVzIG9yIGZpbmQgYSBiZXR0ZXIgd2F5LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYWJlbCB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMubGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9LiAke3RoaXMuZGVzY3JpcHRpb259YDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGJhc2UgY29tcG9uZW50IGZvciBTTUUgZm9yIGZpZWxkcy4gSXQgc2ltcGx5IHJlbW92ZXMgdGhlIG5lZWQgdG8gc3VwcGx5IHRoZSBzdHJpbmcgdHlwZSBwYXJhbWV0ZXIgdG8gRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAqIFRoaXMgY2xhc3MgaXMgZXhwb3J0ZWQgZnJvbSB0aGlzIGZpbGUsIGJ1dCBub3QgbWVhbnQgdG8gYmUgZXhwb3J0ZWQgZnJvbSBpbmRleC50cyBidW5kbGVzLlxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8VE1vZGVsPiBleHRlbmRzIEZvcm1GaWVsZENvbXBvbmVudDxTdHJpbmdzLCBUTW9kZWw+IHtcclxuICAgIC8vIFNob3VsZCBSZW1haW4gRW1wdHkuXHJcbn1cclxuIl19
|
|
980
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDWSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUN6RCxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsV0FBVyxFQUMvRyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN2RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQVUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQXFDLHVCQUF1QixFQUFvQixNQUFNLHNDQUFzQyxDQUFDO0FBQ3BJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBOEMsa0NBQWtDLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6SCxPQUFPLEVBQWlDLGdDQUFnQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFekgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJB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S3hDLE9BQU87a0JBRmIsS0FBSzs7a0JBQ0wsV0FBVzttQkFBQyw4QkFBOEI7WUFPcEMsUUFBUTtrQkFEZCxLQUFLO1lBUUssWUFBWTtrQkFEdEIsS0FBSztZQWFDLGVBQWU7a0JBRHJCLEtBQUs7WUFPQyxPQUFPO2tCQURiLEtBQUs7WUFPQyxjQUFjO2tCQURwQixLQUFLO1lBK0JLLGlCQUFpQjtrQkFIM0IsV0FBVzttQkFBQyxvQkFBb0I7O2tCQUNoQyxXQUFXO21CQUFDLGVBQWU7O2tCQUMzQixXQUFXO21CQUFDLG9CQUFvQjtZQVUxQixhQUFhO2tCQURuQixLQUFLO21CQUFDLFVBQVU7WUFPVixPQUFPO2tCQURiLEtBQUs7WUFPQyxjQUFjO2tCQURwQixLQUFLO1lBT0MsY0FBYztrQkFEcEIsS0FBSztZQU9DLEtBQUs7a0JBRFgsS0FBSztZQVFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsa0JBQWtCO1lBOEZ4QixtQkFBbUI7a0JBRHpCLEtBQUs7WUFLQyxNQUFNO2tCQUZaLE1BQU07WUFhQSxnQkFBZ0I7a0JBRHRCLFdBQVc7bUJBQUMseUNBQXlDO1lBTzNDLGtCQUFrQjtrQkFENUIsV0FBVzttQkFBQyw2Q0FBNkM7WUFXL0MsZ0JBQWdCO2tCQUQxQixXQUFXO21CQUFDLDJDQUEyQztZQVlqRCxXQUFXO2tCQURqQixLQUFLO1lBNENDLGtCQUFrQjtrQkFEeEIsS0FBSztZQW1SRSxvQkFBb0IsTUFVcEIseUJBQXlCO0FBeWRyQzs7O0dBR0c7QUFFSCxrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQiw2QkFBc0MsU0FBUSxrQkFBbUM7O3dVQUFqRiw2QkFBNkIsU0FBN0IsNkJBQTZCOytHQUE3Qiw2QkFBNkI7dUZBQTdCLDZCQUE2QjtjQUZsRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBZaWVsZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kZWNvcmF0b3JzL3lpZWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL2xvZ2dpbmcnO1xyXG5pbXBvcnQgeyBEb20gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RvbS9kb20nO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlzYWJsZWRDaGFuZ2VkRXZlbnQgfSBmcm9tICcuLi8uLi9jb21tb24vZXZlbnRzL2Rpc2FibGVkQ2hhbmdlZC5ldmVudCc7XHJcbmltcG9ydCB7IExheW91dCwgU01FX0xBWU9VVF9QUk9WSURFUiB9IGZyb20gJy4uLy4uL2NvbW1vbi9sYXlvdXQnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnQsIFZhbGlkYXRpb25BbGVydHMsIFZhbGlkYXRpb25BbGVydFNldmVyaXR5LCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0tZmllbGQtYWNjZXNzb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkQWdncmVnYXRhYmxlLCBGb3JtRmllbGRBZ2dyZWdhdG9yLCBTTUVfRk9STV9GSUVMRF9BR0dSRUdBVE9SX1BST1ZJREVSIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWFnZ3JlZ2F0b3InO1xyXG5pbXBvcnQgeyBDaGVja0FzeW5jVmFsaWRhdGlvbkV2ZW50QXJncywgRm9ybUZpZWxkQXN5bmNWYWxpZGF0b3JEaXJlY3RpdmUgfSBmcm9tICcuL2Zvcm0tZmllbGQtYXN5bmMtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZENvbnRhaW5lciB9IGZyb20gJy4vZm9ybS1maWVsZC1jb250YWluZXInO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRPcmllbnRhdGlvbiB9IGZyb20gJy4vZm9ybS1maWVsZC1vcmllbnRhdGlvbic7XHJcbmltcG9ydCB7IENoZWNrVmFsaWRhdGlvbkV2ZW50QXJncywgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JtLWZpZWxkLXZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY29tcG9uZW50IGNsYXNzIGZvciBmb3JtIGZpZWxkc1xyXG4gKiBBIGNpcmN1bGFyIHJlZmVyZW5jZSB3b3VsZCBiZSBjcmVhdGVkIGJ5IGluamVjdGluZyBib3RoIG5nTW9kZWxcclxuICogYW5kIHByb3ZpZGluZyBAc2VlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGFuZCBAc2VlIFZhbGlkYXRvciBpbXBsZW1lbnRhdGlvbnMgb24gdGhlIHNhbWUgY29tcG9uZW50LlxyXG4gKiBUaGVyZWZvcmUsIHdlIGhhdmUgYnJva2VuIHRoZSBGb3JtRmllbGQgY29tcG9uZW50IGludG8gMyBwYXJ0cy5cclxuICogIC0gVGhlIEBzZWUgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlIGhhbmRsZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIEBzZWUgVmFsaWRhdG9yIGFuZCBAc2VlIE5HX1ZBTElEQVRPUlNcclxuICogIC0gVGhlIEBzZWUgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgaGFuZGxlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQHNlZSBDb250cm9sVmFsdWVBY2Nlc3NvciBhbmQgQHNlZSBOR19WQUxVRV9BQ0NFU1NPUlxyXG4gKiAgLSBUaGlzIEBzZWUgRm9ybUZpZWxkQ29tcG9uZW50IGlzIG91ciBnbHVlIHRoYXQgcHVsbHMgaXQgYWxsIHRvZ2V0aGVyIHdpdGggbGFiZWxzIGFuZCBhbGVydHMgYW5kIGluamVjdHMgdGhlIE5nQ29udHJvbCBpbnN0YW5jZSBzYWZlbHkuXHJcbiAqXHJcbiAqIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIGFsbCB0aHJlZSBjb21wb25lbnRzIG11c3QgdXNlIHRoZSBzYW1lIGJhc2Ugc2VsZWN0b3IgQHNlZSBGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3IuXHJcbiAqIFRoaXMgaXMgZW5mb3JjZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgY29tcG9uZW50LFxyXG4gKiBIb3dldmVyIHRoZSBkaXJlY3RpdmVzIGFyZSBkb25lIGJ5IGNvbnZlbnRpb24gYW5kIHdpbGwganVzdCBjcmFzaCBpZiB0aGUgaW5qZWN0b3IgY2Fubm90IGZpbmQgdGhlbS5cclxuICpcclxuICovXHJcblxyXG4vKipcclxuICpcclxuICogQHNtZURvYyB7QGxhYmVsIEZvcm0gZmllbGRzIEBpZCBzbWUtZm9ybS1maWVsZHMtY29tcG9uZW50fVxyXG4gKlxyXG4gKiBAb3ZlcnZpZXdcclxuICogQGZpbGUge0BmaWxlcGF0aCAuL2V4YW1wbGVzL292ZXJ2aWV3Lm1kfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFNlYXJjaCB3aXRoIGVtcGhhc2l6ZWQgc2VhcmNoIGJ1dHRvbiBAaWQgc2VhcmNoLWVtcGhhc2lzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtZW1waGFzaXplLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtZW1waGFzaXplLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFNlYXJjaCB3aXRoIGhpZGRlbiBsYWJlbCBAaWQgc2VhcmNoLWhpZGRlbn1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWhpZGRlbi1sYWJlbC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLWhpZGRlbi1sYWJlbC5jb21wb25lbnQuaHRtbH1cclxuICAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgU2VhcmNoIHdpdGggcmVxdWlyZWQgZmllbGQgQGlkIHNlYXJjaC1yZXF1aXJlZH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2VhcmNoLXJlcXVpcmVkLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9zZWFyY2gtcmVxdWlyZWQuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQ2FsZW5kYXIgQGlkIGNhbGVuZGFyfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIENsb2NrIEBpZCBjbG9ja31cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY2xvY2suY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2Nsb2NrLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIERhdGV0aW1lIEBpZCBkYXRldGltZX1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGF0ZXRpbWUuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RhdGV0aW1lLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFZhbGlkYXRpb24gZXJyb3IgQGlkIHZhbGlkYXRpb24tZXJyb3J9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tZXJyb3IuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tZXJyb3IuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgVmFsaWRhdGlvbiBwZW5kaW5nIEBpZCB2YWxpZGF0aW9uLXBlbmRpbmd9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tcGVuZGluZy5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvdmFsaWRhdGlvbi1wZW5kaW5nLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIFZhbGlkYXRpb24gd2l0aCBjdXN0b20gbWFya2Rvd24gQGlkIHZhbGlkYXRpb24tbWFya2Rvd259XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3ZhbGlkYXRpb24tbWFya2Rvd24uY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy92YWxpZGF0aW9uLW1hcmtkb3duLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEJhc2ljIGNvbWJvYm94IEBpZCBjb21ib2JveH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBjb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3guY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIENvbWJvYm94IHdpdGggc2VhcmNoIEBpZCBjb21ib2JveC1zZWFyY2h9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2NvbWJvYm94LXNlYXJjaC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtc2VhcmNoLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIE11bHRpcGxlIHNlbGVjdCBjb21ib3hib3ggQGlkIGNvbWJvYm94LW11bHRpfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1tdWx0aS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGkuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgTXVsdGlwbGUgc2VsZWN0IGNvbWJvYm94IHdpdGggbWlud2lkdGggQGlkIGNvbWJvYm94LW11bHRpLW1pbndpZHRofVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jb21ib2JveC1tdWx0aS1taW53aWR0aC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY29tYm9ib3gtbXVsdGktbWlud2lkdGguY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgTXVsdGlwbGUgc2VsZWN0IGNvbWJvYm94IHdpdGggY3VzdG9tIHRvb2x0aXAgQGlkIGN1c3RvbS10b29sdGlwfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9jdXN0b20tdG9vbHRpcC5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvY3VzdG9tLXRvb2x0aXAuY29tcG9uZW50Lmh0bWx9XHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGb3JtRmllbGRDb21wb25lbnQ8VFN0cmluZ3MsIFRNb2RlbD5cclxuICAgIGV4dGVuZHMgQmFzZUNvbXBvbmVudDxUU3RyaW5ncz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgRm9ybUZpZWxkQWdncmVnYXRhYmxlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzZWxlY3RvciB0aGF0IGFsbCBmb3JtIGZpZWxkcyBtdXN0IHVzZSBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IHdpdGhcclxuICAgICAqIEBzZWUgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgYW5kIEBzZWUgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgc2VsZWN0b3IgPSAnc21lLWZvcm0tZmllbGQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHR5cGUgb2YgZmllbGQgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoLiBUaGlzIGlzIGEgcmVxdWlyZWQgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaGVhZGVyIG9mIHRoaXMgZm9ybSBmaWVsZCBzaG91bGQgYmUgaGlkZGVuIGZyb20gdmlldyAoYnV0IG5vdCBuZWNlc3NhcmlseSBmcm9tIGFyaWEpXHJcbiAgICAgKiBOb3Qgc3VwcG9ydGVkIG9uIGFsbCBmb3JtIGZpZWxkc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGVIZWFkZXI6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdG8gbWFpbnRhaW4gdGhlIHNwYWNlIGxlZnQgYWZ0ZXIgaGlkZGluZyBoZWFkZXJcclxuICAgICAqL1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGlkZUhlYWRlclNwYWNlID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoaXMgcmVxdWlyZXMgYSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhpcyByZXF1aXJlcyBhIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXV0b2ZvY3VzOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBsYWNlaG9sZGVyIGZvciB0aGUgaW50ZXJuYWwgZm9ybSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhpcyBjb250cm9sIHRvIHRoZSB1c2VyXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGRldGVybWluZXMgd2hldGhlciB0byByZW5kZXIgdGhlIGxhYmVsIGluIHZlcnRpY2FsIG1pZGRsZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHZlcnRpY2FsTWlkZGxlTGFiZWwgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0ZW1wbGF0ZSByZWYgb2YgYSBzdWJmb3JtIG9mIHRoaXMgY29tcG9uZW50LiBUaGUgd2F5IHRoaXMgdGVtcGxhdGUgcmVmIGlzIHVzZWQgdmFyaWVzIGZvcm0gZmllbGQgdG8gZmllbGRcclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZilcclxuICAgIHB1YmxpYyBzdWJGb3JtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhpcyBmaWVsZDsgQSBkZXNjcmlwdGlvbiBmb3IgdGhlIHVzZXIgb2YgdGhlIG1lYW5pbmcgYW5kIHB1cnBvc2Ugb2YgdGhpcyBmaWVsZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRGVzY3JpcHRpb247XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsRGVzY3JpcHRpb24gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtZm9ybS1maWVsZC1hdXRvLWhlaWdodCcpXHJcbiAgICBwdWJsaWMgY29tcGFjdDogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtZm9ybS1maWVsZC1taW5pbWFsJylcclxuICAgIHB1YmxpYyBtaW5pbWFsOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvcm0gZmllbGQgaXMgcmVhZG9ubHkuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5zdHJ1Y3Rpb25zIG9mIHRoaXMgY29udHJvbDsgQSBidWlsdCBpbiBkZXNjcmlwdGlvbiBmb3IgdGhlIHVzZXIgb2YgaG93IHRoaXMgY29udHJvbCB3b3Jrcy5cclxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IHRoZSBjb250cm9sIGFuZCBhcHBsaWVzIHRvIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNvbnRyb2wsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBhcyBhbiBhdHRyaWJ1dGUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IGluc3RydWN0aW9ucygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsSW5zdHJ1Y3Rpb25zO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBpbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxJbnN0cnVjdGlvbnMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHByb3ZpZGVkLCByZW5kZXJzIGEgY3VzdG9tIHRvb2x0aXAgZm9yIHRoaXMgZmllbGRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdG9vbHRpcC4gSWYgbm90IHByb3ZpZGVkLCBkZXRhaWxzIHByb3BlcnR5IHdpbGwgYmUgdXNlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHRvb2x0aXA6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGJpbmRpbmcgY29udGV4dCBmb3IgdGhlIHRvb2x0aXBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0b29sdGlwQ29udGV4dDogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhpcyBmb3JtIGNvbnRyb2wgaXMgdHJ1bHkgZGlzYWJsZWRcclxuICAgICAqIFRoaXMgd2lsbCBiZSB0cnVlIGlmIHRoZSBhY2Nlc3NvciAobW9kZWwpLCBpbnB1dCwgb3IgYW5jZXN0b3IgaXMgZGlzYWJsZWRcclxuICAgICAqIEl0cyB2YWx1ZSBpcyBzZXQgb25seSBvbiBEb0NoZWNrLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIHJldHVybiB0cnVlIGlmIHdlIGFyZSBkaXNhYmxlZCwgb3VyIG1vZGVsIGlzIGRpc2FibGVkIG9yIGFuIGFuY2VzdG9yIGlzIGRpc2FibGVkXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtIGZpZWxkIGlzIHBlbmRpbmcgdmFsaWRhdGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbCAmJiB0aGlzLm5nTW9kZWwucGVuZGluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwgJiYgdGhpcy5uZ01vZGVsLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC50b3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWRpc2FibGVkJylcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kaXNhYmxlZCcpXHJcbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdPckRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpID8gdHJ1ZSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGJvdW5kIGlucHV0IG9mIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eVxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxyXG4gICAgQElucHV0KCdkaXNhYmxlZCcpXHJcbiAgICBwdWJsaWMgZGlzYWJsZWRJbnB1dDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtIGZpZWxkIGlzIGxvYWRpbmdcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1lc3NhZ2UgdG8gc2hvdyB3aGlsZSBsb2FkaW5nXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbG9hZGluZ01lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXNzYWdlIHRvIHNob3cgd2hpbGUgcGVuZGluZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHBlbmRpbmdNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgZGF0YVV0YUlkIGlmIHBhc3NlZCBpblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHV0YUlkOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZm9ybSBmaWVsZCdzIFVUQSBpZCBnZXR0ZXIuXHJcbiAgICAgKiBUaGUgSUQgaXMgYmFzZWQgb24gdGhlIGZvcm0gZmllbGQgbmFtZSB0aGF0J3Mgc2V0IG9uIHRoZSBuZ01vZGVsLlxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS11dGEtaWQnKVxyXG4gICAgcHVibGljIGdldCBkYXRhVXRhSWQoKTogc3RyaW5nIHtcclxuICAgICAgICAvLyBGaXJzdCwgZ2V0IHRoZSBuYW1lIGZyb20gdGhlIGF0dHJpYnV0ZSBzZXQgaW4gdGhlIEhUTUxcclxuICAgICAgICBjb25zdCBmb3JtRmllbGROYW1lQXR0cmlidXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2Zvcm1jb250cm9sbmFtZScpIHx8IHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJyk7XHJcblxyXG4gICAgICAgIC8vIFRoZW4sIGlmIG5vIEhUTUwgYXR0cmlidXRlIGlzIHNldCwgdHJ5IHRvIGdldCB0aGUgbmFtZSBmcm9tIHRoZSBuZ01vZGVsXHJcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkTmFtZSA9IGZvcm1GaWVsZE5hbWVBdHRyaWJ1dGUgfHwgdGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5uYW1lICYmIHRoaXMubmdNb2RlbC5uYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIElmIG5vbmUgb2YgdGhlc2UgYXJlIHNldCwgdGhlbiBsb29rIGZvciB0aGUgdXRhSWQgaW5wdXRcclxuICAgICAgICBjb25zdCBmb3JtRmllbGRJZCA9IGZvcm1GaWVsZE5hbWUgfHwgdGhpcy51dGFJZDtcclxuXHJcbiAgICAgICAgLy8gRmluYWxseSwgb25seSBzZXQgdGhlIGRhdGEtdXRhLWlkIGF0dHJpYnV0ZSBpZiBuZWl0aGVyIG5hbWUgbm9yIGZvcm1jb250cm9sbmFtZSBhcmUgc2V0IG9uIHRoZSBIVE1MIGFscmVhZHlcclxuICAgICAgICByZXR1cm4gTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChmb3JtRmllbGROYW1lQXR0cmlidXRlKSA/IGZvcm1GaWVsZElkIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBjb21iaW5lZCBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldCBpbnRlcm5hbERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZElucHV0IHx8IHRoaXMuZGlzYWJsZWRCeU1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGxhY2Vob2xkZXIgZm9yIHRoZSBhbmNlc3RvciBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFuY2VzdG9yRGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgYW5jZXN0b3IgZGlzYWJsZWQgc3RhdGUgaXMgYmVpbmcgcmVmbGVjdGVkIGluIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IGRpc2FibGVkIHN0YXRlIGlzIGJlaW5nIHJlZmxlY3RlZCBpbiB0aGUgY3VycmVudCBtb2RlbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV4cGVjdERpc2FibGVkQnlJbnB1dDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgYW5jZXN0b3IgZGlzYWJsZWQgc3RhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkaXNhYmxlZEJ5TW9kZWw6IGJvb2xlYW47XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBmaWVsZE5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBzdHJpbmdzID0gKDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzKS5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uRm9ybS5WYWxpZGF0aW9uO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsIHx8ICgodGhpcy5uZ01vZGVsICYmIHRoaXMubmdNb2RlbC5uYW1lKSA/IHRoaXMubmdNb2RlbC5uYW1lLnRvU3RyaW5nKCkgOiBzdHJpbmdzLlVua25vd25GaWVsZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQuXHJcbiAgICAgKiBzYWZlIHdyYXBwZXIgYXJvdW5kIHRoaXMuYWNjZXNzb3IudmFsdWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBUTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBUTW9kZWwpIHtcclxuICAgICAgICB0aGlzLmFjY2Vzc29yLndyaXRlVmFsdWUodmFsdWUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2hvd0luZm9CdWJibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICghIXRoaXMucmVzb2x2ZWRUaXRsZSB8fCAhIXRoaXMucmVzb2x2ZWRUb29sdGlwVGVtcGxhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVzb2x2ZWRUb29sdGlwVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVzb2x2ZWRUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXAgfHwgdGhpcy5kZXRhaWxzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWdncmVnYXRlIHByb3BlcnR5IGZvciB0aGUgZGV0YWlscyBmb3Igb2YgdGhpcyBjb250cm9sIChkZXNjcmlwdGlvbiBtZXJnZWQgd2l0aCBpbnN0cnVjdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkZXRhaWxzOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBhbGVydCB0byBkaXNwbGF5IGZvciB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY3VycmVudCBub24tZXJyb3IgYWxlcnRzIHRvIGRpc3BsYXkgZm9yIHRoaXMgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG5vbkVycm9yQWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgbm9uLWVycm9yIGFzeW5jIGFsZXJ0cyB0byBkaXNwbGF5IGZvciB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBub25FcnJvckFzeW5jQWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgaW1tZWRpYXRlIHZhbGlkYXRpb24gaXMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGltbWVkaWF0ZVZhbGlkYXRpb246IGJvb2xlYW47XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcclxuICAgIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxUTW9kZWw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBpbW1lZGlhdGVWYWxpZGF0aW9uLlxyXG4gICAgICogVGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3Nlc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGRlZmF1bHRJbW1lZGlhdGVWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLWVycm9yLWFsZXJ0LWJvcmRlcicpXHJcbiAgICBwdWJsaWMgZXJyb3JBbGVydEJvcmRlcjogQm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgaG9yaXpvbnRhbGx5XHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWZvcm0tZmllbGQtb3JpZW50YXRpb24taG9yaXpvbnRhbCcpXHJcbiAgICBwdWJsaWMgZ2V0IGlzSG9yaXpvbnRhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBmb3JtIGZpZWxkIHNob3VsZCBsYXlvdXQgdmVydGljYWxseVxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1mb3JtLWZpZWxkLW9yaWVudGF0aW9uLXZlcnRpY2FsJylcclxuICAgIHB1YmxpYyBnZXQgaXNWZXJ0aWNhbExheW91dCgpIHtcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IEZvcm1GaWVsZE9yaWVudGF0aW9uLmZyb21CaW5kYWJsZVR5cGUodGhpcy5vcmllbnRhdGlvbikgfHxcclxuICAgICAgICAgICAgRm9ybUZpZWxkT3JpZW50YXRpb24uZnJvbUJpbmRhYmxlVHlwZSh0aGlzLmNhbGN1bGF0ZWRPcmllbnRhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uID09PSBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGVzaXJlZCBvcmllbnRhdGlvbiBvZiB0aGUgZm9ybSBmaWVsZC5cclxuICAgICAqIFdoZW4gcHJvdmlkZWQsIHRoZSBmb3JtIGZpZWxkIHdpbGwgbm8gbG9uZ2VyIGR5bmFtaWNhbGx5IGNoYW5nIGl0cyBvcmllbnRhdGlvbi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBvcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGNhbGN1bGF0ZWQgb3JpZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNhbGN1bGF0ZWRPcmllbnRhdGlvbjogRm9ybUZpZWxkT3JpZW50YXRpb24uQmluZGFibGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIE5nQ29udHJvbCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nTW9kZWw6IE5nQ29udHJvbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkQWNjZXNzb3JEaXJlY3RpdmUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYWNjZXNzb3I6IEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlPFRNb2RlbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmplY3RlZCBAc2VlIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3I6IEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkVmFsaWRhdG9yRGlyZWN0aXZlIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFzeW5jVmFsaWRhdG9yOiBGb3JtRmllbGRBc3luY1ZhbGlkYXRvckRpcmVjdGl2ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgRm9ybUZpZWxkQWdncmVnYXRvciBwYXJlbnQgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYWdncmVnYXRvcjogRm9ybUZpZWxkQWdncmVnYXRvcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgTGF5b3V0IHBhcmVudCBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluamVjdGVkIEBzZWUgQ2hhbmdlRGV0ZWN0b3JSZWYgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmb3JtRmllbGRDb250YWluZXI6IEZvcm1GaWVsZENvbnRhaW5lcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHRlciBmb3IgdGhlIGF2YWlsYWJsZSB3aWR0aCBmb3Igc3ViZmllbGRzIHRvIGNvbnN1bWVcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBzdWJGaWVsZExheW91dFdpZHRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IDxIVE1MRWxlbWVudD50aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBwbGFjZWhvbGRlciBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgZmllbGRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbERlc2NyaXB0aW9uOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBwbGFjZWhvbGRlciBmb3IgdGhlIGluc3RydWN0aW9ucyBvZiB0aGlzIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbEluc3RydWN0aW9uczogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGZpZWxkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW5pdGlhbFZhbHVlOiBUTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZSBoYXMgYmVlbiB0cmFja2VkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdmFsdWVJbml0aWFsaXplZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHdpZHRoIHRvIGJhc2UgbGF5b3V0IGRlY2lzaW9ucyBvblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldCBsYXlvdXRXaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgeyByZXR1cm4gMDsgfVxyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudCA/IGVsZW1lbnQub2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIDogZWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGxheW91dCB3aWR0aCBhcyBkZXRlY3RlZCBvbiB0aGUgbGFzdCBEb0NoZWNrKClcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwcmV2aW91c2x5Q2hlY2tlZExheW91dFdpZHRoOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIEBzZWUgRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgdGhlIGFuZ3VsYXIgaW5qZWN0aW9uIHNlcnZpY2UgZm9yIHRoZSBiYXNlIGNsYXNzZXMgQFNtZUluamVjdGFibGVCYXNlIEFubm90YXRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uZ01vZGVsID0gaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuICAgICAgICB0aGlzLmFjY2Vzc29yID0gaW5qZWN0b3IuZ2V0KEZvcm1GaWVsZEFjY2Vzc29yRGlyZWN0aXZlKTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRvciA9IGluamVjdG9yLmdldChGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUpO1xyXG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0b3IgPSBpbmplY3Rvci5nZXQoRm9ybUZpZWxkQXN5bmNWYWxpZGF0b3JEaXJlY3RpdmUsIG51bGwsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5hZ2dyZWdhdG9yID0gaW5qZWN0b3IuZ2V0KFNNRV9GT1JNX0ZJRUxEX0FHR1JFR0FUT1JfUFJPVklERVIsIG51bGwsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBpbmplY3Rvci5nZXQoU01FX0xBWU9VVF9QUk9WSURFUiwgbnVsbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gJyc7XHJcbiAgICAgICAgdGhpcy5hdXRvZm9jdXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnZhbHVlSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmltbWVkaWF0ZVZhbGlkYXRpb24gPSB0aGlzLmRlZmF1bHRJbW1lZGlhdGVWYWxpZGF0aW9uO1xyXG4gICAgICAgIHRoaXMuYW5jZXN0b3JEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUFuY2VzdG9yID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VE1vZGVsPigpO1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlZE9yaWVudGF0aW9uID0gRm9ybUZpZWxkT3JpZW50YXRpb24uSG9yaXpvbnRhbDtcclxuICAgICAgICB0aGlzLnByZXZpb3VzbHlDaGVja2VkTGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG5cclxuICAgICAgICAvLyBSdW50aW1lIExpbnRpbmcgaXMgbm90IG5lY2Vzc2FyaWx5IHVzZWZ1bCBmb3IgZnJhbWV3b3JrIGNvbnRyb2xzIHN1Y2ggYXNcclxuICAgICAgICAvLyBmb3JtIGZpZWxkcyBzaW5jZSB0aGV5IGFyZSBkZXNpZ25lZCB3aXRoIGFjY2Vzc2liaWxpdHkgaW4gbWluZC5cclxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnc21lLWxpbnQtZGlzYWJsZScsICcnKTtcclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VsZWN0b3IgdG8gYmUgaW4gdGhlICdzbWUtZm9ybS1maWVsZFt0eXBlPVwiPHR5cGU+XCJdJyBmb3JtYXRcclxuICAgICAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gRm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnRm9ybUZpZWxkLmNvbnN0cnVjdG9yJywgYENvbXBvbmVudHMgZGVyaXZlZCBmcm9tICR7Rm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yfSBtdXN0IHVzZSBhIGJhc2Ugc2VsZWN0b3Igb2YgJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9W3R5cGU9XCIuLi5cIl1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIE9uSW5pdCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy50eXBlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwidHlwZVwiIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBvbiBhbGwgJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9IGNvbXBvbmVudHNgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5uZ01vZGVsKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtGb3JtRmllbGRDb21wb25lbnQuc2VsZWN0b3J9IGNvbXBvbmVudHMgcmVxdWlyZSB0aGUgdXNlIG9mIGFuIE5nQ29udHJvbCBkaXJlY3RpdmUgc3VjaCBhcyBbbmdNb2RlbF0sIFtmb3JtQ29udHJvbE5hbWVdLCBvciBbZm9ybUNvbnRyb2xdYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIuY2hlY2tWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLmltbWVkaWF0ZVZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLmlzRGlydHkgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ01vZGVsLmRpcnR5O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaG9vayB1cCBsYXlvdXQgZGlyZWN0aXZlIHRvIGdldCBsYXlvdXQgd2lkdGhcclxuICAgICAgICBpZiAodGhpcy5sYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5sYXlvdXQubGF5b3V0Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLnlpZWxkT25MYXlvdXRDaGFuZ2VkKCk7IH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBvdXIgdmFsaWRhdG9ycyBjdXN0b21WYWxpZGF0ZSBldmVudC5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbGlkYXRvci5jdXN0b21WYWxpZGF0ZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIC8vIE1lcmdlIG91ciBhbGVydHMgd2l0aCB0aGUgYWxlcnRzIG9iamVjdCBnaXZlbiBpbiB0aGUgZXZlbnQgYXJnc1xyXG4gICAgICAgICAgICAoYXJnczogQ2hlY2tWYWxpZGF0aW9uRXZlbnRBcmdzKSA9PiB7IE1zZnRTbWUuZGVlcEFzc2lnbihhcmdzLmFsZXJ0cywgdGhpcy52YWxpZGF0ZShhcmdzLmZvcm1Db250cm9sKSk7IH1cclxuICAgICAgICApKTtcclxuXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG91ciB2YWxpZGF0b3JzIGFsZXJ0IGV2ZW50LlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsaWRhdG9yLmFsZXJ0LnN1YnNjcmliZSgoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKSA9PiB7IHRoaXMub25BbGVydChhbGVydHMpOyB9KSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9yICYmICF0aGlzLmFzeW5jVmFsaWRhdG9yLmN1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gb3VyIGFzeW5jVmFsaWRhdG9ycyBjdXN0b21Bc3luY1ZhbGlkYXRlIGV2ZW50LlxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFzeW5jVmFsaWRhdG9yLmN1c3RvbUFzeW5jVmFsaWRhdGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgLy8gTWVyZ2Ugb3VyIGFsZXJ0cyB3aXRoIHRoZSBhbGVydHMgb2JqZWN0IGdpdmVuIGluIHRoZSBldmVudCBhcmdzXHJcbiAgICAgICAgICAgICAgICAoYXJnczogQ2hlY2tBc3luY1ZhbGlkYXRpb25FdmVudEFyZ3MpID0+IHsgYXJncy5hbGVydHMucHVzaCh0aGlzLmFzeW5jVmFsaWRhdGUoYXJncy5mb3JtQ29udHJvbCkpOyB9XHJcbiAgICAgICAgICAgICkpO1xyXG5cclxuICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG91ciBhc3luY1ZhbGlkYXRvcnMgYXN5bmNBbGVydCBldmVudC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hc3luY1ZhbGlkYXRvci5hc3luY0FsZXJ0LnN1YnNjcmliZSgoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKSA9PiB7IHRoaXMub25Bc3luY0FsZXJ0KGFsZXJ0cyk7IH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbGlzdGVuIHRvIGRpc2FibGVkIHN0YXRlIGNoYW5nZXMgZnJvbSBvdXIgbW9kZWxcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFjY2Vzc29yLmRpc2FibGVkQ2hhbmdlLnN1YnNjcmliZSgoZGlzYWJsZWQgPT4gdGhpcy5uZ01vZGVsRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkKSkpKTtcclxuXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIG5nTW9kZWwgc3RhdHVzIGNoYW5nZXMuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ01vZGVsLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHN0YXR1cyA9PiB0aGlzLm9uU3RhdHVzQ2hhbmdlZChzdGF0dXMpKSk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ01vZGVsLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uVmFsdWVDaGFuZ2VkKHZhbHVlKSkpO1xyXG5cclxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgcGFyZW50IGFnZ3JlZ2F0b3IsIHRoZW4gcmVnaXN0ZXIgdG8gaXRcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci5hZGRGb3JtRmllbGQodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBvdXIgbW9kZWwgbWF5IGhhdmUgc3RhcnRlZCBpbiB0aGUgZGlzYWJsZWQgc3RhdGUsIHNvIGluaXRpYWxpemUgb3VyIHRyYWNraW5nIHByb3BlcnR5IHRvIHRoZSBjdXJyZW50IGFjY2Vzc29yIHN0YXRlLlxyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRCeU1vZGVsID0gdGhpcy5hY2Nlc3Nvci5kaXNhYmxlZDtcclxuXHJcbiAgICAgICAgLy8gZW5zdXJlIG91ciBtb2RlbCBzdGFydHMgaW4gYSBwcmlzdGluZSBzdGF0ZVxyXG4gICAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcblxyXG4gICAgICAgIC8vIGEgYml0IGhhY2t5LCBidXQgdGhpcyB3b3JrcyB0byB0cmlnZ2VyIHZhbGlkYXRpb24gaW1tZWRpYXRlbHkgd2hlbiB0aGUgZm9ybSBsb2Fkcy5cclxuICAgICAgICAvLyB0aGlzIG1ldGhvZCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHdpdGggZWRpdGFibGUgZ3JpZHMgdXNpbmcgZm9ybUZpZWxkQ29udGFpbmVyLCB1c2UgZXhwbGljaXQgaW1tZWRpYXRlVmFsaWRhdGlvbiBjYWxsIGFib3ZlLlxyXG4gICAgICAgIGlmICghdGhpcy5mb3JtRmllbGRDb250YWluZXIgJiYgdGhpcy5pbW1lZGlhdGVWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgRG9DaGVjayBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcclxuICAgICAgICBzdXBlci5uZ0RvQ2hlY2soKTtcclxuICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBvdXIgbGF5b3V0XHJcbiAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG4gICAgICAgIGlmIChsYXlvdXRXaWR0aCAhPT0gdGhpcy5wcmV2aW91c2x5Q2hlY2tlZExheW91dFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJldmlvdXNseUNoZWNrZWRMYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogc3luY2hyb25pemVzIHRoZSBleHBlY3RlZCBkaXNhYmxlZCBzdGF0ZSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb2YgdGhlIG1vZGVsXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCkge1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGUgPSB0aGlzLmludGVybmFsRGlzYWJsZWQ7XHJcbiAgICAgICAgaWYgKGRpc2FibGUgPT09IHRoaXMuYWNjZXNzb3IuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRpc2FibGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5jZXN0b3JEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kaXNhYmxlZEJ5TW9kZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBbGVydHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZGlzYWJsZWRJbnB1dCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICAgIC8vIGluaXRpYWxpemUgZmllbGRzZXQgYW5jZXN0b3JzLiBPdXIgYW5jZXN0cnkgc2hvdWxkIG5ldmVyIGNoYW5nZSwgc28gd2UgY2FuIHNhdmUgcGVyZiBieSBjb2xsZWN0aW5nIHRoaXMgbm93LlxyXG4gICAgICAgIGNvbnN0IGZpZWxkc2V0QW5jZXN0b3JzID0gPEhUTUxGaWVsZFNldEVsZW1lbnRbXT5Eb20uZ2V0QWxsQW5jZXN0b3JzKFxyXG4gICAgICAgICAgICB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0ZJRUxEU0VUJ1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIGxpc3RlbiB0byB0aGUgY3VzdG9tIGRpc2FibGVkQ2hhbmdlZCBldmVudCBvbiBvdXIgYW5jZXN0b3IgZmllbGRzZXRzXHJcbiAgICAgICAgY29uc3QgZGlzYWJsZWRDaGFuZ2VkT2JzZXJ2YWJsZXMgPSBmaWVsZHNldEFuY2VzdG9ycy5tYXAoZiA9PiBmcm9tRXZlbnQoZiwgRGlzYWJsZWRDaGFuZ2VkRXZlbnQudHlwZU5hbWUpKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgbWVyZ2UoLi4uZGlzYWJsZWRDaGFuZ2VkT2JzZXJ2YWJsZXMpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2VzdG9yRGlzYWJsZWQgPSBmaWVsZHNldEFuY2VzdG9ycy5zb21lKGYgPT4gZi5kaXNhYmxlZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgb3VyIGFuY2VzdHJhbCBkaXNhYmxlZCBzdGF0ZVxyXG4gICAgICAgIHRoaXMuYW5jZXN0b3JEaXNhYmxlZCA9IGZpZWxkc2V0QW5jZXN0b3JzLnNvbWUoZiA9PiBmLmRpc2FibGVkKTtcclxuICAgICAgICB0aGlzLnN5bmNocm9uaXplRGlzYWJsZWRTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgYW5ndWxhciBPbkRlc3Ryb3kgaW50ZXJmYWNlXHJcbiAgICAgKiBkZXJpdmVkIGNsYXNzZXMgYXJlIGFsd2F5cyBleHBlY3RlZCB0byBjYWxsIHN1cGVyLm5nT25EZXN0cm95KCkgd2hlbiBvdmVycmlkaW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBwYXJlbnQgYWdncmVnYXRvciwgdGhlbiByZWdpc3RlciB0byBpdFxyXG4gICAgICAgIGlmICh0aGlzLmFnZ3JlZ2F0b3IpIHtcclxuICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdG9yLnJlbW92ZUZvcm1GaWVsZCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPbiBsYXlvdXQgY2hhbmdlZCBldmVudCBoYW5kbGVyLCBvY2N1cnMgZXZlcnkgdGltZSB0aGUgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgY29uc3QgbGF5b3V0V2lkdGggPSB0aGlzLmxheW91dFdpZHRoO1xyXG4gICAgICAgIC8vIDYwMHB4IGlzIGJyZWFrcG9pbnQgZm9yIGZvcm0gZmllbGQgdmVydGljYWwvaG9yaXpvbnRhbCBsYXlvdXRcclxuICAgICAgICBjb25zdCBvcmllbnRhdGlvbiA9IGxheW91dFdpZHRoID49IDYwMCA/IEZvcm1GaWVsZE9yaWVudGF0aW9uLkhvcml6b250YWwgOiBGb3JtRmllbGRPcmllbnRhdGlvbi5WZXJ0aWNhbDtcclxuICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVkT3JpZW50YXRpb24gIT09IG9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlZE9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLnlpZWxkT25PcmllbnRhdGlvbkNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyBldmVyeSB0aW1lIHRoZSBvcmllbnRhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIHByb3RlY3RlZCBvbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGxheW91dCBoYXMgYmVlbiBjaGFuZ2VkLlxyXG4gICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwcml2YXRlIHlpZWxkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uZ0lzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHByaXZhdGUgeWllbGRPbk9yaWVudGF0aW9uQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubmdJc0Rlc3Ryb3llZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGlzIGZpZWxkIHRvIGl0cyBpbml0aWFsIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nTW9kZWwucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBiYXNlIG9uIHRoZSBpbml0aWFsIHZhbHVlcyB0eXBlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0Q2xlYXJWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSBmaWVsZHMgdmFsdWUgdG8gdGhlIGNsaXBib2FyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvcHlUb0NsaXBib2FyZCgpIHtcclxuICAgICAgICBNc2Z0U21lLmNvcHlUb0NsaXBib2FyZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkRGlzcGxheUhlYWRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaGlkZUhlYWRlciAmJiAoISEodGhpcy5sYWJlbCB8fCB0aGlzLmRldGFpbHMpIHx8IHRoaXMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgaWYgdGhpcyBmb3JtIGZpZWxkIGlzIHZhbGlkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGEgdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgZm9ybSBmaWVsZCBpcyBkaXJ0eS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIHByaXN0aW5lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzUHJpc3RpbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBmb3JtIGZpZWxkIGFzIGRpcnR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFya0FzRGlydHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZ01vZGVsLmNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGxpZXMgdGhlIGZvY3VzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvY3VzKCkge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICBuZXh0LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC5cclxuICAgICAqIEBwYXJhbSBkaXNhYmxlZCBUaGUgbmV3IGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBuZ01vZGVsRGlzYWJsZWRDaGFuZ2VkKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdERpc2FibGVkID0gdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgfHwgdGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGVjdERpc2FibGVkQnlBbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3REaXNhYmxlZEJ5QW5jZXN0b3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5leHBlY3REaXNhYmxlZEJ5SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0RGlzYWJsZWRCeUlucHV0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHBlY3REaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEJ5TW9kZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeW5jaHJvbml6ZURpc2FibGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRCeU1vZGVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgdmFsdWUgdG8gdXNlIHdoZW4gY2xlYXJpbmcgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBpbml0aWFsIHZhbHVlIHR5cGVcclxuICAgICAqIERlcml2ZWQgZmllbGRzIG1heSBvdmVycmlkZSB0aGlzIHRvIGNoYW5nZSB0aGUgY2xlYXIgdmFsdWUgYmVoYXZpb3JcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldENsZWFyVmFsdWUoKTogVE1vZGVsIHtcclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmluaXRpYWxWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDxhbnk+W107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLmluaXRpYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT4nJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29udHJvbFxyXG4gICAgICogQHBhcmFtIGMgVGhlIGZvcm0gY29udHJvbCBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMge1xyXG4gICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIG9wdGlvbmFsbHkgYnkgZGVyaXZlZCBjb21wb25lbnRzLlxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGFzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHRoYXQgaXMgaW50ZXJuYWwgdG8gdGhpcyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gYyBUaGUgZm9ybSBjb250cm9sIGF0dGFjaGVkIHRvIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFzeW5jVmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25BbGVydHM+IHtcclxuICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBvcHRpb25hbGx5IGJ5IGRlcml2ZWQgY29tcG9uZW50cy5cclxuICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGFueSB0aW1lIHZhbHVlIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVEZXRhaWxzKCkge1xyXG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBbXTtcclxuICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMuZGVzY3JpcHRpb24pKSB7XHJcbiAgICAgICAgICAgIGRldGFpbHMucHVzaCh0aGlzLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmluc3RydWN0aW9ucykpIHtcclxuICAgICAgICAgICAgZGV0YWlscy5wdXNoKHRoaXMuaW5zdHJ1Y3Rpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlcGFyYXRlIGRldGFpbHMgYW5kIGluc3RydWN0aW9ucyB3aXRoIGRvdWJsZSBsaW5lIGJyZWFrcy5cclxuICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzLmxlbmd0aCA+IDAgPyBkZXRhaWxzLmpvaW4oJ1xcblxcbicpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzIGluaXRpYWxpemF0aW9uLCBUaGVzZSBjbGFzc2VzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1mb3JtLWZpZWxkJ1xyXG4gICAgICAgIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIGV2ZXJ5IHRpbWUgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNoYW5nZXMsIGluIHRoZSBVSSBvciBwcm9ncmFtbWF0aWNhbGx5LlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyLnJlcG9ydENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmdNb2RlbFsndXBkYXRlJ10ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hhbmdlLmVtaXQoKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgdGhlIGNvbnRyb2wgaGFzIGJlZW4gcmUtY2FsY3VsYXRlZC5cclxuICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25TdGF0dXNDaGFuZ2VkKHN0YXR1czogYW55KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbGVydHMoKTtcclxuICAgICAgICBpZiAodGhpcy5hZ2dyZWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRvci51cGRhdGVTdGF0dXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25BbGVydChhbGVydHM6IFZhbGlkYXRpb25BbGVydHMpIHtcclxuICAgICAgICB0aGlzLm5vbkVycm9yQWxlcnRzID0gdGhpcy5yZW1vdmVFcnJvckFsZXJ0cyhhbGVydHMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWxlcnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGVyZSBhcmUgYWxlcnQgY2hhbmdlcyBmcm9tIHRoZSB2YWxpZGF0b3IgZGlyZWN0aXZlXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgZnJvbSB0aGUgdmFsaWRhdG9yIGRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgb25Bc3luY0FsZXJ0KGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIHRoaXMubm9uRXJyb3JBc3luY0FsZXJ0cyA9IHRoaXMucmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFsZXJ0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZXJyb3IgYWxlcnRzIGZyb20gYSBWYWxpZGF0aW9uQWxlcnQgT2JqZWN0c1xyXG4gICAgICogZXJyb3JzIHdpbGwgYmUgc3VyZmFjZWQgaW4gdGhlIHRoaXMubmdNb2RlbC5jb250cm9sLmVycm9ycyBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRzIHRoZSBhbGVydHMgdG8gZmlsdGVyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRXJyb3JBbGVydHMoYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzKTogVmFsaWRhdGlvbkFsZXJ0cyB7XHJcbiAgICAgICAgY29uc3Qgbm9uRXJyb3JBbGVydHMgPSB7fTtcclxuICAgICAgICBPYmplY3Qua2V5cyhhbGVydHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWxlcnQgPSBhbGVydHNba2V5XTtcclxuICAgICAgICAgICAgaWYgKGFsZXJ0ICYmICg8VmFsaWRhdGlvbkFsZXJ0PmFsZXJ0KS52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgbm9uRXJyb3JBbGVydHNba2V5XSA9IGFsZXJ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vbkVycm9yQWxlcnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgZm9ybSBmaWVsZCBib3JkZXIgdG8gcmVmbGVjdCBlcnJvciBhbGVydHNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVCb3JkZXJTdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5hbGVydCAmJiB0aGlzLmFsZXJ0LnNldmVyaXR5ID09PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvclxyXG4gICAgICAgICAgICAmJiAodGhpcy5hbGVydC52YWxpZCB8fCB0aGlzLmFsZXJ0LnNob3dXaGVuUHJpc3RpbmUgfHwgdGhpcy5uZ01vZGVsLmRpcnR5KSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQWxlcnRCb3JkZXIgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JBbGVydEJvcmRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGFjdGl2ZSBhbGVydHMgb2YgdGhpcyBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVBbGVydHMoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IDxTdHJpbmdzPk1zZnRTbWUuc2VsZigpLlJlc291cmNlcy5zdHJpbmdzO1xyXG4gICAgICAgIHRoaXMuYWxlcnQgPSBudWxsO1xyXG4gICAgICAgIC8vIFdoZW4gaW4gYSBsb2FkaW5nIHN0YXRlLCBzaG93IHRoYXQgYWxlcnQgb25seS5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnQgPSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5sb2FkaW5nTWVzc2FnZSB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLkxvYWRpbmcubWVzc2FnZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXaGVuIGluIGEgcGVuZGluZyBzdGF0ZSwgc2hvdyB0aGF0IGFsZXJ0IG9ubHkuXHJcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucGVuZGluZ01lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICB8fCBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5Gb3JtLlZhbGlkYXRpb24uUGVuZGluZy5tZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGdhdGhlciBvdXIgYWxlcnRzLlxyXG4gICAgICAgIGNvbnN0IGFsZXJ0c0FycmF5OiBNc2Z0U21lLk5hbWVWYWx1ZTxzdHJpbmcsIGFueT5bXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5ub25FcnJvckFsZXJ0cyk7XHJcbiAgICAgICAgdGhpcy5hZGRWaXNpYmxlQWxlcnRzKGFsZXJ0c0FycmF5LCB0aGlzLm5vbkVycm9yQXN5bmNBbGVydHMpO1xyXG4gICAgICAgIHRoaXMuYWRkVmlzaWJsZUFsZXJ0cyhhbGVydHNBcnJheSwgdGhpcy5uZ01vZGVsLmNvbnRyb2wuZXJyb3JzKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYXIgYWN0aXZlIGFsZXJ0IGlmIHRoZXJlIGFyZSBubyBhbGVydHNcclxuICAgICAgICBpZiAoYWxlcnRzQXJyYXkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1GaWVsZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCb3JkZXJTdGF0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb3JtRmllbGRFcnJvck5hbWVzID0geyByZXF1aXJlZDogJ3JlcXVpcmVkJywgaW52YWxpZERpc3BsYXlWYWx1ZTogJ2ludmFsaWREaXNwbGF5VmFsdWUnIH07XHJcbiAgICAgICAgLy8gUHJlIHNvcnQgZm9yIGludmFsaWQgZGlzcGxheSBlcnJvcnMgdG8gY29tZSBiZWZvcmUgcmVxdWlyZWQgZXJyb3JzLCB0aGV5IGhhdmUgdGhlIHNhbWUgc2V2ZXJpdHlcclxuICAgICAgICBhbGVydHNBcnJheS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQgJiYgYi5uYW1lID09PSBmb3JtRmllbGRFcnJvck5hbWVzLmludmFsaWREaXNwbGF5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMuaW52YWxpZERpc3BsYXlWYWx1ZSAmJiBiLm5hbWUgPT09IGZvcm1GaWVsZEVycm9yTmFtZXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWxlcnRzID0gYWxlcnRzQXJyYXlcclxuICAgICAgICAgICAgLm1hcChlID0+IHRoaXMuZ2V0QWxlcnQoZS5uYW1lLCBlLnZhbHVlKSlcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGZpcnN0IHNvcnQgb24gdmFsaWQgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChhLnZhbGlkICE9PSBiLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEudmFsaWQgPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IG9uIHNldmVyaXR5XHJcbiAgICAgICAgICAgICAgICBpZiAoYS5zZXZlcml0eSAhPT0gYi5zZXZlcml0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNldmVyaXR5IDwgYi5zZXZlcml0eSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhleSBhcmUgY29uc2lkZXJlZCBlcXVhbCBmb3Igc29ydGluZ1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzb3J0ZWRBbGVydHMuc29tZShhbGVydCA9PiB7XHJcbiAgICAgICAgICAgIC8vIFNob3cgYWxlcnQgaW4gdGhlc2Ugc2NlbmFyaW9zOlxyXG4gICAgICAgICAgICAvLyAtIElmIHRoZSBmb3JtIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBpdCBpcyBub3QgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgZm9ybVxyXG4gICAgICAgICAgICAvLyAtIElmIGEgY3VzdG9tIGFsZXJ0IG1hcmtzIHNob3dXaGVuUHJpc2l0aW5lIGFzIHRydWVcclxuICAgICAgICAgICAgLy8gLSBJZiB0aGUgYWxlcnQgaXMgbWFya2VkIGFzIHZhbGlkXHJcbiAgICAgICAgICAgIC8vIC0gQW55IG90aGVyIGFsZXJ0cyBhZnRlciB0aGUgZm9ybSBpcyBtYXJrZWQgYXMgZGlydHlcclxuICAgICAgICAgICAgaWYgKGFsZXJ0LnNldmVyaXR5ICE9PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvciB8fCBhbGVydC52YWxpZCB8fCBhbGVydC5zaG93V2hlblByaXN0aW5lIHx8IHRoaXMubmdNb2RlbC5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydCA9IGFsZXJ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUZpZWxkQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtRmllbGRDb250YWluZXIudXBkYXRlQWxlcnQoYWxlcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUJvcmRlclN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRWaXNpYmxlQWxlcnRzKHRhcmdldDogTXNmdFNtZS5OYW1lVmFsdWU8c3RyaW5nLCBhbnk+W10sIGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cykge1xyXG4gICAgICAgIGlmICghTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChhbGVydHMpKSB7XHJcbiAgICAgICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleShhbGVydHMsIChrLCB2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISg8VmFsaWRhdGlvbkFsZXJ0PnYpLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKHsgbmFtZTogaywgdmFsdWU6IHYgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGdldHMgYW4gYWxlcnQgb2JqZWN0IGZyb20gYSBrZXkgYW5kIHZhbGlkYXRpb24gcmVzdWx0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXRBbGVydChrZXk6IHN0cmluZywgYWxlcnQ6IFZhbGlkYXRpb25SZXN1bHQpOiBWYWxpZGF0aW9uQWxlcnQge1xyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBmYWxzZSwgbnVsbCwgb3IgdmFsaWQgd2l0aCBubyBtZXNzYWdlLCB0aGVuIGl0cyBub3QgcmVhbGx5IGFuIGFsZXJ0IHRoYXQgbmVlZHMgdG8gYmUgc2hvd24gYW5kIHNob3VsZCBiZSBpZ25vcmVkXHJcbiAgICAgICAgaWYgKGFsZXJ0ID09PSBmYWxzZVxyXG4gICAgICAgICAgICB8fCBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0KVxyXG4gICAgICAgICAgICB8fCAoKGFsZXJ0IGFzIFZhbGlkYXRpb25BbGVydCkudmFsaWQgPT09IHRydWUpICYmIE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKChhbGVydCBhcyBWYWxpZGF0aW9uQWxlcnQpLm1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHByb2Nlc3NlZEFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZSBhbGVydCBpcyBhIHN0cmluZywgc2hvdyBpdCBhcyBhbiBlcnJvclxyXG4gICAgICAgIGlmICh0eXBlb2YgYWxlcnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogPHN0cmluZz5hbGVydFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBwcm9jZXNzZWRBbGVydCA9IHRoaXMuZ2V0S25vd25OZ0FsZXJ0KGtleSwgYWxlcnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGFsZXJ0IGlzIGEgc2ltcGxlIHRydWUsIHdlIGRvbnQgcmVhbGx5IGtub3cgaG93IHRvIGRlYWwgd2l0aCBpdCwgc28ganVzdCBjcmVhdGUgYW4gZW1wdHkgdmFsaWRhdGlvbiBvYmplY3RcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEFsZXJ0ID0gYWxlcnQgPT09IHRydWUgPyB7fSA6IHsgLi4uYWxlcnQgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiB2YWxpZCBpcyBub3Qgc2V0LCB0aGVuIHNldCBpdCBleHBsaWNpdGx5IHRvIGZhbHNlXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZChwcm9jZXNzZWRBbGVydC52YWxpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIG1lc3NhZ2UsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXHJcbiAgICAgICAgICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UocHJvY2Vzc2VkQWxlcnQubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5tZXNzYWdlID0gYFZhbGlkYXRpb24gZmFpbGVkOiAke2tleX1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHNldmVyaXR5IGlzIG5vdCBzZXQgY29ycmVjdGx5IGFuZCB0aGUgZmllbGQgaXMgbm90IHZhbGlkLCB0aGVuIHNldCBpdCB0byBlcnJvclxyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRBbGVydC52YWxpZCAmJiBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKFZhbGlkYXRpb25BbGVydFNldmVyaXR5W3Byb2Nlc3NlZEFsZXJ0LnNldmVyaXR5XSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBbGVydC5zZXZlcml0eSA9IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkQWxlcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFuIGFsZXJ0IG9iamVjdCBmcm9tIGtub3duIGFuZ3VsYXIgYWxlcnQga2V5c1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0S25vd25OZ0FsZXJ0KGtleTogc3RyaW5nLCBhbGVydDogYW55KTogVmFsaWRhdGlvbkFsZXJ0IHtcclxuICAgICAgICBjb25zdCB2U3RyaW5ncyA9ICg8U3RyaW5ncz5Nc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuc3RyaW5ncykuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLkZvcm0uVmFsaWRhdGlvbjtcclxuICAgICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICAgIC8vIGZpcnN0IGNoZWNrIGZvciBrbm93biBhbmd1bGFyICdidWlsdC1pbicgdmFsaWRhdGlvbnNcclxuXHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnbWluJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1pbi5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5taW4pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4Jzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5tYXgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdlN0cmluZ3MuUmVxdWlyZWQuZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5FbWFpbC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6IHtcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB2U3RyaW5ncy5NaW5MZW5ndGguZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLk1heExlbmd0aC5mb3JtYXQuZm9ybWF0KHRoaXMuZmllbGROYW1lLCBhbGVydC5yZXF1aXJlZExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzoge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHZTdHJpbmdzLlBhdHRlcm4uZm9ybWF0LmZvcm1hdCh0aGlzLmZpZWxkTmFtZSwgYWxlcnQucmVxdWlyZWRQYXR0ZXJuKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UobWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2V2ZXJpdHkgPSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvcjtcclxuXHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZShhbGVydCkpIHtcclxuICAgICAgICAgICAgLy8gbWVyZ2UgYWxlcnQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0XHJcbiAgICAgICAgICAgIHZhbGlkID0gISFhbGVydC52YWxpZDtcclxuICAgICAgICAgICAgc2V2ZXJpdHkgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0LnNldmVyaXR5KSA/IHNldmVyaXR5IDogYWxlcnQuc2V2ZXJpdHk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKGFsZXJ0Lm1lc3NhZ2UpID8gbWVzc2FnZSA6IGFsZXJ0Lm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWxpZDogdmFsaWQsXHJcbiAgICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSxcclxuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbiBzb21lIGNhc2VzLCB3ZSBuZWVkIGEgY29tYmluZWQgdmVyc2lvbiBvZiB0aGUgbGFiZWwgYW5kIGRlc2NyaXB0aW9uIHNvIHRoYXQgdGhlIHNjcmVlbiByZWFkIGNhbiByZWFkIGl0IGFwcHJvcHJpYXRlbHkuXHJcbiAgICAgKiBDb21tb24gY2FzZXMgZm9yIHRoaXMgYXJlIHdoZW4gdXNpbmcgcm9sZT1cImdyb3VwXCIgb3Igcm9sZT1cInJhZGlvR3JvdXBcIiBiZWNhdXNlIHRoZXkgZG9lcyBub3Qgc3VwcG9ydCBhcmlhLWRlc2NyaWJlZGJ5XHJcbiAgICAgKiB3ZSBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBieSBzcGxpdHRpbmcgdGhlIGRlc2NyaXB0aW9uIGFuZCBhbmQgbGFiZWwgd2l0aCBhICcuJyAocGVyaW9kKVwiXHJcbiAgICAgKiBUT0RPOiB2ZXJpZnkgaG93IHRoaXMgbG9jYWxpemVzIG9yIGZpbmQgYSBiZXR0ZXIgd2F5LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0TWVyZ2VkRGVzY3JpcHRpb25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChNc2Z0U21lLmlzTnVsbE9yV2hpdGVTcGFjZSh0aGlzLmRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYWJlbCB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMubGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGFiZWx9LiAke3RoaXMuZGVzY3JpcHRpb259YDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVybmFsIGJhc2UgY29tcG9uZW50IGZvciBTTUUgZm9yIGZpZWxkcy4gSXQgc2ltcGx5IHJlbW92ZXMgdGhlIG5lZWQgdG8gc3VwcGx5IHRoZSBzdHJpbmcgdHlwZSBwYXJhbWV0ZXIgdG8gRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAqIFRoaXMgY2xhc3MgaXMgZXhwb3J0ZWQgZnJvbSB0aGlzIGZpbGUsIGJ1dCBub3QgbWVhbnQgdG8gYmUgZXhwb3J0ZWQgZnJvbSBpbmRleC50cyBidW5kbGVzLlxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8VE1vZGVsPiBleHRlbmRzIEZvcm1GaWVsZENvbXBvbmVudDxTdHJpbmdzLCBUTW9kZWw+IHtcclxuICAgIC8vIFNob3VsZCBSZW1haW4gRW1wdHkuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { FormFieldAccessibilityManagerBaseService } from '../form-field-accessibility-manager-base.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../form-field-accessibility-manager-base.service";
|
|
5
|
+
export class ListFormFieldAccessibilityManagerService {
|
|
6
|
+
constructor(formFieldAccessibilityManagerBaseService) {
|
|
7
|
+
this.formFieldAccessibilityManagerBaseService = formFieldAccessibilityManagerBaseService;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* It handles the focus when deleting an item from the list.
|
|
11
|
+
* @param value the value for the list.
|
|
12
|
+
* @param addButton the element reference for the add button.
|
|
13
|
+
* @param hostElement the element reference for the host element.
|
|
14
|
+
* @returns void
|
|
15
|
+
*/
|
|
16
|
+
delete(value, addButton, hostElement) {
|
|
17
|
+
this.formFieldAccessibilityManagerBaseService.listFormFieldFocusHandlerOnKeyboardAction(value, addButton, hostElement);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* It handles the focus when adding an item to the list.
|
|
21
|
+
* @param value the value for the list.
|
|
22
|
+
* @param addButton the element reference for the add button.
|
|
23
|
+
* @param hostElement the element reference for the host element.
|
|
24
|
+
* @returns void
|
|
25
|
+
*/
|
|
26
|
+
add(value, addButton, hostElement) {
|
|
27
|
+
this.formFieldAccessibilityManagerBaseService.listFormFieldFocusHandlerOnKeyboardAction(value, addButton, hostElement, false);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** @nocollapse */ ListFormFieldAccessibilityManagerService.ɵfac = function ListFormFieldAccessibilityManagerService_Factory(t) { return new (t || ListFormFieldAccessibilityManagerService)(i0.ɵɵinject(i1.FormFieldAccessibilityManagerBaseService)); };
|
|
31
|
+
/** @nocollapse */ ListFormFieldAccessibilityManagerService.ɵprov = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjectable({ token: ListFormFieldAccessibilityManagerService, factory: ListFormFieldAccessibilityManagerService.ɵfac, providedIn: 'root' });
|
|
32
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ListFormFieldAccessibilityManagerService, [{
|
|
33
|
+
type: Injectable,
|
|
34
|
+
args: [{
|
|
35
|
+
providedIn: 'root'
|
|
36
|
+
}]
|
|
37
|
+
}], function () { return [{ type: i1.FormFieldAccessibilityManagerBaseService }]; }, null); })();
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1mb3JtLWZpZWxkLWFjY2Vzc2liaWxpdHktbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL2xpc3QvbGlzdC1mb3JtLWZpZWxkLWFjY2Vzc2liaWxpdHktbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sa0RBQWtELENBQUM7OztBQUs1RyxNQUFNLE9BQU8sd0NBQXdDO0lBRWpELFlBQXNCLHdDQUFrRjtRQUFsRiw2Q0FBd0MsR0FBeEMsd0NBQXdDLENBQTBDO0lBQUcsQ0FBQztJQUM1Rzs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsS0FBdUIsRUFBRSxTQUFpQyxFQUFFLFdBQXVCO1FBQzdGLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyx5Q0FBeUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxHQUFHLENBQUMsS0FBdUIsRUFBRSxTQUFpQyxFQUFFLFdBQXVCO1FBQzFGLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyx5Q0FBeUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsSSxDQUFDOzttSkF2QlEsd0NBQXdDOzZIQUF4Qyx3Q0FBd0MsV0FBeEMsd0NBQXdDLG1CQUZ2QyxNQUFNO3VGQUVQLHdDQUF3QztjQUhwRCxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWFjY2Vzc2liaWxpdHktbWFuYWdlci1iYXNlLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdEZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyQmFzZVNlcnZpY2U6IEZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyQmFzZVNlcnZpY2UpIHt9XHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgdGhlIGZvY3VzIHdoZW4gZGVsZXRpbmcgYW4gaXRlbSBmcm9tIHRoZSBsaXN0LlxyXG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBmb3IgdGhlIGxpc3QuXHJcbiAgICAgKiBAcGFyYW0gYWRkQnV0dG9uIHRoZSBlbGVtZW50IHJlZmVyZW5jZSBmb3IgdGhlIGFkZCBidXR0b24uXHJcbiAgICAgKiBAcGFyYW0gaG9zdEVsZW1lbnQgdGhlIGVsZW1lbnQgcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICogQHJldHVybnMgdm9pZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVsZXRlKHZhbHVlOiBzdHJpbmdbXSB8IGFueVtdLCBhZGRCdXR0b246IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQsIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlckJhc2VTZXJ2aWNlLmxpc3RGb3JtRmllbGRGb2N1c0hhbmRsZXJPbktleWJvYXJkQWN0aW9uKHZhbHVlLCBhZGRCdXR0b24sIGhvc3RFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgdGhlIGZvY3VzIHdoZW4gYWRkaW5nIGFuIGl0ZW0gdG8gdGhlIGxpc3QuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIGZvciB0aGUgbGlzdC5cclxuICAgICAqIEBwYXJhbSBhZGRCdXR0b24gdGhlIGVsZW1lbnQgcmVmZXJlbmNlIGZvciB0aGUgYWRkIGJ1dHRvbi5cclxuICAgICAqIEBwYXJhbSBob3N0RWxlbWVudCB0aGUgZWxlbWVudCByZWZlcmVuY2UgZm9yIHRoZSBob3N0IGVsZW1lbnQuXHJcbiAgICAgKiBAcmV0dXJucyB2b2lkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGQodmFsdWU6IHN0cmluZ1tdIHwgYW55W10sIGFkZEJ1dHRvbjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCwgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1GaWVsZEFjY2Vzc2liaWxpdHlNYW5hZ2VyQmFzZVNlcnZpY2UubGlzdEZvcm1GaWVsZEZvY3VzSGFuZGxlck9uS2V5Ym9hcmRBY3Rpb24odmFsdWUsIGFkZEJ1dHRvbiwgaG9zdEVsZW1lbnQsIGZhbHNlKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|