@sunbird-cb/toc 0.0.7 → 0.0.9
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/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -55
- package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -126
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -85
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -100
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -48
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -120
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -92
- package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -48
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -89
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -42
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -78
- package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -45
- package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -70
- package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -187
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -86
- package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -31
- package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -941
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -183
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -327
- package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -297
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +248 -225
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1148 -1030
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -16
- package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -43
- package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -133
- package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -66
- package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -278
- package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -847
- package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -219
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -209
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -26
- package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -19
- package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -23
- package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -113
- package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -110
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -26
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -19
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -67
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -77
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -61
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -20
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -67
- package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -139
- package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -71
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -34
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -56
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -37
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -30
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -38
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -115
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -12
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -61
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -87
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -36
- package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -62
- package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -24
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -192
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -44
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -99
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -58
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -67
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -112
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -2
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -69
- package/esm2022/lib/_collection-api.mjs +57 -57
- package/esm2022/lib/_constants/widget-content.constants.mjs +19 -19
- package/esm2022/lib/_directives/tooltip.directive.mjs +68 -68
- package/esm2022/lib/_models/common.model.mjs +2 -2
- package/esm2022/lib/_models/error.model.mjs +2 -2
- package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -24
- package/esm2022/lib/_services/rating.service.mjs +89 -89
- package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -29
- package/esm2022/lib/_services/viewer-route-util.mjs +103 -103
- package/esm2022/lib/_services/widget-content.model.mjs +247 -247
- package/esm2022/lib/_services/widget-content.service.mjs +594 -594
- package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -9
- package/esm2022/lib/app-toc-lib.module.mjs +499 -499
- package/esm2022/lib/collection.config.mjs +161 -161
- package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -37
- package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -1436
- package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -475
- package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -119
- package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -80
- package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -249
- package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -39
- package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -58
- package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -2229
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2907 -2905
- package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -157
- package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -48
- package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -47
- package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -766
- package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -243
- package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -116
- package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -44
- package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -1838
- package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -236
- package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -213
- package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -36
- package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -256
- package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -133
- package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -36
- package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -2
- package/esm2022/lib/models/app-toc.model.mjs +38 -38
- package/esm2022/lib/models/auto-complete.model.mjs +2 -2
- package/esm2022/lib/models/card-content.model.mjs +13 -13
- package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -2
- package/esm2022/lib/models/discussion-forum.model.mjs +14 -14
- package/esm2022/lib/models/goal.model.mjs +2 -2
- package/esm2022/lib/models/meta-tag.model.mjs +8 -8
- package/esm2022/lib/models/playlist.model.mjs +2 -2
- package/esm2022/lib/models/profile-revamp.model.mjs +2 -2
- package/esm2022/lib/models/rating.model.mjs +2 -2
- package/esm2022/lib/models/user-profile.model.mjs +21 -21
- package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -60
- package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -106
- package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -25
- package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -51
- package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -16
- package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -18
- package/esm2022/lib/services/access-control.service.mjs +56 -56
- package/esm2022/lib/services/action.service.mjs +23 -23
- package/esm2022/lib/services/app-toc-v2.service.mjs +313 -243
- package/esm2022/lib/services/app-toc.service.mjs +1613 -1387
- package/esm2022/lib/services/certificate.service.mjs +69 -69
- package/esm2022/lib/services/discuss-utils.service.mjs +58 -58
- package/esm2022/lib/services/editor.service.mjs +34 -34
- package/esm2022/lib/services/load-check.service.mjs +21 -21
- package/esm2022/lib/services/loader.service.mjs +33 -33
- package/esm2022/lib/services/mobile-apps.service.mjs +67 -67
- package/esm2022/lib/services/netcore.service.mjs +56 -56
- package/esm2022/lib/services/nps-grid.service.mjs +31 -31
- package/esm2022/lib/services/otp.service.mjs +43 -43
- package/esm2022/lib/services/profile-v2.service.mjs +43 -43
- package/esm2022/lib/services/reset-ratings.service.mjs +19 -19
- package/esm2022/lib/services/resource-download-helper.service.mjs +64 -64
- package/esm2022/lib/services/timer.service.mjs +23 -23
- package/esm2022/lib/services/title-tag.service.mjs +71 -71
- package/esm2022/lib/services/user-profile.service.mjs +55 -55
- package/esm2022/lib/services/viewer-data.service.mjs +64 -64
- package/esm2022/lib/services/viewer-util.service.mjs +590 -500
- package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -291
- package/esm2022/lib/share-toc/share-toc.module.mjs +119 -119
- package/esm2022/public-api.mjs +71 -70
- package/esm2022/sunbird-cb-toc.mjs +4 -4
- package/fesm2022/sunbird-cb-toc.mjs +24777 -24250
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +16 -16
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +31 -31
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +15 -15
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +20 -20
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +22 -22
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +15 -15
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +22 -22
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +22 -22
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +9 -9
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +11 -11
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +12 -12
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +18 -18
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +14 -14
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +11 -11
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts +17 -17
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts +14 -14
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +199 -199
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts +16 -16
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts +10 -10
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +38 -38
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +19 -19
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +11 -11
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +183 -183
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +41 -41
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +54 -54
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +47 -47
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +49 -48
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +171 -154
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +8 -8
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +16 -16
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +40 -40
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +21 -21
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +45 -45
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +10 -10
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +10 -10
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts +128 -128
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts +51 -51
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +29 -29
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +9 -9
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +7 -7
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +7 -7
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +28 -28
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +24 -24
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +14 -14
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +9 -9
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +12 -12
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +10 -10
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +22 -22
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +8 -8
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +18 -18
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +8 -8
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +15 -15
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts +35 -35
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts +19 -19
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +14 -14
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +13 -13
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +11 -11
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +11 -11
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +15 -15
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +10 -10
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +16 -16
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +11 -11
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +34 -34
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +17 -17
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +15 -15
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +15 -15
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +21 -21
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +12 -12
- package/lib/_collection/_common/user-image/user-image.component.d.ts +21 -21
- package/lib/_collection/_common/user-image/user-image.module.d.ts +9 -9
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +47 -47
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +14 -14
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +22 -22
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +19 -19
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +15 -15
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +25 -25
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +21 -21
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +18 -18
- package/lib/_collection-api.d.ts +34 -34
- package/lib/_constants/widget-content.constants.d.ts +7 -7
- package/lib/_directives/tooltip.directive.d.ts +17 -17
- package/lib/_models/common.model.d.ts +3 -3
- package/lib/_models/error.model.d.ts +5 -5
- package/lib/_pipes/highlight.pipe.d.ts +10 -10
- package/lib/_services/rating.service.d.ts +18 -18
- package/lib/_services/samuhik-charcha.service.d.ts +13 -13
- package/lib/_services/viewer-route-util.d.ts +8 -8
- package/lib/_services/widget-content.model.d.ts +515 -515
- package/lib/_services/widget-content.service.d.ts +101 -101
- package/lib/_shared/translate-loader.factory.d.ts +7 -7
- package/lib/app-toc-lib.module.d.ts +88 -88
- package/lib/collection.config.d.ts +159 -159
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +17 -17
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +225 -225
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +78 -78
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +22 -22
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +31 -31
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +47 -47
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +14 -14
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +21 -21
- package/lib/components/app-toc-home/app-toc-home.component.d.ts +314 -314
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +408 -408
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +47 -47
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +22 -22
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +14 -14
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +149 -149
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +42 -42
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +27 -27
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +15 -15
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +195 -195
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +44 -44
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +54 -54
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +18 -18
- package/lib/components/public-survey-form/public-survey-form.component.d.ts +43 -43
- package/lib/components/survey-form-question/survey-form-question.component.d.ts +20 -20
- package/lib/components/survey-form-section/survey-form-section.component.d.ts +13 -13
- package/lib/models/app-toc-analytics.model.d.ts +152 -152
- package/lib/models/app-toc.model.d.ts +84 -84
- package/lib/models/auto-complete.model.d.ts +27 -27
- package/lib/models/card-content.model.d.ts +19 -19
- package/lib/models/content-strip-with-tabs.model.d.ts +44 -44
- package/lib/models/discussion-forum.model.d.ts +40 -40
- package/lib/models/goal.model.d.ts +22 -22
- package/lib/models/meta-tag.model.d.ts +6 -6
- package/lib/models/playlist.model.d.ts +23 -23
- package/lib/models/profile-revamp.model.d.ts +14 -14
- package/lib/models/rating.model.d.ts +17 -17
- package/lib/models/user-profile.model.d.ts +37 -37
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +16 -16
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-resolver.service.d.ts +16 -16
- package/lib/resolvers/config-resolver.service.d.ts +11 -11
- package/lib/resolvers/profile-resolver.service.d.ts +11 -11
- package/lib/resolvers/restricted-features-resolver.service.d.ts +11 -11
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts +19 -19
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +8 -8
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts +8 -8
- package/lib/services/access-control.service.d.ts +29 -29
- package/lib/services/action.service.d.ts +9 -9
- package/lib/services/app-toc-v2.service.d.ts +16 -14
- package/lib/services/app-toc.service.d.ts +235 -177
- package/lib/services/certificate.service.d.ts +42 -42
- package/lib/services/discuss-utils.service.d.ts +33 -33
- package/lib/services/editor.service.d.ts +17 -17
- package/lib/services/load-check.service.d.ts +8 -8
- package/lib/services/loader.service.d.ts +16 -16
- package/lib/services/mobile-apps.service.d.ts +38 -38
- package/lib/services/netcore.service.d.ts +33 -33
- package/lib/services/nps-grid.service.d.ts +15 -15
- package/lib/services/otp.service.d.ts +20 -20
- package/lib/services/profile-v2.service.d.ts +20 -20
- package/lib/services/reset-ratings.service.d.ts +8 -8
- package/lib/services/resource-download-helper.service.d.ts +29 -29
- package/lib/services/timer.service.d.ts +9 -9
- package/lib/services/title-tag.service.d.ts +21 -21
- package/lib/services/user-profile.service.d.ts +24 -24
- package/lib/services/viewer-data.service.d.ts +58 -58
- package/lib/services/viewer-util.service.d.ts +76 -62
- package/lib/share-toc/share-toc/share-toc.component.d.ts +56 -56
- package/lib/share-toc/share-toc.module.d.ts +32 -32
- package/package.json +1 -1
- package/public-api.d.ts +56 -55
|
@@ -1,157 +1,157 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { NsContent } from '../../_services/widget-content.model';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/router";
|
|
5
|
-
import * as i2 from "../../services/app-toc.service";
|
|
6
|
-
import * as i3 from "@sunbird-cb/utils-v2";
|
|
7
|
-
import * as i4 from "@angular/platform-browser";
|
|
8
|
-
import * as i5 from "../../services/access-control.service";
|
|
9
|
-
import * as i6 from "@angular/common";
|
|
10
|
-
import * as i7 from "@angular/material/icon";
|
|
11
|
-
import * as i8 from "@angular/material/legacy-button";
|
|
12
|
-
import * as i9 from "@angular/material/legacy-card";
|
|
13
|
-
import * as i10 from "@angular/material/legacy-chips";
|
|
14
|
-
import * as i11 from "@angular/material/divider";
|
|
15
|
-
import * as i12 from "@angular/material/expansion";
|
|
16
|
-
import * as i13 from "../../_collection/_common/user-image/user-image.component";
|
|
17
|
-
import * as i14 from "../../_collection/_common/player-brief/player-brief.component";
|
|
18
|
-
export class AppTocOverviewComponent {
|
|
19
|
-
constructor(route, tocSharedSvc, configSvc, domSanitizer, authAccessControlSvc) {
|
|
20
|
-
this.route = route;
|
|
21
|
-
this.tocSharedSvc = tocSharedSvc;
|
|
22
|
-
this.configSvc = configSvc;
|
|
23
|
-
this.domSanitizer = domSanitizer;
|
|
24
|
-
this.authAccessControlSvc = authAccessControlSvc;
|
|
25
|
-
this.content = null;
|
|
26
|
-
this.routeSubscription = null;
|
|
27
|
-
this.viewMoreRelatedTopics = false;
|
|
28
|
-
this.hasTocStructure = false;
|
|
29
|
-
this.tocStructure = null;
|
|
30
|
-
this.askAuthorEnabled = true;
|
|
31
|
-
this.trainingLHubEnabled = false;
|
|
32
|
-
this.body = null;
|
|
33
|
-
this.forPreview = false;
|
|
34
|
-
this.tocConfig = null;
|
|
35
|
-
this.contentParents = {};
|
|
36
|
-
this.objKeys = Object.keys;
|
|
37
|
-
if (this.configSvc.restrictedFeatures) {
|
|
38
|
-
this.askAuthorEnabled = !this.configSvc.restrictedFeatures.has('askAuthor');
|
|
39
|
-
this.trainingLHubEnabled = !this.configSvc.restrictedFeatures.has('trainingLHub');
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
ngOnInit() {
|
|
43
|
-
if (!this.forPreview) {
|
|
44
|
-
this.forPreview = window.location.href.includes('/author/');
|
|
45
|
-
}
|
|
46
|
-
if (this.route && this.route.parent) {
|
|
47
|
-
this.routeSubscription = this.route.parent.data.subscribe((data) => {
|
|
48
|
-
this.initData(data);
|
|
49
|
-
this.tocConfig = data.pageData.data;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
ngOnDestroy() {
|
|
54
|
-
if (this.routeSubscription) {
|
|
55
|
-
this.routeSubscription.unsubscribe();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
get showSubtitleOnBanner() {
|
|
59
|
-
return this.tocSharedSvc.subtitleOnBanners;
|
|
60
|
-
}
|
|
61
|
-
get showDescription() {
|
|
62
|
-
if (this.content && !this.content.body) {
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
return this.tocSharedSvc.showDescription;
|
|
66
|
-
}
|
|
67
|
-
initData(data) {
|
|
68
|
-
const initData = this.tocSharedSvc.initData(data);
|
|
69
|
-
this.content = initData.content;
|
|
70
|
-
this.body = this.domSanitizer.bypassSecurityTrustHtml(this.content && this.content.body
|
|
71
|
-
? this.forPreview
|
|
72
|
-
? this.authAccessControlSvc.proxyToAuthoringUrl(this.content.body)
|
|
73
|
-
: this.content.body
|
|
74
|
-
: '');
|
|
75
|
-
this.contentParents = {};
|
|
76
|
-
this.resetAndFetchTocStructure();
|
|
77
|
-
this.getTrainingCount();
|
|
78
|
-
this.getContentParent();
|
|
79
|
-
}
|
|
80
|
-
getContentParent() {
|
|
81
|
-
if (this.content) {
|
|
82
|
-
const contentParentReq = {
|
|
83
|
-
fields: ['contentType', 'name'],
|
|
84
|
-
};
|
|
85
|
-
this.tocSharedSvc
|
|
86
|
-
.fetchContentParent(this.content.identifier, contentParentReq, this.forPreview)
|
|
87
|
-
.subscribe(res => {
|
|
88
|
-
this.parseContentParent(res);
|
|
89
|
-
}, _err => {
|
|
90
|
-
this.contentParents = {};
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
parseContentParent(content) {
|
|
95
|
-
content.collections.forEach(collection => {
|
|
96
|
-
if (!this.contentParents.hasOwnProperty(collection.contentType)) {
|
|
97
|
-
this.contentParents[collection.contentType] = [];
|
|
98
|
-
}
|
|
99
|
-
this.contentParents[collection.contentType].push(collection);
|
|
100
|
-
this.parseContentParent(collection);
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
resetAndFetchTocStructure() {
|
|
104
|
-
this.tocStructure = {
|
|
105
|
-
assessment: 0,
|
|
106
|
-
finalTest: 0,
|
|
107
|
-
course: 0,
|
|
108
|
-
handsOn: 0,
|
|
109
|
-
interactiveVideo: 0,
|
|
110
|
-
learningModule: 0,
|
|
111
|
-
other: 0,
|
|
112
|
-
pdf: 0,
|
|
113
|
-
survey: 0,
|
|
114
|
-
podcast: 0,
|
|
115
|
-
practiceTest: 0,
|
|
116
|
-
quiz: 0,
|
|
117
|
-
video: 0,
|
|
118
|
-
webModule: 0,
|
|
119
|
-
webPage: 0,
|
|
120
|
-
youtube: 0,
|
|
121
|
-
interactivecontent: 0,
|
|
122
|
-
offlineSession: 0,
|
|
123
|
-
};
|
|
124
|
-
if (this.content) {
|
|
125
|
-
this.hasTocStructure = false;
|
|
126
|
-
this.tocStructure.learningModule = this.content.primaryCategory === NsContent.EPrimaryCategory.MODULE ? -1 : 0;
|
|
127
|
-
this.tocStructure.course = this.content.primaryCategory === NsContent.EPrimaryCategory.COURSE ? -1 : 0;
|
|
128
|
-
this.tocStructure = this.tocSharedSvc.getTocStructure(this.content, this.tocStructure);
|
|
129
|
-
for (const progType in this.tocStructure) {
|
|
130
|
-
if (this.tocStructure[progType] > 0) {
|
|
131
|
-
this.hasTocStructure = true;
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
// For Learning Hub trainings
|
|
138
|
-
getTrainingCount() {
|
|
139
|
-
if (this.trainingLHubEnabled &&
|
|
140
|
-
this.content &&
|
|
141
|
-
// this.trainingSvc.isValidTrainingContent(this.content) &&
|
|
142
|
-
!this.forPreview) {
|
|
143
|
-
// this.trainingLHubCount$ = this.trainingApi
|
|
144
|
-
// .getTrainingCount(this.content.identifier)
|
|
145
|
-
// .pipe(retry(2))
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocOverviewComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.AppTocService }, { token: i3.ConfigurationsService }, { token: i4.DomSanitizer }, { token: i5.AccessControlService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
149
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocOverviewComponent, selector: "ws-app-app-toc-overview", inputs: { forPreview: "forPreview" }, ngImport: i0, template: "<div class=\"flex flex-between flex-wrapped mt-4\">\n <div class=\"meta-section\">\n <!-- Description : Conditional : If not shown here, will be shown over banner -->\n <mat-card *ngIf=\"\n tocConfig?.overview?.description?.enabled &&\n showDescription &&\n showSubtitleOnBanner &&\n content?.description\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.description?.displayName }}</h2>\n <mat-card-content>\n <div class=\"mat-subheading-1\" [innerHTML]=\"content?.description\"></div>\n </mat-card-content>\n </mat-card>\n <!-- Content Body -->\n <mat-card *ngIf=\"tocConfig?.overview?.body?.enabled && content?.body\" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.body?.displayName }}</h2>\n <mat-card-content>\n <div class=\"break-words\" [innerHTML]=\"body\"></div>\n </mat-card-content>\n </mat-card>\n <!-- Learning objective -->\n <mat-card *ngIf=\"tocConfig?.overview?.learningObjective?.enabled && content?.learningObjective\"\n class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.learningObjective?.displayName }}</h2>\n <mat-card-content>\n <p class=\"mat-subheading-1\" [innerHTML]=\"content?.learningObjective\"></p>\n </mat-card-content>\n </mat-card>\n\n <!-- Registration instructions -->\n <mat-card *ngIf=\"\n tocConfig?.overview?.registrationInstructions?.enabled &&\n content?.registrationInstructions?.length\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.registrationInstructions?.displayName }}</h2>\n <mat-card-content>\n <div class=\"mat-subheading-1 break-words\" [innerHTML]=\"content?.registrationInstructions\"></div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.preContents?.enabled && content?.preContents?.length\" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.preContents?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let preContent of content?.preContents\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + preContent.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ preContent.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.postContents?.enabled && content?.postContents?.length\"\n class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.postContents?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let postContent of content?.postContents\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + postContent.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ postContent.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.certificationList?.enabled && content?.certificationList?.length\"\n class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.certificationList?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let certification of content?.certificationList\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + certification.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ certification.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.studyMaterials?.enabled && content?.studyMaterials?.length\"\n class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.studyMaterials?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let studyitem of content?.studyMaterials\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + studyitem.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ studyitem.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"\n tocConfig?.overview?.playgroundResources?.enabled && content?.playgroundResources?.length\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.playgroundResources?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let playgroundResource of content?.playgroundResources\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + playgroundResource.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ playgroundResource.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.kArtifacts?.enabled && content?.kArtifacts?.length\" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.kArtifacts?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let kArtifact of content?.kArtifacts\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + kArtifact.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ kArtifact.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"\n tocConfig?.overview?.equivalentCertifications?.enabled &&\n content?.equivalentCertifications?.length\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.equivalentCertifications?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let equivalentCertification of content?.equivalentCertifications\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + equivalentCertification.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ equivalentCertification.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"\n tocConfig?.overview?.softwareRequirements?.enabled && content?.softwareRequirements?.length\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.softwareRequirements?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let softwareRequirement of content?.softwareRequirements\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [href]=\"softwareRequirement.url\" target=\"blank\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ softwareRequirement.title }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <!-- Skills -->\n <mat-card *ngIf=\"tocConfig?.overview?.skills?.enabled && content?.skills?.length\"\n class=\"unit-meta-item mat-app-background\">\n <h2>{{ tocConfig?.overview?.skills?.displayName }}</h2>\n <mat-chip-list>\n <mat-chip *ngFor=\"let skill of content?.skills\">{{ skill.name }}</mat-chip>\n </mat-chip-list>\n </mat-card>\n <!-- Requirements -->\n <mat-card *ngIf=\"tocConfig?.overview?.preRequisites?.enabled && content?.preRequisites\" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.preRequisites?.displayName }}</h2>\n <mat-card-content>\n <div class=\"mat-subheading-1\" [innerHTML]=\"content?.preRequisites\"></div>\n <div class=\"margin-top-s\" *ngIf=\"content?.softwareRequirements?.length\">\n <h3 class=\"mat-h3 margin-bottom-xs\" >Software Requirements</h3>\n <ng-container *ngFor=\"let requirement of content?.softwareRequirements\">\n <a *ngIf=\"requirement.url\" class=\"margin-right-s\" mat-stroked-button target=\"_blank\"\n [href]=\"requirement.url\">\n {{ requirement.title }}\n </a>\n <a mat-stroked-button class=\"margin-right-s\" *ngIf=\"!requirement?.url\">{{ requirement.title }}\n </a>\n </ng-container>\n </div>\n </mat-card-content>\n </mat-card>\n\n <!-- Training (LHub) -->\n <mat-card *ngIf=\"trainingLHubEnabled && trainingLHubCount$ | async as trainingLHubCount\" class=\"unit-meta-item\">\n <h2 >Trainings</h2>\n <h4 class=\"mat-h4\">\n <ng-container>{{ trainingLHubCount }}</ng-container>\n <ng-container i18n=\"x trainings available\" *ngIf=\"trainingLHubCount > 1\">\n trainings available</ng-container>\n <ng-container i18n=\"1 training available\" *ngIf=\"trainingLHubCount === 1\">\n training available</ng-container>\n </h4>\n <div>\n \n </div>\n </mat-card>\n\n <!-- Related Topics -->\n <mat-card class=\"unit-meta-item\" *ngIf=\"tocConfig?.overview?.topics?.enabled && content?.topics?.length\">\n <h2>{{ tocConfig?.overview?.topics?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex flex-between flex-wrapped\">\n <a mat-stroked-button class=\"topic-button text-truncate\"\n *ngFor=\"let topic of content?.topics | pipeLimitTo: (viewMoreRelatedTopics ? 24 : 6)\" [title]=\"topic?.name\"\n [routerLink]=\"'/app/concept-graph/' + topic.identifier\">\n {{ topic?.name }}\n </a>\n </div>\n <div *ngIf=\"content?.topics?.length > 6\" class=\"text-right margin-top-xs\">\n <a mat-button (click)=\"viewMoreRelatedTopics = !viewMoreRelatedTopics\">\n <span *ngIf=\"!viewMoreRelatedTopics\" >View More</span>\n <span *ngIf=\"viewMoreRelatedTopics\" >View Less</span>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <!-- Authors on small screen -->\n <div class=\"block sm:hidden margin-bottom-m\" *ngIf=\"content?.creatorDetails?.length\">\n <ng-container [ngTemplateOutlet]=\"creators\" [ngTemplateOutletContext]=\"{\n authors: content?.creatorDetails,\n title: 'AUTHOR'\n }\">\n </ng-container>\n </div>\n <!-- Contacts on small screen -->\n <div class=\"block sm:hidden margin-bottom-m\" *ngIf=\"content?.creatorContacts?.length\">\n <ng-container [ngTemplateOutlet]=\"creators\" [ngTemplateOutletContext]=\"{\n authors: content?.creatorContacts,\n title: 'CONTACT'\n }\">\n </ng-container>\n </div>\n <div class=\"margin-bottom-m\" *ngIf=\"objKeys(contentParents).length\">\n <mat-card>\n <h2 >This content is part of</h2>\n </mat-card>\n <mat-accordion>\n <ng-container *ngFor=\"let key of objKeys(contentParents)\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n {{ key }}\n </mat-expansion-panel-header>\n <div class=\"flex mb-1\" *ngFor=\"let content of contentParents[key]\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"\n content.status !== 'Live'\n ? '/author' + '/toc/' + content.identifier\n : '/app' + '/toc/' + content.identifier\n \">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ content.name }}</p>\n </a>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </mat-accordion>\n </div>\n </div>\n <!-- At a glance section -->\n <div class=\"info-section\">\n <ws-widget-player-brief [forPreview]=\"forPreview\" [content]=\"content\" [hasTocStructure]=\"hasTocStructure\"\n [tocStructure]=\"tocStructure\">\n </ws-widget-player-brief>\n </div>\n</div>\n\n<ng-template #creators let-authors=\"authors\" let-title=\"title\">\n <mat-card>\n <h2 *ngIf=\"title === 'AUTHOR'\">Authors</h2>\n <h2 *ngIf=\"title === 'CONTACT'\">Curator/Contact</h2>\n <mat-divider></mat-divider>\n <div *ngFor=\"let author of authors\" class=\"author\">\n <ws-widget-user-image class=\"author-image\" [imageType]=\"'name-initial'\" [userName]=\"author.name || ''\"\n [email]=\"author.email\"></ws-widget-user-image>\n <div class=\"width-expand flex flex-middle flex-between\">\n <p class=\"margin-remove text-md font-normal\">{{ author.name }}</p>\n <ws-widget-btn-mail-user *ngIf=\"askAuthorEnabled\" [widgetData]=\"{ content: content, emails: [author.email] }\">\n </ws-widget-btn-mail-user>\n </div>\n </div>\n </mat-card>\n</ng-template>\n", styles: [".meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px}@media only screen and (max-width: 599px){.meta-section{width:100%}}.topic-button{display:block;width:32%;margin:4px 0}@media only screen and (max-width: 599px){.topic-button{width:100%}}.info-section{width:28%;min-width:250px;margin-left:24px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0}}.info-section2{width:28%;min-width:250px;margin-right:24px}@media only screen and (max-width: 599px){.info-section2{width:100%;margin-right:0}}.info-container{padding:12px 16px;margin-bottom:16px}.info-container .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.author{padding:12px 0;display:flex}.author .author-image{margin-right:12px;height:44px;width:44px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatLegacyAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i9.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i9.MatLegacyCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i10.MatLegacyChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i10.MatLegacyChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "component", type: i11.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i12.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i12.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i12.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i13.UserImageComponent, selector: "ws-widget-user-image", inputs: ["email", "userId", "userName", "imageType", "imageUrl", "imageSize"] }, { kind: "component", type: i14.PlayerBriefComponent, selector: "ws-widget-player-brief", inputs: ["content", "hasTocStructure", "tocStructure", "isPreviewMode", "forPreview", "askAuthorEnabled"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.PipeLimitToPipe, name: "pipeLimitTo" }] }); }
|
|
150
|
-
}
|
|
151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocOverviewComponent, decorators: [{
|
|
152
|
-
type: Component,
|
|
153
|
-
args: [{ selector: 'ws-app-app-toc-overview', template: "<div class=\"flex flex-between flex-wrapped mt-4\">\n <div class=\"meta-section\">\n <!-- Description : Conditional : If not shown here, will be shown over banner -->\n <mat-card *ngIf=\"\n tocConfig?.overview?.description?.enabled &&\n showDescription &&\n showSubtitleOnBanner &&\n content?.description\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.description?.displayName }}</h2>\n <mat-card-content>\n <div class=\"mat-subheading-1\" [innerHTML]=\"content?.description\"></div>\n </mat-card-content>\n </mat-card>\n <!-- Content Body -->\n <mat-card *ngIf=\"tocConfig?.overview?.body?.enabled && content?.body\" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.body?.displayName }}</h2>\n <mat-card-content>\n <div class=\"break-words\" [innerHTML]=\"body\"></div>\n </mat-card-content>\n </mat-card>\n <!-- Learning objective -->\n <mat-card *ngIf=\"tocConfig?.overview?.learningObjective?.enabled && content?.learningObjective\"\n class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.learningObjective?.displayName }}</h2>\n <mat-card-content>\n <p class=\"mat-subheading-1\" [innerHTML]=\"content?.learningObjective\"></p>\n </mat-card-content>\n </mat-card>\n\n <!-- Registration instructions -->\n <mat-card *ngIf=\"\n tocConfig?.overview?.registrationInstructions?.enabled &&\n content?.registrationInstructions?.length\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.registrationInstructions?.displayName }}</h2>\n <mat-card-content>\n <div class=\"mat-subheading-1 break-words\" [innerHTML]=\"content?.registrationInstructions\"></div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.preContents?.enabled && content?.preContents?.length\" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.preContents?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let preContent of content?.preContents\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + preContent.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ preContent.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.postContents?.enabled && content?.postContents?.length\"\n class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.postContents?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let postContent of content?.postContents\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + postContent.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ postContent.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.certificationList?.enabled && content?.certificationList?.length\"\n class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.certificationList?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let certification of content?.certificationList\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + certification.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ certification.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.studyMaterials?.enabled && content?.studyMaterials?.length\"\n class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.studyMaterials?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let studyitem of content?.studyMaterials\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + studyitem.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ studyitem.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"\n tocConfig?.overview?.playgroundResources?.enabled && content?.playgroundResources?.length\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.playgroundResources?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let playgroundResource of content?.playgroundResources\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + playgroundResource.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ playgroundResource.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"tocConfig?.overview?.kArtifacts?.enabled && content?.kArtifacts?.length\" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.kArtifacts?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let kArtifact of content?.kArtifacts\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + kArtifact.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ kArtifact.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"\n tocConfig?.overview?.equivalentCertifications?.enabled &&\n content?.equivalentCertifications?.length\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.equivalentCertifications?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let equivalentCertification of content?.equivalentCertifications\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + equivalentCertification.identifier\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ equivalentCertification.name }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <mat-card *ngIf=\"\n tocConfig?.overview?.softwareRequirements?.enabled && content?.softwareRequirements?.length\n \" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.softwareRequirements?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex mb-1\" *ngFor=\"let softwareRequirement of content?.softwareRequirements\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [href]=\"softwareRequirement.url\" target=\"blank\">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ softwareRequirement.title }}</p>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <!-- Skills -->\n <mat-card *ngIf=\"tocConfig?.overview?.skills?.enabled && content?.skills?.length\"\n class=\"unit-meta-item mat-app-background\">\n <h2>{{ tocConfig?.overview?.skills?.displayName }}</h2>\n <mat-chip-list>\n <mat-chip *ngFor=\"let skill of content?.skills\">{{ skill.name }}</mat-chip>\n </mat-chip-list>\n </mat-card>\n <!-- Requirements -->\n <mat-card *ngIf=\"tocConfig?.overview?.preRequisites?.enabled && content?.preRequisites\" class=\"unit-meta-item\">\n <h2>{{ tocConfig?.overview?.preRequisites?.displayName }}</h2>\n <mat-card-content>\n <div class=\"mat-subheading-1\" [innerHTML]=\"content?.preRequisites\"></div>\n <div class=\"margin-top-s\" *ngIf=\"content?.softwareRequirements?.length\">\n <h3 class=\"mat-h3 margin-bottom-xs\" >Software Requirements</h3>\n <ng-container *ngFor=\"let requirement of content?.softwareRequirements\">\n <a *ngIf=\"requirement.url\" class=\"margin-right-s\" mat-stroked-button target=\"_blank\"\n [href]=\"requirement.url\">\n {{ requirement.title }}\n </a>\n <a mat-stroked-button class=\"margin-right-s\" *ngIf=\"!requirement?.url\">{{ requirement.title }}\n </a>\n </ng-container>\n </div>\n </mat-card-content>\n </mat-card>\n\n <!-- Training (LHub) -->\n <mat-card *ngIf=\"trainingLHubEnabled && trainingLHubCount$ | async as trainingLHubCount\" class=\"unit-meta-item\">\n <h2 >Trainings</h2>\n <h4 class=\"mat-h4\">\n <ng-container>{{ trainingLHubCount }}</ng-container>\n <ng-container i18n=\"x trainings available\" *ngIf=\"trainingLHubCount > 1\">\n trainings available</ng-container>\n <ng-container i18n=\"1 training available\" *ngIf=\"trainingLHubCount === 1\">\n training available</ng-container>\n </h4>\n <div>\n \n </div>\n </mat-card>\n\n <!-- Related Topics -->\n <mat-card class=\"unit-meta-item\" *ngIf=\"tocConfig?.overview?.topics?.enabled && content?.topics?.length\">\n <h2>{{ tocConfig?.overview?.topics?.displayName }}</h2>\n <mat-card-content>\n <div class=\"flex flex-between flex-wrapped\">\n <a mat-stroked-button class=\"topic-button text-truncate\"\n *ngFor=\"let topic of content?.topics | pipeLimitTo: (viewMoreRelatedTopics ? 24 : 6)\" [title]=\"topic?.name\"\n [routerLink]=\"'/app/concept-graph/' + topic.identifier\">\n {{ topic?.name }}\n </a>\n </div>\n <div *ngIf=\"content?.topics?.length > 6\" class=\"text-right margin-top-xs\">\n <a mat-button (click)=\"viewMoreRelatedTopics = !viewMoreRelatedTopics\">\n <span *ngIf=\"!viewMoreRelatedTopics\" >View More</span>\n <span *ngIf=\"viewMoreRelatedTopics\" >View Less</span>\n </a>\n </div>\n </mat-card-content>\n </mat-card>\n <!-- Authors on small screen -->\n <div class=\"block sm:hidden margin-bottom-m\" *ngIf=\"content?.creatorDetails?.length\">\n <ng-container [ngTemplateOutlet]=\"creators\" [ngTemplateOutletContext]=\"{\n authors: content?.creatorDetails,\n title: 'AUTHOR'\n }\">\n </ng-container>\n </div>\n <!-- Contacts on small screen -->\n <div class=\"block sm:hidden margin-bottom-m\" *ngIf=\"content?.creatorContacts?.length\">\n <ng-container [ngTemplateOutlet]=\"creators\" [ngTemplateOutletContext]=\"{\n authors: content?.creatorContacts,\n title: 'CONTACT'\n }\">\n </ng-container>\n </div>\n <div class=\"margin-bottom-m\" *ngIf=\"objKeys(contentParents).length\">\n <mat-card>\n <h2 >This content is part of</h2>\n </mat-card>\n <mat-accordion>\n <ng-container *ngFor=\"let key of objKeys(contentParents)\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n {{ key }}\n </mat-expansion-panel-header>\n <div class=\"flex mb-1\" *ngFor=\"let content of contentParents[key]\">\n <span class=\"mr-1\">\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\n </span>\n <a class=\"ws-mat-primary-text\" [routerLink]=\"\n content.status !== 'Live'\n ? '/author' + '/toc/' + content.identifier\n : '/app' + '/toc/' + content.identifier\n \">\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ content.name }}</p>\n </a>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </mat-accordion>\n </div>\n </div>\n <!-- At a glance section -->\n <div class=\"info-section\">\n <ws-widget-player-brief [forPreview]=\"forPreview\" [content]=\"content\" [hasTocStructure]=\"hasTocStructure\"\n [tocStructure]=\"tocStructure\">\n </ws-widget-player-brief>\n </div>\n</div>\n\n<ng-template #creators let-authors=\"authors\" let-title=\"title\">\n <mat-card>\n <h2 *ngIf=\"title === 'AUTHOR'\">Authors</h2>\n <h2 *ngIf=\"title === 'CONTACT'\">Curator/Contact</h2>\n <mat-divider></mat-divider>\n <div *ngFor=\"let author of authors\" class=\"author\">\n <ws-widget-user-image class=\"author-image\" [imageType]=\"'name-initial'\" [userName]=\"author.name || ''\"\n [email]=\"author.email\"></ws-widget-user-image>\n <div class=\"width-expand flex flex-middle flex-between\">\n <p class=\"margin-remove text-md font-normal\">{{ author.name }}</p>\n <ws-widget-btn-mail-user *ngIf=\"askAuthorEnabled\" [widgetData]=\"{ content: content, emails: [author.email] }\">\n </ws-widget-btn-mail-user>\n </div>\n </div>\n </mat-card>\n</ng-template>\n", styles: [".meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px}@media only screen and (max-width: 599px){.meta-section{width:100%}}.topic-button{display:block;width:32%;margin:4px 0}@media only screen and (max-width: 599px){.topic-button{width:100%}}.info-section{width:28%;min-width:250px;margin-left:24px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0}}.info-section2{width:28%;min-width:250px;margin-right:24px}@media only screen and (max-width: 599px){.info-section2{width:100%;margin-right:0}}.info-container{padding:12px 16px;margin-bottom:16px}.info-container .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.author{padding:12px 0;display:flex}.author .author-image{margin-right:12px;height:44px;width:44px}\n"] }]
|
|
154
|
-
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.AppTocService }, { type: i3.ConfigurationsService }, { type: i4.DomSanitizer }, { type: i5.AccessControlService }]; }, propDecorators: { forPreview: [{
|
|
155
|
-
type: Input
|
|
156
|
-
}] } });
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1vdmVydmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvY29tcG9uZW50cy9hcHAtdG9jLW92ZXJ2aWV3L2FwcC10b2Mtb3ZlcnZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1vdmVydmlldy9hcHAtdG9jLW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQTtBQUluRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVaEUsTUFBTSxPQUFPLHVCQUF1QjtJQWVsQyxZQUNVLEtBQXFCLEVBQ3JCLFlBQTJCLEVBQzNCLFNBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLG9CQUEwQztRQUoxQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBbkJwRCxZQUFPLEdBQThCLElBQUksQ0FBQTtRQUN6QyxzQkFBaUIsR0FBd0IsSUFBSSxDQUFBO1FBQzdDLDBCQUFxQixHQUFHLEtBQUssQ0FBQTtRQUM3QixvQkFBZSxHQUFHLEtBQUssQ0FBQTtRQUN2QixpQkFBWSxHQUFrQyxJQUFJLENBQUE7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxDQUFBO1FBQ3ZCLHdCQUFtQixHQUFHLEtBQUssQ0FBQTtRQUUzQixTQUFJLEdBQW9CLElBQUksQ0FBQTtRQUNuQixlQUFV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QztZQUM3QywrQ0FBK0M7WUFDL0Msb0JBQW9CO1NBQ3JCO0lBQ0gsQ0FBQzsrR0FuSlUsdUJBQXVCO21HQUF2Qix1QkFBdUIscUdDZnBDLHdyYUEwUkE7OzRGRDNRYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UseUJBQXlCO21PQWMxQixVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3MtY29udHJvbC5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50Lm1vZGVsJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IE5zQXBwVG9jIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcC10b2MubW9kZWwnXG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLXRvYy5zZXJ2aWNlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3cy1hcHAtYXBwLXRvYy1vdmVydmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtdG9jLW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXRvYy1vdmVydmlldy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBUb2NPdmVydmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgY29udGVudDogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCA9IG51bGxcbiAgcm91dGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHZpZXdNb3JlUmVsYXRlZFRvcGljcyA9IGZhbHNlXG4gIGhhc1RvY1N0cnVjdHVyZSA9IGZhbHNlXG4gIHRvY1N0cnVjdHVyZTogTnNBcHBUb2MuSVRvY1N0cnVjdHVyZSB8IG51bGwgPSBudWxsXG4gIGFza0F1dGhvckVuYWJsZWQgPSB0cnVlXG4gIHRyYWluaW5nTEh1YkVuYWJsZWQgPSBmYWxzZVxuICB0cmFpbmluZ0xIdWJDb3VudCQ/OiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgYm9keTogU2FmZUh0bWwgfCBudWxsID0gbnVsbFxuICBASW5wdXQoKSBmb3JQcmV2aWV3ID0gZmFsc2VcbiAgdG9jQ29uZmlnOiBhbnkgPSBudWxsXG4gIGNvbnRlbnRQYXJlbnRzOiB7IFtrZXk6IHN0cmluZ106IE5zQXBwVG9jLklDb250ZW50UGFyZW50UmVzcG9uc2VbXSB9ID0ge31cbiAgb2JqS2V5cyA9IE9iamVjdC5rZXlzXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB0b2NTaGFyZWRTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgYXV0aEFjY2Vzc0NvbnRyb2xTdmM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLFxuICApIHtcbiAgICBpZiAodGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzKSB7XG4gICAgICB0aGlzLmFza0F1dGhvckVuYWJsZWQgPSAhdGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzLmhhcygnYXNrQXV0aG9yJylcbiAgICAgIHRoaXMudHJhaW5pbmdMSHViRW5hYmxlZCA9ICF0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMuaGFzKCd0cmFpbmluZ0xIdWInKVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICB0aGlzLmZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL2F1dGhvci8nKVxuICAgIH1cbiAgICBpZiAodGhpcy5yb3V0ZSAmJiB0aGlzLnJvdXRlLnBhcmVudCkge1xuICAgICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucGFyZW50LmRhdGEuc3Vic2NyaWJlKChkYXRhOiBEYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdERhdGEoZGF0YSlcbiAgICAgICAgdGhpcy50b2NDb25maWcgPSBkYXRhLnBhZ2VEYXRhLmRhdGFcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucm91dGVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93U3VidGl0bGVPbkJhbm5lcigpIHtcbiAgICByZXR1cm4gdGhpcy50b2NTaGFyZWRTdmMuc3VidGl0bGVPbkJhbm5lcnNcbiAgfVxuICBnZXQgc2hvd0Rlc2NyaXB0aW9uKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgIXRoaXMuY29udGVudC5ib2R5KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2NTaGFyZWRTdmMuc2hvd0Rlc2NyaXB0aW9uXG4gIH1cblxuICBwcml2YXRlIGluaXREYXRhKGRhdGE6IERhdGEpIHtcbiAgICBjb25zdCBpbml0RGF0YSA9IHRoaXMudG9jU2hhcmVkU3ZjLmluaXREYXRhKGRhdGEpXG4gICAgdGhpcy5jb250ZW50ID0gaW5pdERhdGEuY29udGVudFxuICAgIHRoaXMuYm9keSA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgdGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5ib2R5XG4gICAgICAgID8gdGhpcy5mb3JQcmV2aWV3XG4gICAgICAgICAgPyB0aGlzLmF1dGhBY2Nlc3NDb250cm9sU3ZjLnByb3h5VG9BdXRob3JpbmdVcmwodGhpcy5jb250ZW50LmJvZHkpXG4gICAgICAgICAgOiB0aGlzLmNvbnRlbnQuYm9keVxuICAgICAgICA6ICcnLFxuICAgIClcbiAgICB0aGlzLmNvbnRlbnRQYXJlbnRzID0ge31cbiAgICB0aGlzLnJlc2V0QW5kRmV0Y2hUb2NTdHJ1Y3R1cmUoKVxuICAgIHRoaXMuZ2V0VHJhaW5pbmdDb3VudCgpXG4gICAgdGhpcy5nZXRDb250ZW50UGFyZW50KClcbiAgfVxuXG4gIGdldENvbnRlbnRQYXJlbnQoKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgY29uc3QgY29udGVudFBhcmVudFJlcTogTnNBcHBUb2MuSUNvbnRlbnRQYXJlbnRSZXEgPSB7XG4gICAgICAgIGZpZWxkczogWydjb250ZW50VHlwZScsICduYW1lJ10sXG4gICAgICB9XG4gICAgICB0aGlzLnRvY1NoYXJlZFN2Y1xuICAgICAgICAuZmV0Y2hDb250ZW50UGFyZW50KHRoaXMuY29udGVudC5pZGVudGlmaWVyLCBjb250ZW50UGFyZW50UmVxLCB0aGlzLmZvclByZXZpZXcpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFyc2VDb250ZW50UGFyZW50KHJlcylcbiAgICAgICAgICB9LFxuICAgICAgICAgIF9lcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50UGFyZW50cyA9IHt9XG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlQ29udGVudFBhcmVudChjb250ZW50OiBOc0FwcFRvYy5JQ29udGVudFBhcmVudFJlc3BvbnNlKSB7XG4gICAgY29udGVudC5jb2xsZWN0aW9ucy5mb3JFYWNoKGNvbGxlY3Rpb24gPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRQYXJlbnRzLmhhc093blByb3BlcnR5KGNvbGxlY3Rpb24uY29udGVudFR5cGUpKSB7XG4gICAgICAgIHRoaXMuY29udGVudFBhcmVudHNbY29sbGVjdGlvbi5jb250ZW50VHlwZV0gPSBbXVxuICAgICAgfVxuICAgICAgdGhpcy5jb250ZW50UGFyZW50c1tjb2xsZWN0aW9uLmNvbnRlbnRUeXBlXS5wdXNoKGNvbGxlY3Rpb24pXG4gICAgICB0aGlzLnBhcnNlQ29udGVudFBhcmVudChjb2xsZWN0aW9uKVxuICAgIH0pXG4gIH1cblxuICByZXNldEFuZEZldGNoVG9jU3RydWN0dXJlKCkge1xuICAgIHRoaXMudG9jU3RydWN0dXJlID0ge1xuICAgICAgYXNzZXNzbWVudDogMCxcbiAgICAgIGZpbmFsVGVzdDogMCxcbiAgICAgIGNvdXJzZTogMCxcbiAgICAgIGhhbmRzT246IDAsXG4gICAgICBpbnRlcmFjdGl2ZVZpZGVvOiAwLFxuICAgICAgbGVhcm5pbmdNb2R1bGU6IDAsXG4gICAgICBvdGhlcjogMCxcbiAgICAgIHBkZjogMCxcbiAgICAgIHN1cnZleTogMCxcbiAgICAgIHBvZGNhc3Q6IDAsXG4gICAgICBwcmFjdGljZVRlc3Q6IDAsXG4gICAgICBxdWl6OiAwLFxuICAgICAgdmlkZW86IDAsXG4gICAgICB3ZWJNb2R1bGU6IDAsXG4gICAgICB3ZWJQYWdlOiAwLFxuICAgICAgeW91dHViZTogMCxcbiAgICAgIGludGVyYWN0aXZlY29udGVudDogMCxcbiAgICAgIG9mZmxpbmVTZXNzaW9uOiAwLFxuICAgIH1cbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICB0aGlzLmhhc1RvY1N0cnVjdHVyZSA9IGZhbHNlXG4gICAgICB0aGlzLnRvY1N0cnVjdHVyZS5sZWFybmluZ01vZHVsZSA9IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSA/IC0xIDogMFxuICAgICAgdGhpcy50b2NTdHJ1Y3R1cmUuY291cnNlID0gdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFID8gLTEgOiAwXG4gICAgICB0aGlzLnRvY1N0cnVjdHVyZSA9IHRoaXMudG9jU2hhcmVkU3ZjLmdldFRvY1N0cnVjdHVyZSh0aGlzLmNvbnRlbnQsIHRoaXMudG9jU3RydWN0dXJlKVxuICAgICAgZm9yIChjb25zdCBwcm9nVHlwZSBpbiB0aGlzLnRvY1N0cnVjdHVyZSkge1xuICAgICAgICBpZiAodGhpcy50b2NTdHJ1Y3R1cmVbcHJvZ1R5cGVdID4gMCkge1xuICAgICAgICAgIHRoaXMuaGFzVG9jU3RydWN0dXJlID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGb3IgTGVhcm5pbmcgSHViIHRyYWluaW5nc1xuICBwcml2YXRlIGdldFRyYWluaW5nQ291bnQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy50cmFpbmluZ0xIdWJFbmFibGVkICYmXG4gICAgICB0aGlzLmNvbnRlbnQgJiZcbiAgICAgIC8vIHRoaXMudHJhaW5pbmdTdmMuaXNWYWxpZFRyYWluaW5nQ29udGVudCh0aGlzLmNvbnRlbnQpICYmXG4gICAgICAhdGhpcy5mb3JQcmV2aWV3XG4gICAgKSB7XG4gICAgICAvLyB0aGlzLnRyYWluaW5nTEh1YkNvdW50JCA9IHRoaXMudHJhaW5pbmdBcGlcbiAgICAgIC8vICAgLmdldFRyYWluaW5nQ291bnQodGhpcy5jb250ZW50LmlkZW50aWZpZXIpXG4gICAgICAvLyAgIC5waXBlKHJldHJ5KDIpKVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1iZXR3ZWVuIGZsZXgtd3JhcHBlZCBtdC00XCI+XG4gIDxkaXYgY2xhc3M9XCJtZXRhLXNlY3Rpb25cIj5cbiAgICA8IS0tIERlc2NyaXB0aW9uIDogQ29uZGl0aW9uYWwgOiBJZiBub3Qgc2hvd24gaGVyZSwgd2lsbCBiZSBzaG93biBvdmVyIGJhbm5lciAtLT5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJcbiAgICAgICAgdG9jQ29uZmlnPy5vdmVydmlldz8uZGVzY3JpcHRpb24/LmVuYWJsZWQgJiZcbiAgICAgICAgc2hvd0Rlc2NyaXB0aW9uICYmXG4gICAgICAgIHNob3dTdWJ0aXRsZU9uQmFubmVyICYmXG4gICAgICAgIGNvbnRlbnQ/LmRlc2NyaXB0aW9uXG4gICAgICBcIiBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8uZGVzY3JpcHRpb24/LmRpc3BsYXlOYW1lIH19PC9oMj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMVwiIFtpbm5lckhUTUxdPVwiY29udGVudD8uZGVzY3JpcHRpb25cIj48L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICAgIDwhLS0gQ29udGVudCBCb2R5IC0tPlxuICAgIDxtYXQtY2FyZCAqbmdJZj1cInRvY0NvbmZpZz8ub3ZlcnZpZXc/LmJvZHk/LmVuYWJsZWQgJiYgY29udGVudD8uYm9keVwiIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIj5cbiAgICAgIDxoMj57eyB0b2NDb25maWc/Lm92ZXJ2aWV3Py5ib2R5Py5kaXNwbGF5TmFtZSB9fTwvaDI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJyZWFrLXdvcmRzXCIgW2lubmVySFRNTF09XCJib2R5XCI+PC9kaXY+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cbiAgICA8IS0tIExlYXJuaW5nIG9iamVjdGl2ZSAtLT5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJ0b2NDb25maWc/Lm92ZXJ2aWV3Py5sZWFybmluZ09iamVjdGl2ZT8uZW5hYmxlZCAmJiBjb250ZW50Py5sZWFybmluZ09iamVjdGl2ZVwiXG4gICAgICBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8ubGVhcm5pbmdPYmplY3RpdmU/LmRpc3BsYXlOYW1lIH19PC9oMj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8cCBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTFcIiBbaW5uZXJIVE1MXT1cImNvbnRlbnQ/LmxlYXJuaW5nT2JqZWN0aXZlXCI+PC9wPlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG5cbiAgICA8IS0tIFJlZ2lzdHJhdGlvbiBpbnN0cnVjdGlvbnMgLS0+XG4gICAgPG1hdC1jYXJkICpuZ0lmPVwiXG4gICAgICAgIHRvY0NvbmZpZz8ub3ZlcnZpZXc/LnJlZ2lzdHJhdGlvbkluc3RydWN0aW9ucz8uZW5hYmxlZCAmJlxuICAgICAgICBjb250ZW50Py5yZWdpc3RyYXRpb25JbnN0cnVjdGlvbnM/Lmxlbmd0aFxuICAgICAgXCIgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LnJlZ2lzdHJhdGlvbkluc3RydWN0aW9ucz8uZGlzcGxheU5hbWUgfX08L2gyPlxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xIGJyZWFrLXdvcmRzXCIgW2lubmVySFRNTF09XCJjb250ZW50Py5yZWdpc3RyYXRpb25JbnN0cnVjdGlvbnNcIj48L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICAgIDxtYXQtY2FyZCAqbmdJZj1cInRvY0NvbmZpZz8ub3ZlcnZpZXc/LnByZUNvbnRlbnRzPy5lbmFibGVkICYmIGNvbnRlbnQ/LnByZUNvbnRlbnRzPy5sZW5ndGhcIiBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8ucHJlQ29udGVudHM/LmRpc3BsYXlOYW1lIH19PC9oMj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtYi0xXCIgKm5nRm9yPVwibGV0IHByZUNvbnRlbnQgb2YgY29udGVudD8ucHJlQ29udGVudHNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTFcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxhIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIFtyb3V0ZXJMaW5rXT1cIicvYXBwL3RvYy8nICsgcHJlQ29udGVudC5pZGVudGlmaWVyXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBwcmVDb250ZW50Lm5hbWUgfX08L3A+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICAgIDxtYXQtY2FyZCAqbmdJZj1cInRvY0NvbmZpZz8ub3ZlcnZpZXc/LnBvc3RDb250ZW50cz8uZW5hYmxlZCAmJiBjb250ZW50Py5wb3N0Q29udGVudHM/Lmxlbmd0aFwiXG4gICAgICBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8ucG9zdENvbnRlbnRzPy5kaXNwbGF5TmFtZSB9fTwvaDI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItMVwiICpuZ0Zvcj1cImxldCBwb3N0Q29udGVudCBvZiBjb250ZW50Py5wb3N0Q29udGVudHNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTFcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxhIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIFtyb3V0ZXJMaW5rXT1cIicvYXBwL3RvYy8nICsgcG9zdENvbnRlbnQuaWRlbnRpZmllclwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBtYXQtc3ViaGVhZGluZy0xXCI+e3sgcG9zdENvbnRlbnQubmFtZSB9fTwvcD5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG4gICAgPG1hdC1jYXJkICpuZ0lmPVwidG9jQ29uZmlnPy5vdmVydmlldz8uY2VydGlmaWNhdGlvbkxpc3Q/LmVuYWJsZWQgJiYgY29udGVudD8uY2VydGlmaWNhdGlvbkxpc3Q/Lmxlbmd0aFwiXG4gICAgICBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8uY2VydGlmaWNhdGlvbkxpc3Q/LmRpc3BsYXlOYW1lIH19PC9oMj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtYi0xXCIgKm5nRm9yPVwibGV0IGNlcnRpZmljYXRpb24gb2YgY29udGVudD8uY2VydGlmaWNhdGlvbkxpc3RcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTFcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxhIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIFtyb3V0ZXJMaW5rXT1cIicvYXBwL3RvYy8nICsgY2VydGlmaWNhdGlvbi5pZGVudGlmaWVyXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBjZXJ0aWZpY2F0aW9uLm5hbWUgfX08L3A+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICAgIDxtYXQtY2FyZCAqbmdJZj1cInRvY0NvbmZpZz8ub3ZlcnZpZXc/LnN0dWR5TWF0ZXJpYWxzPy5lbmFibGVkICYmIGNvbnRlbnQ/LnN0dWR5TWF0ZXJpYWxzPy5sZW5ndGhcIlxuICAgICAgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LnN0dWR5TWF0ZXJpYWxzPy5kaXNwbGF5TmFtZSB9fTwvaDI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItMVwiICpuZ0Zvcj1cImxldCBzdHVkeWl0ZW0gb2YgY29udGVudD8uc3R1ZHlNYXRlcmlhbHNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTFcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxhIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIFtyb3V0ZXJMaW5rXT1cIicvYXBwL3RvYy8nICsgc3R1ZHlpdGVtLmlkZW50aWZpZXJcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gbWF0LXN1YmhlYWRpbmctMVwiPnt7IHN0dWR5aXRlbS5uYW1lIH19PC9wPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJcbiAgICAgICAgdG9jQ29uZmlnPy5vdmVydmlldz8ucGxheWdyb3VuZFJlc291cmNlcz8uZW5hYmxlZCAmJiBjb250ZW50Py5wbGF5Z3JvdW5kUmVzb3VyY2VzPy5sZW5ndGhcbiAgICAgIFwiIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIj5cbiAgICAgIDxoMj57eyB0b2NDb25maWc/Lm92ZXJ2aWV3Py5wbGF5Z3JvdW5kUmVzb3VyY2VzPy5kaXNwbGF5TmFtZSB9fTwvaDI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItMVwiICpuZ0Zvcj1cImxldCBwbGF5Z3JvdW5kUmVzb3VyY2Ugb2YgY29udGVudD8ucGxheWdyb3VuZFJlc291cmNlc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWxpZ24tYm90dG9tXCI+d2ViX2Fzc2V0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGEgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgW3JvdXRlckxpbmtdPVwiJy9hcHAvdG9jLycgKyBwbGF5Z3JvdW5kUmVzb3VyY2UuaWRlbnRpZmllclwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBtYXQtc3ViaGVhZGluZy0xXCI+e3sgcGxheWdyb3VuZFJlc291cmNlLm5hbWUgfX08L3A+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICAgIDxtYXQtY2FyZCAqbmdJZj1cInRvY0NvbmZpZz8ub3ZlcnZpZXc/LmtBcnRpZmFjdHM/LmVuYWJsZWQgJiYgY29udGVudD8ua0FydGlmYWN0cz8ubGVuZ3RoXCIgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LmtBcnRpZmFjdHM/LmRpc3BsYXlOYW1lIH19PC9oMj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtYi0xXCIgKm5nRm9yPVwibGV0IGtBcnRpZmFjdCBvZiBjb250ZW50Py5rQXJ0aWZhY3RzXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhbGlnbi1ib3R0b21cIj53ZWJfYXNzZXQ8L21hdC1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8YSBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBbcm91dGVyTGlua109XCInL2FwcC90b2MvJyArIGtBcnRpZmFjdC5pZGVudGlmaWVyXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBrQXJ0aWZhY3QubmFtZSB9fTwvcD5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG4gICAgPG1hdC1jYXJkICpuZ0lmPVwiXG4gICAgICAgIHRvY0NvbmZpZz8ub3ZlcnZpZXc/LmVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9ucz8uZW5hYmxlZCAmJlxuICAgICAgICBjb250ZW50Py5lcXVpdmFsZW50Q2VydGlmaWNhdGlvbnM/Lmxlbmd0aFxuICAgICAgXCIgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LmVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9ucz8uZGlzcGxheU5hbWUgfX08L2gyPlxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1iLTFcIiAqbmdGb3I9XCJsZXQgZXF1aXZhbGVudENlcnRpZmljYXRpb24gb2YgY29udGVudD8uZXF1aXZhbGVudENlcnRpZmljYXRpb25zXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhbGlnbi1ib3R0b21cIj53ZWJfYXNzZXQ8L21hdC1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8YSBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBbcm91dGVyTGlua109XCInL2FwcC90b2MvJyArIGVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9uLmlkZW50aWZpZXJcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gbWF0LXN1YmhlYWRpbmctMVwiPnt7IGVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9uLm5hbWUgfX08L3A+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICAgIDxtYXQtY2FyZCAqbmdJZj1cIlxuICAgICAgICB0b2NDb25maWc/Lm92ZXJ2aWV3Py5zb2Z0d2FyZVJlcXVpcmVtZW50cz8uZW5hYmxlZCAmJiBjb250ZW50Py5zb2Z0d2FyZVJlcXVpcmVtZW50cz8ubGVuZ3RoXG4gICAgICBcIiBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8uc29mdHdhcmVSZXF1aXJlbWVudHM/LmRpc3BsYXlOYW1lIH19PC9oMj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtYi0xXCIgKm5nRm9yPVwibGV0IHNvZnR3YXJlUmVxdWlyZW1lbnQgb2YgY29udGVudD8uc29mdHdhcmVSZXF1aXJlbWVudHNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTFcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxhIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIFtocmVmXT1cInNvZnR3YXJlUmVxdWlyZW1lbnQudXJsXCIgdGFyZ2V0PVwiYmxhbmtcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gbWF0LXN1YmhlYWRpbmctMVwiPnt7IHNvZnR3YXJlUmVxdWlyZW1lbnQudGl0bGUgfX08L3A+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICAgIDwhLS0gU2tpbGxzIC0tPlxuICAgIDxtYXQtY2FyZCAqbmdJZj1cInRvY0NvbmZpZz8ub3ZlcnZpZXc/LnNraWxscz8uZW5hYmxlZCAmJiBjb250ZW50Py5za2lsbHM/Lmxlbmd0aFwiXG4gICAgICBjbGFzcz1cInVuaXQtbWV0YS1pdGVtIG1hdC1hcHAtYmFja2dyb3VuZFwiPlxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LnNraWxscz8uZGlzcGxheU5hbWUgfX08L2gyPlxuICAgICAgPG1hdC1jaGlwLWxpc3Q+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgc2tpbGwgb2YgY29udGVudD8uc2tpbGxzXCI+e3sgc2tpbGwubmFtZSB9fTwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgPC9tYXQtY2FyZD5cbiAgICA8IS0tIFJlcXVpcmVtZW50cyAtLT5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJ0b2NDb25maWc/Lm92ZXJ2aWV3Py5wcmVSZXF1aXNpdGVzPy5lbmFibGVkICYmIGNvbnRlbnQ/LnByZVJlcXVpc2l0ZXNcIiBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8ucHJlUmVxdWlzaXRlcz8uZGlzcGxheU5hbWUgfX08L2gyPlxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xXCIgW2lubmVySFRNTF09XCJjb250ZW50Py5wcmVSZXF1aXNpdGVzXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXJnaW4tdG9wLXNcIiAqbmdJZj1cImNvbnRlbnQ/LnNvZnR3YXJlUmVxdWlyZW1lbnRzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJtYXQtaDMgbWFyZ2luLWJvdHRvbS14c1wiID5Tb2Z0d2FyZSBSZXF1aXJlbWVudHM8L2gzPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcXVpcmVtZW50IG9mIGNvbnRlbnQ/LnNvZnR3YXJlUmVxdWlyZW1lbnRzXCI+XG4gICAgICAgICAgICA8YSAqbmdJZj1cInJlcXVpcmVtZW50LnVybFwiIGNsYXNzPVwibWFyZ2luLXJpZ2h0LXNcIiBtYXQtc3Ryb2tlZC1idXR0b24gdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgW2hyZWZdPVwicmVxdWlyZW1lbnQudXJsXCI+XG4gICAgICAgICAgICAgIHt7IHJlcXVpcmVtZW50LnRpdGxlIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJtYXJnaW4tcmlnaHQtc1wiICpuZ0lmPVwiIXJlcXVpcmVtZW50Py51cmxcIj57eyByZXF1aXJlbWVudC50aXRsZSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuXG4gICAgPCEtLSBUcmFpbmluZyAoTEh1YikgLS0+XG4gICAgPG1hdC1jYXJkICpuZ0lmPVwidHJhaW5pbmdMSHViRW5hYmxlZCAmJiB0cmFpbmluZ0xIdWJDb3VudCQgfCBhc3luYyBhcyB0cmFpbmluZ0xIdWJDb3VudFwiIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIj5cbiAgICAgIDxoMiA+VHJhaW5pbmdzPC9oMj5cbiAgICAgIDxoNCBjbGFzcz1cIm1hdC1oNFwiPlxuICAgICAgICA8bmctY29udGFpbmVyPnt7IHRyYWluaW5nTEh1YkNvdW50IH19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgaTE4bj1cInggdHJhaW5pbmdzIGF2YWlsYWJsZVwiICpuZ0lmPVwidHJhaW5pbmdMSHViQ291bnQgPiAxXCI+XG4gICAgICAgICAgdHJhaW5pbmdzIGF2YWlsYWJsZTwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGkxOG49XCIxIHRyYWluaW5nIGF2YWlsYWJsZVwiICpuZ0lmPVwidHJhaW5pbmdMSHViQ291bnQgPT09IDFcIj5cbiAgICAgICAgICB0cmFpbmluZyBhdmFpbGFibGU8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvaDQ+XG4gICAgICA8ZGl2PlxuICAgICAgICBcbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWNhcmQ+XG5cbiAgICA8IS0tIFJlbGF0ZWQgVG9waWNzIC0tPlxuICAgIDxtYXQtY2FyZCBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCIgKm5nSWY9XCJ0b2NDb25maWc/Lm92ZXJ2aWV3Py50b3BpY3M/LmVuYWJsZWQgJiYgY29udGVudD8udG9waWNzPy5sZW5ndGhcIj5cbiAgICAgIDxoMj57eyB0b2NDb25maWc/Lm92ZXJ2aWV3Py50b3BpY3M/LmRpc3BsYXlOYW1lIH19PC9oMj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW4gZmxleC13cmFwcGVkXCI+XG4gICAgICAgICAgPGEgbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9waWMtYnV0dG9uIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRvcGljIG9mIGNvbnRlbnQ/LnRvcGljcyB8IHBpcGVMaW1pdFRvOiAodmlld01vcmVSZWxhdGVkVG9waWNzID8gMjQgOiA2KVwiIFt0aXRsZV09XCJ0b3BpYz8ubmFtZVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCInL2FwcC9jb25jZXB0LWdyYXBoLycgKyB0b3BpYy5pZGVudGlmaWVyXCI+XG4gICAgICAgICAgICB7eyB0b3BpYz8ubmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb250ZW50Py50b3BpY3M/Lmxlbmd0aCA+IDZcIiBjbGFzcz1cInRleHQtcmlnaHQgbWFyZ2luLXRvcC14c1wiPlxuICAgICAgICAgIDxhIG1hdC1idXR0b24gKGNsaWNrKT1cInZpZXdNb3JlUmVsYXRlZFRvcGljcyA9ICF2aWV3TW9yZVJlbGF0ZWRUb3BpY3NcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXZpZXdNb3JlUmVsYXRlZFRvcGljc1wiID5WaWV3IE1vcmU8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZpZXdNb3JlUmVsYXRlZFRvcGljc1wiID5WaWV3IExlc3M8L3NwYW4+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuICAgIDwhLS0gQXV0aG9ycyBvbiBzbWFsbCBzY3JlZW4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImJsb2NrIHNtOmhpZGRlbiBtYXJnaW4tYm90dG9tLW1cIiAqbmdJZj1cImNvbnRlbnQ/LmNyZWF0b3JEZXRhaWxzPy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3JlYXRvcnNcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgIGF1dGhvcnM6IGNvbnRlbnQ/LmNyZWF0b3JEZXRhaWxzLFxuICAgICAgICAgIHRpdGxlOiAnQVVUSE9SJ1xuICAgICAgICB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIENvbnRhY3RzIG9uIHNtYWxsIHNjcmVlbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYmxvY2sgc206aGlkZGVuIG1hcmdpbi1ib3R0b20tbVwiICpuZ0lmPVwiY29udGVudD8uY3JlYXRvckNvbnRhY3RzPy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3JlYXRvcnNcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgIGF1dGhvcnM6IGNvbnRlbnQ/LmNyZWF0b3JDb250YWN0cyxcbiAgICAgICAgICB0aXRsZTogJ0NPTlRBQ1QnXG4gICAgICAgIH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYXJnaW4tYm90dG9tLW1cIiAqbmdJZj1cIm9iaktleXMoY29udGVudFBhcmVudHMpLmxlbmd0aFwiPlxuICAgICAgPG1hdC1jYXJkPlxuICAgICAgICA8aDIgPlRoaXMgY29udGVudCBpcyBwYXJ0IG9mPC9oMj5cbiAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8bWF0LWFjY29yZGlvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIG9iaktleXMoY29udGVudFBhcmVudHMpXCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1iLTFcIiAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBjb250ZW50UGFyZW50c1trZXldXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgW3JvdXRlckxpbmtdPVwiXG4gICAgICAgICAgICAgICAgICBjb250ZW50LnN0YXR1cyAhPT0gJ0xpdmUnXG4gICAgICAgICAgICAgICAgICAgID8gJy9hdXRob3InICsgJy90b2MvJyArIGNvbnRlbnQuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICA6ICcvYXBwJyArICcvdG9jLycgKyBjb250ZW50LmlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBjb250ZW50Lm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L21hdC1hY2NvcmRpb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEF0IGEgZ2xhbmNlIHNlY3Rpb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJpbmZvLXNlY3Rpb25cIj5cbiAgICA8d3Mtd2lkZ2V0LXBsYXllci1icmllZiBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCIgW2NvbnRlbnRdPVwiY29udGVudFwiIFtoYXNUb2NTdHJ1Y3R1cmVdPVwiaGFzVG9jU3RydWN0dXJlXCJcbiAgICAgIFt0b2NTdHJ1Y3R1cmVdPVwidG9jU3RydWN0dXJlXCI+XG4gICAgPC93cy13aWRnZXQtcGxheWVyLWJyaWVmPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NyZWF0b3JzIGxldC1hdXRob3JzPVwiYXV0aG9yc1wiIGxldC10aXRsZT1cInRpdGxlXCI+XG4gIDxtYXQtY2FyZD5cbiAgICA8aDIgKm5nSWY9XCJ0aXRsZSA9PT0gJ0FVVEhPUidcIj5BdXRob3JzPC9oMj5cbiAgICA8aDIgKm5nSWY9XCJ0aXRsZSA9PT0gJ0NPTlRBQ1QnXCI+Q3VyYXRvci9Db250YWN0PC9oMj5cbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdXRob3Igb2YgYXV0aG9yc1wiIGNsYXNzPVwiYXV0aG9yXCI+XG4gICAgICA8d3Mtd2lkZ2V0LXVzZXItaW1hZ2UgY2xhc3M9XCJhdXRob3ItaW1hZ2VcIiBbaW1hZ2VUeXBlXT1cIiduYW1lLWluaXRpYWwnXCIgW3VzZXJOYW1lXT1cImF1dGhvci5uYW1lIHx8ICcnXCJcbiAgICAgICAgW2VtYWlsXT1cImF1dGhvci5lbWFpbFwiPjwvd3Mtd2lkZ2V0LXVzZXItaW1hZ2U+XG4gICAgICA8ZGl2IGNsYXNzPVwid2lkdGgtZXhwYW5kIGZsZXggZmxleC1taWRkbGUgZmxleC1iZXR3ZWVuXCI+XG4gICAgICAgIDxwIGNsYXNzPVwibWFyZ2luLXJlbW92ZSB0ZXh0LW1kIGZvbnQtbm9ybWFsXCI+e3sgYXV0aG9yLm5hbWUgfX08L3A+XG4gICAgICAgIDx3cy13aWRnZXQtYnRuLW1haWwtdXNlciAqbmdJZj1cImFza0F1dGhvckVuYWJsZWRcIiBbd2lkZ2V0RGF0YV09XCJ7IGNvbnRlbnQ6IGNvbnRlbnQsIGVtYWlsczogW2F1dGhvci5lbWFpbF0gfVwiPlxuICAgICAgICA8L3dzLXdpZGdldC1idG4tbWFpbC11c2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWNhcmQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { NsContent } from '../../_services/widget-content.model';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/router";
|
|
5
|
+
import * as i2 from "../../services/app-toc.service";
|
|
6
|
+
import * as i3 from "@sunbird-cb/utils-v2";
|
|
7
|
+
import * as i4 from "@angular/platform-browser";
|
|
8
|
+
import * as i5 from "../../services/access-control.service";
|
|
9
|
+
import * as i6 from "@angular/common";
|
|
10
|
+
import * as i7 from "@angular/material/icon";
|
|
11
|
+
import * as i8 from "@angular/material/legacy-button";
|
|
12
|
+
import * as i9 from "@angular/material/legacy-card";
|
|
13
|
+
import * as i10 from "@angular/material/legacy-chips";
|
|
14
|
+
import * as i11 from "@angular/material/divider";
|
|
15
|
+
import * as i12 from "@angular/material/expansion";
|
|
16
|
+
import * as i13 from "../../_collection/_common/user-image/user-image.component";
|
|
17
|
+
import * as i14 from "../../_collection/_common/player-brief/player-brief.component";
|
|
18
|
+
export class AppTocOverviewComponent {
|
|
19
|
+
constructor(route, tocSharedSvc, configSvc, domSanitizer, authAccessControlSvc) {
|
|
20
|
+
this.route = route;
|
|
21
|
+
this.tocSharedSvc = tocSharedSvc;
|
|
22
|
+
this.configSvc = configSvc;
|
|
23
|
+
this.domSanitizer = domSanitizer;
|
|
24
|
+
this.authAccessControlSvc = authAccessControlSvc;
|
|
25
|
+
this.content = null;
|
|
26
|
+
this.routeSubscription = null;
|
|
27
|
+
this.viewMoreRelatedTopics = false;
|
|
28
|
+
this.hasTocStructure = false;
|
|
29
|
+
this.tocStructure = null;
|
|
30
|
+
this.askAuthorEnabled = true;
|
|
31
|
+
this.trainingLHubEnabled = false;
|
|
32
|
+
this.body = null;
|
|
33
|
+
this.forPreview = false;
|
|
34
|
+
this.tocConfig = null;
|
|
35
|
+
this.contentParents = {};
|
|
36
|
+
this.objKeys = Object.keys;
|
|
37
|
+
if (this.configSvc.restrictedFeatures) {
|
|
38
|
+
this.askAuthorEnabled = !this.configSvc.restrictedFeatures.has('askAuthor');
|
|
39
|
+
this.trainingLHubEnabled = !this.configSvc.restrictedFeatures.has('trainingLHub');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
ngOnInit() {
|
|
43
|
+
if (!this.forPreview) {
|
|
44
|
+
this.forPreview = window.location.href.includes('/author/');
|
|
45
|
+
}
|
|
46
|
+
if (this.route && this.route.parent) {
|
|
47
|
+
this.routeSubscription = this.route.parent.data.subscribe((data) => {
|
|
48
|
+
this.initData(data);
|
|
49
|
+
this.tocConfig = data.pageData.data;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
if (this.routeSubscription) {
|
|
55
|
+
this.routeSubscription.unsubscribe();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
get showSubtitleOnBanner() {
|
|
59
|
+
return this.tocSharedSvc.subtitleOnBanners;
|
|
60
|
+
}
|
|
61
|
+
get showDescription() {
|
|
62
|
+
if (this.content && !this.content.body) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
return this.tocSharedSvc.showDescription;
|
|
66
|
+
}
|
|
67
|
+
initData(data) {
|
|
68
|
+
const initData = this.tocSharedSvc.initData(data);
|
|
69
|
+
this.content = initData.content;
|
|
70
|
+
this.body = this.domSanitizer.bypassSecurityTrustHtml(this.content && this.content.body
|
|
71
|
+
? this.forPreview
|
|
72
|
+
? this.authAccessControlSvc.proxyToAuthoringUrl(this.content.body)
|
|
73
|
+
: this.content.body
|
|
74
|
+
: '');
|
|
75
|
+
this.contentParents = {};
|
|
76
|
+
this.resetAndFetchTocStructure();
|
|
77
|
+
this.getTrainingCount();
|
|
78
|
+
this.getContentParent();
|
|
79
|
+
}
|
|
80
|
+
getContentParent() {
|
|
81
|
+
if (this.content) {
|
|
82
|
+
const contentParentReq = {
|
|
83
|
+
fields: ['contentType', 'name'],
|
|
84
|
+
};
|
|
85
|
+
this.tocSharedSvc
|
|
86
|
+
.fetchContentParent(this.content.identifier, contentParentReq, this.forPreview)
|
|
87
|
+
.subscribe(res => {
|
|
88
|
+
this.parseContentParent(res);
|
|
89
|
+
}, _err => {
|
|
90
|
+
this.contentParents = {};
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
parseContentParent(content) {
|
|
95
|
+
content.collections.forEach(collection => {
|
|
96
|
+
if (!this.contentParents.hasOwnProperty(collection.contentType)) {
|
|
97
|
+
this.contentParents[collection.contentType] = [];
|
|
98
|
+
}
|
|
99
|
+
this.contentParents[collection.contentType].push(collection);
|
|
100
|
+
this.parseContentParent(collection);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
resetAndFetchTocStructure() {
|
|
104
|
+
this.tocStructure = {
|
|
105
|
+
assessment: 0,
|
|
106
|
+
finalTest: 0,
|
|
107
|
+
course: 0,
|
|
108
|
+
handsOn: 0,
|
|
109
|
+
interactiveVideo: 0,
|
|
110
|
+
learningModule: 0,
|
|
111
|
+
other: 0,
|
|
112
|
+
pdf: 0,
|
|
113
|
+
survey: 0,
|
|
114
|
+
podcast: 0,
|
|
115
|
+
practiceTest: 0,
|
|
116
|
+
quiz: 0,
|
|
117
|
+
video: 0,
|
|
118
|
+
webModule: 0,
|
|
119
|
+
webPage: 0,
|
|
120
|
+
youtube: 0,
|
|
121
|
+
interactivecontent: 0,
|
|
122
|
+
offlineSession: 0,
|
|
123
|
+
};
|
|
124
|
+
if (this.content) {
|
|
125
|
+
this.hasTocStructure = false;
|
|
126
|
+
this.tocStructure.learningModule = this.content.primaryCategory === NsContent.EPrimaryCategory.MODULE ? -1 : 0;
|
|
127
|
+
this.tocStructure.course = this.content.primaryCategory === NsContent.EPrimaryCategory.COURSE ? -1 : 0;
|
|
128
|
+
this.tocStructure = this.tocSharedSvc.getTocStructure(this.content, this.tocStructure);
|
|
129
|
+
for (const progType in this.tocStructure) {
|
|
130
|
+
if (this.tocStructure[progType] > 0) {
|
|
131
|
+
this.hasTocStructure = true;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// For Learning Hub trainings
|
|
138
|
+
getTrainingCount() {
|
|
139
|
+
if (this.trainingLHubEnabled &&
|
|
140
|
+
this.content &&
|
|
141
|
+
// this.trainingSvc.isValidTrainingContent(this.content) &&
|
|
142
|
+
!this.forPreview) {
|
|
143
|
+
// this.trainingLHubCount$ = this.trainingApi
|
|
144
|
+
// .getTrainingCount(this.content.identifier)
|
|
145
|
+
// .pipe(retry(2))
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocOverviewComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.AppTocService }, { token: i3.ConfigurationsService }, { token: i4.DomSanitizer }, { token: i5.AccessControlService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
149
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocOverviewComponent, selector: "ws-app-app-toc-overview", inputs: { forPreview: "forPreview" }, ngImport: i0, template: "<div class=\"flex flex-between flex-wrapped mt-4\">\r\n <div class=\"meta-section\">\r\n <!-- Description : Conditional : If not shown here, will be shown over banner -->\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.description?.enabled &&\r\n showDescription &&\r\n showSubtitleOnBanner &&\r\n content?.description\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.description?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"mat-subheading-1\" [innerHTML]=\"content?.description\"></div>\r\n </mat-card-content>\r\n </mat-card>\r\n <!-- Content Body -->\r\n <mat-card *ngIf=\"tocConfig?.overview?.body?.enabled && content?.body\" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.body?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"break-words\" [innerHTML]=\"body\"></div>\r\n </mat-card-content>\r\n </mat-card>\r\n <!-- Learning objective -->\r\n <mat-card *ngIf=\"tocConfig?.overview?.learningObjective?.enabled && content?.learningObjective\"\r\n class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.learningObjective?.displayName }}</h2>\r\n <mat-card-content>\r\n <p class=\"mat-subheading-1\" [innerHTML]=\"content?.learningObjective\"></p>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <!-- Registration instructions -->\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.registrationInstructions?.enabled &&\r\n content?.registrationInstructions?.length\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.registrationInstructions?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"mat-subheading-1 break-words\" [innerHTML]=\"content?.registrationInstructions\"></div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.preContents?.enabled && content?.preContents?.length\" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.preContents?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let preContent of content?.preContents\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + preContent.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ preContent.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.postContents?.enabled && content?.postContents?.length\"\r\n class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.postContents?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let postContent of content?.postContents\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + postContent.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ postContent.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.certificationList?.enabled && content?.certificationList?.length\"\r\n class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.certificationList?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let certification of content?.certificationList\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + certification.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ certification.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.studyMaterials?.enabled && content?.studyMaterials?.length\"\r\n class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.studyMaterials?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let studyitem of content?.studyMaterials\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + studyitem.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ studyitem.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.playgroundResources?.enabled && content?.playgroundResources?.length\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.playgroundResources?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let playgroundResource of content?.playgroundResources\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + playgroundResource.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ playgroundResource.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.kArtifacts?.enabled && content?.kArtifacts?.length\" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.kArtifacts?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let kArtifact of content?.kArtifacts\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + kArtifact.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ kArtifact.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.equivalentCertifications?.enabled &&\r\n content?.equivalentCertifications?.length\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.equivalentCertifications?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let equivalentCertification of content?.equivalentCertifications\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + equivalentCertification.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ equivalentCertification.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.softwareRequirements?.enabled && content?.softwareRequirements?.length\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.softwareRequirements?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let softwareRequirement of content?.softwareRequirements\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [href]=\"softwareRequirement.url\" target=\"blank\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ softwareRequirement.title }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <!-- Skills -->\r\n <mat-card *ngIf=\"tocConfig?.overview?.skills?.enabled && content?.skills?.length\"\r\n class=\"unit-meta-item mat-app-background\">\r\n <h2>{{ tocConfig?.overview?.skills?.displayName }}</h2>\r\n <mat-chip-list>\r\n <mat-chip *ngFor=\"let skill of content?.skills\">{{ skill.name }}</mat-chip>\r\n </mat-chip-list>\r\n </mat-card>\r\n <!-- Requirements -->\r\n <mat-card *ngIf=\"tocConfig?.overview?.preRequisites?.enabled && content?.preRequisites\" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.preRequisites?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"mat-subheading-1\" [innerHTML]=\"content?.preRequisites\"></div>\r\n <div class=\"margin-top-s\" *ngIf=\"content?.softwareRequirements?.length\">\r\n <h3 class=\"mat-h3 margin-bottom-xs\" >Software Requirements</h3>\r\n <ng-container *ngFor=\"let requirement of content?.softwareRequirements\">\r\n <a *ngIf=\"requirement.url\" class=\"margin-right-s\" mat-stroked-button target=\"_blank\"\r\n [href]=\"requirement.url\">\r\n {{ requirement.title }}\r\n </a>\r\n <a mat-stroked-button class=\"margin-right-s\" *ngIf=\"!requirement?.url\">{{ requirement.title }}\r\n </a>\r\n </ng-container>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <!-- Training (LHub) -->\r\n <mat-card *ngIf=\"trainingLHubEnabled && trainingLHubCount$ | async as trainingLHubCount\" class=\"unit-meta-item\">\r\n <h2 >Trainings</h2>\r\n <h4 class=\"mat-h4\">\r\n <ng-container>{{ trainingLHubCount }}</ng-container>\r\n <ng-container i18n=\"x trainings available\" *ngIf=\"trainingLHubCount > 1\">\r\n trainings available</ng-container>\r\n <ng-container i18n=\"1 training available\" *ngIf=\"trainingLHubCount === 1\">\r\n training available</ng-container>\r\n </h4>\r\n <div>\r\n \r\n </div>\r\n </mat-card>\r\n\r\n <!-- Related Topics -->\r\n <mat-card class=\"unit-meta-item\" *ngIf=\"tocConfig?.overview?.topics?.enabled && content?.topics?.length\">\r\n <h2>{{ tocConfig?.overview?.topics?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex flex-between flex-wrapped\">\r\n <a mat-stroked-button class=\"topic-button text-truncate\"\r\n *ngFor=\"let topic of content?.topics | pipeLimitTo: (viewMoreRelatedTopics ? 24 : 6)\" [title]=\"topic?.name\"\r\n [routerLink]=\"'/app/concept-graph/' + topic.identifier\">\r\n {{ topic?.name }}\r\n </a>\r\n </div>\r\n <div *ngIf=\"content?.topics?.length > 6\" class=\"text-right margin-top-xs\">\r\n <a mat-button (click)=\"viewMoreRelatedTopics = !viewMoreRelatedTopics\">\r\n <span *ngIf=\"!viewMoreRelatedTopics\" >View More</span>\r\n <span *ngIf=\"viewMoreRelatedTopics\" >View Less</span>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <!-- Authors on small screen -->\r\n <div class=\"block sm:hidden margin-bottom-m\" *ngIf=\"content?.creatorDetails?.length\">\r\n <ng-container [ngTemplateOutlet]=\"creators\" [ngTemplateOutletContext]=\"{\r\n authors: content?.creatorDetails,\r\n title: 'AUTHOR'\r\n }\">\r\n </ng-container>\r\n </div>\r\n <!-- Contacts on small screen -->\r\n <div class=\"block sm:hidden margin-bottom-m\" *ngIf=\"content?.creatorContacts?.length\">\r\n <ng-container [ngTemplateOutlet]=\"creators\" [ngTemplateOutletContext]=\"{\r\n authors: content?.creatorContacts,\r\n title: 'CONTACT'\r\n }\">\r\n </ng-container>\r\n </div>\r\n <div class=\"margin-bottom-m\" *ngIf=\"objKeys(contentParents).length\">\r\n <mat-card>\r\n <h2 >This content is part of</h2>\r\n </mat-card>\r\n <mat-accordion>\r\n <ng-container *ngFor=\"let key of objKeys(contentParents)\">\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n {{ key }}\r\n </mat-expansion-panel-header>\r\n <div class=\"flex mb-1\" *ngFor=\"let content of contentParents[key]\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"\r\n content.status !== 'Live'\r\n ? '/author' + '/toc/' + content.identifier\r\n : '/app' + '/toc/' + content.identifier\r\n \">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ content.name }}</p>\r\n </a>\r\n </div>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n </mat-accordion>\r\n </div>\r\n </div>\r\n <!-- At a glance section -->\r\n <div class=\"info-section\">\r\n <ws-widget-player-brief [forPreview]=\"forPreview\" [content]=\"content\" [hasTocStructure]=\"hasTocStructure\"\r\n [tocStructure]=\"tocStructure\">\r\n </ws-widget-player-brief>\r\n </div>\r\n</div>\r\n\r\n<ng-template #creators let-authors=\"authors\" let-title=\"title\">\r\n <mat-card>\r\n <h2 *ngIf=\"title === 'AUTHOR'\">Authors</h2>\r\n <h2 *ngIf=\"title === 'CONTACT'\">Curator/Contact</h2>\r\n <mat-divider></mat-divider>\r\n <div *ngFor=\"let author of authors\" class=\"author\">\r\n <ws-widget-user-image class=\"author-image\" [imageType]=\"'name-initial'\" [userName]=\"author.name || ''\"\r\n [email]=\"author.email\"></ws-widget-user-image>\r\n <div class=\"width-expand flex flex-middle flex-between\">\r\n <p class=\"margin-remove text-md font-normal\">{{ author.name }}</p>\r\n <ws-widget-btn-mail-user *ngIf=\"askAuthorEnabled\" [widgetData]=\"{ content: content, emails: [author.email] }\">\r\n </ws-widget-btn-mail-user>\r\n </div>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n", styles: [".meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px}@media only screen and (max-width: 599px){.meta-section{width:100%}}.topic-button{display:block;width:32%;margin:4px 0}@media only screen and (max-width: 599px){.topic-button{width:100%}}.info-section{width:28%;min-width:250px;margin-left:24px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0}}.info-section2{width:28%;min-width:250px;margin-right:24px}@media only screen and (max-width: 599px){.info-section2{width:100%;margin-right:0}}.info-container{padding:12px 16px;margin-bottom:16px}.info-container .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.author{padding:12px 0;display:flex}.author .author-image{margin-right:12px;height:44px;width:44px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatLegacyAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i9.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i9.MatLegacyCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i10.MatLegacyChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i10.MatLegacyChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "component", type: i11.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i12.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i12.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i12.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "component", type: i13.UserImageComponent, selector: "ws-widget-user-image", inputs: ["email", "userId", "userName", "imageType", "imageUrl", "imageSize"] }, { kind: "component", type: i14.PlayerBriefComponent, selector: "ws-widget-player-brief", inputs: ["content", "hasTocStructure", "tocStructure", "isPreviewMode", "forPreview", "askAuthorEnabled"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.PipeLimitToPipe, name: "pipeLimitTo" }] }); }
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocOverviewComponent, decorators: [{
|
|
152
|
+
type: Component,
|
|
153
|
+
args: [{ selector: 'ws-app-app-toc-overview', template: "<div class=\"flex flex-between flex-wrapped mt-4\">\r\n <div class=\"meta-section\">\r\n <!-- Description : Conditional : If not shown here, will be shown over banner -->\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.description?.enabled &&\r\n showDescription &&\r\n showSubtitleOnBanner &&\r\n content?.description\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.description?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"mat-subheading-1\" [innerHTML]=\"content?.description\"></div>\r\n </mat-card-content>\r\n </mat-card>\r\n <!-- Content Body -->\r\n <mat-card *ngIf=\"tocConfig?.overview?.body?.enabled && content?.body\" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.body?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"break-words\" [innerHTML]=\"body\"></div>\r\n </mat-card-content>\r\n </mat-card>\r\n <!-- Learning objective -->\r\n <mat-card *ngIf=\"tocConfig?.overview?.learningObjective?.enabled && content?.learningObjective\"\r\n class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.learningObjective?.displayName }}</h2>\r\n <mat-card-content>\r\n <p class=\"mat-subheading-1\" [innerHTML]=\"content?.learningObjective\"></p>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <!-- Registration instructions -->\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.registrationInstructions?.enabled &&\r\n content?.registrationInstructions?.length\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.registrationInstructions?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"mat-subheading-1 break-words\" [innerHTML]=\"content?.registrationInstructions\"></div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.preContents?.enabled && content?.preContents?.length\" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.preContents?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let preContent of content?.preContents\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + preContent.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ preContent.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.postContents?.enabled && content?.postContents?.length\"\r\n class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.postContents?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let postContent of content?.postContents\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + postContent.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ postContent.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.certificationList?.enabled && content?.certificationList?.length\"\r\n class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.certificationList?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let certification of content?.certificationList\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + certification.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ certification.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.studyMaterials?.enabled && content?.studyMaterials?.length\"\r\n class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.studyMaterials?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let studyitem of content?.studyMaterials\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + studyitem.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ studyitem.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.playgroundResources?.enabled && content?.playgroundResources?.length\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.playgroundResources?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let playgroundResource of content?.playgroundResources\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + playgroundResource.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ playgroundResource.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"tocConfig?.overview?.kArtifacts?.enabled && content?.kArtifacts?.length\" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.kArtifacts?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let kArtifact of content?.kArtifacts\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + kArtifact.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ kArtifact.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.equivalentCertifications?.enabled &&\r\n content?.equivalentCertifications?.length\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.equivalentCertifications?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let equivalentCertification of content?.equivalentCertifications\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"'/app/toc/' + equivalentCertification.identifier\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ equivalentCertification.name }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card *ngIf=\"\r\n tocConfig?.overview?.softwareRequirements?.enabled && content?.softwareRequirements?.length\r\n \" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.softwareRequirements?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex mb-1\" *ngFor=\"let softwareRequirement of content?.softwareRequirements\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [href]=\"softwareRequirement.url\" target=\"blank\">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ softwareRequirement.title }}</p>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <!-- Skills -->\r\n <mat-card *ngIf=\"tocConfig?.overview?.skills?.enabled && content?.skills?.length\"\r\n class=\"unit-meta-item mat-app-background\">\r\n <h2>{{ tocConfig?.overview?.skills?.displayName }}</h2>\r\n <mat-chip-list>\r\n <mat-chip *ngFor=\"let skill of content?.skills\">{{ skill.name }}</mat-chip>\r\n </mat-chip-list>\r\n </mat-card>\r\n <!-- Requirements -->\r\n <mat-card *ngIf=\"tocConfig?.overview?.preRequisites?.enabled && content?.preRequisites\" class=\"unit-meta-item\">\r\n <h2>{{ tocConfig?.overview?.preRequisites?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"mat-subheading-1\" [innerHTML]=\"content?.preRequisites\"></div>\r\n <div class=\"margin-top-s\" *ngIf=\"content?.softwareRequirements?.length\">\r\n <h3 class=\"mat-h3 margin-bottom-xs\" >Software Requirements</h3>\r\n <ng-container *ngFor=\"let requirement of content?.softwareRequirements\">\r\n <a *ngIf=\"requirement.url\" class=\"margin-right-s\" mat-stroked-button target=\"_blank\"\r\n [href]=\"requirement.url\">\r\n {{ requirement.title }}\r\n </a>\r\n <a mat-stroked-button class=\"margin-right-s\" *ngIf=\"!requirement?.url\">{{ requirement.title }}\r\n </a>\r\n </ng-container>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <!-- Training (LHub) -->\r\n <mat-card *ngIf=\"trainingLHubEnabled && trainingLHubCount$ | async as trainingLHubCount\" class=\"unit-meta-item\">\r\n <h2 >Trainings</h2>\r\n <h4 class=\"mat-h4\">\r\n <ng-container>{{ trainingLHubCount }}</ng-container>\r\n <ng-container i18n=\"x trainings available\" *ngIf=\"trainingLHubCount > 1\">\r\n trainings available</ng-container>\r\n <ng-container i18n=\"1 training available\" *ngIf=\"trainingLHubCount === 1\">\r\n training available</ng-container>\r\n </h4>\r\n <div>\r\n \r\n </div>\r\n </mat-card>\r\n\r\n <!-- Related Topics -->\r\n <mat-card class=\"unit-meta-item\" *ngIf=\"tocConfig?.overview?.topics?.enabled && content?.topics?.length\">\r\n <h2>{{ tocConfig?.overview?.topics?.displayName }}</h2>\r\n <mat-card-content>\r\n <div class=\"flex flex-between flex-wrapped\">\r\n <a mat-stroked-button class=\"topic-button text-truncate\"\r\n *ngFor=\"let topic of content?.topics | pipeLimitTo: (viewMoreRelatedTopics ? 24 : 6)\" [title]=\"topic?.name\"\r\n [routerLink]=\"'/app/concept-graph/' + topic.identifier\">\r\n {{ topic?.name }}\r\n </a>\r\n </div>\r\n <div *ngIf=\"content?.topics?.length > 6\" class=\"text-right margin-top-xs\">\r\n <a mat-button (click)=\"viewMoreRelatedTopics = !viewMoreRelatedTopics\">\r\n <span *ngIf=\"!viewMoreRelatedTopics\" >View More</span>\r\n <span *ngIf=\"viewMoreRelatedTopics\" >View Less</span>\r\n </a>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <!-- Authors on small screen -->\r\n <div class=\"block sm:hidden margin-bottom-m\" *ngIf=\"content?.creatorDetails?.length\">\r\n <ng-container [ngTemplateOutlet]=\"creators\" [ngTemplateOutletContext]=\"{\r\n authors: content?.creatorDetails,\r\n title: 'AUTHOR'\r\n }\">\r\n </ng-container>\r\n </div>\r\n <!-- Contacts on small screen -->\r\n <div class=\"block sm:hidden margin-bottom-m\" *ngIf=\"content?.creatorContacts?.length\">\r\n <ng-container [ngTemplateOutlet]=\"creators\" [ngTemplateOutletContext]=\"{\r\n authors: content?.creatorContacts,\r\n title: 'CONTACT'\r\n }\">\r\n </ng-container>\r\n </div>\r\n <div class=\"margin-bottom-m\" *ngIf=\"objKeys(contentParents).length\">\r\n <mat-card>\r\n <h2 >This content is part of</h2>\r\n </mat-card>\r\n <mat-accordion>\r\n <ng-container *ngFor=\"let key of objKeys(contentParents)\">\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>\r\n {{ key }}\r\n </mat-expansion-panel-header>\r\n <div class=\"flex mb-1\" *ngFor=\"let content of contentParents[key]\">\r\n <span class=\"mr-1\">\r\n <mat-icon class=\"align-bottom\">web_asset</mat-icon>\r\n </span>\r\n <a class=\"ws-mat-primary-text\" [routerLink]=\"\r\n content.status !== 'Live'\r\n ? '/author' + '/toc/' + content.identifier\r\n : '/app' + '/toc/' + content.identifier\r\n \">\r\n <p class=\"margin-remove-bottom mat-subheading-1\">{{ content.name }}</p>\r\n </a>\r\n </div>\r\n </mat-expansion-panel>\r\n </ng-container>\r\n </mat-accordion>\r\n </div>\r\n </div>\r\n <!-- At a glance section -->\r\n <div class=\"info-section\">\r\n <ws-widget-player-brief [forPreview]=\"forPreview\" [content]=\"content\" [hasTocStructure]=\"hasTocStructure\"\r\n [tocStructure]=\"tocStructure\">\r\n </ws-widget-player-brief>\r\n </div>\r\n</div>\r\n\r\n<ng-template #creators let-authors=\"authors\" let-title=\"title\">\r\n <mat-card>\r\n <h2 *ngIf=\"title === 'AUTHOR'\">Authors</h2>\r\n <h2 *ngIf=\"title === 'CONTACT'\">Curator/Contact</h2>\r\n <mat-divider></mat-divider>\r\n <div *ngFor=\"let author of authors\" class=\"author\">\r\n <ws-widget-user-image class=\"author-image\" [imageType]=\"'name-initial'\" [userName]=\"author.name || ''\"\r\n [email]=\"author.email\"></ws-widget-user-image>\r\n <div class=\"width-expand flex flex-middle flex-between\">\r\n <p class=\"margin-remove text-md font-normal\">{{ author.name }}</p>\r\n <ws-widget-btn-mail-user *ngIf=\"askAuthorEnabled\" [widgetData]=\"{ content: content, emails: [author.email] }\">\r\n </ws-widget-btn-mail-user>\r\n </div>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n", styles: [".meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px}@media only screen and (max-width: 599px){.meta-section{width:100%}}.topic-button{display:block;width:32%;margin:4px 0}@media only screen and (max-width: 599px){.topic-button{width:100%}}.info-section{width:28%;min-width:250px;margin-left:24px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0}}.info-section2{width:28%;min-width:250px;margin-right:24px}@media only screen and (max-width: 599px){.info-section2{width:100%;margin-right:0}}.info-container{padding:12px 16px;margin-bottom:16px}.info-container .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.author{padding:12px 0;display:flex}.author .author-image{margin-right:12px;height:44px;width:44px}\n"] }]
|
|
154
|
+
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.AppTocService }, { type: i3.ConfigurationsService }, { type: i4.DomSanitizer }, { type: i5.AccessControlService }]; }, propDecorators: { forPreview: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}] } });
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1vdmVydmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvY29tcG9uZW50cy9hcHAtdG9jLW92ZXJ2aWV3L2FwcC10b2Mtb3ZlcnZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1vdmVydmlldy9hcHAtdG9jLW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQTtBQUluRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVaEUsTUFBTSxPQUFPLHVCQUF1QjtJQWVsQyxZQUNVLEtBQXFCLEVBQ3JCLFlBQTJCLEVBQzNCLFNBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLG9CQUEwQztRQUoxQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBbkJwRCxZQUFPLEdBQThCLElBQUksQ0FBQTtRQUN6QyxzQkFBaUIsR0FBd0IsSUFBSSxDQUFBO1FBQzdDLDBCQUFxQixHQUFHLEtBQUssQ0FBQTtRQUM3QixvQkFBZSxHQUFHLEtBQUssQ0FBQTtRQUN2QixpQkFBWSxHQUFrQyxJQUFJLENBQUE7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxDQUFBO1FBQ3ZCLHdCQUFtQixHQUFHLEtBQUssQ0FBQTtRQUUzQixTQUFJLEdBQW9CLElBQUksQ0FBQTtRQUNuQixlQUFV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QztZQUM3QywrQ0FBK0M7WUFDL0Msb0JBQW9CO1NBQ3JCO0lBQ0gsQ0FBQzsrR0FuSlUsdUJBQXVCO21HQUF2Qix1QkFBdUIscUdDZnBDLDR1YkEwUkE7OzRGRDNRYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UseUJBQXlCO21PQWMxQixVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3MtY29udHJvbC5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJ1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5tb2RlbCdcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgTnNBcHBUb2MgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwLXRvYy5tb2RlbCdcclxuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZSdcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3MtYXBwLWFwcC10b2Mtb3ZlcnZpZXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtdG9jLW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hcHAtdG9jLW92ZXJ2aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBUb2NPdmVydmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsID0gbnVsbFxyXG4gIHJvdXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxyXG4gIHZpZXdNb3JlUmVsYXRlZFRvcGljcyA9IGZhbHNlXHJcbiAgaGFzVG9jU3RydWN0dXJlID0gZmFsc2VcclxuICB0b2NTdHJ1Y3R1cmU6IE5zQXBwVG9jLklUb2NTdHJ1Y3R1cmUgfCBudWxsID0gbnVsbFxyXG4gIGFza0F1dGhvckVuYWJsZWQgPSB0cnVlXHJcbiAgdHJhaW5pbmdMSHViRW5hYmxlZCA9IGZhbHNlXHJcbiAgdHJhaW5pbmdMSHViQ291bnQkPzogT2JzZXJ2YWJsZTxudW1iZXI+XHJcbiAgYm9keTogU2FmZUh0bWwgfCBudWxsID0gbnVsbFxyXG4gIEBJbnB1dCgpIGZvclByZXZpZXcgPSBmYWxzZVxyXG4gIHRvY0NvbmZpZzogYW55ID0gbnVsbFxyXG4gIGNvbnRlbnRQYXJlbnRzOiB7IFtrZXk6IHN0cmluZ106IE5zQXBwVG9jLklDb250ZW50UGFyZW50UmVzcG9uc2VbXSB9ID0ge31cclxuICBvYmpLZXlzID0gT2JqZWN0LmtleXNcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdG9jU2hhcmVkU3ZjOiBBcHBUb2NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGF1dGhBY2Nlc3NDb250cm9sU3ZjOiBBY2Nlc3NDb250cm9sU2VydmljZSxcclxuICApIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMpIHtcclxuICAgICAgdGhpcy5hc2tBdXRob3JFbmFibGVkID0gIXRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcy5oYXMoJ2Fza0F1dGhvcicpXHJcbiAgICAgIHRoaXMudHJhaW5pbmdMSHViRW5hYmxlZCA9ICF0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMuaGFzKCd0cmFpbmluZ0xIdWInKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xyXG4gICAgICB0aGlzLmZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL2F1dGhvci8nKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucm91dGUgJiYgdGhpcy5yb3V0ZS5wYXJlbnQpIHtcclxuICAgICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGUucGFyZW50LmRhdGEuc3Vic2NyaWJlKChkYXRhOiBEYXRhKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbml0RGF0YShkYXRhKVxyXG4gICAgICAgIHRoaXMudG9jQ29uZmlnID0gZGF0YS5wYWdlRGF0YS5kYXRhXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnJvdXRlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dTdWJ0aXRsZU9uQmFubmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9jU2hhcmVkU3ZjLnN1YnRpdGxlT25CYW5uZXJzXHJcbiAgfVxyXG4gIGdldCBzaG93RGVzY3JpcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50ICYmICF0aGlzLmNvbnRlbnQuYm9keSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudG9jU2hhcmVkU3ZjLnNob3dEZXNjcmlwdGlvblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RGF0YShkYXRhOiBEYXRhKSB7XHJcbiAgICBjb25zdCBpbml0RGF0YSA9IHRoaXMudG9jU2hhcmVkU3ZjLmluaXREYXRhKGRhdGEpXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBpbml0RGF0YS5jb250ZW50XHJcbiAgICB0aGlzLmJvZHkgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcclxuICAgICAgdGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5ib2R5XHJcbiAgICAgICAgPyB0aGlzLmZvclByZXZpZXdcclxuICAgICAgICAgID8gdGhpcy5hdXRoQWNjZXNzQ29udHJvbFN2Yy5wcm94eVRvQXV0aG9yaW5nVXJsKHRoaXMuY29udGVudC5ib2R5KVxyXG4gICAgICAgICAgOiB0aGlzLmNvbnRlbnQuYm9keVxyXG4gICAgICAgIDogJycsXHJcbiAgICApXHJcbiAgICB0aGlzLmNvbnRlbnRQYXJlbnRzID0ge31cclxuICAgIHRoaXMucmVzZXRBbmRGZXRjaFRvY1N0cnVjdHVyZSgpXHJcbiAgICB0aGlzLmdldFRyYWluaW5nQ291bnQoKVxyXG4gICAgdGhpcy5nZXRDb250ZW50UGFyZW50KClcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnRQYXJlbnQoKSB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnRQYXJlbnRSZXE6IE5zQXBwVG9jLklDb250ZW50UGFyZW50UmVxID0ge1xyXG4gICAgICAgIGZpZWxkczogWydjb250ZW50VHlwZScsICduYW1lJ10sXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50b2NTaGFyZWRTdmNcclxuICAgICAgICAuZmV0Y2hDb250ZW50UGFyZW50KHRoaXMuY29udGVudC5pZGVudGlmaWVyLCBjb250ZW50UGFyZW50UmVxLCB0aGlzLmZvclByZXZpZXcpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyc2VDb250ZW50UGFyZW50KHJlcylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBfZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50UGFyZW50cyA9IHt9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBhcnNlQ29udGVudFBhcmVudChjb250ZW50OiBOc0FwcFRvYy5JQ29udGVudFBhcmVudFJlc3BvbnNlKSB7XHJcbiAgICBjb250ZW50LmNvbGxlY3Rpb25zLmZvckVhY2goY29sbGVjdGlvbiA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5jb250ZW50UGFyZW50cy5oYXNPd25Qcm9wZXJ0eShjb2xsZWN0aW9uLmNvbnRlbnRUeXBlKSkge1xyXG4gICAgICAgIHRoaXMuY29udGVudFBhcmVudHNbY29sbGVjdGlvbi5jb250ZW50VHlwZV0gPSBbXVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGVudFBhcmVudHNbY29sbGVjdGlvbi5jb250ZW50VHlwZV0ucHVzaChjb2xsZWN0aW9uKVxyXG4gICAgICB0aGlzLnBhcnNlQ29udGVudFBhcmVudChjb2xsZWN0aW9uKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlc2V0QW5kRmV0Y2hUb2NTdHJ1Y3R1cmUoKSB7XHJcbiAgICB0aGlzLnRvY1N0cnVjdHVyZSA9IHtcclxuICAgICAgYXNzZXNzbWVudDogMCxcclxuICAgICAgZmluYWxUZXN0OiAwLFxyXG4gICAgICBjb3Vyc2U6IDAsXHJcbiAgICAgIGhhbmRzT246IDAsXHJcbiAgICAgIGludGVyYWN0aXZlVmlkZW86IDAsXHJcbiAgICAgIGxlYXJuaW5nTW9kdWxlOiAwLFxyXG4gICAgICBvdGhlcjogMCxcclxuICAgICAgcGRmOiAwLFxyXG4gICAgICBzdXJ2ZXk6IDAsXHJcbiAgICAgIHBvZGNhc3Q6IDAsXHJcbiAgICAgIHByYWN0aWNlVGVzdDogMCxcclxuICAgICAgcXVpejogMCxcclxuICAgICAgdmlkZW86IDAsXHJcbiAgICAgIHdlYk1vZHVsZTogMCxcclxuICAgICAgd2ViUGFnZTogMCxcclxuICAgICAgeW91dHViZTogMCxcclxuICAgICAgaW50ZXJhY3RpdmVjb250ZW50OiAwLFxyXG4gICAgICBvZmZsaW5lU2Vzc2lvbjogMCxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcclxuICAgICAgdGhpcy5oYXNUb2NTdHJ1Y3R1cmUgPSBmYWxzZVxyXG4gICAgICB0aGlzLnRvY1N0cnVjdHVyZS5sZWFybmluZ01vZHVsZSA9IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSA/IC0xIDogMFxyXG4gICAgICB0aGlzLnRvY1N0cnVjdHVyZS5jb3Vyc2UgPSB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UgPyAtMSA6IDBcclxuICAgICAgdGhpcy50b2NTdHJ1Y3R1cmUgPSB0aGlzLnRvY1NoYXJlZFN2Yy5nZXRUb2NTdHJ1Y3R1cmUodGhpcy5jb250ZW50LCB0aGlzLnRvY1N0cnVjdHVyZSlcclxuICAgICAgZm9yIChjb25zdCBwcm9nVHlwZSBpbiB0aGlzLnRvY1N0cnVjdHVyZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnRvY1N0cnVjdHVyZVtwcm9nVHlwZV0gPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmhhc1RvY1N0cnVjdHVyZSA9IHRydWVcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBGb3IgTGVhcm5pbmcgSHViIHRyYWluaW5nc1xyXG4gIHByaXZhdGUgZ2V0VHJhaW5pbmdDb3VudCgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy50cmFpbmluZ0xIdWJFbmFibGVkICYmXHJcbiAgICAgIHRoaXMuY29udGVudCAmJlxyXG4gICAgICAvLyB0aGlzLnRyYWluaW5nU3ZjLmlzVmFsaWRUcmFpbmluZ0NvbnRlbnQodGhpcy5jb250ZW50KSAmJlxyXG4gICAgICAhdGhpcy5mb3JQcmV2aWV3XHJcbiAgICApIHtcclxuICAgICAgLy8gdGhpcy50cmFpbmluZ0xIdWJDb3VudCQgPSB0aGlzLnRyYWluaW5nQXBpXHJcbiAgICAgIC8vICAgLmdldFRyYWluaW5nQ291bnQodGhpcy5jb250ZW50LmlkZW50aWZpZXIpXHJcbiAgICAgIC8vICAgLnBpcGUocmV0cnkoMikpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYmV0d2VlbiBmbGV4LXdyYXBwZWQgbXQtNFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtZXRhLXNlY3Rpb25cIj5cclxuICAgIDwhLS0gRGVzY3JpcHRpb24gOiBDb25kaXRpb25hbCA6IElmIG5vdCBzaG93biBoZXJlLCB3aWxsIGJlIHNob3duIG92ZXIgYmFubmVyIC0tPlxyXG4gICAgPG1hdC1jYXJkICpuZ0lmPVwiXHJcbiAgICAgICAgdG9jQ29uZmlnPy5vdmVydmlldz8uZGVzY3JpcHRpb24/LmVuYWJsZWQgJiZcclxuICAgICAgICBzaG93RGVzY3JpcHRpb24gJiZcclxuICAgICAgICBzaG93U3VidGl0bGVPbkJhbm5lciAmJlxyXG4gICAgICAgIGNvbnRlbnQ/LmRlc2NyaXB0aW9uXHJcbiAgICAgIFwiIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIj5cclxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LmRlc2NyaXB0aW9uPy5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xXCIgW2lubmVySFRNTF09XCJjb250ZW50Py5kZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8L21hdC1jYXJkPlxyXG4gICAgPCEtLSBDb250ZW50IEJvZHkgLS0+XHJcbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJ0b2NDb25maWc/Lm92ZXJ2aWV3Py5ib2R5Py5lbmFibGVkICYmIGNvbnRlbnQ/LmJvZHlcIiBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XHJcbiAgICAgIDxoMj57eyB0b2NDb25maWc/Lm92ZXJ2aWV3Py5ib2R5Py5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJicmVhay13b3Jkc1wiIFtpbm5lckhUTUxdPVwiYm9keVwiPjwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8L21hdC1jYXJkPlxyXG4gICAgPCEtLSBMZWFybmluZyBvYmplY3RpdmUgLS0+XHJcbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJ0b2NDb25maWc/Lm92ZXJ2aWV3Py5sZWFybmluZ09iamVjdGl2ZT8uZW5hYmxlZCAmJiBjb250ZW50Py5sZWFybmluZ09iamVjdGl2ZVwiXHJcbiAgICAgIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIj5cclxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LmxlYXJuaW5nT2JqZWN0aXZlPy5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxwIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMVwiIFtpbm5lckhUTUxdPVwiY29udGVudD8ubGVhcm5pbmdPYmplY3RpdmVcIj48L3A+XHJcbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDwvbWF0LWNhcmQ+XHJcblxyXG4gICAgPCEtLSBSZWdpc3RyYXRpb24gaW5zdHJ1Y3Rpb25zIC0tPlxyXG4gICAgPG1hdC1jYXJkICpuZ0lmPVwiXHJcbiAgICAgICAgdG9jQ29uZmlnPy5vdmVydmlldz8ucmVnaXN0cmF0aW9uSW5zdHJ1Y3Rpb25zPy5lbmFibGVkICYmXHJcbiAgICAgICAgY29udGVudD8ucmVnaXN0cmF0aW9uSW5zdHJ1Y3Rpb25zPy5sZW5ndGhcclxuICAgICAgXCIgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxyXG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8ucmVnaXN0cmF0aW9uSW5zdHJ1Y3Rpb25zPy5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xIGJyZWFrLXdvcmRzXCIgW2lubmVySFRNTF09XCJjb250ZW50Py5yZWdpc3RyYXRpb25JbnN0cnVjdGlvbnNcIj48L2Rpdj5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICAgIDxtYXQtY2FyZCAqbmdJZj1cInRvY0NvbmZpZz8ub3ZlcnZpZXc/LnByZUNvbnRlbnRzPy5lbmFibGVkICYmIGNvbnRlbnQ/LnByZUNvbnRlbnRzPy5sZW5ndGhcIiBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XHJcbiAgICAgIDxoMj57eyB0b2NDb25maWc/Lm92ZXJ2aWV3Py5wcmVDb250ZW50cz8uZGlzcGxheU5hbWUgfX08L2gyPlxyXG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtYi0xXCIgKm5nRm9yPVwibGV0IHByZUNvbnRlbnQgb2YgY29udGVudD8ucHJlQ29udGVudHNcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhbGlnbi1ib3R0b21cIj53ZWJfYXNzZXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGEgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgW3JvdXRlckxpbmtdPVwiJy9hcHAvdG9jLycgKyBwcmVDb250ZW50LmlkZW50aWZpZXJcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBtYXQtc3ViaGVhZGluZy0xXCI+e3sgcHJlQ29udGVudC5uYW1lIH19PC9wPlxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8L21hdC1jYXJkPlxyXG4gICAgPG1hdC1jYXJkICpuZ0lmPVwidG9jQ29uZmlnPy5vdmVydmlldz8ucG9zdENvbnRlbnRzPy5lbmFibGVkICYmIGNvbnRlbnQ/LnBvc3RDb250ZW50cz8ubGVuZ3RoXCJcclxuICAgICAgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxyXG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8ucG9zdENvbnRlbnRzPy5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1iLTFcIiAqbmdGb3I9XCJsZXQgcG9zdENvbnRlbnQgb2YgY29udGVudD8ucG9zdENvbnRlbnRzXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTFcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWxpZ24tYm90dG9tXCI+d2ViX2Fzc2V0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxhIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIFtyb3V0ZXJMaW5rXT1cIicvYXBwL3RvYy8nICsgcG9zdENvbnRlbnQuaWRlbnRpZmllclwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBwb3N0Q29udGVudC5uYW1lIH19PC9wPlxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8L21hdC1jYXJkPlxyXG4gICAgPG1hdC1jYXJkICpuZ0lmPVwidG9jQ29uZmlnPy5vdmVydmlldz8uY2VydGlmaWNhdGlvbkxpc3Q/LmVuYWJsZWQgJiYgY29udGVudD8uY2VydGlmaWNhdGlvbkxpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIj5cclxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LmNlcnRpZmljYXRpb25MaXN0Py5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1iLTFcIiAqbmdGb3I9XCJsZXQgY2VydGlmaWNhdGlvbiBvZiBjb250ZW50Py5jZXJ0aWZpY2F0aW9uTGlzdFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8YSBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBbcm91dGVyTGlua109XCInL2FwcC90b2MvJyArIGNlcnRpZmljYXRpb24uaWRlbnRpZmllclwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBjZXJ0aWZpY2F0aW9uLm5hbWUgfX08L3A+XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDwvbWF0LWNhcmQ+XHJcbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJ0b2NDb25maWc/Lm92ZXJ2aWV3Py5zdHVkeU1hdGVyaWFscz8uZW5hYmxlZCAmJiBjb250ZW50Py5zdHVkeU1hdGVyaWFscz8ubGVuZ3RoXCJcclxuICAgICAgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxyXG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8uc3R1ZHlNYXRlcmlhbHM/LmRpc3BsYXlOYW1lIH19PC9oMj5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItMVwiICpuZ0Zvcj1cImxldCBzdHVkeWl0ZW0gb2YgY29udGVudD8uc3R1ZHlNYXRlcmlhbHNcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhbGlnbi1ib3R0b21cIj53ZWJfYXNzZXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGEgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgW3JvdXRlckxpbmtdPVwiJy9hcHAvdG9jLycgKyBzdHVkeWl0ZW0uaWRlbnRpZmllclwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBzdHVkeWl0ZW0ubmFtZSB9fTwvcD5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICAgIDxtYXQtY2FyZCAqbmdJZj1cIlxyXG4gICAgICAgIHRvY0NvbmZpZz8ub3ZlcnZpZXc/LnBsYXlncm91bmRSZXNvdXJjZXM/LmVuYWJsZWQgJiYgY29udGVudD8ucGxheWdyb3VuZFJlc291cmNlcz8ubGVuZ3RoXHJcbiAgICAgIFwiIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIj5cclxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LnBsYXlncm91bmRSZXNvdXJjZXM/LmRpc3BsYXlOYW1lIH19PC9oMj5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItMVwiICpuZ0Zvcj1cImxldCBwbGF5Z3JvdW5kUmVzb3VyY2Ugb2YgY29udGVudD8ucGxheWdyb3VuZFJlc291cmNlc1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8YSBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBbcm91dGVyTGlua109XCInL2FwcC90b2MvJyArIHBsYXlncm91bmRSZXNvdXJjZS5pZGVudGlmaWVyXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gbWF0LXN1YmhlYWRpbmctMVwiPnt7IHBsYXlncm91bmRSZXNvdXJjZS5uYW1lIH19PC9wPlxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8L21hdC1jYXJkPlxyXG4gICAgPG1hdC1jYXJkICpuZ0lmPVwidG9jQ29uZmlnPy5vdmVydmlldz8ua0FydGlmYWN0cz8uZW5hYmxlZCAmJiBjb250ZW50Py5rQXJ0aWZhY3RzPy5sZW5ndGhcIiBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XHJcbiAgICAgIDxoMj57eyB0b2NDb25maWc/Lm92ZXJ2aWV3Py5rQXJ0aWZhY3RzPy5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1iLTFcIiAqbmdGb3I9XCJsZXQga0FydGlmYWN0IG9mIGNvbnRlbnQ/LmtBcnRpZmFjdHNcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhbGlnbi1ib3R0b21cIj53ZWJfYXNzZXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPGEgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgW3JvdXRlckxpbmtdPVwiJy9hcHAvdG9jLycgKyBrQXJ0aWZhY3QuaWRlbnRpZmllclwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBrQXJ0aWZhY3QubmFtZSB9fTwvcD5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICAgIDxtYXQtY2FyZCAqbmdJZj1cIlxyXG4gICAgICAgIHRvY0NvbmZpZz8ub3ZlcnZpZXc/LmVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9ucz8uZW5hYmxlZCAmJlxyXG4gICAgICAgIGNvbnRlbnQ/LmVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9ucz8ubGVuZ3RoXHJcbiAgICAgIFwiIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIj5cclxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LmVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9ucz8uZGlzcGxheU5hbWUgfX08L2gyPlxyXG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtYi0xXCIgKm5nRm9yPVwibGV0IGVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9uIG9mIGNvbnRlbnQ/LmVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9uc1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFsaWduLWJvdHRvbVwiPndlYl9hc3NldDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8YSBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBbcm91dGVyTGlua109XCInL2FwcC90b2MvJyArIGVxdWl2YWxlbnRDZXJ0aWZpY2F0aW9uLmlkZW50aWZpZXJcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBtYXQtc3ViaGVhZGluZy0xXCI+e3sgZXF1aXZhbGVudENlcnRpZmljYXRpb24ubmFtZSB9fTwvcD5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICAgIDxtYXQtY2FyZCAqbmdJZj1cIlxyXG4gICAgICAgIHRvY0NvbmZpZz8ub3ZlcnZpZXc/LnNvZnR3YXJlUmVxdWlyZW1lbnRzPy5lbmFibGVkICYmIGNvbnRlbnQ/LnNvZnR3YXJlUmVxdWlyZW1lbnRzPy5sZW5ndGhcclxuICAgICAgXCIgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxyXG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8uc29mdHdhcmVSZXF1aXJlbWVudHM/LmRpc3BsYXlOYW1lIH19PC9oMj5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItMVwiICpuZ0Zvcj1cImxldCBzb2Z0d2FyZVJlcXVpcmVtZW50IG9mIGNvbnRlbnQ/LnNvZnR3YXJlUmVxdWlyZW1lbnRzXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yLTFcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWxpZ24tYm90dG9tXCI+d2ViX2Fzc2V0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxhIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIFtocmVmXT1cInNvZnR3YXJlUmVxdWlyZW1lbnQudXJsXCIgdGFyZ2V0PVwiYmxhbmtcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBtYXQtc3ViaGVhZGluZy0xXCI+e3sgc29mdHdhcmVSZXF1aXJlbWVudC50aXRsZSB9fTwvcD5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICAgIDwhLS0gU2tpbGxzIC0tPlxyXG4gICAgPG1hdC1jYXJkICpuZ0lmPVwidG9jQ29uZmlnPy5vdmVydmlldz8uc2tpbGxzPy5lbmFibGVkICYmIGNvbnRlbnQ/LnNraWxscz8ubGVuZ3RoXCJcclxuICAgICAgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbSBtYXQtYXBwLWJhY2tncm91bmRcIj5cclxuICAgICAgPGgyPnt7IHRvY0NvbmZpZz8ub3ZlcnZpZXc/LnNraWxscz8uZGlzcGxheU5hbWUgfX08L2gyPlxyXG4gICAgICA8bWF0LWNoaXAtbGlzdD5cclxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IHNraWxsIG9mIGNvbnRlbnQ/LnNraWxsc1wiPnt7IHNraWxsLm5hbWUgfX08L21hdC1jaGlwPlxyXG4gICAgICA8L21hdC1jaGlwLWxpc3Q+XHJcbiAgICA8L21hdC1jYXJkPlxyXG4gICAgPCEtLSBSZXF1aXJlbWVudHMgLS0+XHJcbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJ0b2NDb25maWc/Lm92ZXJ2aWV3Py5wcmVSZXF1aXNpdGVzPy5lbmFibGVkICYmIGNvbnRlbnQ/LnByZVJlcXVpc2l0ZXNcIiBjbGFzcz1cInVuaXQtbWV0YS1pdGVtXCI+XHJcbiAgICAgIDxoMj57eyB0b2NDb25maWc/Lm92ZXJ2aWV3Py5wcmVSZXF1aXNpdGVzPy5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xXCIgW2lubmVySFRNTF09XCJjb250ZW50Py5wcmVSZXF1aXNpdGVzXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hcmdpbi10b3Atc1wiICpuZ0lmPVwiY29udGVudD8uc29mdHdhcmVSZXF1aXJlbWVudHM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwibWF0LWgzIG1hcmdpbi1ib3R0b20teHNcIiA+U29mdHdhcmUgUmVxdWlyZW1lbnRzPC9oMz5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcXVpcmVtZW50IG9mIGNvbnRlbnQ/LnNvZnR3YXJlUmVxdWlyZW1lbnRzXCI+XHJcbiAgICAgICAgICAgIDxhICpuZ0lmPVwicmVxdWlyZW1lbnQudXJsXCIgY2xhc3M9XCJtYXJnaW4tcmlnaHQtc1wiIG1hdC1zdHJva2VkLWJ1dHRvbiB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgIFtocmVmXT1cInJlcXVpcmVtZW50LnVybFwiPlxyXG4gICAgICAgICAgICAgIHt7IHJlcXVpcmVtZW50LnRpdGxlIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPGEgbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwibWFyZ2luLXJpZ2h0LXNcIiAqbmdJZj1cIiFyZXF1aXJlbWVudD8udXJsXCI+e3sgcmVxdWlyZW1lbnQudGl0bGUgfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDwvbWF0LWNhcmQ+XHJcblxyXG4gICAgPCEtLSBUcmFpbmluZyAoTEh1YikgLS0+XHJcbiAgICA8bWF0LWNhcmQgKm5nSWY9XCJ0cmFpbmluZ0xIdWJFbmFibGVkICYmIHRyYWluaW5nTEh1YkNvdW50JCB8IGFzeW5jIGFzIHRyYWluaW5nTEh1YkNvdW50XCIgY2xhc3M9XCJ1bml0LW1ldGEtaXRlbVwiPlxyXG4gICAgICA8aDIgPlRyYWluaW5nczwvaDI+XHJcbiAgICAgIDxoNCBjbGFzcz1cIm1hdC1oNFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+e3sgdHJhaW5pbmdMSHViQ291bnQgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyIGkxOG49XCJ4IHRyYWluaW5ncyBhdmFpbGFibGVcIiAqbmdJZj1cInRyYWluaW5nTEh1YkNvdW50ID4gMVwiPlxyXG4gICAgICAgICAgdHJhaW5pbmdzIGF2YWlsYWJsZTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgaTE4bj1cIjEgdHJhaW5pbmcgYXZhaWxhYmxlXCIgKm5nSWY9XCJ0cmFpbmluZ0xIdWJDb3VudCA9PT0gMVwiPlxyXG4gICAgICAgICAgdHJhaW5pbmcgYXZhaWxhYmxlPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuXHJcbiAgICA8IS0tIFJlbGF0ZWQgVG9waWNzIC0tPlxyXG4gICAgPG1hdC1jYXJkIGNsYXNzPVwidW5pdC1tZXRhLWl0ZW1cIiAqbmdJZj1cInRvY0NvbmZpZz8ub3ZlcnZpZXc/LnRvcGljcz8uZW5hYmxlZCAmJiBjb250ZW50Py50b3BpY3M/Lmxlbmd0aFwiPlxyXG4gICAgICA8aDI+e3sgdG9jQ29uZmlnPy5vdmVydmlldz8udG9waWNzPy5kaXNwbGF5TmFtZSB9fTwvaDI+XHJcbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYmV0d2VlbiBmbGV4LXdyYXBwZWRcIj5cclxuICAgICAgICAgIDxhIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvcGljLWJ1dHRvbiB0ZXh0LXRydW5jYXRlXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRvcGljIG9mIGNvbnRlbnQ/LnRvcGljcyB8IHBpcGVMaW1pdFRvOiAodmlld01vcmVSZWxhdGVkVG9waWNzID8gMjQgOiA2KVwiIFt0aXRsZV09XCJ0b3BpYz8ubmFtZVwiXHJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIicvYXBwL2NvbmNlcHQtZ3JhcGgvJyArIHRvcGljLmlkZW50aWZpZXJcIj5cclxuICAgICAgICAgICAge3sgdG9waWM/Lm5hbWUgfX1cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudD8udG9waWNzPy5sZW5ndGggPiA2XCIgY2xhc3M9XCJ0ZXh0LXJpZ2h0IG1hcmdpbi10b3AteHNcIj5cclxuICAgICAgICAgIDxhIG1hdC1idXR0b24gKGNsaWNrKT1cInZpZXdNb3JlUmVsYXRlZFRvcGljcyA9ICF2aWV3TW9yZVJlbGF0ZWRUb3BpY3NcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdmlld01vcmVSZWxhdGVkVG9waWNzXCIgPlZpZXcgTW9yZTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ2aWV3TW9yZVJlbGF0ZWRUb3BpY3NcIiA+VmlldyBMZXNzPC9zcGFuPlxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8L21hdC1jYXJkPlxyXG4gICAgPCEtLSBBdXRob3JzIG9uIHNtYWxsIHNjcmVlbiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJibG9jayBzbTpoaWRkZW4gbWFyZ2luLWJvdHRvbS1tXCIgKm5nSWY9XCJjb250ZW50Py5jcmVhdG9yRGV0YWlscz8ubGVuZ3RoXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3JlYXRvcnNcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgYXV0aG9yczogY29udGVudD8uY3JlYXRvckRldGFpbHMsXHJcbiAgICAgICAgICB0aXRsZTogJ0FVVEhPUidcclxuICAgICAgICB9XCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIENvbnRhY3RzIG9uIHNtYWxsIHNjcmVlbiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJibG9jayBzbTpoaWRkZW4gbWFyZ2luLWJvdHRvbS1tXCIgKm5nSWY9XCJjb250ZW50Py5jcmVhdG9yQ29udGFjdHM/Lmxlbmd0aFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNyZWF0b3JzXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgIGF1dGhvcnM6IGNvbnRlbnQ/LmNyZWF0b3JDb250YWN0cyxcclxuICAgICAgICAgIHRpdGxlOiAnQ09OVEFDVCdcclxuICAgICAgICB9XCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWFyZ2luLWJvdHRvbS1tXCIgKm5nSWY9XCJvYmpLZXlzKGNvbnRlbnRQYXJlbnRzKS5sZW5ndGhcIj5cclxuICAgICAgPG1hdC1jYXJkPlxyXG4gICAgICAgIDxoMiA+VGhpcyBjb250ZW50IGlzIHBhcnQgb2Y8L2gyPlxyXG4gICAgICA8L21hdC1jYXJkPlxyXG4gICAgICA8bWF0LWFjY29yZGlvbj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2Ygb2JqS2V5cyhjb250ZW50UGFyZW50cylcIj5cclxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAge3sga2V5IH19XHJcbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1iLTFcIiAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBjb250ZW50UGFyZW50c1trZXldXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhbGlnbi1ib3R0b21cIj53ZWJfYXNzZXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8YSBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBbcm91dGVyTGlua109XCJcclxuICAgICAgICAgICAgICAgICAgY29udGVudC5zdGF0dXMgIT09ICdMaXZlJ1xyXG4gICAgICAgICAgICAgICAgICAgID8gJy9hdXRob3InICsgJy90b2MvJyArIGNvbnRlbnQuaWRlbnRpZmllclxyXG4gICAgICAgICAgICAgICAgICAgIDogJy9hcHAnICsgJy90b2MvJyArIGNvbnRlbnQuaWRlbnRpZmllclxyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1zdWJoZWFkaW5nLTFcIj57eyBjb250ZW50Lm5hbWUgfX08L3A+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBBdCBhIGdsYW5jZSBzZWN0aW9uIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJpbmZvLXNlY3Rpb25cIj5cclxuICAgIDx3cy13aWRnZXQtcGxheWVyLWJyaWVmIFtmb3JQcmV2aWV3XT1cImZvclByZXZpZXdcIiBbY29udGVudF09XCJjb250ZW50XCIgW2hhc1RvY1N0cnVjdHVyZV09XCJoYXNUb2NTdHJ1Y3R1cmVcIlxyXG4gICAgICBbdG9jU3RydWN0dXJlXT1cInRvY1N0cnVjdHVyZVwiPlxyXG4gICAgPC93cy13aWRnZXQtcGxheWVyLWJyaWVmPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY3JlYXRvcnMgbGV0LWF1dGhvcnM9XCJhdXRob3JzXCIgbGV0LXRpdGxlPVwidGl0bGVcIj5cclxuICA8bWF0LWNhcmQ+XHJcbiAgICA8aDIgKm5nSWY9XCJ0aXRsZSA9PT0gJ0FVVEhPUidcIj5BdXRob3JzPC9oMj5cclxuICAgIDxoMiAqbmdJZj1cInRpdGxlID09PSAnQ09OVEFDVCdcIj5DdXJhdG9yL0NvbnRhY3Q8L2gyPlxyXG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdXRob3Igb2YgYXV0aG9yc1wiIGNsYXNzPVwiYXV0aG9yXCI+XHJcbiAgICAgIDx3cy13aWRnZXQtdXNlci1pbWFnZSBjbGFzcz1cImF1dGhvci1pbWFnZVwiIFtpbWFnZVR5cGVdPVwiJ25hbWUtaW5pdGlhbCdcIiBbdXNlck5hbWVdPVwiYXV0aG9yLm5hbWUgfHwgJydcIlxyXG4gICAgICAgIFtlbWFpbF09XCJhdXRob3IuZW1haWxcIj48L3dzLXdpZGdldC11c2VyLWltYWdlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2lkdGgtZXhwYW5kIGZsZXggZmxleC1taWRkbGUgZmxleC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlIHRleHQtbWQgZm9udC1ub3JtYWxcIj57eyBhdXRob3IubmFtZSB9fTwvcD5cclxuICAgICAgICA8d3Mtd2lkZ2V0LWJ0bi1tYWlsLXVzZXIgKm5nSWY9XCJhc2tBdXRob3JFbmFibGVkXCIgW3dpZGdldERhdGFdPVwieyBjb250ZW50OiBjb250ZW50LCBlbWFpbHM6IFthdXRob3IuZW1haWxdIH1cIj5cclxuICAgICAgICA8L3dzLXdpZGdldC1idG4tbWFpbC11c2VyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|