@c8y/ngx-components 1021.38.1 → 1021.49.4
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/api/services.d.ts +1 -1
- package/api/services.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
- package/connectivity/abstract-connectivity-tab.factory.d.ts +1 -1
- package/context-dashboard/add-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +4 -2
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts +1 -0
- package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts +0 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
- package/context-dashboard/new-dashboard.guard.d.ts +1 -1
- package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
- package/core/action/action.component.d.ts +2 -1
- package/core/action/action.component.d.ts.map +1 -1
- package/core/action/action.model.d.ts +3 -2
- package/core/action/action.model.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts +2 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.model.d.ts +2 -1
- package/core/breadcrumb/breadcrumb.model.d.ts.map +1 -1
- package/core/common/ApplicationOptions.d.ts +1 -0
- package/core/common/ApplicationOptions.d.ts.map +1 -1
- package/core/common/empty-state/empty-state.component.d.ts +2 -1
- package/core/common/empty-state/empty-state.component.d.ts.map +1 -1
- package/core/common/get-group-icon.pipe.d.ts +2 -1
- package/core/common/get-group-icon.pipe.d.ts.map +1 -1
- package/core/common/group.service.d.ts +22 -7
- package/core/common/group.service.d.ts.map +1 -1
- package/core/common/icon.directive.d.ts +5 -5
- package/core/common/icon.directive.d.ts.map +1 -1
- package/core/common/service-registry.model.d.ts +2 -1
- package/core/common/service-registry.model.d.ts.map +1 -1
- package/core/data-grid/data-grid.model.d.ts +2 -1
- package/core/data-grid/data-grid.model.d.ts.map +1 -1
- package/core/docs/docs.models.d.ts +2 -1
- package/core/docs/docs.models.d.ts.map +1 -1
- package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts +5 -1
- package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts.map +1 -1
- package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts +5 -1
- package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts.map +1 -1
- package/core/docs/support-outlet/support-outlet.component.d.ts +5 -1
- package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
- package/core/forms/filter-input.component.d.ts +8 -3
- package/core/forms/filter-input.component.d.ts.map +1 -1
- package/core/i18n/translate.service.d.ts.map +1 -1
- package/core/list-group/list-item-action.component.d.ts +2 -1
- package/core/list-group/list-item-action.component.d.ts.map +1 -1
- package/core/list-group/list-item-icon.component.d.ts +2 -1
- package/core/list-group/list-item-icon.component.d.ts.map +1 -1
- package/core/login/login.service.d.ts.map +1 -1
- package/core/navigator/navigator-icon.component.d.ts +1 -1
- package/core/navigator/navigator-icon.component.d.ts.map +1 -1
- package/core/navigator/navigator-node-data.d.ts +2 -1
- package/core/navigator/navigator-node-data.d.ts.map +1 -1
- package/core/navigator/navigator-node.component.d.ts.map +1 -1
- package/core/navigator/navigator-node.d.ts +2 -1
- package/core/navigator/navigator-node.d.ts.map +1 -1
- package/core/plugins/plugins.model.d.ts +7 -2
- package/core/plugins/plugins.model.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/properties-list/properties-list.component.d.ts +2 -1
- package/core/properties-list/properties-list.component.d.ts.map +1 -1
- package/core/provider-configuration/model/dynamic-provider-config.model.d.ts +2 -2
- package/core/provider-configuration/model/dynamic-provider-config.model.d.ts.map +1 -1
- package/core/router/context-route.service.d.ts.map +1 -1
- package/core/router/router.model.d.ts +1 -1
- package/core/router/router.model.d.ts.map +1 -1
- package/core/router/scoped-context-route.service.d.ts.map +1 -1
- package/core/search/search.model.d.ts +2 -1
- package/core/search/search.model.d.ts.map +1 -1
- package/core/select/select-keyboard.service.d.ts +4 -0
- package/core/select/select-keyboard.service.d.ts.map +1 -1
- package/core/select/select.component.d.ts +14 -3
- package/core/select/select.component.d.ts.map +1 -1
- package/core/select-modal/select-modal.component.d.ts +2 -1
- package/core/select-modal/select-modal.component.d.ts.map +1 -1
- package/core/shared/core.model.d.ts +5 -1
- package/core/shared/core.model.d.ts.map +1 -1
- package/core/tabs/conditional-tabs-outlet.component.d.ts.map +1 -1
- package/core/tabs/tab.component.d.ts +3 -2
- package/core/tabs/tab.component.d.ts.map +1 -1
- package/core/tabs/tab.model.d.ts +10 -5
- package/core/tabs/tab.model.d.ts.map +1 -1
- package/core/tabs/tabs-outlet.component.d.ts +7 -4
- package/core/tabs/tabs-outlet.component.d.ts.map +1 -1
- package/core/user/user-menu-item.component.d.ts +2 -1
- package/core/user/user-menu-item.component.d.ts.map +1 -1
- package/core/user/user.model.d.ts +2 -1
- package/core/user/user.model.d.ts.map +1 -1
- package/core/wizard/wizard.model.d.ts +4 -3
- package/core/wizard/wizard.model.d.ts.map +1 -1
- package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +15 -46
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts +3 -0
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selection.model.d.ts +6 -7
- package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +2 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
- package/device-grid/columns/icon.cell-renderer.component.d.ts +14 -0
- package/device-grid/columns/icon.cell-renderer.component.d.ts.map +1 -0
- package/device-grid/columns/index.d.ts +1 -0
- package/device-grid/columns/index.d.ts.map +1 -1
- package/device-grid/device-grid.component.d.ts.map +1 -1
- package/device-grid/device-grid.service.d.ts +0 -2
- package/device-grid/device-grid.service.d.ts.map +1 -1
- package/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts +11 -0
- package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts +13 -0
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts +13 -0
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -0
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +57 -0
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -0
- package/device-provisioned-certificates/index.d.ts +2 -0
- package/device-provisioned-certificates/index.d.ts.map +1 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.module.d.ts +2 -2
- package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
- package/ecosystem/application-plugins/index.d.ts +1 -0
- package/ecosystem/application-plugins/index.d.ts.map +1 -1
- package/ecosystem/application-plugins/install-plugin.component.d.ts +9 -11
- package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts +12 -0
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -0
- package/ecosystem/application-plugins/plugin-list-item.component.d.ts +8 -3
- package/ecosystem/application-plugins/plugin-list-item.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
- package/ecosystem/applications/application-list/application-list.component.d.ts +2 -2
- package/ecosystem/applications/application-list/application-list.component.d.ts.map +1 -1
- package/ecosystem/applications/install-from-package/install-from-package.component.d.ts.map +1 -1
- package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts +11 -0
- package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts.map +1 -0
- package/ecosystem/archived-confirm/archived-confirm.module.d.ts +10 -0
- package/ecosystem/archived-confirm/archived-confirm.module.d.ts.map +1 -0
- package/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.d.ts.map +1 -0
- package/ecosystem/archived-confirm/index.d.ts +3 -0
- package/ecosystem/archived-confirm/index.d.ts.map +1 -0
- package/ecosystem/ecosystem.module.d.ts +2 -1
- package/ecosystem/ecosystem.module.d.ts.map +1 -1
- package/ecosystem/features/feature-list.component.d.ts +2 -2
- package/ecosystem/features/feature-list.component.d.ts.map +1 -1
- package/ecosystem/microservices/microservice-list.component.d.ts +2 -2
- package/ecosystem/microservices/microservice-list.component.d.ts.map +1 -1
- package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
- package/ecosystem/packages/package-details/package-details.component.d.ts +7 -2
- package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
- package/ecosystem/packages/package-list/packages-list.component.d.ts +2 -2
- package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
- package/ecosystem/shared/add-application.component.d.ts +2 -1
- package/ecosystem/shared/add-application.component.d.ts.map +1 -1
- package/ecosystem/shared/application-card.component.d.ts +4 -0
- package/ecosystem/shared/application-card.component.d.ts.map +1 -1
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts +12 -0
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -0
- package/ecosystem/shared/ecosystem.constants.d.ts +4 -0
- package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
- package/ecosystem/shared/ecosystem.model.d.ts +5 -1
- package/ecosystem/shared/ecosystem.model.d.ts.map +1 -1
- package/ecosystem/shared/ecosystem.service.d.ts +7 -0
- package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
- package/ecosystem/shared/index.d.ts +1 -0
- package/ecosystem/shared/index.d.ts.map +1 -1
- package/ecosystem/shared/list-filters/list-filters.component.d.ts +14 -4
- package/ecosystem/shared/list-filters/list-filters.component.d.ts.map +1 -1
- package/ecosystem/shared/list-filters/list-filters.model.d.ts +8 -2
- package/ecosystem/shared/list-filters/list-filters.model.d.ts.map +1 -1
- package/ecosystem/shared/shared-ecosystem.module.d.ts +9 -8
- package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
- package/ecosystem/shared/translate-package-label.pipe.d.ts +1 -1
- package/ecosystem/shared/translate-package-label.pipe.d.ts.map +1 -1
- package/esm2022/alarms/alarm-info.component.mjs +1 -1
- package/esm2022/api/services.mjs +2 -2
- package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.mjs +10 -5
- package/esm2022/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.mjs +4 -4
- package/esm2022/branding/shared/lazy/branding-form/branding-form.component.mjs +3 -3
- package/esm2022/context-dashboard/add-dashboard.component.mjs +4 -2
- package/esm2022/context-dashboard/context-dashboard.model.mjs +3 -2
- package/esm2022/context-dashboard/context-dashboard.service.mjs +2 -2
- package/esm2022/context-dashboard/dashboard-detail.component.mjs +5 -3
- package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.model.mjs +1 -1
- package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.service.mjs +5 -15
- package/esm2022/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.mjs +2 -2
- package/esm2022/context-dashboard/new-dashboard.guard.mjs +1 -1
- package/esm2022/core/action/action.component.mjs +1 -1
- package/esm2022/core/action/action.model.mjs +1 -1
- package/esm2022/core/bootstrap/bootstrap.component.mjs +1 -1
- package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +1 -1
- package/esm2022/core/breadcrumb/breadcrumb.model.mjs +1 -1
- package/esm2022/core/common/ApplicationOptions.mjs +1 -1
- package/esm2022/core/common/empty-state/empty-state.component.mjs +1 -1
- package/esm2022/core/common/get-group-icon.pipe.mjs +1 -1
- package/esm2022/core/common/group.service.mjs +2 -2
- package/esm2022/core/common/icon.directive.mjs +1 -1
- package/esm2022/core/common/service-registry.model.mjs +1 -1
- package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
- package/esm2022/core/docs/docs.models.mjs +1 -1
- package/esm2022/core/docs/support-outlet/support-outlet.component.mjs +3 -3
- package/esm2022/core/forms/filter-input.component.mjs +22 -7
- package/esm2022/core/i18n/translate.service.mjs +7 -5
- package/esm2022/core/list-group/list-item-action.component.mjs +1 -1
- package/esm2022/core/list-group/list-item-icon.component.mjs +1 -1
- package/esm2022/core/login/credentials.component.mjs +2 -2
- package/esm2022/core/login/login.service.mjs +18 -7
- package/esm2022/core/navigator/navigator-node-data.mjs +1 -1
- package/esm2022/core/navigator/navigator-node.component.mjs +11 -2
- package/esm2022/core/navigator/navigator-node.mjs +1 -1
- package/esm2022/core/plugins/plugins.model.mjs +5 -1
- package/esm2022/core/plugins/plugins.service.mjs +6 -2
- package/esm2022/core/properties-list/properties-list.component.mjs +1 -1
- package/esm2022/core/provider-configuration/model/dynamic-provider-config.model.mjs +1 -1
- package/esm2022/core/router/context-route.service.mjs +4 -2
- package/esm2022/core/router/router.model.mjs +1 -1
- package/esm2022/core/router/scoped-context-route.service.mjs +4 -2
- package/esm2022/core/search/search.model.mjs +1 -1
- package/esm2022/core/select/select-keyboard.service.mjs +7 -3
- package/esm2022/core/select/select.component.mjs +36 -8
- package/esm2022/core/select-modal/select-modal.component.mjs +2 -2
- package/esm2022/core/shared/core.model.mjs +6 -2
- package/esm2022/core/tabs/conditional-tabs-outlet.component.mjs +4 -2
- package/esm2022/core/tabs/tab.component.mjs +1 -1
- package/esm2022/core/tabs/tab.model.mjs +1 -1
- package/esm2022/core/tabs/tabs-outlet.component.mjs +41 -12
- package/esm2022/core/user/user-menu-item.component.mjs +1 -1
- package/esm2022/core/user/user.model.mjs +1 -1
- package/esm2022/core/wizard/wizard.model.mjs +1 -1
- package/esm2022/data-grid-columns/asset-type/asset-type.cell-renderer.component.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +47 -22
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +1 -1
- package/esm2022/device-grid/columns/icon.cell-renderer.component.mjs +42 -0
- package/esm2022/device-grid/columns/index.mjs +2 -1
- package/esm2022/device-grid/device-grid.component.mjs +3 -3
- package/esm2022/device-grid/device-grid.service.mjs +7 -25
- package/esm2022/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.mjs +5 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.guard.mjs +28 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.module.mjs +51 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +31 -0
- package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +76 -0
- package/esm2022/device-provisioned-certificates/index.mjs +2 -0
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +41 -39
- package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +8 -6
- package/esm2022/ecosystem/application-plugins/apps-to-update-remotes-select.component.mjs +1 -1
- package/esm2022/ecosystem/application-plugins/index.mjs +2 -1
- package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +18 -21
- package/esm2022/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.mjs +26 -0
- package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +14 -6
- package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +14 -12
- package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +7 -1
- package/esm2022/ecosystem/applications/application-list/application-list.component.mjs +1 -1
- package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +6 -1
- package/esm2022/ecosystem/archived-confirm/archived-confirm-modal.component.mjs +22 -0
- package/esm2022/ecosystem/archived-confirm/archived-confirm.module.mjs +32 -0
- package/esm2022/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.mjs +5 -0
- package/esm2022/ecosystem/archived-confirm/index.mjs +3 -0
- package/esm2022/ecosystem/ecosystem.module.mjs +20 -16
- package/esm2022/ecosystem/features/feature-list.component.mjs +1 -1
- package/esm2022/ecosystem/microservices/microservice-list.component.mjs +1 -1
- package/esm2022/ecosystem/packages/deploy-application/deploy-application.component.mjs +6 -1
- package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +13 -8
- package/esm2022/ecosystem/packages/package-list/packages-list.component.mjs +4 -4
- package/esm2022/ecosystem/shared/add-application.component.mjs +1 -1
- package/esm2022/ecosystem/shared/application-card.component.mjs +3 -3
- package/esm2022/ecosystem/shared/archived-filter/archived-filter.component.mjs +27 -0
- package/esm2022/ecosystem/shared/ecosystem.constants.mjs +5 -1
- package/esm2022/ecosystem/shared/ecosystem.model.mjs +7 -3
- package/esm2022/ecosystem/shared/ecosystem.service.mjs +26 -1
- package/esm2022/ecosystem/shared/index.mjs +2 -1
- package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +75 -13
- package/esm2022/ecosystem/shared/list-filters/list-filters.model.mjs +1 -1
- package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +10 -5
- package/esm2022/ecosystem/shared/translate-package-label.pipe.mjs +3 -3
- package/esm2022/files-repository/files-repository.component.mjs +2 -2
- package/esm2022/files-repository/files-repository.service.mjs +5 -16
- package/esm2022/icon-selector/icon-selector.component.mjs +1 -1
- package/esm2022/icon-selector/icons/index.mjs +1 -1
- package/esm2022/operations/shared/status-option.model.mjs +1 -1
- package/esm2022/protocol-lwm2m/components/configuration/lwm2m-configuration.component.mjs +2 -2
- package/esm2022/protocol-opcua/opcua-auto-apply-settings.component.mjs +1 -1
- package/esm2022/register-device/bulk/bulk-device-registration-modal.component.mjs +17 -9
- package/esm2022/register-device/general/general-device-registration-button.component.mjs +3 -3
- package/esm2022/register-device/general/general-device-registration.component.mjs +109 -33
- package/esm2022/remote-access/configurations/c8y-ngx-components-remote-access-configurations.mjs +5 -0
- package/esm2022/remote-access/configurations/index.mjs +16 -0
- package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +218 -0
- package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.mjs +60 -0
- package/esm2022/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.mjs +36 -0
- package/esm2022/remote-access/data/c8y-ngx-components-remote-access-data.mjs +5 -0
- package/esm2022/remote-access/data/index.mjs +3 -0
- package/esm2022/remote-access/data/remote-access-protocol-provider.mjs +2 -0
- package/esm2022/remote-access/data/remote-access.service.mjs +200 -0
- package/esm2022/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.mjs +5 -0
- package/esm2022/remote-access/passthrough/index.mjs +36 -0
- package/esm2022/remote-access/shared/c8y-ngx-components-remote-access-shared.mjs +5 -0
- package/esm2022/remote-access/shared/index.mjs +3 -0
- package/esm2022/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.mjs +49 -0
- package/esm2022/remote-access/shared/ssh-key-input/ssh-key-input.component.mjs +87 -0
- package/esm2022/remote-access/ssh/c8y-ngx-components-remote-access-ssh.mjs +5 -0
- package/esm2022/remote-access/ssh/index.mjs +73 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +5 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/index.mjs +2 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.mjs +104 -0
- package/esm2022/remote-access/telnet/c8y-ngx-components-remote-access-telnet.mjs +5 -0
- package/esm2022/remote-access/telnet/index.mjs +43 -0
- package/esm2022/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.mjs +5 -0
- package/esm2022/remote-access/terminal-viewer/index.mjs +2 -0
- package/esm2022/remote-access/terminal-viewer/shell-adapter.mjs +36 -0
- package/esm2022/remote-access/terminal-viewer/telnet-negotiator.mjs +96 -0
- package/esm2022/remote-access/terminal-viewer/terminal-viewer.component.mjs +101 -0
- package/esm2022/remote-access/vnc/c8y-ngx-components-remote-access-vnc.mjs +5 -0
- package/esm2022/remote-access/vnc/index.mjs +73 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +5 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/index.mjs +2 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.mjs +59 -0
- package/esm2022/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +5 -0
- package/esm2022/remote-access/vnc/vnc-viewer/index.mjs +2 -0
- package/esm2022/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.mjs +57 -0
- package/esm2022/remote-access/vnc/vnc-viewer/vnc-viewer.component.mjs +158 -0
- package/esm2022/replace-device/replace-device-wizard/replace-device-wizard.model.mjs +1 -1
- package/esm2022/report-dashboard/report-dashboard-list.component.mjs +4 -3
- package/esm2022/repository/configuration/device-tab/device-configuration-list.component.mjs +1 -1
- package/esm2022/repository/shared/repository.model.mjs +1 -1
- package/esm2022/repository/shared/repository.service.mjs +3 -3
- package/esm2022/services/status-options/status-options.model.mjs +1 -1
- package/esm2022/sub-assets/group-info.component.mjs +1 -1
- package/esm2022/translation-editor/data/translation-store.service.mjs +4 -3
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +35 -9
- package/esm2022/upgrade/bridge.service.mjs +16 -2
- package/esm2022/widgets/implementations/alarms/severity-icon.pipe.mjs +1 -1
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +3 -2
- package/esm2022/widgets/implementations/kpi/kpi-widget.model.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-api.mjs +3 -2
- package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +12 -7
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -2
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +15 -20
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +48 -23
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +48 -28
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +174 -0
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +125 -105
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +57 -0
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +147 -31
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1452 -1414
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +5 -16
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +269 -188
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +314 -0
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +206 -0
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +42 -0
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +138 -0
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +111 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +79 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +50 -0
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +235 -0
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +66 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +211 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +79 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +3 -2
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -2
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +43 -17
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +16 -2
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +157 -42
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/files-repository/files-repository.component.d.ts.map +1 -1
- package/files-repository/files-repository.service.d.ts +0 -2
- package/files-repository/files-repository.service.d.ts.map +1 -1
- package/icon-selector/icon-selector.component.d.ts +3 -2
- package/icon-selector/icon-selector.component.d.ts.map +1 -1
- package/icon-selector/icons/index.d.ts +1 -0
- package/icon-selector/icons/index.d.ts.map +1 -1
- package/locales/de.po +157 -5
- package/locales/es.po +157 -5
- package/locales/fr.po +157 -5
- package/locales/ja_JP.po +156 -5
- package/locales/ko.po +156 -5
- package/locales/locales.pot +156 -4
- package/locales/nl.po +157 -5
- package/locales/pl.po +157 -5
- package/locales/pt_BR.po +157 -5
- package/locales/zh_CN.po +156 -5
- package/locales/zh_TW.po +156 -5
- package/operations/shared/status-option.model.d.ts +2 -1
- package/operations/shared/status-option.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts +6 -2
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/general/general-device-registration-button.component.d.ts +1 -1
- package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
- package/register-device/general/general-device-registration.component.d.ts +21 -7
- package/register-device/general/general-device-registration.component.d.ts.map +1 -1
- package/remote-access/configurations/c8y-ngx-components-remote-access-configurations.d.ts.map +1 -0
- package/remote-access/configurations/index.d.ts +3 -0
- package/remote-access/configurations/index.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts +34 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts +17 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts +18 -0
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -0
- package/remote-access/data/c8y-ngx-components-remote-access-data.d.ts.map +1 -0
- package/remote-access/data/index.d.ts +3 -0
- package/remote-access/data/index.d.ts.map +1 -0
- package/remote-access/data/remote-access-protocol-provider.d.ts +21 -0
- package/remote-access/data/remote-access-protocol-provider.d.ts.map +1 -0
- package/remote-access/data/remote-access.service.d.ts +94 -0
- package/remote-access/data/remote-access.service.d.ts.map +1 -0
- package/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.d.ts.map +1 -0
- package/remote-access/passthrough/index.d.ts +17 -0
- package/remote-access/passthrough/index.d.ts.map +1 -0
- package/remote-access/shared/c8y-ngx-components-remote-access-shared.d.ts.map +1 -0
- package/remote-access/shared/index.d.ts +3 -0
- package/remote-access/shared/index.d.ts.map +1 -0
- package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts +37 -0
- package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts +38 -0
- package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts.map +1 -0
- package/remote-access/ssh/c8y-ngx-components-remote-access-ssh.d.ts.map +1 -0
- package/remote-access/ssh/index.d.ts +22 -0
- package/remote-access/ssh/index.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts +2 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts +64 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/telnet/c8y-ngx-components-remote-access-telnet.d.ts.map +1 -0
- package/remote-access/telnet/index.d.ts +17 -0
- package/remote-access/telnet/index.d.ts.map +1 -0
- package/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.d.ts.map +1 -0
- package/remote-access/terminal-viewer/index.d.ts +2 -0
- package/remote-access/terminal-viewer/index.d.ts.map +1 -0
- package/remote-access/terminal-viewer/shell-adapter.d.ts +14 -0
- package/remote-access/terminal-viewer/shell-adapter.d.ts.map +1 -0
- package/remote-access/terminal-viewer/telnet-negotiator.d.ts +13 -0
- package/remote-access/terminal-viewer/telnet-negotiator.d.ts.map +1 -0
- package/remote-access/terminal-viewer/terminal-viewer.component.d.ts +25 -0
- package/remote-access/terminal-viewer/terminal-viewer.component.d.ts.map +1 -0
- package/remote-access/vnc/c8y-ngx-components-remote-access-vnc.d.ts.map +1 -0
- package/remote-access/vnc/index.d.ts +22 -0
- package/remote-access/vnc/index.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts +2 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts +46 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/index.d.ts +2 -0
- package/remote-access/vnc/vnc-viewer/index.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts +32 -0
- package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts +37 -0
- package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts.map +1 -0
- package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts +2 -1
- package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts.map +1 -1
- package/report-dashboard/report-dashboard-list.component.d.ts +29 -0
- package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
- package/repository/shared/repository.model.d.ts +2 -1
- package/repository/shared/repository.model.d.ts.map +1 -1
- package/services/status-options/status-options.model.d.ts +2 -1
- package/services/status-options/status-options.model.d.ts.map +1 -1
- package/sub-assets/group-info.component.d.ts +2 -1
- package/sub-assets/group-info.component.d.ts.map +1 -1
- package/translation-editor/data/translation-store.service.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts +7 -2
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
- package/upgrade/bridge.service.d.ts +5 -0
- package/upgrade/bridge.service.d.ts.map +1 -1
- package/widgets/implementations/alarms/severity-icon.pipe.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
- package/widgets/implementations/kpi/kpi-widget.model.d.ts +2 -1
- package/widgets/implementations/kpi/kpi-widget.model.d.ts.map +1 -1
- package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts +0 -10
- package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts.map +0 -1
- package/esm2022/ecosystem/application-plugins/only-latest-plugin-version.pipe.mjs +0 -20
|
@@ -212,7 +212,7 @@ export class RepositoryService {
|
|
|
212
212
|
if (this.isLegacyEntry(entry)) {
|
|
213
213
|
return of(1);
|
|
214
214
|
}
|
|
215
|
-
return from(this.listBaseVersions(entry, {
|
|
215
|
+
return from(this.listBaseVersions(entry, { withTotalElements: true })).pipe(map(({ paging }) => paging.totalElements));
|
|
216
216
|
}
|
|
217
217
|
getBaseVersionFromMO(mo) {
|
|
218
218
|
return this.isPatch(mo) ? get(mo, 'c8y_Patch.dependency') : get(mo, 'c8y_Firmware.version');
|
|
@@ -224,7 +224,7 @@ export class RepositoryService {
|
|
|
224
224
|
if (this.isLegacyEntry(baseVersion)) {
|
|
225
225
|
return of(0);
|
|
226
226
|
}
|
|
227
|
-
return from(this.listPatchVersions(entry, baseVersion, {
|
|
227
|
+
return from(this.listPatchVersions(entry, baseVersion, { withTotalElements: true })).pipe(map(({ paging }) => paging.totalElements));
|
|
228
228
|
}
|
|
229
229
|
isLegacyEntry(entry) {
|
|
230
230
|
return Boolean(entry.url);
|
|
@@ -1087,4 +1087,4 @@ export class RepositoryService {
|
|
|
1087
1087
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RepositoryService, decorators: [{
|
|
1088
1088
|
type: Injectable
|
|
1089
1089
|
}], ctorParameters: () => [{ type: i1.InventoryService }, { type: i1.InventoryBinaryService }, { type: i1.OperationService }, { type: i2.AlertService }, { type: i1.EventService }, { type: i2.OperationRealtimeService }, { type: i1.EventBinaryService }, { type: i2.ServiceRegistry }, { type: i2.GlobalConfigService }] });
|
|
1090
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zaGFyZWQvcmVwb3NpdG9yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBT1osc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUloQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsWUFBWSxFQUNaLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsR0FBRyxJQUFJLElBQUksRUFDWCxNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixPQUFPLEVBQ1AsR0FBRyxFQUNILElBQUksRUFDSixLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxNQUFNLEVBQ04sSUFBSSxFQUNKLE1BQU0sRUFDTixHQUFHLEVBQ0osTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekYsT0FBTyxFQVFMLHVCQUF1QixFQUd2QixjQUFjLEVBR2YsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc1QixNQUFNLE9BQU8saUJBQWlCO0lBTTVCLFlBQ1UsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsU0FBMkIsRUFDM0IsS0FBbUIsRUFDbkIsS0FBbUIsRUFDbkIs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LFdBQVcsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQzs4R0E3eUNVLGlCQUFpQjtrSEFBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRXZlbnRCaW5hcnlTZXJ2aWNlLFxuICBFdmVudFNlcnZpY2UsXG4gIElkUmVmZXJlbmNlLFxuICBJRXZlbnQsXG4gIElGZXRjaFJlc3BvbnNlLFxuICBJSWRlbnRpZmllZCxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIElNYW5hZ2VkT2JqZWN0QmluYXJ5LFxuICBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJT3BlcmF0aW9uLFxuICBJUmVzdWx0LFxuICBJUmVzdWx0TGlzdCxcbiAgT3BlcmF0aW9uU2VydmljZSxcbiAgT3BlcmF0aW9uU3RhdHVzLFxuICBRdWVyaWVzVXRpbFxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEdsb2JhbENvbmZpZ1NlcnZpY2UsXG4gIE9wZXJhdGlvblJlYWx0aW1lU2VydmljZSxcbiAgU2VydmljZVJlZ2lzdHJ5XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgbWFwIGFzIF9tYXAsXG4gIGFzc2lnbixcbiAgY2xvbmVEZWVwLFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBnZXQsXG4gIGhlYWQsXG4gIGlzTmlsLFxuICBpc1N0cmluZyxcbiAgaXNVbmRlZmluZWQsXG4gIG9taXRCeSxcbiAgcGljayxcbiAgcmVtb3ZlLFxuICBzZXRcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGRlZmVyLCBmcm9tLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VXaGlsZSwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2UgfSBmcm9tICcuL2FkdmFuY2VkLXNvZnR3YXJlLW1hbmFnZW1lbnQubW9kZWwnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvblNuYXBzaG90LFxuICBEZXZpY2VGaXJtd2FyZSxcbiAgRGV2aWNlU29mdHdhcmUsXG4gIERldmljZVNvZnR3YXJlQ2hhbmdlLFxuICBGaXJtd2FyZUJpbmFyeSxcbiAgRmlybXdhcmVQYXRjaEJpbmFyeSxcbiAgTW9kYWxNb2RlbCxcbiAgUkVQT1NJVE9SWV9CSU5BUllfVFlQRVMsXG4gIFJlcG9zaXRvcnlCaW5hcnksXG4gIFJlcG9zaXRvcnlDYXRlZ29yeSxcbiAgUmVwb3NpdG9yeVR5cGUsXG4gIFNlbGVjdGVkUmVwb3NpdG9yeUJpbmFyeSxcbiAgU29mdHdhcmVCaW5hcnlcbn0gZnJvbSAnLi9yZXBvc2l0b3J5Lm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9zaXRvcnlTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgZGF0ZUZyb20gPSBuZXcgRGF0ZSgwKTtcbiAgcmVhZG9ubHkgZGF0ZVRvID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIDg2NDAwMDAwKTsgLy8gMSBkYXkgaW4gdGhlIGZ1dHVyZVxuICBwcml2YXRlIHF1ZXJpZXNVdGlsOiBRdWVyaWVzVXRpbDtcbiAgcHJpdmF0ZSBhZHZhbmNlZFNvZnR3YXJlU2VydmljZTogSUFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5QmluYXJ5OiBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3BlcmF0aW9uOiBPcGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50OiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcGVyYXRpb25SZWFsdGltZTogT3BlcmF0aW9uUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRCaW5hcnk6IEV2ZW50QmluYXJ5U2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgZ2xvYmFsQ29uZmlnU2VydmljZTogR2xvYmFsQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLnF1ZXJpZXNVdGlsID0gbmV3IFF1ZXJpZXNVdGlsKCk7XG4gICAgdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZSA9IGhlYWQodGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0KCdhc20nKSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgcmVwb3NpdG9yeSBlbnRyaWVzIG9mIGdpdmVuIHR5cGUuXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHJlcG9zaXRvcnkgZW50cmllcyB0byBsaXN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBFeHRyYSBsaXN0aW5nIG9wdGlvbnMuXG4gICAqL1xuICBsaXN0UmVwb3NpdG9yeUVudHJpZXMoXG4gICAgdHlwZTogUmVwb3NpdG9yeVR5cGUsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIC8qKiBBZGRpdGlvbmFsIHF1ZXJ5LiAqL1xuICAgICAgcXVlcnk/OiBhbnk7XG4gICAgICAvKiogKGRlcHJlY2F0ZWQgLSB0byBiZSByZW1vdmVkKSBPbmx5IGluY2x1ZGUgZW50cmllcyB3aXRoIG1hdGNoaW5nIHBhcnRpYWwgbmFtZXMuICovXG4gICAgICBwYXJ0aWFsTmFtZT86IHN0cmluZztcbiAgICAgIC8qKiBJbmNsdWRlIGVudHJpZXMgd2l0aCBtYXRjaGluZyBwYXJ0aWFsIHRleHQgaW4gdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLiAqL1xuICAgICAgcGFydGlhbFRleHRGaWx0ZXI/OiB7IHBhcnRpYWxUZXh0OiBzdHJpbmc7IHByb3BlcnRpZXM6IHN0cmluZ1tdIH07XG4gICAgICAvKiogRXhjbHVkZSBsZWdhY3kgZW50cmllcy4gKi9cbiAgICAgIHNraXBMZWdhY3k/OiBib29sZWFuO1xuICAgICAgLyoqIEV4Y2x1ZGUgZGVmYXVsdCBvcmRlcmluZy4gKi9cbiAgICAgIHNraXBEZWZhdWx0T3JkZXI/OiBib29sZWFuO1xuICAgICAgLyoqIE90aGVyIHJlcXVlc3QgcGFyYW1zLiAqL1xuICAgICAgcGFyYW1zPzogYW55O1xuICAgIH1cbiAgKSB7XG4gICAgY29uc3QgZGVmYXVsdE9yZGVyID0gW3sgbmFtZTogMSB9XTtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVycyA9IHsgdHlwZSB9O1xuICAgIGNvbnN0IGxlZ2FjeUZpbHRlcnMgPSB7IF9faGFzOiBgdXJsYCB9O1xuICAgIGxldCBmaWx0ZXJzID0ge307XG5cbiAgICBsZXQgZnVsbFF1ZXJ5ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5xdWVyeSkgfHwge307XG4gICAgaWYgKCFvcHRpb25zIHx8IChvcHRpb25zICYmICFvcHRpb25zLnNraXBEZWZhdWx0T3JkZXIpKSB7XG4gICAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yZGVyYnlzKGZ1bGxRdWVyeSwgZGVmYXVsdE9yZGVyLCAncHJlcGVuZCcpO1xuICAgIH1cblxuICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZ1bGxRdWVyeSwgZGVmYXVsdEZpbHRlcnMpO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJ0aWFsVGV4dEZpbHRlcikge1xuICAgICAgY29uc3QgeyBwYXJ0aWFsVGV4dCwgcHJvcGVydGllcyB9ID0gb3B0aW9ucy5wYXJ0aWFsVGV4dEZpbHRlcjtcbiAgICAgIGNvbnN0IG9yRmlsdGVyID0geyBfX29yOiBwcm9wZXJ0aWVzLm1hcChwcm9wZXJ0eSA9PiAoeyBbcHJvcGVydHldOiBgKiR7cGFydGlhbFRleHR9KmAgfSkpIH07XG4gICAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihmdWxsUXVlcnksIG9yRmlsdGVyKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhcnRpYWxOYW1lKSB7XG4gICAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpZlxuICAgICAgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIoZnVsbFF1ZXJ5LCB7IG5hbWU6IGAqJHtvcHRpb25zLnBhcnRpYWxOYW1lfSpgIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2tpcExlZ2FjeSkge1xuICAgICAgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIoZnVsbFF1ZXJ5LCB7IF9fbm90OiBsZWdhY3lGaWx0ZXJzIH0pO1xuICAgIH1cblxuICAgIGZpbHRlcnMgPSB7XG4gICAgICBxdWVyeTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGZ1bGxRdWVyeSksXG4gICAgICBwYWdlU2l6ZTogNTAsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIC4uLigob3B0aW9ucyAmJiBvcHRpb25zLnBhcmFtcykgfHwge30pXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShtb2RhbDogTW9kYWxNb2RlbCwgdHlwZTogUmVwb3NpdG9yeVR5cGUsIG1vOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiA9IHt9KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJlcG9zaXRvcnlUeXBlLkZJUk1XQVJFOlxuICAgICAgY2FzZSBSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRTpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVwb3NpdG9yeU9iamVjdChtb2RhbCwgdHlwZSk7XG5cbiAgICAgIGNhc2UgUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTjpcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtb2RhbCwge1xuICAgICAgICAgIHNlbGVjdGVkOiB7XG4gICAgICAgICAgICBpZDogbW8uaWQsXG4gICAgICAgICAgICBuYW1lOiBtb2RhbC52ZXJzaW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uVHlwZTogbW9kYWwuY29uZmlndXJhdGlvblR5cGUsXG4gICAgICAgICAgbmFtZTogbW9kYWwudmVyc2lvblxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIW1vZGFsLmRldmljZVR5cGUgJiYgbW8uaWQpIHtcbiAgICAgICAgICBtb2RhbC5kZXZpY2VUeXBlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vZGFsLnNlbGVjdGVkICYmIG1vLmlkKSB7XG4gICAgICAgICAgbW9kYWwuY29uZmlndXJhdGlvblR5cGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwb3NpdG9yeU9iamVjdCA9IHRoaXMuY3JlYXRlUmVwb3NpdG9yeU9iamVjdChtb2RhbCwgdHlwZSk7XG5cbiAgICAgICAgaWYgKG1vLnVybCkge1xuICAgICAgICAgIGNvbnN0IG5ld0JpbmFyeVVybCA9IChhd2FpdCByZXBvc2l0b3J5T2JqZWN0KS51cmw7XG4gICAgICAgICAgdGhpcy5yZW1vdmVPdXRkYXRlZEJpbmFyeShuZXdCaW5hcnlVcmwsIG1vLnVybCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVwb3NpdG9yeU9iamVjdDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVSZXBvc2l0b3J5T2JqZWN0KFxuICAgIG1vZGFsOiBNb2RhbE1vZGVsLFxuICAgIHR5cGU6IFJlcG9zaXRvcnlUeXBlXG4gICk6IFByb21pc2U8UmVwb3NpdG9yeUNhdGVnb3J5PiB7XG4gICAgbGV0IGJpbmFyeTogSU1hbmFnZWRPYmplY3RCaW5hcnk7XG4gICAgbGV0IGJpbmFyeVVSTDogc3RyaW5nO1xuICAgIGxldCByZXBvc2l0b3J5RW50cnk6IFJlcG9zaXRvcnlDYXRlZ29yeTtcbiAgICBsZXQgcmVwb3NpdG9yeUJpbmFyeTogRmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeTtcbiAgICBjb25zdCBtb3MgPSBbXTtcbiAgICBjb25zdCB7XG4gICAgICBzZWxlY3RlZDogeyBpZDogc2VsZWN0ZWRJZCB9LFxuICAgICAgYmluYXJ5OiB7IGZpbGUsIHVybCB9XG4gICAgfSA9IG1vZGFsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnbG9iYWxQYXJhbSA9IGF3YWl0IHRoaXMuZ2V0R2xvYmFsRnJhZ21lbnQodHlwZSk7XG5cbiAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICh7IGRhdGE6IGJpbmFyeSB9ID0gYXdhaXQgdGhpcy5zYXZlQmluYXJ5KGZpbGUsIGdsb2JhbFBhcmFtKSk7XG4gICAgICAgICh7IHNlbGY6IGJpbmFyeVVSTCB9ID0gYmluYXJ5KTtcbiAgICAgICAgaWYgKHR5cGUgPT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgICAgICBtb2RhbC5iaW5hcnkudXJsID0gYmluYXJ5VVJMO1xuICAgICAgICB9XG4gICAgICAgIG1vcy5wdXNoKGJpbmFyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaW5hcnlVUkwgPSB1cmw7XG4gICAgICB9XG5cbiAgICAgICh7IGRhdGE6IHJlcG9zaXRvcnlFbnRyeSB9ID0gYXdhaXQgdGhpcy5jcmVhdGVPclVwZGF0ZVJlcG9zaXRvcnlFbnRyeShcbiAgICAgICAgeyAuLi5tb2RhbCwgLi4uZ2xvYmFsUGFyYW0gfSxcbiAgICAgICAgdHlwZVxuICAgICAgKSk7XG4gICAgICBpZiAoaXNOaWwoc2VsZWN0ZWRJZCkpIHtcbiAgICAgICAgbW9zLnB1c2gocmVwb3NpdG9yeUVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgIT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgICAgKHsgZGF0YTogcmVwb3NpdG9yeUJpbmFyeSB9ID0gYXdhaXQgdGhpcy5jcmVhdGVSZXBvc2l0b3J5QmluYXJ5KFxuICAgICAgICAgIHsgLi4ubW9kYWwsIC4uLmdsb2JhbFBhcmFtIH0sXG4gICAgICAgICAgYmluYXJ5VVJMLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgcmVwb3NpdG9yeUVudHJ5XG4gICAgICAgICkpO1xuICAgICAgICBtb3MucHVzaChyZXBvc2l0b3J5QmluYXJ5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5saW5rQmluYXJ5KHJlcG9zaXRvcnlCaW5hcnksIGJpbmFyeSwgcmVwb3NpdG9yeUVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcG9zaXRvcnlFbnRyeTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jbGVhblVwKG1vcyk7XG4gICAgICB0aGlzLmVycm9yTXNnKCk7XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSBlcnJvclxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUJpbmFyeShmaWxlOiBGaWxlLCBnbG9iYWw6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KTogUHJvbWlzZTxJUmVzdWx0PElNYW5hZ2VkT2JqZWN0QmluYXJ5Pj4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeUJpbmFyeS5jcmVhdGUoZmlsZSwgZ2xvYmFsKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9yVXBkYXRlUmVwb3NpdG9yeUVudHJ5KFxuICAgIG1vZGFsOiBNb2RhbE1vZGVsLFxuICAgIHR5cGU6IFJlcG9zaXRvcnlUeXBlXG4gICk6IFByb21pc2U8SVJlc3VsdDxSZXBvc2l0b3J5Q2F0ZWdvcnk+PiB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0ZWQ6IHsgaWQsIG5hbWUgfSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZGV2aWNlVHlwZSxcbiAgICAgIGM4eV9HbG9iYWwsXG4gICAgICBiaW5hcnlcbiAgICB9ID0gbW9kYWw7XG5cbiAgICBjb25zdCBtbyA9IHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgdHlwZSxcbiAgICAgIGM4eV9HbG9iYWxcbiAgICB9O1xuXG4gICAgaWYgKGRldmljZVR5cGUgJiYgdHlwZSAhPT0gUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTikge1xuICAgICAgc2V0KG1vLCAnYzh5X0ZpbHRlci50eXBlJywgZGV2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKChkZXZpY2VUeXBlIHx8IGlkKSAmJiB0eXBlID09PSBSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OKSB7XG4gICAgICBzZXQobW8sICdkZXZpY2VUeXBlJywgZGV2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGFsLnNvZnR3YXJlVHlwZSkge1xuICAgICAgc2V0KG1vLCAnc29mdHdhcmVUeXBlJywgbW9kYWwuc29mdHdhcmVUeXBlLnNvZnR3YXJlVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKChtb2RhbC5jb25maWd1cmF0aW9uVHlwZSB8fCBpZCkgJiYgdHlwZSA9PT0gUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTikge1xuICAgICAgc2V0KG1vLCAnY29uZmlndXJhdGlvblR5cGUnLCBtb2RhbC5jb25maWd1cmF0aW9uVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgIHNldChtbywgJ3VybCcsIGJpbmFyeT8udXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWRcbiAgICAgID8gKHRoaXMuaW52ZW50b3J5LnVwZGF0ZShtbykgYXMgUHJvbWlzZTxJUmVzdWx0PFJlcG9zaXRvcnlDYXRlZ29yeT4+KVxuICAgICAgOiAodGhpcy5pbnZlbnRvcnkuY3JlYXRlKG1vKSBhcyBQcm9taXNlPElSZXN1bHQ8UmVwb3NpdG9yeUNhdGVnb3J5Pj4pO1xuICB9XG5cbiAgY3JlYXRlUmVwb3NpdG9yeUJpbmFyeShcbiAgICBtb2RhbDogTW9kYWxNb2RlbCxcbiAgICBiaW5hcnlVUkw6IHN0cmluZyxcbiAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZSxcbiAgICBwYXJlbnQ6IFJlcG9zaXRvcnlDYXRlZ29yeVxuICApOiBQcm9taXNlPElSZXN1bHQ8RmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeSB8IEZpcm13YXJlUGF0Y2hCaW5hcnk+PiB7XG4gICAgY29uc3QgbW8gPSB0aGlzLnByZXBhcmVSZXBvc2l0b3J5QmluYXJ5TU8obW9kYWwsIGJpbmFyeVVSTCwgdHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUobW8sIHBhcmVudCkgYXMgUHJvbWlzZTxcbiAgICAgIElSZXN1bHQ8RmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeSB8IEZpcm13YXJlUGF0Y2hCaW5hcnk+XG4gICAgPjtcbiAgfVxuXG4gIHByZXBhcmVSZXBvc2l0b3J5QmluYXJ5TU8obW9kYWw6IE1vZGFsTW9kZWwsIGJpbmFyeVVSTDogc3RyaW5nLCB0eXBlOiBSZXBvc2l0b3J5VHlwZSkge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgcGF0Y2hWZXJzaW9uLCBkZXBlbmRlbmN5LCBjOHlfR2xvYmFsIH0gPSBtb2RhbDtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICB0eXBlOiBSRVBPU0lUT1JZX0JJTkFSWV9UWVBFU1t0eXBlXSxcbiAgICAgIFt0eXBlXToge1xuICAgICAgICB1cmw6IGJpbmFyeVVSTFxuICAgICAgfSxcbiAgICAgIGM4eV9HbG9iYWxcbiAgICB9O1xuXG4gICAgaWYgKGRlcGVuZGVuY3kpIHtcbiAgICAgIHNldChyZXN1bHQsIFt0eXBlLCAndmVyc2lvbiddLCBwYXRjaFZlcnNpb24pO1xuICAgICAgYXNzaWduKHJlc3VsdCwge1xuICAgICAgICBjOHlfUGF0Y2g6IHtcbiAgICAgICAgICBkZXBlbmRlbmN5OiBkZXBlbmRlbmN5LmM4eV9GaXJtd2FyZS52ZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXQocmVzdWx0LCBbdHlwZSwgJ3ZlcnNpb24nXSwgdmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsaW5rQmluYXJ5KFxuICAgIHJlcG9zaXRvcnlCaW5hcnksXG4gICAgYmluYXJ5OiBJTWFuYWdlZE9iamVjdEJpbmFyeSxcbiAgICByZXBvc2l0b3J5RW50cnk/OiBSZXBvc2l0b3J5Q2F0ZWdvcnlcbiAgKSB7XG4gICAgaWYgKHJlcG9zaXRvcnlCaW5hcnkpIHtcbiAgICAgIGNvbnN0IHsgaWQ6IHJlcG9zaXRvcnlCaW5hcnlJZCB9ID0gcmVwb3NpdG9yeUJpbmFyeTtcbiAgICAgIGlmIChiaW5hcnkpIHtcbiAgICAgICAgY29uc3QgeyBpZDogYmluYXJ5SWQgfSA9IGJpbmFyeTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQWRkKGJpbmFyeUlkLCByZXBvc2l0b3J5QmluYXJ5SWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNBZGQoYmluYXJ5LCByZXBvc2l0b3J5RW50cnkpO1xuICB9XG5cbiAgY2xlYW5VcChtb3NUb0RlbGV0ZTogSUlkZW50aWZpZWRbXSkge1xuICAgIG1vc1RvRGVsZXRlLmZvckVhY2gobW8gPT4ge1xuICAgICAgY29uc3QgeyBjOHlfSXNCaW5hcnkgfSA9IG1vO1xuICAgICAgaXNVbmRlZmluZWQoYzh5X0lzQmluYXJ5KSA/IHRoaXMuZGVsZXRlKG1vKSA6IHRoaXMuaW52ZW50b3J5QmluYXJ5LmRlbGV0ZShtbyk7XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGUoZW50aXR5OiBJSWRlbnRpZmllZCk6IFByb21pc2U8SVJlc3VsdDxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5kZWxldGUoZW50aXR5LCB7IGZvcmNlQ2FzY2FkZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGVycm9yTXNnKCkge1xuICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0ZhaWxlZCB0byBzYXZlJyk7XG4gICAgdGhpcy5hbGVydC5kYW5nZXIobXNnKTtcbiAgfVxuXG4gIGdldEJhc2VWZXJzaW9uc0NvdW50JChlbnRyeTogSU1hbmFnZWRPYmplY3QpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gb2YoMSk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tKHRoaXMubGlzdEJhc2VWZXJzaW9ucyhlbnRyeSwgeyBwYWdlU2l6ZTogMSwgd2l0aFRvdGFsUGFnZXM6IHRydWUgfSkpLnBpcGUoXG4gICAgICBtYXAoKHsgcGFnaW5nIH0pID0+IHBhZ2luZy50b3RhbFBhZ2VzKVxuICAgICk7XG4gIH1cblxuICBnZXRCYXNlVmVyc2lvbkZyb21NTyhtbzogUmVwb3NpdG9yeUJpbmFyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYXRjaChtbykgPyBnZXQobW8sICdjOHlfUGF0Y2guZGVwZW5kZW5jeScpIDogZ2V0KG1vLCAnYzh5X0Zpcm13YXJlLnZlcnNpb24nKTtcbiAgfVxuXG4gIGlzUGF0Y2gobW86IFJlcG9zaXRvcnlCaW5hcnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFnZXQobW8sICdjOHlfUGF0Y2guZGVwZW5kZW5jeScpO1xuICB9XG5cbiAgZ2V0UGF0Y2hWZXJzaW9uc0NvdW50JChlbnRyeTogSU1hbmFnZWRPYmplY3QsIGJhc2VWZXJzaW9uOiBGaXJtd2FyZUJpbmFyeSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgaWYgKHRoaXMuaXNMZWdhY3lFbnRyeShiYXNlVmVyc2lvbikpIHtcbiAgICAgIHJldHVybiBvZigwKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmxpc3RQYXRjaFZlcnNpb25zKGVudHJ5LCBiYXNlVmVyc2lvbiwgeyBwYWdlU2l6ZTogMSwgd2l0aFRvdGFsUGFnZXM6IHRydWUgfSlcbiAgICApLnBpcGUobWFwKCh7IHBhZ2luZyB9KSA9PiBwYWdpbmcudG90YWxQYWdlcykpO1xuICB9XG5cbiAgaXNMZWdhY3lFbnRyeShlbnRyeTogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihlbnRyeS51cmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGFsbCB2ZXJzaW9ucyAoYmFzZSBhbmQgcGF0Y2ggb25lcykgb2YgZ2l2ZW4gdG9wIGxldmVsIGVudHJ5LlxuICAgKiBWZXJzaW9ucyBhcmUgb3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lIChhc3N1bWluZyB0aGUgZWFybGllciBjcmVhdGVkLCB0aGUgb2xkZXIgdGhlIHZlcnNpb24pLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0QWxsVmVyc2lvbnMoZW50cnk6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LCBwYXJhbXMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCYXNlVmVyc2lvblJlc3VsdExpc3RGb3JMZWdhY3lFbnRyeShlbnRyeSk7XG4gICAgfVxuXG4gICAgY29uc3QgVkVSU0lPTl9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge30sXG4gICAgICBfX29yZGVyYnk6IFt7ICdjcmVhdGlvblRpbWUuZGF0ZSc6IC0xIH1dXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5saXN0Q2hpbGRyZW4oZW50cnksIFZFUlNJT05fRklMVEVSX09SREVSLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGJhc2UgdmVyc2lvbnMgb2YgZ2l2ZW4gdG9wIGxldmVsIGVudHJ5LlxuICAgKiBWZXJzaW9ucyBhcmUgb3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lIChhc3N1bWluZyB0aGUgZWFybGllciBjcmVhdGVkLCB0aGUgb2xkZXIgdGhlIHZlcnNpb24pLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0QmFzZVZlcnNpb25zKGVudHJ5OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiwgcGFyYW1zID0ge30pIHtcbiAgICBpZiAodGhpcy5pc0xlZ2FjeUVudHJ5KGVudHJ5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QmFzZVZlcnNpb25SZXN1bHRMaXN0Rm9yTGVnYWN5RW50cnkoZW50cnkpO1xuICAgIH1cblxuICAgIGNvbnN0IE5PX1BBVENIX0ZJTFRFUl9PUkRFUiA9IHtcbiAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgIF9fbm90OiB7IF9faGFzOiAnYzh5X1BhdGNoJyB9XG4gICAgICB9LFxuICAgICAgX19vcmRlcmJ5OiBbeyAnY3JlYXRpb25UaW1lLmRhdGUnOiAtMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubGlzdENoaWxkcmVuKGVudHJ5LCBOT19QQVRDSF9GSUxURVJfT1JERVIsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgcGF0Y2ggdmVyc2lvbnMgb2YgZ2l2ZW4gYmFzZSB2ZXJzaW9uIHVuZGVyIHRoZSBlbnRyeS5cbiAgICogVmVyc2lvbnMgYXJlIG9yZGVyZWQgYnkgY3JlYXRpb24gdGltZSAoYXNzdW1pbmcgdGhlIGVhcmxpZXIgY3JlYXRlZCwgdGhlIG9sZGVyIHRoZSB2ZXJzaW9uKS5cbiAgICogQHBhcmFtIGVudHJ5IFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5LlxuICAgKiBAcGFyYW0gYmFzZVZlcnNpb24gQmFzZSB2ZXJzaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zLlxuICAgKi9cbiAgbGlzdFBhdGNoVmVyc2lvbnMoZW50cnk6IElNYW5hZ2VkT2JqZWN0LCBiYXNlVmVyc2lvbjogRmlybXdhcmVCaW5hcnkgfCBzdHJpbmcsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGlzU3RyaW5nKGJhc2VWZXJzaW9uKSA/IGJhc2VWZXJzaW9uIDogZ2V0KGJhc2VWZXJzaW9uLCAnYzh5X0Zpcm13YXJlLnZlcnNpb24nKTtcbiAgICBjb25zdCBQQVRDSF9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAnYzh5X1BhdGNoLmRlcGVuZGVuY3knOiB2ZXJzaW9uXG4gICAgICB9LFxuICAgICAgX19vcmRlcmJ5OiBbeyAnY3JlYXRpb25UaW1lLmRhdGUnOiAtMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubGlzdENoaWxkcmVuKGVudHJ5LCBQQVRDSF9GSUxURVJfT1JERVIsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgcGF0Y2ggdmVyc2lvbnMgb2YgZ2l2ZW4gYmFzZSB2ZXJzaW9uIHVuZGVyIHRoZSBlbnRyeSBpbmNsdWRpbmcgdGhlIGJhc2UgdmVyc2lvbi5cbiAgICogVmVyc2lvbnMgYXJlIG9yZGVyZWQgYnkgY3JlYXRpb24gdGltZSAoYXNzdW1pbmcgdGhlIGVhcmxpZXIgY3JlYXRlZCwgdGhlIG9sZGVyIHRoZSB2ZXJzaW9uKS5cbiAgICogSW4gdGVybXMgb2YgbGVnYWN5IGJhc2UgdmVyc2lvbiB0aGUgZW50cnkgZ2V0cyB0cmFuc2Zvcm1lZCB0byBmaXQgdGhlIG5lZWRlZCBkYXRhIG1vZGVsLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBiYXNlVmVyc2lvbiBCYXNlIHZlcnNpb24uXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0QmFzZVZlcnNpb25BbmRQYXRjaGVzKGVudHJ5OiBJTWFuYWdlZE9iamVjdCwgYmFzZVZlcnNpb246IElNYW5hZ2VkT2JqZWN0LCBwYXJhbXMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGM4eV9GaXJtd2FyZToge1xuICAgICAgICAgICAgICAgIHZlcnNpb246IGVudHJ5LnZlcnNpb24sXG4gICAgICAgICAgICAgICAgdXJsOiBlbnRyeS51cmxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudHJ5XG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBQQVRDSF9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX29yOiB7XG4gICAgICAgICAgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5JzogYmFzZVZlcnNpb24uYzh5X0Zpcm13YXJlLnZlcnNpb24sXG4gICAgICAgICAgJ2M4eV9GaXJtd2FyZS52ZXJzaW9uJzogYmFzZVZlcnNpb24uYzh5X0Zpcm13YXJlLnZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5JzogMSB9LCB7ICdjOHlfRmlybXdhcmUudmVyc2lvbic6IDEgfV1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmxpc3RDaGlsZHJlbihlbnRyeSwgUEFUQ0hfRklMVEVSX09SREVSLCBwYXJhbXMpO1xuICB9XG5cbiAgbGlzdENoaWxkcmVuKGVudHJ5OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiwgZmlsdGVycyA9IHt9LCBwYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgY2hpbGRyZW5GaWx0ZXJzID0geyBfX2J5Z3JvdXBpZDogZW50cnkuaWQgfTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZpbHRlcnMsIGNoaWxkcmVuRmlsdGVycyk7XG4gICAgLy8gRklYTUU6IG5lZWRlZCBiZWNhdXNlIG9mIGlzc3VlIGluIGZvck9mIGRpcmVjdGl2ZSAoLi4uKVxuICAgIHBhcmFtcy53aXRoVG90YWxQYWdlcyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3RRdWVyeShxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFsbCBpdGVtcyBmcm9tIHRoZSBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIHByb3ZpZGVkIHBhZ2UuXG4gICAqIEBwYXJhbSBmaXJzdFBhZ2UgVGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGxpc3QgdG8gZmV0Y2ggYWxsIGl0ZW1zIGZvci5cbiAgICovXG4gIGFzeW5jIGZldGNoQWxsSXRlbXNGcm9tTGlzdChmaXJzdFBhZ2UpIHtcbiAgICBsZXQgYWxsSXRlbXM7XG5cbiAgICBpZiAoIWZpcnN0UGFnZS50aGVuKSB7XG4gICAgICBhbGxJdGVtcyA9IFsuLi5maXJzdFBhZ2VdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBwYWdpbmcsIGRhdGE6IGl0ZW1zIH0gPSBhd2FpdCBmaXJzdFBhZ2U7XG4gICAgICBhbGxJdGVtcyA9IFsuLi5pdGVtc107XG5cbiAgICAgIHdoaWxlIChwYWdpbmcgJiYgcGFnaW5nLm5leHRQYWdlKSB7XG4gICAgICAgICh7IHBhZ2luZywgZGF0YTogaXRlbXMgfSA9IGF3YWl0IHBhZ2luZy5uZXh0KCkpO1xuICAgICAgICBhbGxJdGVtcyA9IFsuLi5hbGxJdGVtcywgLi4uaXRlbXNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhbGxJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5IG1hbmFnZWQgb2JqZWN0IGZvciBiYXNlIG9yIHBhdGNoIHZlcnNpb24uXG4gICAqIEBwYXJhbSBtbyBCYXNlIG9yIHBhdGNoIHZlcnNpb24gbWFuYWdlZCBvYmplY3Qgd2l0aCBwYXJlbnRzLlxuICAgKi9cbiAgZ2V0UmVwb3NpdG9yeUVudHJ5TU8kKG1vOiBJTWFuYWdlZE9iamVjdCk6IE9ic2VydmFibGU8SU1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIW1vKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgW3JlZmVyZW5jZV0gPSBnZXQobW8sICdhZGRpdGlvblBhcmVudHMucmVmZXJlbmNlcycpO1xuICAgIGNvbnN0IGlkID0gZ2V0KHJlZmVyZW5jZSwgJ21hbmFnZWRPYmplY3QuaWQnKTtcbiAgICByZXR1cm4gaWRcbiAgICAgID8gZnJvbSh0aGlzLmludmVudG9yeS5kZXRhaWwoaWQsIHsgd2l0aENoaWxkcmVuOiBmYWxzZSB9KSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgICAgIDogb2YodW5kZWZpbmVkKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBiYXNlIG9yIHBhdGNoIHZlcnNpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBkZXZpY2VSZXBvc2l0b3J5RnJhZ21lbnQgRGV2aWNlIHJlcG9zaXRvcnkgZnJhZ21lbnQuXG4gICAqIEBwYXJhbSB0eXBlIFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5IHR5cGUuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIENvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggb3B0aW9uczpcbiAgICogLSAqKnNraXBMZWdhY3kqKiAtIGBib29sZWFuYCAtIEV4Y2x1ZGUgbGVnYWN5IGVudHJpZXMuXG4gICAqIC0gKipmaWx0ZXJzKiogLSBgb2JqZWN0YCAtIEZpbHRlciBvYmplY3QuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIGFzIGl0IGRvZXNuJ3Qgc3VwcG9ydCAnbWlzc2luZyB1cmwnIGNhc2VcbiAgICovXG4gIGdldFJlcG9zaXRvcnlCaW5hcnlNb0J5VmVyc2lvbihcbiAgICBkZXZpY2VSZXBvc2l0b3J5RnJhZ21lbnQ6IERldmljZUZpcm13YXJlIHwgRGV2aWNlU29mdHdhcmUsXG4gICAgdHlwZTogUmVwb3NpdG9yeVR5cGUsXG4gICAgeyBza2lwTGVnYWN5ID0gZmFsc2UsIGZpbHRlcnMgPSB7fSB9OiB7IHNraXBMZWdhY3k/OiBib29sZWFuOyBmaWx0ZXJzPzogb2JqZWN0IH0gPSB7fVxuICApOiBQcm9taXNlPElNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCB1cmwsIG5hbWUgfSA9IGRldmljZVJlcG9zaXRvcnlGcmFnbWVudDtcbiAgICBjb25zdCByZXBvc2l0b3J5QmluYXJ5VHlwZSA9IFJFUE9TSVRPUllfQklOQVJZX1RZUEVTW3R5cGVdO1xuICAgIGxldCBxdWVyeTtcbiAgICBjb25zdCBuZXdNb2RlbEJhc2VWZXJzaW9uUXVlcnkgPSB7XG4gICAgICBbYCR7dHlwZX0udmVyc2lvbmBdOiB2ZXJzaW9uLFxuICAgICAgW2Ake3R5cGV9LnVybGBdOiB1cmwsXG4gICAgICB0eXBlOiByZXBvc2l0b3J5QmluYXJ5VHlwZVxuICAgIH07XG4gICAgY29uc3QgbGVnYWN5VmVyc2lvblF1ZXJ5ID0geyB1cmwsIHR5cGUsIG5hbWUgfTtcbiAgICBmaWx0ZXJzID0geyB3aXRoQ2hpbGRyZW46IGZhbHNlLCB3aXRoUGFyZW50czogdHJ1ZSwgLi4uZmlsdGVycyB9O1xuXG4gICAgaWYgKHNraXBMZWdhY3kpIHtcbiAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICBfX2FuZDoge1xuICAgICAgICAgIC4uLm5ld01vZGVsQmFzZVZlcnNpb25RdWVyeVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeSA9IHtcbiAgICAgICAgX19vcjogW3sgX19hbmQ6IHsgLi4ubmV3TW9kZWxCYXNlVmVyc2lvblF1ZXJ5IH0gfSwgeyBfX2FuZDogeyAuLi5sZWdhY3lWZXJzaW9uUXVlcnkgfSB9XVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdFF1ZXJ5KHF1ZXJ5LCBmaWx0ZXJzKS50aGVuKCh7IGRhdGEgfSkgPT4gaGVhZChkYXRhKSk7XG4gIH1cblxuICBnZXRCaW5hcnlOYW1lJChiaW5hcnlVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKCFiaW5hcnlVcmwpIHtcbiAgICAgIHJldHVybiBvZignLS0tJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYmluYXJ5SWQgPSB0aGlzLmludmVudG9yeUJpbmFyeS5nZXRJZEZyb21VcmwoYmluYXJ5VXJsKTtcbiAgICBpZiAoIWJpbmFyeUlkKSB7XG4gICAgICByZXR1cm4gb2YoYmluYXJ5VXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHRoaXMuaW52ZW50b3J5LmRldGFpbChiaW5hcnlJZCkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpKS5waXBlKFxuICAgICAgbWFwKG1vID0+IG1vLm5hbWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gaW52ZW50b3J5IHF1ZXJ5IG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBmaW5kXG4gICAqIHJlcG9zaXRvcnkgZW50cmllcyBvZiBzcGVjaWZpZWQgdHlwZSBtYXRjaGluZyB0aGUgdHlwZSBvZiBwcm92aWRlZCBkZXZpY2UuXG4gICAqIEBwYXJhbSByZXBvc2l0b3J5VHlwZSBUaGUgdHlwZSBvZiByZXBvc2l0b3J5IGVudHJpZXMgd2hpY2ggd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICovXG5cbiAgZ2V0RGV2aWNlVHlwZVF1ZXJ5KHJlcG9zaXRvcnlUeXBlOiBSZXBvc2l0b3J5VHlwZSwgZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IG9iamVjdCB7XG4gICAgbGV0IHJlc3VsdCA9IHsgdHlwZTogcmVwb3NpdG9yeVR5cGUgfTtcbiAgICBpZiAocmVwb3NpdG9yeVR5cGUgPT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgIGlmIChkZXZpY2UudHlwZSkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihyZXN1bHQsIHtcbiAgICAgICAgICBfX29yOiBbeyBkZXZpY2VUeXBlOiBkZXZpY2UudHlwZSB9LCB7IF9fbm90OiB7IF9faGFzOiBgZGV2aWNlVHlwZWAgfSB9XVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocmVzdWx0LCB7XG4gICAgICAgIF9fb3I6IFtcbiAgICAgICAgICB7ICdjOHlfRmlsdGVyLnR5cGUnOiBkZXZpY2UudHlwZSB9LFxuICAgICAgICAgIHsgJ2M4eV9GaWx0ZXIudHlwZSc6ICcnIH0sXG4gICAgICAgICAgeyBfX25vdDogeyBfX2hhczogYGM4eV9GaWx0ZXIudHlwZWAgfSB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIGludmVudG9yeSBxdWVyeSBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZmluZFxuICAgKiByZXBvc2l0b3J5IGVudHJpZXMgbWF0Y2hpbmcgdGhlIHByZWRlZmluZWQgc29mdHdhcmUgdHlwZXMgcHJvdmlkZWQgaW4gdGhlIGRldmljZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byB3aGljaCB0aGUgc29mdHdhcmUgdHlwZXMgZmlsdGVycyB3aWxsIGJlIGF0dGFjaGVkLiBEZWZhdWx0IHZhbHVlIGlzIGFuIG9iamVjdCBjb250YWluZyByZXBvc2l0b3J5IHR5cGUgc29mdHdhcmUuXG4gICAqL1xuICBnZXRTb2Z0d2FyZVR5cGVRdWVyeShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBxdWVyeT86IG9iamVjdCk6IG9iamVjdCB7XG4gICAgbGV0IHJlc3VsdCA9IHsgLi4uKHF1ZXJ5IHx8IHt9KSwgdHlwZTogUmVwb3NpdG9yeVR5cGUuU09GVFdBUkUgfTtcblxuICAgIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZFNvZnR3YXJlVHlwZXMpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHJlc3VsdCwge1xuICAgICAgICBfX29yOiBbZGV2aWNlLmM4eV9TdXBwb3J0ZWRTb2Z0d2FyZVR5cGVzLm1hcCh0eXBlID0+ICh7IHNvZnR3YXJlVHlwZTogdHlwZSB9KSldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBpbnZlbnRvcnkgcXVlcnkgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZpbmQgY29uZmlndXJhdGlvbiByZXBvc2l0b3J5IGVudHJpZXNcbiAgICogbWF0Y2hpbmcgdGhlIHR5cGUgb2YgcHJvdmlkZWQgZGV2aWNlIGFuZCBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG1hdGNoaW5nIHJlcG9zaXRvcnkgZW50cmllcyB3aWxsIGJlIHF1ZXJpZWQgd2l0aCB0aGUgZ2VuZXJhdGVkIHF1ZXJ5LlxuICAgKiBAcGFyYW0gY29uZmlndXJhdGlvblR5cGUgQ29uZmlndXJhdGlvbiB0eXBlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICovXG4gIGdldENvbmZpZ3VyYXRpb25UeXBlUXVlcnkoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCwgY29uZmlndXJhdGlvblR5cGU6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldERldmljZVR5cGVRdWVyeShSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OLCBkZXZpY2UpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihxdWVyeSwge1xuICAgICAgX19vcjogW1xuICAgICAgICB7IGNvbmZpZ3VyYXRpb25UeXBlIH0sXG4gICAgICAgIHsgY29uZmlndXJhdGlvblR5cGU6ICcnIH0sXG4gICAgICAgIHsgX19ub3Q6IHsgX19oYXM6IGBjb25maWd1cmF0aW9uVHlwZWAgfSB9XG4gICAgICBdXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBzb2Z0d2FyZSBpbnN0YWxsZWQgaW4gdGhlIGRldmljZSBpbiB0aGUgdW5pZm9ybSBmb3JtYXQuXG4gICAqIFN1cHBvcnRzIGM4eV9Tb2Z0d2FyZUxpc3QgYW5kIGM4eV9Tb2Z0d2FyZSBmcmFnbWVudHMuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSB3aG9zZSBzb2Z0d2FyZSBsaXN0IHNob3VsZCBiZSByZXR1cm5lZC5cbiAgICovXG4gIGdldERldmljZVNvZnR3YXJlTGlzdChkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogRGV2aWNlU29mdHdhcmVbXSB7XG4gICAgaWYgKGRldmljZS5jOHlfU29mdHdhcmVMaXN0KSB7XG4gICAgICByZXR1cm4gY2xvbmVEZWVwKGRldmljZS5jOHlfU29mdHdhcmVMaXN0KTtcbiAgICB9XG4gICAgaWYgKGRldmljZS5jOHlfU29mdHdhcmUpIHtcbiAgICAgIHJldHVybiBfbWFwKGRldmljZS5jOHlfU29mdHdhcmUsICh2ZXJzaW9uLCBuYW1lKSA9PiAoeyBuYW1lLCB2ZXJzaW9uIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgc29mdHdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlIGFuZCB0aGUgbGlzdCBvZiBjaGFuZ2VzLCBhbmQgc2VuZHMgaXQgdG8gdGhlIGRldmljZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIHdoaWNoIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciBhbmQgc2VudCB0by5cbiAgICogQHBhcmFtIGNoYW5nZXMgVGhlIGxpc3Qgb2Ygc29mdHdhcmUgY2hhbmdlcyB3aGljaCBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBhd2FpdCB0aGlzLmdldFNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZSwgY2hhbmdlcyk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLm9wZXJhdGlvbi5jcmVhdGUob3BlcmF0aW9uKSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIHNvZnR3YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY2hhbmdlcy5cbiAgICogUmV0dXJuZWQgb3BlcmF0aW9uIHR5cGUgZGVwZW5kcyBvbiBkZXZpY2UncyBzdXBwb3J0ZWQgb3BlcmF0aW9ucy5cbiAgICogU3VwcG9ydHMgYzh5X1NvZnR3YXJlVXBkYXRlLCBjOHlfU29mdHdhcmVMaXN0LCBhbmQgYzh5X1NvZnR3YXJlIG9wZXJhdGlvbnMuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZC5cbiAgICogQHBhcmFtIGNoYW5nZXMgVGhlIGxpc3Qgb2Ygc29mdHdhcmUgY2hhbmdlcyB3aGljaCBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIGFzeW5jIGdldFNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb246IElPcGVyYXRpb24gPSB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBBcHBseSBzb2Z0d2FyZSBjaGFuZ2VzOiAke2NoYW5nZXNcbiAgICAgICAgLm1hcChcbiAgICAgICAgICBjaGFuZ2UgPT5cbiAgICAgICAgICAgIGAke2NoYW5nZS5hY3Rpb259IFwiJHtjaGFuZ2UubmFtZX1cIiR7XG4gICAgICAgICAgICAgIGNoYW5nZS52ZXJzaW9uID8gYCAodmVyc2lvbjogJHtjaGFuZ2UudmVyc2lvbn0pYCA6ICcnXG4gICAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICAgIC5qb2luKCcsICcpfWBcbiAgICB9O1xuICAgIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMuaW5jbHVkZXMoJ2M4eV9Tb2Z0d2FyZVVwZGF0ZScpKSB7XG4gICAgICBvcGVyYXRpb24uYzh5X1NvZnR3YXJlVXBkYXRlID0gKGNsb25lRGVlcChjaGFuZ2VzKSB8fCBbXSkubWFwKGNoYW5nZSA9PlxuICAgICAgICBvbWl0QnkoY2hhbmdlLCBpc05pbClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMuaW5jbHVkZXMoJ2M4eV9Tb2Z0d2FyZUxpc3QnKSkge1xuICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QgPSBjbG9uZURlZXAoXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VycmVudFNvZnR3YXJlKGRldmljZSwgJ2M4eV9Tb2Z0d2FyZUxpc3QnLCBbXSlcbiAgICAgICk7XG4gICAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgICAgY29uc3QgZGV2aWNlU29mdHdhcmU6IERldmljZVNvZnR3YXJlID0gcGljayhvbWl0QnkoY2hhbmdlLCBpc05pbCksIFtcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgJ3ZlcnNpb24nLFxuICAgICAgICAgICd1cmwnLFxuICAgICAgICAgICdzb2Z0d2FyZVR5cGUnXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICByZW1vdmUob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QsIGRldmljZVNvZnR3YXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICAgICAgY29uc3Qgc29mdHdhcmVJdGVtVG9VcGRhdGVJZHggPSBvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0ubmFtZSA9PT0gY2hhbmdlLm5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChzb2Z0d2FyZUl0ZW1Ub1VwZGF0ZUlkeCA+IC0xKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc29mdHdhcmVcbiAgICAgICAgICAgIG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LnNwbGljZShzb2Z0d2FyZUl0ZW1Ub1VwZGF0ZUlkeCwgMSwgZGV2aWNlU29mdHdhcmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbnN0YWxsIHNvZnR3YXJlXG4gICAgICAgICAgICBvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdC5wdXNoKGRldmljZVNvZnR3YXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZGV2aWNlLmM4eV9TdXBwb3J0ZWRPcGVyYXRpb25zLmluY2x1ZGVzKCdjOHlfU29mdHdhcmUnKSkge1xuICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSA9IGNsb25lRGVlcChhd2FpdCB0aGlzLmdldEN1cnJlbnRTb2Z0d2FyZShkZXZpY2UsICdjOHlfU29mdHdhcmUnLCB7fSkpO1xuICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2UuYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIGRlbGV0ZSBvcGVyYXRpb24uYzh5X1NvZnR3YXJlW2NoYW5nZS5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZVtjaGFuZ2UubmFtZV0gPSBjaGFuZ2UudmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGxpc3Qgb2YgZGV2aWNlIHNvZnR3YXJlIGNoYW5nZXMgZnJvbSBnaXZlbiBvcGVyYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgZ2l2ZW4gZGV2aWNlLlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gZnJvbSB3aGljaCB0aGUgbGlzdCBzaG91bGQgYmUgZXh0cmFjdGVkLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSB0YXJnZXQgZGV2aWNlIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICBhc3luYyBnZXREZXZpY2VTb2Z0d2FyZUNoYW5nZXNGcm9tT3BlcmF0aW9uKFxuICAgIG9wZXJhdGlvbjogSU9wZXJhdGlvbixcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0XG4gICk6IFByb21pc2U8RGV2aWNlU29mdHdhcmVDaGFuZ2VbXT4ge1xuICAgIGlmIChvcGVyYXRpb24uYzh5X1NvZnR3YXJlVXBkYXRlKSB7XG4gICAgICByZXR1cm4gY2xvbmVEZWVwKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVVcGRhdGUpO1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERldmljZVNvZnR3YXJlQ2hhbmdlc0Zyb21Tb2Z0d2FyZUxpc3RPcGVyYXRpb24ob3BlcmF0aW9uLCBkZXZpY2UpO1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlU29mdHdhcmVDaGFuZ2VzRnJvbVNvZnR3YXJlT3BlcmF0aW9uKG9wZXJhdGlvbiwgZGV2aWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgZmlybXdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlIGFuZCB0aGUgc2VsZWN0ZWQgcmVwb3NpdG9yeSBiaW5hcnksIGFuZCBzZW5kcyBpdCB0byB0aGUgZGV2aWNlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2Ugd2hpY2ggdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIGFuZCBzZW50IHRvLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRPcHRpb24gVGhlIHNlbGVjdGVkIHJlcG9zaXRvcnkgYmluYXJ5IG9wdGlvbi5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgc2VsZWN0ZWRPcHRpb246IFNlbGVjdGVkUmVwb3NpdG9yeUJpbmFyeVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLmdldEZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZSwgc2VsZWN0ZWRPcHRpb24pO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5vcGVyYXRpb24uY3JlYXRlKG9wZXJhdGlvbikpLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBmaXJtd2FyZSB1cGRhdGUgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UgYW5kIHNlbGVjdGVkIHZlcnNpb24uXG4gICAqIFN1cHBvcnRzIGM4eV9GaXJtd2FyZSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZC5cbiAgICogQHBhcmFtIHNlbGVjdGVkT3B0aW9uIFNlbGVjdGVkIGZpcm13YXJlIHZlcnNpb24uXG4gICAqL1xuICBnZXRGaXJtd2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RlZFJlcG9zaXRvcnlCaW5hcnlcbiAgKTogSU9wZXJhdGlvbiB7XG4gICAgZGVsZXRlIHNlbGVjdGVkT3B0aW9uLmlkO1xuXG4gICAgY29uc3Qgb3BlcmF0aW9uOiBJT3BlcmF0aW9uID0ge1xuICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgVXBkYXRlIGZpcm13YXJlIHRvOiBcIiR7c2VsZWN0ZWRPcHRpb24ubmFtZX1cIiR7XG4gICAgICAgIHNlbGVjdGVkT3B0aW9uLnZlcnNpb24gPyBgICh2ZXJzaW9uOiAke3NlbGVjdGVkT3B0aW9uLnZlcnNpb259KWAgOiAnJ1xuICAgICAgfWAsXG4gICAgICBjOHlfRmlybXdhcmU6IHsgLi4uc2VsZWN0ZWRPcHRpb24gfVxuICAgIH07XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgY29uZmlndXJhdGlvbiBmaWxlIHVwbG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBpc0xlZ2FjeSAgQSBsZWdhY3kgb3BlcmF0aW9uIGlzIGNyZWF0ZWQgd2l0aG91dCBhIGNvbmZpZ3VyYXRpb25UeXBlLlxuICAgKi9cbiAgZ2V0VXBsb2FkQ29uZmlndXJhdGlvbkZpbGVPcGVyYXRpb24oXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBjb25maWd1cmF0aW9uVHlwZTogc3RyaW5nLFxuICAgIGlzTGVnYWN5ID0gZmFsc2VcbiAgKTogSU9wZXJhdGlvbiB7XG4gICAgaWYgKGlzTGVnYWN5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFJldHJpZXZlIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgZnJvbSBkZXZpY2UgJHtkZXZpY2UubmFtZX1gLFxuICAgICAgICBjOHlfVXBsb2FkQ29uZmlnRmlsZToge31cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBSZXRyaWV2ZSAke2NvbmZpZ3VyYXRpb25UeXBlfSBjb25maWd1cmF0aW9uIHNuYXBzaG90IGZyb20gZGV2aWNlICR7ZGV2aWNlLm5hbWV9YCxcbiAgICAgIGM4eV9VcGxvYWRDb25maWdGaWxlOiB7XG4gICAgICAgIHR5cGU6IGNvbmZpZ3VyYXRpb25UeXBlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSBkb3dubG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBiaW5hcnlVcmwgVGhlIHVybCBvZiBhIGJpbmFyeSB0byBiZSBkb3dubG9hZGVkLlxuICAgKiBAcGFyYW0gaXNMZWdhY3kgQSBsZWdhY3kgb3BlcmF0aW9uIGlzIGNyZWF0ZWQgd2l0aG91dCBhIGNvbmZpZ3VyYXRpb25UeXBlLlxuICAgKi9cbiAgZ2V0RG93bmxvYWRDb25maWd1cmF0aW9uRmlsZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNvbmZpZ3VyYXRpb25UeXBlOiBzdHJpbmcsXG4gICAgY29uZmlnU25hcHNob3Q6IENvbmZpZ3VyYXRpb25TbmFwc2hvdCxcbiAgICBpc0xlZ2FjeSA9IGZhbHNlXG4gICk6IElPcGVyYXRpb24ge1xuICAgIGlmIChpc0xlZ2FjeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBTZW5kIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgJHtjb25maWdTbmFwc2hvdC5uYW1lfSB0byBkZXZpY2UgJHtkZXZpY2UubmFtZX1gLFxuICAgICAgICBjOHlfRG93bmxvYWRDb25maWdGaWxlOiB7XG4gICAgICAgICAgdXJsOiBjb25maWdTbmFwc2hvdC5iaW5hcnlVcmwsXG4gICAgICAgICAgYzh5X0NvbmZpZ3VyYXRpb25EdW1wOiB7XG4gICAgICAgICAgICBpZDogY29uZmlnU25hcHNob3QuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBTZW5kIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgJHtjb25maWdTbmFwc2hvdC5uYW1lfSBvZiBjb25maWd1cmF0aW9uIHR5cGUgJHtjb25maWd1cmF0aW9uVHlwZX0gdG8gZGV2aWNlICR7ZGV2aWNlLm5hbWV9YCxcbiAgICAgIGM4eV9Eb3dubG9hZENvbmZpZ0ZpbGU6IHtcbiAgICAgICAgdXJsOiBjb25maWdTbmFwc2hvdC5iaW5hcnlVcmwsXG4gICAgICAgIHR5cGU6IGNvbmZpZ3VyYXRpb25UeXBlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXN0IGZpcm13YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZS5cbiAgICogTG9va3MgZm9yIGM4eV9GaXJtd2FyZSBvcGVyYXRpb25zLlxuICAgKiBAcGFyYW0gZGV2aWNlSWQgVGhlIElEIG9mIHRoZSBkZXZpY2UgdG8gZmluZCBhbiBvcGVyYXRpb24gZm9yLlxuICAgKi9cbiAgYXN5bmMgZ2V0TGFzdEZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgZGV2aWNlSWQsXG4gICAgICBkYXRlRnJvbTogbmV3IERhdGUoMCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRhdGVUbzogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIHJldmVydDogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdE1hdGNoaW5nT3BlcmF0aW9uKFt7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9GaXJtd2FyZScgfV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhc3Qgc29mdHdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlLlxuICAgKiBMb29rcyBmb3IgYzh5X1NvZnR3YXJlVXBkYXRlLCBjOHlfU29mdHdhcmVMaXN0LCBvciBjOHlfU29mdHdhcmUgb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIGRldmljZUlkIFRoZSBJRCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQgYW4gb3BlcmF0aW9uIGZvci5cbiAgICovXG4gIGFzeW5jIGdldExhc3RTb2Z0d2FyZVVwZGF0ZU9wZXJhdGlvbihkZXZpY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxJT3BlcmF0aW9uPiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIGRldmljZUlkLFxuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICByZXZlcnQ6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0TWF0Y2hpbmdPcGVyYXRpb24oW1xuICAgICAgeyAuLi5maWx0ZXJzLCBmcmFnbWVudFR5cGU6ICdjOHlfU29mdHdhcmVVcGRhdGUnIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9Tb2Z0d2FyZUxpc3QnIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9Tb2Z0d2FyZScgfVxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgdGhlIGxpc3Qgb2YgZmlsdGVycyBhbmQgcXVlcmllcyB0aGUgb3BlcmF0aW9ucy5cbiAgICogSWYgYSBxdWVyeSByZXR1cm5zIGF0IGxlYXN0IG9uZSBvcGVyYXRpb24sIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogT3RoZXJ3aXNlIHRoZSBuZXh0IHF1ZXJ5IHdpbGwgYmUgcGVyZm9ybWVkLlxuICAgKiBJZiBub25lIG9mIHRoZSBxdWVyaWVzIHJldHVybnMgYW55IG9wZXJhdGlvbiwgbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gZmlsdGVyc0xpc3QgVGhlIGxpc3Qgb2YgZmlsdGVycyBmb3IgdGhlIHF1ZXJpZXMuXG4gICAqL1xuICBhc3luYyBnZXRGaXJzdE1hdGNoaW5nT3BlcmF0aW9uKGZpbHRlcnNMaXN0OiBhbnlbXSk6IFByb21pc2U8SU9wZXJhdGlvbj4ge1xuICAgIGxldCBtYXRjaGluZ09wZXJhdGlvbiA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlcnMgb2YgZmlsdGVyc0xpc3QpIHtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbnMgPSAoYXdhaXQgdGhpcy5vcGVyYXRpb24ubGlzdChmaWx0ZXJzKSkuZGF0YTtcbiAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBtYXRjaGluZ09wZXJhdGlvbiA9IG9wZXJhdGlvbnNbMF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGluZ09wZXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIHRoZSBsaXN0IG9mIGZpbHRlcnMgYW5kIHF1ZXJpZXMgdGhlIG9wZXJhdGlvbnMuXG4gICAqIEl0IGNvbXBhcmVzIHRoZSBvcGVyYXRpb25zIHJldHJpZXZlZCBieSB0aGUgcXVlcmllcyBieSAnY3JlYXRpb25UaW1lJ1xuICAgKiBhbmQgcmV0dXJuIHRoZSBsYXRlc3Qgb25lLlxuICAgKiBJZiBub25lIG9mIHRoZSBxdWVyaWVzIHJldHVybnMgYW55IG9wZXJhdGlvbiwgbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gZmlsdGVyc0xpc3QgVGhlIGxpc3Qgb2YgZmlsdGVycyBmb3IgdGhlIHF1ZXJpZXMuXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RNYXRjaGluZ09wZXJhdGlvbihmaWx0ZXJzTGlzdDogYW55W10pOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBsZXQgbWF0Y2hpbmdPcGVyYXRpb246IElPcGVyYXRpb24gPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXJzIG9mIGZpbHRlcnNMaXN0KSB7XG4gICAgICBjb25zdCBvcGVyYXRpb25zOiBJT3BlcmF0aW9uW10gPSAoYXdhaXQgdGhpcy5vcGVyYXRpb24ubGlzdChmaWx0ZXJzKSkuZGF0YTtcbiAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgICBtYXRjaGluZ09wZXJhdGlvbiA9XG4gICAgICAgICAgICBuZXcgRGF0ZShtYXRjaGluZ09wZXJhdGlvbi5jcmVhdGlvblRpbWUpLmdldFRpbWUoKSA8XG4gICAgICAgICAgICBuZXcgRGF0ZShvcGVyYXRpb25zWzBdLmNyZWF0aW9uVGltZSkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgID8gb3BlcmF0aW9uc1swXVxuICAgICAgICAgICAgICA6IG1hdGNoaW5nT3BlcmF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdGNoaW5nT3BlcmF0aW9uID0gb3BlcmF0aW9uc1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGluZ09wZXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBvcGVyYXRpb24gYW5kIHJldHVybnMgYW4gb2JzZXJ2YWJsZSB0byB0cmFjayBpdHMgcHJvZ3Jlc3MuXG4gICAqIEZhaWxzIHRoZSBvYnNlcnZhYmxlIHdoZW4gdGhlIG9wZXJhdGlvbiByZXR1cm5zIEZBSUxFRCBzdGF0dXMuXG4gICAqIENvbXBsZXRlcyB0aGUgb2JzZXJ2YWJsZSB3aGVuIHRoZSBvcGVyYXRpb24gcmV0dXJucyBTVUNDRVNTRlVMIHN0YXR1cy5cbiAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIGNyZWF0ZSBhbmQgdHJhY2suXG4gICAqL1xuICBjcmVhdGVPYnNlcnZlZE9wZXJhdGlvbihvcGVyYXRpb246IElPcGVyYXRpb24pOiBPYnNlcnZhYmxlPElPcGVyYXRpb24+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLm9wZXJhdGlvbi5jcmVhdGUob3BlcmF0aW9uKSkucGlwZShcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcChjcmVhdGVkT3BlcmF0aW9uID0+IHRoaXMub2JzZXJ2ZU9wZXJhdGlvbihjcmVhdGVkT3BlcmF0aW9uKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSB0byB0cmFjayBwcm9ncmVzcyBvZiBnaXZlbiBvcGVyYXRpb24uXG4gICAqIEZhaWxzIHRoZSBvYnNlcnZhYmxlIHdoZW4gdGhlIG9wZXJhdGlvbiByZXR1cm5zIEZBSUxFRCBzdGF0dXMuXG4gICAqIENvbXBsZXRlcyB0aGUgb2JzZXJ2YWJsZSB3aGVuIHRoZSBvcGVyYXRpb24gcmV0dXJucyBTVUNDRVNTRlVMIHN0YXR1cy5cbiAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIGJlIG9ic2VydmVkLlxuICAgKi9cbiAgb2JzZXJ2ZU9wZXJhdGlvbihvcGVyYXRpb246IElPcGVyYXRpb24pOiBPYnNlcnZhYmxlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvYnNlcnZlZE9wZXJhdGlvbiQgPSBvZihvcGVyYXRpb24pO1xuICAgIGNvbnN0IG9wZXJhdGlvblVwZGF0ZXMkID0gb2JzZXJ2ZWRPcGVyYXRpb24kLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAob2JzZXJ2ZWRPcGVyYXRpb24gPT4gdGhpcy5vcGVyYXRpb25SZWFsdGltZS5vbkFsbCQob2JzZXJ2ZWRPcGVyYXRpb24uZGV2aWNlSWQpKSxcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEgYXMgSU9wZXJhdGlvbiksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShvYnNlcnZlZE9wZXJhdGlvbiQpLFxuICAgICAgZmlsdGVyKChbb3BlcmF0aW9uVXBkYXRlLCBvYnNlcnZlZE9wZXJhdGlvbl0pID0+IG9wZXJhdGlvblVwZGF0ZS5pZCA9PT0gb2JzZXJ2ZWRPcGVyYXRpb24uaWQpLFxuICAgICAgc3dpdGNoTWFwKChbb3BlcmF0aW9uVXBkYXRlXSkgPT4ge1xuICAgICAgICBpZiAob3BlcmF0aW9uVXBkYXRlLnN0YXR1cyA9PT0gT3BlcmF0aW9uU3RhdHVzLkZBSUxFRCkge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKG9wZXJhdGlvblVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG9wZXJhdGlvblVwZGF0ZSk7XG4gICAgICB9KSxcbiAgICAgIHRha2VXaGlsZShvcGVyYXRpb25VcGRhdGUgPT4gb3BlcmF0aW9uVXBkYXRlLnN0YXR1cyAhPT0gT3BlcmF0aW9uU3RhdHVzLlNVQ0NFU1NGVUwsIHRydWUpXG4gICAgKTtcbiAgICByZXR1cm4gbWVyZ2Uob2JzZXJ2ZWRPcGVyYXRpb24kLCBvcGVyYXRpb25VcGRhdGVzJCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHNpbmdsZSBldmVudCB3aXRoIGxhdGVzdCBjcmVhdGlvblRpbWUgZm9yIHRoZSBnaXZlbiBkZXZpY2UgSWQgYW5kIGV2ZW50IHR5cGUuXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgZGV2aWNlIElkIGZvciB3aGljaCB0aGUgZXZlbnRzIHNob3VsZCBiZSBxdWVyaWVkLlxuICAgKiBAcGFyYW0gdHlwZSBFdmVudCB0eXBlLlxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0Q29uZmlndXJhdGlvbkV2ZW50KFxuICAgIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgdHlwZTogc3RyaW5nXG4gICk6IFByb21pc2U8SUV2ZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXZlbnRGaWx0ZXI6IG9iamVjdCA9IHtcbiAgICAgIHNvdXJjZTogZGV2aWNlSWQsXG4gICAgICB0eXBlLFxuICAgICAgZGF0ZUZyb206IHRoaXMuZGF0ZUZyb20udG9JU09TdHJpbmcoKSxcbiAgICAgIGRhdGVUbzogdGhpcy5kYXRlVG8udG9JU09TdHJpbmcoKSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5ldmVudC5saXN0KGV2ZW50RmlsdGVyKTtcbiAgICByZXR1cm4gZGF0YVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbGlzdCBvZiBvcGVyYXRpb25zIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIElkLCBhbmQgb3BlcmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgZGV2aWNlIElkIGZvciB3aGljaCB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBxdWVyaWVkLlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uVHlwZSBPcGVyYXRpb24gdHlwZSBmcmFnbWVudC5cbiAgICovXG4gIGFzeW5jIGdldENvbmZpZ0ZpbGVPcGVyYXRpb25MaXN0KFxuICAgIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgb3BlcmF0aW9uVHlwZTogc3RyaW5nXG4gICk6IFByb21pc2U8SU9wZXJhdGlvbltdPiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uRmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBkZXZpY2VJZCxcbiAgICAgIGZyYWdtZW50VHlwZTogb3BlcmF0aW9uVHlwZSxcbiAgICAgIGRhdGVGcm9tOiB0aGlzLmRhdGVGcm9tLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IHRoaXMuZGF0ZVRvLnRvSVNPU3RyaW5nKCksXG4gICAgICByZXZlcnQ6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH07XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMub3BlcmF0aW9uLmxpc3Qob3BlcmF0aW9uRmlsdGVyKSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGxhdGVzdCB1cGxvYWRlZCBjb25maWd1cmF0aW9uIHNuYXBzaG90IGZvciB0aGUgZ2l2ZW4gZGV2aWNlLCBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIHNuYXBzaG90IHdhcyB1cGxvYWRlZC5cbiAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb25UeXBlIFNlbGVjdGVkIGNvbmZpZ3VyYXRpb24gdHlwZS5cbiAgICovXG4gIGFzeW5jIGdldENvbmZpZ1NuYXBzaG90KFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY29uZmlndXJhdGlvblR5cGU6IHN0cmluZ1xuICApOiBQcm9taXNlPENvbmZpZ3VyYXRpb25TbmFwc2hvdCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGV2ZW50OiBJRXZlbnQgPSBhd2FpdCB0aGlzLmdldExhdGVzdENvbmZpZ3VyYXRpb25FdmVudChkZXZpY2UuaWQsIGNvbmZpZ3VyYXRpb25UeXBlKTtcbiAgICBsZXQgY29uZmlnU25hcHNob3Q6IENvbmZpZ3VyYXRpb25TbmFwc2hvdDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbmZpZ1NuYXBzaG90ID0ge1xuICAgICAgICB0aW1lOiBldmVudC50aW1lLFxuICAgICAgICBuYW1lOiBldmVudC50ZXh0LFxuICAgICAgICBkZXZpY2VUeXBlOiBkZXZpY2UudHlwZSxcbiAgICAgICAgY29uZmlndXJhdGlvblR5cGVcbiAgICAgIH07XG4gICAgICB0cnkge1xuICAgICAgICBjb25maWdTbmFwc2hvdC5iaW5hcnkgPSBhd2FpdCAoYXdhaXQgdGhpcy5ldmVudEJpbmFyeS5kb3dubG9hZChldmVudCkpLnRleHQoKTtcbiAgICAgICAgaWYgKGV2ZW50LmM4eV9Jc0JpbmFyeSkge1xuICAgICAgICAgIGNvbmZpZ1NuYXBzaG90LmJpbmFyeVR5cGUgPSBldmVudC5jOHlfSXNCaW5hcnkudHlwZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnQ291bGQgbm90IGdldCB0aGUgYmluYXJ5LicpO1xuICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU25hcHNob3Q7XG4gIH1cblxuICBhc3luYyBnZXRMZWdhY3lDb25maWdTbmFwc2hvdChkZXZpY2VJZCkge1xuICAgIGxldCBjb25maWdTbmFwc2hvdDogQ29uZmlndXJhdGlvblNuYXBzaG90O1xuICAgIGxldCBtbztcbiAgICBjb25zdCBkZXZpY2UgPSAoYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRldmljZUlkLCB7IHdpdGhDaGlsZHJlbjogZmFsc2UgfSkpLmRhdGE7XG4gICAgY29uc3Qgc25hcHNob3RJZCA9IGRldmljZS5jOHlfQ29uZmlndXJhdGlvbkR1bXAgJiYgZGV2aWNlLmM4eV9Db25maWd1cmF0aW9uRHVtcC5pZDtcbiAgICBpZiAoIXNuYXBzaG90SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbW8gPSAoYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKHNuYXBzaG90SWQpKS5kYXRhO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIGlmIChtbykge1xuICAgICAgY29uZmlnU25hcHNob3QgPSB7XG4gICAgICAgIHRpbWU6IG1vLmNyZWF0aW9uVGltZSxcbiAgICAgICAgbmFtZTogbW8ubmFtZVxuICAgICAgfTtcbiAgICAgIGNvbmZpZ1NuYXBzaG90LmJpbmFyeSA9IGF3YWl0IHRoaXMuZ2V0QmluYXJ5VGV4dChtby51cmwsIHsgYWxsb3dFeHRlcm5hbDogZmFsc2UgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWdTbmFwc2hvdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYmluYXJ5IG9iamVjdCBhcyB0ZXh0LlxuICAgKiBAcGFyYW0gYmluYXJ5VXJsIFRoZSBVUkwgdG8gZmluZCBiaW5hcnlcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICogLSAqKmFsbG93RXh0ZXJuYWwqKiAtIGBib29sZWFuYCAtIGFsbG93cyBkb3dubG9hZGluZyBleHRlcm5hbCBiaW5hcnkgZmlsZVxuICAgKiAtICoqbm9BbGVydHMqKiAtIGBib29sZWFuYCAtIGRvIG5vdCBkaXNwbGF5IGFuIGFsZXJ0IG1lc3NhZ2U7IGRlZmF1bHRzIHRvIGBmYWxzZWBcbiAgICovXG4gIGFzeW5jIGdldEJpbmFyeVRleHQoXG4gICAgYmluYXJ5VXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBhbGxvd0V4dGVybmFsOiBib29sZWFuOyBub0FsZXJ0cz86IGJvb2xlYW4gfVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJpbmFyeUlkID0gdGhpcy5pbnZlbnRvcnlCaW5hcnkuZ2V0SWRGcm9tVXJsKGJpbmFyeVVybCk7XG4gICAgbGV0IHJlcztcbiAgICBpZiAoIWJpbmFyeUlkKSB7XG4gICAgICBpZiAob3B0aW9ucy5hbGxvd0V4dGVybmFsKSB7XG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMuZ2V0RXh0ZXJuYWxCaW5hcnlSZXNwb25zZShiaW5hcnlVcmwsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmdldEludGVybmFsQmluYXJ5UmVzcG9uc2UoYmluYXJ5SWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiByZXMudGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBiaW5hcnkgb2JqZWN0IGFzIEZpbGUuXG4gICAqIEBwYXJhbSBiaW5hcnlVcmwgVGhlIFVSTCB0byBmaW5kIGJpbmFyeVxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb2JqZWN0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zOlxuICAgKiAtICoqYWxsb3dFeHRlcm5hbCoqIC0gYGJvb2xlYW5gIC0gYWxsb3dzIGRvd25sb2FkaW5nIGV4dGVybmFsIGJpbmFyeSBmaWxlXG4gICAqL1xuICBhc3luYyBnZXRCaW5hcnlGaWxlKGJpbmFyeVVybDogc3RyaW5nLCBvcHRpb25zOiB7IGFsbG93RXh0ZXJuYWw6IGJvb2xlYW4gfSk6IFByb21pc2U8RmlsZT4ge1xuICAgIGNvbnN0IGJpbmFyeUlkID0gdGhpcy5pbnZlbnRvcnlCaW5hcnkuZ2V0SWRGcm9tVXJsKGJpbmFyeVVybCk7XG4gICAgaWYgKCFiaW5hcnlJZCAmJiAhb3B0aW9ucy5hbGxvd0V4dGVybmFsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gQFRPRE86IG5vdGUgdGhhdCBpdCBkb2Vzbid0IHNvbHZlIGlzc3VlIHdpdGggZXh0ZXJuYWwgYmluYXJ5IGhlcmUsIHN1Y2ggdXJsIHdvbid0IGhhdmUgYmluYXJ5SWQsIHNvIHdlIHdvbid0IGtub3cgdGhlIG5hbWUgb3IgY29udGVudFR5cGUgdG8gdXNlIGluIEZpbGUgY29uc3RydWN0b3IsIGxldCdzIGFkZCBhIEBGSVhNRSBjb21tZW50IGZvciBub3c/XG4gICAgY29uc3QgeyBuYW1lLCBjb250ZW50VHlwZSB9ID0gKGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChiaW5hcnlJZCkpLmRhdGE7XG4gICAgY29uc3QgcmVzID0gISFiaW5hcnlJZFxuICAgICAgPyBhd2FpdCB0aGlzLmdldEludGVybmFsQmluYXJ5UmVzcG9uc2UoYmluYXJ5SWQpXG4gICAgICA6IGF3YWl0IHRoaXMuZ2V0RXh0ZXJuYWxCaW5hcnlSZXNwb25zZShiaW5hcnlVcmwpO1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKCk7XG4gICAgcmV0dXJuIG5ldyBGaWxlKFthcnJheUJ1ZmZlcl0sIG5hbWUsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFzdCBjb25maWd1cmF0aW9uIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZS5cbiAgICogTG9va3MgZm9yIGM4eV9Db25maWd1cmF0aW9uIGFuZCBjOHlfU2VuZENvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIGRldmljZUlkIFRoZSBJRCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQgYW4gb3BlcmF0aW9uIGZvci5cbiAgICovXG4gIGFzeW5jIGdldExhc3RDb25maWdVcGRhdGVPcGVyYXRpb24oZGV2aWNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8SU9wZXJhdGlvbj4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBkZXZpY2VJZCxcbiAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0lTT1N0cmluZygpLFxuICAgICAgcmV2ZXJ0OiB0cnVlLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldExhdGVzdE1hdGNoaW5nT3BlcmF0aW9uKFtcbiAgICAgIHsgLi4uZmlsdGVycywgZnJhZ21lbnRUeXBlOiAnYzh5X0NvbmZpZ3VyYXRpb24nIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9TZW5kQ29uZmlndXJhdGlvbicgfVxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgY29uZmlndXJhdGlvbiBkb3dubG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgaXRzIGN1cnJlbnQgY29uZmlndXJhdGlvbi5cbiAgICogU3VwcG9ydHMgYzh5X1NlbmRDb25maWd1cmF0aW9uIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKi9cbiAgY3JlYXRlVGV4dEJhc2VkQ29uZmlndXJhdGlvblJlbG9hZE9wZXJhdGlvbihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogSU9wZXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnUmVxdWVzdGVkIGN1cnJlbnQgY29uZmlndXJhdGlvbicpLFxuICAgICAgYzh5X1NlbmRDb25maWd1cmF0aW9uOiB7fVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBjb25maWd1cmF0aW9uIHVwZGF0ZSBvcGVyYXRpb24gZm9yIHRoZSBnaXZlbiBkZXZpY2UuXG4gICAqIFN1cHBvcnRzIGM4eV9Db25maWd1cmF0aW9uIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIHdoaWNoIHdpbGwgdXBkYXRlIHRoZSBleGlzdGluZyBvbmUuXG4gICAqL1xuICBjcmVhdGVUZXh0QmFzZWRDb25maWd1cmF0aW9uVXBkYXRlT3BlcmF0aW9uKGRldmljZTogSU1hbmFnZWRPYmplY3QsIGNvbmZpZzogc3RyaW5nKTogSU9wZXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnQ29uZmlndXJhdGlvbiB1cGRhdGUnKSxcbiAgICAgIGM4eV9Db25maWd1cmF0aW9uOiB7XG4gICAgICAgIGNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoYmluYXJ5SWQ6IElkUmVmZXJlbmNlKTogUHJvbWlzZTxJRmV0Y2hSZXNwb25zZT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuZG93bmxvYWQoYmluYXJ5SWQpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCBhdmFpbGFibGUgc25hcHNob3RzIGZyb20gdGhlIHJlcG9zaXRvcnkgZm9yIHRoZSBnaXZlbiBkZXZpY2UuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHNuYXBzaG90cyBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqL1xuICBhc3luYyBnZXRTbmFwc2hvdHNGcm9tUmVwb3NpdG9yeShkZXZpY2UsIGNvbmZpZ3VyYXRpb25UeXBlKSB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnkgPSB0aGlzLmdldENvbmZpZ3VyYXRpb25UeXBlUXVlcnkoZGV2aWNlLCBjb25maWd1cmF0aW9uVHlwZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTiwge1xuICAgICAgcXVlcnk6IHNlYXJjaFF1ZXJ5LFxuICAgICAgcGFyYW1zOiB7IHBhZ2VTaXplOiAxMDAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBkZXZpY2UgYWxyZWFkeSBoYXZlIGEgZ2l2ZW4gc29mdHdhcmUgaW5zdGFsbGVkXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBJZCBvZiB0aGUgZGV2aWNlIHRvIGJlIGNoZWNrZWRcbiAgICogQHBhcmFtIHNvZnR3YXJlIFRoZSBzb2Z0d2FyZSB0byBiZSBjaGVja2VkXG4gICAqL1xuICBhc3luYyBpc1NvZnR3YXJlSW5zdGFsbGVkT25EZXZpY2UoXG4gICAgZGV2aWNlSWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBzb2Z0d2FyZTogRGV2aWNlU29mdHdhcmVcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaXNBU01BdmFpbGFibGUgPSBhd2FpdCB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlPy5pc0FTTUF2YWlsYWJsZSgpO1xuICAgIGlmICghaXNBU01BdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeUZpbHRlciA9IHsgZGV2aWNlSWQgfTtcbiAgICBpZiAoc29mdHdhcmU/Lm5hbWUpIHtcbiAgICAgIHNldChxdWVyeUZpbHRlciwgJ25hbWUnLCBzb2Z0d2FyZS5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHNvZnR3YXJlPy52ZXJzaW9uKSB7XG4gICAgICBzZXQocXVlcnlGaWx0ZXIsICd2ZXJzaW9uJywgc29mdHdhcmUudmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlLmxpc3QocXVlcnlGaWx0ZXIpLnRoZW4ocmVzdWx0ID0+ICEhcmVzdWx0LmRhdGE/Lmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJpbmFyeSBvYmplY3QuXG4gICAqIEBwYXJhbSBiaW5hcnlJZCBiaW5hcnkgSURcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICogLSAqKm5vQWxlcnRzKiogLSBgYm9vbGVhbmAgLSBkbyBub3QgZGlzcGxheSBhbiBhbGVydCBtZXNzYWdlOyBkZWZhdWx0cyB0byBgZmFsc2VgXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldEludGVybmFsQmluYXJ5UmVzcG9uc2UoXG4gICAgYmluYXJ5SWQ6IElkUmVmZXJlbmNlLFxuICAgIG9wdGlvbnM6IHsgbm9BbGVydHM/OiBib29sZWFuIH0gPSB7fVxuICApOiBQcm9taXNlPElGZXRjaFJlc3BvbnNlPiB7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuZG93bmxvYWQoYmluYXJ5SWQpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoIW9wdGlvbnMubm9BbGVydHMpIHtcbiAgICAgICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnQ291bGQgbm90IGdldCB0aGUgYmluYXJ5LicpO1xuICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBiaW5hcnkgb2JqZWN0LlxuICAgKiBAcGFyYW0gYmluYXJ5VXJsIFRoZSBVUkwgdG8gZmluZCBiaW5hcnlcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICogLSAqKm5vQWxlcnRzKiogLSBgYm9vbGVhbmAgLSBkbyBub3QgZGlzcGxheSBhbiBhbGVydCBtZXNzYWdlOyBkZWZhdWx0cyB0byBgZmFsc2VgXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldEV4dGVybmFsQmluYXJ5UmVzcG9uc2UoXG4gICAgYmluYXJ5VXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBub0FsZXJ0cz86IGJvb2xlYW4gfSA9IHt9XG4gICk6IFByb21pc2U8SUZldGNoUmVzcG9uc2U+IHtcbiAgICBsZXQgcmVzO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZXRjaFJlcyA9IGF3YWl0IGZldGNoKGJpbmFyeVVybCk7XG4gICAgICBpZiAoZmV0Y2hSZXMuc3RhdHVzID49IDQwMCkge1xuICAgICAgICB0aHJvdyByZXM7XG4gICAgICB9XG4gICAgICByZXMgPSBmZXRjaFJlcztcbiAgICB9IGNhdGNoIHtcbiAgICAgIGlmICghb3B0aW9ucy5ub0FsZXJ0cykge1xuICAgICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBleHRlcm5hbCBiaW5hcnknKTtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIobXNnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QmFzZVZlcnNpb25SZXN1bHRMaXN0Rm9yTGVnYWN5RW50cnkoZW50cnkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHJlczoge30gYXMgSUZldGNoUmVzcG9uc2UsXG4gICAgICBkYXRhOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICBbZW50cnkudHlwZV06IHtcbiAgICAgICAgICAgIHZlcnNpb246IGVudHJ5LnZlcnNpb24sXG4gICAgICAgICAgICB1cmw6IGVudHJ5LnVybFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0gYXMgSVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGV2aWNlU29mdHdhcmVDaGFuZ2VzRnJvbVNvZnR3YXJlTGlzdE9wZXJhdGlvbihcbiAgICBvcGVyYXRpb246IElPcGVyYXRpb24sXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPERldmljZVNvZnR3YXJlQ2hhbmdlW10+IHtcbiAgICBjb25zdCBjaGFuZ2VzOiBEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdID0gW107XG4gICAgY29uc3QgZGV2aWNlU29mdHdhcmVMaXN0ID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50U29mdHdhcmUoZGV2aWNlLCAnYzh5X1NvZnR3YXJlTGlzdCcsIFtdKTtcbiAgICBmb3JFYWNoKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LCBvcGVyYXRpb25Tb2Z0d2FyZSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2VTb2Z0d2FyZSA9IGZpbmQoZGV2aWNlU29mdHdhcmVMaXN0LCB7IG5hbWU6IG9wZXJhdGlvblNvZnR3YXJlLm5hbWUgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIChvcGVyYXRpb25Tb2Z0d2FyZSAmJiBvcGVyYXRpb25Tb2Z0d2FyZS52ZXJzaW9uKSAhPT1cbiAgICAgICAgKGRldmljZVNvZnR3YXJlICYmIGRldmljZVNvZnR3YXJlLnZlcnNpb24pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAuLi5vcGVyYXRpb25Tb2Z0d2FyZSxcbiAgICAgICAgICBhY3Rpb246ICdpbnN0YWxsJ1xuICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JFYWNoKGRldmljZVNvZnR3YXJlTGlzdCwgZGV2aWNlU29mdHdhcmUgPT4ge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uU29mdHdhcmUgPSBmaW5kKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LCB7IG5hbWU6IGRldmljZVNvZnR3YXJlLm5hbWUgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIChvcGVyYXRpb25Tb2Z0d2FyZSAmJiBvcGVyYXRpb25Tb2Z0d2FyZS52ZXJzaW9uKSAhPT1cbiAgICAgICAgKGRldmljZVNvZnR3YXJlICYmIGRldmljZVNvZnR3YXJlLnZlcnNpb24pXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW5zdGFsbENoYW5nZSA9IGNoYW5nZXMuZmluZChcbiAgICAgICAgICBjaGFuZ2UgPT4gZGV2aWNlU29mdHdhcmUubmFtZSA9PT0gY2hhbmdlLm5hbWUgJiYgY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBzb2Z0d2FyZSBpcyBub3QgYW4gaW5zdGFsbGF0aW9uIHNvZnR3YXJlIGNoYW5nZSwgb3RoZXJ3aXNlIGl0J3MgYW4gdXBkYXRlIGFuZCBub3QgYSByZW1vdmFsXG4gICAgICAgIGlmICghaW5zdGFsbENoYW5nZSkge1xuICAgICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAuLi5kZXZpY2VTb2Z0d2FyZSxcbiAgICAgICAgICAgIGFjdGlvbjogJ2RlbGV0ZSdcbiAgICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaGFuZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VTb2Z0d2FyZUNoYW5nZXNGcm9tU29mdHdhcmVPcGVyYXRpb24oXG4gICAgb3BlcmF0aW9uOiBJT3BlcmF0aW9uLFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdPiB7XG4gICAgY29uc3QgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXSA9IFtdO1xuICAgIGNvbnN0IGRldmljZVNvZnR3YXJlID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50U29mdHdhcmUoZGV2aWNlLCAnYzh5X1NvZnR3YXJlJywge30pO1xuICAgIGZvckVhY2goZGV2aWNlU29mdHdhcmUsIChkZXZpY2VTb2Z0d2FyZVZlcnNpb24sIGRldmljZVNvZnR3YXJlTmFtZSkgPT4ge1xuICAgICAgaWYgKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVbZGV2aWNlU29mdHdhcmVOYW1lXSAhPT0gZGV2aWNlU29mdHdhcmVWZXJzaW9uKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogZGV2aWNlU29mdHdhcmVOYW1lLFxuICAgICAgICAgIHZlcnNpb246IGRldmljZVNvZnR3YXJlVmVyc2lvbixcbiAgICAgICAgICBhY3Rpb246ICdkZWxldGUnXG4gICAgICAgIH0gYXMgRGV2aWNlU29mdHdhcmVDaGFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvckVhY2gob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSwgKG9wZXJhdGlvblNvZnR3YXJlVmVyc2lvbiwgb3BlcmF0aW9uU29mdHdhcmVOYW1lKSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2VTb2Z0d2FyZVZlcnNpb24gPSBkZXZpY2VTb2Z0d2FyZSAmJiBkZXZpY2VTb2Z0d2FyZVtvcGVyYXRpb25Tb2Z0d2FyZU5hbWVdO1xuICAgICAgaWYgKGRldmljZVNvZnR3YXJlVmVyc2lvbiAhPT0gb3BlcmF0aW9uU29mdHdhcmVWZXJzaW9uKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3BlcmF0aW9uU29mdHdhcmVOYW1lLFxuICAgICAgICAgIHZlcnNpb246IG9wZXJhdGlvblNvZnR3YXJlVmVyc2lvbixcbiAgICAgICAgICBhY3Rpb246ICdpbnN0YWxsJ1xuICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q3VycmVudFNvZnR3YXJlKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgc3dGcmFnbWVudDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogb2JqZWN0XG4gICk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgaXNBU01BdmFpbGFibGUgPSBhd2FpdCB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlPy5pc0FTTUF2YWlsYWJsZSgpO1xuICAgIGlmIChpc0FTTUF2YWlsYWJsZSkge1xuICAgICAgbGV0IHNvZnR3YXJlUmVzdWx0TGlzdDogSVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+ID0gYXdhaXQgdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZS5saXN0KFxuICAgICAgICB7IGRldmljZUlkOiBkZXZpY2UuaWQsIHBhZ2VTaXplOiAxMDAgfVxuICAgICAgKTtcbiAgICAgIGxldCBsaXN0ID0gKHNvZnR3YXJlUmVzdWx0TGlzdD8uZGF0YSB8fCBbXSkubWFwKHN3ID0+XG4gICAgICAgIHBpY2sob21pdEJ5KHN3LCBpc05pbCksIFsnbmFtZScsICd2ZXJzaW9uJywgJ3VybCcsICdzb2Z0d2FyZVR5cGUnXSlcbiAgICAgICk7XG5cbiAgICAgIHdoaWxlIChzb2Z0d2FyZVJlc3VsdExpc3QucGFnaW5nPy5uZXh0UGFnZSkge1xuICAgICAgICBzb2Z0d2FyZVJlc3VsdExpc3QgPSBhd2FpdCBzb2Z0d2FyZVJlc3VsdExpc3QucGFnaW5nLm5leHQoKTtcbiAgICAgICAgbGlzdCA9IFtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIC4uLihzb2Z0d2FyZVJlc3VsdExpc3Q/LmRhdGEgfHwgW10pLm1hcChzdyA9PlxuICAgICAgICAgICAgcGljayhvbWl0Qnkoc3csIGlzTmlsKSwgWyduYW1lJywgJ3ZlcnNpb24nLCAndXJsJywgJ3NvZnR3YXJlVHlwZSddKVxuICAgICAgICAgIClcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSA/IGxpc3QgOiB0aGlzLnNvZnR3YXJlTGlzdFRvTGVnYWN5KGxpc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGV2aWNlW3N3RnJhZ21lbnRdIHx8IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNvZnR3YXJlTGlzdFRvTGVnYWN5KGxpc3Q6IElNYW5hZ2VkT2JqZWN0W10pOiBvYmplY3Qge1xuICAgIHJldHVybiAobGlzdCB8fCBbXSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoeyAuLi5wcmV2LCBbY3Vyci5uYW1lXTogY3Vyci52ZXJzaW9uIH0pLCB7fSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEdsb2JhbEZyYWdtZW50KHR5cGU6IFJlcG9zaXRvcnlUeXBlKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdsb2JhbENvbmZpZ1NlcnZpY2UuZ2V0R2xvYmFsUGFyYW0odHlwZSkpID8geyBjOHlfR2xvYmFsOiB7fSB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVPdXRkYXRlZEJpbmFyeShuZXdCaW5hcnlVUkwsIG9sZEJpbmFyeVVSTCkge1xuICAgIGNvbnN0IGV4aXN0aW5nQmluYXJ5SWQgPSBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeS5nZXRJZEZyb21Vcmwob2xkQmluYXJ5VVJMKTtcbiAgICBjb25zdCBuZXdCaW5hcnlJZCA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybChuZXdCaW5hcnlVUkwpO1xuICAgIGlmIChleGlzdGluZ0JpbmFyeUlkICYmIGV4aXN0aW5nQmluYXJ5SWQgIT09IG5ld0JpbmFyeUlkKSB7XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeS5kZWxldGUoZXhpc3RpbmdCaW5hcnlJZCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
1090
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zaGFyZWQvcmVwb3NpdG9yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBT1osc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUloQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsWUFBWSxFQUNaLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsR0FBRyxJQUFJLElBQUksRUFDWCxNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixPQUFPLEVBQ1AsR0FBRyxFQUNILElBQUksRUFDSixLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxNQUFNLEVBQ04sSUFBSSxFQUNKLE1BQU0sRUFDTixHQUFHLEVBQ0osTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekYsT0FBTyxFQVFMLHVCQUF1QixFQUd2QixjQUFjLEVBR2YsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc1QixNQUFNLE9BQU8saUJBQWlCO0lBTTVCLFlBQ1UsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsU0FBMkIsRUFDM0IsS0FBbUIsRUFDbkIsS0FBbUIsRUFDbkIs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LGVBQWUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQzs4R0E3eUNVLGlCQUFpQjtrSEFBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRXZlbnRCaW5hcnlTZXJ2aWNlLFxuICBFdmVudFNlcnZpY2UsXG4gIElkUmVmZXJlbmNlLFxuICBJRXZlbnQsXG4gIElGZXRjaFJlc3BvbnNlLFxuICBJSWRlbnRpZmllZCxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIElNYW5hZ2VkT2JqZWN0QmluYXJ5LFxuICBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJT3BlcmF0aW9uLFxuICBJUmVzdWx0LFxuICBJUmVzdWx0TGlzdCxcbiAgT3BlcmF0aW9uU2VydmljZSxcbiAgT3BlcmF0aW9uU3RhdHVzLFxuICBRdWVyaWVzVXRpbFxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEdsb2JhbENvbmZpZ1NlcnZpY2UsXG4gIE9wZXJhdGlvblJlYWx0aW1lU2VydmljZSxcbiAgU2VydmljZVJlZ2lzdHJ5XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgbWFwIGFzIF9tYXAsXG4gIGFzc2lnbixcbiAgY2xvbmVEZWVwLFxuICBmaW5kLFxuICBmb3JFYWNoLFxuICBnZXQsXG4gIGhlYWQsXG4gIGlzTmlsLFxuICBpc1N0cmluZyxcbiAgaXNVbmRlZmluZWQsXG4gIG9taXRCeSxcbiAgcGljayxcbiAgcmVtb3ZlLFxuICBzZXRcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGRlZmVyLCBmcm9tLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VXaGlsZSwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2UgfSBmcm9tICcuL2FkdmFuY2VkLXNvZnR3YXJlLW1hbmFnZW1lbnQubW9kZWwnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvblNuYXBzaG90LFxuICBEZXZpY2VGaXJtd2FyZSxcbiAgRGV2aWNlU29mdHdhcmUsXG4gIERldmljZVNvZnR3YXJlQ2hhbmdlLFxuICBGaXJtd2FyZUJpbmFyeSxcbiAgRmlybXdhcmVQYXRjaEJpbmFyeSxcbiAgTW9kYWxNb2RlbCxcbiAgUkVQT1NJVE9SWV9CSU5BUllfVFlQRVMsXG4gIFJlcG9zaXRvcnlCaW5hcnksXG4gIFJlcG9zaXRvcnlDYXRlZ29yeSxcbiAgUmVwb3NpdG9yeVR5cGUsXG4gIFNlbGVjdGVkUmVwb3NpdG9yeUJpbmFyeSxcbiAgU29mdHdhcmVCaW5hcnlcbn0gZnJvbSAnLi9yZXBvc2l0b3J5Lm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlcG9zaXRvcnlTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgZGF0ZUZyb20gPSBuZXcgRGF0ZSgwKTtcbiAgcmVhZG9ubHkgZGF0ZVRvID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIDg2NDAwMDAwKTsgLy8gMSBkYXkgaW4gdGhlIGZ1dHVyZVxuICBwcml2YXRlIHF1ZXJpZXNVdGlsOiBRdWVyaWVzVXRpbDtcbiAgcHJpdmF0ZSBhZHZhbmNlZFNvZnR3YXJlU2VydmljZTogSUFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5QmluYXJ5OiBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3BlcmF0aW9uOiBPcGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50OiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcGVyYXRpb25SZWFsdGltZTogT3BlcmF0aW9uUmVhbHRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRCaW5hcnk6IEV2ZW50QmluYXJ5U2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZpY2VSZWdpc3RyeTogU2VydmljZVJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgZ2xvYmFsQ29uZmlnU2VydmljZTogR2xvYmFsQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLnF1ZXJpZXNVdGlsID0gbmV3IFF1ZXJpZXNVdGlsKCk7XG4gICAgdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZSA9IGhlYWQodGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0KCdhc20nKSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgcmVwb3NpdG9yeSBlbnRyaWVzIG9mIGdpdmVuIHR5cGUuXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHJlcG9zaXRvcnkgZW50cmllcyB0byBsaXN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBFeHRyYSBsaXN0aW5nIG9wdGlvbnMuXG4gICAqL1xuICBsaXN0UmVwb3NpdG9yeUVudHJpZXMoXG4gICAgdHlwZTogUmVwb3NpdG9yeVR5cGUsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIC8qKiBBZGRpdGlvbmFsIHF1ZXJ5LiAqL1xuICAgICAgcXVlcnk/OiBhbnk7XG4gICAgICAvKiogKGRlcHJlY2F0ZWQgLSB0byBiZSByZW1vdmVkKSBPbmx5IGluY2x1ZGUgZW50cmllcyB3aXRoIG1hdGNoaW5nIHBhcnRpYWwgbmFtZXMuICovXG4gICAgICBwYXJ0aWFsTmFtZT86IHN0cmluZztcbiAgICAgIC8qKiBJbmNsdWRlIGVudHJpZXMgd2l0aCBtYXRjaGluZyBwYXJ0aWFsIHRleHQgaW4gdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLiAqL1xuICAgICAgcGFydGlhbFRleHRGaWx0ZXI/OiB7IHBhcnRpYWxUZXh0OiBzdHJpbmc7IHByb3BlcnRpZXM6IHN0cmluZ1tdIH07XG4gICAgICAvKiogRXhjbHVkZSBsZWdhY3kgZW50cmllcy4gKi9cbiAgICAgIHNraXBMZWdhY3k/OiBib29sZWFuO1xuICAgICAgLyoqIEV4Y2x1ZGUgZGVmYXVsdCBvcmRlcmluZy4gKi9cbiAgICAgIHNraXBEZWZhdWx0T3JkZXI/OiBib29sZWFuO1xuICAgICAgLyoqIE90aGVyIHJlcXVlc3QgcGFyYW1zLiAqL1xuICAgICAgcGFyYW1zPzogYW55O1xuICAgIH1cbiAgKSB7XG4gICAgY29uc3QgZGVmYXVsdE9yZGVyID0gW3sgbmFtZTogMSB9XTtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVycyA9IHsgdHlwZSB9O1xuICAgIGNvbnN0IGxlZ2FjeUZpbHRlcnMgPSB7IF9faGFzOiBgdXJsYCB9O1xuICAgIGxldCBmaWx0ZXJzID0ge307XG5cbiAgICBsZXQgZnVsbFF1ZXJ5ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5xdWVyeSkgfHwge307XG4gICAgaWYgKCFvcHRpb25zIHx8IChvcHRpb25zICYmICFvcHRpb25zLnNraXBEZWZhdWx0T3JkZXIpKSB7XG4gICAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZE9yZGVyYnlzKGZ1bGxRdWVyeSwgZGVmYXVsdE9yZGVyLCAncHJlcGVuZCcpO1xuICAgIH1cblxuICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZ1bGxRdWVyeSwgZGVmYXVsdEZpbHRlcnMpO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJ0aWFsVGV4dEZpbHRlcikge1xuICAgICAgY29uc3QgeyBwYXJ0aWFsVGV4dCwgcHJvcGVydGllcyB9ID0gb3B0aW9ucy5wYXJ0aWFsVGV4dEZpbHRlcjtcbiAgICAgIGNvbnN0IG9yRmlsdGVyID0geyBfX29yOiBwcm9wZXJ0aWVzLm1hcChwcm9wZXJ0eSA9PiAoeyBbcHJvcGVydHldOiBgKiR7cGFydGlhbFRleHR9KmAgfSkpIH07XG4gICAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihmdWxsUXVlcnksIG9yRmlsdGVyKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhcnRpYWxOYW1lKSB7XG4gICAgICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpZlxuICAgICAgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIoZnVsbFF1ZXJ5LCB7IG5hbWU6IGAqJHtvcHRpb25zLnBhcnRpYWxOYW1lfSpgIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2tpcExlZ2FjeSkge1xuICAgICAgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIoZnVsbFF1ZXJ5LCB7IF9fbm90OiBsZWdhY3lGaWx0ZXJzIH0pO1xuICAgIH1cblxuICAgIGZpbHRlcnMgPSB7XG4gICAgICBxdWVyeTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGZ1bGxRdWVyeSksXG4gICAgICBwYWdlU2l6ZTogNTAsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIC4uLigob3B0aW9ucyAmJiBvcHRpb25zLnBhcmFtcykgfHwge30pXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdChmaWx0ZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShtb2RhbDogTW9kYWxNb2RlbCwgdHlwZTogUmVwb3NpdG9yeVR5cGUsIG1vOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiA9IHt9KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJlcG9zaXRvcnlUeXBlLkZJUk1XQVJFOlxuICAgICAgY2FzZSBSZXBvc2l0b3J5VHlwZS5TT0ZUV0FSRTpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVwb3NpdG9yeU9iamVjdChtb2RhbCwgdHlwZSk7XG5cbiAgICAgIGNhc2UgUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTjpcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtb2RhbCwge1xuICAgICAgICAgIHNlbGVjdGVkOiB7XG4gICAgICAgICAgICBpZDogbW8uaWQsXG4gICAgICAgICAgICBuYW1lOiBtb2RhbC52ZXJzaW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uVHlwZTogbW9kYWwuY29uZmlndXJhdGlvblR5cGUsXG4gICAgICAgICAgbmFtZTogbW9kYWwudmVyc2lvblxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIW1vZGFsLmRldmljZVR5cGUgJiYgbW8uaWQpIHtcbiAgICAgICAgICBtb2RhbC5kZXZpY2VUeXBlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vZGFsLnNlbGVjdGVkICYmIG1vLmlkKSB7XG4gICAgICAgICAgbW9kYWwuY29uZmlndXJhdGlvblR5cGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwb3NpdG9yeU9iamVjdCA9IHRoaXMuY3JlYXRlUmVwb3NpdG9yeU9iamVjdChtb2RhbCwgdHlwZSk7XG5cbiAgICAgICAgaWYgKG1vLnVybCkge1xuICAgICAgICAgIGNvbnN0IG5ld0JpbmFyeVVybCA9IChhd2FpdCByZXBvc2l0b3J5T2JqZWN0KS51cmw7XG4gICAgICAgICAgdGhpcy5yZW1vdmVPdXRkYXRlZEJpbmFyeShuZXdCaW5hcnlVcmwsIG1vLnVybCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVwb3NpdG9yeU9iamVjdDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVSZXBvc2l0b3J5T2JqZWN0KFxuICAgIG1vZGFsOiBNb2RhbE1vZGVsLFxuICAgIHR5cGU6IFJlcG9zaXRvcnlUeXBlXG4gICk6IFByb21pc2U8UmVwb3NpdG9yeUNhdGVnb3J5PiB7XG4gICAgbGV0IGJpbmFyeTogSU1hbmFnZWRPYmplY3RCaW5hcnk7XG4gICAgbGV0IGJpbmFyeVVSTDogc3RyaW5nO1xuICAgIGxldCByZXBvc2l0b3J5RW50cnk6IFJlcG9zaXRvcnlDYXRlZ29yeTtcbiAgICBsZXQgcmVwb3NpdG9yeUJpbmFyeTogRmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeTtcbiAgICBjb25zdCBtb3MgPSBbXTtcbiAgICBjb25zdCB7XG4gICAgICBzZWxlY3RlZDogeyBpZDogc2VsZWN0ZWRJZCB9LFxuICAgICAgYmluYXJ5OiB7IGZpbGUsIHVybCB9XG4gICAgfSA9IG1vZGFsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnbG9iYWxQYXJhbSA9IGF3YWl0IHRoaXMuZ2V0R2xvYmFsRnJhZ21lbnQodHlwZSk7XG5cbiAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICh7IGRhdGE6IGJpbmFyeSB9ID0gYXdhaXQgdGhpcy5zYXZlQmluYXJ5KGZpbGUsIGdsb2JhbFBhcmFtKSk7XG4gICAgICAgICh7IHNlbGY6IGJpbmFyeVVSTCB9ID0gYmluYXJ5KTtcbiAgICAgICAgaWYgKHR5cGUgPT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgICAgICBtb2RhbC5iaW5hcnkudXJsID0gYmluYXJ5VVJMO1xuICAgICAgICB9XG4gICAgICAgIG1vcy5wdXNoKGJpbmFyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaW5hcnlVUkwgPSB1cmw7XG4gICAgICB9XG5cbiAgICAgICh7IGRhdGE6IHJlcG9zaXRvcnlFbnRyeSB9ID0gYXdhaXQgdGhpcy5jcmVhdGVPclVwZGF0ZVJlcG9zaXRvcnlFbnRyeShcbiAgICAgICAgeyAuLi5tb2RhbCwgLi4uZ2xvYmFsUGFyYW0gfSxcbiAgICAgICAgdHlwZVxuICAgICAgKSk7XG4gICAgICBpZiAoaXNOaWwoc2VsZWN0ZWRJZCkpIHtcbiAgICAgICAgbW9zLnB1c2gocmVwb3NpdG9yeUVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgIT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgICAgKHsgZGF0YTogcmVwb3NpdG9yeUJpbmFyeSB9ID0gYXdhaXQgdGhpcy5jcmVhdGVSZXBvc2l0b3J5QmluYXJ5KFxuICAgICAgICAgIHsgLi4ubW9kYWwsIC4uLmdsb2JhbFBhcmFtIH0sXG4gICAgICAgICAgYmluYXJ5VVJMLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgcmVwb3NpdG9yeUVudHJ5XG4gICAgICAgICkpO1xuICAgICAgICBtb3MucHVzaChyZXBvc2l0b3J5QmluYXJ5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5saW5rQmluYXJ5KHJlcG9zaXRvcnlCaW5hcnksIGJpbmFyeSwgcmVwb3NpdG9yeUVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcG9zaXRvcnlFbnRyeTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jbGVhblVwKG1vcyk7XG4gICAgICB0aGlzLmVycm9yTXNnKCk7XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSBlcnJvclxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUJpbmFyeShmaWxlOiBGaWxlLCBnbG9iYWw6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KTogUHJvbWlzZTxJUmVzdWx0PElNYW5hZ2VkT2JqZWN0QmluYXJ5Pj4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeUJpbmFyeS5jcmVhdGUoZmlsZSwgZ2xvYmFsKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9yVXBkYXRlUmVwb3NpdG9yeUVudHJ5KFxuICAgIG1vZGFsOiBNb2RhbE1vZGVsLFxuICAgIHR5cGU6IFJlcG9zaXRvcnlUeXBlXG4gICk6IFByb21pc2U8SVJlc3VsdDxSZXBvc2l0b3J5Q2F0ZWdvcnk+PiB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0ZWQ6IHsgaWQsIG5hbWUgfSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZGV2aWNlVHlwZSxcbiAgICAgIGM4eV9HbG9iYWwsXG4gICAgICBiaW5hcnlcbiAgICB9ID0gbW9kYWw7XG5cbiAgICBjb25zdCBtbyA9IHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgdHlwZSxcbiAgICAgIGM4eV9HbG9iYWxcbiAgICB9O1xuXG4gICAgaWYgKGRldmljZVR5cGUgJiYgdHlwZSAhPT0gUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTikge1xuICAgICAgc2V0KG1vLCAnYzh5X0ZpbHRlci50eXBlJywgZGV2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKChkZXZpY2VUeXBlIHx8IGlkKSAmJiB0eXBlID09PSBSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OKSB7XG4gICAgICBzZXQobW8sICdkZXZpY2VUeXBlJywgZGV2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGFsLnNvZnR3YXJlVHlwZSkge1xuICAgICAgc2V0KG1vLCAnc29mdHdhcmVUeXBlJywgbW9kYWwuc29mdHdhcmVUeXBlLnNvZnR3YXJlVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKChtb2RhbC5jb25maWd1cmF0aW9uVHlwZSB8fCBpZCkgJiYgdHlwZSA9PT0gUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTikge1xuICAgICAgc2V0KG1vLCAnY29uZmlndXJhdGlvblR5cGUnLCBtb2RhbC5jb25maWd1cmF0aW9uVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgIHNldChtbywgJ3VybCcsIGJpbmFyeT8udXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWRcbiAgICAgID8gKHRoaXMuaW52ZW50b3J5LnVwZGF0ZShtbykgYXMgUHJvbWlzZTxJUmVzdWx0PFJlcG9zaXRvcnlDYXRlZ29yeT4+KVxuICAgICAgOiAodGhpcy5pbnZlbnRvcnkuY3JlYXRlKG1vKSBhcyBQcm9taXNlPElSZXN1bHQ8UmVwb3NpdG9yeUNhdGVnb3J5Pj4pO1xuICB9XG5cbiAgY3JlYXRlUmVwb3NpdG9yeUJpbmFyeShcbiAgICBtb2RhbDogTW9kYWxNb2RlbCxcbiAgICBiaW5hcnlVUkw6IHN0cmluZyxcbiAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZSxcbiAgICBwYXJlbnQ6IFJlcG9zaXRvcnlDYXRlZ29yeVxuICApOiBQcm9taXNlPElSZXN1bHQ8RmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeSB8IEZpcm13YXJlUGF0Y2hCaW5hcnk+PiB7XG4gICAgY29uc3QgbW8gPSB0aGlzLnByZXBhcmVSZXBvc2l0b3J5QmluYXJ5TU8obW9kYWwsIGJpbmFyeVVSTCwgdHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUobW8sIHBhcmVudCkgYXMgUHJvbWlzZTxcbiAgICAgIElSZXN1bHQ8RmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeSB8IEZpcm13YXJlUGF0Y2hCaW5hcnk+XG4gICAgPjtcbiAgfVxuXG4gIHByZXBhcmVSZXBvc2l0b3J5QmluYXJ5TU8obW9kYWw6IE1vZGFsTW9kZWwsIGJpbmFyeVVSTDogc3RyaW5nLCB0eXBlOiBSZXBvc2l0b3J5VHlwZSkge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgcGF0Y2hWZXJzaW9uLCBkZXBlbmRlbmN5LCBjOHlfR2xvYmFsIH0gPSBtb2RhbDtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICB0eXBlOiBSRVBPU0lUT1JZX0JJTkFSWV9UWVBFU1t0eXBlXSxcbiAgICAgIFt0eXBlXToge1xuICAgICAgICB1cmw6IGJpbmFyeVVSTFxuICAgICAgfSxcbiAgICAgIGM4eV9HbG9iYWxcbiAgICB9O1xuXG4gICAgaWYgKGRlcGVuZGVuY3kpIHtcbiAgICAgIHNldChyZXN1bHQsIFt0eXBlLCAndmVyc2lvbiddLCBwYXRjaFZlcnNpb24pO1xuICAgICAgYXNzaWduKHJlc3VsdCwge1xuICAgICAgICBjOHlfUGF0Y2g6IHtcbiAgICAgICAgICBkZXBlbmRlbmN5OiBkZXBlbmRlbmN5LmM4eV9GaXJtd2FyZS52ZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXQocmVzdWx0LCBbdHlwZSwgJ3ZlcnNpb24nXSwgdmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsaW5rQmluYXJ5KFxuICAgIHJlcG9zaXRvcnlCaW5hcnksXG4gICAgYmluYXJ5OiBJTWFuYWdlZE9iamVjdEJpbmFyeSxcbiAgICByZXBvc2l0b3J5RW50cnk/OiBSZXBvc2l0b3J5Q2F0ZWdvcnlcbiAgKSB7XG4gICAgaWYgKHJlcG9zaXRvcnlCaW5hcnkpIHtcbiAgICAgIGNvbnN0IHsgaWQ6IHJlcG9zaXRvcnlCaW5hcnlJZCB9ID0gcmVwb3NpdG9yeUJpbmFyeTtcbiAgICAgIGlmIChiaW5hcnkpIHtcbiAgICAgICAgY29uc3QgeyBpZDogYmluYXJ5SWQgfSA9IGJpbmFyeTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQWRkKGJpbmFyeUlkLCByZXBvc2l0b3J5QmluYXJ5SWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNBZGQoYmluYXJ5LCByZXBvc2l0b3J5RW50cnkpO1xuICB9XG5cbiAgY2xlYW5VcChtb3NUb0RlbGV0ZTogSUlkZW50aWZpZWRbXSkge1xuICAgIG1vc1RvRGVsZXRlLmZvckVhY2gobW8gPT4ge1xuICAgICAgY29uc3QgeyBjOHlfSXNCaW5hcnkgfSA9IG1vO1xuICAgICAgaXNVbmRlZmluZWQoYzh5X0lzQmluYXJ5KSA/IHRoaXMuZGVsZXRlKG1vKSA6IHRoaXMuaW52ZW50b3J5QmluYXJ5LmRlbGV0ZShtbyk7XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGUoZW50aXR5OiBJSWRlbnRpZmllZCk6IFByb21pc2U8SVJlc3VsdDxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5kZWxldGUoZW50aXR5LCB7IGZvcmNlQ2FzY2FkZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGVycm9yTXNnKCkge1xuICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0ZhaWxlZCB0byBzYXZlJyk7XG4gICAgdGhpcy5hbGVydC5kYW5nZXIobXNnKTtcbiAgfVxuXG4gIGdldEJhc2VWZXJzaW9uc0NvdW50JChlbnRyeTogSU1hbmFnZWRPYmplY3QpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gb2YoMSk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tKHRoaXMubGlzdEJhc2VWZXJzaW9ucyhlbnRyeSwgeyB3aXRoVG90YWxFbGVtZW50czogdHJ1ZSB9KSkucGlwZShcbiAgICAgIG1hcCgoeyBwYWdpbmcgfSkgPT4gcGFnaW5nLnRvdGFsRWxlbWVudHMpXG4gICAgKTtcbiAgfVxuXG4gIGdldEJhc2VWZXJzaW9uRnJvbU1PKG1vOiBSZXBvc2l0b3J5QmluYXJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhdGNoKG1vKSA/IGdldChtbywgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5JykgOiBnZXQobW8sICdjOHlfRmlybXdhcmUudmVyc2lvbicpO1xuICB9XG5cbiAgaXNQYXRjaChtbzogUmVwb3NpdG9yeUJpbmFyeSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWdldChtbywgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5Jyk7XG4gIH1cblxuICBnZXRQYXRjaFZlcnNpb25zQ291bnQkKGVudHJ5OiBJTWFuYWdlZE9iamVjdCwgYmFzZVZlcnNpb246IEZpcm13YXJlQmluYXJ5KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBpZiAodGhpcy5pc0xlZ2FjeUVudHJ5KGJhc2VWZXJzaW9uKSkge1xuICAgICAgcmV0dXJuIG9mKDApO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbSh0aGlzLmxpc3RQYXRjaFZlcnNpb25zKGVudHJ5LCBiYXNlVmVyc2lvbiwgeyB3aXRoVG90YWxFbGVtZW50czogdHJ1ZSB9KSkucGlwZShcbiAgICAgIG1hcCgoeyBwYWdpbmcgfSkgPT4gcGFnaW5nLnRvdGFsRWxlbWVudHMpXG4gICAgKTtcbiAgfVxuXG4gIGlzTGVnYWN5RW50cnkoZW50cnk6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4oZW50cnkudXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBhbGwgdmVyc2lvbnMgKGJhc2UgYW5kIHBhdGNoIG9uZXMpIG9mIGdpdmVuIHRvcCBsZXZlbCBlbnRyeS5cbiAgICogVmVyc2lvbnMgYXJlIG9yZGVyZWQgYnkgY3JlYXRpb24gdGltZSAoYXNzdW1pbmcgdGhlIGVhcmxpZXIgY3JlYXRlZCwgdGhlIG9sZGVyIHRoZSB2ZXJzaW9uKS5cbiAgICogQHBhcmFtIGVudHJ5IFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5LlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zLlxuICAgKi9cbiAgbGlzdEFsbFZlcnNpb25zKGVudHJ5OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiwgcGFyYW1zID0ge30pIHtcbiAgICBpZiAodGhpcy5pc0xlZ2FjeUVudHJ5KGVudHJ5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QmFzZVZlcnNpb25SZXN1bHRMaXN0Rm9yTGVnYWN5RW50cnkoZW50cnkpO1xuICAgIH1cblxuICAgIGNvbnN0IFZFUlNJT05fRklMVEVSX09SREVSID0ge1xuICAgICAgX19maWx0ZXI6IHt9LFxuICAgICAgX19vcmRlcmJ5OiBbeyAnY3JlYXRpb25UaW1lLmRhdGUnOiAtMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubGlzdENoaWxkcmVuKGVudHJ5LCBWRVJTSU9OX0ZJTFRFUl9PUkRFUiwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBiYXNlIHZlcnNpb25zIG9mIGdpdmVuIHRvcCBsZXZlbCBlbnRyeS5cbiAgICogVmVyc2lvbnMgYXJlIG9yZGVyZWQgYnkgY3JlYXRpb24gdGltZSAoYXNzdW1pbmcgdGhlIGVhcmxpZXIgY3JlYXRlZCwgdGhlIG9sZGVyIHRoZSB2ZXJzaW9uKS5cbiAgICogQHBhcmFtIGVudHJ5IFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5LlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zLlxuICAgKi9cbiAgbGlzdEJhc2VWZXJzaW9ucyhlbnRyeTogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sIHBhcmFtcyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuaXNMZWdhY3lFbnRyeShlbnRyeSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJhc2VWZXJzaW9uUmVzdWx0TGlzdEZvckxlZ2FjeUVudHJ5KGVudHJ5KTtcbiAgICB9XG5cbiAgICBjb25zdCBOT19QQVRDSF9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX25vdDogeyBfX2hhczogJ2M4eV9QYXRjaCcgfVxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgJ2NyZWF0aW9uVGltZS5kYXRlJzogLTEgfV1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmxpc3RDaGlsZHJlbihlbnRyeSwgTk9fUEFUQ0hfRklMVEVSX09SREVSLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIHBhdGNoIHZlcnNpb25zIG9mIGdpdmVuIGJhc2UgdmVyc2lvbiB1bmRlciB0aGUgZW50cnkuXG4gICAqIFZlcnNpb25zIGFyZSBvcmRlcmVkIGJ5IGNyZWF0aW9uIHRpbWUgKGFzc3VtaW5nIHRoZSBlYXJsaWVyIGNyZWF0ZWQsIHRoZSBvbGRlciB0aGUgdmVyc2lvbikuXG4gICAqIEBwYXJhbSBlbnRyeSBUb3AgbGV2ZWwgcmVwb3NpdG9yeSBlbnRyeS5cbiAgICogQHBhcmFtIGJhc2VWZXJzaW9uIEJhc2UgdmVyc2lvbi5cbiAgICogQHBhcmFtIHBhcmFtcyBBZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtcy5cbiAgICovXG4gIGxpc3RQYXRjaFZlcnNpb25zKGVudHJ5OiBJTWFuYWdlZE9iamVjdCwgYmFzZVZlcnNpb246IEZpcm13YXJlQmluYXJ5IHwgc3RyaW5nLCBwYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IHZlcnNpb24gPSBpc1N0cmluZyhiYXNlVmVyc2lvbikgPyBiYXNlVmVyc2lvbiA6IGdldChiYXNlVmVyc2lvbiwgJ2M4eV9GaXJtd2FyZS52ZXJzaW9uJyk7XG4gICAgY29uc3QgUEFUQ0hfRklMVEVSX09SREVSID0ge1xuICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5JzogdmVyc2lvblxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgJ2NyZWF0aW9uVGltZS5kYXRlJzogLTEgfV1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmxpc3RDaGlsZHJlbihlbnRyeSwgUEFUQ0hfRklMVEVSX09SREVSLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIHBhdGNoIHZlcnNpb25zIG9mIGdpdmVuIGJhc2UgdmVyc2lvbiB1bmRlciB0aGUgZW50cnkgaW5jbHVkaW5nIHRoZSBiYXNlIHZlcnNpb24uXG4gICAqIFZlcnNpb25zIGFyZSBvcmRlcmVkIGJ5IGNyZWF0aW9uIHRpbWUgKGFzc3VtaW5nIHRoZSBlYXJsaWVyIGNyZWF0ZWQsIHRoZSBvbGRlciB0aGUgdmVyc2lvbikuXG4gICAqIEluIHRlcm1zIG9mIGxlZ2FjeSBiYXNlIHZlcnNpb24gdGhlIGVudHJ5IGdldHMgdHJhbnNmb3JtZWQgdG8gZml0IHRoZSBuZWVkZWQgZGF0YSBtb2RlbC5cbiAgICogQHBhcmFtIGVudHJ5IFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5LlxuICAgKiBAcGFyYW0gYmFzZVZlcnNpb24gQmFzZSB2ZXJzaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zLlxuICAgKi9cbiAgbGlzdEJhc2VWZXJzaW9uQW5kUGF0Y2hlcyhlbnRyeTogSU1hbmFnZWRPYmplY3QsIGJhc2VWZXJzaW9uOiBJTWFuYWdlZE9iamVjdCwgcGFyYW1zID0ge30pIHtcbiAgICBpZiAodGhpcy5pc0xlZ2FjeUVudHJ5KGVudHJ5KSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjOHlfRmlybXdhcmU6IHtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgICAgICAgICAgIHVybDogZW50cnkudXJsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnRyeVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgUEFUQ0hfRklMVEVSX09SREVSID0ge1xuICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgX19vcjoge1xuICAgICAgICAgICdjOHlfUGF0Y2guZGVwZW5kZW5jeSc6IGJhc2VWZXJzaW9uLmM4eV9GaXJtd2FyZS52ZXJzaW9uLFxuICAgICAgICAgICdjOHlfRmlybXdhcmUudmVyc2lvbic6IGJhc2VWZXJzaW9uLmM4eV9GaXJtd2FyZS52ZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfX29yZGVyYnk6IFt7ICdjOHlfUGF0Y2guZGVwZW5kZW5jeSc6IDEgfSwgeyAnYzh5X0Zpcm13YXJlLnZlcnNpb24nOiAxIH1dXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5saXN0Q2hpbGRyZW4oZW50cnksIFBBVENIX0ZJTFRFUl9PUkRFUiwgcGFyYW1zKTtcbiAgfVxuXG4gIGxpc3RDaGlsZHJlbihlbnRyeTogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sIGZpbHRlcnMgPSB7fSwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IGNoaWxkcmVuRmlsdGVycyA9IHsgX19ieWdyb3VwaWQ6IGVudHJ5LmlkIH07XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihmaWx0ZXJzLCBjaGlsZHJlbkZpbHRlcnMpO1xuICAgIC8vIEZJWE1FOiBuZWVkZWQgYmVjYXVzZSBvZiBpc3N1ZSBpbiBmb3JPZiBkaXJlY3RpdmUgKC4uLilcbiAgICBwYXJhbXMud2l0aFRvdGFsUGFnZXMgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0UXVlcnkocXVlcnksIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbGwgaXRlbXMgZnJvbSB0aGUgbGlzdCBzdGFydGluZyB3aXRoIHRoZSBwcm92aWRlZCBwYWdlLlxuICAgKiBAcGFyYW0gZmlyc3RQYWdlIFRoZSBmaXJzdCBwYWdlIG9mIHRoZSBsaXN0IHRvIGZldGNoIGFsbCBpdGVtcyBmb3IuXG4gICAqL1xuICBhc3luYyBmZXRjaEFsbEl0ZW1zRnJvbUxpc3QoZmlyc3RQYWdlKSB7XG4gICAgbGV0IGFsbEl0ZW1zO1xuXG4gICAgaWYgKCFmaXJzdFBhZ2UudGhlbikge1xuICAgICAgYWxsSXRlbXMgPSBbLi4uZmlyc3RQYWdlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHsgcGFnaW5nLCBkYXRhOiBpdGVtcyB9ID0gYXdhaXQgZmlyc3RQYWdlO1xuICAgICAgYWxsSXRlbXMgPSBbLi4uaXRlbXNdO1xuXG4gICAgICB3aGlsZSAocGFnaW5nICYmIHBhZ2luZy5uZXh0UGFnZSkge1xuICAgICAgICAoeyBwYWdpbmcsIGRhdGE6IGl0ZW1zIH0gPSBhd2FpdCBwYWdpbmcubmV4dCgpKTtcbiAgICAgICAgYWxsSXRlbXMgPSBbLi4uYWxsSXRlbXMsIC4uLml0ZW1zXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsSXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0b3AgbGV2ZWwgcmVwb3NpdG9yeSBlbnRyeSBtYW5hZ2VkIG9iamVjdCBmb3IgYmFzZSBvciBwYXRjaCB2ZXJzaW9uLlxuICAgKiBAcGFyYW0gbW8gQmFzZSBvciBwYXRjaCB2ZXJzaW9uIG1hbmFnZWQgb2JqZWN0IHdpdGggcGFyZW50cy5cbiAgICovXG4gIGdldFJlcG9zaXRvcnlFbnRyeU1PJChtbzogSU1hbmFnZWRPYmplY3QpOiBPYnNlcnZhYmxlPElNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFtbykge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNvbnN0IFtyZWZlcmVuY2VdID0gZ2V0KG1vLCAnYWRkaXRpb25QYXJlbnRzLnJlZmVyZW5jZXMnKTtcbiAgICBjb25zdCBpZCA9IGdldChyZWZlcmVuY2UsICdtYW5hZ2VkT2JqZWN0LmlkJyk7XG4gICAgcmV0dXJuIGlkXG4gICAgICA/IGZyb20odGhpcy5pbnZlbnRvcnkuZGV0YWlsKGlkLCB7IHdpdGhDaGlsZHJlbjogZmFsc2UgfSkpLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gICAgICA6IG9mKHVuZGVmaW5lZCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgYmFzZSBvciBwYXRjaCB2ZXJzaW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gZGV2aWNlUmVwb3NpdG9yeUZyYWdtZW50IERldmljZSByZXBvc2l0b3J5IGZyYWdtZW50LlxuICAgKiBAcGFyYW0gdHlwZSBUb3AgbGV2ZWwgcmVwb3NpdG9yeSBlbnRyeSB0eXBlLlxuICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBDb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIG9wdGlvbnM6XG4gICAqIC0gKipza2lwTGVnYWN5KiogLSBgYm9vbGVhbmAgLSBFeGNsdWRlIGxlZ2FjeSBlbnRyaWVzLlxuICAgKiAtICoqZmlsdGVycyoqIC0gYG9iamVjdGAgLSBGaWx0ZXIgb2JqZWN0LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgJ21pc3NpbmcgdXJsJyBjYXNlXG4gICAqL1xuICBnZXRSZXBvc2l0b3J5QmluYXJ5TW9CeVZlcnNpb24oXG4gICAgZGV2aWNlUmVwb3NpdG9yeUZyYWdtZW50OiBEZXZpY2VGaXJtd2FyZSB8IERldmljZVNvZnR3YXJlLFxuICAgIHR5cGU6IFJlcG9zaXRvcnlUeXBlLFxuICAgIHsgc2tpcExlZ2FjeSA9IGZhbHNlLCBmaWx0ZXJzID0ge30gfTogeyBza2lwTGVnYWN5PzogYm9vbGVhbjsgZmlsdGVycz86IG9iamVjdCB9ID0ge31cbiAgKTogUHJvbWlzZTxJTWFuYWdlZE9iamVjdD4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgdXJsLCBuYW1lIH0gPSBkZXZpY2VSZXBvc2l0b3J5RnJhZ21lbnQ7XG4gICAgY29uc3QgcmVwb3NpdG9yeUJpbmFyeVR5cGUgPSBSRVBPU0lUT1JZX0JJTkFSWV9UWVBFU1t0eXBlXTtcbiAgICBsZXQgcXVlcnk7XG4gICAgY29uc3QgbmV3TW9kZWxCYXNlVmVyc2lvblF1ZXJ5ID0ge1xuICAgICAgW2Ake3R5cGV9LnZlcnNpb25gXTogdmVyc2lvbixcbiAgICAgIFtgJHt0eXBlfS51cmxgXTogdXJsLFxuICAgICAgdHlwZTogcmVwb3NpdG9yeUJpbmFyeVR5cGVcbiAgICB9O1xuICAgIGNvbnN0IGxlZ2FjeVZlcnNpb25RdWVyeSA9IHsgdXJsLCB0eXBlLCBuYW1lIH07XG4gICAgZmlsdGVycyA9IHsgd2l0aENoaWxkcmVuOiBmYWxzZSwgd2l0aFBhcmVudHM6IHRydWUsIC4uLmZpbHRlcnMgfTtcblxuICAgIGlmIChza2lwTGVnYWN5KSB7XG4gICAgICBxdWVyeSA9IHtcbiAgICAgICAgX19hbmQ6IHtcbiAgICAgICAgICAuLi5uZXdNb2RlbEJhc2VWZXJzaW9uUXVlcnlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnkgPSB7XG4gICAgICAgIF9fb3I6IFt7IF9fYW5kOiB7IC4uLm5ld01vZGVsQmFzZVZlcnNpb25RdWVyeSB9IH0sIHsgX19hbmQ6IHsgLi4ubGVnYWN5VmVyc2lvblF1ZXJ5IH0gfV1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3RRdWVyeShxdWVyeSwgZmlsdGVycykudGhlbigoeyBkYXRhIH0pID0+IGhlYWQoZGF0YSkpO1xuICB9XG5cbiAgZ2V0QmluYXJ5TmFtZSQoYmluYXJ5VXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICghYmluYXJ5VXJsKSB7XG4gICAgICByZXR1cm4gb2YoJy0tLScpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpbmFyeUlkID0gdGhpcy5pbnZlbnRvcnlCaW5hcnkuZ2V0SWRGcm9tVXJsKGJpbmFyeVVybCk7XG4gICAgaWYgKCFiaW5hcnlJZCkge1xuICAgICAgcmV0dXJuIG9mKGJpbmFyeVVybCk7XG4gICAgfVxuICAgIHJldHVybiBkZWZlcigoKSA9PiB0aGlzLmludmVudG9yeS5kZXRhaWwoYmluYXJ5SWQpLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC5kYXRhKSkucGlwZShcbiAgICAgIG1hcChtbyA9PiBtby5uYW1lKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIGludmVudG9yeSBxdWVyeSBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZmluZFxuICAgKiByZXBvc2l0b3J5IGVudHJpZXMgb2Ygc3BlY2lmaWVkIHR5cGUgbWF0Y2hpbmcgdGhlIHR5cGUgb2YgcHJvdmlkZWQgZGV2aWNlLlxuICAgKiBAcGFyYW0gcmVwb3NpdG9yeVR5cGUgVGhlIHR5cGUgb2YgcmVwb3NpdG9yeSBlbnRyaWVzIHdoaWNoIHdpbGwgYmUgcXVlcmllZCB3aXRoIHRoZSBnZW5lcmF0ZWQgcXVlcnkuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggbWF0Y2hpbmcgcmVwb3NpdG9yeSBlbnRyaWVzIHdpbGwgYmUgcXVlcmllZCB3aXRoIHRoZSBnZW5lcmF0ZWQgcXVlcnkuXG4gICAqL1xuXG4gIGdldERldmljZVR5cGVRdWVyeShyZXBvc2l0b3J5VHlwZTogUmVwb3NpdG9yeVR5cGUsIGRldmljZTogSU1hbmFnZWRPYmplY3QpOiBvYmplY3Qge1xuICAgIGxldCByZXN1bHQgPSB7IHR5cGU6IHJlcG9zaXRvcnlUeXBlIH07XG4gICAgaWYgKHJlcG9zaXRvcnlUeXBlID09PSBSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OKSB7XG4gICAgICBpZiAoZGV2aWNlLnR5cGUpIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocmVzdWx0LCB7XG4gICAgICAgICAgX19vcjogW3sgZGV2aWNlVHlwZTogZGV2aWNlLnR5cGUgfSwgeyBfX25vdDogeyBfX2hhczogYGRldmljZVR5cGVgIH0gfV1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHJlc3VsdCwge1xuICAgICAgICBfX29yOiBbXG4gICAgICAgICAgeyAnYzh5X0ZpbHRlci50eXBlJzogZGV2aWNlLnR5cGUgfSxcbiAgICAgICAgICB7ICdjOHlfRmlsdGVyLnR5cGUnOiAnJyB9LFxuICAgICAgICAgIHsgX19ub3Q6IHsgX19oYXM6IGBjOHlfRmlsdGVyLnR5cGVgIH0gfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBpbnZlbnRvcnkgcXVlcnkgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZpbmRcbiAgICogcmVwb3NpdG9yeSBlbnRyaWVzIG1hdGNoaW5nIHRoZSBwcmVkZWZpbmVkIHNvZnR3YXJlIHR5cGVzIHByb3ZpZGVkIGluIHRoZSBkZXZpY2UuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggbWF0Y2hpbmcgcmVwb3NpdG9yeSBlbnRyaWVzIHdpbGwgYmUgcXVlcmllZCB3aXRoIHRoZSBnZW5lcmF0ZWQgcXVlcnkuXG4gICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gd2hpY2ggdGhlIHNvZnR3YXJlIHR5cGVzIGZpbHRlcnMgd2lsbCBiZSBhdHRhY2hlZC4gRGVmYXVsdCB2YWx1ZSBpcyBhbiBvYmplY3QgY29udGFpbmcgcmVwb3NpdG9yeSB0eXBlIHNvZnR3YXJlLlxuICAgKi9cbiAgZ2V0U29mdHdhcmVUeXBlUXVlcnkoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCwgcXVlcnk/OiBvYmplY3QpOiBvYmplY3Qge1xuICAgIGxldCByZXN1bHQgPSB7IC4uLihxdWVyeSB8fCB7fSksIHR5cGU6IFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFIH07XG5cbiAgICBpZiAoZGV2aWNlLmM4eV9TdXBwb3J0ZWRTb2Z0d2FyZVR5cGVzKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihyZXN1bHQsIHtcbiAgICAgICAgX19vcjogW2RldmljZS5jOHlfU3VwcG9ydGVkU29mdHdhcmVUeXBlcy5tYXAodHlwZSA9PiAoeyBzb2Z0d2FyZVR5cGU6IHR5cGUgfSkpXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gaW52ZW50b3J5IHF1ZXJ5IG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBmaW5kIGNvbmZpZ3VyYXRpb24gcmVwb3NpdG9yeSBlbnRyaWVzXG4gICAqIG1hdGNoaW5nIHRoZSB0eXBlIG9mIHByb3ZpZGVkIGRldmljZSBhbmQgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb25UeXBlIENvbmZpZ3VyYXRpb24gdHlwZSBmb3Igd2hpY2ggbWF0Y2hpbmcgcmVwb3NpdG9yeSBlbnRyaWVzIHdpbGwgYmUgcXVlcmllZCB3aXRoIHRoZSBnZW5lcmF0ZWQgcXVlcnkuXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uVHlwZVF1ZXJ5KGRldmljZTogSU1hbmFnZWRPYmplY3QsIGNvbmZpZ3VyYXRpb25UeXBlOiBzdHJpbmcpOiBvYmplY3Qge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXREZXZpY2VUeXBlUXVlcnkoUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTiwgZGV2aWNlKTtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocXVlcnksIHtcbiAgICAgIF9fb3I6IFtcbiAgICAgICAgeyBjb25maWd1cmF0aW9uVHlwZSB9LFxuICAgICAgICB7IGNvbmZpZ3VyYXRpb25UeXBlOiAnJyB9LFxuICAgICAgICB7IF9fbm90OiB7IF9faGFzOiBgY29uZmlndXJhdGlvblR5cGVgIH0gfVxuICAgICAgXVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygc29mdHdhcmUgaW5zdGFsbGVkIGluIHRoZSBkZXZpY2UgaW4gdGhlIHVuaWZvcm0gZm9ybWF0LlxuICAgKiBTdXBwb3J0cyBjOHlfU29mdHdhcmVMaXN0IGFuZCBjOHlfU29mdHdhcmUgZnJhZ21lbnRzLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2Ugd2hvc2Ugc29mdHdhcmUgbGlzdCBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqL1xuICBnZXREZXZpY2VTb2Z0d2FyZUxpc3QoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IERldmljZVNvZnR3YXJlW10ge1xuICAgIGlmIChkZXZpY2UuYzh5X1NvZnR3YXJlTGlzdCkge1xuICAgICAgcmV0dXJuIGNsb25lRGVlcChkZXZpY2UuYzh5X1NvZnR3YXJlTGlzdCk7XG4gICAgfVxuICAgIGlmIChkZXZpY2UuYzh5X1NvZnR3YXJlKSB7XG4gICAgICByZXR1cm4gX21hcChkZXZpY2UuYzh5X1NvZnR3YXJlLCAodmVyc2lvbiwgbmFtZSkgPT4gKHsgbmFtZSwgdmVyc2lvbiB9KSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIHNvZnR3YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgdGhlIGxpc3Qgb2YgY2hhbmdlcywgYW5kIHNlbmRzIGl0IHRvIHRoZSBkZXZpY2UuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSB3aGljaCB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZCBmb3IgYW5kIHNlbnQgdG8uXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFRoZSBsaXN0IG9mIHNvZnR3YXJlIGNoYW5nZXMgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICBhc3luYyBjcmVhdGVTb2Z0d2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNoYW5nZXM6IERldmljZVNvZnR3YXJlQ2hhbmdlW11cbiAgKTogUHJvbWlzZTxJT3BlcmF0aW9uPiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gYXdhaXQgdGhpcy5nZXRTb2Z0d2FyZVVwZGF0ZU9wZXJhdGlvbihkZXZpY2UsIGNoYW5nZXMpO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5vcGVyYXRpb24uY3JlYXRlKG9wZXJhdGlvbikpLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBzb2Z0d2FyZSB1cGRhdGUgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UgYW5kIGNoYW5nZXMuXG4gICAqIFJldHVybmVkIG9wZXJhdGlvbiB0eXBlIGRlcGVuZHMgb24gZGV2aWNlJ3Mgc3VwcG9ydGVkIG9wZXJhdGlvbnMuXG4gICAqIFN1cHBvcnRzIGM4eV9Tb2Z0d2FyZVVwZGF0ZSwgYzh5X1NvZnR3YXJlTGlzdCwgYW5kIGM4eV9Tb2Z0d2FyZSBvcGVyYXRpb25zLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFRoZSBsaXN0IG9mIHNvZnR3YXJlIGNoYW5nZXMgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQuXG4gICAqL1xuICBhc3luYyBnZXRTb2Z0d2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNoYW5nZXM6IERldmljZVNvZnR3YXJlQ2hhbmdlW11cbiAgKTogUHJvbWlzZTxJT3BlcmF0aW9uPiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uOiBJT3BlcmF0aW9uID0ge1xuICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgQXBwbHkgc29mdHdhcmUgY2hhbmdlczogJHtjaGFuZ2VzXG4gICAgICAgIC5tYXAoXG4gICAgICAgICAgY2hhbmdlID0+XG4gICAgICAgICAgICBgJHtjaGFuZ2UuYWN0aW9ufSBcIiR7Y2hhbmdlLm5hbWV9XCIke1xuICAgICAgICAgICAgICBjaGFuZ2UudmVyc2lvbiA/IGAgKHZlcnNpb246ICR7Y2hhbmdlLnZlcnNpb259KWAgOiAnJ1xuICAgICAgICAgICAgfWBcbiAgICAgICAgKVxuICAgICAgICAuam9pbignLCAnKX1gXG4gICAgfTtcbiAgICBpZiAoZGV2aWNlLmM4eV9TdXBwb3J0ZWRPcGVyYXRpb25zLmluY2x1ZGVzKCdjOHlfU29mdHdhcmVVcGRhdGUnKSkge1xuICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZVVwZGF0ZSA9IChjbG9uZURlZXAoY2hhbmdlcykgfHwgW10pLm1hcChjaGFuZ2UgPT5cbiAgICAgICAgb21pdEJ5KGNoYW5nZSwgaXNOaWwpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZGV2aWNlLmM4eV9TdXBwb3J0ZWRPcGVyYXRpb25zLmluY2x1ZGVzKCdjOHlfU29mdHdhcmVMaXN0JykpIHtcbiAgICAgIG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0ID0gY2xvbmVEZWVwKFxuICAgICAgICBhd2FpdCB0aGlzLmdldEN1cnJlbnRTb2Z0d2FyZShkZXZpY2UsICdjOHlfU29mdHdhcmVMaXN0JywgW10pXG4gICAgICApO1xuICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgIGNvbnN0IGRldmljZVNvZnR3YXJlOiBEZXZpY2VTb2Z0d2FyZSA9IHBpY2sob21pdEJ5KGNoYW5nZSwgaXNOaWwpLCBbXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICd2ZXJzaW9uJyxcbiAgICAgICAgICAndXJsJyxcbiAgICAgICAgICAnc29mdHdhcmVUeXBlJ1xuICAgICAgICBdKTtcbiAgICAgICAgaWYgKGNoYW5nZS5hY3Rpb24gPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgcmVtb3ZlKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LCBkZXZpY2VTb2Z0d2FyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZS5hY3Rpb24gPT09ICdpbnN0YWxsJykge1xuICAgICAgICAgIGNvbnN0IHNvZnR3YXJlSXRlbVRvVXBkYXRlSWR4ID0gb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QuZmluZEluZGV4KFxuICAgICAgICAgICAgaXRlbSA9PiBpdGVtLm5hbWUgPT09IGNoYW5nZS5uYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc29mdHdhcmVJdGVtVG9VcGRhdGVJZHggPiAtMSkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHNvZnR3YXJlXG4gICAgICAgICAgICBvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdC5zcGxpY2Uoc29mdHdhcmVJdGVtVG9VcGRhdGVJZHgsIDEsIGRldmljZVNvZnR3YXJlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaW5zdGFsbCBzb2Z0d2FyZVxuICAgICAgICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QucHVzaChkZXZpY2VTb2Z0d2FyZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGRldmljZS5jOHlfU3VwcG9ydGVkT3BlcmF0aW9ucy5pbmNsdWRlcygnYzh5X1NvZnR3YXJlJykpIHtcbiAgICAgIG9wZXJhdGlvbi5jOHlfU29mdHdhcmUgPSBjbG9uZURlZXAoYXdhaXQgdGhpcy5nZXRDdXJyZW50U29mdHdhcmUoZGV2aWNlLCAnYzh5X1NvZnR3YXJlJywge30pKTtcbiAgICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICBkZWxldGUgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZVtjaGFuZ2UubmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZS5hY3Rpb24gPT09ICdpbnN0YWxsJykge1xuICAgICAgICAgIG9wZXJhdGlvbi5jOHlfU29mdHdhcmVbY2hhbmdlLm5hbWVdID0gY2hhbmdlLnZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBsaXN0IG9mIGRldmljZSBzb2Z0d2FyZSBjaGFuZ2VzIGZyb20gZ2l2ZW4gb3BlcmF0aW9uIGluIHRoZSBjb250ZXh0IG9mIGdpdmVuIGRldmljZS5cbiAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIGZyb20gd2hpY2ggdGhlIGxpc3Qgc2hvdWxkIGJlIGV4dHJhY3RlZC5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgdGFyZ2V0IGRldmljZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgYXN5bmMgZ2V0RGV2aWNlU29mdHdhcmVDaGFuZ2VzRnJvbU9wZXJhdGlvbihcbiAgICBvcGVyYXRpb246IElPcGVyYXRpb24sXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPERldmljZVNvZnR3YXJlQ2hhbmdlW10+IHtcbiAgICBpZiAob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZVVwZGF0ZSkge1xuICAgICAgcmV0dXJuIGNsb25lRGVlcChvcGVyYXRpb24uYzh5X1NvZnR3YXJlVXBkYXRlKTtcbiAgICB9XG4gICAgaWYgKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXREZXZpY2VTb2Z0d2FyZUNoYW5nZXNGcm9tU29mdHdhcmVMaXN0T3BlcmF0aW9uKG9wZXJhdGlvbiwgZGV2aWNlKTtcbiAgICB9XG4gICAgaWYgKG9wZXJhdGlvbi5jOHlfU29mdHdhcmUpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERldmljZVNvZnR3YXJlQ2hhbmdlc0Zyb21Tb2Z0d2FyZU9wZXJhdGlvbihvcGVyYXRpb24sIGRldmljZSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIGZpcm13YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgdGhlIHNlbGVjdGVkIHJlcG9zaXRvcnkgYmluYXJ5LCBhbmQgc2VuZHMgaXQgdG8gdGhlIGRldmljZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIHdoaWNoIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciBhbmQgc2VudCB0by5cbiAgICogQHBhcmFtIHNlbGVjdGVkT3B0aW9uIFRoZSBzZWxlY3RlZCByZXBvc2l0b3J5IGJpbmFyeSBvcHRpb24uXG4gICAqL1xuICBhc3luYyBjcmVhdGVGaXJtd2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RlZFJlcG9zaXRvcnlCaW5hcnlcbiAgKTogUHJvbWlzZTxJT3BlcmF0aW9uPiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5nZXRGaXJtd2FyZVVwZGF0ZU9wZXJhdGlvbihkZXZpY2UsIHNlbGVjdGVkT3B0aW9uKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMub3BlcmF0aW9uLmNyZWF0ZShvcGVyYXRpb24pKS5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgZmlybXdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlIGFuZCBzZWxlY3RlZCB2ZXJzaW9uLlxuICAgKiBTdXBwb3J0cyBjOHlfRmlybXdhcmUgb3BlcmF0aW9uLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBzZWxlY3RlZE9wdGlvbiBTZWxlY3RlZCBmaXJtd2FyZSB2ZXJzaW9uLlxuICAgKi9cbiAgZ2V0RmlybXdhcmVVcGRhdGVPcGVyYXRpb24oXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBzZWxlY3RlZE9wdGlvbjogU2VsZWN0ZWRSZXBvc2l0b3J5QmluYXJ5XG4gICk6IElPcGVyYXRpb24ge1xuICAgIGRlbGV0ZSBzZWxlY3RlZE9wdGlvbi5pZDtcblxuICAgIGNvbnN0IG9wZXJhdGlvbjogSU9wZXJhdGlvbiA9IHtcbiAgICAgIGRldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogYFVwZGF0ZSBmaXJtd2FyZSB0bzogXCIke3NlbGVjdGVkT3B0aW9uLm5hbWV9XCIke1xuICAgICAgICBzZWxlY3RlZE9wdGlvbi52ZXJzaW9uID8gYCAodmVyc2lvbjogJHtzZWxlY3RlZE9wdGlvbi52ZXJzaW9ufSlgIDogJydcbiAgICAgIH1gLFxuICAgICAgYzh5X0Zpcm13YXJlOiB7IC4uLnNlbGVjdGVkT3B0aW9uIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIG9wZXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSB1cGxvYWQgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UgYW5kIGNvbmZpZ3VyYXRpb24gdHlwZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKiBAcGFyYW0gY29uZmlndXJhdGlvblR5cGUgU2VsZWN0ZWQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gaXNMZWdhY3kgIEEgbGVnYWN5IG9wZXJhdGlvbiBpcyBjcmVhdGVkIHdpdGhvdXQgYSBjb25maWd1cmF0aW9uVHlwZS5cbiAgICovXG4gIGdldFVwbG9hZENvbmZpZ3VyYXRpb25GaWxlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY29uZmlndXJhdGlvblR5cGU6IHN0cmluZyxcbiAgICBpc0xlZ2FjeSA9IGZhbHNlXG4gICk6IElPcGVyYXRpb24ge1xuICAgIGlmIChpc0xlZ2FjeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBSZXRyaWV2ZSBjb25maWd1cmF0aW9uIHNuYXBzaG90IGZyb20gZGV2aWNlICR7ZGV2aWNlLm5hbWV9YCxcbiAgICAgICAgYzh5X1VwbG9hZENvbmZpZ0ZpbGU6IHt9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUmV0cmlldmUgJHtjb25maWd1cmF0aW9uVHlwZX0gY29uZmlndXJhdGlvbiBzbmFwc2hvdCBmcm9tIGRldmljZSAke2RldmljZS5uYW1lfWAsXG4gICAgICBjOHlfVXBsb2FkQ29uZmlnRmlsZToge1xuICAgICAgICB0eXBlOiBjb25maWd1cmF0aW9uVHlwZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBjb25maWd1cmF0aW9uIGZpbGUgZG93bmxvYWQgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UgYW5kIGNvbmZpZ3VyYXRpb24gdHlwZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKiBAcGFyYW0gY29uZmlndXJhdGlvblR5cGUgU2VsZWN0ZWQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gYmluYXJ5VXJsIFRoZSB1cmwgb2YgYSBiaW5hcnkgdG8gYmUgZG93bmxvYWRlZC5cbiAgICogQHBhcmFtIGlzTGVnYWN5IEEgbGVnYWN5IG9wZXJhdGlvbiBpcyBjcmVhdGVkIHdpdGhvdXQgYSBjb25maWd1cmF0aW9uVHlwZS5cbiAgICovXG4gIGdldERvd25sb2FkQ29uZmlndXJhdGlvbkZpbGVPcGVyYXRpb24oXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBjb25maWd1cmF0aW9uVHlwZTogc3RyaW5nLFxuICAgIGNvbmZpZ1NuYXBzaG90OiBDb25maWd1cmF0aW9uU25hcHNob3QsXG4gICAgaXNMZWdhY3kgPSBmYWxzZVxuICApOiBJT3BlcmF0aW9uIHtcbiAgICBpZiAoaXNMZWdhY3kpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU2VuZCBjb25maWd1cmF0aW9uIHNuYXBzaG90ICR7Y29uZmlnU25hcHNob3QubmFtZX0gdG8gZGV2aWNlICR7ZGV2aWNlLm5hbWV9YCxcbiAgICAgICAgYzh5X0Rvd25sb2FkQ29uZmlnRmlsZToge1xuICAgICAgICAgIHVybDogY29uZmlnU25hcHNob3QuYmluYXJ5VXJsLFxuICAgICAgICAgIGM4eV9Db25maWd1cmF0aW9uRHVtcDoge1xuICAgICAgICAgICAgaWQ6IGNvbmZpZ1NuYXBzaG90LmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgU2VuZCBjb25maWd1cmF0aW9uIHNuYXBzaG90ICR7Y29uZmlnU25hcHNob3QubmFtZX0gb2YgY29uZmlndXJhdGlvbiB0eXBlICR7Y29uZmlndXJhdGlvblR5cGV9IHRvIGRldmljZSAke2RldmljZS5uYW1lfWAsXG4gICAgICBjOHlfRG93bmxvYWRDb25maWdGaWxlOiB7XG4gICAgICAgIHVybDogY29uZmlnU25hcHNob3QuYmluYXJ5VXJsLFxuICAgICAgICB0eXBlOiBjb25maWd1cmF0aW9uVHlwZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFzdCBmaXJtd2FyZSB1cGRhdGUgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UuXG4gICAqIExvb2tzIGZvciBjOHlfRmlybXdhcmUgb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIGRldmljZUlkIFRoZSBJRCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQgYW4gb3BlcmF0aW9uIGZvci5cbiAgICovXG4gIGFzeW5jIGdldExhc3RGaXJtd2FyZVVwZGF0ZU9wZXJhdGlvbihkZXZpY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxJT3BlcmF0aW9uPiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIGRldmljZUlkLFxuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICByZXZlcnQ6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3RNYXRjaGluZ09wZXJhdGlvbihbeyAuLi5maWx0ZXJzLCBmcmFnbWVudFR5cGU6ICdjOHlfRmlybXdhcmUnIH1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXN0IHNvZnR3YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZS5cbiAgICogTG9va3MgZm9yIGM4eV9Tb2Z0d2FyZVVwZGF0ZSwgYzh5X1NvZnR3YXJlTGlzdCwgb3IgYzh5X1NvZnR3YXJlIG9wZXJhdGlvbnMuXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgSUQgb2YgdGhlIGRldmljZSB0byBmaW5kIGFuIG9wZXJhdGlvbiBmb3IuXG4gICAqL1xuICBhc3luYyBnZXRMYXN0U29mdHdhcmVVcGRhdGVPcGVyYXRpb24oZGV2aWNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8SU9wZXJhdGlvbj4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBkZXZpY2VJZCxcbiAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0lTT1N0cmluZygpLFxuICAgICAgcmV2ZXJ0OiB0cnVlLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldExhdGVzdE1hdGNoaW5nT3BlcmF0aW9uKFtcbiAgICAgIHsgLi4uZmlsdGVycywgZnJhZ21lbnRUeXBlOiAnYzh5X1NvZnR3YXJlVXBkYXRlJyB9LFxuICAgICAgeyAuLi5maWx0ZXJzLCBmcmFnbWVudFR5cGU6ICdjOHlfU29mdHdhcmVMaXN0JyB9LFxuICAgICAgeyAuLi5maWx0ZXJzLCBmcmFnbWVudFR5cGU6ICdjOHlfU29mdHdhcmUnIH1cbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIHRoZSBsaXN0IG9mIGZpbHRlcnMgYW5kIHF1ZXJpZXMgdGhlIG9wZXJhdGlvbnMuXG4gICAqIElmIGEgcXVlcnkgcmV0dXJucyBhdCBsZWFzdCBvbmUgb3BlcmF0aW9uLCB0aGUgZmlyc3Qgb25lIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqIE90aGVyd2lzZSB0aGUgbmV4dCBxdWVyeSB3aWxsIGJlIHBlcmZvcm1lZC5cbiAgICogSWYgbm9uZSBvZiB0aGUgcXVlcmllcyByZXR1cm5zIGFueSBvcGVyYXRpb24sIG51bGwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogQHBhcmFtIGZpbHRlcnNMaXN0IFRoZSBsaXN0IG9mIGZpbHRlcnMgZm9yIHRoZSBxdWVyaWVzLlxuICAgKi9cbiAgYXN5bmMgZ2V0Rmlyc3RNYXRjaGluZ09wZXJhdGlvbihmaWx0ZXJzTGlzdDogYW55W10pOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBsZXQgbWF0Y2hpbmdPcGVyYXRpb24gPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXJzIG9mIGZpbHRlcnNMaXN0KSB7XG4gICAgICBjb25zdCBvcGVyYXRpb25zID0gKGF3YWl0IHRoaXMub3BlcmF0aW9uLmxpc3QoZmlsdGVycykpLmRhdGE7XG4gICAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgbWF0Y2hpbmdPcGVyYXRpb24gPSBvcGVyYXRpb25zWzBdO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hpbmdPcGVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciB0aGUgbGlzdCBvZiBmaWx0ZXJzIGFuZCBxdWVyaWVzIHRoZSBvcGVyYXRpb25zLlxuICAgKiBJdCBjb21wYXJlcyB0aGUgb3BlcmF0aW9ucyByZXRyaWV2ZWQgYnkgdGhlIHF1ZXJpZXMgYnkgJ2NyZWF0aW9uVGltZSdcbiAgICogYW5kIHJldHVybiB0aGUgbGF0ZXN0IG9uZS5cbiAgICogSWYgbm9uZSBvZiB0aGUgcXVlcmllcyByZXR1cm5zIGFueSBvcGVyYXRpb24sIG51bGwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogQHBhcmFtIGZpbHRlcnNMaXN0IFRoZSBsaXN0IG9mIGZpbHRlcnMgZm9yIHRoZSBxdWVyaWVzLlxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0TWF0Y2hpbmdPcGVyYXRpb24oZmlsdGVyc0xpc3Q6IGFueVtdKTogUHJvbWlzZTxJT3BlcmF0aW9uPiB7XG4gICAgbGV0IG1hdGNoaW5nT3BlcmF0aW9uOiBJT3BlcmF0aW9uID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgZmlsdGVycyBvZiBmaWx0ZXJzTGlzdCkge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uczogSU9wZXJhdGlvbltdID0gKGF3YWl0IHRoaXMub3BlcmF0aW9uLmxpc3QoZmlsdGVycykpLmRhdGE7XG4gICAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1hdGNoaW5nT3BlcmF0aW9uKSB7XG4gICAgICAgICAgbWF0Y2hpbmdPcGVyYXRpb24gPVxuICAgICAgICAgICAgbmV3IERhdGUobWF0Y2hpbmdPcGVyYXRpb24uY3JlYXRpb25UaW1lKS5nZXRUaW1lKCkgPFxuICAgICAgICAgICAgbmV3IERhdGUob3BlcmF0aW9uc1swXS5jcmVhdGlvblRpbWUpLmdldFRpbWUoKVxuICAgICAgICAgICAgICA/IG9wZXJhdGlvbnNbMF1cbiAgICAgICAgICAgICAgOiBtYXRjaGluZ09wZXJhdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRjaGluZ09wZXJhdGlvbiA9IG9wZXJhdGlvbnNbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hpbmdPcGVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgb3BlcmF0aW9uIGFuZCByZXR1cm5zIGFuIG9ic2VydmFibGUgdG8gdHJhY2sgaXRzIHByb2dyZXNzLlxuICAgKiBGYWlscyB0aGUgb2JzZXJ2YWJsZSB3aGVuIHRoZSBvcGVyYXRpb24gcmV0dXJucyBGQUlMRUQgc3RhdHVzLlxuICAgKiBDb21wbGV0ZXMgdGhlIG9ic2VydmFibGUgd2hlbiB0aGUgb3BlcmF0aW9uIHJldHVybnMgU1VDQ0VTU0ZVTCBzdGF0dXMuXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiB0byBjcmVhdGUgYW5kIHRyYWNrLlxuICAgKi9cbiAgY3JlYXRlT2JzZXJ2ZWRPcGVyYXRpb24ob3BlcmF0aW9uOiBJT3BlcmF0aW9uKTogT2JzZXJ2YWJsZTxJT3BlcmF0aW9uPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5vcGVyYXRpb24uY3JlYXRlKG9wZXJhdGlvbikpLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzd2l0Y2hNYXAoY3JlYXRlZE9wZXJhdGlvbiA9PiB0aGlzLm9ic2VydmVPcGVyYXRpb24oY3JlYXRlZE9wZXJhdGlvbikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdG8gdHJhY2sgcHJvZ3Jlc3Mgb2YgZ2l2ZW4gb3BlcmF0aW9uLlxuICAgKiBGYWlscyB0aGUgb2JzZXJ2YWJsZSB3aGVuIHRoZSBvcGVyYXRpb24gcmV0dXJucyBGQUlMRUQgc3RhdHVzLlxuICAgKiBDb21wbGV0ZXMgdGhlIG9ic2VydmFibGUgd2hlbiB0aGUgb3BlcmF0aW9uIHJldHVybnMgU1VDQ0VTU0ZVTCBzdGF0dXMuXG4gICAqIEBwYXJhbSBvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiB0byBiZSBvYnNlcnZlZC5cbiAgICovXG4gIG9ic2VydmVPcGVyYXRpb24ob3BlcmF0aW9uOiBJT3BlcmF0aW9uKTogT2JzZXJ2YWJsZTxJT3BlcmF0aW9uPiB7XG4gICAgY29uc3Qgb2JzZXJ2ZWRPcGVyYXRpb24kID0gb2Yob3BlcmF0aW9uKTtcbiAgICBjb25zdCBvcGVyYXRpb25VcGRhdGVzJCA9IG9ic2VydmVkT3BlcmF0aW9uJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKG9ic2VydmVkT3BlcmF0aW9uID0+IHRoaXMub3BlcmF0aW9uUmVhbHRpbWUub25BbGwkKG9ic2VydmVkT3BlcmF0aW9uLmRldmljZUlkKSksXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhIGFzIElPcGVyYXRpb24pLFxuICAgICAgd2l0aExhdGVzdEZyb20ob2JzZXJ2ZWRPcGVyYXRpb24kKSxcbiAgICAgIGZpbHRlcigoW29wZXJhdGlvblVwZGF0ZSwgb2JzZXJ2ZWRPcGVyYXRpb25dKSA9PiBvcGVyYXRpb25VcGRhdGUuaWQgPT09IG9ic2VydmVkT3BlcmF0aW9uLmlkKSxcbiAgICAgIHN3aXRjaE1hcCgoW29wZXJhdGlvblVwZGF0ZV0pID0+IHtcbiAgICAgICAgaWYgKG9wZXJhdGlvblVwZGF0ZS5zdGF0dXMgPT09IE9wZXJhdGlvblN0YXR1cy5GQUlMRUQpIHtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihvcGVyYXRpb25VcGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihvcGVyYXRpb25VcGRhdGUpO1xuICAgICAgfSksXG4gICAgICB0YWtlV2hpbGUob3BlcmF0aW9uVXBkYXRlID0+IG9wZXJhdGlvblVwZGF0ZS5zdGF0dXMgIT09IE9wZXJhdGlvblN0YXR1cy5TVUNDRVNTRlVMLCB0cnVlKVxuICAgICk7XG4gICAgcmV0dXJuIG1lcmdlKG9ic2VydmVkT3BlcmF0aW9uJCwgb3BlcmF0aW9uVXBkYXRlcyQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBzaW5nbGUgZXZlbnQgd2l0aCBsYXRlc3QgY3JlYXRpb25UaW1lIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIElkIGFuZCBldmVudCB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlSWQgVGhlIGRldmljZSBJZCBmb3Igd2hpY2ggdGhlIGV2ZW50cyBzaG91bGQgYmUgcXVlcmllZC5cbiAgICogQHBhcmFtIHR5cGUgRXZlbnQgdHlwZS5cbiAgICovXG4gIGFzeW5jIGdldExhdGVzdENvbmZpZ3VyYXRpb25FdmVudChcbiAgICBkZXZpY2VJZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIHR5cGU6IHN0cmluZ1xuICApOiBQcm9taXNlPElFdmVudCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGV2ZW50RmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBzb3VyY2U6IGRldmljZUlkLFxuICAgICAgdHlwZSxcbiAgICAgIGRhdGVGcm9tOiB0aGlzLmRhdGVGcm9tLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IHRoaXMuZGF0ZVRvLnRvSVNPU3RyaW5nKCksXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH07XG5cbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuZXZlbnQubGlzdChldmVudEZpbHRlcik7XG4gICAgcmV0dXJuIGRhdGFbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2Ygb3BlcmF0aW9ucyBmb3IgdGhlIGdpdmVuIGRldmljZSBJZCwgYW5kIG9wZXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlSWQgVGhlIGRldmljZSBJZCBmb3Igd2hpY2ggdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgcXVlcmllZC5cbiAgICogQHBhcmFtIG9wZXJhdGlvblR5cGUgT3BlcmF0aW9uIHR5cGUgZnJhZ21lbnQuXG4gICAqL1xuICBhc3luYyBnZXRDb25maWdGaWxlT3BlcmF0aW9uTGlzdChcbiAgICBkZXZpY2VJZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG9wZXJhdGlvblR5cGU6IHN0cmluZ1xuICApOiBQcm9taXNlPElPcGVyYXRpb25bXT4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbkZpbHRlcjogb2JqZWN0ID0ge1xuICAgICAgZGV2aWNlSWQsXG4gICAgICBmcmFnbWVudFR5cGU6IG9wZXJhdGlvblR5cGUsXG4gICAgICBkYXRlRnJvbTogdGhpcy5kYXRlRnJvbS50b0lTT1N0cmluZygpLFxuICAgICAgZGF0ZVRvOiB0aGlzLmRhdGVUby50b0lTT1N0cmluZygpLFxuICAgICAgcmV2ZXJ0OiB0cnVlLFxuICAgICAgcGFnZVNpemU6IDIwMDBcbiAgICB9O1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLm9wZXJhdGlvbi5saXN0KG9wZXJhdGlvbkZpbHRlcikpLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBsYXRlc3QgdXBsb2FkZWQgY29uZmlndXJhdGlvbiBzbmFwc2hvdCBmb3IgdGhlIGdpdmVuIGRldmljZSwgYW5kIGNvbmZpZ3VyYXRpb24gdHlwZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBzbmFwc2hvdCB3YXMgdXBsb2FkZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqL1xuICBhc3luYyBnZXRDb25maWdTbmFwc2hvdChcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNvbmZpZ3VyYXRpb25UeXBlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxDb25maWd1cmF0aW9uU25hcHNob3QgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBldmVudDogSUV2ZW50ID0gYXdhaXQgdGhpcy5nZXRMYXRlc3RDb25maWd1cmF0aW9uRXZlbnQoZGV2aWNlLmlkLCBjb25maWd1cmF0aW9uVHlwZSk7XG4gICAgbGV0IGNvbmZpZ1NuYXBzaG90OiBDb25maWd1cmF0aW9uU25hcHNob3Q7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb25maWdTbmFwc2hvdCA9IHtcbiAgICAgICAgdGltZTogZXZlbnQudGltZSxcbiAgICAgICAgbmFtZTogZXZlbnQudGV4dCxcbiAgICAgICAgZGV2aWNlVHlwZTogZGV2aWNlLnR5cGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb25UeXBlXG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uZmlnU25hcHNob3QuYmluYXJ5ID0gYXdhaXQgKGF3YWl0IHRoaXMuZXZlbnRCaW5hcnkuZG93bmxvYWQoZXZlbnQpKS50ZXh0KCk7XG4gICAgICAgIGlmIChldmVudC5jOHlfSXNCaW5hcnkpIHtcbiAgICAgICAgICBjb25maWdTbmFwc2hvdC5iaW5hcnlUeXBlID0gZXZlbnQuYzh5X0lzQmluYXJ5LnR5cGU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0NvdWxkIG5vdCBnZXQgdGhlIGJpbmFyeS4nKTtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIobXNnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ1NuYXBzaG90O1xuICB9XG5cbiAgYXN5bmMgZ2V0TGVnYWN5Q29uZmlnU25hcHNob3QoZGV2aWNlSWQpIHtcbiAgICBsZXQgY29uZmlnU25hcHNob3Q6IENvbmZpZ3VyYXRpb25TbmFwc2hvdDtcbiAgICBsZXQgbW87XG4gICAgY29uc3QgZGV2aWNlID0gKGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChkZXZpY2VJZCwgeyB3aXRoQ2hpbGRyZW46IGZhbHNlIH0pKS5kYXRhO1xuICAgIGNvbnN0IHNuYXBzaG90SWQgPSBkZXZpY2UuYzh5X0NvbmZpZ3VyYXRpb25EdW1wICYmIGRldmljZS5jOHlfQ29uZmlndXJhdGlvbkR1bXAuaWQ7XG4gICAgaWYgKCFzbmFwc2hvdElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIG1vID0gKGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChzbmFwc2hvdElkKSkuZGF0YTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICBpZiAobW8pIHtcbiAgICAgIGNvbmZpZ1NuYXBzaG90ID0ge1xuICAgICAgICB0aW1lOiBtby5jcmVhdGlvblRpbWUsXG4gICAgICAgIG5hbWU6IG1vLm5hbWVcbiAgICAgIH07XG4gICAgICBjb25maWdTbmFwc2hvdC5iaW5hcnkgPSBhd2FpdCB0aGlzLmdldEJpbmFyeVRleHQobW8udXJsLCB7IGFsbG93RXh0ZXJuYWw6IGZhbHNlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU25hcHNob3Q7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJpbmFyeSBvYmplY3QgYXMgdGV4dC5cbiAgICogQHBhcmFtIGJpbmFyeVVybCBUaGUgVVJMIHRvIGZpbmQgYmluYXJ5XG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAqIC0gKiphbGxvd0V4dGVybmFsKiogLSBgYm9vbGVhbmAgLSBhbGxvd3MgZG93bmxvYWRpbmcgZXh0ZXJuYWwgYmluYXJ5IGZpbGVcbiAgICogLSAqKm5vQWxlcnRzKiogLSBgYm9vbGVhbmAgLSBkbyBub3QgZGlzcGxheSBhbiBhbGVydCBtZXNzYWdlOyBkZWZhdWx0cyB0byBgZmFsc2VgXG4gICAqL1xuICBhc3luYyBnZXRCaW5hcnlUZXh0KFxuICAgIGJpbmFyeVVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgYWxsb3dFeHRlcm5hbDogYm9vbGVhbjsgbm9BbGVydHM/OiBib29sZWFuIH1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBiaW5hcnlJZCA9IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybChiaW5hcnlVcmwpO1xuICAgIGxldCByZXM7XG4gICAgaWYgKCFiaW5hcnlJZCkge1xuICAgICAgaWYgKG9wdGlvbnMuYWxsb3dFeHRlcm5hbCkge1xuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLmdldEV4dGVybmFsQmluYXJ5UmVzcG9uc2UoYmluYXJ5VXJsLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy5nZXRJbnRlcm5hbEJpbmFyeVJlc3BvbnNlKGJpbmFyeUlkLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLnRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYmluYXJ5IG9iamVjdCBhcyBGaWxlLlxuICAgKiBAcGFyYW0gYmluYXJ5VXJsIFRoZSBVUkwgdG8gZmluZCBiaW5hcnlcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICogLSAqKmFsbG93RXh0ZXJuYWwqKiAtIGBib29sZWFuYCAtIGFsbG93cyBkb3dubG9hZGluZyBleHRlcm5hbCBiaW5hcnkgZmlsZVxuICAgKi9cbiAgYXN5bmMgZ2V0QmluYXJ5RmlsZShiaW5hcnlVcmw6IHN0cmluZywgb3B0aW9uczogeyBhbGxvd0V4dGVybmFsOiBib29sZWFuIH0pOiBQcm9taXNlPEZpbGU+IHtcbiAgICBjb25zdCBiaW5hcnlJZCA9IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybChiaW5hcnlVcmwpO1xuICAgIGlmICghYmluYXJ5SWQgJiYgIW9wdGlvbnMuYWxsb3dFeHRlcm5hbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIEBUT0RPOiBub3RlIHRoYXQgaXQgZG9lc24ndCBzb2x2ZSBpc3N1ZSB3aXRoIGV4dGVybmFsIGJpbmFyeSBoZXJlLCBzdWNoIHVybCB3b24ndCBoYXZlIGJpbmFyeUlkLCBzbyB3ZSB3b24ndCBrbm93IHRoZSBuYW1lIG9yIGNvbnRlbnRUeXBlIHRvIHVzZSBpbiBGaWxlIGNvbnN0cnVjdG9yLCBsZXQncyBhZGQgYSBARklYTUUgY29tbWVudCBmb3Igbm93P1xuICAgIGNvbnN0IHsgbmFtZSwgY29udGVudFR5cGUgfSA9IChhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoYmluYXJ5SWQpKS5kYXRhO1xuICAgIGNvbnN0IHJlcyA9ICEhYmluYXJ5SWRcbiAgICAgID8gYXdhaXQgdGhpcy5nZXRJbnRlcm5hbEJpbmFyeVJlc3BvbnNlKGJpbmFyeUlkKVxuICAgICAgOiBhd2FpdCB0aGlzLmdldEV4dGVybmFsQmluYXJ5UmVzcG9uc2UoYmluYXJ5VXJsKTtcbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgIHJldHVybiBuZXcgRmlsZShbYXJyYXlCdWZmZXJdLCBuYW1lLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhc3QgY29uZmlndXJhdGlvbiB1cGRhdGUgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UuXG4gICAqIExvb2tzIGZvciBjOHlfQ29uZmlndXJhdGlvbiBhbmQgYzh5X1NlbmRDb25maWd1cmF0aW9uIG9wZXJhdGlvbnMuXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgSUQgb2YgdGhlIGRldmljZSB0byBmaW5kIGFuIG9wZXJhdGlvbiBmb3IuXG4gICAqL1xuICBhc3luYyBnZXRMYXN0Q29uZmlnVXBkYXRlT3BlcmF0aW9uKGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgZGV2aWNlSWQsXG4gICAgICBkYXRlRnJvbTogbmV3IERhdGUoMCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRhdGVUbzogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIHJldmVydDogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRMYXRlc3RNYXRjaGluZ09wZXJhdGlvbihbXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9Db25maWd1cmF0aW9uJyB9LFxuICAgICAgeyAuLi5maWx0ZXJzLCBmcmFnbWVudFR5cGU6ICdjOHlfU2VuZENvbmZpZ3VyYXRpb24nIH1cbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIGNvbmZpZ3VyYXRpb24gZG93bmxvYWQgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UgYW5kIGl0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIFN1cHBvcnRzIGM4eV9TZW5kQ29uZmlndXJhdGlvbiBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZC5cbiAgICovXG4gIGNyZWF0ZVRleHRCYXNlZENvbmZpZ3VyYXRpb25SZWxvYWRPcGVyYXRpb24oZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IElPcGVyYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGdldHRleHQoJ1JlcXVlc3RlZCBjdXJyZW50IGNvbmZpZ3VyYXRpb24nKSxcbiAgICAgIGM4eV9TZW5kQ29uZmlndXJhdGlvbjoge31cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgY29uZmlndXJhdGlvbiB1cGRhdGUgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4gZGV2aWNlLlxuICAgKiBTdXBwb3J0cyBjOHlfQ29uZmlndXJhdGlvbiBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZC5cbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiB3aGljaCB3aWxsIHVwZGF0ZSB0aGUgZXhpc3Rpbmcgb25lLlxuICAgKi9cbiAgY3JlYXRlVGV4dEJhc2VkQ29uZmlndXJhdGlvblVwZGF0ZU9wZXJhdGlvbihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBjb25maWc6IHN0cmluZyk6IElPcGVyYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGdldHRleHQoJ0NvbmZpZ3VyYXRpb24gdXBkYXRlJyksXG4gICAgICBjOHlfQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBjb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0QmluYXJ5KGJpbmFyeUlkOiBJZFJlZmVyZW5jZSk6IFByb21pc2U8SUZldGNoUmVzcG9uc2U+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmRvd25sb2FkKGJpbmFyeUlkKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnQ291bGQgbm90IGdldCB0aGUgYmluYXJ5LicpO1xuICAgICAgdGhpcy5hbGVydC5kYW5nZXIobXNnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbGwgYXZhaWxhYmxlIHNuYXBzaG90cyBmcm9tIHRoZSByZXBvc2l0b3J5IGZvciB0aGUgZ2l2ZW4gZGV2aWNlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBzbmFwc2hvdHMgc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKiBAcGFyYW0gY29uZmlndXJhdGlvblR5cGUgU2VsZWN0ZWQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKi9cbiAgYXN5bmMgZ2V0U25hcHNob3RzRnJvbVJlcG9zaXRvcnkoZGV2aWNlLCBjb25maWd1cmF0aW9uVHlwZSkge1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5ID0gdGhpcy5nZXRDb25maWd1cmF0aW9uVHlwZVF1ZXJ5KGRldmljZSwgY29uZmlndXJhdGlvblR5cGUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubGlzdFJlcG9zaXRvcnlFbnRyaWVzKFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04sIHtcbiAgICAgIHF1ZXJ5OiBzZWFyY2hRdWVyeSxcbiAgICAgIHBhcmFtczogeyBwYWdlU2l6ZTogMTAwIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgZGV2aWNlIGFscmVhZHkgaGF2ZSBhIGdpdmVuIHNvZnR3YXJlIGluc3RhbGxlZFxuICAgKiBAcGFyYW0gZGV2aWNlSWQgSWQgb2YgdGhlIGRldmljZSB0byBiZSBjaGVja2VkXG4gICAqIEBwYXJhbSBzb2Z0d2FyZSBUaGUgc29mdHdhcmUgdG8gYmUgY2hlY2tlZFxuICAgKi9cbiAgYXN5bmMgaXNTb2Z0d2FyZUluc3RhbGxlZE9uRGV2aWNlKFxuICAgIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgc29mdHdhcmU6IERldmljZVNvZnR3YXJlXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGlzQVNNQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZT8uaXNBU01BdmFpbGFibGUoKTtcbiAgICBpZiAoIWlzQVNNQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB7IGRldmljZUlkIH07XG4gICAgaWYgKHNvZnR3YXJlPy5uYW1lKSB7XG4gICAgICBzZXQocXVlcnlGaWx0ZXIsICduYW1lJywgc29mdHdhcmUubmFtZSk7XG4gICAgfVxuICAgIGlmIChzb2Z0d2FyZT8udmVyc2lvbikge1xuICAgICAgc2V0KHF1ZXJ5RmlsdGVyLCAndmVyc2lvbicsIHNvZnR3YXJlLnZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZS5saXN0KHF1ZXJ5RmlsdGVyKS50aGVuKHJlc3VsdCA9PiAhIXJlc3VsdC5kYXRhPy5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBiaW5hcnkgb2JqZWN0LlxuICAgKiBAcGFyYW0gYmluYXJ5SWQgYmluYXJ5IElEXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAqIC0gKipub0FsZXJ0cyoqIC0gYGJvb2xlYW5gIC0gZG8gbm90IGRpc3BsYXkgYW4gYWxlcnQgbWVzc2FnZTsgZGVmYXVsdHMgdG8gYGZhbHNlYFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRJbnRlcm5hbEJpbmFyeVJlc3BvbnNlKFxuICAgIGJpbmFyeUlkOiBJZFJlZmVyZW5jZSxcbiAgICBvcHRpb25zOiB7IG5vQWxlcnRzPzogYm9vbGVhbiB9ID0ge31cbiAgKTogUHJvbWlzZTxJRmV0Y2hSZXNwb25zZT4ge1xuICAgIGxldCByZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlcyA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmRvd25sb2FkKGJpbmFyeUlkKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKCFvcHRpb25zLm5vQWxlcnRzKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0NvdWxkIG5vdCBnZXQgdGhlIGJpbmFyeS4nKTtcbiAgICAgICAgdGhpcy5hbGVydC5kYW5nZXIobXNnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYmluYXJ5IG9iamVjdC5cbiAgICogQHBhcmFtIGJpbmFyeVVybCBUaGUgVVJMIHRvIGZpbmQgYmluYXJ5XG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAqIC0gKipub0FsZXJ0cyoqIC0gYGJvb2xlYW5gIC0gZG8gbm90IGRpc3BsYXkgYW4gYWxlcnQgbWVzc2FnZTsgZGVmYXVsdHMgdG8gYGZhbHNlYFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRFeHRlcm5hbEJpbmFyeVJlc3BvbnNlKFxuICAgIGJpbmFyeVVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgbm9BbGVydHM/OiBib29sZWFuIH0gPSB7fVxuICApOiBQcm9taXNlPElGZXRjaFJlc3BvbnNlPiB7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmV0Y2hSZXMgPSBhd2FpdCBmZXRjaChiaW5hcnlVcmwpO1xuICAgICAgaWYgKGZldGNoUmVzLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgICAgdGhyb3cgcmVzO1xuICAgICAgfVxuICAgICAgcmVzID0gZmV0Y2hSZXM7XG4gICAgfSBjYXRjaCB7XG4gICAgICBpZiAoIW9wdGlvbnMubm9BbGVydHMpIHtcbiAgICAgICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnQ291bGQgbm90IGdldCB0aGUgZXh0ZXJuYWwgYmluYXJ5Jyk7XG4gICAgICAgIHRoaXMuYWxlcnQuZGFuZ2VyKG1zZyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGdldEJhc2VWZXJzaW9uUmVzdWx0TGlzdEZvckxlZ2FjeUVudHJ5KGVudHJ5KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICByZXM6IHt9IGFzIElGZXRjaFJlc3BvbnNlLFxuICAgICAgZGF0YTogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgW2VudHJ5LnR5cGVdOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgICAgICAgdXJsOiBlbnRyeS51cmxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9IGFzIElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldERldmljZVNvZnR3YXJlQ2hhbmdlc0Zyb21Tb2Z0d2FyZUxpc3RPcGVyYXRpb24oXG4gICAgb3BlcmF0aW9uOiBJT3BlcmF0aW9uLFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdPiB7XG4gICAgY29uc3QgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXSA9IFtdO1xuICAgIGNvbnN0IGRldmljZVNvZnR3YXJlTGlzdCA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudFNvZnR3YXJlKGRldmljZSwgJ2M4eV9Tb2Z0d2FyZUxpc3QnLCBbXSk7XG4gICAgZm9yRWFjaChvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdCwgb3BlcmF0aW9uU29mdHdhcmUgPT4ge1xuICAgICAgY29uc3QgZGV2aWNlU29mdHdhcmUgPSBmaW5kKGRldmljZVNvZnR3YXJlTGlzdCwgeyBuYW1lOiBvcGVyYXRpb25Tb2Z0d2FyZS5uYW1lIH0pO1xuICAgICAgaWYgKFxuICAgICAgICAob3BlcmF0aW9uU29mdHdhcmUgJiYgb3BlcmF0aW9uU29mdHdhcmUudmVyc2lvbikgIT09XG4gICAgICAgIChkZXZpY2VTb2Z0d2FyZSAmJiBkZXZpY2VTb2Z0d2FyZS52ZXJzaW9uKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgLi4ub3BlcmF0aW9uU29mdHdhcmUsXG4gICAgICAgICAgYWN0aW9uOiAnaW5zdGFsbCdcbiAgICAgICAgfSBhcyBEZXZpY2VTb2Z0d2FyZUNoYW5nZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9yRWFjaChkZXZpY2VTb2Z0d2FyZUxpc3QsIGRldmljZVNvZnR3YXJlID0+IHtcbiAgICAgIGNvbnN0IG9wZXJhdGlvblNvZnR3YXJlID0gZmluZChvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdCwgeyBuYW1lOiBkZXZpY2VTb2Z0d2FyZS5uYW1lIH0pO1xuICAgICAgaWYgKFxuICAgICAgICAob3BlcmF0aW9uU29mdHdhcmUgJiYgb3BlcmF0aW9uU29mdHdhcmUudmVyc2lvbikgIT09XG4gICAgICAgIChkZXZpY2VTb2Z0d2FyZSAmJiBkZXZpY2VTb2Z0d2FyZS52ZXJzaW9uKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbGxDaGFuZ2UgPSBjaGFuZ2VzLmZpbmQoXG4gICAgICAgICAgY2hhbmdlID0+IGRldmljZVNvZnR3YXJlLm5hbWUgPT09IGNoYW5nZS5uYW1lICYmIGNoYW5nZS5hY3Rpb24gPT09ICdpbnN0YWxsJ1xuICAgICAgICApO1xuICAgICAgICAvLyBjaGVjayB0aGF0IHRoaXMgc29mdHdhcmUgaXMgbm90IGFuIGluc3RhbGxhdGlvbiBzb2Z0d2FyZSBjaGFuZ2UsIG90aGVyd2lzZSBpdCdzIGFuIHVwZGF0ZSBhbmQgbm90IGEgcmVtb3ZhbFxuICAgICAgICBpZiAoIWluc3RhbGxDaGFuZ2UpIHtcbiAgICAgICAgICBjaGFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgLi4uZGV2aWNlU29mdHdhcmUsXG4gICAgICAgICAgICBhY3Rpb246ICdkZWxldGUnXG4gICAgICAgICAgfSBhcyBEZXZpY2VTb2Z0d2FyZUNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGV2aWNlU29mdHdhcmVDaGFuZ2VzRnJvbVNvZnR3YXJlT3BlcmF0aW9uKFxuICAgIG9wZXJhdGlvbjogSU9wZXJhdGlvbixcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0XG4gICk6IFByb21pc2U8RGV2aWNlU29mdHdhcmVDaGFuZ2VbXT4ge1xuICAgIGNvbnN0IGNoYW5nZXM6IERldmljZVNvZnR3YXJlQ2hhbmdlW10gPSBbXTtcbiAgICBjb25zdCBkZXZpY2VTb2Z0d2FyZSA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudFNvZnR3YXJlKGRldmljZSwgJ2M4eV9Tb2Z0d2FyZScsIHt9KTtcbiAgICBmb3JFYWNoKGRldmljZVNvZnR3YXJlLCAoZGV2aWNlU29mdHdhcmVWZXJzaW9uLCBkZXZpY2VTb2Z0d2FyZU5hbWUpID0+IHtcbiAgICAgIGlmIChvcGVyYXRpb24uYzh5X1NvZnR3YXJlW2RldmljZVNvZnR3YXJlTmFtZV0gIT09IGRldmljZVNvZnR3YXJlVmVyc2lvbikge1xuICAgICAgICBjaGFuZ2VzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGRldmljZVNvZnR3YXJlTmFtZSxcbiAgICAgICAgICB2ZXJzaW9uOiBkZXZpY2VTb2Z0d2FyZVZlcnNpb24sXG4gICAgICAgICAgYWN0aW9uOiAnZGVsZXRlJ1xuICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JFYWNoKG9wZXJhdGlvbi5jOHlfU29mdHdhcmUsIChvcGVyYXRpb25Tb2Z0d2FyZVZlcnNpb24sIG9wZXJhdGlvblNvZnR3YXJlTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZGV2aWNlU29mdHdhcmVWZXJzaW9uID0gZGV2aWNlU29mdHdhcmUgJiYgZGV2aWNlU29mdHdhcmVbb3BlcmF0aW9uU29mdHdhcmVOYW1lXTtcbiAgICAgIGlmIChkZXZpY2VTb2Z0d2FyZVZlcnNpb24gIT09IG9wZXJhdGlvblNvZnR3YXJlVmVyc2lvbikge1xuICAgICAgICBjaGFuZ2VzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG9wZXJhdGlvblNvZnR3YXJlTmFtZSxcbiAgICAgICAgICB2ZXJzaW9uOiBvcGVyYXRpb25Tb2Z0d2FyZVZlcnNpb24sXG4gICAgICAgICAgYWN0aW9uOiAnaW5zdGFsbCdcbiAgICAgICAgfSBhcyBEZXZpY2VTb2Z0d2FyZUNoYW5nZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEN1cnJlbnRTb2Z0d2FyZShcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIHN3RnJhZ21lbnQ6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IG9iamVjdFxuICApOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IGlzQVNNQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZT8uaXNBU01BdmFpbGFibGUoKTtcbiAgICBpZiAoaXNBU01BdmFpbGFibGUpIHtcbiAgICAgIGxldCBzb2Z0d2FyZVJlc3VsdExpc3Q6IElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0PiA9IGF3YWl0IHRoaXMuYWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2UubGlzdChcbiAgICAgICAgeyBkZXZpY2VJZDogZGV2aWNlLmlkLCBwYWdlU2l6ZTogMTAwIH1cbiAgICAgICk7XG4gICAgICBsZXQgbGlzdCA9IChzb2Z0d2FyZVJlc3VsdExpc3Q/LmRhdGEgfHwgW10pLm1hcChzdyA9PlxuICAgICAgICBwaWNrKG9taXRCeShzdywgaXNOaWwpLCBbJ25hbWUnLCAndmVyc2lvbicsICd1cmwnLCAnc29mdHdhcmVUeXBlJ10pXG4gICAgICApO1xuXG4gICAgICB3aGlsZSAoc29mdHdhcmVSZXN1bHRMaXN0LnBhZ2luZz8ubmV4dFBhZ2UpIHtcbiAgICAgICAgc29mdHdhcmVSZXN1bHRMaXN0ID0gYXdhaXQgc29mdHdhcmVSZXN1bHRMaXN0LnBhZ2luZy5uZXh0KCk7XG4gICAgICAgIGxpc3QgPSBbXG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAuLi4oc29mdHdhcmVSZXN1bHRMaXN0Py5kYXRhIHx8IFtdKS5tYXAoc3cgPT5cbiAgICAgICAgICAgIHBpY2sob21pdEJ5KHN3LCBpc05pbCksIFsnbmFtZScsICd2ZXJzaW9uJywgJ3VybCcsICdzb2Z0d2FyZVR5cGUnXSlcbiAgICAgICAgICApXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIGlmICghbGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkgPyBsaXN0IDogdGhpcy5zb2Z0d2FyZUxpc3RUb0xlZ2FjeShsaXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRldmljZVtzd0ZyYWdtZW50XSB8fCBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzb2Z0d2FyZUxpc3RUb0xlZ2FjeShsaXN0OiBJTWFuYWdlZE9iamVjdFtdKTogb2JqZWN0IHtcbiAgICByZXR1cm4gKGxpc3QgfHwgW10pLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHsgLi4ucHJldiwgW2N1cnIubmFtZV06IGN1cnIudmVyc2lvbiB9KSwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRHbG9iYWxGcmFnbWVudCh0eXBlOiBSZXBvc2l0b3J5VHlwZSkge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nbG9iYWxDb25maWdTZXJ2aWNlLmdldEdsb2JhbFBhcmFtKHR5cGUpKSA/IHsgYzh5X0dsb2JhbDoge30gfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlT3V0ZGF0ZWRCaW5hcnkobmV3QmluYXJ5VVJMLCBvbGRCaW5hcnlVUkwpIHtcbiAgICBjb25zdCBleGlzdGluZ0JpbmFyeUlkID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuZ2V0SWRGcm9tVXJsKG9sZEJpbmFyeVVSTCk7XG4gICAgY29uc3QgbmV3QmluYXJ5SWQgPSBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeS5nZXRJZEZyb21VcmwobmV3QmluYXJ5VVJMKTtcbiAgICBpZiAoZXhpc3RpbmdCaW5hcnlJZCAmJiBleGlzdGluZ0JpbmFyeUlkICE9PSBuZXdCaW5hcnlJZCkge1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuZGVsZXRlKGV4aXN0aW5nQmluYXJ5SWQpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -53,4 +53,4 @@ export const SERVICE_STATUS_OPTIONS = [
|
|
|
53
53
|
icon: 'inactive-state'
|
|
54
54
|
}
|
|
55
55
|
];
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLW9wdGlvbnMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zdGF0dXMtb3B0aW9ucy9zdGF0dXMtb3B0aW9ucy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUF1QyxNQUFNLHFCQUFxQixDQUFDO0FBR2hHOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUNuRCxxQkFBcUIsQ0FDdEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixNQUFxQyxFQUNyQyxPQUFxQztJQUVyQyxPQUFPLFdBQVcsQ0FBZSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQXdCRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFtQjtJQUNwRDtRQUNFLEdBQUcsRUFBRSxJQUFJO1FBQ1QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDcEIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsS0FBSyxFQUFFLGNBQWM7S0FDdEI7SUFDRDtRQUNFLEdBQUcsRUFBRSxNQUFNO1FBQ1gsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDdEIsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixLQUFLLEVBQUUsYUFBYTtLQUNyQjtJQUNEO1FBQ0UsR0FBRyxFQUFFLFNBQVM7UUFDZCxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN6QixJQUFJLEVBQUUsZ0JBQWdCO0tBQ3ZCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0LCBob29rR2VuZXJpYywgR2VuZXJpY0hvb2tUeXBlLCBHZW5lcmljSG9va09wdGlvbnMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFN1cHBvcnRlZEljb25zU3VnZ2VzdGlvbnMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ljb24tc2VsZWN0b3IvaWNvbnMnO1xuXG4vKipcbiAqIEV4dGVuc2lvbiBob29rIGFsbG93aW5nIHRvIHJlZ2lzdGVyIGN1c3RvbSBzZXJ2aWNlIHN0YXR1c2VzIGFuZCBjb25maWd1cmUgdGhlaXIgdmlzdWFsIHByZXNlbnRhdGlvbi5cbiAqIEBkZXByZWNhdGVkIENvbnNpZGVyIHVzaW5nIHRoZSBgaG9va1NlcnZpY2VTdGF0dXNgIGZ1bmN0aW9uIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBIT09LX1NFUlZJQ0VfU1RBVFVTID0gbmV3IEluamVjdGlvblRva2VuPFN0YXR1c09wdGlvbiB8IFN0YXR1c09wdGlvbltdPihcbiAgJ0hPT0tfU0VSVklDRV9TVEFUVVMnXG4pO1xuXG4vKipcbiAqIEV4dGVuc2lvbiBob29rIGFsbG93aW5nIHRvIHJlZ2lzdGVyIGN1c3RvbSBzZXJ2aWNlIHN0YXR1c2VzIGFuZCBjb25maWd1cmUgdGhlaXIgdmlzdWFsIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBZb3UgY2FuIGVpdGhlciBwcm92aWRlIGEgc2luZ2xlIGBTdGF0dXNPcHRpb25gIGFzIHBhcmFtZXRlcjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBob29rU2VydmljZVN0YXR1cyguLi4pXG4gKiBgYGBcbiAqXG4gKiBPciBhbiBhcnJheSB0byBkaXJlY3RseSByZWdpc3RlciBtdWx0aXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICBob29rU2VydmljZVN0YXR1cyhbLi4uXSlcbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBwcm92aWRlIGFuIFNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzIGBFeHRlbnNpb25GYWN0b3J5PFN0YXR1c09wdGlvbj5gXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgZXhwb3J0IGNsYXNzIE15U2VydmljZVN0YXR1c0ZhY3RvcnkgaW1wbGVtZW50cyBFeHRlbnNpb25GYWN0b3J5PFN0YXR1c09wdGlvbj4gey4uLn1cbiAqICAuLi5cbiAqICBob29rU2VydmljZVN0YXR1cyhNeVNlcnZpY2VTdGF0dXNGYWN0b3J5KVxuICogYGBgXG4gKiBBIHR5cGVkIGFsdGVybmF0aXZlIHRvIGBIT09LX1NFUlZJQ0VfU1RBVFVTYC5cbiAqIEBwYXJhbSBzdGF0dXMgVGhlIGBTdGF0dXNPcHRpb25gJ3Mgb3IgYEV4dGVuc2lvbkZhY3RvcnlgIHRvIGJlIHByb3ZpZGVkLlxuICogQHJldHVybnMgQW4gYFByb3ZpZGVyYCB0byBiZSBwcm92aWRlZCBpbiB5b3VyIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tTZXJ2aWNlU3RhdHVzKFxuICBzdGF0dXM6IEdlbmVyaWNIb29rVHlwZTxTdGF0dXNPcHRpb24+LFxuICBvcHRpb25zPzogUGFydGlhbDxHZW5lcmljSG9va09wdGlvbnM+XG4pIHtcbiAgcmV0dXJuIGhvb2tHZW5lcmljPFN0YXR1c09wdGlvbj4oc3RhdHVzLCBIT09LX1NFUlZJQ0VfU1RBVFVTLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSB2aXN1YWwgcHJlc2VudGF0aW9uIG9mIGEgc2VydmljZSBzdGF0dXMgb3B0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c09wdGlvbiB7XG4gIC8qKlxuICAgKiBLZXkgdXNlZCBmb3IgdGhpcyBzdGF0dXMgaW4gdGhlIGM4eV9TZXJ2aWNlIG9iamVjdC5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuICAvKipcbiAgICogSHVtYW4gcmVhZGFibGUgbmFtZSBvZiB0aGUgc3RhdHVzIHVzZWQgdG8gYmUgdHJhbnNsYXRlZC5cbiAgICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBpY29uIHRvIHVzZSB0byBkaXNwbGF5IHRoZSBzdGF0dXMuXG4gICAqL1xuICBpY29uOiBTdXBwb3J0ZWRJY29uc1N1Z2dlc3Rpb25zO1xuICAvKipcbiAgICogQ1NTIGNsYXNzKGVzKSB1c2VkIHRvIGUuZy4gYWNjZW50IHRoZSBzdGF0dXMgKGNvbnRleHR1YWwgY29sb3IsIGV0Yy4pXG4gICAqL1xuICBjbGFzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGFuZGFyZCBzdGF0dXMgb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLlxuICovXG5leHBvcnQgY29uc3QgU0VSVklDRV9TVEFUVVNfT1BUSU9OUzogU3RhdHVzT3B0aW9uW10gPSBbXG4gIHtcbiAgICBrZXk6ICd1cCcsXG4gICAgbGFiZWw6IGdldHRleHQoJ1VwJyksXG4gICAgaWNvbjogJ2NoZWNrLWNpcmNsZScsXG4gICAgY2xhc3M6ICd0ZXh0LXN1Y2Nlc3MnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkb3duJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnRG93bicpLFxuICAgIGljb246ICdleGNsYW1hdGlvbi1jaXJjbGUnLFxuICAgIGNsYXNzOiAndGV4dC1kYW5nZXInXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd1bmtub3duJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnVW5rbm93bicpLFxuICAgIGljb246ICdpbmFjdGl2ZS1zdGF0ZSdcbiAgfVxuXTtcbiJdfQ==
|