@resolveio/client-lib-core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/account-manager.service.mjs +213 -0
- package/esm2020/lib/auth/auth-guard.service.mjs +137 -0
- package/esm2020/lib/auth/auth-permissions.service.mjs +24 -0
- package/esm2020/lib/auth/auth.service.mjs +241 -0
- package/esm2020/lib/auth/auth365.component.mjs +44 -0
- package/esm2020/lib/auth/can-deactivate-guard.service.mjs +13 -0
- package/esm2020/lib/auth/enroll.component.mjs +81 -0
- package/esm2020/lib/auth/forgot-password.component.mjs +82 -0
- package/esm2020/lib/core.component.mjs +488 -0
- package/esm2020/lib/core.module.mjs +179 -0
- package/esm2020/lib/core.service.mjs +96 -0
- package/esm2020/lib/directive/focus.mjs +22 -0
- package/esm2020/lib/directive/scroll.mjs +55 -0
- package/esm2020/lib/home/about-us.component.mjs +34 -0
- package/esm2020/lib/home/contact-us.component.mjs +57 -0
- package/esm2020/lib/home/demo.component.mjs +59 -0
- package/esm2020/lib/home/home.component.mjs +105 -0
- package/esm2020/lib/home/home.module.mjs +50 -0
- package/esm2020/lib/logger/logger.component.mjs +221 -0
- package/esm2020/lib/models/app-status.model.mjs +2 -0
- package/esm2020/lib/models/collection-document.model.mjs +2 -0
- package/esm2020/lib/models/cron-job.model.mjs +2 -0
- package/esm2020/lib/models/dialog.model.mjs +2 -0
- package/esm2020/lib/models/file.model.mjs +2 -0
- package/esm2020/lib/models/log-method-latency.model.mjs +2 -0
- package/esm2020/lib/models/navbar-main-tab.model.mjs +2 -0
- package/esm2020/lib/models/pagination.model.mjs +2 -0
- package/esm2020/lib/models/permission.model.mjs +2 -0
- package/esm2020/lib/models/select-data-label.model.mjs +2 -0
- package/esm2020/lib/models/subscription.model.mjs +2 -0
- package/esm2020/lib/models/support-ticket.model.mjs +2 -0
- package/esm2020/lib/models/user-group.model.mjs +2 -0
- package/esm2020/lib/models/user.model.mjs +2 -0
- package/esm2020/lib/offline-db.mjs +519 -0
- package/esm2020/lib/offline-manager.service.mjs +107 -0
- package/esm2020/lib/pipes/domsanitizor.pipe.mjs +28 -0
- package/esm2020/lib/pipes/filter.pipe.mjs +36 -0
- package/esm2020/lib/pipes/json-parse.pipe.mjs +29 -0
- package/esm2020/lib/pipes/minus-currency.pipe.mjs +16 -0
- package/esm2020/lib/pipes/phone.pipe.mjs +47 -0
- package/esm2020/lib/pipes/pipe.module.mjs +54 -0
- package/esm2020/lib/pipes/reverse-list.pipe.mjs +17 -0
- package/esm2020/lib/pipes/titlecase.pipe.mjs +22 -0
- package/esm2020/lib/resolveio-class.mjs +41 -0
- package/esm2020/lib/shared/shared.module.mjs +91 -0
- package/esm2020/lib/socket-manager.service.mjs +360 -0
- package/esm2020/lib/socket.service.mjs +129 -0
- package/esm2020/lib/standard-pages/contactus/contactus.component.mjs +45 -0
- package/esm2020/lib/standard-pages/faq/faq.component.mjs +45 -0
- package/esm2020/lib/standard-pages/features/features.component.mjs +23 -0
- package/esm2020/lib/standard-pages/home/home.component.mjs +38 -0
- package/esm2020/lib/standard-pages/howitwork/howitwork.component.mjs +23 -0
- package/esm2020/lib/standard-pages/loginsignup/loginsignup.component.mjs +23 -0
- package/esm2020/lib/standard-pages/pricing/pricing.component.mjs +37 -0
- package/esm2020/lib/standard-pages/standard-pages.module.mjs +69 -0
- package/esm2020/lib/support-ticket/detail/support-ticket-detail.component.mjs +204 -0
- package/esm2020/lib/support-ticket/edit/support-ticket-edit.component.mjs +122 -0
- package/esm2020/lib/support-ticket/list/support-ticket-list.component.mjs +137 -0
- package/esm2020/lib/support-ticket/new/support-ticket-new.component.mjs +115 -0
- package/esm2020/lib/support-ticket/support-ticket.component.mjs +63 -0
- package/esm2020/lib/support-ticket/support-ticket.module.mjs +57 -0
- package/esm2020/lib/support-ticket/support-ticket.routing.mjs +20 -0
- package/esm2020/lib/support-ticket/support-ticket.service.mjs +17 -0
- package/esm2020/lib/token-manager.service.mjs +24 -0
- package/esm2020/lib/user-settings/settings/users-settings.component.mjs +312 -0
- package/esm2020/lib/user-settings/user-settings.component.mjs +57 -0
- package/esm2020/lib/user-settings/user-settings.module.mjs +58 -0
- package/esm2020/lib/user-settings/user-settings.permission.mjs +10 -0
- package/esm2020/lib/user-settings/user-settings.routing.mjs +14 -0
- package/esm2020/lib/user-settings/user-settings.service.mjs +17 -0
- package/esm2020/lib/util/action-name.helper.mjs +9 -0
- package/esm2020/lib/util/aws.service.mjs +79 -0
- package/esm2020/lib/util/common.helper.mjs +140 -0
- package/esm2020/lib/util/validation.service.mjs +177 -0
- package/esm2020/lib/util/window-resize.service.mjs +24 -0
- package/esm2020/lib/util/window.service.mjs +16 -0
- package/esm2020/lib/widgets/alert/alert.model.mjs +2 -0
- package/esm2020/lib/widgets/alert/alert.service.mjs +76 -0
- package/esm2020/lib/widgets/chartjs/chart.component.mjs +86 -0
- package/esm2020/lib/widgets/chartjs/chart.module.mjs +17 -0
- package/esm2020/lib/widgets/collapse-table/collapse-table.component.mjs +79 -0
- package/esm2020/lib/widgets/collapse-table/collapse-table.module.mjs +36 -0
- package/esm2020/lib/widgets/data-table/data-table.component.mjs +77 -0
- package/esm2020/lib/widgets/data-table/data-table.model.mjs +2 -0
- package/esm2020/lib/widgets/data-table/data-table.module.mjs +43 -0
- package/esm2020/lib/widgets/date-shortcut/date-shortcut.component.mjs +195 -0
- package/esm2020/lib/widgets/date-shortcut/date-shortcut.module.mjs +34 -0
- package/esm2020/lib/widgets/dialog/dialog.confirm.content.mjs +63 -0
- package/esm2020/lib/widgets/dialog/dialog.error.content.mjs +57 -0
- package/esm2020/lib/widgets/dialog/dialog.input.content.mjs +197 -0
- package/esm2020/lib/widgets/dialog/dialog.login.content.mjs +348 -0
- package/esm2020/lib/widgets/dialog/dialog.notify.content.mjs +57 -0
- package/esm2020/lib/widgets/dialog/dialog.register.content.mjs +330 -0
- package/esm2020/lib/widgets/dialog/dialog.select-data-labels.content.mjs +191 -0
- package/esm2020/lib/widgets/dialog/dialog.select-datetime.content.mjs +140 -0
- package/esm2020/lib/widgets/dialog/dialog.service.mjs +71 -0
- package/esm2020/lib/widgets/file/file-upload.component.mjs +440 -0
- package/esm2020/lib/widgets/file/file-upload.module.mjs +50 -0
- package/esm2020/lib/widgets/form-button/form-button.component.mjs +91 -0
- package/esm2020/lib/widgets/form-button/form-button.module.mjs +30 -0
- package/esm2020/lib/widgets/navbar-main/navbar-main.component.mjs +209 -0
- package/esm2020/lib/widgets/navbar-module/navbar-module.component.mjs +138 -0
- package/esm2020/lib/widgets/navbar-module/navbar-module.model.mjs +2 -0
- package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/ng-bootstrap-tour.service.mjs +14 -0
- package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/ng-bootstrap.module.mjs +34 -0
- package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/step-option.interface.mjs +2 -0
- package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/tour-anchor.directive.mjs +76 -0
- package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/tour-step-template.component.mjs +70 -0
- package/esm2020/lib/widgets/ngx-tour-ng-bootstrap/tour-step-template.service.mjs +10 -0
- package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +38 -0
- package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +26 -0
- package/esm2020/lib/widgets/scheduler/scheduler.component.mjs +185 -0
- package/esm2020/lib/widgets/scheduler/scheduler.module.mjs +39 -0
- package/esm2020/lib/widgets/sort-table/sort-table-header.component.mjs +67 -0
- package/esm2020/lib/widgets/sort-table/sort-table-ngfor.component.mjs +48 -0
- package/esm2020/lib/widgets/sort-table/sort-table.directive.mjs +174 -0
- package/esm2020/lib/widgets/sort-table/sort-table.module.mjs +40 -0
- package/esm2020/lib/widgets/user-role/user-role.component.mjs +27 -0
- package/esm2020/lib/widgets/user-role/user-role.module.mjs +26 -0
- package/esm2020/public_api.mjs +109 -0
- package/esm2020/resolveio-client-lib-core.mjs +5 -0
- package/fesm2015/resolveio-client-lib-core.mjs +8856 -0
- package/fesm2015/resolveio-client-lib-core.mjs.map +1 -0
- package/fesm2020/resolveio-client-lib-core.mjs +8849 -0
- package/fesm2020/resolveio-client-lib-core.mjs.map +1 -0
- package/lib/account-manager.service.d.ts +42 -0
- package/lib/auth/auth-guard.service.d.ts +25 -0
- package/lib/auth/auth-permissions.service.d.ts +10 -0
- package/lib/auth/auth.service.d.ts +29 -0
- package/lib/auth/auth365.component.d.ts +20 -0
- package/lib/auth/can-deactivate-guard.service.d.ts +11 -0
- package/lib/auth/enroll.component.d.ts +28 -0
- package/lib/auth/forgot-password.component.d.ts +28 -0
- package/lib/core.component.d.ts +69 -0
- package/lib/core.module.d.ts +32 -0
- package/lib/core.service.d.ts +53 -0
- package/lib/directive/focus.d.ts +10 -0
- package/lib/directive/scroll.d.ts +20 -0
- package/lib/home/about-us.component.d.ts +15 -0
- package/lib/home/contact-us.component.d.ts +20 -0
- package/lib/home/demo.component.d.ts +25 -0
- package/lib/home/home.component.d.ts +33 -0
- package/lib/home/home.module.d.ts +13 -0
- package/lib/logger/logger.component.d.ts +37 -0
- package/lib/models/app-status.model.d.ts +4 -0
- package/lib/models/collection-document.model.d.ts +6 -0
- package/lib/models/cron-job.model.d.ts +13 -0
- package/lib/models/dialog.model.d.ts +18 -0
- package/lib/models/file.model.d.ts +9 -0
- package/lib/models/log-method-latency.model.d.ts +7 -0
- package/lib/models/navbar-main-tab.model.d.ts +14 -0
- package/lib/models/pagination.model.d.ts +17 -0
- package/lib/models/permission.model.d.ts +13 -0
- package/lib/models/select-data-label.model.d.ts +9 -0
- package/lib/models/subscription.model.d.ts +19 -0
- package/lib/models/support-ticket.model.d.ts +71 -0
- package/lib/models/user-group.model.d.ts +19 -0
- package/lib/models/user.model.d.ts +70 -0
- package/lib/offline-db.d.ts +28 -0
- package/lib/offline-manager.service.d.ts +23 -0
- package/lib/pipes/domsanitizor.pipe.d.ts +10 -0
- package/lib/pipes/filter.pipe.d.ts +12 -0
- package/lib/pipes/json-parse.pipe.d.ts +7 -0
- package/lib/pipes/minus-currency.pipe.d.ts +7 -0
- package/lib/pipes/phone.pipe.d.ts +7 -0
- package/lib/pipes/pipe.module.d.ts +13 -0
- package/lib/pipes/reverse-list.pipe.d.ts +6 -0
- package/lib/pipes/titlecase.pipe.d.ts +7 -0
- package/lib/resolveio-class.d.ts +26 -0
- package/lib/shared/shared.module.d.ts +16 -0
- package/lib/socket-manager.service.d.ts +33 -0
- package/lib/socket.service.d.ts +33 -0
- package/lib/standard-pages/contactus/contactus.component.d.ts +17 -0
- package/lib/standard-pages/faq/faq.component.d.ts +17 -0
- package/lib/standard-pages/features/features.component.d.ts +12 -0
- package/lib/standard-pages/home/home.component.d.ts +14 -0
- package/lib/standard-pages/howitwork/howitwork.component.d.ts +12 -0
- package/lib/standard-pages/loginsignup/loginsignup.component.d.ts +12 -0
- package/lib/standard-pages/pricing/pricing.component.d.ts +14 -0
- package/lib/standard-pages/standard-pages.module.d.ts +17 -0
- package/lib/support-ticket/detail/support-ticket-detail.component.d.ts +32 -0
- package/lib/support-ticket/edit/support-ticket-edit.component.d.ts +30 -0
- package/lib/support-ticket/list/support-ticket-list.component.d.ts +26 -0
- package/lib/support-ticket/new/support-ticket-new.component.d.ts +26 -0
- package/lib/support-ticket/support-ticket.component.d.ts +20 -0
- package/lib/support-ticket/support-ticket.module.d.ts +16 -0
- package/lib/support-ticket/support-ticket.routing.d.ts +3 -0
- package/lib/support-ticket/support-ticket.service.d.ts +9 -0
- package/lib/token-manager.service.d.ts +11 -0
- package/lib/user-settings/settings/users-settings.component.d.ts +57 -0
- package/lib/user-settings/user-settings.component.d.ts +20 -0
- package/lib/user-settings/user-settings.module.d.ts +15 -0
- package/lib/user-settings/user-settings.permission.d.ts +2 -0
- package/lib/user-settings/user-settings.routing.d.ts +3 -0
- package/lib/user-settings/user-settings.service.d.ts +9 -0
- package/lib/util/action-name.helper.d.ts +1 -0
- package/lib/util/aws.service.d.ts +16 -0
- package/lib/util/common.helper.d.ts +12 -0
- package/lib/util/validation.service.d.ts +85 -0
- package/lib/util/window-resize.service.d.ts +12 -0
- package/lib/util/window.service.d.ts +6 -0
- package/lib/widgets/alert/alert.model.d.ts +1 -0
- package/lib/widgets/alert/alert.service.d.ts +11 -0
- package/lib/widgets/chartjs/chart.component.d.ts +22 -0
- package/lib/widgets/chartjs/chart.module.d.ts +8 -0
- package/lib/widgets/collapse-table/collapse-table.component.d.ts +23 -0
- package/lib/widgets/collapse-table/collapse-table.module.d.ts +9 -0
- package/lib/widgets/data-table/data-table.component.d.ts +23 -0
- package/lib/widgets/data-table/data-table.model.d.ts +13 -0
- package/lib/widgets/data-table/data-table.module.d.ts +12 -0
- package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +20 -0
- package/lib/widgets/date-shortcut/date-shortcut.module.d.ts +10 -0
- package/lib/widgets/dialog/dialog.confirm.content.d.ts +12 -0
- package/lib/widgets/dialog/dialog.error.content.d.ts +11 -0
- package/lib/widgets/dialog/dialog.input.content.d.ts +18 -0
- package/lib/widgets/dialog/dialog.login.content.d.ts +16 -0
- package/lib/widgets/dialog/dialog.notify.content.d.ts +11 -0
- package/lib/widgets/dialog/dialog.register.content.d.ts +13 -0
- package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +22 -0
- package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +16 -0
- package/lib/widgets/dialog/dialog.service.d.ts +18 -0
- package/lib/widgets/file/file-upload.component.d.ts +49 -0
- package/lib/widgets/file/file-upload.module.d.ts +14 -0
- package/lib/widgets/form-button/form-button.component.d.ts +14 -0
- package/lib/widgets/form-button/form-button.module.d.ts +9 -0
- package/lib/widgets/navbar-main/navbar-main.component.d.ts +52 -0
- package/lib/widgets/navbar-module/navbar-module.component.d.ts +24 -0
- package/lib/widgets/navbar-module/navbar-module.model.d.ts +13 -0
- package/lib/widgets/ngx-tour-ng-bootstrap/ng-bootstrap-tour.service.d.ts +7 -0
- package/lib/widgets/ngx-tour-ng-bootstrap/ng-bootstrap.module.d.ts +17 -0
- package/lib/widgets/ngx-tour-ng-bootstrap/step-option.interface.d.ts +5 -0
- package/lib/widgets/ngx-tour-ng-bootstrap/tour-anchor.directive.d.ts +26 -0
- package/lib/widgets/ngx-tour-ng-bootstrap/tour-step-template.component.d.ts +20 -0
- package/lib/widgets/ngx-tour-ng-bootstrap/tour-step-template.service.d.ts +9 -0
- package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +17 -0
- package/lib/widgets/responsive-button-group/responsive-button-group.module.d.ts +8 -0
- package/lib/widgets/scheduler/scheduler.component.d.ts +50 -0
- package/lib/widgets/scheduler/scheduler.module.d.ts +11 -0
- package/lib/widgets/sort-table/sort-table-header.component.d.ts +23 -0
- package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +17 -0
- package/lib/widgets/sort-table/sort-table.directive.d.ts +48 -0
- package/lib/widgets/sort-table/sort-table.module.d.ts +11 -0
- package/lib/widgets/user-role/user-role.component.d.ts +10 -0
- package/lib/widgets/user-role/user-role.module.d.ts +8 -0
- package/package.json +72 -0
- package/public_api.d.ts +105 -0
- package/resolveio-client-lib-core.d.ts +5 -0
- package/src/assets/css/font-awesome.css +2338 -0
- package/src/assets/css/home-page-layout.css +7221 -0
- package/src/assets/css/home-page-theme.css +1157 -0
- package/src/assets/css/leaflet.css +629 -0
- package/src/assets/css/owl.carousel.min.css +1 -0
- package/src/assets/css/owl.theme.min.css +1 -0
- package/src/assets/css/style.css +1283 -0
- package/src/assets/css/tablet.css +18 -0
- package/src/assets/css/toastr.css +192 -0
- package/src/assets/images/ResolveIO.png +0 -0
- package/src/assets/images/ResolveIO_white.png +0 -0
- package/src/assets/images/contactus/Contact_bnr.jpg +0 -0
- package/src/assets/images/contactus/cont-comp.png +0 -0
- package/src/assets/images/contactus/cont-mail.png +0 -0
- package/src/assets/images/contactus/cont-phone.png +0 -0
- package/src/assets/images/contactus/form-img.png +0 -0
- package/src/assets/images/contactus/user.png +0 -0
- package/src/assets/images/faq/Faq-form.png +0 -0
- package/src/assets/images/faq/clientlogo1.jpg +0 -0
- package/src/assets/images/faq/clientlogo2.jpg +0 -0
- package/src/assets/images/faq/clientlogo3.jpg +0 -0
- package/src/assets/images/faq/clientlogo4.jpg +0 -0
- package/src/assets/images/faq/clientlogo5.jpg +0 -0
- package/src/assets/images/faq/faq_banner copy.jpg +0 -0
- package/src/assets/images/faq/faq_banner.jpg +0 -0
- package/src/assets/images/faq/faqwomen.jpg +0 -0
- package/src/assets/images/faq/mail-input.png +0 -0
- package/src/assets/images/faq/user-input.png +0 -0
- package/src/assets/images/favicon-32x32.png +0 -0
- package/src/assets/images/features/future-bnr.jpg +0 -0
- package/src/assets/images/features/polygon.png +0 -0
- package/src/assets/images/home/banner-1.jpg +0 -0
- package/src/assets/images/home/booking.png +0 -0
- package/src/assets/images/home/client.jpg +0 -0
- package/src/assets/images/home/client2.jpg +0 -0
- package/src/assets/images/home/clientlogo1.jpg +0 -0
- package/src/assets/images/home/clientlogo2.jpg +0 -0
- package/src/assets/images/home/clientlogo3.jpg +0 -0
- package/src/assets/images/home/clientlogo4.jpg +0 -0
- package/src/assets/images/home/clientlogo5.jpg +0 -0
- package/src/assets/images/home/easy_invoicing.png +0 -0
- package/src/assets/images/home/inventory.png +0 -0
- package/src/assets/images/home/manage.png +0 -0
- package/src/assets/images/home/more.png +0 -0
- package/src/assets/images/home/order_management.png +0 -0
- package/src/assets/images/home/plan.png +0 -0
- package/src/assets/images/home-page/AjaxLoader.gif +0 -0
- package/src/assets/images/home-page/ResolveIO_white.png +0 -0
- package/src/assets/images/home-page/abt_thumb.png +0 -0
- package/src/assets/images/home-page/aero_icon_right_white.png +0 -0
- package/src/assets/images/home-page/arrow_btn.png +0 -0
- package/src/assets/images/home-page/banner_thumb.png +0 -0
- package/src/assets/images/home-page/blank.gif +0 -0
- package/src/assets/images/home-page/close_icon.png +0 -0
- package/src/assets/images/home-page/contact_bg.jpg +0 -0
- package/src/assets/images/home-page/email_icon.png +0 -0
- package/src/assets/images/home-page/fancybox_loading.gif +0 -0
- package/src/assets/images/home-page/fancybox_loading@2x.gif +0 -0
- package/src/assets/images/home-page/fancybox_overlay.png +0 -0
- package/src/assets/images/home-page/fancybox_sprite.png +0 -0
- package/src/assets/images/home-page/fancybox_sprite@2x.png +0 -0
- package/src/assets/images/home-page/header_center_after.png +0 -0
- package/src/assets/images/home-page/header_left_after.png +0 -0
- package/src/assets/images/home-page/home_banner_1.jpg +0 -0
- package/src/assets/images/home-page/logo.png +0 -0
- package/src/assets/images/home-page/logo_thumb_ace.png +0 -0
- package/src/assets/images/home-page/logo_thumb_acquire.png +0 -0
- package/src/assets/images/home-page/logo_thumb_chemtech.jpeg +0 -0
- package/src/assets/images/home-page/logo_thumb_cherokee.png +0 -0
- package/src/assets/images/home-page/logo_thumb_coilchem.png +0 -0
- package/src/assets/images/home-page/logo_thumb_dcs.png +0 -0
- package/src/assets/images/home-page/logo_thumb_integrity.png +0 -0
- package/src/assets/images/home-page/logo_thumb_intrepid.png +0 -0
- package/src/assets/images/home-page/logo_thumb_omt.png +0 -0
- package/src/assets/images/home-page/logo_thumb_quantum.png +0 -0
- package/src/assets/images/home-page/logo_thumb_smartchemical.png +0 -0
- package/src/assets/images/home-page/logo_thumb_terra.png +0 -0
- package/src/assets/images/home-page/logo_thumb_truechem.png +0 -0
- package/src/assets/images/home-page/password_icon.png +0 -0
- package/src/assets/images/home-page/phone_icon.png +0 -0
- package/src/assets/images/home-page/software_icon_1.png +0 -0
- package/src/assets/images/home-page/software_icon_2.png +0 -0
- package/src/assets/images/home-page/software_sec_bg.jpg +0 -0
- package/src/assets/images/home-page/software_thumb.png +0 -0
- package/src/assets/images/home-page/white_arrow_btn.png +0 -0
- package/src/assets/images/howitwork/add-booking.png +0 -0
- package/src/assets/images/howitwork/add-order.png +0 -0
- package/src/assets/images/howitwork/add-stuff.png +0 -0
- package/src/assets/images/howitwork/how_banner.jpg +0 -0
- package/src/assets/images/howitwork/howimg1.png +0 -0
- package/src/assets/images/howitwork/howimg2.png +0 -0
- package/src/assets/images/howitwork/step-check.png +0 -0
- package/src/assets/images/loginsignup/formimg.jpg +0 -0
- package/src/assets/images/loginsignup/login-logo.png +0 -0
- package/src/assets/images/owl.video.play.png +0 -0
- package/src/assets/images/pricing/Pricing_banner.jpg +0 -0
- package/src/assets/images/pricing/clientlogo1.jpg +0 -0
- package/src/assets/images/pricing/clientlogo2.jpg +0 -0
- package/src/assets/images/pricing/clientlogo3.jpg +0 -0
- package/src/assets/images/pricing/clientlogo4.jpg +0 -0
- package/src/assets/images/pricing/clientlogo5.jpg +0 -0
- package/src/assets/images/pricing/info-ico.png +0 -0
- package/src/assets/scss/toastr.scss +201 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { UserSettingsService } from '../user-settings.service';
|
|
3
|
+
import { ProviderService, BaseComponent } from '../../resolveio-class';
|
|
4
|
+
import { AuthPermissionService } from '../../auth/auth-permissions.service';
|
|
5
|
+
import { DialogService } from '../../widgets/dialog/dialog.service';
|
|
6
|
+
import { Validators } from '@angular/forms';
|
|
7
|
+
import { toTitleCase } from '../../util/common.helper';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "../../auth/auth-permissions.service";
|
|
10
|
+
import * as i2 from "../user-settings.service";
|
|
11
|
+
import * as i3 from "../../resolveio-class";
|
|
12
|
+
import * as i4 from "../../widgets/dialog/dialog.service";
|
|
13
|
+
import * as i5 from "@ng-bootstrap/ng-bootstrap";
|
|
14
|
+
import * as i6 from "../../widgets/responsive-button-group/responsive-button-group.component";
|
|
15
|
+
import * as i7 from "../../widgets/collapse-table/collapse-table.component";
|
|
16
|
+
import * as i8 from "../../widgets/form-button/form-button.component";
|
|
17
|
+
import * as i9 from "@angular/forms";
|
|
18
|
+
import * as i10 from "@angular/common";
|
|
19
|
+
import * as i11 from "../../pipes/titlecase.pipe";
|
|
20
|
+
export class UsersSettingsComponent extends BaseComponent {
|
|
21
|
+
// constructor(private _aps: AuthPermissionService, private _us: UserSettingsService, private _services: ProviderService, private _ds: DialogService, private tourService: NgbTourService) {
|
|
22
|
+
// super(_services);
|
|
23
|
+
// }
|
|
24
|
+
constructor(_aps, _us, _services, _ds) {
|
|
25
|
+
super(_services);
|
|
26
|
+
this._aps = _aps;
|
|
27
|
+
this._us = _us;
|
|
28
|
+
this._services = _services;
|
|
29
|
+
this._ds = _ds;
|
|
30
|
+
this.subscription$ = [];
|
|
31
|
+
this.disableFormButton = false;
|
|
32
|
+
this.tourStops = [];
|
|
33
|
+
this.tourStarted = false;
|
|
34
|
+
this.client = '';
|
|
35
|
+
this.views = [];
|
|
36
|
+
this.hasSubmit = false;
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this._us.setSelectedUser('0');
|
|
40
|
+
this.tourStops = this._services._app.tourStops.getValue();
|
|
41
|
+
this.tourStarted = this._services._app.tourStarted.getValue();
|
|
42
|
+
this.client = this._services._app.client.getValue();
|
|
43
|
+
this.form = this._services._fb.group({
|
|
44
|
+
table_color: ['#3b3ee3', [Validators.required]],
|
|
45
|
+
table_font_color: ['#ffffff', [Validators.required]],
|
|
46
|
+
font_size: [12, [Validators.required, this._services._vs.wholeNumbersGreaterThanZero, this._services._vs.maxValue(18), this._services._vs.minValue(8)]],
|
|
47
|
+
secondary_table_color: ['#87ceeb', [Validators.required]],
|
|
48
|
+
secondary_table_font_color: ['#000000', [Validators.required]],
|
|
49
|
+
tertiary_table_color: ['#ff4500', [Validators.required]],
|
|
50
|
+
tertiary_table_font_color: ['#000000', [Validators.required]],
|
|
51
|
+
collapsable_menu: [true],
|
|
52
|
+
entries_per_page: ['25', [Validators.required]],
|
|
53
|
+
warning_color: ['#ffc107', [Validators.required]],
|
|
54
|
+
warning_font_color: ['#000000', [Validators.required]],
|
|
55
|
+
warning_hover_color: ['#e0a800', [Validators.required]],
|
|
56
|
+
success_color: ['#28a745', [Validators.required]],
|
|
57
|
+
success_font_color: ['#ffffff', [Validators.required]],
|
|
58
|
+
success_hover_color: ['#218838', [Validators.required]],
|
|
59
|
+
danger_color: ['#dc3545', [Validators.required]],
|
|
60
|
+
danger_font_color: ['#ffffff', [Validators.required]],
|
|
61
|
+
danger_hover_color: ['#c82333', [Validators.required]],
|
|
62
|
+
info_color: ['#17a2b8', [Validators.required]],
|
|
63
|
+
info_font_color: ['#ffffff', [Validators.required]],
|
|
64
|
+
info_hover_color: ['#138496', [Validators.required]],
|
|
65
|
+
primary_color: ['#007bff', [Validators.required]],
|
|
66
|
+
primary_font_color: ['#ffffff', [Validators.required]],
|
|
67
|
+
primary_hover_color: ['#0069d9', [Validators.required]],
|
|
68
|
+
secondary_color: ['#868e96', [Validators.required]],
|
|
69
|
+
secondary_font_color: ['#ffffff', [Validators.required]],
|
|
70
|
+
secondary_hover_color: ['#5a6268', [Validators.required]],
|
|
71
|
+
routing_preference: ['alwaysAsk'],
|
|
72
|
+
opening_route: ['/home']
|
|
73
|
+
});
|
|
74
|
+
if (this._services._account.getUser() && this._services._account.getUser().settings) {
|
|
75
|
+
this.form.patchValue(this._services._account.getUser().settings);
|
|
76
|
+
this._services._account.getUser().roles.groups.forEach(group => {
|
|
77
|
+
group.views.forEach(view => {
|
|
78
|
+
if (!this.views.some(a => a.value === view)) {
|
|
79
|
+
this.views.push({
|
|
80
|
+
value: view,
|
|
81
|
+
display: toTitleCase(view.replace('/', '').replace(new RegExp('/', 'g'), ' - '))
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
|
|
88
|
+
document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
|
|
89
|
+
document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
|
|
90
|
+
document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
|
|
91
|
+
document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
|
|
92
|
+
document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
|
|
93
|
+
document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
|
|
94
|
+
document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
|
|
95
|
+
document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
|
|
96
|
+
document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
|
|
97
|
+
document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
|
|
98
|
+
document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
|
|
99
|
+
document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
|
|
100
|
+
document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
|
|
101
|
+
document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
|
|
102
|
+
document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
|
|
103
|
+
document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
|
|
104
|
+
document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
|
|
105
|
+
document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
|
|
106
|
+
document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
|
|
107
|
+
document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
|
|
108
|
+
document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
|
|
109
|
+
document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
|
|
110
|
+
document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
|
|
111
|
+
document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
|
|
112
|
+
document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
|
|
113
|
+
document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
|
|
114
|
+
document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
|
|
115
|
+
document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
|
|
116
|
+
document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
|
|
117
|
+
document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
|
|
118
|
+
this.subscription$.push(this._services._account.user.subscribe(user => {
|
|
119
|
+
this.user = user;
|
|
120
|
+
}));
|
|
121
|
+
this.subscription$.push(this._services._app.tourStarted.subscribe(tourStarted => {
|
|
122
|
+
this.tourStarted = tourStarted;
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
ngOnDestroy() {
|
|
126
|
+
this.subscription$.forEach(sub => {
|
|
127
|
+
sub.unsubscribe();
|
|
128
|
+
});
|
|
129
|
+
if (!this.hasSubmit) {
|
|
130
|
+
this.submitForm(this.form);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
changePrimaryColor() {
|
|
134
|
+
document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
|
|
135
|
+
}
|
|
136
|
+
changePrimaryFontColor() {
|
|
137
|
+
document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
|
|
138
|
+
}
|
|
139
|
+
changePrimaryFontSize() {
|
|
140
|
+
document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
|
|
141
|
+
}
|
|
142
|
+
changeSecondaryColor() {
|
|
143
|
+
document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
|
|
144
|
+
}
|
|
145
|
+
changeSecondaryFontColor() {
|
|
146
|
+
document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
|
|
147
|
+
}
|
|
148
|
+
changeTertiaryColor() {
|
|
149
|
+
document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
|
|
150
|
+
}
|
|
151
|
+
changeTertiaryFontColor() {
|
|
152
|
+
document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
|
|
153
|
+
}
|
|
154
|
+
changeWarningColor() {
|
|
155
|
+
document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
|
|
156
|
+
document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
|
|
157
|
+
}
|
|
158
|
+
changeWarningHoverColor() {
|
|
159
|
+
document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
|
|
160
|
+
}
|
|
161
|
+
changeWarningFontColor() {
|
|
162
|
+
document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
|
|
163
|
+
}
|
|
164
|
+
changeSuccessColor() {
|
|
165
|
+
document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
|
|
166
|
+
document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
|
|
167
|
+
}
|
|
168
|
+
changeSuccessHoverColor() {
|
|
169
|
+
document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
|
|
170
|
+
}
|
|
171
|
+
changeSuccessFontColor() {
|
|
172
|
+
document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
|
|
173
|
+
}
|
|
174
|
+
changeDangerColor() {
|
|
175
|
+
document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
|
|
176
|
+
document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
|
|
177
|
+
}
|
|
178
|
+
changeDangerHoverColor() {
|
|
179
|
+
document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
|
|
180
|
+
}
|
|
181
|
+
changeDangerFontColor() {
|
|
182
|
+
document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
|
|
183
|
+
}
|
|
184
|
+
changeInfoColor() {
|
|
185
|
+
document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
|
|
186
|
+
document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
|
|
187
|
+
}
|
|
188
|
+
changeInfoHoverColor() {
|
|
189
|
+
document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
|
|
190
|
+
}
|
|
191
|
+
changeInfoFontColor() {
|
|
192
|
+
document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
|
|
193
|
+
}
|
|
194
|
+
changePrimaryButtonColor() {
|
|
195
|
+
document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
|
|
196
|
+
document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
|
|
197
|
+
}
|
|
198
|
+
changePrimaryHoverColor() {
|
|
199
|
+
document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
|
|
200
|
+
}
|
|
201
|
+
changePrimaryButtonFontColor() {
|
|
202
|
+
document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
|
|
203
|
+
}
|
|
204
|
+
changeSecondaryButtonColor() {
|
|
205
|
+
document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
|
|
206
|
+
document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
|
|
207
|
+
}
|
|
208
|
+
changeSecondaryHoverColor() {
|
|
209
|
+
document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
|
|
210
|
+
}
|
|
211
|
+
changeSecondaryButtonFontColor() {
|
|
212
|
+
document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
|
|
213
|
+
}
|
|
214
|
+
reset() {
|
|
215
|
+
this.form.controls.table_color.setValue('#3b3ee3');
|
|
216
|
+
this.form.controls.table_font_color.setValue('#ffffff');
|
|
217
|
+
this.form.controls.font_size.setValue(12);
|
|
218
|
+
this.form.controls.secondary_table_color.setValue('#87ceeb');
|
|
219
|
+
this.form.controls.secondary_table_font_color.setValue('#000000');
|
|
220
|
+
this.form.controls.tertiary_table_color.setValue('#ff4500');
|
|
221
|
+
this.form.controls.tertiary_table_font_color.setValue('#000000');
|
|
222
|
+
this.form.controls.collapsable_menu.setValue(true);
|
|
223
|
+
this.form.controls.entries_per_page.setValue('25');
|
|
224
|
+
this.form.controls.warning_color.setValue('#ffc107');
|
|
225
|
+
this.form.controls.warning_font_color.setValue('#000000');
|
|
226
|
+
this.form.controls.warning_hover_color.setValue('#e0a800');
|
|
227
|
+
this.form.controls.success_color.setValue('#28a745');
|
|
228
|
+
this.form.controls.success_font_color.setValue('#ffffff');
|
|
229
|
+
this.form.controls.success_hover_color.setValue('#218838');
|
|
230
|
+
this.form.controls.danger_color.setValue('#dc3545');
|
|
231
|
+
this.form.controls.danger_font_color.setValue('#ffffff');
|
|
232
|
+
this.form.controls.danger_hover_color.setValue('#c82333');
|
|
233
|
+
this.form.controls.info_color.setValue('#17a2b8');
|
|
234
|
+
this.form.controls.info_font_color.setValue('#ffffff');
|
|
235
|
+
this.form.controls.info_hover_color.setValue('#138496');
|
|
236
|
+
this.form.controls.primary_color.setValue('#007bff');
|
|
237
|
+
this.form.controls.primary_font_color.setValue('#ffffff');
|
|
238
|
+
this.form.controls.primary_hover_color.setValue('#0069d9');
|
|
239
|
+
this.form.controls.secondary_color.setValue('#868e96');
|
|
240
|
+
this.form.controls.secondary_font_color.setValue('#ffffff');
|
|
241
|
+
this.form.controls.secondary_hover_color.setValue('#5a6268');
|
|
242
|
+
document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
|
|
243
|
+
document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
|
|
244
|
+
document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
|
|
245
|
+
document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
|
|
246
|
+
document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
|
|
247
|
+
document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
|
|
248
|
+
document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
|
|
249
|
+
document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
|
|
250
|
+
document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
|
|
251
|
+
document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
|
|
252
|
+
document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
|
|
253
|
+
document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
|
|
254
|
+
document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
|
|
255
|
+
document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
|
|
256
|
+
document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
|
|
257
|
+
document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
|
|
258
|
+
document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
|
|
259
|
+
document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
|
|
260
|
+
document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
|
|
261
|
+
document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
|
|
262
|
+
document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
|
|
263
|
+
document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
|
|
264
|
+
document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
|
|
265
|
+
document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
|
|
266
|
+
document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
|
|
267
|
+
document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
|
|
268
|
+
document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
|
|
269
|
+
document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
|
|
270
|
+
document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
|
|
271
|
+
document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
|
|
272
|
+
document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
|
|
273
|
+
}
|
|
274
|
+
submitForm(form) {
|
|
275
|
+
this.hasSubmit = true;
|
|
276
|
+
this._services._socket.call('updateDocumentProps', 'users', this._services._account.getUser()._id, [
|
|
277
|
+
{ prop: 'settings', data: this.form.value }
|
|
278
|
+
], this._services._account.getUser().__v, (err, res) => {
|
|
279
|
+
if (res) {
|
|
280
|
+
this._services._alert.setAlert('success', 'Settings have been updated');
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
this._ds.error('Could not update settings');
|
|
284
|
+
this._services._socket.call('insertErrorLog', 'user settings - update user', [
|
|
285
|
+
this._services._account.getUser(), err
|
|
286
|
+
]);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
retakeTour() {
|
|
291
|
+
// this.tourService.initialize(this.tourStops);
|
|
292
|
+
// this.tourService.start();
|
|
293
|
+
this.tourStarted = true;
|
|
294
|
+
this._services._app.setTourStarted(this.tourStarted);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
UsersSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: UsersSettingsComponent, deps: [{ token: i1.AuthPermissionService }, { token: i2.UserSettingsService }, { token: i3.ProviderService }, { token: i4.DialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
298
|
+
UsersSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: UsersSettingsComponent, selector: "ng-component", providers: [ProviderService], usesInheritance: true, ngImport: i0, template: "<style>\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n</style>\n\n<div class=\"col-lg-12\">\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"submitForm(form)\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"miscOptions, tableOptions, buttonOptions\">\n <ngb-panel id=\"miscOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Misc. Options</label>\n <i *ngIf=\"!acc.activeIds.includes('miscOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('miscOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <responsive-button-group>\n <button type=\"button\" class=\"btn btn-warning\" (click)=\"retakeTour()\" *ngIf=\"!tourStarted && user && user.settings && tourStops && tourStops.length && user.other && user.other.tourTaken\">Re-take Tour</button>\n <button type=\"button\" class=\"btn btn-success\" (click)=\"reset()\">Reset Default Settings</button>\n </responsive-button-group>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n\t\t\t\t\t\t\t\t<b>Collapsable Menu</b><br>\n\t\t\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" hidden formControlName=\"collapsable_menu\">\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"form.controls.collapsable_menu.value\" class=\"fa fa-check\" style=\"color: green; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"!form.controls.collapsable_menu.value\" class=\"fa fa-times\" style=\"color: red; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Default Entries Per Page</label>\n <em *ngIf=\"!form.controls.entries_per_page.valid\">- Required</em>\n <select [ngClass]=\"['form-control', form.controls.entries_per_page.valid ? 'is-valid' : 'is-invalid']\" formControlName=\"entries_per_page\">\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n <option value=\"250\">250</option>\n </select>\n <div class=\"invalid-feedback\" *ngIf=\"!form.controls.entries_per_page.valid\">Entries per page is required</div>\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Font Size (Recommended 11-14)</label>\n <em *ngIf=\"form.controls.font_size.hasError('required')\">- Required</em>\n <em *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('maxValue')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('minValue')\">- Invalid</em>\n <input [ngClass]=\"['form-control', form.controls.font_size.valid ? 'is-valid' : 'is-invalid']\" type=\"number\" formControlName=\"font_size\" (keyup)=\"changePrimaryFontSize()\">\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('required')\">Font size is required</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">Font size is invalid</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('maxValue')\">Font size can not exceed 18</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('minValue')\">Font size can not be less than 8</div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Starting Page</label>\n <select [ngClass]=\"['form-control', form.controls.opening_route.valid ? 'is-valid' : '']\" formControlName=\"opening_route\">\n <option value=\"/home\">Home</option>\n <option *ngFor=\"let view of views\" [value]=\"view.value\">{{view.display | titleCase}}</option>\n </select>\n </div>\n </div>\n <div class=\"col-lg-6\" *ngIf=\"client === 'Ace Completions'\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Routing Preference</label>\n <select [ngClass]=\"['form-control', form.controls.routing_preference.valid ? 'is-valid' : '']\" formControlName=\"routing_preference\">\n <option value=\"alwaysAsk\">Always Ask</option>\n <option value=\"sameTab\">Same Tab</option>\n <option value=\"newTab\">New Tab</option>\n <option value=\"newWindow\">New Window</option>\n </select>\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"tableOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Table Options</label>\n <i *ngIf=\"!acc.activeIds.includes('tableOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('tableOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table> \n <thead>\n <tr>\n <th>\n Primary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_color\" (ngModelChange)=\"changePrimaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_font_color\" (ngModelChange)=\"changePrimaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table secondaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Secondary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_color\" (ngModelChange)=\"changeSecondaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <br>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_font_color\" (ngModelChange)=\"changeSecondaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table tertiaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Tertiary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_color\" (ngModelChange)=\"changeTertiaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_font_color\" (ngModelChange)=\"changeTertiaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"buttonOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Button Options</label>\n <i *ngIf=\"!acc.activeIds.includes('buttonOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('buttonOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\">Success</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_color\" (ngModelChange)=\"changeSuccessColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_font_color\" (ngModelChange)=\"changeSuccessFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_hover_color\" (ngModelChange)=\"changeSuccessHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_color\" (ngModelChange)=\"changeWarningColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_font_color\" (ngModelChange)=\"changeWarningFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_hover_color\" (ngModelChange)=\"changeWarningHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_color\" (ngModelChange)=\"changeDangerColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_font_color\" (ngModelChange)=\"changeDangerFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_hover_color\" (ngModelChange)=\"changeDangerHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-info\">Info</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_color\" (ngModelChange)=\"changeInfoColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_font_color\" (ngModelChange)=\"changeInfoFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_hover_color\" (ngModelChange)=\"changeInfoHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_color\" (ngModelChange)=\"changePrimaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_font_color\" (ngModelChange)=\"changePrimaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_hover_color\" (ngModelChange)=\"changePrimaryHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-secondary\">Secondary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_color\" (ngModelChange)=\"changeSecondaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_font_color\" (ngModelChange)=\"changeSecondaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_hover_color\" (ngModelChange)=\"changeSecondaryHoverColor()\">\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <form-button [form]=\"form\" [disabled]=\"disableFormButton\"></form-button>\n </div>\n </form>\n</div>", styles: ["\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n"], components: [{ type: i5.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { type: i6.ResponsiveButtonGroupComponent, selector: "responsive-button-group", inputs: ["collapseSize"] }, { type: i7.CollapseTableComponent, selector: "collapse-table", inputs: ["collapseSize", "tableFixed", "headerFixed", "secondaryColor", "tertiaryColor"] }, { type: i8.FormButtonComponent, selector: "form-button", inputs: ["form", "disabled"] }], directives: [{ type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { type: i5.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i9.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "titleCase": i11.TitleCaseAndUnderscorePipe } });
|
|
299
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: UsersSettingsComponent, decorators: [{
|
|
300
|
+
type: Component,
|
|
301
|
+
args: [{ providers: [ProviderService], template: "<style>\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n</style>\n\n<div class=\"col-lg-12\">\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"submitForm(form)\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"miscOptions, tableOptions, buttonOptions\">\n <ngb-panel id=\"miscOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Misc. Options</label>\n <i *ngIf=\"!acc.activeIds.includes('miscOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('miscOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <responsive-button-group>\n <button type=\"button\" class=\"btn btn-warning\" (click)=\"retakeTour()\" *ngIf=\"!tourStarted && user && user.settings && tourStops && tourStops.length && user.other && user.other.tourTaken\">Re-take Tour</button>\n <button type=\"button\" class=\"btn btn-success\" (click)=\"reset()\">Reset Default Settings</button>\n </responsive-button-group>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n\t\t\t\t\t\t\t\t<b>Collapsable Menu</b><br>\n\t\t\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" hidden formControlName=\"collapsable_menu\">\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"form.controls.collapsable_menu.value\" class=\"fa fa-check\" style=\"color: green; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"!form.controls.collapsable_menu.value\" class=\"fa fa-times\" style=\"color: red; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Default Entries Per Page</label>\n <em *ngIf=\"!form.controls.entries_per_page.valid\">- Required</em>\n <select [ngClass]=\"['form-control', form.controls.entries_per_page.valid ? 'is-valid' : 'is-invalid']\" formControlName=\"entries_per_page\">\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n <option value=\"250\">250</option>\n </select>\n <div class=\"invalid-feedback\" *ngIf=\"!form.controls.entries_per_page.valid\">Entries per page is required</div>\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Font Size (Recommended 11-14)</label>\n <em *ngIf=\"form.controls.font_size.hasError('required')\">- Required</em>\n <em *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('maxValue')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('minValue')\">- Invalid</em>\n <input [ngClass]=\"['form-control', form.controls.font_size.valid ? 'is-valid' : 'is-invalid']\" type=\"number\" formControlName=\"font_size\" (keyup)=\"changePrimaryFontSize()\">\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('required')\">Font size is required</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">Font size is invalid</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('maxValue')\">Font size can not exceed 18</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('minValue')\">Font size can not be less than 8</div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Starting Page</label>\n <select [ngClass]=\"['form-control', form.controls.opening_route.valid ? 'is-valid' : '']\" formControlName=\"opening_route\">\n <option value=\"/home\">Home</option>\n <option *ngFor=\"let view of views\" [value]=\"view.value\">{{view.display | titleCase}}</option>\n </select>\n </div>\n </div>\n <div class=\"col-lg-6\" *ngIf=\"client === 'Ace Completions'\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Routing Preference</label>\n <select [ngClass]=\"['form-control', form.controls.routing_preference.valid ? 'is-valid' : '']\" formControlName=\"routing_preference\">\n <option value=\"alwaysAsk\">Always Ask</option>\n <option value=\"sameTab\">Same Tab</option>\n <option value=\"newTab\">New Tab</option>\n <option value=\"newWindow\">New Window</option>\n </select>\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"tableOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Table Options</label>\n <i *ngIf=\"!acc.activeIds.includes('tableOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('tableOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table> \n <thead>\n <tr>\n <th>\n Primary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_color\" (ngModelChange)=\"changePrimaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_font_color\" (ngModelChange)=\"changePrimaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table secondaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Secondary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_color\" (ngModelChange)=\"changeSecondaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <br>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_font_color\" (ngModelChange)=\"changeSecondaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table tertiaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Tertiary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_color\" (ngModelChange)=\"changeTertiaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_font_color\" (ngModelChange)=\"changeTertiaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"buttonOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Button Options</label>\n <i *ngIf=\"!acc.activeIds.includes('buttonOptions')\" class=\"fa fa-plus pull-right\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('buttonOptions')\" class=\"fa fa-minus pull-right\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\">Success</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_color\" (ngModelChange)=\"changeSuccessColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_font_color\" (ngModelChange)=\"changeSuccessFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_hover_color\" (ngModelChange)=\"changeSuccessHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_color\" (ngModelChange)=\"changeWarningColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_font_color\" (ngModelChange)=\"changeWarningFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_hover_color\" (ngModelChange)=\"changeWarningHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_color\" (ngModelChange)=\"changeDangerColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_font_color\" (ngModelChange)=\"changeDangerFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_hover_color\" (ngModelChange)=\"changeDangerHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-info\">Info</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_color\" (ngModelChange)=\"changeInfoColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_font_color\" (ngModelChange)=\"changeInfoFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_hover_color\" (ngModelChange)=\"changeInfoHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_color\" (ngModelChange)=\"changePrimaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_font_color\" (ngModelChange)=\"changePrimaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_hover_color\" (ngModelChange)=\"changePrimaryHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-secondary\">Secondary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_color\" (ngModelChange)=\"changeSecondaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_font_color\" (ngModelChange)=\"changeSecondaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_hover_color\" (ngModelChange)=\"changeSecondaryHoverColor()\">\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <form-button [form]=\"form\" [disabled]=\"disableFormButton\"></form-button>\n </div>\n </form>\n</div>" }]
|
|
302
|
+
}], ctorParameters: function () { return [{ type: i1.AuthPermissionService }, { type: i2.UserSettingsService }, { type: i3.ProviderService }, { type: i4.DialogService }]; } });
|
|
303
|
+
function hexToRGB(hex, alpha) {
|
|
304
|
+
let r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
|
|
305
|
+
if (alpha) {
|
|
306
|
+
return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")";
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
return "rgb(" + r + ", " + g + ", " + b + ")";
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtc2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3VzZXItc2V0dGluZ3Mvc2V0dGluZ3MvdXNlcnMtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3VzZXItc2V0dGluZ3Mvc2V0dGluZ3MvdXNlcnMtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU12RCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsYUFBYTtJQWV4RCw0TEFBNEw7SUFDNUwscUJBQXFCO0lBQ3JCLElBQUk7SUFFSixZQUFvQixJQUEyQixFQUFVLEdBQXdCLEVBQVUsU0FBMEIsRUFBVSxHQUFrQjtRQUNoSixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFERSxTQUFJLEdBQUosSUFBSSxDQUF1QjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQXFCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFlO1FBakJqSixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFJ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QUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDakQ7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXNlclNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3VzZXItc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByb3ZpZGVyU2VydmljZSwgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Jlc29sdmVpby1jbGFzcyc7XG5pbXBvcnQgeyBBdXRoUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hdXRoL2F1dGgtcGVybWlzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd2lkZ2V0cy9kaWFsb2cvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdiVG91clNlcnZpY2UgfSBmcm9tICcuLi8uLi93aWRnZXRzL25neC10b3VyLW5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAtdG91ci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLm1vZGVsJztcbmltcG9ydCB7IHRvVGl0bGVDYXNlIH0gZnJvbSAnLi4vLi4vdXRpbC9jb21tb24uaGVscGVyJztcblxuQENvbXBvbmVudCh7XG5cdHByb3ZpZGVyczogW1Byb3ZpZGVyU2VydmljZV0sXG5cdHRlbXBsYXRlVXJsOiAnLi91c2Vycy1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlcnNTZXR0aW5nc0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7IFxuXG5cdHN1YnNjcmlwdGlvbiQ6IFN1YnNjcmlwdGlvbltdID0gW107XG5cblx0Zm9ybTogRm9ybUdyb3VwO1xuXG5cdGRpc2FibGVGb3JtQnV0dG9uID0gZmFsc2U7XG5cdHRvdXJTdG9wcyA9IFtdO1xuXHR1c2VyOiBVc2VyTW9kZWw7XG5cdHRvdXJTdGFydGVkID0gZmFsc2U7XG5cdGNsaWVudCA9ICcnO1xuXHR2aWV3cyA9IFtdO1xuXG5cdGhhc1N1Ym1pdCA9IGZhbHNlO1xuXG5cdC8vIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FwczogQXV0aFBlcm1pc3Npb25TZXJ2aWNlLCBwcml2YXRlIF91czogVXNlclNldHRpbmdzU2VydmljZSwgcHJpdmF0ZSBfc2VydmljZXM6IFByb3ZpZGVyU2VydmljZSwgcHJpdmF0ZSBfZHM6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgdG91clNlcnZpY2U6IE5nYlRvdXJTZXJ2aWNlKSB7XG5cdC8vIFx0c3VwZXIoX3NlcnZpY2VzKTtcblx0Ly8gfVxuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX2FwczogQXV0aFBlcm1pc3Npb25TZXJ2aWNlLCBwcml2YXRlIF91czogVXNlclNldHRpbmdzU2VydmljZSwgcHJpdmF0ZSBfc2VydmljZXM6IFByb3ZpZGVyU2VydmljZSwgcHJpdmF0ZSBfZHM6IERpYWxvZ1NlcnZpY2UpIHtcblx0XHRzdXBlcihfc2VydmljZXMpO1xuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5fdXMuc2V0U2VsZWN0ZWRVc2VyKCcwJyk7XG5cblx0XHR0aGlzLnRvdXJTdG9wcyA9IHRoaXMuX3NlcnZpY2VzLl9hcHAudG91clN0b3BzLmdldFZhbHVlKCk7XG5cdFx0dGhpcy50b3VyU3RhcnRlZCA9IHRoaXMuX3NlcnZpY2VzLl9hcHAudG91clN0YXJ0ZWQuZ2V0VmFsdWUoKTtcblxuXHRcdHRoaXMuY2xpZW50ID0gdGhpcy5fc2VydmljZXMuX2FwcC5jbGllbnQuZ2V0VmFsdWUoKTtcblxuXHRcdHRoaXMuZm9ybSA9IHRoaXMuX3NlcnZpY2VzLl9mYi5ncm91cCh7XG5cdFx0XHR0YWJsZV9jb2xvcjogWycjM2IzZWUzJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHRhYmxlX2ZvbnRfY29sb3I6IFsnI2ZmZmZmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRmb250X3NpemU6IFsxMiwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMuX3NlcnZpY2VzLl92cy53aG9sZU51bWJlcnNHcmVhdGVyVGhhblplcm8sIHRoaXMuX3NlcnZpY2VzLl92cy5tYXhWYWx1ZSgxOCksIHRoaXMuX3NlcnZpY2VzLl92cy5taW5WYWx1ZSg4KV1dLFxuXHRcdFx0c2Vjb25kYXJ5X3RhYmxlX2NvbG9yOiBbJyM4N2NlZWInLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0c2Vjb25kYXJ5X3RhYmxlX2ZvbnRfY29sb3I6IFsnIzAwMDAwMCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR0ZXJ0aWFyeV90YWJsZV9jb2xvcjogWycjZmY0NTAwJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3I6IFsnIzAwMDAwMCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRjb2xsYXBzYWJsZV9tZW51OiBbdHJ1ZV0sXG5cdFx0XHRlbnRyaWVzX3Blcl9wYWdlOiBbJzI1JywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHdhcm5pbmdfY29sb3I6IFsnI2ZmYzEwNycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR3YXJuaW5nX2ZvbnRfY29sb3I6IFsnIzAwMDAwMCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR3YXJuaW5nX2hvdmVyX2NvbG9yOiBbJyNlMGE4MDAnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0c3VjY2Vzc19jb2xvcjogWycjMjhhNzQ1JywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHN1Y2Nlc3NfZm9udF9jb2xvcjogWycjZmZmZmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHN1Y2Nlc3NfaG92ZXJfY29sb3I6IFsnIzIxODgzOCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRkYW5nZXJfY29sb3I6IFsnI2RjMzU0NScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRkYW5nZXJfZm9udF9jb2xvcjogWycjZmZmZmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdGRhbmdlcl9ob3Zlcl9jb2xvcjogWycjYzgyMzMzJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdGluZm9fY29sb3I6IFsnIzE3YTJiOCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRpbmZvX2ZvbnRfY29sb3I6IFsnI2ZmZmZmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRpbmZvX2hvdmVyX2NvbG9yOiBbJyMxMzg0OTYnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0cHJpbWFyeV9jb2xvcjogWycjMDA3YmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHByaW1hcnlfZm9udF9jb2xvcjogWycjZmZmZmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHByaW1hcnlfaG92ZXJfY29sb3I6IFsnIzAwNjlkOScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRzZWNvbmRhcnlfY29sb3I6IFsnIzg2OGU5NicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRzZWNvbmRhcnlfZm9udF9jb2xvcjogWycjZmZmZmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHNlY29uZGFyeV9ob3Zlcl9jb2xvcjogWycjNWE2MjY4JywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHJvdXRpbmdfcHJlZmVyZW5jZTogWydhbHdheXNBc2snXSxcblx0XHRcdG9wZW5pbmdfcm91dGU6IFsnL2hvbWUnXVxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKSAmJiB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuc2V0dGluZ3MpIHtcblx0XHRcdHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKS5zZXR0aW5ncyk7XG5cblx0XHRcdHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKS5yb2xlcy5ncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG5cdFx0XHRcdGdyb3VwLnZpZXdzLmZvckVhY2godmlldyA9PiB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLnZpZXdzLnNvbWUoYSA9PiBhLnZhbHVlID09PSB2aWV3KSkge1xuXHRcdFx0XHRcdFx0dGhpcy52aWV3cy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHZpZXcsXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXk6IHRvVGl0bGVDYXNlKHZpZXcucmVwbGFjZSgnLycsICcnKS5yZXBsYWNlKG5ldyBSZWdFeHAoJy8nLCAnZycpLCAnIC0gJykpXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50YWJsZV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZm9udC1zaXplJywgdGhpcy5mb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS52YWx1ZSArICdweCcpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktdGFibGUtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXRhYmxlLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10ZXJ0aWFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRlcnRpYXJ5LXRhYmxlLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGVydGlhcnlfdGFibGVfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfaG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfaG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuaW5mb19mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2hvdmVyX2NvbG9yLnZhbHVlKTtcblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uJC5wdXNoKHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LnVzZXIuc3Vic2NyaWJlKHVzZXIgPT4ge1xuXHRcdFx0dGhpcy51c2VyID0gdXNlcjtcblx0XHR9KSk7XG5cblx0XHR0aGlzLnN1YnNjcmlwdGlvbiQucHVzaCh0aGlzLl9zZXJ2aWNlcy5fYXBwLnRvdXJTdGFydGVkLnN1YnNjcmliZSh0b3VyU3RhcnRlZCA9PiB7XG5cdFx0XHR0aGlzLnRvdXJTdGFydGVkID0gdG91clN0YXJ0ZWQ7XG5cdFx0fSkpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb24kLmZvckVhY2goc3ViID0+IHtcblx0XHRcdHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKCF0aGlzLmhhc1N1Ym1pdCkge1xuXHRcdFx0dGhpcy5zdWJtaXRGb3JtKHRoaXMuZm9ybSk7XG5cdFx0fVxuXHR9XG5cblx0Y2hhbmdlUHJpbWFyeUNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVByaW1hcnlGb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVByaW1hcnlGb250U2l6ZSgpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZm9udC1zaXplJywgdGhpcy5mb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS52YWx1ZSArICdweCcpO1xuXHR9XG5cblx0Y2hhbmdlU2Vjb25kYXJ5Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlU2Vjb25kYXJ5Rm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VUZXJ0aWFyeUNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10ZXJ0aWFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VUZXJ0aWFyeUZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGVydGlhcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVdhcm5pbmdDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci52YWx1ZSwgLjUpKTtcblx0fVxuXG5cdGNoYW5nZVdhcm5pbmdIb3ZlckNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfaG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlV2FybmluZ0ZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VTdWNjZXNzQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3Mtc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfY29sb3IudmFsdWUsIC41KSk7XG5cdH1cblxuXHRjaGFuZ2VTdWNjZXNzSG92ZXJDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVN1Y2Nlc3NGb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlRGFuZ2VyQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci52YWx1ZSwgLjUpKTtcblx0fVxuXG5cdGNoYW5nZURhbmdlckhvdmVyQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfaG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlRGFuZ2VyRm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VJbmZvQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fY29sb3IudmFsdWUsIC41KSk7XG5cdH1cblxuXHRjaGFuZ2VJbmZvSG92ZXJDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZUluZm9Gb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlUHJpbWFyeUJ1dHRvbkNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnZhbHVlLCAuNSkpO1xuXHR9XG5cblx0Y2hhbmdlUHJpbWFyeUhvdmVyQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VQcmltYXJ5QnV0dG9uRm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVNlY29uZGFyeUJ1dHRvbkNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfY29sb3IudmFsdWUsIC41KSk7XG5cdH1cblxuXHRjaGFuZ2VTZWNvbmRhcnlIb3ZlckNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVNlY29uZGFyeUJ1dHRvbkZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0cmVzZXQoKSB7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2NvbG9yLnNldFZhbHVlKCcjM2IzZWUzJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyNmZmZmZmYnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuZm9udF9zaXplLnNldFZhbHVlKDEyKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2NvbG9yLnNldFZhbHVlKCcjODdjZWViJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9mb250X2NvbG9yLnNldFZhbHVlKCcjMDAwMDAwJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2NvbG9yLnNldFZhbHVlKCcjZmY0NTAwJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyMwMDAwMDAnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuY29sbGFwc2FibGVfbWVudS5zZXRWYWx1ZSh0cnVlKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuZW50cmllc19wZXJfcGFnZS5zZXRWYWx1ZSgnMjUnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci5zZXRWYWx1ZSgnI2ZmYzEwNycpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyMwMDAwMDAnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19ob3Zlcl9jb2xvci5zZXRWYWx1ZSgnI2UwYTgwMCcpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnNldFZhbHVlKCcjMjhhNzQ1Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2hvdmVyX2NvbG9yLnNldFZhbHVlKCcjMjE4ODM4Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci5zZXRWYWx1ZSgnI2RjMzU0NScpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfaG92ZXJfY29sb3Iuc2V0VmFsdWUoJyNjODIzMzMnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci5zZXRWYWx1ZSgnIzE3YTJiOCcpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyNmZmZmZmYnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuaW5mb19ob3Zlcl9jb2xvci5zZXRWYWx1ZSgnIzEzODQ5NicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnNldFZhbHVlKCcjMDA3YmZmJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2hvdmVyX2NvbG9yLnNldFZhbHVlKCcjMDA2OWQ5Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci5zZXRWYWx1ZSgnIzg2OGU5NicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfaG92ZXJfY29sb3Iuc2V0VmFsdWUoJyM1YTYyNjgnKTtcblxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1mb250LXNpemUnLCB0aGlzLmZvcm0uY29udHJvbHMuZm9udF9zaXplLnZhbHVlICsgJ3B4Jyk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRlcnRpYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGVydGlhcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfaG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmluZm9faG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfaG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0c3VibWl0Rm9ybShmb3JtKSB7XG5cdFx0dGhpcy5oYXNTdWJtaXQgPSB0cnVlO1xuXG5cdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCd1cGRhdGVEb2N1bWVudFByb3BzJywgJ3VzZXJzJywgdGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpLl9pZCwgW1xuXHRcdFx0e3Byb3A6ICdzZXR0aW5ncycsIGRhdGE6IHRoaXMuZm9ybS52YWx1ZX1cblx0XHRdLCB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuX192LCAoZXJyLCByZXMpID0+IHtcblx0XHRcdGlmIChyZXMpIHtcblx0XHRcdFx0dGhpcy5fc2VydmljZXMuX2FsZXJ0LnNldEFsZXJ0KCdzdWNjZXNzJywgJ1NldHRpbmdzIGhhdmUgYmVlbiB1cGRhdGVkJyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dGhpcy5fZHMuZXJyb3IoJ0NvdWxkIG5vdCB1cGRhdGUgc2V0dGluZ3MnKTtcblx0XHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdpbnNlcnRFcnJvckxvZycsICd1c2VyIHNldHRpbmdzIC0gdXBkYXRlIHVzZXInLCBbXG5cdFx0XHRcdFx0dGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpLCBlcnJcblx0XHRcdFx0XSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXRha2VUb3VyKCkge1xuXHRcdC8vIHRoaXMudG91clNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLnRvdXJTdG9wcyk7XG5cblx0XHQvLyB0aGlzLnRvdXJTZXJ2aWNlLnN0YXJ0KCk7XG5cdFx0dGhpcy50b3VyU3RhcnRlZCA9IHRydWU7XG5cdFx0dGhpcy5fc2VydmljZXMuX2FwcC5zZXRUb3VyU3RhcnRlZCh0aGlzLnRvdXJTdGFydGVkKTtcblx0fVxufVxuXG5mdW5jdGlvbiBoZXhUb1JHQihoZXgsIGFscGhhKSB7XG4gICAgbGV0IHIgPSBwYXJzZUludChoZXguc2xpY2UoMSwgMyksIDE2KSxcbiAgICAgICAgZyA9IHBhcnNlSW50KGhleC5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgICBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG5cbiAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHIgKyBcIiwgXCIgKyBnICsgXCIsIFwiICsgYiArIFwiLCBcIiArIGFscGhhICsgXCIpXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwicmdiKFwiICsgciArIFwiLCBcIiArIGcgKyBcIiwgXCIgKyBiICsgXCIpXCI7XG4gICAgfVxufSIsIjxzdHlsZT5cbiAgICA6Om5nLWRlZXAgOnJvb3Qge1xuICAgICAgICAtLXByaW1hcnktdGFibGUtY29sb3I6ICMzYjNlZTM7XG4gICAgICAgIC0tcHJpbWFyeS10YWJsZS1mb250LWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAtLWZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgLS1zZWNvbmRhcnktdGFibGUtY29sb3I6ICM4N2NlZWI7XG4gICAgICAgIC0tc2Vjb25kYXJ5LXRhYmxlLWZvbnQtY29sb3I6ICMwMDAwMDA7XG4gICAgICAgIC0tdGVydGlhcnktdGFibGUtY29sb3I6ICNmZjQ1MDA7XG4gICAgICAgIC0tdGVydGlhcnktdGFibGUtZm9udC1jb2xvcjogIzAwMDAwMDtcbiAgICAgICAgLS13YXJuaW5nLWNvbG9yOiAjZmZjMTA3O1xuICAgICAgICAtLXdhcm5pbmctZm9udC1jb2xvcjogIzAwMDAwMDtcbiAgICAgICAgLS13YXJuaW5nLWhvdmVyLWNvbG9yOiAjZTBhODAwO1xuICAgICAgICAtLXdhcm5pbmctc2hhZG93LWNvbG9yOiAwIDAgMCAwLjJyZW0gcmdiYSgyMjIsIDE3MCwgMTIsIDAuNSk7XG4gICAgICAgIC0tc3VjY2Vzcy1jb2xvcjogIzI4YTc0NTtcbiAgICAgICAgLS1zdWNjZXNzLWZvbnQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIC0tc3VjY2Vzcy1ob3Zlci1jb2xvcjogIzIxODgzODtcbiAgICAgICAgLS1zdWNjZXNzLXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoNzIsIDE4MCwgOTcsIDAuNSk7XG4gICAgICAgIC0tZGFuZ2VyLWNvbG9yOiAjZGMzNTQ1O1xuICAgICAgICAtLWRhbmdlci1mb250LWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAtLWRhbmdlci1ob3Zlci1jb2xvcjogI2M4MjMzMztcbiAgICAgICAgLS1kYW5nZXItc2hhZG93LWNvbG9yOiAwIDAgMCAwLjJyZW0gcmdiYSgyMjUsIDgzLCA5NywgMC41KTtcbiAgICAgICAgLS1pbmZvLWNvbG9yOiAjMTdhMmI4O1xuICAgICAgICAtLWluZm8tZm9udC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgLS1pbmZvLWhvdmVyLWNvbG9yOiAjMTM4NDk2O1xuICAgICAgICAtLWluZm8tc2hhZG93LWNvbG9yOiAwIDAgMCAwLjJyZW0gcmdiYSg1OCwgMTc2LCAxOTUsIDAuNSk7XG4gICAgICAgIC0tcHJpbWFyeS1jb2xvcjogIzAwN2JmZjtcbiAgICAgICAgLS1wcmltYXJ5LWZvbnQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIC0tcHJpbWFyeS1ob3Zlci1jb2xvcjogIzAwNjlkOTtcbiAgICAgICAgLS1wcmltYXJ5LXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoMzgsIDE0MywgMjU1LCAwLjUpO1xuICAgICAgICAtLXNlY29uZGFyeS1jb2xvcjogIzg2OGU5NjtcbiAgICAgICAgLS1zZWNvbmRhcnktZm9udC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgLS1zZWNvbmRhcnktaG92ZXItY29sb3I6ICM1YTYyNjg7XG4gICAgICAgIC0tc2Vjb25kYXJ5LXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoMTMwLCAxMzgsIDE0NSwgMC41KTtcbiAgICB9XG5cbiAgICAubGFiZWwtYWNjb3JkaW9uIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICAgIH1cblxuICAgIC5mYS1wbHVzIHtcbiAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgIH1cblxuICAgIC5mYS1taW51cyB7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICB9IFxuXG4gICAgLmJ0bi13YXJuaW5nIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXdhcm5pbmctZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdhcm5pbmctY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXdhcm5pbmctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXdhcm5pbmc6Zm9jdXMsIC5idG4td2FybmluZy5mb2N1cyB7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXdhcm5pbmctc2hhZG93LWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi13YXJuaW5nOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXdhcm5pbmctZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdhcm5pbmctaG92ZXItY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXdhcm5pbmctaG92ZXItY29sb3IpO1xuICAgIH1cblxuICAgIC5idG4tc3VjY2VzcyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1zdWNjZXNzLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdWNjZXNzLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zdWNjZXNzLWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi1zdWNjZXNzOmZvY3VzLCAuYnRuLXN1Y2Nlc3MuZm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zdWNjZXNzLXNoYWRvdy1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tc3VjY2Vzczpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1zdWNjZXNzLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdWNjZXNzLWhvdmVyLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zdWNjZXNzLWhvdmVyLWNvbG9yKTtcbiAgICB9XG5cbiAgICAuYnRuLWRhbmdlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1kYW5nZXItZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRhbmdlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZGFuZ2VyLWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi1kYW5nZXI6Zm9jdXMsIC5idG4tZGFuZ2VyLmZvY3VzIHtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tZGFuZ2VyLXNoYWRvdy1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tZGFuZ2VyOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWRhbmdlci1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGFuZ2VyLWhvdmVyLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1kYW5nZXItaG92ZXItY29sb3IpO1xuICAgIH1cblxuICAgIC5idG4taW5mbyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pbmZvLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pbmZvLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvLWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi1pbmZvOmZvY3VzLCAuYnRuLWluZm8uZm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1pbmZvLXNoYWRvdy1jb2xvcik7XG4gICAgfVxuICAgIC5idG4taW5mbzpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pbmZvLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pbmZvLWhvdmVyLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvLWhvdmVyLWNvbG9yKTtcbiAgICB9XG5cbiAgICAuYnRuLXByaW1hcnkge1xuICAgICAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tcHJpbWFyeTpmb2N1cywgLmJ0bi1wcmltYXJ5LmZvY3VzIHtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tcHJpbWFyeS1zaGFkb3ctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXByaW1hcnk6aG92ZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1ob3Zlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeS1ob3Zlci1jb2xvcik7XG4gICAgfVxuXG4gICAgLmJ0bi1zZWNvbmRhcnkge1xuICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXNlY29uZGFyeS1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLXNlY29uZGFyeS5mb2N1cyB7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNlY29uZGFyeS1zaGFkb3ctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXNlY29uZGFyeTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlY29uZGFyeS1ob3Zlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWhvdmVyLWNvbG9yKTtcbiAgICB9XG5cbiAgICAuZmEtbWludXMge1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgfSBcblxuICAgIDpob3N0IC9kZWVwLyAuY2FyZCAuY2FyZC1ib2R5IC5jb2xsYXBzZVRhYmxlIHRoIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS10YWJsZS1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXRhYmxlLWZvbnQtY29sb3IpO1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgfVxuXG4gICAgOmhvc3QgL2RlZXAvIC5jYXJkIC5jYXJkLWJvZHkgLmNvbGxhcHNlVGFibGUtc2VjIHRoIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRhYmxlLWNvbG9yKTtcbiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10YWJsZS1mb250LWNvbG9yKTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIH1cblxuICAgIDpob3N0IC9kZWVwLyAuY2FyZCAuY2FyZC1ib2R5IC5jb2xsYXBzZVRhYmxlLXRlcnQgdGgge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10ZXJ0aWFyeS10YWJsZS1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS10ZXJ0aWFyeS10YWJsZS1mb250LWNvbG9yKTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIH1cbjwvc3R5bGU+XG5cbjxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBub3ZhbGlkYXRlIChuZ1N1Ym1pdCk9XCJzdWJtaXRGb3JtKGZvcm0pXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxuZ2ItYWNjb3JkaW9uICNhY2M9XCJuZ2JBY2NvcmRpb25cIiBhY3RpdmVJZHM9XCJtaXNjT3B0aW9ucywgdGFibGVPcHRpb25zLCBidXR0b25PcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgPG5nYi1wYW5lbCBpZD1cIm1pc2NPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbFRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtYWNjb3JkaW9uXCI+TWlzYy4gT3B0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhYWNjLmFjdGl2ZUlkcy5pbmNsdWRlcygnbWlzY09wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtcGx1cyBwdWxsLXJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiYWNjLmFjdGl2ZUlkcy5pbmNsdWRlcygnbWlzY09wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtbWludXMgcHVsbC1yaWdodFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlc3BvbnNpdmUtYnV0dG9uLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIiAoY2xpY2spPVwicmV0YWtlVG91cigpXCIgKm5nSWY9XCIhdG91clN0YXJ0ZWQgJiYgdXNlciAmJiB1c2VyLnNldHRpbmdzICYmIHRvdXJTdG9wcyAmJiB0b3VyU3RvcHMubGVuZ3RoICYmIHVzZXIub3RoZXIgJiYgdXNlci5vdGhlci50b3VyVGFrZW5cIj5SZS10YWtlIFRvdXI8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cInJlc2V0KClcIj5SZXNldCBEZWZhdWx0IFNldHRpbmdzPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8Yj5Db2xsYXBzYWJsZSBNZW51PC9iPjxicj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgaGlkZGVuIGZvcm1Db250cm9sTmFtZT1cImNvbGxhcHNhYmxlX21lbnVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmNvbGxhcHNhYmxlX21lbnUudmFsdWVcIiBjbGFzcz1cImZhIGZhLWNoZWNrXCIgc3R5bGU9XCJjb2xvcjogZ3JlZW47IGZvbnQtc2l6ZTogMjRweDtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpICpuZ0lmPVwiIWZvcm0uY29udHJvbHMuY29sbGFwc2FibGVfbWVudS52YWx1ZVwiIGNsYXNzPVwiZmEgZmEtdGltZXNcIiBzdHlsZT1cImNvbG9yOiByZWQ7IGZvbnQtc2l6ZTogMjRweDtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+RGVmYXVsdCBFbnRyaWVzIFBlciBQYWdlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSAqbmdJZj1cIiFmb3JtLmNvbnRyb2xzLmVudHJpZXNfcGVyX3BhZ2UudmFsaWRcIj4tIFJlcXVpcmVkPC9lbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5lbnRyaWVzX3Blcl9wYWdlLnZhbGlkID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJlbnRyaWVzX3Blcl9wYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI1MFwiPjUwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxMDBcIj4xMDA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjI1MFwiPjI1MDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cIiFmb3JtLmNvbnRyb2xzLmVudHJpZXNfcGVyX3BhZ2UudmFsaWRcIj5FbnRyaWVzIHBlciBwYWdlIGlzIHJlcXVpcmVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+Rm9udCBTaXplIChSZWNvbW1lbmRlZCAxMS0xNCk8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtICpuZ0lmPVwiZm9ybS5jb250cm9scy5mb250X3NpemUuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj4tIFJlcXVpcmVkPC9lbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSAqbmdJZj1cImZvcm0uY29udHJvbHMuZm9udF9zaXplLmhhc0Vycm9yKCd3aG9sZU51bWJlcnNHcmVhdGVyVGhhblplcm8nKVwiPi0gSW52YWxpZDwvZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcignbWF4VmFsdWUnKVwiPi0gSW52YWxpZDwvZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcignbWluVmFsdWUnKVwiPi0gSW52YWxpZDwvZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS52YWxpZCA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cImZvbnRfc2l6ZVwiIChrZXl1cCk9XCJjaGFuZ2VQcmltYXJ5Rm9udFNpemUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImZvcm0uY29udHJvbHMuZm9udF9zaXplLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+Rm9udCBzaXplIGlzIHJlcXVpcmVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZm9ybS5jb250cm9scy5mb250X3NpemUuaGFzRXJyb3IoJ3dob2xlTnVtYmVyc0dyZWF0ZXJUaGFuWmVybycpXCI+Rm9udCBzaXplIGlzIGludmFsaWQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcignbWF4VmFsdWUnKVwiPkZvbnQgc2l6ZSBjYW4gbm90IGV4Y2VlZCAxODwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImZvcm0uY29udHJvbHMuZm9udF9zaXplLmhhc0Vycm9yKCdtaW5WYWx1ZScpXCI+Rm9udCBzaXplIGNhbiBub3QgYmUgbGVzcyB0aGFuIDg8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlN0YXJ0aW5nIFBhZ2U8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMub3BlbmluZ19yb3V0ZS52YWxpZCA/ICdpcy12YWxpZCcgOiAnJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJvcGVuaW5nX3JvdXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi9ob21lXCI+SG9tZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHZpZXcgb2Ygdmlld3NcIiBbdmFsdWVdPVwidmlldy52YWx1ZVwiPnt7dmlldy5kaXNwbGF5IHwgdGl0bGVDYXNlfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIiAqbmdJZj1cImNsaWVudCA9PT0gJ0FjZSBDb21wbGV0aW9ucydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlJvdXRpbmcgUHJlZmVyZW5jZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5yb3V0aW5nX3ByZWZlcmVuY2UudmFsaWQgPyAnaXMtdmFsaWQnIDogJyddXCIgZm9ybUNvbnRyb2xOYW1lPVwicm91dGluZ19wcmVmZXJlbmNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsd2F5c0Fza1wiPkFsd2F5cyBBc2s8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2FtZVRhYlwiPlNhbWUgVGFiPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5ld1RhYlwiPk5ldyBUYWI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibmV3V2luZG93XCI+TmV3IFdpbmRvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZ2ItcGFuZWw+XG4gICAgICAgICAgICAgICAgPG5nYi1wYW5lbCBpZD1cInRhYmxlT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWFjY29yZGlvblwiPlRhYmxlIE9wdGlvbnM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ3RhYmxlT3B0aW9ucycpXCIgY2xhc3M9XCJmYSBmYS1wbHVzIHB1bGwtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY2MuYWN0aXZlSWRzLmluY2x1ZGVzKCd0YWJsZU9wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtbWludXMgcHVsbC1yaWdodFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbGxhcHNlLXRhYmxlPiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmltYXJ5IFRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29sbGFwc2UtdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PlByaW1hcnkgVGFibGUgQmFja2dyb3VuZDo8L2R0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy50YWJsZV9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwidGFibGVfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcmltYXJ5Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PlByaW1hcnkgVGFibGUgRm9udDo8L2R0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy50YWJsZV9mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJ0YWJsZV9mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUHJpbWFyeUZvbnRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sbGFwc2UtdGFibGUgc2Vjb25kYXJ5Q29sb3I9XCJ0cnVlXCI+ICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY29uZGFyeSBUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbGxhcHNlLXRhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD5TZWNvbmRhcnkgVGFibGUgQmFja2dyb3VuZDo8L2R0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInNlY29uZGFyeV90YWJsZV9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNlY29uZGFyeUNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+U2Vjb25kYXJ5IFRhYmxlIEZvbnQ6PC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInNlY29uZGFyeV90YWJsZV9mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2Vjb25kYXJ5Rm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xsYXBzZS10YWJsZSB0ZXJ0aWFyeUNvbG9yPVwidHJ1ZVwiPiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXJ0aWFyeSBUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbGxhcHNlLXRhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD5UZXJ0aWFyeSBUYWJsZSBCYWNrZ3JvdW5kOjwvZHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXJ0aWFyeV90YWJsZV9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVRlcnRpYXJ5Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PlRlcnRpYXJ5IFRhYmxlIEZvbnQ6PC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMudGVydGlhcnlfdGFibGVfZm9udF9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwidGVydGlhcnlfdGFibGVfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVRlcnRpYXJ5Rm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nYi1wYW5lbD5cbiAgICAgICAgICAgICAgICA8bmdiLXBhbmVsIGlkPVwiYnV0dG9uT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWFjY29yZGlvblwiPkJ1dHRvbiBPcHRpb25zPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFhY2MuYWN0aXZlSWRzLmluY2x1ZGVzKCdidXR0b25PcHRpb25zJylcIiBjbGFzcz1cImZhIGZhLXBsdXMgcHVsbC1yaWdodFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ2J1dHRvbk9wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtbWludXMgcHVsbC1yaWdodFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj5TdWNjZXNzPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlN1Y2Nlc3MgQnV0dG9uIEJhY2tncm91bmQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzdWNjZXNzX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU3VjY2Vzc0NvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5TdWNjZXNzIEJ1dHRvbiBGb250OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuc3VjY2Vzc19mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzdWNjZXNzX2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTdWNjZXNzRm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5TdWNjZXNzIEJ1dHRvbiBIb3Zlcjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfaG92ZXJfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInN1Y2Nlc3NfaG92ZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTdWNjZXNzSG92ZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2FybmluZ1wiPldhcm5pbmc8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+V2FybmluZyBCdXR0b24gQmFja2dyb3VuZDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLndhcm5pbmdfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cIndhcm5pbmdfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VXYXJuaW5nQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPldhcm5pbmcgQnV0dG9uIEZvbnQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy53YXJuaW5nX2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cIndhcm5pbmdfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVdhcm5pbmdGb250Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPldhcm5pbmcgQnV0dG9uIEhvdmVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMud2FybmluZ19ob3Zlcl9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwid2FybmluZ19ob3Zlcl9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVdhcm5pbmdIb3ZlckNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIj5EYW5nZXI8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+RGFuZ2VyIEJ1dHRvbiBCYWNrZ3JvdW5kOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuZGFuZ2VyX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJkYW5nZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VEYW5nZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+RGFuZ2VyIEJ1dHRvbiBGb250OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuZGFuZ2VyX2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cImRhbmdlcl9mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRGFuZ2VyRm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5EYW5nZXIgQnV0dG9uIEhvdmVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuZGFuZ2VyX2hvdmVyX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJkYW5nZXJfaG92ZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VEYW5nZXJIb3ZlckNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvXCI+SW5mbzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5JbmZvIEJ1dHRvbiBCYWNrZ3JvdW5kOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5mb19jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUluZm9Db2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+SW5mbyBCdXR0b24gRm9udDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLmluZm9fZm9udF9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5mb19mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5mb0ZvbnRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+SW5mbyBCdXR0b24gSG92ZXI6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5pbmZvX2hvdmVyX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJpbmZvX2hvdmVyX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5mb0hvdmVyQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5QcmltYXJ5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlByaW1hcnkgQnV0dG9uIEJhY2tncm91bmQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJwcmltYXJ5X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUHJpbWFyeUJ1dHRvbkNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5QcmltYXJ5IEJ1dHRvbiBGb250OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMucHJpbWFyeV9mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJwcmltYXJ5X2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcmltYXJ5QnV0dG9uRm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5QcmltYXJ5IEJ1dHRvbiBIb3Zlcjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnByaW1hcnlfaG92ZXJfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInByaW1hcnlfaG92ZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcmltYXJ5SG92ZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCI+U2Vjb25kYXJ5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlNlY29uZGFyeSBCdXR0b24gQmFja2dyb3VuZDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kYXJ5X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2Vjb25kYXJ5QnV0dG9uQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlNlY29uZGFyeSBCdXR0b24gRm9udDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzZWNvbmRhcnlfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNlY29uZGFyeUJ1dHRvbkZvbnRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+U2Vjb25kYXJ5IEJ1dHRvbiBIb3Zlcjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9ob3Zlcl9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kYXJ5X2hvdmVyX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2Vjb25kYXJ5SG92ZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZ2ItcGFuZWw+XG4gICAgICAgICAgICA8L25nYi1hY2NvcmRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTVweDtcIj5cbiAgICAgICAgICAgIDxmb3JtLWJ1dHRvbiBbZm9ybV09XCJmb3JtXCIgW2Rpc2FibGVkXT1cImRpc2FibGVGb3JtQnV0dG9uXCI+PC9mb3JtLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuPC9kaXY+Il19
|