@tuki-io/tuki-widgets 0.0.73 → 0.0.74
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/.editorconfig +16 -0
- package/.hintrc +14 -0
- package/.vscode/extensions.json +4 -0
- package/.vscode/launch.json +20 -0
- package/.vscode/tasks.json +42 -0
- package/README.md +25 -24
- package/angular.json +141 -0
- package/package.json +48 -65
- package/projects/tuki/widgets/README.md +24 -0
- package/projects/tuki/widgets/di2mt/api/api.endpoints.ts +26 -0
- package/projects/tuki/widgets/di2mt/assets/icons/already_upgraded.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/check2_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/check_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/details_d_icon.svg +3 -0
- package/projects/tuki/widgets/di2mt/assets/icons/expand_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/issue_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/menu_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/ready_to_upgrade.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/search_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/site.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/user.png +0 -0
- package/projects/tuki/widgets/di2mt/assets/icons/warning_icon.png +0 -0
- package/projects/tuki/widgets/di2mt/ng-package.json +7 -0
- package/{di2mt/public-api.d.ts → projects/tuki/widgets/di2mt/public-api.ts} +27 -12
- package/projects/tuki/widgets/di2mt/shared/components/card/card.component.html +11 -0
- package/projects/tuki/widgets/di2mt/shared/components/card/card.component.scss +48 -0
- package/projects/tuki/widgets/di2mt/shared/components/card/card.component.ts +10 -0
- package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.html +15 -0
- package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.scss +38 -0
- package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.ts +71 -0
- package/projects/tuki/widgets/di2mt/shared/components/index.ts +6 -0
- package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.html +57 -0
- package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.scss +74 -0
- package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.ts +44 -0
- package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.html +28 -0
- package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.scss +55 -0
- package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.ts +11 -0
- package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.html +12 -0
- package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.scss +79 -0
- package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.ts +27 -0
- package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.html +28 -0
- package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.scss +244 -0
- package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.ts +28 -0
- package/projects/tuki/widgets/di2mt/shared/constants/app.constants.ts +96 -0
- package/projects/tuki/widgets/di2mt/shared/material.module.ts +36 -0
- package/projects/tuki/widgets/di2mt/shared/services/api.service.ts +92 -0
- package/projects/tuki/widgets/di2mt/shared/shared.module.ts +38 -0
- package/projects/tuki/widgets/di2mt/shared/types/constants.ts +15 -0
- package/projects/tuki/widgets/di2mt/shared/types/data-table.ts +5 -0
- package/projects/tuki/widgets/di2mt/shared/types/table/filter.ts +14 -0
- package/projects/tuki/widgets/di2mt/styles/tuki-widgets-theme.scss +13 -0
- package/projects/tuki/widgets/di2mt/styles/variables.scss +92 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.html +3 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.scss +37 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.ts +40 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.html +158 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.scss +430 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.ts +362 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.module.ts +33 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.service.ts +102 -0
- package/projects/tuki/widgets/di2mt/widgets/site-upgrade/types/user-upgrade.ts +22 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.ts +52 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.ts +53 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.ts +67 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.html +7 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.scss +0 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.ts +45 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.html +7 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.scss +0 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.ts +45 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.ts +59 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.ts +70 -0
- package/{di2mt/widgets/upgrade-overview/types/upgrade-overview.d.ts → projects/tuki/widgets/di2mt/widgets/upgrade-overview/types/upgrade-overview.ts} +58 -56
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.module.ts +42 -0
- package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.service.ts +95 -0
- package/{di2mt/widgets/user-upgrade/types/user-upgrade.d.ts → projects/tuki/widgets/di2mt/widgets/user-upgrade/types/user-upgrade.ts} +19 -16
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.html +186 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.scss +345 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.ts +313 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.module.ts +34 -0
- package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.service.ts +79 -0
- package/projects/tuki/widgets/karma.conf.js +44 -0
- package/projects/tuki/widgets/ng-package.json +10 -0
- package/projects/tuki/widgets/package.json +13 -0
- package/projects/tuki/widgets/src/lib/widgets.component.spec.ts +23 -0
- package/projects/tuki/widgets/src/lib/widgets.component.ts +20 -0
- package/projects/tuki/widgets/src/lib/widgets.module.ts +16 -0
- package/projects/tuki/widgets/src/lib/widgets.service.spec.ts +16 -0
- package/projects/tuki/widgets/src/lib/widgets.service.ts +9 -0
- package/{public-api.d.ts → projects/tuki/widgets/src/public-api.ts} +7 -3
- package/projects/tuki/widgets/src/test.ts +27 -0
- package/projects/tuki/widgets/styles.scss +572 -0
- package/projects/tuki/widgets/tsconfig.lib.json +36 -0
- package/projects/tuki/widgets/tsconfig.lib.prod.json +10 -0
- package/projects/tuki/widgets/tsconfig.spec.json +17 -0
- package/projects/tuki/widgets/user-device-manage/ng-package.json +7 -0
- package/{user-device-manage/public-api.d.ts → projects/tuki/widgets/user-device-manage/public-api.ts} +8 -8
- package/projects/tuki/widgets/user-device-manage/src/app.constants.ts +96 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-left.svg +5 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-right.svg +5 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/close_icon_x.svg +3 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/delete_icon.svg +5 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/dragger-vertical-icon.svg +3 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/icon_user.svg +1 -0
- package/projects/tuki/widgets/user-device-manage/src/assets/icons/vartical_divider_icon.svg +3 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/device.ts +292 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line-association-interface.ts +50 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line-association.ts +177 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line-call-info-display.ts +21 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line-directory.ts +41 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/line.ts +144 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/notification.ts +40 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/recording-options.ts +6 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/simplified-user.ts +169 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/site-defaults.ts +167 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/translation-pattern.ts +50 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/types.ts +19 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/user-interface.ts +225 -0
- package/projects/tuki/widgets/user-device-manage/src/classes/user.ts +8 -0
- package/projects/tuki/widgets/user-device-manage/src/common-functions.ts +16 -0
- package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.html +14 -0
- package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.scss +80 -0
- package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.ts +35 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.html +21 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.scss +97 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.ts +28 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.html +6 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.scss +20 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.ts +13 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.html +6 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.scss +4 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.ts +63 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.html +241 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.scss +500 -0
- package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.ts +194 -0
- package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.html +27 -0
- package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.scss +131 -0
- package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.ts +25 -0
- package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.html +209 -0
- package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.scss +502 -0
- package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.ts +354 -0
- package/projects/tuki/widgets/user-device-manage/src/environments/environment.prod.ts +9 -0
- package/projects/tuki/widgets/user-device-manage/src/environments/environment.ts +10 -0
- package/projects/tuki/widgets/user-device-manage/src/interseptors/auth.interceptor.ts +35 -0
- package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.html +50 -0
- package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.scss +8 -0
- package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.ts +81 -0
- package/projects/tuki/widgets/user-device-manage/src/material.module.ts +87 -0
- package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.html +33 -0
- package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.scss +84 -0
- package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.ts +46 -0
- package/projects/tuki/widgets/user-device-manage/src/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/user-device-manage/src/services/api.service.ts +87 -0
- package/projects/tuki/widgets/user-device-manage/src/services/common-functions.ts +17 -0
- package/projects/tuki/widgets/user-device-manage/src/services/device.service.ts +95 -0
- package/projects/tuki/widgets/user-device-manage/src/services/dns.service.ts +111 -0
- package/projects/tuki/widgets/user-device-manage/src/services/line.service.ts +89 -0
- package/projects/tuki/widgets/user-device-manage/src/services/notification.service.ts +68 -0
- package/projects/tuki/widgets/user-device-manage/src/services/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/user-device-manage/src/services/site-settings.service.ts +82 -0
- package/projects/tuki/widgets/user-device-manage/src/services/sorting-utils.service.ts +203 -0
- package/projects/tuki/widgets/user-device-manage/src/services/user.service.ts +283 -0
- package/projects/tuki/widgets/user-device-manage/src/services/utils.service.ts +87 -0
- package/projects/tuki/widgets/user-device-manage/src/services/validation.service.ts +829 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/_variables.scss +90 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/form.scss +231 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/icons.scss +32 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/styles.scss +110 -0
- package/projects/tuki/widgets/user-device-manage/src/styles/tables.scss +30 -0
- package/projects/tuki/widgets/user-device-manage/src/user-device-manage.module.ts +73 -0
- package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.html +6 -0
- package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.scss +11 -0
- package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.ts +13 -0
- package/projects/tuki/widgets/user-manage/ng-package.json +7 -0
- package/{user-manage/public-api.d.ts → projects/tuki/widgets/user-manage/public-api.ts} +6 -6
- package/projects/tuki/widgets/user-manage/src/app.constants.ts +50 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-left.svg +5 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-right.svg +5 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/delete_icon.svg +5 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/dragger-vertical-icon.svg +3 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/icon_user.svg +1 -0
- package/projects/tuki/widgets/user-manage/src/assets/icons/vartical_divider_icon.svg +3 -0
- package/projects/tuki/widgets/user-manage/src/classes/device.ts +232 -0
- package/projects/tuki/widgets/user-manage/src/classes/line-association-interface.ts +43 -0
- package/projects/tuki/widgets/user-manage/src/classes/line-association.ts +161 -0
- package/projects/tuki/widgets/user-manage/src/classes/line-call-info-display.ts +21 -0
- package/projects/tuki/widgets/user-manage/src/classes/line-directory.ts +42 -0
- package/projects/tuki/widgets/user-manage/src/classes/line.ts +144 -0
- package/projects/tuki/widgets/user-manage/src/classes/notification.ts +39 -0
- package/projects/tuki/widgets/user-manage/src/classes/pagination.ts +18 -0
- package/projects/tuki/widgets/user-manage/src/classes/recording-options.ts +6 -0
- package/projects/tuki/widgets/user-manage/src/classes/simplified-user.ts +165 -0
- package/projects/tuki/widgets/user-manage/src/classes/table-data.ts +6 -0
- package/projects/tuki/widgets/user-manage/src/classes/translation-pattern.ts +49 -0
- package/projects/tuki/widgets/user-manage/src/classes/user-interface.ts +225 -0
- package/projects/tuki/widgets/user-manage/src/classes/user-list.ts +42 -0
- package/projects/tuki/widgets/user-manage/src/classes/user.ts +8 -0
- package/projects/tuki/widgets/user-manage/src/common-functions.ts +16 -0
- package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.html +27 -0
- package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.scss +131 -0
- package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.ts +25 -0
- package/projects/tuki/widgets/user-manage/src/environments/environment.prod.ts +9 -0
- package/projects/tuki/widgets/user-manage/src/environments/environment.ts +10 -0
- package/projects/tuki/widgets/user-manage/src/interseptors/auth.interceptor.ts +35 -0
- package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.html +50 -0
- package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.scss +8 -0
- package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.ts +81 -0
- package/projects/tuki/widgets/user-manage/src/material.module.ts +85 -0
- package/projects/tuki/widgets/user-manage/src/notifications/notification.component.html +33 -0
- package/projects/tuki/widgets/user-manage/src/notifications/notification.component.scss +84 -0
- package/projects/tuki/widgets/user-manage/src/notifications/notification.component.ts +46 -0
- package/projects/tuki/widgets/user-manage/src/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/user-manage/src/services/api.service.ts +90 -0
- package/projects/tuki/widgets/user-manage/src/services/dns.service.ts +116 -0
- package/projects/tuki/widgets/user-manage/src/services/line.service.ts +31 -0
- package/projects/tuki/widgets/user-manage/src/services/notification.service.ts +68 -0
- package/projects/tuki/widgets/user-manage/src/services/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/user-manage/src/services/site-settings.service.ts +35 -0
- package/projects/tuki/widgets/user-manage/src/services/sorting-utils.service.ts +203 -0
- package/projects/tuki/widgets/user-manage/src/services/user.service.ts +242 -0
- package/projects/tuki/widgets/user-manage/src/services/users-search.service.ts +59 -0
- package/projects/tuki/widgets/user-manage/src/services/utils.service.ts +71 -0
- package/projects/tuki/widgets/user-manage/src/styles/_variables.scss +90 -0
- package/projects/tuki/widgets/user-manage/src/styles/form.scss +231 -0
- package/projects/tuki/widgets/user-manage/src/styles/icons.scss +32 -0
- package/projects/tuki/widgets/user-manage/src/styles/styles.scss +110 -0
- package/projects/tuki/widgets/user-manage/src/styles/tables.scss +30 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.html +10 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.scss +429 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.ts +63 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.html +32 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.scss +444 -0
- package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.ts +89 -0
- package/projects/tuki/widgets/user-manage/src/user-details/notification.service.ts +68 -0
- package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.html +29 -0
- package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.scss +64 -0
- package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.ts +19 -0
- package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.html +290 -0
- package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.scss +463 -0
- package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.ts +212 -0
- package/projects/tuki/widgets/user-manage/src/user-manage.module.ts +63 -0
- package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.component.html +6 -0
- package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.component.scss +11 -0
- package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.ts +13 -0
- package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.html +26 -0
- package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.scss +41 -0
- package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.ts +41 -0
- package/projects/tuki/widgets/users-list/ng-package.json +7 -0
- package/{users-list/public-api.d.ts → projects/tuki/widgets/users-list/public-api.ts} +8 -8
- package/projects/tuki/widgets/users-list/src/app.constants.ts +54 -0
- package/projects/tuki/widgets/users-list/src/assets/icons/close_icon_modal.svg +3 -0
- package/projects/tuki/widgets/users-list/src/assets/icons/icon_user.svg +1 -0
- package/projects/tuki/widgets/users-list/src/assets/icons/move_user_to_another_location.svg +14 -0
- package/projects/tuki/widgets/users-list/src/assets/icons/white-close-icon.svg +3 -0
- package/projects/tuki/widgets/users-list/src/classes/app-location.ts +36 -0
- package/projects/tuki/widgets/users-list/src/classes/device.ts +225 -0
- package/projects/tuki/widgets/users-list/src/classes/line.ts +144 -0
- package/projects/tuki/widgets/users-list/src/classes/move-user.ts +225 -0
- package/projects/tuki/widgets/users-list/src/classes/notification.ts +38 -0
- package/projects/tuki/widgets/users-list/src/classes/pagination.ts +18 -0
- package/projects/tuki/widgets/users-list/src/classes/simlified-user.ts +74 -0
- package/projects/tuki/widgets/users-list/src/classes/table-data.ts +6 -0
- package/projects/tuki/widgets/users-list/src/classes/user-interface.ts +225 -0
- package/projects/tuki/widgets/users-list/src/classes/user-list.ts +47 -0
- package/projects/tuki/widgets/users-list/src/classes/user.ts +8 -0
- package/projects/tuki/widgets/users-list/src/material.module.ts +94 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.html +37 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.scss +129 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.ts +46 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.html +31 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.scss +20 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.ts +26 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.html +222 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.scss +239 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.ts +206 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.html +12 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.scss +41 -0
- package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.ts +36 -0
- package/projects/tuki/widgets/users-list/src/services/api-webex.service.ts +14 -0
- package/projects/tuki/widgets/users-list/src/services/api.service.ts +90 -0
- package/projects/tuki/widgets/users-list/src/services/dns.service.ts +128 -0
- package/projects/tuki/widgets/users-list/src/services/events-communication.service.ts +11 -0
- package/projects/tuki/widgets/users-list/src/services/move-user.service.ts +59 -0
- package/projects/tuki/widgets/users-list/src/services/notification.service.ts +68 -0
- package/projects/tuki/widgets/users-list/src/services/removeKynFromIBM.service.ts +25 -0
- package/projects/tuki/widgets/users-list/src/services/site-settings.service.ts +26 -0
- package/projects/tuki/widgets/users-list/src/services/user.service.ts +159 -0
- package/projects/tuki/widgets/users-list/src/services/users-search.service.ts +139 -0
- package/projects/tuki/widgets/users-list/src/styles/styles.scss +572 -0
- package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.html +15 -0
- package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.scss +103 -0
- package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.ts +35 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.css +4 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.css.map +1 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.html +86 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.scss +572 -0
- package/projects/tuki/widgets/users-list/src/users-list.component.ts +312 -0
- package/projects/tuki/widgets/users-list/src/users-list.module.ts +63 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.css +11 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.css.map +1 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.html +6 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.scss +11 -0
- package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.ts +13 -0
- package/projects/tuki/widgets/users-list/src/utils/common-functions.ts +32 -0
- package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.html +33 -0
- package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.scss +84 -0
- package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.ts +46 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.css +45 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.css.map +1 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.html +26 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.scss +41 -0
- package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.ts +41 -0
- package/projects/tuki/widgets/users-list/src/utils/utils.service.ts +71 -0
- package/projects/widgets-playground/src/app/app.component.html +109 -0
- package/projects/widgets-playground/src/app/app.component.scss +15 -0
- package/projects/widgets-playground/src/app/app.component.spec.ts +31 -0
- package/projects/widgets-playground/src/app/app.component.ts +31 -0
- package/projects/widgets-playground/src/app/app.module.ts +43 -0
- package/projects/widgets-playground/src/assets/.gitkeep +0 -0
- package/projects/widgets-playground/src/assets/icons/already_upgraded.png +0 -0
- package/projects/widgets-playground/src/assets/icons/check2_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/check_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/expand_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/issue_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/menu_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/ready_to_upgrade.png +0 -0
- package/projects/widgets-playground/src/assets/icons/search_icon.png +0 -0
- package/projects/widgets-playground/src/assets/icons/site.png +0 -0
- package/projects/widgets-playground/src/assets/icons/user.png +0 -0
- package/projects/widgets-playground/src/assets/icons/warning_icon.png +0 -0
- package/projects/widgets-playground/src/favicon.ico +0 -0
- package/projects/widgets-playground/src/index.html +13 -0
- package/projects/widgets-playground/src/main.ts +7 -0
- package/projects/widgets-playground/src/styles.scss +23 -0
- package/projects/widgets-playground/tsconfig.app.json +14 -0
- package/projects/widgets-playground/tsconfig.spec.json +14 -0
- package/proxy.conf.js +23 -0
- package/tsconfig.json +46 -0
- package/di2mt/api/api.endpoints.d.ts +0 -20
- package/di2mt/index.d.ts +0 -5
- package/di2mt/shared/components/card/card.component.d.ts +0 -6
- package/di2mt/shared/components/chart-card/chart-card.component.d.ts +0 -22
- package/di2mt/shared/components/stat-card/stat-card.component.d.ts +0 -14
- package/di2mt/shared/components/status-list-card/status-list-card.component.d.ts +0 -7
- package/di2mt/shared/components/summary-card/summary-card.component.d.ts +0 -9
- package/di2mt/shared/components/table-filters/table-filters.component.d.ts +0 -14
- package/di2mt/shared/material.module.d.ts +0 -15
- package/di2mt/shared/services/api.service.d.ts +0 -20
- package/di2mt/shared/shared.module.d.ts +0 -16
- package/di2mt/shared/types/constants.d.ts +0 -7
- package/di2mt/shared/types/data-table.d.ts +0 -5
- package/di2mt/shared/types/table/filter.d.ts +0 -16
- package/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.d.ts +0 -48
- package/di2mt/widgets/site-upgrade/site-upgrade.module.d.ts +0 -12
- package/di2mt/widgets/site-upgrade/site-upgrade.service.d.ts +0 -12
- package/di2mt/widgets/site-upgrade/types/user-upgrade.d.ts +0 -14
- package/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.d.ts +0 -19
- package/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.d.ts +0 -19
- package/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.d.ts +0 -18
- package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.d.ts +0 -19
- package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.d.ts +0 -19
- package/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.d.ts +0 -15
- package/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.d.ts +0 -18
- package/di2mt/widgets/upgrade-overview/upgrade-overview.module.d.ts +0 -15
- package/di2mt/widgets/upgrade-overview/upgrade-overview.service.d.ts +0 -17
- package/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.d.ts +0 -49
- package/di2mt/widgets/user-upgrade/user-upgrade.module.d.ts +0 -12
- package/di2mt/widgets/user-upgrade/user-upgrade.service.d.ts +0 -14
- package/esm2020/di2mt/api/api.endpoints.mjs +0 -21
- package/esm2020/di2mt/public-api.mjs +0 -23
- package/esm2020/di2mt/shared/components/card/card.component.mjs +0 -13
- package/esm2020/di2mt/shared/components/chart-card/chart-card.component.mjs +0 -62
- package/esm2020/di2mt/shared/components/stat-card/stat-card.component.mjs +0 -47
- package/esm2020/di2mt/shared/components/status-list-card/status-list-card.component.mjs +0 -17
- package/esm2020/di2mt/shared/components/summary-card/summary-card.component.mjs +0 -36
- package/esm2020/di2mt/shared/components/table-filters/table-filters.component.mjs +0 -37
- package/esm2020/di2mt/shared/material.module.mjs +0 -76
- package/esm2020/di2mt/shared/services/api.service.mjs +0 -86
- package/esm2020/di2mt/shared/shared.module.mjs +0 -61
- package/esm2020/di2mt/shared/types/constants.mjs +0 -12
- package/esm2020/di2mt/shared/types/data-table.mjs +0 -2
- package/esm2020/di2mt/shared/types/table/filter.mjs +0 -2
- package/esm2020/di2mt/tuki-io-tuki-widgets-di2mt.mjs +0 -5
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +0 -182
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.module.mjs +0 -40
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.service.mjs +0 -43
- package/esm2020/di2mt/widgets/site-upgrade/types/user-upgrade.mjs +0 -3
- package/esm2020/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.mjs +0 -64
- package/esm2020/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.mjs +0 -64
- package/esm2020/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.mjs +0 -68
- package/esm2020/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.mjs +0 -45
- package/esm2020/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.mjs +0 -45
- package/esm2020/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.mjs +0 -64
- package/esm2020/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.mjs +0 -74
- package/esm2020/di2mt/widgets/upgrade-overview/types/upgrade-overview.mjs +0 -2
- package/esm2020/di2mt/widgets/upgrade-overview/upgrade-overview.module.mjs +0 -59
- package/esm2020/di2mt/widgets/upgrade-overview/upgrade-overview.service.mjs +0 -82
- package/esm2020/di2mt/widgets/user-upgrade/types/user-upgrade.mjs +0 -3
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.mjs +0 -197
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.module.mjs +0 -40
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.service.mjs +0 -58
- package/esm2020/lib/widgets.component.mjs +0 -22
- package/esm2020/lib/widgets.module.mjs +0 -21
- package/esm2020/lib/widgets.service.mjs +0 -14
- package/esm2020/public-api.mjs +0 -7
- package/esm2020/tuki-io-tuki-widgets.mjs +0 -5
- package/esm2020/user-device-manage/public-api.mjs +0 -9
- package/esm2020/user-device-manage/src/app.constants.mjs +0 -95
- package/esm2020/user-device-manage/src/classes/device.mjs +0 -85
- package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +0 -2
- package/esm2020/user-device-manage/src/classes/line-association.mjs +0 -121
- package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +0 -10
- package/esm2020/user-device-manage/src/classes/line-directory.mjs +0 -27
- package/esm2020/user-device-manage/src/classes/line.mjs +0 -18
- package/esm2020/user-device-manage/src/classes/notification.mjs +0 -32
- package/esm2020/user-device-manage/src/classes/recording-options.mjs +0 -7
- package/esm2020/user-device-manage/src/classes/simplified-user.mjs +0 -111
- package/esm2020/user-device-manage/src/classes/site-defaults.mjs +0 -21
- package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +0 -32
- package/esm2020/user-device-manage/src/classes/types.mjs +0 -24
- package/esm2020/user-device-manage/src/common-functions.mjs +0 -19
- package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +0 -34
- package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +0 -31
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +0 -16
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +0 -64
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +0 -179
- package/esm2020/user-device-manage/src/device-list/device-list.component.mjs +0 -24
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +0 -335
- package/esm2020/user-device-manage/src/environments/environment.mjs +0 -11
- package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +0 -36
- package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +0 -74
- package/esm2020/user-device-manage/src/material.module.mjs +0 -192
- package/esm2020/user-device-manage/src/notifications/notification.component.mjs +0 -35
- package/esm2020/user-device-manage/src/services/api.service.mjs +0 -79
- package/esm2020/user-device-manage/src/services/device.service.mjs +0 -83
- package/esm2020/user-device-manage/src/services/dns.service.mjs +0 -104
- package/esm2020/user-device-manage/src/services/line.service.mjs +0 -76
- package/esm2020/user-device-manage/src/services/notification.service.mjs +0 -62
- package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +0 -25
- package/esm2020/user-device-manage/src/services/site-settings.service.mjs +0 -70
- package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +0 -197
- package/esm2020/user-device-manage/src/services/user.service.mjs +0 -243
- package/esm2020/user-device-manage/src/services/utils.service.mjs +0 -87
- package/esm2020/user-device-manage/src/services/validation.service.mjs +0 -760
- package/esm2020/user-device-manage/src/user-device-manage.module.mjs +0 -107
- package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-device-manage/tuki-io-tuki-widgets-user-device-manage.mjs +0 -5
- package/esm2020/user-manage/public-api.mjs +0 -7
- package/esm2020/user-manage/src/app.constants.mjs +0 -50
- package/esm2020/user-manage/src/classes/device.mjs +0 -37
- package/esm2020/user-manage/src/classes/line-association-interface.mjs +0 -2
- package/esm2020/user-manage/src/classes/line-association.mjs +0 -110
- package/esm2020/user-manage/src/classes/line-call-info-display.mjs +0 -10
- package/esm2020/user-manage/src/classes/line-directory.mjs +0 -27
- package/esm2020/user-manage/src/classes/line.mjs +0 -18
- package/esm2020/user-manage/src/classes/notification.mjs +0 -32
- package/esm2020/user-manage/src/classes/pagination.mjs +0 -8
- package/esm2020/user-manage/src/classes/recording-options.mjs +0 -7
- package/esm2020/user-manage/src/classes/simplified-user.mjs +0 -109
- package/esm2020/user-manage/src/classes/table-data.mjs +0 -2
- package/esm2020/user-manage/src/classes/translation-pattern.mjs +0 -32
- package/esm2020/user-manage/src/classes/user-list.mjs +0 -10
- package/esm2020/user-manage/src/common-functions.mjs +0 -19
- package/esm2020/user-manage/src/device-list/device-list.component.mjs +0 -24
- package/esm2020/user-manage/src/environments/environment.mjs +0 -11
- package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +0 -36
- package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +0 -74
- package/esm2020/user-manage/src/material.module.mjs +0 -188
- package/esm2020/user-manage/src/notifications/notification.component.mjs +0 -35
- package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +0 -25
- package/esm2020/user-manage/src/services/api.service.mjs +0 -79
- package/esm2020/user-manage/src/services/dns.service.mjs +0 -110
- package/esm2020/user-manage/src/services/line.service.mjs +0 -34
- package/esm2020/user-manage/src/services/notification.service.mjs +0 -62
- package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +0 -25
- package/esm2020/user-manage/src/services/site-settings.service.mjs +0 -36
- package/esm2020/user-manage/src/services/sorting-utils.service.mjs +0 -197
- package/esm2020/user-manage/src/services/user.service.mjs +0 -207
- package/esm2020/user-manage/src/services/users-search.service.mjs +0 -50
- package/esm2020/user-manage/src/services/utils.service.mjs +0 -73
- package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +0 -65
- package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +0 -78
- package/esm2020/user-manage/src/user-info/user-info.component.mjs +0 -20
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +0 -208
- package/esm2020/user-manage/src/user-manage.module.mjs +0 -99
- package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +0 -43
- package/esm2020/user-manage/tuki-io-tuki-widgets-user-manage.mjs +0 -5
- package/esm2020/users-list/public-api.mjs +0 -9
- package/esm2020/users-list/src/app.constants.mjs +0 -54
- package/esm2020/users-list/src/classes/app-location.mjs +0 -32
- package/esm2020/users-list/src/classes/device.mjs +0 -7
- package/esm2020/users-list/src/classes/line.mjs +0 -18
- package/esm2020/users-list/src/classes/move-user.mjs +0 -178
- package/esm2020/users-list/src/classes/notification.mjs +0 -31
- package/esm2020/users-list/src/classes/pagination.mjs +0 -8
- package/esm2020/users-list/src/classes/simlified-user.mjs +0 -50
- package/esm2020/users-list/src/classes/table-data.mjs +0 -2
- package/esm2020/users-list/src/classes/user-list.mjs +0 -14
- package/esm2020/users-list/src/material.module.mjs +0 -209
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +0 -38
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +0 -23
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +0 -189
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +0 -38
- package/esm2020/users-list/src/services/api-webex.service.mjs +0 -18
- package/esm2020/users-list/src/services/api.service.mjs +0 -78
- package/esm2020/users-list/src/services/dns.service.mjs +0 -120
- package/esm2020/users-list/src/services/events-communication.service.mjs +0 -14
- package/esm2020/users-list/src/services/move-user.service.mjs +0 -53
- package/esm2020/users-list/src/services/notification.service.mjs +0 -62
- package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +0 -25
- package/esm2020/users-list/src/services/site-settings.service.mjs +0 -27
- package/esm2020/users-list/src/services/user.service.mjs +0 -142
- package/esm2020/users-list/src/services/users-search.service.mjs +0 -122
- package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +0 -34
- package/esm2020/users-list/src/users-list.component.mjs +0 -287
- package/esm2020/users-list/src/users-list.module.mjs +0 -92
- package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/users-list/src/utils/common-functions.mjs +0 -32
- package/esm2020/users-list/src/utils/pagination/pagination.component.mjs +0 -43
- package/esm2020/users-list/src/utils/utils.service.mjs +0 -73
- package/esm2020/users-list/tuki-io-tuki-widgets-users-list.mjs +0 -5
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +0 -1469
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +0 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +0 -3402
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +0 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +0 -2124
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +0 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +0 -1994
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +0 -1
- package/fesm2015/tuki-io-tuki-widgets.mjs +0 -63
- package/fesm2015/tuki-io-tuki-widgets.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +0 -1460
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +0 -3364
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +0 -2107
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +0 -1973
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +0 -1
- package/fesm2020/tuki-io-tuki-widgets.mjs +0 -63
- package/fesm2020/tuki-io-tuki-widgets.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/widgets.component.d.ts +0 -8
- package/lib/widgets.module.d.ts +0 -7
- package/lib/widgets.service.d.ts +0 -6
- package/user-device-manage/index.d.ts +0 -5
- package/user-device-manage/src/app.constants.d.ts +0 -74
- package/user-device-manage/src/classes/device.d.ts +0 -233
- package/user-device-manage/src/classes/line-association-interface.d.ts +0 -45
- package/user-device-manage/src/classes/line-association.d.ts +0 -62
- package/user-device-manage/src/classes/line-call-info-display.d.ts +0 -11
- package/user-device-manage/src/classes/line-directory.d.ts +0 -15
- package/user-device-manage/src/classes/line.d.ts +0 -140
- package/user-device-manage/src/classes/notification.d.ts +0 -18
- package/user-device-manage/src/classes/recording-options.d.ts +0 -5
- package/user-device-manage/src/classes/simplified-user.d.ts +0 -52
- package/user-device-manage/src/classes/site-defaults.d.ts +0 -146
- package/user-device-manage/src/classes/translation-pattern.d.ts +0 -19
- package/user-device-manage/src/classes/types.d.ts +0 -19
- package/user-device-manage/src/common-functions.d.ts +0 -1
- package/user-device-manage/src/confirm-dialog/info-dialog.component.d.ts +0 -20
- package/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.d.ts +0 -15
- package/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.d.ts +0 -7
- package/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.d.ts +0 -24
- package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +0 -89
- package/user-device-manage/src/device-list/device-list.component.d.ts +0 -11
- package/user-device-manage/src/device-manage-widget.component.d.ts +0 -71
- package/user-device-manage/src/environments/environment.d.ts +0 -9
- package/user-device-manage/src/interseptors/auth.interceptor.d.ts +0 -9
- package/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +0 -35
- package/user-device-manage/src/material.module.d.ts +0 -29
- package/user-device-manage/src/notifications/notification.component.d.ts +0 -19
- package/user-device-manage/src/services/api.service.d.ts +0 -20
- package/user-device-manage/src/services/device.service.d.ts +0 -21
- package/user-device-manage/src/services/dns.service.d.ts +0 -14
- package/user-device-manage/src/services/line.service.d.ts +0 -33
- package/user-device-manage/src/services/notification.service.d.ts +0 -18
- package/user-device-manage/src/services/removeKynFromIBM.service.d.ts +0 -8
- package/user-device-manage/src/services/site-settings.service.d.ts +0 -25
- package/user-device-manage/src/services/sorting-utils.service.d.ts +0 -26
- package/user-device-manage/src/services/user.service.d.ts +0 -51
- package/user-device-manage/src/services/utils.service.d.ts +0 -10
- package/user-device-manage/src/services/validation.service.d.ts +0 -165
- package/user-device-manage/src/user-device-manage.module.d.ts +0 -22
- package/user-device-manage/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-manage/index.d.ts +0 -5
- package/user-manage/src/app.constants.d.ts +0 -29
- package/user-manage/src/classes/device.d.ts +0 -203
- package/user-manage/src/classes/line-association-interface.d.ts +0 -40
- package/user-manage/src/classes/line-association.d.ts +0 -55
- package/user-manage/src/classes/line-call-info-display.d.ts +0 -11
- package/user-manage/src/classes/line-directory.d.ts +0 -16
- package/user-manage/src/classes/line.d.ts +0 -140
- package/user-manage/src/classes/notification.d.ts +0 -18
- package/user-manage/src/classes/pagination.d.ts +0 -13
- package/user-manage/src/classes/recording-options.d.ts +0 -5
- package/user-manage/src/classes/simplified-user.d.ts +0 -50
- package/user-manage/src/classes/table-data.d.ts +0 -5
- package/user-manage/src/classes/translation-pattern.d.ts +0 -18
- package/user-manage/src/classes/user-list.d.ts +0 -34
- package/user-manage/src/common-functions.d.ts +0 -1
- package/user-manage/src/device-list/device-list.component.d.ts +0 -11
- package/user-manage/src/environments/environment.d.ts +0 -9
- package/user-manage/src/interseptors/auth.interceptor.d.ts +0 -9
- package/user-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +0 -35
- package/user-manage/src/material.module.d.ts +0 -28
- package/user-manage/src/notifications/notification.component.d.ts +0 -19
- package/user-manage/src/removeKynFromIBM.service.d.ts +0 -8
- package/user-manage/src/services/api.service.d.ts +0 -21
- package/user-manage/src/services/dns.service.d.ts +0 -14
- package/user-manage/src/services/line.service.d.ts +0 -17
- package/user-manage/src/services/notification.service.d.ts +0 -18
- package/user-manage/src/services/removeKynFromIBM.service.d.ts +0 -8
- package/user-manage/src/services/site-settings.service.d.ts +0 -9
- package/user-manage/src/services/sorting-utils.service.d.ts +0 -26
- package/user-manage/src/services/user.service.d.ts +0 -43
- package/user-manage/src/services/users-search.service.d.ts +0 -25
- package/user-manage/src/services/utils.service.d.ts +0 -9
- package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.d.ts +0 -24
- package/user-manage/src/user-calling/user-calling.component.d.ts +0 -30
- package/user-manage/src/user-info/user-info.component.d.ts +0 -9
- package/user-manage/src/user-manage-widget.component.d.ts +0 -45
- package/user-manage/src/user-manage.module.d.ts +0 -21
- package/user-manage/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-manage/src/utils/pagination/pagination.component.d.ts +0 -18
- package/users-list/index.d.ts +0 -5
- package/users-list/src/app.constants.d.ts +0 -36
- package/users-list/src/classes/app-location.d.ts +0 -17
- package/users-list/src/classes/device.d.ts +0 -224
- package/users-list/src/classes/line.d.ts +0 -140
- package/users-list/src/classes/move-user.d.ts +0 -85
- package/users-list/src/classes/notification.d.ts +0 -18
- package/users-list/src/classes/pagination.d.ts +0 -13
- package/users-list/src/classes/simlified-user.d.ts +0 -25
- package/users-list/src/classes/table-data.d.ts +0 -5
- package/users-list/src/classes/user-list.d.ts +0 -36
- package/users-list/src/material.module.d.ts +0 -31
- package/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.d.ts +0 -21
- package/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.d.ts +0 -12
- package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +0 -55
- package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +0 -17
- package/users-list/src/services/api-webex.service.d.ts +0 -8
- package/users-list/src/services/api.service.d.ts +0 -21
- package/users-list/src/services/dns.service.d.ts +0 -18
- package/users-list/src/services/events-communication.service.d.ts +0 -8
- package/users-list/src/services/move-user.service.d.ts +0 -17
- package/users-list/src/services/notification.service.d.ts +0 -18
- package/users-list/src/services/removeKynFromIBM.service.d.ts +0 -8
- package/users-list/src/services/site-settings.service.d.ts +0 -11
- package/users-list/src/services/user.service.d.ts +0 -35
- package/users-list/src/services/users-search.service.d.ts +0 -34
- package/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.d.ts +0 -20
- package/users-list/src/users-list.component.d.ts +0 -60
- package/users-list/src/users-list.module.d.ts +0 -18
- package/users-list/src/utils/app-loader/app-loader.d.ts +0 -6
- package/users-list/src/utils/common-functions.d.ts +0 -2
- package/users-list/src/utils/pagination/pagination.component.d.ts +0 -18
- package/users-list/src/utils/utils.service.d.ts +0 -9
- /package/{di2mt → projects/tuki/widgets/di2mt}/README.md +0 -0
|
@@ -1,760 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { DeviceTypes, MailboxQuotasType, SpeedDialType, VMNotificationsTypes } from './../classes/types';
|
|
3
|
-
import { DeviceKind } from './../classes/device';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./site-settings.service";
|
|
6
|
-
const speedDialRegex = new RegExp('^[^"]*$');
|
|
7
|
-
const BLFRegex = new RegExp('^[^"><&%]*$');
|
|
8
|
-
const timeRegex = new RegExp('^([0-1][0-9]|[2][0-3]):([0-5][0-9])$');
|
|
9
|
-
export class ValidationService {
|
|
10
|
-
constructor(siteSettingsService) {
|
|
11
|
-
this.siteSettingsService = siteSettingsService;
|
|
12
|
-
this.matchControl = (fieldName) => {
|
|
13
|
-
return (control) => {
|
|
14
|
-
if (!control?.parent) {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
const matchingControl = control.parent.get(fieldName);
|
|
18
|
-
if (matchingControl.value && matchingControl.value !== control.value) {
|
|
19
|
-
return {
|
|
20
|
-
matchControl: true
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
return null;
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
this.matchLength = (fieldName) => {
|
|
27
|
-
return (control) => {
|
|
28
|
-
if (!control.parent || !control.value) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
const matchingControl = control.parent.get(fieldName);
|
|
32
|
-
if (((!control.value.startsWith('+') && !matchingControl.value.startsWith('+')) ||
|
|
33
|
-
(control.value.startsWith('+') && matchingControl.value.startsWith('+'))) &&
|
|
34
|
-
((!control.value.startsWith('\\+') && !matchingControl.value.startsWith('\\+')) ||
|
|
35
|
-
(control.value.startsWith('\\+') && matchingControl.value.startsWith('\\+'))) &&
|
|
36
|
-
matchingControl.value.length !== control.value.length) {
|
|
37
|
-
return {
|
|
38
|
-
matchLength: true
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
return null;
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
this.dynamicMaxLength = (length1, length2) => {
|
|
45
|
-
return (control) => {
|
|
46
|
-
if (!control.parent || !control.value) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
const maxLength = String(control.value).includes('[') ? length1 : length2;
|
|
50
|
-
if (control.value.length > maxLength) {
|
|
51
|
-
return {
|
|
52
|
-
maxLength: true
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
return null;
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
this.biggerThan = (fieldName) => {
|
|
59
|
-
return (control) => {
|
|
60
|
-
if (!control.parent || !control.value) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
const matchingControl = control.parent.get(fieldName);
|
|
64
|
-
if (matchingControl.value.length === control.value.length && matchingControl.value && matchingControl.value > control.value) {
|
|
65
|
-
return {
|
|
66
|
-
biggerThan: true
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
return null;
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
this.requiredByType = (fieldName, type) => {
|
|
73
|
-
return (control) => {
|
|
74
|
-
if (fieldName === 'phoneSystem' && (type === VMNotificationsTypes['Phone Device'] || type === VMNotificationsTypes['Pager Device']) ||
|
|
75
|
-
fieldName === 'htmlTemplate' && type === VMNotificationsTypes['HTML Device']) {
|
|
76
|
-
return {
|
|
77
|
-
required: true
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
return null;
|
|
81
|
-
};
|
|
82
|
-
};
|
|
83
|
-
this.smallerThanQuota = (fieldName, quotaType, secondQuotaType) => {
|
|
84
|
-
return (control) => {
|
|
85
|
-
if (!control.parent) {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
const matchingControl = control.parent.get(fieldName);
|
|
89
|
-
const quotaTypeControl = control.parent.get(quotaType);
|
|
90
|
-
const secondQuotaTypeControl = control.parent.get(secondQuotaType);
|
|
91
|
-
if (quotaTypeControl && secondQuotaTypeControl && secondQuotaTypeControl.value === MailboxQuotasType.system) {
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
if (quotaTypeControl && quotaTypeControl.value === MailboxQuotasType.system || matchingControl && matchingControl.value && parseInt(matchingControl.value) < parseInt(control.value)) {
|
|
95
|
-
return {
|
|
96
|
-
smallerThan: true
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
return null;
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
this.biggerThanQuota = (fieldName, quotaType) => {
|
|
103
|
-
return (control) => {
|
|
104
|
-
if (!control?.parent) {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
const matchingControl = control.parent.get(fieldName);
|
|
108
|
-
const quotaTypeControl = control.parent.get(quotaType);
|
|
109
|
-
if (quotaTypeControl && quotaTypeControl.value === MailboxQuotasType.custom && matchingControl.value && parseInt(matchingControl.value) > parseInt(control.value)) {
|
|
110
|
-
return {
|
|
111
|
-
biggerThan: true
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return null;
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
|
-
this.rangeLimit = (fieldName) => {
|
|
118
|
-
return (control) => {
|
|
119
|
-
if (!control?.parent || !control.value) {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
const matchingControl = control.parent.get(fieldName);
|
|
123
|
-
if ((control.value - matchingControl.value) > 50000) {
|
|
124
|
-
return {
|
|
125
|
-
rangeLimit: true
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
return null;
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
this.comparepatternParts = (fieldName) => {
|
|
132
|
-
return (control) => {
|
|
133
|
-
if (!control?.value) {
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
const matches = control.value.match(/\[(.*?)\]/);
|
|
137
|
-
if (matches) {
|
|
138
|
-
const submatch = matches[1];
|
|
139
|
-
const submatchsplit = submatch.split('-');
|
|
140
|
-
for (let i = 0; i < submatchsplit.length; i++) {
|
|
141
|
-
if (submatchsplit[i] >= submatchsplit[i + 1]) {
|
|
142
|
-
return {
|
|
143
|
-
comparepatternParts: true
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return null;
|
|
149
|
-
};
|
|
150
|
-
};
|
|
151
|
-
this.matchPrefix = (fieldName) => {
|
|
152
|
-
return (control) => {
|
|
153
|
-
if (!control?.parent || !control.value) {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
const matchingControl = control.parent.get(fieldName);
|
|
157
|
-
if ((matchingControl.value.startsWith('+') || control.value.startsWith('+') || matchingControl.value.startsWith('\\+') || control.value.startsWith('\\+')) && (control.value.charAt(0) !== matchingControl.value.charAt(0))) {
|
|
158
|
-
return {
|
|
159
|
-
matchPrefix: true
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
return null;
|
|
163
|
-
};
|
|
164
|
-
};
|
|
165
|
-
this.deviceNameValidator = (device) => {
|
|
166
|
-
return (control) => {
|
|
167
|
-
if (!control.value || device.deviceKind === DeviceKind.deviceProfile) {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
if (device.isCtiRoutePoint) {
|
|
171
|
-
let err = '';
|
|
172
|
-
if (!control.value.match(/^[a-zA-Z0-9-_.]+$/)) {
|
|
173
|
-
err = 'pattern';
|
|
174
|
-
}
|
|
175
|
-
if (control.value.trim().length > 15) {
|
|
176
|
-
err = 'maxLength';
|
|
177
|
-
}
|
|
178
|
-
return err ? { nameRule: err } : null;
|
|
179
|
-
}
|
|
180
|
-
if (device.deviceDefaults && !device.isCtiRoutePoint) {
|
|
181
|
-
const ruleText = device.deviceDefaults.deviceNameRegex;
|
|
182
|
-
const rule = new RegExp(ruleText, 'g');
|
|
183
|
-
const caption = device.deviceDefaults?.deviceNameExplained;
|
|
184
|
-
const match = (control.value || '').match(rule) || [];
|
|
185
|
-
const exactMatch = match && control.value === match[0];
|
|
186
|
-
if (rule && !exactMatch) {
|
|
187
|
-
return { nameRule: { caption } };
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return null;
|
|
191
|
-
};
|
|
192
|
-
};
|
|
193
|
-
this.deviceNameValueValidator = (device, deviceName) => {
|
|
194
|
-
return (control) => {
|
|
195
|
-
if (!control.value || device.deviceKind === DeviceKind.deviceProfile) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
if (device.name && device.alreadyUsedName && device.name === device.alreadyUsedName) {
|
|
199
|
-
return { nameRule: 'alreadyUsedName' };
|
|
200
|
-
}
|
|
201
|
-
if (device.isCtiRoutePoint) {
|
|
202
|
-
let err = '';
|
|
203
|
-
if (!deviceName.match(/^[a-zA-Z0-9-_.]+$/)) {
|
|
204
|
-
err = 'pattern';
|
|
205
|
-
}
|
|
206
|
-
if (deviceName.trim().length > 15) {
|
|
207
|
-
err = 'maxLength';
|
|
208
|
-
}
|
|
209
|
-
return err ? { nameRule: err } : null;
|
|
210
|
-
}
|
|
211
|
-
if (device.deviceDefaults && !device.isCtiRoutePoint) {
|
|
212
|
-
const ruleText = device.deviceDefaults.deviceNameRegex;
|
|
213
|
-
// console.log('Dev name rule - ', ruleText);
|
|
214
|
-
const rule = new RegExp(ruleText, 'g');
|
|
215
|
-
let caption = device.deviceDefaults.deviceNameExplained;
|
|
216
|
-
if (!caption) {
|
|
217
|
-
caption = ruleText;
|
|
218
|
-
}
|
|
219
|
-
const match = (deviceName || '').match(rule) || [];
|
|
220
|
-
const exactMatch = match && deviceName === match[0];
|
|
221
|
-
if (rule && !exactMatch) {
|
|
222
|
-
return { nameRule: { caption } };
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return null;
|
|
226
|
-
};
|
|
227
|
-
};
|
|
228
|
-
this.deviceDuplicatingNameValidator = (user, pkid, prefix) => {
|
|
229
|
-
return (control) => {
|
|
230
|
-
if (!control.value || !user || !user.devices || user.devices.length === 0) {
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
const deviceName = prefix ? `${prefix}${control.value}` : control.value;
|
|
234
|
-
const devicesWithTheSameName = user.devices.filter((device) => device.name === deviceName);
|
|
235
|
-
if (devicesWithTheSameName.length > 0) {
|
|
236
|
-
if (!pkid) { // For new device
|
|
237
|
-
return { duplicateNameRule: true };
|
|
238
|
-
}
|
|
239
|
-
else if (pkid !== devicesWithTheSameName[0].pkid) { // For updating device, avoid validating with itself
|
|
240
|
-
return { duplicateNameRule: true };
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
return null;
|
|
244
|
-
};
|
|
245
|
-
};
|
|
246
|
-
this.conditionalRequired = (fieldName, requiredConditionValues) => {
|
|
247
|
-
return (control) => {
|
|
248
|
-
const parent1 = control.parent;
|
|
249
|
-
if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value) {
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
if (requiredConditionValues.includes(parent1.get(fieldName).value) && !control.value) {
|
|
253
|
-
return {
|
|
254
|
-
required: true
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
return null;
|
|
258
|
-
};
|
|
259
|
-
};
|
|
260
|
-
this.conditionalRequiredForGroupAdmin = (fieldName, requiredConditionValues) => {
|
|
261
|
-
return (control) => {
|
|
262
|
-
const parent1 = control.parent;
|
|
263
|
-
if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value || !parent1.get(fieldName).value.type) {
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
if (requiredConditionValues.includes(parent1.get(fieldName).value.type) && !control.value) {
|
|
267
|
-
return {
|
|
268
|
-
required: true
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
return null;
|
|
272
|
-
};
|
|
273
|
-
};
|
|
274
|
-
this.conditionalSiteGroupCheckForGroupAdmin = (fieldName, requiredConditionValues) => {
|
|
275
|
-
return (control) => {
|
|
276
|
-
const parent1 = control.parent;
|
|
277
|
-
if (!parent1 || !parent1.get(fieldName) || !parent1.get(fieldName).value || !parent1.get(fieldName).value.type) {
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
if (parent1.get(fieldName).value && requiredConditionValues.includes(parent1.get(fieldName).value.type) &&
|
|
281
|
-
parent1.get('siteGroup') && parent1.get('siteGroup').value &&
|
|
282
|
-
parent1.get('siteGroup').value.siteGroupMembers && parent1.get('siteGroup').value.siteGroupMembers.length < 1) {
|
|
283
|
-
return {
|
|
284
|
-
hasSiteGroupError: true
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
return null;
|
|
288
|
-
};
|
|
289
|
-
};
|
|
290
|
-
this.requiredIfFieldIsEmptyForBLF = (fieldName) => {
|
|
291
|
-
const DATE_PATTERN = '^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d$';
|
|
292
|
-
return (control) => {
|
|
293
|
-
const parent = control.parent;
|
|
294
|
-
if (!parent || !parent.get(fieldName)) {
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
if (!parent.get(fieldName).value && !control.value) {
|
|
298
|
-
return {
|
|
299
|
-
requiredEither: true,
|
|
300
|
-
requiredBLFDN: true
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
return null;
|
|
304
|
-
};
|
|
305
|
-
};
|
|
306
|
-
this.validDate = (fieldName) => {
|
|
307
|
-
return (control) => {
|
|
308
|
-
const parent = control.parent;
|
|
309
|
-
const ruleText = '^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d$';
|
|
310
|
-
const rule = new RegExp(ruleText, 'g');
|
|
311
|
-
const val = control.value && control.value.getDate();
|
|
312
|
-
if (rule && !rule.test(val)) {
|
|
313
|
-
return { pattern: true };
|
|
314
|
-
}
|
|
315
|
-
return null;
|
|
316
|
-
};
|
|
317
|
-
};
|
|
318
|
-
this.matchOption = (optionType, list, isFullList) => {
|
|
319
|
-
return (control) => {
|
|
320
|
-
if (!control.value || control.value === DeviceTypes.CTI_ROUTE_POINT) {
|
|
321
|
-
return null;
|
|
322
|
-
}
|
|
323
|
-
let optionList = list || this.getOptionsList(optionType);
|
|
324
|
-
if (optionList && optionList.length) {
|
|
325
|
-
if (!isFullList && optionType === 'directoryNumbers') {
|
|
326
|
-
optionList = optionList.map((str) => str.indexOf(' ') > -1 ? str.substring(0, str.indexOf(' ')) : str);
|
|
327
|
-
}
|
|
328
|
-
if (!optionList.includes(control.value)) {
|
|
329
|
-
return {
|
|
330
|
-
matchOptions: true
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
return null;
|
|
335
|
-
};
|
|
336
|
-
};
|
|
337
|
-
this.confidentialAccessLevel = (confidentialAccessMode) => {
|
|
338
|
-
return (control) => {
|
|
339
|
-
if (!control.value && !confidentialAccessMode) {
|
|
340
|
-
return null;
|
|
341
|
-
}
|
|
342
|
-
if (!control.value) {
|
|
343
|
-
return {
|
|
344
|
-
required: true
|
|
345
|
-
};
|
|
346
|
-
}
|
|
347
|
-
return null;
|
|
348
|
-
};
|
|
349
|
-
};
|
|
350
|
-
this.noResultDN = (optionType, list) => {
|
|
351
|
-
return (control) => {
|
|
352
|
-
if (!control.value || list === null) {
|
|
353
|
-
return null;
|
|
354
|
-
}
|
|
355
|
-
if (list && list.length === 0) {
|
|
356
|
-
return {
|
|
357
|
-
noResultDNs: true
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
return null;
|
|
361
|
-
};
|
|
362
|
-
};
|
|
363
|
-
this.matchExtensionOption = (optionType, optionList) => {
|
|
364
|
-
return (control) => {
|
|
365
|
-
if (!control.value) {
|
|
366
|
-
return control.value;
|
|
367
|
-
}
|
|
368
|
-
// @ts-ignore
|
|
369
|
-
const newList = [];
|
|
370
|
-
if (optionList && optionList.length) {
|
|
371
|
-
optionList.forEach((list) => {
|
|
372
|
-
const newOptionList = this.getMatchExistingVmLineValue(list);
|
|
373
|
-
newList.push(newOptionList);
|
|
374
|
-
});
|
|
375
|
-
// @ts-ignore
|
|
376
|
-
if (newList && !newList.includes(control.value)) {
|
|
377
|
-
return {
|
|
378
|
-
matchOptions: true
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
else if (!optionList || !optionList.length) {
|
|
383
|
-
return {
|
|
384
|
-
matchOptions: true
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
return null;
|
|
388
|
-
};
|
|
389
|
-
};
|
|
390
|
-
this.requiredEitherForVmExtension = (fieldName1, fieldName2) => {
|
|
391
|
-
return (control) => {
|
|
392
|
-
if (!control.parent) {
|
|
393
|
-
return null;
|
|
394
|
-
}
|
|
395
|
-
const matchControl1 = control.parent.get(fieldName1).value;
|
|
396
|
-
const matchControl2 = control.parent.get(fieldName2).value;
|
|
397
|
-
if (!matchControl1 && !matchControl2) {
|
|
398
|
-
return {
|
|
399
|
-
requiredEitherForVmExtension: true
|
|
400
|
-
};
|
|
401
|
-
}
|
|
402
|
-
return null;
|
|
403
|
-
};
|
|
404
|
-
};
|
|
405
|
-
this.requiredEitherOne = (fieldName1, fieldName2) => {
|
|
406
|
-
return (control) => {
|
|
407
|
-
if (!control.parent) {
|
|
408
|
-
return null;
|
|
409
|
-
}
|
|
410
|
-
const matchControl1 = control.parent.get(fieldName1) && control.parent.get(fieldName1).value;
|
|
411
|
-
const matchControl2 = control.parent.get(fieldName2) && control.parent.get(fieldName2).value;
|
|
412
|
-
if (!matchControl1 && !matchControl2) {
|
|
413
|
-
return {
|
|
414
|
-
requiredEitherOne: true
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
return null;
|
|
418
|
-
};
|
|
419
|
-
};
|
|
420
|
-
this.requiredByValue = (fieldName, requestedFieldVal) => {
|
|
421
|
-
return (control) => {
|
|
422
|
-
if (!control || !control.parent) {
|
|
423
|
-
return null;
|
|
424
|
-
}
|
|
425
|
-
const fieldVal = control.parent.get(fieldName) && control.parent.get(fieldName).value;
|
|
426
|
-
if (fieldVal && fieldVal === requestedFieldVal && !control.value) {
|
|
427
|
-
return {
|
|
428
|
-
required: true
|
|
429
|
-
};
|
|
430
|
-
}
|
|
431
|
-
return null;
|
|
432
|
-
};
|
|
433
|
-
};
|
|
434
|
-
this.OneExtensionEmpty = (fieldName1, fieldName2) => {
|
|
435
|
-
return (control) => {
|
|
436
|
-
if (!control.parent) {
|
|
437
|
-
return null;
|
|
438
|
-
}
|
|
439
|
-
const matchControl1 = control.parent.get(fieldName1).value;
|
|
440
|
-
const matchControl2 = control.parent.get(fieldName2).value;
|
|
441
|
-
if (matchControl1 && matchControl2) {
|
|
442
|
-
return {
|
|
443
|
-
OneExtensionIsEmpty: true
|
|
444
|
-
};
|
|
445
|
-
}
|
|
446
|
-
return null;
|
|
447
|
-
};
|
|
448
|
-
};
|
|
449
|
-
this.requiredByCondition = (requiredBy, fieldName) => {
|
|
450
|
-
return (control) => {
|
|
451
|
-
if (!control.parent) {
|
|
452
|
-
return null;
|
|
453
|
-
}
|
|
454
|
-
const requiredByControl = control.parent.get(requiredBy).value;
|
|
455
|
-
const requiredControl = control.parent.get(fieldName).value;
|
|
456
|
-
if (requiredByControl && !requiredControl) {
|
|
457
|
-
return {
|
|
458
|
-
required: true
|
|
459
|
-
};
|
|
460
|
-
}
|
|
461
|
-
return null;
|
|
462
|
-
};
|
|
463
|
-
};
|
|
464
|
-
this.pinMultiCharacterCheck = (fieldName) => {
|
|
465
|
-
// @ts-ignore
|
|
466
|
-
return (control) => {
|
|
467
|
-
if (!control.parent) {
|
|
468
|
-
return null;
|
|
469
|
-
}
|
|
470
|
-
const matchingControl = control.parent.get(fieldName);
|
|
471
|
-
const ruleMultiCharacter = new RegExp('([0-9])\\1{2}');
|
|
472
|
-
if (matchingControl.value) {
|
|
473
|
-
const hasMultiCharacter = ruleMultiCharacter.test(matchingControl.value);
|
|
474
|
-
if (hasMultiCharacter) {
|
|
475
|
-
return {
|
|
476
|
-
multiCharacter: true
|
|
477
|
-
};
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
};
|
|
481
|
-
};
|
|
482
|
-
this.pinConsecutiveNumberCheck = (fieldName) => {
|
|
483
|
-
// @ts-ignore
|
|
484
|
-
return (control) => {
|
|
485
|
-
if (!control.parent) {
|
|
486
|
-
return null;
|
|
487
|
-
}
|
|
488
|
-
const matchingControl = control.parent.get(fieldName);
|
|
489
|
-
const strToCheck = matchingControl.value;
|
|
490
|
-
if (strToCheck && strToCheck.length > 1) {
|
|
491
|
-
const resAsc = this.pinOrderCheck(strToCheck);
|
|
492
|
-
if (resAsc === true) {
|
|
493
|
-
return {
|
|
494
|
-
consecutiveNumbers: true
|
|
495
|
-
};
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
};
|
|
499
|
-
};
|
|
500
|
-
this.pinMailboxExtensionCheck = (fieldName, extension) => {
|
|
501
|
-
return (control) => {
|
|
502
|
-
if (!control.parent) {
|
|
503
|
-
return null;
|
|
504
|
-
}
|
|
505
|
-
const matchingControl = control.parent.get(fieldName);
|
|
506
|
-
const strToCheck = matchingControl.value;
|
|
507
|
-
if (strToCheck === extension || strToCheck.includes(extension)) {
|
|
508
|
-
return {
|
|
509
|
-
mailboxExtension: true
|
|
510
|
-
};
|
|
511
|
-
}
|
|
512
|
-
return null;
|
|
513
|
-
};
|
|
514
|
-
};
|
|
515
|
-
}
|
|
516
|
-
e164MaskLabel(control) {
|
|
517
|
-
const ruleText = `^[0-9*#+X]{0,24}$`;
|
|
518
|
-
const rule = new RegExp(ruleText, 'g');
|
|
519
|
-
if (control.value && rule && !rule.test(control.value)) {
|
|
520
|
-
return { e164MaskRule: { rule: ruleText } };
|
|
521
|
-
}
|
|
522
|
-
return null;
|
|
523
|
-
}
|
|
524
|
-
index(control) {
|
|
525
|
-
const value = parseInt(control.value);
|
|
526
|
-
if (!value) {
|
|
527
|
-
return null;
|
|
528
|
-
}
|
|
529
|
-
const pattern = '^[+0-9]*$';
|
|
530
|
-
if (value && !Number.isInteger(value) || value < 1 || value > 199) {
|
|
531
|
-
return { indexRule: true };
|
|
532
|
-
}
|
|
533
|
-
return null;
|
|
534
|
-
}
|
|
535
|
-
displayLabel(control) {
|
|
536
|
-
const ruleText = `^[^""""%&<>]{0,30}$`;
|
|
537
|
-
const rule = new RegExp(ruleText, 'g');
|
|
538
|
-
if (rule && !rule.test(control.value)) {
|
|
539
|
-
return { labelRule: { rule: ruleText, count: 30 } };
|
|
540
|
-
}
|
|
541
|
-
return null;
|
|
542
|
-
}
|
|
543
|
-
displayLabelAscii(control) {
|
|
544
|
-
const ruleText = '^[a-zA-Z0-9 !#$\'()*+,./:;=?@\\^_`}~-]{0,30}$';
|
|
545
|
-
const rule = new RegExp(ruleText, 'g');
|
|
546
|
-
if (rule && !rule.test(control.value)) {
|
|
547
|
-
return { labelRule: { rule: ruleText, count: 30 } };
|
|
548
|
-
}
|
|
549
|
-
return null;
|
|
550
|
-
}
|
|
551
|
-
requiredForSpeedDialPosition(type) {
|
|
552
|
-
return (control) => {
|
|
553
|
-
const parent = control.parent;
|
|
554
|
-
if (type === SpeedDialType.slotBasic || !parent) {
|
|
555
|
-
return null;
|
|
556
|
-
}
|
|
557
|
-
if (!control.value) {
|
|
558
|
-
return { required: true };
|
|
559
|
-
}
|
|
560
|
-
return null;
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
speedDialDestination() {
|
|
564
|
-
return (control) => {
|
|
565
|
-
if (!control || !control.value) {
|
|
566
|
-
return null;
|
|
567
|
-
}
|
|
568
|
-
const numberOrHostNameIP = '' +
|
|
569
|
-
'^([0-9\\*#+PpCcFf,]+)$' +
|
|
570
|
-
'|' +
|
|
571
|
-
'^(' +
|
|
572
|
-
'([a-zA-Z0-9]){1,47}@' +
|
|
573
|
-
'(' +
|
|
574
|
-
'((?:[0-9]{1,3}\\.){3}[0-9]{1,3})' +
|
|
575
|
-
'|' +
|
|
576
|
-
'([a-zA-Z0-9][a-zA-Z0-9\\-]{1,61}[a-zA-Z0-9]\\.[a-zA-Z]{2,})' +
|
|
577
|
-
')' +
|
|
578
|
-
')$';
|
|
579
|
-
const rule = new RegExp(numberOrHostNameIP, 'g');
|
|
580
|
-
if (rule && !rule.test(control.value)) {
|
|
581
|
-
return { pattern: true };
|
|
582
|
-
}
|
|
583
|
-
return null;
|
|
584
|
-
};
|
|
585
|
-
}
|
|
586
|
-
requiredForSpeedDialDestination(type) {
|
|
587
|
-
return (control) => {
|
|
588
|
-
const parent = control.parent;
|
|
589
|
-
if ((!parent || !parent.get('label')) || (type === SpeedDialType.slotBasic && !control.value && !parent.get('label').value)) {
|
|
590
|
-
return null;
|
|
591
|
-
}
|
|
592
|
-
return null;
|
|
593
|
-
};
|
|
594
|
-
}
|
|
595
|
-
labelPatternDependingOnType(control) {
|
|
596
|
-
const parent = control?.parent;
|
|
597
|
-
if (!parent || !parent.get('type') || !control.value) {
|
|
598
|
-
return null;
|
|
599
|
-
}
|
|
600
|
-
const type = parent.get('type').value;
|
|
601
|
-
if (!type && !speedDialRegex.test(control.value)) {
|
|
602
|
-
return { labelRule: { wrong: '"' } };
|
|
603
|
-
}
|
|
604
|
-
if (type && !BLFRegex.test(control.value)) {
|
|
605
|
-
return { labelRule: { wrong: '"><&%' } };
|
|
606
|
-
}
|
|
607
|
-
return null;
|
|
608
|
-
}
|
|
609
|
-
labelPatternBLF(control) {
|
|
610
|
-
if (control.value && !BLFRegex.test(control.value)) {
|
|
611
|
-
return { labelRule: { wrong: '"><&%' } };
|
|
612
|
-
}
|
|
613
|
-
return null;
|
|
614
|
-
}
|
|
615
|
-
labelPatternSpeedDial(control) {
|
|
616
|
-
if (control?.value && !speedDialRegex.test(control.value)) {
|
|
617
|
-
return { labelRule: { wrong: '"' } };
|
|
618
|
-
}
|
|
619
|
-
return null;
|
|
620
|
-
}
|
|
621
|
-
getMatchExistingVmLineValue(dnWithType) {
|
|
622
|
-
const ind = dnWithType.indexOf('Type:');
|
|
623
|
-
let dn = dnWithType;
|
|
624
|
-
if (ind > -1) {
|
|
625
|
-
dn = dnWithType.slice(0, ind);
|
|
626
|
-
dn = dn.trim();
|
|
627
|
-
}
|
|
628
|
-
return dn;
|
|
629
|
-
}
|
|
630
|
-
getOptionsList(token) {
|
|
631
|
-
switch (token) {
|
|
632
|
-
case 'css':
|
|
633
|
-
case 'rerouteCss':
|
|
634
|
-
case 'callingSearchSpace':
|
|
635
|
-
return this.siteSettingsService.callingSearchSpaceTypes;
|
|
636
|
-
case 'reroutingCss':
|
|
637
|
-
return this.siteSettingsService.siteDefaults && this.siteSettingsService.siteDefaults.cssFilter;
|
|
638
|
-
case 'deviceType':
|
|
639
|
-
return this.siteSettingsService.deviceTypes;
|
|
640
|
-
case 'routePartition':
|
|
641
|
-
return this.siteSettingsService.routePartitionNames;
|
|
642
|
-
case 'routePartitionFiltered':
|
|
643
|
-
return this.siteSettingsService.filteredRoutePartitionNames;
|
|
644
|
-
case 'devicePools':
|
|
645
|
-
return this.siteSettingsService.devicePools;
|
|
646
|
-
case 'allRoutePartitions':
|
|
647
|
-
return this.siteSettingsService.allRoutePartitionNames;
|
|
648
|
-
case 'directoryNumbers':
|
|
649
|
-
return this.siteSettingsService.directoryNumbers;
|
|
650
|
-
default:
|
|
651
|
-
return [];
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
autocompleteType(control) {
|
|
655
|
-
if (!control.value) {
|
|
656
|
-
return null;
|
|
657
|
-
}
|
|
658
|
-
if (typeof control.value !== 'object' && control.value !== '') {
|
|
659
|
-
return {
|
|
660
|
-
stringEntered: true
|
|
661
|
-
};
|
|
662
|
-
}
|
|
663
|
-
return null;
|
|
664
|
-
}
|
|
665
|
-
password(control) {
|
|
666
|
-
const ruleNumeric = new RegExp(/\d+/, 'g');
|
|
667
|
-
const ruleCapitals = new RegExp(/[A-Z]+/, 'g');
|
|
668
|
-
const ruleSmall = new RegExp(/[a-z]+/, 'g');
|
|
669
|
-
const ruleSpecial = new RegExp(/[!@#$%&\/=\?_\.,:;\-\\+]+/, 'g');
|
|
670
|
-
const hasNumeric = +ruleNumeric.test(control.value);
|
|
671
|
-
const hasCapitals = +ruleCapitals.test(control.value);
|
|
672
|
-
const hasSmall = +ruleSmall.test(control.value);
|
|
673
|
-
const hasSpecial = +ruleSpecial.test(control.value);
|
|
674
|
-
if (hasNumeric + hasCapitals + hasSmall + hasSpecial < 3) {
|
|
675
|
-
return {
|
|
676
|
-
weakPassword: true
|
|
677
|
-
};
|
|
678
|
-
}
|
|
679
|
-
return null;
|
|
680
|
-
}
|
|
681
|
-
verifyAutoAnswer(control) {
|
|
682
|
-
if (!control?.value || control.value.length === 0) {
|
|
683
|
-
return null;
|
|
684
|
-
}
|
|
685
|
-
let autoAnswerErrorLine = null;
|
|
686
|
-
if (control.parent && control.parent.parent && control.parent.parent.parent && control.parent.parent.parent.parent) {
|
|
687
|
-
const controlSNR = control.parent;
|
|
688
|
-
const controlUser = control.parent.parent.parent.parent;
|
|
689
|
-
const lineAssociations = controlSNR.get('lineAssociations');
|
|
690
|
-
const lines = controlUser.get('lines');
|
|
691
|
-
if (lines) {
|
|
692
|
-
lineAssociations.value.forEach((lineAssociation) => {
|
|
693
|
-
const autoAnswerLine = lines.controls.find((line) => line.get('directoryNumber').value.directoryNumber === lineAssociation.directoryNumber && line.get('directoryNumber').value.routePartitionName === lineAssociation.routePartitionName
|
|
694
|
-
&& line.get('autoAnswer').value !== 'Auto Answer Off');
|
|
695
|
-
if (autoAnswerLine) {
|
|
696
|
-
autoAnswerErrorLine = {
|
|
697
|
-
autoAnswerErrorLine: lineAssociation.directoryNumber
|
|
698
|
-
};
|
|
699
|
-
}
|
|
700
|
-
});
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
return autoAnswerErrorLine;
|
|
704
|
-
}
|
|
705
|
-
verifyBeginEndTime(control) {
|
|
706
|
-
const parent = control.parent;
|
|
707
|
-
if (!parent || !parent.get('isActive') || !parent.get('allDay') || !parent.get('from') || !parent.get('to')) {
|
|
708
|
-
return null;
|
|
709
|
-
}
|
|
710
|
-
if (parent.get('isActive').value) {
|
|
711
|
-
if (!parent.get('allDay').value) {
|
|
712
|
-
if (!parent.get('from').value || parent.get('from').value === 'No Office Hours'
|
|
713
|
-
|| !parent.get('to').value || parent.get('to').value === 'No Office Hours'
|
|
714
|
-
|| parent.get('from').value > parent.get('to').value) {
|
|
715
|
-
return {
|
|
716
|
-
fromGreaterThanTo: true
|
|
717
|
-
};
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
return null;
|
|
722
|
-
}
|
|
723
|
-
time(control) {
|
|
724
|
-
if (control.value && !timeRegex.test(control.value)) {
|
|
725
|
-
return { timeFormat: true };
|
|
726
|
-
}
|
|
727
|
-
return null;
|
|
728
|
-
}
|
|
729
|
-
pinOrderCheck(str) {
|
|
730
|
-
if (str) {
|
|
731
|
-
const arr_num = ('' + str).split('');
|
|
732
|
-
for (let i = 0; i < arr_num.length - 2; i++) {
|
|
733
|
-
const num1 = parseInt(arr_num[i]);
|
|
734
|
-
const num2 = parseInt(arr_num[i + 1]);
|
|
735
|
-
const num3 = parseInt(arr_num[i + 2]);
|
|
736
|
-
if ((num2 - num1) === 1 && (num3 - num2 === num2 - num1)) {
|
|
737
|
-
return true;
|
|
738
|
-
}
|
|
739
|
-
}
|
|
740
|
-
return false;
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
isItemAlreadyInList(item, list) {
|
|
744
|
-
if (!item || !list || !list.length) {
|
|
745
|
-
return false;
|
|
746
|
-
}
|
|
747
|
-
for (const listItem of list) {
|
|
748
|
-
if (item.equals(listItem)) {
|
|
749
|
-
return true;
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
return false;
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
ValidationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ValidationService, deps: [{ token: i1.SiteSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
756
|
-
ValidationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ValidationService });
|
|
757
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ValidationService, decorators: [{
|
|
758
|
-
type: Injectable
|
|
759
|
-
}], ctorParameters: function () { return [{ type: i1.SiteSettingsService }]; } });
|
|
760
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RyxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUV6RCxNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBR3JFLE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFDVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTZIbEQsaUJBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO29CQUNwQixPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxlQUFlLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRTtvQkFDcEUsT0FBTzt3QkFDTCxZQUFZLEVBQUUsSUFBSTtxQkFDbkIsQ0FB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SSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO29CQUN4RCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFtQkQsbUJBQW1CLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzsrR0FqekJVLGlCQUFpQjttSEFBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaXRlU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi9zaXRlLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGV2aWNlVHlwZXMsIE1haWxib3hRdW90YXNUeXBlLCBTcGVlZERpYWxUeXBlLCBWTU5vdGlmaWNhdGlvbnNUeXBlcyB9IGZyb20gJy4vLi4vY2xhc3Nlcy90eXBlcyc7XG5pbXBvcnQgeyBEZXZpY2UsIERldmljZUtpbmQgfSBmcm9tICcuLy4uL2NsYXNzZXMvZGV2aWNlJztcblxuY29uc3Qgc3BlZWREaWFsUmVnZXggPSBuZXcgUmVnRXhwKCdeW15cIl0qJCcpO1xuY29uc3QgQkxGUmVnZXggPSBuZXcgUmVnRXhwKCdeW15cIj48JiVdKiQnKTtcbmNvbnN0IHRpbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oWzAtMV1bMC05XXxbMl1bMC0zXSk6KFswLTVdWzAtOV0pJCcpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2l0ZVNldHRpbmdzU2VydmljZTogU2l0ZVNldHRpbmdzU2VydmljZSxcbiAgKSB7XG4gIH1cblxuICBlMTY0TWFza0xhYmVsKGNvbnRyb2w6IGFueSkge1xuICAgIGNvbnN0IHJ1bGVUZXh0ID0gYF5bMC05KiMrWF17MCwyNH0kYDtcbiAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7ZTE2NE1hc2tSdWxlOiB7cnVsZTogcnVsZVRleHR9fTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbmRleChjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGNvbnRyb2wudmFsdWUpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwYXR0ZXJuID0gJ15bKzAtOV0qJCc7XG4gICAgaWYgKHZhbHVlICYmICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEgfHwgdmFsdWUgPiAxOTkpIHtcbiAgICAgIHJldHVybiB7aW5kZXhSdWxlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkaXNwbGF5TGFiZWwoY29udHJvbDogYW55KSB7XG4gICAgY29uc3QgcnVsZVRleHQgPSBgXlteXCJcIlwiXCIlJjw+XXswLDMwfSRgO1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgIGlmIChydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7bGFiZWxSdWxlOiB7cnVsZTogcnVsZVRleHQsIGNvdW50OiAzMH19O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cblxuICBkaXNwbGF5TGFiZWxBc2NpaShjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBydWxlVGV4dCA9ICdeW2EtekEtWjAtOSAhIyRcXCcoKSorLC4vOjs9P0BcXFxcXl9gfX4tXXswLDMwfSQnO1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgIGlmIChydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7bGFiZWxSdWxlOiB7cnVsZTogcnVsZVRleHQsIGNvdW50OiAzMH19O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlcXVpcmVkRm9yU3BlZWREaWFsUG9zaXRpb24odHlwZTogc3RyaW5nKSB7XG5cbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBpZiAodHlwZSA9PT0gU3BlZWREaWFsVHlwZS5zbG90QmFzaWMgfHwgIXBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzcGVlZERpYWxEZXN0aW5hdGlvbigpIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtYmVyT3JIb3N0TmFtZUlQID0gJycgK1xuICAgICAgICAnXihbMC05XFxcXCojK1BwQ2NGZixdKykkJyArXG4gICAgICAgICd8JyArXG4gICAgICAgICdeKCcgK1xuICAgICAgICAnKFthLXpBLVowLTldKXsxLDQ3fUAnICtcbiAgICAgICAgJygnICtcbiAgICAgICAgJygoPzpbMC05XXsxLDN9XFxcXC4pezN9WzAtOV17MSwzfSknICtcbiAgICAgICAgJ3wnICtcbiAgICAgICAgJyhbYS16QS1aMC05XVthLXpBLVowLTlcXFxcLV17MSw2MX1bYS16QS1aMC05XVxcXFwuW2EtekEtWl17Mix9KScgK1xuICAgICAgICAnKScgK1xuICAgICAgICAnKSQnO1xuICAgICAgY29uc3QgcnVsZSA9IG5ldyBSZWdFeHAobnVtYmVyT3JIb3N0TmFtZUlQLCAnZycpO1xuICAgICAgaWYgKHJ1bGUgJiYgIXJ1bGUudGVzdChjb250cm9sLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge3BhdHRlcm46IHRydWV9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICB9XG5cbiAgcmVxdWlyZWRGb3JTcGVlZERpYWxEZXN0aW5hdGlvbih0eXBlOiBzdHJpbmcpIHtcblxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICgoIXBhcmVudCB8fCAhcGFyZW50LmdldCgnbGFiZWwnKSkgfHwgKHR5cGUgPT09IFNwZWVkRGlhbFR5cGUuc2xvdEJhc2ljICYmICFjb250cm9sLnZhbHVlICYmICFwYXJlbnQuZ2V0KCdsYWJlbCcpLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuXG4gIGxhYmVsUGF0dGVybkRlcGVuZGluZ09uVHlwZShjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sPy5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5nZXQoJ3R5cGUnKSB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBwYXJlbnQuZ2V0KCd0eXBlJykudmFsdWU7XG4gICAgaWYgKCF0eXBlICYmICFzcGVlZERpYWxSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCInfX07XG4gICAgfVxuICAgIGlmICh0eXBlICYmICFCTEZSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCI+PCYlJ319O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxhYmVsUGF0dGVybkJMRihjb250cm9sOiBhbnkpIHtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiAhQkxGUmVnZXgudGVzdChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtsYWJlbFJ1bGU6IHt3cm9uZzogJ1wiPjwmJSd9fTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsYWJlbFBhdHRlcm5TcGVlZERpYWwoY29udHJvbDogYW55KSB7XG4gICAgaWYgKGNvbnRyb2w/LnZhbHVlICYmICFzcGVlZERpYWxSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCInfX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbWF0Y2hDb250cm9sID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbD8ucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAobWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSAhPT0gY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hdGNoQ29udHJvbDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBtYXRjaExlbmd0aCA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAoKCghY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykgJiYgIW1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykpIHx8XG4gICAgICAgIChjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnKycpKSkgJiZcbiAgICAgICAgKCghY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpICYmICFtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnXFxcXCsnKSkgfHxcbiAgICAgICAgICAoY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpKSkgJiZcbiAgICAgICAgbWF0Y2hpbmdDb250cm9sLnZhbHVlLmxlbmd0aCAhPT0gY29udHJvbC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXRjaExlbmd0aDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkeW5hbWljTWF4TGVuZ3RoID0gKGxlbmd0aDE6IG51bWJlciwgbGVuZ3RoMjogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhMZW5ndGggPSBTdHJpbmcoY29udHJvbC52YWx1ZSkuaW5jbHVkZXMoJ1snKSA/IGxlbmd0aDEgOiBsZW5ndGgyO1xuICAgICAgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4TGVuZ3RoOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIGJpZ2dlclRoYW4gPSAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKG1hdGNoaW5nQ29udHJvbC52YWx1ZS5sZW5ndGggPT09IGNvbnRyb2wudmFsdWUubGVuZ3RoICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUgPiBjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmlnZ2VyVGhhbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEJ5VHlwZSA9IChmaWVsZE5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGROYW1lID09PSAncGhvbmVTeXN0ZW0nICYmICh0eXBlID09PSBWTU5vdGlmaWNhdGlvbnNUeXBlc1snUGhvbmUgRGV2aWNlJ10gfHwgdHlwZSA9PT0gVk1Ob3RpZmljYXRpb25zVHlwZXNbJ1BhZ2VyIERldmljZSddKSB8fFxuICAgICAgICBmaWVsZE5hbWUgPT09ICdodG1sVGVtcGxhdGUnICYmIHR5cGUgPT09IFZNTm90aWZpY2F0aW9uc1R5cGVzWydIVE1MIERldmljZSddXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBzbWFsbGVyVGhhblF1b3RhID0gKGZpZWxkTmFtZTogc3RyaW5nLCBxdW90YVR5cGU6IHN0cmluZywgc2Vjb25kUXVvdGFUeXBlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgcXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChxdW90YVR5cGUpO1xuICAgICAgY29uc3Qgc2Vjb25kUXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChzZWNvbmRRdW90YVR5cGUpO1xuXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBzZWNvbmRRdW90YVR5cGVDb250cm9sICYmIHNlY29uZFF1b3RhVHlwZUNvbnRyb2wudmFsdWUgPT09IE1haWxib3hRdW90YXNUeXBlLnN5c3RlbSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHF1b3RhVHlwZUNvbnRyb2wgJiYgcXVvdGFUeXBlQ29udHJvbC52YWx1ZSA9PT0gTWFpbGJveFF1b3Rhc1R5cGUuc3lzdGVtIHx8IG1hdGNoaW5nQ29udHJvbCAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUgJiYgcGFyc2VJbnQobWF0Y2hpbmdDb250cm9sLnZhbHVlKSA8IHBhcnNlSW50KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc21hbGxlclRoYW46IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgYmlnZ2VyVGhhblF1b3RhID0gKGZpZWxkTmFtZTogc3RyaW5nLCBxdW90YVR5cGU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2w/LnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgcXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChxdW90YVR5cGUpO1xuXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBxdW90YVR5cGVDb250cm9sLnZhbHVlID09PSBNYWlsYm94UXVvdGFzVHlwZS5jdXN0b20gJiYgbWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIHBhcnNlSW50KG1hdGNoaW5nQ29udHJvbC52YWx1ZSkgPiBwYXJzZUludChjb250cm9sLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJpZ2dlclRoYW46IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgcmFuZ2VMaW1pdCA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2w/LnBhcmVudCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKChjb250cm9sLnZhbHVlIC0gbWF0Y2hpbmdDb250cm9sLnZhbHVlKSA+IDUwMDAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmFuZ2VMaW1pdDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb21wYXJlcGF0dGVyblBhcnRzID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGVzID0gY29udHJvbC52YWx1ZS5tYXRjaCgvXFxbKC4qPylcXF0vKTtcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IHN1Ym1hdGNoID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgY29uc3Qgc3VibWF0Y2hzcGxpdDogbnVtYmVyW10gPSBzdWJtYXRjaC5zcGxpdCgnLScpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1Ym1hdGNoc3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoc3VibWF0Y2hzcGxpdFtpXSA+PSBzdWJtYXRjaHNwbGl0W2kgKyAxXSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29tcGFyZXBhdHRlcm5QYXJ0czogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgbWF0Y2hQcmVmaXggPSAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sPy5wYXJlbnQgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGlmICgobWF0Y2hpbmdDb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSB8fCBjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSB8fCBtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnXFxcXCsnKSB8fCBjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJ1xcXFwrJykpICYmIChjb250cm9sLnZhbHVlLmNoYXJBdCgwKSAhPT0gbWF0Y2hpbmdDb250cm9sLnZhbHVlLmNoYXJBdCgwKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXRjaFByZWZpeDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkZXZpY2VOYW1lVmFsaWRhdG9yID0gKGRldmljZTogRGV2aWNlKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBkZXZpY2UuZGV2aWNlS2luZCA9PT0gRGV2aWNlS2luZC5kZXZpY2VQcm9maWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkZXZpY2UuaXNDdGlSb3V0ZVBvaW50KSB7XG4gICAgICAgIGxldCBlcnIgPSAnJztcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlLm1hdGNoKC9eW2EtekEtWjAtOS1fLl0rJC8pKSB7XG4gICAgICAgICAgZXJyID0gJ3BhdHRlcm4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlLnRyaW0oKS5sZW5ndGggPiAxNSkge1xuICAgICAgICAgIGVyciA9ICdtYXhMZW5ndGgnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnIgPyB7bmFtZVJ1bGU6IGVycn0gOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5kZXZpY2VEZWZhdWx0cyAmJiAhZGV2aWNlLmlzQ3RpUm91dGVQb2ludCkge1xuICAgICAgICBjb25zdCBydWxlVGV4dCA9IGRldmljZS5kZXZpY2VEZWZhdWx0cy5kZXZpY2VOYW1lUmVnZXg7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgICAgICBjb25zdCBjYXB0aW9uID0gZGV2aWNlLmRldmljZURlZmF1bHRzPy5kZXZpY2VOYW1lRXhwbGFpbmVkO1xuICAgICAgICBjb25zdCBtYXRjaCA9IChjb250cm9sLnZhbHVlIHx8ICcnKS5tYXRjaChydWxlKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZXhhY3RNYXRjaCA9IG1hdGNoICYmIGNvbnRyb2wudmFsdWUgPT09IG1hdGNoWzBdO1xuICAgICAgICBpZiAocnVsZSAmJiAhZXhhY3RNYXRjaCkge1xuICAgICAgICAgIHJldHVybiB7bmFtZVJ1bGU6IHtjYXB0aW9ufX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgZGV2aWNlTmFtZVZhbHVlVmFsaWRhdG9yID0gKGRldmljZTogRGV2aWNlLCBkZXZpY2VOYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGRldmljZS5kZXZpY2VLaW5kID09PSBEZXZpY2VLaW5kLmRldmljZVByb2ZpbGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5uYW1lICYmIGRldmljZS5hbHJlYWR5VXNlZE5hbWUgJiYgZGV2aWNlLm5hbWUgPT09IGRldmljZS5hbHJlYWR5VXNlZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtuYW1lUnVsZTogJ2FscmVhZHlVc2VkTmFtZSd9O1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5pc0N0aVJvdXRlUG9pbnQpIHtcbiAgICAgICAgbGV0IGVyciA9ICcnO1xuICAgICAgICBpZiAoIWRldmljZU5hbWUubWF0Y2goL15bYS16QS1aMC05LV8uXSskLykpIHtcbiAgICAgICAgICBlcnIgPSAncGF0dGVybic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRldmljZU5hbWUudHJpbSgpLmxlbmd0aCA+IDE1KSB7XG4gICAgICAgICAgZXJyID0gJ21heExlbmd0aCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyciA/IHtuYW1lUnVsZTogZXJyfSA6IG51bGw7XG4gICAgICB9XG4gICAgIGlmIChkZXZpY2UuZGV2aWNlRGVmYXVsdHMgJiYgIWRldmljZS5pc0N0aVJvdXRlUG9pbnQpIHtcbiAgICAgICBjb25zdCBydWxlVGV4dCA9IGRldmljZS5kZXZpY2VEZWZhdWx0cy5kZXZpY2VOYW1lUmVnZXg7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdEZXYgbmFtZSBydWxlIC0gJywgcnVsZVRleHQpO1xuICAgICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICAgICAgbGV0IGNhcHRpb24gPSBkZXZpY2UuZGV2aWNlRGVmYXVsdHMuZGV2aWNlTmFtZUV4cGxhaW5lZDtcbiAgICAgICAgaWYgKCFjYXB0aW9uKSB7XG4gICAgICAgICAgY2FwdGlvbiA9IHJ1bGVUZXh0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoID0gKGRldmljZU5hbWUgfHwgJycpLm1hdGNoKHJ1bGUpIHx8IFtdO1xuICAgICAgICBjb25zdCBleGFjdE1hdGNoID0gbWF0Y2ggJiYgZGV2aWNlTmFtZSA9PT0gbWF0Y2hbMF07XG4gICAgICAgIGlmIChydWxlICYmICFleGFjdE1hdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIHtuYW1lUnVsZToge2NhcHRpb259fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkZXZpY2VEdXBsaWNhdGluZ05hbWVWYWxpZGF0b3IgPSAodXNlcjogYW55LCBwa2lkID86IHN0cmluZywgcHJlZml4Pzogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCAhdXNlciB8fCAhdXNlci5kZXZpY2VzIHx8IHVzZXIuZGV2aWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGV2aWNlTmFtZSA9IHByZWZpeCA/IGAke3ByZWZpeH0ke2NvbnRyb2wudmFsdWV9YCA6IGNvbnRyb2wudmFsdWU7XG4gICAgICBjb25zdCBkZXZpY2VzV2l0aFRoZVNhbWVOYW1lID0gdXNlci5kZXZpY2VzLmZpbHRlcigoZGV2aWNlOiBEZXZpY2UpID0+IGRldmljZS5uYW1lID09PSBkZXZpY2VOYW1lKTtcbiAgICAgIGlmIChkZXZpY2VzV2l0aFRoZVNhbWVOYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFwa2lkKSB7ICAvLyBGb3IgbmV3IGRldmljZVxuICAgICAgICAgIHJldHVybiB7ZHVwbGljYXRlTmFtZVJ1bGU6IHRydWV9O1xuICAgICAgICB9IGVsc2UgaWYgKHBraWQgIT09IGRldmljZXNXaXRoVGhlU2FtZU5hbWVbMF0ucGtpZCkgeyAvLyBGb3IgdXBkYXRpbmcgZGV2aWNlLCBhdm9pZCB2YWxpZGF0aW5nIHdpdGggaXRzZWxmXG4gICAgICAgICAgcmV0dXJuIHtkdXBsaWNhdGVOYW1lUnVsZTogdHJ1ZX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgY29uZGl0aW9uYWxSZXF1aXJlZCA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWlyZWRDb25kaXRpb25WYWx1ZXM6IGFueVtdKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudDEgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICghcGFyZW50MSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmVxdWlyZWRDb25kaXRpb25WYWx1ZXMuaW5jbHVkZXMocGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSkgJiYgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb25kaXRpb25hbFJlcXVpcmVkRm9yR3JvdXBBZG1pbiA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWlyZWRDb25kaXRpb25WYWx1ZXM6IGFueVtdKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudDEgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICghcGFyZW50MSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZS50eXBlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1aXJlZENvbmRpdGlvblZhbHVlcy5pbmNsdWRlcyhwYXJlbnQxLmdldChmaWVsZE5hbWUpLnZhbHVlLnR5cGUpICYmICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgY29uZGl0aW9uYWxTaXRlR3JvdXBDaGVja0Zvckdyb3VwQWRtaW4gPSAoZmllbGROYW1lOiBzdHJpbmcsIHJlcXVpcmVkQ29uZGl0aW9uVmFsdWVzOiBhbnlbXSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQxID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBpZiAoIXBhcmVudDEgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUudHlwZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSAmJiByZXF1aXJlZENvbmRpdGlvblZhbHVlcy5pbmNsdWRlcyhwYXJlbnQxLmdldChmaWVsZE5hbWUpLnZhbHVlLnR5cGUpICYmXG4gICAgICAgIHBhcmVudDEuZ2V0KCdzaXRlR3JvdXAnKSAmJiBwYXJlbnQxLmdldCgnc2l0ZUdyb3VwJykudmFsdWUgJiZcbiAgICAgICAgcGFyZW50MS5nZXQoJ3NpdGVHcm91cCcpLnZhbHVlLnNpdGVHcm91cE1lbWJlcnMgJiYgcGFyZW50MS5nZXQoJ3NpdGVHcm91cCcpLnZhbHVlLnNpdGVHcm91cE1lbWJlcnMubGVuZ3RoIDwgMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhhc1NpdGVHcm91cEVycm9yOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHJlcXVpcmVkSWZGaWVsZElzRW1wdHlGb3JCTEYgPSAoZmllbGROYW1lOiBhbnkpID0+IHtcbiAgICBjb25zdCBEQVRFX1BBVFRFUk4gPSAnXigwWzEtOV18MVswMTJdKVstIFxcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMTl8MjApXFxkXFxkJCc7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5nZXQoZmllbGROYW1lKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghcGFyZW50LmdldChmaWVsZE5hbWUpLnZhbHVlICYmICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWRFaXRoZXI6IHRydWUsXG4gICAgICAgICAgcmVxdWlyZWRCTEZETjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuXG4gIHZhbGlkRGF0ZSA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgY29uc3QgcnVsZVRleHQgPSAnXigwWzEtOV18MVswMTJdKVstIFxcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMTl8MjApXFxkXFxkJCc7XG4gICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5nZXREYXRlKCk7XG4gICAgICBpZiAocnVsZSAmJiAhcnVsZS50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtwYXR0ZXJuOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cblxuICBtYXRjaE9wdGlvbiA9IChvcHRpb25UeXBlOiBzdHJpbmcsIGxpc3Q/OiBhbnksIGlzRnVsbExpc3Q/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlID09PSBEZXZpY2VUeXBlcy5DVElfUk9VVEVfUE9JTlQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBsZXQgb3B0aW9uTGlzdCA9IGxpc3QgfHwgdGhpcy5nZXRPcHRpb25zTGlzdChvcHRpb25UeXBlKTtcbiAgICAgIGlmIChvcHRpb25MaXN0ICYmIG9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGlmICghaXNGdWxsTGlzdCAmJiBvcHRpb25UeXBlID09PSAnZGlyZWN0b3J5TnVtYmVycycpIHtcbiAgICAgICAgICBvcHRpb25MaXN0ID0gb3B0aW9uTGlzdC5tYXAoKHN0cjogc3RyaW5nKSA9PiBzdHIuaW5kZXhPZignICcpID4gLTEgPyBzdHIuc3Vic3RyaW5nKDAsIHN0ci5pbmRleE9mKCcgJykpIDogc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbkxpc3QuaW5jbHVkZXMoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWF0Y2hPcHRpb25zOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb25maWRlbnRpYWxBY2Nlc3NMZXZlbCA9IChjb25maWRlbnRpYWxBY2Nlc3NNb2RlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlICYmICFjb25maWRlbnRpYWxBY2Nlc3NNb2RlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgbm9SZXN1bHRETiA9IChvcHRpb25UeXBlOiBzdHJpbmcsIGxpc3Q/OiBhbnkpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGxpc3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vUmVzdWx0RE5zOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIG1hdGNoRXh0ZW5zaW9uT3B0aW9uID0gKG9wdGlvblR5cGU6IHN0cmluZywgb3B0aW9uTGlzdD86IGFueSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBuZXdMaXN0ID0gW107XG4gICAgICBpZiAob3B0aW9uTGlzdCAmJiBvcHRpb25MaXN0Lmxlbmd0aCkge1xuICAgICAgICBvcHRpb25MaXN0LmZvckVhY2goKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld09wdGlvbkxpc3QgPSB0aGlzLmdldE1hdGNoRXhpc3RpbmdWbUxpbmVWYWx1ZShsaXN0KTtcbiAgICAgICAgICBuZXdMaXN0LnB1c2gobmV3T3B0aW9uTGlzdCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChuZXdMaXN0ICYmICFuZXdMaXN0LmluY2x1ZGVzKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1hdGNoT3B0aW9uczogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbkxpc3QgfHwgIW9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF0Y2hPcHRpb25zOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHB1YmxpYyBnZXRNYXRjaEV4aXN0aW5nVm1MaW5lVmFsdWUoZG5XaXRoVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbmQgPSBkbldpdGhUeXBlLmluZGV4T2YoJ1R5cGU6Jyk7XG4gICAgbGV0IGRuID0gZG5XaXRoVHlwZTtcbiAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgIGRuID0gZG5XaXRoVHlwZS5zbGljZSgwLCBpbmQpO1xuICAgICAgZG4gPSBkbi50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiBkbjtcbiAgfVxuXG4gIHJlcXVpcmVkRWl0aGVyRm9yVm1FeHRlbnNpb24gPSAoZmllbGROYW1lMTogc3RyaW5nLCBmaWVsZE5hbWUyOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoQ29udHJvbDEgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMSkudmFsdWU7XG4gICAgICBjb25zdCBtYXRjaENvbnRyb2wyID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZTIpLnZhbHVlO1xuICAgICAgaWYgKCFtYXRjaENvbnRyb2wxICYmICFtYXRjaENvbnRyb2wyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWRFaXRoZXJGb3JWbUV4dGVuc2lvbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEVpdGhlck9uZSA9IChmaWVsZE5hbWUxOiBzdHJpbmcsIGZpZWxkTmFtZTI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMSA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUxKSAmJiBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMSkudmFsdWU7XG4gICAgICBjb25zdCBtYXRjaENvbnRyb2wyID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZTIpICYmIGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUyKS52YWx1ZTtcbiAgICAgIGlmICghbWF0Y2hDb250cm9sMSAmJiAhbWF0Y2hDb250cm9sMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkRWl0aGVyT25lOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHJlcXVpcmVkQnlWYWx1ZSA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWVzdGVkRmllbGRWYWw6IGFueSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRWYWwgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKSAmJiBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKS52YWx1ZTtcbiAgICAgIGlmIChmaWVsZFZhbCAmJiBmaWVsZFZhbCA9PT0gcmVxdWVzdGVkRmllbGRWYWwgJiYgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBPbmVFeHRlbnNpb25FbXB0eSA9IChmaWVsZE5hbWUxOiBzdHJpbmcsIGZpZWxkTmFtZTI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMSA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUxKS52YWx1ZTtcbiAgICAgIGNvbnN0IG1hdGNoQ29udHJvbDIgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMikudmFsdWU7XG4gICAgICBpZiAobWF0Y2hDb250cm9sMSAmJiBtYXRjaENvbnRyb2wyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgT25lRXh0ZW5zaW9uSXNFbXB0eTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEJ5Q29uZGl0aW9uID0gKHJlcXVpcmVkQnk6IHN0cmluZywgZmllbGROYW1lOiBhbnkpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVpcmVkQnlDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KHJlcXVpcmVkQnkpLnZhbHVlO1xuICAgICAgY29uc3QgcmVxdWlyZWRDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSkudmFsdWU7XG4gICAgICBpZiAocmVxdWlyZWRCeUNvbnRyb2wgJiYgIXJlcXVpcmVkQ29udHJvbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgZ2V0T3B0aW9uc0xpc3QodG9rZW46IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdjc3MnOlxuICAgICAgY2FzZSAncmVyb3V0ZUNzcyc6XG4gICAgICBjYXNlICdjYWxsaW5nU2VhcmNoU3BhY2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmNhbGxpbmdTZWFyY2hTcGFjZVR5cGVzO1xuICAgICAgY2FzZSAncmVyb3V0aW5nQ3NzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5zaXRlRGVmYXVsdHMgJiYgdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLnNpdGVEZWZhdWx0cy5jc3NGaWx0ZXI7XG4gICAgICBjYXNlICdkZXZpY2VUeXBlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5kZXZpY2VUeXBlcztcbiAgICAgIGNhc2UgJ3JvdXRlUGFydGl0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5yb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAncm91dGVQYXJ0aXRpb25GaWx0ZXJlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZmlsdGVyZWRSb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAnZGV2aWNlUG9vbHMnOlxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmRldmljZVBvb2xzO1xuICAgICAgY2FzZSAnYWxsUm91dGVQYXJ0aXRpb25zJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5hbGxSb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAnZGlyZWN0b3J5TnVtYmVycyc6XG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZGlyZWN0b3J5TnVtYmVycztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBhdXRvY29tcGxldGVUeXBlKGNvbnRyb2w6IGFueSkge1xuICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSAhPT0gJ29iamVjdCcgJiYgY29udHJvbC52YWx1ZSAhPT0gJycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0cmluZ0VudGVyZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICBwYXNzd29yZChjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBydWxlTnVtZXJpYyA9IG5ldyBSZWdFeHAoL1xcZCsvLCAnZycpO1xuICAgIGNvbnN0IHJ1bGVDYXBpdGFscyA9IG5ldyBSZWdFeHAoL1tBLVpdKy8sICdnJyk7XG4gICAgY29uc3QgcnVsZVNtYWxsID0gbmV3IFJlZ0V4cCgvW2Etel0rLywgJ2cnKTtcbiAgICBjb25zdCBydWxlU3BlY2lhbCA9IG5ldyBSZWdFeHAoL1shQCMkJSZcXC89XFw/X1xcLiw6O1xcLVxcXFwrXSsvLCAnZycpO1xuXG4gICAgY29uc3QgaGFzTnVtZXJpYyA9ICtydWxlTnVtZXJpYy50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc0NhcGl0YWxzID0gK3J1bGVDYXBpdGFscy50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc1NtYWxsID0gK3J1bGVTbWFsbC50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc1NwZWNpYWwgPSArcnVsZVNwZWNpYWwudGVzdChjb250cm9sLnZhbHVlKTtcblxuICAgIGlmIChoYXNOdW1lcmljICsgaGFzQ2FwaXRhbHMgKyBoYXNTbWFsbCArIGhhc1NwZWNpYWwgPCAzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3ZWFrUGFzc3dvcmQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2ZXJpZnlBdXRvQW5zd2VyKGNvbnRyb2w6IGFueSkge1xuICAgIGlmICghY29udHJvbD8udmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgYXV0b0Fuc3dlckVycm9yTGluZSA9IG51bGw7XG4gICAgaWYgKGNvbnRyb2wucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LnBhcmVudCAmJiBjb250cm9sLnBhcmVudC5wYXJlbnQucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50KSB7XG4gICAgICBjb25zdCBjb250cm9sU05SID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBjb25zdCBjb250cm9sVXNlciA9IGNvbnRyb2wucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50O1xuICAgICAgY29uc3QgbGluZUFzc29jaWF0aW9ucyA9IGNvbnRyb2xTTlIuZ2V0KCdsaW5lQXNzb2NpYXRpb25zJyk7XG4gICAgICBjb25zdCBsaW5lcyA9IGNvbnRyb2xVc2VyLmdldCgnbGluZXMnKTtcbiAgICAgIGlmIChsaW5lcykge1xuICAgICAgICBsaW5lQXNzb2NpYXRpb25zLnZhbHVlLmZvckVhY2goKGxpbmVBc3NvY2lhdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXV0b0Fuc3dlckxpbmUgPSBsaW5lcy5jb250cm9scy5maW5kKChsaW5lOiBhbnkpID0+IGxpbmUuZ2V0KCdkaXJlY3RvcnlOdW1iZXInKS52YWx1ZS5kaXJlY3RvcnlOdW1iZXIgPT09IGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIgJiYgbGluZS5nZXQoJ2RpcmVjdG9yeU51bWJlcicpLnZhbHVlLnJvdXRlUGFydGl0aW9uTmFtZSA9PT0gbGluZUFzc29jaWF0aW9uLnJvdXRlUGFydGl0aW9uTmFtZVxuICAgICAgICAgICAgJiYgbGluZS5nZXQoJ2F1dG9BbnN3ZXInKS52YWx1ZSAhPT0gJ0F1dG8gQW5zd2VyIE9mZicpO1xuICAgICAgICAgIGlmIChhdXRvQW5zd2VyTGluZSkge1xuICAgICAgICAgICAgYXV0b0Fuc3dlckVycm9yTGluZSA9IHtcbiAgICAgICAgICAgICAgYXV0b0Fuc3dlckVycm9yTGluZTogbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhdXRvQW5zd2VyRXJyb3JMaW5lO1xuICB9XG5cbiAgdmVyaWZ5QmVnaW5FbmRUaW1lKGNvbnRyb2w6IGFueSkge1xuICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuZ2V0KCdpc0FjdGl2ZScpIHx8ICFwYXJlbnQuZ2V0KCdhbGxEYXknKSB8fCAhcGFyZW50LmdldCgnZnJvbScpIHx8ICFwYXJlbnQuZ2V0KCd0bycpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50LmdldCgnaXNBY3RpdmUnKS52YWx1ZSkge1xuICAgICAgaWYgKCFwYXJlbnQuZ2V0KCdhbGxEYXknKS52YWx1ZSkge1xuICAgICAgICBpZiAoIXBhcmVudC5nZXQoJ2Zyb20nKS52YWx1ZSB8fCBwYXJlbnQuZ2V0KCdmcm9tJykudmFsdWUgPT09ICdObyBPZmZpY2UgSG91cnMnXG4gICAgICAgICAgfHwgIXBhcmVudC5nZXQoJ3RvJykudmFsdWUgfHwgcGFyZW50LmdldCgndG8nKS52YWx1ZSA9PT0gJ05vIE9mZmljZSBIb3VycydcbiAgICAgICAgICB8fCBwYXJlbnQuZ2V0KCdmcm9tJykudmFsdWUgPiBwYXJlbnQuZ2V0KCd0bycpLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZyb21HcmVhdGVyVGhhblRvOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdGltZShjb250cm9sOiBhbnkpIHtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiAhdGltZVJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7dGltZUZvcm1hdDogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICBwaW5NdWx0aUNoYXJhY3RlckNoZWNrID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBydWxlTXVsdGlDaGFyYWN0ZXIgPSBuZXcgUmVnRXhwKCcoWzAtOV0pXFxcXDF7Mn0nKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaGFzTXVsdGlDaGFyYWN0ZXIgPSBydWxlTXVsdGlDaGFyYWN0ZXIudGVzdChtYXRjaGluZ0NvbnRyb2wudmFsdWUpO1xuICAgICAgICBpZiAoaGFzTXVsdGlDaGFyYWN0ZXIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbXVsdGlDaGFyYWN0ZXI6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBwaW5Db25zZWN1dGl2ZU51bWJlckNoZWNrID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBzdHJUb0NoZWNrID0gbWF0Y2hpbmdDb250cm9sLnZhbHVlO1xuICAgICAgaWYgKHN0clRvQ2hlY2sgJiYgc3RyVG9DaGVjay5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHJlc0FzYyA9IHRoaXMucGluT3JkZXJDaGVjayhzdHJUb0NoZWNrKTtcbiAgICAgICAgaWYgKHJlc0FzYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25zZWN1dGl2ZU51bWJlcnM6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuXG4gIHBpbk9yZGVyQ2hlY2soc3RyOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChzdHIpIHtcbiAgICAgIGNvbnN0IGFycl9udW0gPSAoJycgKyBzdHIpLnNwbGl0KCcnKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyX251bS5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgY29uc3QgbnVtMSA9IHBhcnNlSW50KGFycl9udW1baV0pO1xuICAgICAgICBjb25zdCBudW0yID0gcGFyc2VJbnQoYXJyX251bVtpICsgMV0pO1xuICAgICAgICBjb25zdCBudW0zID0gcGFyc2VJbnQoYXJyX251bVtpICsgMl0pO1xuICAgICAgICBpZiAoKG51bTIgLSBudW0xKSA9PT0gMSAmJiAobnVtMyAtIG51bTIgPT09IG51bTIgLSBudW0xKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cblxuICBwaW5NYWlsYm94RXh0ZW5zaW9uQ2hlY2sgPSAoZmllbGROYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IHN0clRvQ2hlY2sgPSBtYXRjaGluZ0NvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoc3RyVG9DaGVjayA9PT0gZXh0ZW5zaW9uIHx8IHN0clRvQ2hlY2suaW5jbHVkZXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1haWxib3hFeHRlbnNpb246IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgaXNJdGVtQWxyZWFkeUluTGlzdChpdGVtOiBhbnksIGxpc3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbSB8fCAhbGlzdCB8fCAhbGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0SXRlbSBvZiBsaXN0KSB7XG4gICAgICBpZiAoaXRlbS5lcXVhbHMobGlzdEl0ZW0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|