@testgorilla/tgo-coding-test 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -2
- package/esm2022/index.mjs +12 -0
- package/esm2022/lib/components/code-editor/code-editor.component.mjs +335 -0
- package/esm2022/lib/components/code-editor/code-editor.service.mjs +72 -0
- package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +40 -0
- package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +11 -0
- package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +2 -0
- package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/index.mjs +16 -0
- package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +34 -0
- package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +40 -0
- package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +2 -0
- package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +2 -0
- package/esm2022/lib/components/coding-question/coding-question.component.mjs +126 -0
- package/esm2022/lib/components/coding-section/coding-section.component.mjs +188 -0
- package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +38 -0
- package/esm2022/lib/components/configurations/configurations.component.mjs +97 -0
- package/esm2022/lib/components/instructions/instructions.component.mjs +139 -0
- package/esm2022/lib/components/panel/panel.component.mjs +34 -0
- package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +169 -0
- package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +198 -0
- package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +96 -0
- package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +21 -0
- package/esm2022/lib/components/tests/test-results.component.mjs +127 -0
- package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +280 -0
- package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +476 -0
- package/esm2022/lib/config/index.mjs +2 -0
- package/esm2022/lib/config/tgo-coding-test.config.mjs +2 -0
- package/esm2022/lib/config/tgo-coding-test.provider.mjs +34 -0
- package/esm2022/lib/config/tgo-coding-test.token.mjs +14 -0
- package/esm2022/lib/models/auto-saved-data.mjs +2 -0
- package/esm2022/lib/models/code-event.mjs +2 -0
- package/esm2022/lib/models/coderunner-execution-results.mjs +2 -0
- package/esm2022/lib/models/configs.mjs +2 -0
- package/esm2022/lib/models/language-change-action.mjs +2 -0
- package/esm2022/lib/models/lat-languages.mjs +3 -0
- package/esm2022/lib/models/mixpanel-events.mjs +2 -0
- package/esm2022/lib/models/mode.mjs +2 -0
- package/esm2022/lib/models/paste-data.mjs +2 -0
- package/esm2022/lib/models/programming-language.mjs +2 -0
- package/esm2022/lib/models/test-cases.mjs +7 -0
- package/esm2022/lib/models/theme.mjs +2 -0
- package/esm2022/lib/models/translations.mjs +2 -0
- package/esm2022/lib/models/view-mode.mjs +8 -0
- package/esm2022/lib/pipes/memoize-func.pipe.mjs +39 -0
- package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +19 -0
- package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +58 -0
- package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +89 -0
- package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +490 -0
- package/esm2022/lib/services/candidate-coding-test-services/index.mjs +5 -0
- package/esm2022/lib/services/coding-test-config.service.mjs +51 -0
- package/esm2022/lib/services/configurations.service.mjs +89 -0
- package/esm2022/lib/services/lib-coding-test.service.mjs +106 -0
- package/esm2022/lib/services/storage.service.mjs +624 -0
- package/esm2022/lib/services/test-cases.service.mjs +30 -0
- package/esm2022/lib/services/theme.service.mjs +36 -0
- package/esm2022/lib/utils/additional-languages/erlang.mjs +103 -0
- package/esm2022/lib/utils/resize-element.mjs +13 -0
- package/esm2022/lib/utils/time-to-ms.util.mjs +11 -0
- package/esm2022/shared/index.mjs +5 -0
- package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +114 -0
- package/esm2022/shared/lib/components/audio-animation/index.mjs +2 -0
- package/esm2022/shared/lib/components/index.mjs +3 -0
- package/esm2022/shared/lib/components/vimeo-video/index.mjs +2 -0
- package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +101 -0
- package/esm2022/shared/lib/models/answer.mjs +2 -0
- package/esm2022/shared/lib/models/assessment.mjs +2 -0
- package/esm2022/shared/lib/models/environment.mjs +2 -0
- package/esm2022/shared/lib/models/index.mjs +9 -0
- package/esm2022/shared/lib/models/question-component.mjs +2 -0
- package/esm2022/shared/lib/models/question.mjs +2 -0
- package/esm2022/shared/lib/models/test.mjs +2 -0
- package/esm2022/shared/lib/models/translations.mjs +2 -0
- package/esm2022/shared/lib/models/window.mjs +2 -0
- package/esm2022/shared/lib/services/api/api.service.mjs +97 -0
- package/esm2022/shared/lib/services/api/mocked-api.service.mjs +131 -0
- package/esm2022/shared/lib/services/environment/environment.service.mjs +13 -0
- package/esm2022/shared/lib/services/index.mjs +10 -0
- package/esm2022/shared/lib/services/localization/languages.model.mjs +19 -0
- package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +27 -0
- package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +11 -0
- package/esm2022/shared/lib/services/media/media.service.mjs +129 -0
- package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +30 -0
- package/esm2022/shared/lib/services/theme/theme.service.mjs +24 -0
- package/esm2022/shared/test-mocks/assessment-test.mock.mjs +112 -0
- package/esm2022/shared/test-mocks/index.mjs +3 -0
- package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +39 -0
- package/esm2022/testgorilla-tgo-coding-test.mjs +5 -0
- package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
- package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
- package/{src/index.ts → index.d.ts} +2 -19
- package/lib/components/code-editor/code-editor.component.d.ts +54 -0
- package/lib/components/code-editor/code-editor.service.d.ts +12 -0
- package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
- package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
- package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
- package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
- package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
- package/lib/components/coding-question/coding-question.component.d.ts +45 -0
- package/lib/components/coding-section/coding-section.component.d.ts +52 -0
- package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
- package/lib/components/configurations/configurations.component.d.ts +40 -0
- package/lib/components/instructions/instructions.component.d.ts +48 -0
- package/lib/components/panel/panel.component.d.ts +12 -0
- package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
- package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
- package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
- package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
- package/lib/components/tests/test-results.component.d.ts +33 -0
- package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
- package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
- package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
- package/lib/config/tgo-coding-test.config.d.ts +24 -0
- package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
- package/lib/config/tgo-coding-test.token.d.ts +9 -0
- package/lib/models/auto-saved-data.d.ts +42 -0
- package/lib/models/code-event.d.ts +15 -0
- package/lib/models/coderunner-execution-results.d.ts +51 -0
- package/lib/models/configs.d.ts +15 -0
- package/lib/models/language-change-action.d.ts +4 -0
- package/lib/models/lat-languages.d.ts +8 -0
- package/lib/models/mixpanel-events.d.ts +3 -0
- package/lib/models/mode.d.ts +5 -0
- package/lib/models/paste-data.d.ts +4 -0
- package/lib/models/programming-language.d.ts +8 -0
- package/lib/models/test-cases.d.ts +67 -0
- package/lib/models/theme.d.ts +4 -0
- package/lib/models/translations.d.ts +1 -0
- package/lib/models/view-mode.d.ts +6 -0
- package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
- package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
- package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
- package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
- package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
- package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
- package/lib/services/coding-test-config.service.d.ts +38 -0
- package/lib/services/configurations.service.d.ts +37 -0
- package/lib/services/lib-coding-test.service.d.ts +69 -0
- package/lib/services/storage.service.d.ts +83 -0
- package/lib/services/test-cases.service.d.ts +12 -0
- package/lib/services/theme.service.d.ts +17 -0
- package/lib/utils/additional-languages/erlang.d.ts +37 -0
- package/lib/utils/resize-element.d.ts +2 -0
- package/lib/utils/time-to-ms.util.d.ts +1 -0
- package/package.json +18 -7
- package/shared/index.d.ts +4 -0
- package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
- package/shared/lib/components/audio-animation/index.d.ts +1 -0
- package/shared/lib/components/index.d.ts +2 -0
- package/shared/lib/components/vimeo-video/index.d.ts +1 -0
- package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
- package/shared/lib/models/answer.d.ts +17 -0
- package/shared/lib/models/assessment.d.ts +80 -0
- package/shared/lib/models/environment.d.ts +1 -0
- package/shared/lib/models/index.d.ts +8 -0
- package/shared/lib/models/question-component.d.ts +54 -0
- package/shared/lib/models/question.d.ts +102 -0
- package/shared/lib/models/test.d.ts +81 -0
- package/shared/lib/models/translations.d.ts +1 -0
- package/shared/lib/models/window.d.ts +6 -0
- package/shared/lib/services/api/api.service.d.ts +25 -0
- package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
- package/shared/lib/services/environment/environment.service.d.ts +6 -0
- package/shared/lib/services/index.d.ts +9 -0
- package/shared/lib/services/localization/languages.model.d.ts +15 -0
- package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
- package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
- package/shared/lib/services/media/media.service.d.ts +29 -0
- package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
- package/shared/lib/services/theme/theme.service.d.ts +8 -0
- package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
- package/shared/test-mocks/index.d.ts +2 -0
- package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
- package/.eslintrc.json +0 -45
- package/jest.config.ts +0 -21
- package/ng-package.json +0 -14
- package/project.json +0 -36
- package/src/lib/components/.gitkeep +0 -0
- package/src/lib/components/code-editor/code-editor.component.html +0 -10
- package/src/lib/components/code-editor/code-editor.component.scss +0 -21
- package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
- package/src/lib/components/code-editor/code-editor.component.ts +0 -369
- package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
- package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
- package/src/lib/components/code-editor/code-editor.service.ts +0 -94
- package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
- package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
- package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
- package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
- package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
- package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
- package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
- package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
- package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
- package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
- package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
- package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
- package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
- package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
- package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
- package/src/lib/components/coding-question/coding-question.component.html +0 -78
- package/src/lib/components/coding-question/coding-question.component.scss +0 -76
- package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
- package/src/lib/components/coding-question/coding-question.component.ts +0 -102
- package/src/lib/components/coding-section/coding-section.component.html +0 -82
- package/src/lib/components/coding-section/coding-section.component.scss +0 -64
- package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
- package/src/lib/components/coding-section/coding-section.component.ts +0 -187
- package/src/lib/components/coding-test.module.ts +0 -124
- package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
- package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
- package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
- package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -37
- package/src/lib/components/configurations/configurations.component.html +0 -57
- package/src/lib/components/configurations/configurations.component.scss +0 -42
- package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
- package/src/lib/components/configurations/configurations.component.ts +0 -98
- package/src/lib/components/instructions/instructions.component.html +0 -41
- package/src/lib/components/instructions/instructions.component.scss +0 -167
- package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
- package/src/lib/components/instructions/instructions.component.ts +0 -138
- package/src/lib/components/panel/panel.component.html +0 -19
- package/src/lib/components/panel/panel.component.scss +0 -41
- package/src/lib/components/panel/panel.component.spec.ts +0 -40
- package/src/lib/components/panel/panel.component.ts +0 -34
- package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
- package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
- package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
- package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -155
- package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
- package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
- package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
- package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -205
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -102
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -18
- package/src/lib/components/tests/test-results.component.html +0 -119
- package/src/lib/components/tests/test-results.component.scss +0 -189
- package/src/lib/components/tests/test-results.component.spec.ts +0 -140
- package/src/lib/components/tests/test-results.component.ts +0 -98
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -279
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -575
- package/src/lib/config/tgo-coding-test.config.ts +0 -26
- package/src/lib/config/tgo-coding-test.token.ts +0 -21
- package/src/lib/models/.gitkeep +0 -0
- package/src/lib/models/auto-saved-data.ts +0 -51
- package/src/lib/models/code-event.ts +0 -17
- package/src/lib/models/coderunner-execution-results.ts +0 -58
- package/src/lib/models/coding-lib.mocks.ts +0 -246
- package/src/lib/models/configs.ts +0 -18
- package/src/lib/models/language-change-action.ts +0 -4
- package/src/lib/models/lat-languages.ts +0 -12
- package/src/lib/models/mixpanel-events.ts +0 -3
- package/src/lib/models/mode.ts +0 -5
- package/src/lib/models/paste-data.ts +0 -4
- package/src/lib/models/programming-language.ts +0 -9
- package/src/lib/models/test-cases.ts +0 -74
- package/src/lib/models/theme.ts +0 -5
- package/src/lib/models/translations.ts +0 -1
- package/src/lib/models/view-mode.ts +0 -6
- package/src/lib/services/.gitkeep +0 -0
- package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
- package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
- package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
- package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
- package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
- package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
- package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
- package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
- package/src/lib/services/coding-test-config.service.ts +0 -48
- package/src/lib/services/configurations.service.mocks.ts +0 -77
- package/src/lib/services/configurations.service.spec.ts +0 -79
- package/src/lib/services/configurations.service.ts +0 -111
- package/src/lib/services/index.ts +0 -0
- package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
- package/src/lib/services/lib-coding-test.service.ts +0 -157
- package/src/lib/services/local-storage.service.mocks.ts +0 -22
- package/src/lib/services/storage.service.spec.ts +0 -1120
- package/src/lib/services/storage.service.ts +0 -729
- package/src/lib/services/test-cases.service.spec.ts +0 -53
- package/src/lib/services/test-cases.service.ts +0 -29
- package/src/lib/services/theme.service.spec.ts +0 -76
- package/src/lib/services/theme.service.ts +0 -34
- package/src/lib/styles/mixins.scss +0 -86
- package/src/lib/styles/styles.scss +0 -112
- package/src/lib/styles/variables.scss +0 -105
- package/src/lib/utils/.gitkeep +0 -0
- package/src/lib/utils/additional-languages/erlang.ts +0 -115
- package/src/lib/utils/resize-element.ts +0 -15
- package/src/lib/utils/time-to-ms.util.ts +0 -10
- package/src/test-setup.ts +0 -1
- package/tsconfig.json +0 -16
- package/tsconfig.lib.json +0 -12
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -13
- /package/{src/assets → assets}/i18n/en.json +0 -0
- /package/{src/lib/components/code-editor/helpers/index.ts → lib/components/code-editor/helpers/index.d.ts} +0 -0
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { Component, computed, EventEmitter, HostBinding, inject, Input, Output, signal, ViewEncapsulation, } from '@angular/core';
|
|
4
|
+
import { ActivatedRoute, RouterModule } from '@angular/router';
|
|
5
|
+
import { translate, TRANSLOCO_SCOPE, TranslocoModule, TranslocoService } from '@ngneat/transloco';
|
|
6
|
+
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
7
|
+
import { ApiService, EnvironmentService, getAvailableLangs, MixpanelService, ThemeService, TranslocoLazyModuleUtils, } from '../../../shared/index.mjs';
|
|
8
|
+
import { ConfirmDialogComponent, DialogComponentModule, DialogService, SnackbarComponentModule, } from '@testgorilla/tgo-ui';
|
|
9
|
+
import { GuidedTourModule, GuidedTourService } from 'ngx-guided-tour';
|
|
10
|
+
import { interval, Observable, Subscription } from 'rxjs';
|
|
11
|
+
import { switchMap, take, tap } from 'rxjs/operators';
|
|
12
|
+
import { ROOT_TRANSLATIONS_SCOPE } from '../../models/translations';
|
|
13
|
+
import { ViewMode } from '../../models/view-mode';
|
|
14
|
+
import { CandidatureApiService, CoderunnerApiService, CodingTestService, CodingTestTourService, } from '../../services/candidate-coding-test-services';
|
|
15
|
+
import { CodingTestConfigService } from '../../services/coding-test-config.service';
|
|
16
|
+
import { LibCodingTestService } from '../../services/lib-coding-test.service';
|
|
17
|
+
import { TgoCodingTestComponent } from '../tgo-coding-test/tgo-coding-test.component';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "@ngneat/transloco";
|
|
20
|
+
import * as i2 from "ngx-guided-tour";
|
|
21
|
+
import * as i3 from "@angular/common";
|
|
22
|
+
let TgoCodingTestCandidateViewComponent = class TgoCodingTestCandidateViewComponent {
|
|
23
|
+
dialogService = inject(DialogService);
|
|
24
|
+
translationScope = inject(TRANSLOCO_SCOPE);
|
|
25
|
+
candidatureApiService = inject(CandidatureApiService);
|
|
26
|
+
codingTestTourService = inject(CodingTestTourService);
|
|
27
|
+
libCodingTestService = inject(LibCodingTestService);
|
|
28
|
+
environmentService = inject(EnvironmentService);
|
|
29
|
+
codingTestService = inject(CodingTestService);
|
|
30
|
+
translocoService = inject(TranslocoService);
|
|
31
|
+
themeService = inject(ThemeService);
|
|
32
|
+
apiService = inject(ApiService);
|
|
33
|
+
route = inject(ActivatedRoute);
|
|
34
|
+
codingTestConfigService = inject(CodingTestConfigService);
|
|
35
|
+
assessment;
|
|
36
|
+
question;
|
|
37
|
+
test;
|
|
38
|
+
expirationObservable;
|
|
39
|
+
completeObservable;
|
|
40
|
+
isDemo;
|
|
41
|
+
validationStatusChanged = new EventEmitter(); // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
42
|
+
antiCheatingConfigurationChanged = new EventEmitter();
|
|
43
|
+
fullscreenChanged = new EventEmitter();
|
|
44
|
+
themeChanged = new EventEmitter();
|
|
45
|
+
codingFullscreenChanged = new EventEmitter();
|
|
46
|
+
navigationButtonStateChanged = new EventEmitter();
|
|
47
|
+
configurationStateChanged = new EventEmitter();
|
|
48
|
+
submissionStateChanged = new EventEmitter();
|
|
49
|
+
loadingStateChanged = new EventEmitter();
|
|
50
|
+
hostClass = 'micro-question-code';
|
|
51
|
+
subscription = new Subscription();
|
|
52
|
+
initCode = '';
|
|
53
|
+
viewModes = ViewMode;
|
|
54
|
+
mode = "running" /* Modes.Running */;
|
|
55
|
+
companyColor = this.themeService.getCompanyColor();
|
|
56
|
+
initCodesMap = new Map();
|
|
57
|
+
languages = signal([]);
|
|
58
|
+
codingLibTranslations = signal({});
|
|
59
|
+
rawLanguages = [];
|
|
60
|
+
currentLanguage;
|
|
61
|
+
isSQL = false;
|
|
62
|
+
isLAT = true;
|
|
63
|
+
code = '';
|
|
64
|
+
codingTestResults;
|
|
65
|
+
testResultsLoading = computed(() => this.codingTestService.isTestResultsLoading());
|
|
66
|
+
exampleTestCases = [];
|
|
67
|
+
activeGuidedTourId$ = this.codingTestTourService.activeGuidedTourId$;
|
|
68
|
+
firstTestRunComplete = false;
|
|
69
|
+
canopyUiTheme = 'light';
|
|
70
|
+
wasTourShown = false;
|
|
71
|
+
ngOnDestroy() {
|
|
72
|
+
if (!this.test?.is_preview_mode) {
|
|
73
|
+
this.antiCheatingConfigurationChanged.emit({
|
|
74
|
+
fullscreenTracking: false,
|
|
75
|
+
mouseEventTracking: false,
|
|
76
|
+
snapshotsTracking: false,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
this.subscription.unsubscribe();
|
|
80
|
+
}
|
|
81
|
+
ngOnInit() {
|
|
82
|
+
this.setupState();
|
|
83
|
+
this.handleGuidedTour();
|
|
84
|
+
if (!this.test?.is_preview_mode) {
|
|
85
|
+
this.antiCheatingConfigurationChanged.emit({
|
|
86
|
+
fullscreenTracking: true,
|
|
87
|
+
mouseEventTracking: true,
|
|
88
|
+
snapshotsTracking: true,
|
|
89
|
+
});
|
|
90
|
+
this.setupAutosaveEvent();
|
|
91
|
+
}
|
|
92
|
+
const isNextQuestionDisabled = !this.test?.is_preview_mode;
|
|
93
|
+
this.configurationStateChanged.emit({
|
|
94
|
+
isSavingQuestionDisabled: isNextQuestionDisabled,
|
|
95
|
+
});
|
|
96
|
+
this.navigationButtonStateChanged.emit({
|
|
97
|
+
disabled: isNextQuestionDisabled,
|
|
98
|
+
});
|
|
99
|
+
this.subscription.add(this.expirationObservable?.subscribe(() => {
|
|
100
|
+
this.clearSavedCode();
|
|
101
|
+
if (!this.test?.is_preview_mode) {
|
|
102
|
+
this.clearLastLanguageSelected();
|
|
103
|
+
this.submitCode();
|
|
104
|
+
this.enableNextButton();
|
|
105
|
+
}
|
|
106
|
+
}));
|
|
107
|
+
this.subscription.add(this.completeObservable?.subscribe(() => {
|
|
108
|
+
if (!this.test?.is_preview_mode) {
|
|
109
|
+
this.openSaveDialog();
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
this.clearSavedCode();
|
|
113
|
+
}
|
|
114
|
+
}));
|
|
115
|
+
if (!this.isSQL) {
|
|
116
|
+
this.loadAvailableLanguages();
|
|
117
|
+
this.setTestCases();
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.setSqlTestCases();
|
|
121
|
+
this.setSqlLang();
|
|
122
|
+
this.setSqlInitCode();
|
|
123
|
+
this.loadingStateChanged.emit(false);
|
|
124
|
+
}
|
|
125
|
+
this.setListeners();
|
|
126
|
+
}
|
|
127
|
+
openSaveDialog() {
|
|
128
|
+
const dialogRef = this.dialogService.open(ConfirmDialogComponent, {
|
|
129
|
+
applicationTheme: this.canopyUiTheme,
|
|
130
|
+
size: 'small',
|
|
131
|
+
panelClass: '',
|
|
132
|
+
extraData: {
|
|
133
|
+
title: translate('CODING_QUESTION.MODALS.FINISH_TEST.TITLE') ?? '',
|
|
134
|
+
message: translate('CODING_QUESTION.MODALS.FINISH_TEST.MESSAGE') ?? '',
|
|
135
|
+
confirmButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.SUBMIT') ?? '',
|
|
136
|
+
cancelButtonText: translate('CODING_QUESTION.MODALS.FINISH_TEST.CANCEL') ?? '',
|
|
137
|
+
color: this.companyColor,
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
dialogRef.afterClosed().subscribe(result => {
|
|
141
|
+
if (!result) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.clearSavedCode();
|
|
145
|
+
this.clearLastLanguageSelected();
|
|
146
|
+
this.submitCode();
|
|
147
|
+
this.enableNextButton();
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
clearLastLanguageSelected() {
|
|
151
|
+
this.libCodingTestService.clearLastLanguageSelected();
|
|
152
|
+
}
|
|
153
|
+
clearSavedCode() {
|
|
154
|
+
this.libCodingTestService.triggerClearSavedCode();
|
|
155
|
+
}
|
|
156
|
+
submitCode() {
|
|
157
|
+
if (this.code) {
|
|
158
|
+
this.submissionStateChanged?.emit({
|
|
159
|
+
text: this.code,
|
|
160
|
+
language: this.getVersionedLanguage(),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
getVersionedLanguage() {
|
|
165
|
+
const language = this.currentLanguage;
|
|
166
|
+
if (!language) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (this.isSQL) {
|
|
170
|
+
return "sqlite3-3.36.0" /* ProgrammingLanguageVersioned.SQLite */;
|
|
171
|
+
}
|
|
172
|
+
return `${language}-${this.libCodingTestService.getVersion()}`;
|
|
173
|
+
}
|
|
174
|
+
enableNextButton() {
|
|
175
|
+
this.configurationStateChanged.emit({
|
|
176
|
+
isSavingQuestionDisabled: false,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
languageChange(selectedLangName) {
|
|
180
|
+
const selectedLang = this.rawLanguages.filter(language => language.name === selectedLangName)[0];
|
|
181
|
+
this.codingTestService.handleLanguageChangeModal(this.question.id, selectedLang, this.canopyUiTheme, this.companyColor);
|
|
182
|
+
}
|
|
183
|
+
updateCode(code) {
|
|
184
|
+
this.code = code;
|
|
185
|
+
}
|
|
186
|
+
runTest() {
|
|
187
|
+
this.codingTestService.runTest(this.question.id, this.code, this.isLAT, this.isSQL, false, !!this.test.is_preview_mode, this.question.question_id, this.test.id, this.test);
|
|
188
|
+
if (!this.firstTestRunComplete) {
|
|
189
|
+
this.navigationButtonStateChanged.emit({
|
|
190
|
+
disabled: false,
|
|
191
|
+
});
|
|
192
|
+
this.firstTestRunComplete = true;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
screenshotPaste(event) {
|
|
196
|
+
if (event.type !== 'paste') {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this.codingTestService
|
|
200
|
+
.sendCopypasteEvent$(this.code, event.data, this.question.id)
|
|
201
|
+
.pipe(take(1))
|
|
202
|
+
.subscribe();
|
|
203
|
+
}
|
|
204
|
+
setupAutosaveEvent() {
|
|
205
|
+
this.subscription.add(interval(5000)
|
|
206
|
+
.pipe(untilDestroyed(this), switchMap(() => this.codingTestService.sendAutosaveEvent$(this.code, this.question.id)))
|
|
207
|
+
.subscribe());
|
|
208
|
+
}
|
|
209
|
+
setupState() {
|
|
210
|
+
this.setApiParams();
|
|
211
|
+
this.setCodingLibTranslations();
|
|
212
|
+
this.setIsSQL();
|
|
213
|
+
this.setIsLat();
|
|
214
|
+
this.setMode();
|
|
215
|
+
}
|
|
216
|
+
setCodingLibTranslations() {
|
|
217
|
+
// TRANSLOCO_SCOPE is passed here to make sure that translation scope is resolved by the library
|
|
218
|
+
this.translocoService
|
|
219
|
+
.selectTranslateObject(`CODING_LIB`, {}, this.translationScope)
|
|
220
|
+
.pipe(take(1))
|
|
221
|
+
.subscribe(translations => {
|
|
222
|
+
this.codingLibTranslations.set(translations);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
setApiParams() {
|
|
226
|
+
const invitationUuid = this.route.snapshot.firstChild?.url[0].path || '';
|
|
227
|
+
const contentLanguage = this.assessment?.locale ?? 'en';
|
|
228
|
+
const apiUrl = this.codingTestConfigService.getApiUrl();
|
|
229
|
+
this.apiService.setParams(invitationUuid, contentLanguage, ROOT_TRANSLATIONS_SCOPE, apiUrl);
|
|
230
|
+
}
|
|
231
|
+
setIsSQL() {
|
|
232
|
+
this.isSQL = this.question?.context.code_language === 'sql';
|
|
233
|
+
this.codingTestService.setIsSQLTest(this.isSQL);
|
|
234
|
+
}
|
|
235
|
+
setSqlInitCode() {
|
|
236
|
+
this.initCode = this.question?.context.initial_code;
|
|
237
|
+
}
|
|
238
|
+
setSqlLang() {
|
|
239
|
+
const sqlLanguage = this.question?.context.code_language;
|
|
240
|
+
this.languages.set([
|
|
241
|
+
{
|
|
242
|
+
label: 'nonLAT',
|
|
243
|
+
value: sqlLanguage,
|
|
244
|
+
},
|
|
245
|
+
]);
|
|
246
|
+
this.currentLanguage = sqlLanguage;
|
|
247
|
+
}
|
|
248
|
+
setIsLat() {
|
|
249
|
+
// todo: add response field if possible ?
|
|
250
|
+
// this.isLAT = this.test?.is_language_agnostic_test ?? false;
|
|
251
|
+
this.isLAT = !this.isSQL;
|
|
252
|
+
}
|
|
253
|
+
setMode() {
|
|
254
|
+
this.mode = this.test?.is_preview_mode ? "preview" /* Modes.Preview */ : "running" /* Modes.Running */;
|
|
255
|
+
}
|
|
256
|
+
listenGuidedTourStart() {
|
|
257
|
+
this.libCodingTestService.startGuidedTour$.pipe(untilDestroyed(this)).subscribe(() => {
|
|
258
|
+
const guidedTourMode = this.test?.is_preview_mode
|
|
259
|
+
? "practice" /* CodingTestTourMode.PracticeQuestion */
|
|
260
|
+
: "real" /* CodingTestTourMode.RealQuestion */;
|
|
261
|
+
this.codingTestTourService.init(guidedTourMode);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
handleGuidedTour() {
|
|
265
|
+
if (!this.environmentService.isMobile && !this.wasTourShown && this.test?.is_preview_mode) {
|
|
266
|
+
const delayForGuidedTour = 1500;
|
|
267
|
+
setTimeout(() => {
|
|
268
|
+
this.codingTestTourService.init("practice" /* CodingTestTourMode.PracticeQuestion */);
|
|
269
|
+
this.wasTourShown = true;
|
|
270
|
+
}, delayForGuidedTour);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
getAllLanguages() {
|
|
274
|
+
const boilerplates = this.question?.context.boilerplates ?? [];
|
|
275
|
+
return boilerplates.map(({ programming_language }) => programming_language);
|
|
276
|
+
}
|
|
277
|
+
loadAvailableLanguages() {
|
|
278
|
+
this.candidatureApiService
|
|
279
|
+
.getAvailableLanguages$()
|
|
280
|
+
.pipe(take(1), tap(availableLangsIds => {
|
|
281
|
+
const languages = this.getAllLanguages();
|
|
282
|
+
const areAllLangsAvailable = availableLangsIds.length === 0;
|
|
283
|
+
this.rawLanguages = areAllLangsAvailable
|
|
284
|
+
? languages
|
|
285
|
+
: languages.filter(({ id }) => id !== undefined && availableLangsIds.includes(id));
|
|
286
|
+
this.languages.set(this.rawLanguages.map(language => ({
|
|
287
|
+
label: typeof language.name === 'string' && language.name.length > 0
|
|
288
|
+
? language.name.charAt(0).toUpperCase() + language.name.slice(1)
|
|
289
|
+
: 'Unknown',
|
|
290
|
+
value: language.name,
|
|
291
|
+
version: language.version,
|
|
292
|
+
})));
|
|
293
|
+
}), tap(() => {
|
|
294
|
+
this.loadingStateChanged.emit(false);
|
|
295
|
+
}), tap(() => {
|
|
296
|
+
const boilerplates = this.question?.context.boilerplates ?? [];
|
|
297
|
+
boilerplates.forEach(boilerplate => {
|
|
298
|
+
if (boilerplate.programming_language.name) {
|
|
299
|
+
this.initCodesMap.set(boilerplate.programming_language.name, boilerplate.code);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}), switchMap(() => this.libCodingTestService.currentLanguage$), tap((language) => {
|
|
303
|
+
const currentLang = this.rawLanguages.find(x => x.name === language);
|
|
304
|
+
if (currentLang) {
|
|
305
|
+
this.codingTestService.setCurrentLanguageLAT(currentLang);
|
|
306
|
+
}
|
|
307
|
+
const initCode = this.initCodesMap.get(language);
|
|
308
|
+
if (initCode) {
|
|
309
|
+
this.initCode = initCode;
|
|
310
|
+
this.updateCode(this.initCode);
|
|
311
|
+
}
|
|
312
|
+
}))
|
|
313
|
+
.subscribe(() => {
|
|
314
|
+
this.libCodingTestService.setBoilerplateLoadingStatus(false);
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
listenThemeChange() {
|
|
318
|
+
this.libCodingTestService.themeChanged$.pipe(untilDestroyed(this)).subscribe(theme => {
|
|
319
|
+
this.canopyUiTheme = theme === "theme-dark" /* Themes.Dark */ ? 'dark' : 'light';
|
|
320
|
+
this.themeChanged.emit(this.canopyUiTheme);
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
listenFullscreenChange() {
|
|
324
|
+
this.libCodingTestService.isFullscreen$
|
|
325
|
+
.pipe(untilDestroyed(this))
|
|
326
|
+
.subscribe(isFullscreen => this.fullscreenChanged.emit(isFullscreen));
|
|
327
|
+
}
|
|
328
|
+
listenDeleteCustomTestCases() {
|
|
329
|
+
this.codingTestService
|
|
330
|
+
.listenDeleteCustomTestCases()
|
|
331
|
+
.pipe(untilDestroyed(this))
|
|
332
|
+
.subscribe(({ index }) => {
|
|
333
|
+
this.codingTestService.handleDeleteTestCaseModal(index, this.canopyUiTheme, this.companyColor);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
listenLanguageChange() {
|
|
337
|
+
this.libCodingTestService.currentLanguage$
|
|
338
|
+
.pipe(untilDestroyed(this))
|
|
339
|
+
.subscribe((language) => {
|
|
340
|
+
this.currentLanguage = language;
|
|
341
|
+
const code = this.initCodesMap.get(language);
|
|
342
|
+
if (code) {
|
|
343
|
+
this.initCode = code;
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
this.initCode = '';
|
|
347
|
+
console.warn(`No initial code found for language: ${language}`);
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
listenResetCode() {
|
|
352
|
+
this.codingTestService
|
|
353
|
+
.listenCodingTestChanges()
|
|
354
|
+
.pipe(untilDestroyed(this))
|
|
355
|
+
.subscribe(() => {
|
|
356
|
+
this.codingTestService.handleResetCodeModal(this.canopyUiTheme, this.companyColor);
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
listenTestResults() {
|
|
360
|
+
this.codingTestService.codingTestResults$.pipe(untilDestroyed(this)).subscribe(results => {
|
|
361
|
+
this.codingTestResults = results;
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
setSqlTestCases() {
|
|
365
|
+
const testCases = this.question?.context?.sql_testcases.map(testCase => ({
|
|
366
|
+
...testCase,
|
|
367
|
+
post_sql: testCase.post_sql || '',
|
|
368
|
+
initial_sql: this.question?.context?.initial_sql || '',
|
|
369
|
+
}));
|
|
370
|
+
this.codingTestService.setSqlTestCases(testCases);
|
|
371
|
+
this.exampleTestCases = testCases.map(this.codingTestService.transformToExampleSQLTestCase);
|
|
372
|
+
}
|
|
373
|
+
setTestCases() {
|
|
374
|
+
this.exampleTestCases = this.question?.context?.testcases?.map(this.codingTestService.transformToExampleLATtestCase);
|
|
375
|
+
}
|
|
376
|
+
setListeners() {
|
|
377
|
+
this.listenGuidedTourStart();
|
|
378
|
+
this.listenFullscreenChange();
|
|
379
|
+
this.listenThemeChange();
|
|
380
|
+
this.listenResetCode();
|
|
381
|
+
this.codingTestService.trackConfigChanged(!!this.test?.is_preview_mode);
|
|
382
|
+
this.listenTestResults();
|
|
383
|
+
if (this.isLAT) {
|
|
384
|
+
this.listenDeleteCustomTestCases();
|
|
385
|
+
this.listenLanguageChange();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TgoCodingTestCandidateViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
389
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TgoCodingTestCandidateViewComponent, isStandalone: true, selector: "tgo-coding-test-candidate-view", inputs: { assessment: "assessment", question: "question", test: "test", expirationObservable: "expirationObservable", completeObservable: "completeObservable", isDemo: "isDemo" }, outputs: { validationStatusChanged: "validationStatusChanged", antiCheatingConfigurationChanged: "antiCheatingConfigurationChanged", fullscreenChanged: "fullscreenChanged", themeChanged: "themeChanged", codingFullscreenChanged: "codingFullscreenChanged", navigationButtonStateChanged: "navigationButtonStateChanged", configurationStateChanged: "configurationStateChanged", submissionStateChanged: "submissionStateChanged", loadingStateChanged: "loadingStateChanged" }, host: { properties: { "class": "this.hostClass" } }, providers: [
|
|
390
|
+
TranslocoLazyModuleUtils.getScopeProvider('tgo-coding-test', getAvailableLangs(), ROOT_TRANSLATIONS_SCOPE, (lang) => {
|
|
391
|
+
// Fetch from app assets; demo app copies the library assets to
|
|
392
|
+
// /assets/tgo-coding-test via project.json.
|
|
393
|
+
const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;
|
|
394
|
+
return fetch(url).then(res => res.json());
|
|
395
|
+
}),
|
|
396
|
+
EnvironmentService,
|
|
397
|
+
CoderunnerApiService,
|
|
398
|
+
CodingTestService,
|
|
399
|
+
CodingTestTourService,
|
|
400
|
+
GuidedTourService,
|
|
401
|
+
ThemeService,
|
|
402
|
+
CandidatureApiService,
|
|
403
|
+
MixpanelService,
|
|
404
|
+
// use MockedApiService for local demo ONLY
|
|
405
|
+
ApiService, //{ provide: ApiService, useClass: MockedApiService },
|
|
406
|
+
], ngImport: i0, template: "<ng-container *transloco=\"let t; read: 'CODING_QUESTION'\">\n @if (languages()?.length && codingLibTranslations()) {\n <tgo-coding-test\n class=\"coding-lib\"\n [assessmentId]=\"assessment!.uuid!\"\n [questionId]=\"question!.question_id!\"\n [isLAT]=\"isLAT\"\n [canAddCustomTestCases]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [languages]=\"languages()\"\n [initCode]=\"initCode\"\n [mode]=\"mode\"\n [viewMode]=\"viewModes.Full\"\n [loading]=\"testResultsLoading()\"\n [companyColor]=\"companyColor\"\n [questionText]=\"question.text\"\n [testCasesStatus]=\"codingTestResults?.resume\"\n [runTestResponse]=\"codingTestResults?.listResponse!\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"canopyUiTheme\"\n [translations]=\"codingLibTranslations()\"\n (codeChange)=\"updateCode($event)\"\n (runTestClick)=\"runTest()\"\n (languageChange)=\"languageChange($event)\"\n (pasteEvent)=\"screenshotPaste($event)\"\n >\n </tgo-coding-test>\n }\n</ng-container>\n\n<ngx-guided-tour\n [ngClass]=\"activeGuidedTourId$ | async\"\n [ngStyle]=\"{ '--company-color': companyColor }\"\n [class.dark]=\"canopyUiTheme === 'dark'\"\n></ngx-guided-tour>\n\n", styles: ["body.tour-open{overflow:hidden}ngx-guided-tour .guided-tour-user-input-mask{z-index:1081}ngx-guided-tour .guided-tour-spotlight-overlay{z-index:1082}ngx-guided-tour .tour-orb{z-index:1079;background-color:#625aff;box-shadow:0 0 .3rem .1rem #625aff}ngx-guided-tour .tour-orb .tour-orb-ring:after{border:1rem solid #625aff;box-shadow:0 0 .1rem .1rem #625aff}ngx-guided-tour .tour-step{z-index:1083}ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-bottom:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-top .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-top:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-left:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step.tour-right .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-right:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step .tour-block{color:#231f1f;background-color:#fff;box-shadow:0 .4rem .6rem #4c4c4c}ngx-guided-tour .tour-step .tour-buttons button.skip-button{color:#5e5e5e}ngx-guided-tour .tour-step .tour-buttons .back-button{color:#007bff}ngx-guided-tour .tour-step .tour-buttons .next-button{background-color:#007bff;color:#fff}ngx-guided-tour .tour-step .tour-buttons .next-button:hover{background-color:#0069d9;color:#fff}.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}body.tour-open ngx-guided-tour{--guided-tour-background-color: #ffffff;--guided-tour-text-color: #000000}body.tour-open ngx-guided-tour.dark{--guided-tour-background-color: #2d2d2d;--guided-tour-text-color: #ffffff}body.tour-open ngx-guided-tour .tour-step.hidden{display:none}body.tour-open ngx-guided-tour .tour-step h2.tour-title,body.tour-open ngx-guided-tour .tour-step h3.tour-title{font-size:20px;padding-bottom:0;margin-top:0}body.tour-open ngx-guided-tour .tour-step .tour-block{color:var(--guided-tour-text-color);background-color:var(--guided-tour-background-color);border-radius:5px;padding:37px;box-shadow:0 0 13px #bbb}body.tour-open ngx-guided-tour .tour-step .tour-buttons button{text-align:center;border-radius:5px;width:45%;height:48px;padding:0;font-weight:600}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.skip-button{background:#e2e2e2}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.next-button{color:#fff;background-color:#46a997}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.back-button{display:none}body.tour-open ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before{border-bottom:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-top .tour-arrow:before{border-top:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-left .tour-arrow:before{border-left:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-right .tour-arrow:before{border-right:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before{border-bottom-color:var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step .tour-content{text-align:center;font-size:14px}body.tour-open ngx-guided-tour .tour-step h2.tour-title{text-align:center}body.tour-open ngx-guided-tour .tour-step h3.tour-title{text-align:center}body.tour-open ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #0000004d,0 0 1.5rem #00000026;border-radius:5px}body.tour-open ngx-guided-tour.lat-coding-tour h3.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour h2.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{text-align:left}body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{padding-bottom:24px}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.skip-button{background:#fff;border:1px solid #000000}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.next-button{background-color:var(--company-color, #D410AA)}body.tour-open[theme=dark] ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.tour-open[theme=dark] ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body.theme-dark ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.theme-dark ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body .tgo-test-code{display:flex;flex:1;justify-content:center}body .tgo-test-code tgo-question,body .tgo-test-code tgo-micro-test-library-shell-container{display:flex}body[theme=dark] .micro-question-code .coding-lib ui-dropdown .mat-mdc-text-field-wrapper,body[theme=dark] .micro-question-code .coding-lib ui-field .mat-mdc-text-field-wrapper{background-color:transparent}.micro-question-code{display:flex}.micro-question-code .coding-lib{display:block;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: DialogComponentModule }, { kind: "ngmodule", type: SnackbarComponentModule }, { kind: "component", type: TgoCodingTestComponent, selector: "tgo-coding-test[languages]", inputs: ["initCode", "snapshot", "functionParams", "functionName", "returnType", "isLAT", "isSQL", "shouldGenerateInitCode", "canAddCustomTestCases", "selectedProgrammingLanguage", "languages", "isReadonly", "autoHeight", "translations", "questionText", "mode", "assessmentId", "companyColor", "testCasesStatus", "loading", "runTestResponse", "viewMode", "exampleTestCases", "hideTestCases", "applicationTheme", "questionId"], outputs: ["pasteEvent", "codeChange", "runTestClick", "languageChange"] }, { kind: "ngmodule", type: GuidedTourModule }, { kind: "component", type: i2.GuidedTourComponent, selector: "ngx-guided-tour", inputs: ["topOfPageAdjustment", "tourStepWidth", "minimalTourStepWidth", "skipText", "nextText", "doneText", "closeText", "backText", "progressIndicatorLocation", "progressIndicator"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
407
|
+
};
|
|
408
|
+
TgoCodingTestCandidateViewComponent = __decorate([
|
|
409
|
+
UntilDestroy()
|
|
410
|
+
], TgoCodingTestCandidateViewComponent);
|
|
411
|
+
export { TgoCodingTestCandidateViewComponent };
|
|
412
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TgoCodingTestCandidateViewComponent, decorators: [{
|
|
413
|
+
type: Component,
|
|
414
|
+
args: [{ standalone: true, selector: 'tgo-coding-test-candidate-view', encapsulation: ViewEncapsulation.None, imports: [
|
|
415
|
+
TranslocoModule,
|
|
416
|
+
DialogComponentModule,
|
|
417
|
+
SnackbarComponentModule,
|
|
418
|
+
TgoCodingTestComponent,
|
|
419
|
+
GuidedTourModule,
|
|
420
|
+
CommonModule,
|
|
421
|
+
RouterModule,
|
|
422
|
+
], providers: [
|
|
423
|
+
TranslocoLazyModuleUtils.getScopeProvider('tgo-coding-test', getAvailableLangs(), ROOT_TRANSLATIONS_SCOPE, (lang) => {
|
|
424
|
+
// Fetch from app assets; demo app copies the library assets to
|
|
425
|
+
// /assets/tgo-coding-test via project.json.
|
|
426
|
+
const url = new URL(`assets/tgo-coding-test/i18n/${lang}.json`, document.baseURI).href;
|
|
427
|
+
return fetch(url).then(res => res.json());
|
|
428
|
+
}),
|
|
429
|
+
EnvironmentService,
|
|
430
|
+
CoderunnerApiService,
|
|
431
|
+
CodingTestService,
|
|
432
|
+
CodingTestTourService,
|
|
433
|
+
GuidedTourService,
|
|
434
|
+
ThemeService,
|
|
435
|
+
CandidatureApiService,
|
|
436
|
+
MixpanelService,
|
|
437
|
+
// use MockedApiService for local demo ONLY
|
|
438
|
+
ApiService, //{ provide: ApiService, useClass: MockedApiService },
|
|
439
|
+
], template: "<ng-container *transloco=\"let t; read: 'CODING_QUESTION'\">\n @if (languages()?.length && codingLibTranslations()) {\n <tgo-coding-test\n class=\"coding-lib\"\n [assessmentId]=\"assessment!.uuid!\"\n [questionId]=\"question!.question_id!\"\n [isLAT]=\"isLAT\"\n [canAddCustomTestCases]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [languages]=\"languages()\"\n [initCode]=\"initCode\"\n [mode]=\"mode\"\n [viewMode]=\"viewModes.Full\"\n [loading]=\"testResultsLoading()\"\n [companyColor]=\"companyColor\"\n [questionText]=\"question.text\"\n [testCasesStatus]=\"codingTestResults?.resume\"\n [runTestResponse]=\"codingTestResults?.listResponse!\"\n [exampleTestCases]=\"exampleTestCases\"\n [applicationTheme]=\"canopyUiTheme\"\n [translations]=\"codingLibTranslations()\"\n (codeChange)=\"updateCode($event)\"\n (runTestClick)=\"runTest()\"\n (languageChange)=\"languageChange($event)\"\n (pasteEvent)=\"screenshotPaste($event)\"\n >\n </tgo-coding-test>\n }\n</ng-container>\n\n<ngx-guided-tour\n [ngClass]=\"activeGuidedTourId$ | async\"\n [ngStyle]=\"{ '--company-color': companyColor }\"\n [class.dark]=\"canopyUiTheme === 'dark'\"\n></ngx-guided-tour>\n\n", styles: ["body.tour-open{overflow:hidden}ngx-guided-tour .guided-tour-user-input-mask{z-index:1081}ngx-guided-tour .guided-tour-spotlight-overlay{z-index:1082}ngx-guided-tour .tour-orb{z-index:1079;background-color:#625aff;box-shadow:0 0 .3rem .1rem #625aff}ngx-guided-tour .tour-orb .tour-orb-ring:after{border:1rem solid #625aff;box-shadow:0 0 .1rem .1rem #625aff}ngx-guided-tour .tour-step{z-index:1083}ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-bottom-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-bottom:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-top .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-right .tour-arrow:before,ngx-guided-tour .tour-step.tour-top-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-top:1rem solid #ffffff;border-left:1rem solid transparent;border-right:1rem solid transparent}ngx-guided-tour .tour-step.tour-left .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-left:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step.tour-right .tour-arrow:before{width:0;height:0;content:\"\";z-index:2;border-right:1rem solid #ffffff;border-bottom:1rem solid transparent;border-top:1rem solid transparent}ngx-guided-tour .tour-step .tour-block{color:#231f1f;background-color:#fff;box-shadow:0 .4rem .6rem #4c4c4c}ngx-guided-tour .tour-step .tour-buttons button.skip-button{color:#5e5e5e}ngx-guided-tour .tour-step .tour-buttons .back-button{color:#007bff}ngx-guided-tour .tour-step .tour-buttons .next-button{background-color:#007bff;color:#fff}ngx-guided-tour .tour-step .tour-buttons .next-button:hover{background-color:#0069d9;color:#fff}.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}body.tour-open ngx-guided-tour{--guided-tour-background-color: #ffffff;--guided-tour-text-color: #000000}body.tour-open ngx-guided-tour.dark{--guided-tour-background-color: #2d2d2d;--guided-tour-text-color: #ffffff}body.tour-open ngx-guided-tour .tour-step.hidden{display:none}body.tour-open ngx-guided-tour .tour-step h2.tour-title,body.tour-open ngx-guided-tour .tour-step h3.tour-title{font-size:20px;padding-bottom:0;margin-top:0}body.tour-open ngx-guided-tour .tour-step .tour-block{color:var(--guided-tour-text-color);background-color:var(--guided-tour-background-color);border-radius:5px;padding:37px;box-shadow:0 0 13px #bbb}body.tour-open ngx-guided-tour .tour-step .tour-buttons button{text-align:center;border-radius:5px;width:45%;height:48px;padding:0;font-weight:600}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.skip-button{background:#e2e2e2}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.next-button{color:#fff;background-color:#46a997}body.tour-open ngx-guided-tour .tour-step .tour-buttons button.back-button{display:none}body.tour-open ngx-guided-tour .tour-step.tour-bottom .tour-arrow:before{border-bottom:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-top .tour-arrow:before{border-top:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-left .tour-arrow:before{border-left:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-right .tour-arrow:before{border-right:1rem solid var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step.tour-bottom-right .tour-arrow:before{border-bottom-color:var(--guided-tour-background-color)}body.tour-open ngx-guided-tour .tour-step .tour-content{text-align:center;font-size:14px}body.tour-open ngx-guided-tour .tour-step h2.tour-title{text-align:center}body.tour-open ngx-guided-tour .tour-step h3.tour-title{text-align:center}body.tour-open ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #0000004d,0 0 1.5rem #00000026;border-radius:5px}body.tour-open ngx-guided-tour.lat-coding-tour h3.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour h2.tour-title,body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{text-align:left}body.tour-open ngx-guided-tour.lat-coding-tour .tour-content{padding-bottom:24px}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.skip-button{background:#fff;border:1px solid #000000}body.tour-open ngx-guided-tour.lat-coding-tour .tour-buttons button.next-button{background-color:var(--company-color, #D410AA)}body.tour-open[theme=dark] ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.tour-open[theme=dark] ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body.theme-dark ngx-guided-tour .tour-step .tour-block{box-shadow:none}body.theme-dark ngx-guided-tour .guided-tour-spotlight-overlay{box-shadow:0 0 0 9999px #000000a6,0 0 1.5rem #00000080;border-radius:5px}body .tgo-test-code{display:flex;flex:1;justify-content:center}body .tgo-test-code tgo-question,body .tgo-test-code tgo-micro-test-library-shell-container{display:flex}body[theme=dark] .micro-question-code .coding-lib ui-dropdown .mat-mdc-text-field-wrapper,body[theme=dark] .micro-question-code .coding-lib ui-field .mat-mdc-text-field-wrapper{background-color:transparent}.micro-question-code{display:flex}.micro-question-code .coding-lib{display:block;height:100%}\n"] }]
|
|
440
|
+
}], propDecorators: { assessment: [{
|
|
441
|
+
type: Input
|
|
442
|
+
}], question: [{
|
|
443
|
+
type: Input,
|
|
444
|
+
args: [{ required: true }]
|
|
445
|
+
}], test: [{
|
|
446
|
+
type: Input,
|
|
447
|
+
args: [{ required: true }]
|
|
448
|
+
}], expirationObservable: [{
|
|
449
|
+
type: Input
|
|
450
|
+
}], completeObservable: [{
|
|
451
|
+
type: Input
|
|
452
|
+
}], isDemo: [{
|
|
453
|
+
type: Input
|
|
454
|
+
}], validationStatusChanged: [{
|
|
455
|
+
type: Output
|
|
456
|
+
}], antiCheatingConfigurationChanged: [{
|
|
457
|
+
type: Output
|
|
458
|
+
}], fullscreenChanged: [{
|
|
459
|
+
type: Output
|
|
460
|
+
}], themeChanged: [{
|
|
461
|
+
type: Output
|
|
462
|
+
}], codingFullscreenChanged: [{
|
|
463
|
+
type: Output
|
|
464
|
+
}], navigationButtonStateChanged: [{
|
|
465
|
+
type: Output
|
|
466
|
+
}], configurationStateChanged: [{
|
|
467
|
+
type: Output
|
|
468
|
+
}], submissionStateChanged: [{
|
|
469
|
+
type: Output
|
|
470
|
+
}], loadingStateChanged: [{
|
|
471
|
+
type: Output
|
|
472
|
+
}], hostClass: [{
|
|
473
|
+
type: HostBinding,
|
|
474
|
+
args: ['class']
|
|
475
|
+
}] } });
|
|
476
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGdvLWNvZGluZy10ZXN0LWNhbmRpZGF0ZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvdGdvLWNvZGluZy10ZXN0LWNhbmRpZGF0ZS12aWV3L3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldy90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxVQUFVLEVBRVYsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQU1qQixlQUFlLEVBR2YsWUFBWSxFQUNaLHdCQUF3QixHQUN6QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFFTCxzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLGFBQWEs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WixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBRWYsMkNBQTJDO3dCQUMzQyxVQUFVLEVBQUUsc0RBQXNEO3FCQUNuRTs4QkFrQlEsVUFBVTtzQkFBbEIsS0FBSztnQkFDcUIsUUFBUTtzQkFBbEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsSUFBSTtzQkFBOUIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFDRyxnQ0FBZ0M7c0JBQXpDLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFZSxTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRyYW5zbGF0ZSwgVFJBTlNMT0NPX1NDT1BFLCBUcmFuc2xvY29Nb2R1bGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7XG4gIEFwaVNlcnZpY2UsXG4gIEFzc2Vzc21lbnQsXG4gIEVudmlyb25tZW50U2VydmljZSxcbiAgZ2V0QXZhaWxhYmxlTGFuZ3MsXG4gIElBbnRpQ2hlYXRpbmdTdGF0ZSxcbiAgSUNvbmZpZ3VyYXRpb25TdGF0ZSxcbiAgSU5hdmlnYXRpb25CdXR0b25TdGF0ZSxcbiAgSVF1ZXN0aW9uRGF0YUNvbnRyYWN0LFxuICBJU3VibWlzc2lvblN0YXRlLFxuICBNaXhwYW5lbFNlcnZpY2UsXG4gIFF1ZXN0aW9uLFxuICBUZXN0UmVzdWx0UmVhZCxcbiAgVGhlbWVTZXJ2aWNlLFxuICBUcmFuc2xvY29MYXp5TW9kdWxlVXRpbHMsXG59IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdGVzdC1zaGFyZWQnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25UaGVtZSxcbiAgQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcbiAgRGlhbG9nQ29tcG9uZW50TW9kdWxlLFxuICBEaWFsb2dTZXJ2aWNlLFxuICBTbmFja2JhckNvbXBvbmVudE1vZHVsZSxcbn0gZnJvbSAnQHRlc3Rnb3JpbGxhL3Rnby11aSc7XG5pbXBvcnQgeyBHdWlkZWRUb3VyTW9kdWxlLCBHdWlkZWRUb3VyU2VydmljZSB9IGZyb20gJ25neC1ndWlkZWQtdG91cic7XG5pbXBvcnQgeyBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29kaW5nVGVzdHNSZXN1bHRzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29kZXJ1bm5lci1leGVjdXRpb24tcmVzdWx0cyc7XG5pbXBvcnQgeyBMQVRMYW5ndWFnZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGF0LWxhbmd1YWdlcyc7XG5pbXBvcnQgeyBNb2RlcyB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlJztcbmltcG9ydCB7IFBhc3RlRGF0YSB9IGZyb20gJy4uLy4uL21vZGVscy9wYXN0ZS1kYXRhJztcbmltcG9ydCB7XG4gIFByb2dyYW1taW5nTGFuZ3VhZ2UsXG4gIFByb2dyYW1taW5nTGFuZ3VhZ2VWZXJzaW9uZWQsXG59IGZyb20gJy4uLy4uL21vZGVscy9wcm9ncmFtbWluZy1sYW5ndWFnZSc7XG5pbXBvcnQgeyBFeGFtcGxlVGVzdENhc2UsIFNxbFRlc3RDYXNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Rlc3QtY2FzZXMnO1xuaW1wb3J0IHsgVGhlbWVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RoZW1lJztcbmltcG9ydCB7IFJPT1RfVFJBTlNMQVRJT05TX1NDT1BFIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQgeyBWaWV3TW9kZSB9IGZyb20gJy4uLy4uL21vZGVscy92aWV3LW1vZGUnO1xuaW1wb3J0IHtcbiAgQ2FuZGlkYXR1cmVBcGlTZXJ2aWNlLFxuICBDb2RlcnVubmVyQXBpU2VydmljZSxcbiAgQ29kaW5nVGVzdFNlcnZpY2UsXG4gIENvZGluZ1Rlc3RUb3VyTW9kZSxcbiAgQ29kaW5nVGVzdFRvdXJTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYW5kaWRhdGUtY29kaW5nLXRlc3Qtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29kaW5nVGVzdENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2RpbmctdGVzdC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJDb2RpbmdUZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpYi1jb2RpbmctdGVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvZGVFZGl0b3JMYW5ndWFnZXMgfSBmcm9tICcuLi9jb2RlLWVkaXRvci9oZWxwZXJzL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5pbXBvcnQgeyBUZ29Db2RpbmdUZXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vdGdvLWNvZGluZy10ZXN0L3Rnby1jb2RpbmctdGVzdC5jb21wb25lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1jb2RpbmctdGVzdC1jYW5kaWRhdGUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90Z28tY29kaW5nLXRlc3QtY2FuZGlkYXRlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbG9jb01vZHVsZSxcbiAgICBEaWFsb2dDb21wb25lbnRNb2R1bGUsXG4gICAgU25hY2tiYXJDb21wb25lbnRNb2R1bGUsXG4gICAgVGdvQ29kaW5nVGVzdENvbXBvbmVudCxcbiAgICBHdWlkZWRUb3VyTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFRyYW5zbG9jb0xhenlNb2R1bGVVdGlscy5nZXRTY29wZVByb3ZpZGVyKFxuICAgICAgJ3Rnby1jb2RpbmctdGVzdCcsXG4gICAgICBnZXRBdmFpbGFibGVMYW5ncygpLFxuICAgICAgUk9PVF9UUkFOU0xBVElPTlNfU0NPUEUsXG4gICAgICAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIEZldGNoIGZyb20gYXBwIGFzc2V0czsgZGVtbyBhcHAgY29waWVzIHRoZSBsaWJyYXJ5IGFzc2V0cyB0b1xuICAgICAgICAvLyAvYXNzZXRzL3Rnby1jb2RpbmctdGVzdCB2aWEgcHJvamVjdC5qc29uLlxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGBhc3NldHMvdGdvLWNvZGluZy10ZXN0L2kxOG4vJHtsYW5nfS5qc29uYCwgZG9jdW1lbnQuYmFzZVVSSSkuaHJlZjtcbiAgICAgICAgcmV0dXJuIGZldGNoKHVybCkudGhlbihyZXMgPT4gcmVzLmpzb24oKSk7XG4gICAgICB9XG4gICAgKSxcbiAgICBFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgQ29kZXJ1bm5lckFwaVNlcnZpY2UsXG4gICAgQ29kaW5nVGVzdFNlcnZpY2UsXG4gICAgQ29kaW5nVGVzdFRvdXJTZXJ2aWNlLFxuICAgIEd1aWRlZFRvdXJTZXJ2aWNlLFxuICAgIFRoZW1lU2VydmljZSxcbiAgICBDYW5kaWRhdHVyZUFwaVNlcnZpY2UsXG4gICAgTWl4cGFuZWxTZXJ2aWNlLFxuXG4gICAgLy8gdXNlIE1vY2tlZEFwaVNlcnZpY2UgZm9yIGxvY2FsIGRlbW8gT05MWVxuICAgIEFwaVNlcnZpY2UsIC8veyBwcm92aWRlOiBBcGlTZXJ2aWNlLCB1c2VDbGFzczogTW9ja2VkQXBpU2VydmljZSB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUZ29Db2RpbmdUZXN0Q2FuZGlkYXRlVmlld0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgSVF1ZXN0aW9uRGF0YUNvbnRyYWN0LCBPbkRlc3Ryb3lcbntcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9uU2NvcGUgPSBpbmplY3QoVFJBTlNMT0NPX1NDT1BFKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYW5kaWRhdHVyZUFwaVNlcnZpY2UgPSBpbmplY3QoQ2FuZGlkYXR1cmVBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RpbmdUZXN0VG91clNlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdFRvdXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWJDb2RpbmdUZXN0U2VydmljZSA9IGluamVjdChMaWJDb2RpbmdUZXN0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRTZXJ2aWNlID0gaW5qZWN0KEVudmlyb25tZW50U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kaW5nVGVzdFNlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jb1NlcnZpY2UgPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGhlbWVTZXJ2aWNlID0gaW5qZWN0KFRoZW1lU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpU2VydmljZSA9IGluamVjdChBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kaW5nVGVzdENvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQ29kaW5nVGVzdENvbmZpZ1NlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnQ/OiBBc3Nlc3NtZW50O1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBxdWVzdGlvbiE6IFF1ZXN0aW9uO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0ZXN0ITogVGVzdFJlc3VsdFJlYWQ7XG4gIEBJbnB1dCgpIGV4cGlyYXRpb25PYnNlcnZhYmxlPzogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgQElucHV0KCkgY29tcGxldGVPYnNlcnZhYmxlPzogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgQElucHV0KCkgaXNEZW1vPzogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgdmFsaWRhdGlvblN0YXR1c0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIEBPdXRwdXQoKSBhbnRpQ2hlYXRpbmdDb25maWd1cmF0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUFudGlDaGVhdGluZ1N0YXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGZ1bGxzY3JlZW5DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgdGhlbWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBcHBsaWNhdGlvblRoZW1lPigpO1xuICBAT3V0cHV0KCkgY29kaW5nRnVsbHNjcmVlbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBuYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJTmF2aWdhdGlvbkJ1dHRvblN0YXRlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGNvbmZpZ3VyYXRpb25TdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb25maWd1cmF0aW9uU3RhdGUgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgc3VibWlzc2lvblN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVN1Ym1pc3Npb25TdGF0ZSB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSBsb2FkaW5nU3RhdGVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RDbGFzcyA9ICdtaWNyby1xdWVzdGlvbi1jb2RlJztcblxuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGluaXRDb2RlID0gJyc7XG4gIHZpZXdNb2RlcyA9IFZpZXdNb2RlO1xuICBtb2RlOiBNb2RlcyA9IE1vZGVzLlJ1bm5pbmc7XG4gIGNvbXBhbnlDb2xvciA9IHRoaXMudGhlbWVTZXJ2aWNlLmdldENvbXBhbnlDb2xvcigpO1xuICBpbml0Q29kZXNNYXAgPSBuZXcgTWFwPENvZGVFZGl0b3JMYW5ndWFnZXMsIHN0cmluZz4oKTtcbiAgbGFuZ3VhZ2VzID0gc2lnbmFsPExBVExhbmd1YWdlcz4oW10pO1xuICBjb2RpbmdMaWJUcmFuc2xhdGlvbnMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4oe30pO1xuICByYXdMYW5ndWFnZXM6IFByb2dyYW1taW5nTGFuZ3VhZ2VbXSA9IFtdO1xuICBjdXJyZW50TGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIGlzU1FMID0gZmFsc2U7XG4gIGlzTEFUID0gdHJ1ZTtcbiAgY29kZSA9ICcnO1xuICBjb2RpbmdUZXN0UmVzdWx0cz86IENvZGluZ1Rlc3RzUmVzdWx0c01vZGVsO1xuICB0ZXN0UmVzdWx0c0xvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLmlzVGVzdFJlc3VsdHNMb2FkaW5nKCkpO1xuICBleGFtcGxlVGVzdENhc2VzOiBFeGFtcGxlVGVzdENhc2VbXSA9IFtdO1xuICBhY3RpdmVHdWlkZWRUb3VySWQkID0gdGhpcy5jb2RpbmdUZXN0VG91clNlcnZpY2UuYWN0aXZlR3VpZGVkVG91cklkJDtcbiAgZmlyc3RUZXN0UnVuQ29tcGxldGUgPSBmYWxzZTtcbiAgY2Fub3B5VWlUaGVtZTogQXBwbGljYXRpb25UaGVtZSA9ICdsaWdodCc7XG5cbiAgcHJpdmF0ZSB3YXNUb3VyU2hvd24gPSBmYWxzZTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlKSB7XG4gICAgICB0aGlzLmFudGlDaGVhdGluZ0NvbmZpZ3VyYXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgICBmdWxsc2NyZWVuVHJhY2tpbmc6IGZhbHNlLFxuICAgICAgICBtb3VzZUV2ZW50VHJhY2tpbmc6IGZhbHNlLFxuICAgICAgICBzbmFwc2hvdHNUcmFja2luZzogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXR1cFN0YXRlKCk7XG4gICAgdGhpcy5oYW5kbGVHdWlkZWRUb3VyKCk7XG5cbiAgICBpZiAoIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlKSB7XG4gICAgICB0aGlzLmFudGlDaGVhdGluZ0NvbmZpZ3VyYXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgICBmdWxsc2NyZWVuVHJhY2tpbmc6IHRydWUsXG4gICAgICAgIG1vdXNlRXZlbnRUcmFja2luZzogdHJ1ZSxcbiAgICAgICAgc25hcHNob3RzVHJhY2tpbmc6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXR1cEF1dG9zYXZlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc05leHRRdWVzdGlvbkRpc2FibGVkID0gIXRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlO1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgaXNTYXZpbmdRdWVzdGlvbkRpc2FibGVkOiBpc05leHRRdWVzdGlvbkRpc2FibGVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgZGlzYWJsZWQ6IGlzTmV4dFF1ZXN0aW9uRGlzYWJsZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmV4cGlyYXRpb25PYnNlcnZhYmxlPy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyU2F2ZWRDb2RlKCk7XG4gICAgICAgIGlmICghdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyTGFzdExhbmd1YWdlU2VsZWN0ZWQoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdENvZGUoKTtcbiAgICAgICAgICB0aGlzLmVuYWJsZU5leHRCdXR0b24oKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5jb21wbGV0ZU9ic2VydmFibGU/LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpIHtcbiAgICAgICAgICB0aGlzLm9wZW5TYXZlRGlhbG9nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jbGVhclNhdmVkQ29kZSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIXRoaXMuaXNTUUwpIHtcbiAgICAgIHRoaXMubG9hZEF2YWlsYWJsZUxhbmd1YWdlcygpO1xuICAgICAgdGhpcy5zZXRUZXN0Q2FzZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTcWxUZXN0Q2FzZXMoKTtcbiAgICAgIHRoaXMuc2V0U3FsTGFuZygpO1xuICAgICAgdGhpcy5zZXRTcWxJbml0Q29kZSgpO1xuICAgICAgdGhpcy5sb2FkaW5nU3RhdGVDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLnNldExpc3RlbmVycygpO1xuICB9XG5cbiAgb3BlblNhdmVEaWFsb2coKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgYXBwbGljYXRpb25UaGVtZTogdGhpcy5jYW5vcHlVaVRoZW1lLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICcnLFxuICAgICAgZXh0cmFEYXRhOiB7XG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGUoJ0NPRElOR19RVUVTVElPTi5NT0RBTFMuRklOSVNIX1RFU1QuVElUTEUnKSA/PyAnJyxcbiAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlKCdDT0RJTkdfUVVFU1RJT04uTU9EQUxTLkZJTklTSF9URVNULk1FU1NBR0UnKSA/PyAnJyxcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRyYW5zbGF0ZSgnQ09ESU5HX1FVRVNUSU9OLk1PREFMUy5GSU5JU0hfVEVTVC5TVUJNSVQnKSA/PyAnJyxcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdHJhbnNsYXRlKCdDT0RJTkdfUVVFU1RJT04uTU9EQUxTLkZJTklTSF9URVNULkNBTkNFTCcpID8/ICcnLFxuICAgICAgICBjb2xvcjogdGhpcy5jb21wYW55Q29sb3IsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xlYXJTYXZlZENvZGUoKTtcbiAgICAgIHRoaXMuY2xlYXJMYXN0TGFuZ3VhZ2VTZWxlY3RlZCgpO1xuICAgICAgdGhpcy5zdWJtaXRDb2RlKCk7XG4gICAgICB0aGlzLmVuYWJsZU5leHRCdXR0b24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMYXN0TGFuZ3VhZ2VTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmNsZWFyTGFzdExhbmd1YWdlU2VsZWN0ZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTYXZlZENvZGUoKSB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS50cmlnZ2VyQ2xlYXJTYXZlZENvZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VibWl0Q29kZSgpIHtcbiAgICBpZiAodGhpcy5jb2RlKSB7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25TdGF0ZUNoYW5nZWQ/LmVtaXQoe1xuICAgICAgICB0ZXh0OiB0aGlzLmNvZGUsXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmdldFZlcnNpb25lZExhbmd1YWdlKCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZlcnNpb25lZExhbmd1YWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZTtcblxuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NRTCkge1xuICAgICAgcmV0dXJuIFByb2dyYW1taW5nTGFuZ3VhZ2VWZXJzaW9uZWQuU1FMaXRlO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtsYW5ndWFnZX0tJHt0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmdldFZlcnNpb24oKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVOZXh0QnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhdGlvblN0YXRlQ2hhbmdlZC5lbWl0KHtcbiAgICAgIGlzU2F2aW5nUXVlc3Rpb25EaXNhYmxlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBsYW5ndWFnZUNoYW5nZShzZWxlY3RlZExhbmdOYW1lOiBDb2RlRWRpdG9yTGFuZ3VhZ2VzKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMYW5nID0gdGhpcy5yYXdMYW5ndWFnZXMuZmlsdGVyKFxuICAgICAgbGFuZ3VhZ2UgPT4gbGFuZ3VhZ2UubmFtZSA9PT0gc2VsZWN0ZWRMYW5nTmFtZVxuICAgIClbMF07XG4gICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5oYW5kbGVMYW5ndWFnZUNoYW5nZU1vZGFsKFxuICAgICAgdGhpcy5xdWVzdGlvbi5pZCxcbiAgICAgIHNlbGVjdGVkTGFuZyxcbiAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSxcbiAgICAgIHRoaXMuY29tcGFueUNvbG9yXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUNvZGUoY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxuXG4gIHJ1blRlc3QoKTogdm9pZCB7XG4gICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5ydW5UZXN0KFxuICAgICAgdGhpcy5xdWVzdGlvbi5pZCxcbiAgICAgIHRoaXMuY29kZSxcbiAgICAgIHRoaXMuaXNMQVQsXG4gICAgICB0aGlzLmlzU1FMLFxuICAgICAgZmFsc2UsXG4gICAgICAhIXRoaXMudGVzdC5pc19wcmV2aWV3X21vZGUsXG4gICAgICB0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uX2lkLFxuICAgICAgdGhpcy50ZXN0LmlkLFxuICAgICAgdGhpcy50ZXN0XG4gICAgKTtcblxuICAgIGlmICghdGhpcy5maXJzdFRlc3RSdW5Db21wbGV0ZSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQnV0dG9uU3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5maXJzdFRlc3RSdW5Db21wbGV0ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2NyZWVuc2hvdFBhc3RlKGV2ZW50OiBQYXN0ZURhdGEpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudHlwZSAhPT0gJ3Bhc3RlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5zZW5kQ29weXBhc3RlRXZlbnQkKHRoaXMuY29kZSwgZXZlbnQuZGF0YSwgdGhpcy5xdWVzdGlvbi5pZClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQXV0b3NhdmVFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBpbnRlcnZhbCg1MDAwKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb2RpbmdUZXN0U2VydmljZS5zZW5kQXV0b3NhdmVFdmVudCQodGhpcy5jb2RlLCB0aGlzLnF1ZXN0aW9uLmlkKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QXBpUGFyYW1zKCk7XG4gICAgdGhpcy5zZXRDb2RpbmdMaWJUcmFuc2xhdGlvbnMoKTtcbiAgICB0aGlzLnNldElzU1FMKCk7XG4gICAgdGhpcy5zZXRJc0xhdCgpO1xuICAgIHRoaXMuc2V0TW9kZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2RpbmdMaWJUcmFuc2xhdGlvbnMoKSB7XG4gICAgLy8gVFJBTlNMT0NPX1NDT1BFIGlzIHBhc3NlZCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRyYW5zbGF0aW9uIHNjb3BlIGlzIHJlc29sdmVkIGJ5IHRoZSBsaWJyYXJ5XG4gICAgdGhpcy50cmFuc2xvY29TZXJ2aWNlXG4gICAgICAuc2VsZWN0VHJhbnNsYXRlT2JqZWN0KGBDT0RJTkdfTElCYCwge30sIHRoaXMudHJhbnNsYXRpb25TY29wZSBhcyBzdHJpbmcpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ0xpYlRyYW5zbGF0aW9ucy5zZXQodHJhbnNsYXRpb25zKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBcGlQYXJhbXMoKTogdm9pZCB7XG4gICAgY29uc3QgaW52aXRhdGlvblV1aWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmZpcnN0Q2hpbGQ/LnVybFswXS5wYXRoIHx8ICcnO1xuICAgIGNvbnN0IGNvbnRlbnRMYW5ndWFnZSA9IHRoaXMuYXNzZXNzbWVudD8ubG9jYWxlID8/ICdlbic7XG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5jb2RpbmdUZXN0Q29uZmlnU2VydmljZS5nZXRBcGlVcmwoKTtcblxuICAgIHRoaXMuYXBpU2VydmljZS5zZXRQYXJhbXMoaW52aXRhdGlvblV1aWQsIGNvbnRlbnRMYW5ndWFnZSwgUk9PVF9UUkFOU0xBVElPTlNfU0NPUEUsIGFwaVVybCk7XG4gIH1cblxuICBwcml2YXRlIHNldElzU1FMKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTUUwgPSB0aGlzLnF1ZXN0aW9uPy5jb250ZXh0LmNvZGVfbGFuZ3VhZ2UgPT09ICdzcWwnO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2Uuc2V0SXNTUUxUZXN0KHRoaXMuaXNTUUwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTcWxJbml0Q29kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRDb2RlID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dC5pbml0aWFsX2NvZGU7XG4gIH1cblxuICBwcml2YXRlIHNldFNxbExhbmcoKTogdm9pZCB7XG4gICAgY29uc3Qgc3FsTGFuZ3VhZ2UgPSB0aGlzLnF1ZXN0aW9uPy5jb250ZXh0LmNvZGVfbGFuZ3VhZ2UgYXMgQ29kZUVkaXRvckxhbmd1YWdlcztcbiAgICB0aGlzLmxhbmd1YWdlcy5zZXQoW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ25vbkxBVCcsXG4gICAgICAgIHZhbHVlOiBzcWxMYW5ndWFnZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBzcWxMYW5ndWFnZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXNMYXQoKTogdm9pZCB7XG4gICAgLy8gdG9kbzogYWRkIHJlc3BvbnNlIGZpZWxkIGlmIHBvc3NpYmxlID9cbiAgICAvLyB0aGlzLmlzTEFUID0gdGhpcy50ZXN0Py5pc19sYW5ndWFnZV9hZ25vc3RpY190ZXN0ID8/IGZhbHNlO1xuICAgIHRoaXMuaXNMQVQgPSAhdGhpcy5pc1NRTDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLnRlc3Q/LmlzX3ByZXZpZXdfbW9kZSA/IE1vZGVzLlByZXZpZXcgOiBNb2Rlcy5SdW5uaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5HdWlkZWRUb3VyU3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5zdGFydEd1aWRlZFRvdXIkLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBndWlkZWRUb3VyTW9kZSA9IHRoaXMudGVzdD8uaXNfcHJldmlld19tb2RlXG4gICAgICAgID8gQ29kaW5nVGVzdFRvdXJNb2RlLlByYWN0aWNlUXVlc3Rpb25cbiAgICAgICAgOiBDb2RpbmdUZXN0VG91ck1vZGUuUmVhbFF1ZXN0aW9uO1xuXG4gICAgICB0aGlzLmNvZGluZ1Rlc3RUb3VyU2VydmljZS5pbml0KGd1aWRlZFRvdXJNb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlR3VpZGVkVG91cigpIHtcbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmlzTW9iaWxlICYmICF0aGlzLndhc1RvdXJTaG93biAmJiB0aGlzLnRlc3Q/LmlzX3ByZXZpZXdfbW9kZSkge1xuICAgICAgY29uc3QgZGVsYXlGb3JHdWlkZWRUb3VyID0gMTUwMDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ1Rlc3RUb3VyU2VydmljZS5pbml0KENvZGluZ1Rlc3RUb3VyTW9kZS5QcmFjdGljZVF1ZXN0aW9uKTtcbiAgICAgICAgdGhpcy53YXNUb3VyU2hvd24gPSB0cnVlO1xuICAgICAgfSwgZGVsYXlGb3JHdWlkZWRUb3VyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFsbExhbmd1YWdlcygpOiBQcm9ncmFtbWluZ0xhbmd1YWdlW10ge1xuICAgIGNvbnN0IGJvaWxlcnBsYXRlcyA9IHRoaXMucXVlc3Rpb24/LmNvbnRleHQuYm9pbGVycGxhdGVzID8/IFtdO1xuICAgIHJldHVybiBib2lsZXJwbGF0ZXMubWFwKCh7IHByb2dyYW1taW5nX2xhbmd1YWdlIH0pID0+IHByb2dyYW1taW5nX2xhbmd1YWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEF2YWlsYWJsZUxhbmd1YWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmRpZGF0dXJlQXBpU2VydmljZVxuICAgICAgLmdldEF2YWlsYWJsZUxhbmd1YWdlcyQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcChhdmFpbGFibGVMYW5nc0lkcyA9PiB7XG4gICAgICAgICAgY29uc3QgbGFuZ3VhZ2VzID0gdGhpcy5nZXRBbGxMYW5ndWFnZXMoKTtcbiAgICAgICAgICBjb25zdCBhcmVBbGxMYW5nc0F2YWlsYWJsZSA9IGF2YWlsYWJsZUxhbmdzSWRzLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgIHRoaXMucmF3TGFuZ3VhZ2VzID0gYXJlQWxsTGFuZ3NBdmFpbGFibGVcbiAgICAgICAgICAgID8gbGFuZ3VhZ2VzXG4gICAgICAgICAgICA6IGxhbmd1YWdlcy5maWx0ZXIoKHsgaWQgfSkgPT4gaWQgIT09IHVuZGVmaW5lZCAmJiBhdmFpbGFibGVMYW5nc0lkcy5pbmNsdWRlcyhpZCkpO1xuICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzLnNldChcbiAgICAgICAgICAgIHRoaXMucmF3TGFuZ3VhZ2VzLm1hcChsYW5ndWFnZSA9PiAoe1xuICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICB0eXBlb2YgbGFuZ3VhZ2UubmFtZSA9PT0gJ3N0cmluZycgJiYgbGFuZ3VhZ2UubmFtZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IGxhbmd1YWdlLm5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsYW5ndWFnZS5uYW1lLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICA6ICdVbmtub3duJyxcbiAgICAgICAgICAgICAgdmFsdWU6IGxhbmd1YWdlLm5hbWUgYXMgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgdmVyc2lvbjogbGFuZ3VhZ2UudmVyc2lvbixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9pbGVycGxhdGVzID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dC5ib2lsZXJwbGF0ZXMgPz8gW107XG4gICAgICAgICAgYm9pbGVycGxhdGVzLmZvckVhY2goYm9pbGVycGxhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKGJvaWxlcnBsYXRlLnByb2dyYW1taW5nX2xhbmd1YWdlLm5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbml0Q29kZXNNYXAuc2V0KFxuICAgICAgICAgICAgICAgIGJvaWxlcnBsYXRlLnByb2dyYW1taW5nX2xhbmd1YWdlLm5hbWUgYXMgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICBib2lsZXJwbGF0ZS5jb2RlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5jdXJyZW50TGFuZ3VhZ2UkKSxcbiAgICAgICAgdGFwKChsYW5ndWFnZTogQ29kZUVkaXRvckxhbmd1YWdlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5yYXdMYW5ndWFnZXMuZmluZCh4ID0+IHgubmFtZSA9PT0gbGFuZ3VhZ2UpO1xuICAgICAgICAgIGlmIChjdXJyZW50TGFuZykge1xuICAgICAgICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5zZXRDdXJyZW50TGFuZ3VhZ2VMQVQoY3VycmVudExhbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpbml0Q29kZSA9IHRoaXMuaW5pdENvZGVzTWFwLmdldChsYW5ndWFnZSk7XG4gICAgICAgICAgaWYgKGluaXRDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRDb2RlID0gaW5pdENvZGU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvZGUodGhpcy5pbml0Q29kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2Uuc2V0Qm9pbGVycGxhdGVMb2FkaW5nU3RhdHVzKGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5UaGVtZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLnRoZW1lQ2hhbmdlZCQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKHRoZW1lID0+IHtcbiAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSA9IHRoZW1lID09PSBUaGVtZXMuRGFyayA/ICdkYXJrJyA6ICdsaWdodCc7XG4gICAgICB0aGlzLnRoZW1lQ2hhbmdlZC5lbWl0KHRoaXMuY2Fub3B5VWlUaGVtZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZ1bGxzY3JlZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5pc0Z1bGxzY3JlZW4kXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoaXNGdWxsc2NyZWVuID0+IHRoaXMuZnVsbHNjcmVlbkNoYW5nZWQuZW1pdChpc0Z1bGxzY3JlZW4pKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRGVsZXRlQ3VzdG9tVGVzdENhc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5saXN0ZW5EZWxldGVDdXN0b21UZXN0Q2FzZXMoKVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKCh7IGluZGV4IH0pID0+IHtcbiAgICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS5oYW5kbGVEZWxldGVUZXN0Q2FzZU1vZGFsKFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIHRoaXMuY2Fub3B5VWlUaGVtZSxcbiAgICAgICAgICB0aGlzLmNvbXBhbnlDb2xvclxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3Rlbkxhbmd1YWdlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UuY3VycmVudExhbmd1YWdlJFxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKChsYW5ndWFnZTogQ29kZUVkaXRvckxhbmd1YWdlcykgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5pbml0Q29kZXNNYXAuZ2V0KGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgICB0aGlzLmluaXRDb2RlID0gY29kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluaXRDb2RlID0gJyc7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBObyBpbml0aWFsIGNvZGUgZm91bmQgZm9yIGxhbmd1YWdlOiAke2xhbmd1YWdlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuUmVzZXRDb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2VcbiAgICAgIC5saXN0ZW5Db2RpbmdUZXN0Q2hhbmdlcygpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLmhhbmRsZVJlc2V0Q29kZU1vZGFsKHRoaXMuY2Fub3B5VWlUaGVtZSwgdGhpcy5jb21wYW55Q29sb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblRlc3RSZXN1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2UuY29kaW5nVGVzdFJlc3VsdHMkLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgIHRoaXMuY29kaW5nVGVzdFJlc3VsdHMgPSByZXN1bHRzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTcWxUZXN0Q2FzZXMoKTogdm9pZCB7XG4gICAgY29uc3QgdGVzdENhc2VzID0gdGhpcy5xdWVzdGlvbj8uY29udGV4dD8uc3FsX3Rlc3RjYXNlcy5tYXAodGVzdENhc2UgPT4gKHtcbiAgICAgIC4uLnRlc3RDYXNlLFxuICAgICAgcG9zdF9zcWw6IHRlc3RDYXNlLnBvc3Rfc3FsIHx8ICcnLFxuICAgICAgaW5pdGlhbF9zcWw6IHRoaXMucXVlc3Rpb24/LmNvbnRleHQ/LmluaXRpYWxfc3FsIHx8ICcnLFxuICAgIH0pKSBhcyBTcWxUZXN0Q2FzZVtdO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2Uuc2V0U3FsVGVzdENhc2VzKHRlc3RDYXNlcyk7XG4gICAgdGhpcy5leGFtcGxlVGVzdENhc2VzID0gdGVzdENhc2VzLm1hcCh0aGlzLmNvZGluZ1Rlc3RTZXJ2aWNlLnRyYW5zZm9ybVRvRXhhbXBsZVNRTFRlc3RDYXNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGVzdENhc2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZXhhbXBsZVRlc3RDYXNlcyA9IHRoaXMucXVlc3Rpb24/LmNvbnRleHQ/LnRlc3RjYXNlcz8ubWFwKFxuICAgICAgdGhpcy5jb2RpbmdUZXN0U2VydmljZS50cmFuc2Zvcm1Ub0V4YW1wbGVMQVR0ZXN0Q2FzZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3Rlbkd1aWRlZFRvdXJTdGFydCgpO1xuICAgIHRoaXMubGlzdGVuRnVsbHNjcmVlbkNoYW5nZSgpO1xuICAgIHRoaXMubGlzdGVuVGhlbWVDaGFuZ2UoKTtcbiAgICB0aGlzLmxpc3RlblJlc2V0Q29kZSgpO1xuICAgIHRoaXMuY29kaW5nVGVzdFNlcnZpY2UudHJhY2tDb25maWdDaGFuZ2VkKCEhdGhpcy50ZXN0Py5pc19wcmV2aWV3X21vZGUpO1xuICAgIHRoaXMubGlzdGVuVGVzdFJlc3VsdHMoKTtcbiAgICBpZiAodGhpcy5pc0xBVCkge1xuICAgICAgdGhpcy5saXN0ZW5EZWxldGVDdXN0b21UZXN0Q2FzZXMoKTtcbiAgICAgIHRoaXMubGlzdGVuTGFuZ3VhZ2VDaGFuZ2UoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnRyYW5zbG9jbz1cImxldCB0OyByZWFkOiAnQ09ESU5HX1FVRVNUSU9OJ1wiPlxuICBAaWYgKGxhbmd1YWdlcygpPy5sZW5ndGggJiYgY29kaW5nTGliVHJhbnNsYXRpb25zKCkpIHtcbiAgICA8dGdvLWNvZGluZy10ZXN0XG4gICAgICBjbGFzcz1cImNvZGluZy1saWJcIlxuICAgICAgW2Fzc2Vzc21lbnRJZF09XCJhc3Nlc3NtZW50IS51dWlkIVwiXG4gICAgICBbcXVlc3Rpb25JZF09XCJxdWVzdGlvbiEucXVlc3Rpb25faWQhXCJcbiAgICAgIFtpc0xBVF09XCJpc0xBVFwiXG4gICAgICBbY2FuQWRkQ3VzdG9tVGVzdENhc2VzXT1cImlzTEFUXCJcbiAgICAgIFtpc1NRTF09XCJpc1NRTFwiXG4gICAgICBbbGFuZ3VhZ2VzXT1cImxhbmd1YWdlcygpXCJcbiAgICAgIFtpbml0Q29kZV09XCJpbml0Q29kZVwiXG4gICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgIFt2aWV3TW9kZV09XCJ2aWV3TW9kZXMuRnVsbFwiXG4gICAgICBbbG9hZGluZ109XCJ0ZXN0UmVzdWx0c0xvYWRpbmcoKVwiXG4gICAgICBbY29tcGFueUNvbG9yXT1cImNvbXBhbnlDb2xvclwiXG4gICAgICBbcXVlc3Rpb25UZXh0XT1cInF1ZXN0aW9uLnRleHRcIlxuICAgICAgW3Rlc3RDYXNlc1N0YXR1c109XCJjb2RpbmdUZXN0UmVzdWx0cz8ucmVzdW1lXCJcbiAgICAgIFtydW5UZXN0UmVzcG9uc2VdPVwiY29kaW5nVGVzdFJlc3VsdHM/Lmxpc3RSZXNwb25zZSFcIlxuICAgICAgW2V4YW1wbGVUZXN0Q2FzZXNdPVwiZXhhbXBsZVRlc3RDYXNlc1wiXG4gICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJjYW5vcHlVaVRoZW1lXCJcbiAgICAgIFt0cmFuc2xhdGlvbnNdPVwiY29kaW5nTGliVHJhbnNsYXRpb25zKClcIlxuICAgICAgKGNvZGVDaGFuZ2UpPVwidXBkYXRlQ29kZSgkZXZlbnQpXCJcbiAgICAgIChydW5UZXN0Q2xpY2spPVwicnVuVGVzdCgpXCJcbiAgICAgIChsYW5ndWFnZUNoYW5nZSk9XCJsYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChwYXN0ZUV2ZW50KT1cInNjcmVlbnNob3RQYXN0ZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC90Z28tY29kaW5nLXRlc3Q+XG4gIH1cbjwvbmctY29udGFpbmVyPlxuXG48bmd4LWd1aWRlZC10b3VyXG4gIFtuZ0NsYXNzXT1cImFjdGl2ZUd1aWRlZFRvdXJJZCQgfCBhc3luY1wiXG4gIFtuZ1N0eWxlXT1cInsgJy0tY29tcGFueS1jb2xvcic6IGNvbXBhbnlDb2xvciB9XCJcbiAgW2NsYXNzLmRhcmtdPVwiY2Fub3B5VWlUaGVtZSA9PT0gJ2RhcmsnXCJcbj48L25neC1ndWlkZWQtdG91cj5cblxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { provideTgoCodingTest } from './tgo-coding-test.provider';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBUZ29Db2RpbmdUZXN0Q29uZmlnIH0gZnJvbSAnLi90Z28tY29kaW5nLXRlc3QuY29uZmlnJztcbmV4cG9ydCB7IHByb3ZpZGVUZ29Db2RpbmdUZXN0IH0gZnJvbSAnLi90Z28tY29kaW5nLXRlc3QucHJvdmlkZXInO1xuXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGdvLWNvZGluZy10ZXN0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbmZpZy90Z28tY29kaW5nLXRlc3QuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgVEdPIENvZGluZyBUZXN0IGxpYnJhcnkuXG4gKiBcbiAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgdGhlIHJ1bnRpbWUgY29uZmlndXJhdGlvbiB0aGF0IG11c3QgYmUgcHJvdmlkZWRcbiAqIGJ5IHRoZSBjb25zdW1pbmcgYXBwbGljYXRpb24uIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGhvbGQgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcyBpdHNlbGY7IGluc3RlYWQsIGl0IHJlY2VpdmVzIHRoZW0gZnJvbSB0aGUgaG9zdCBhcHBsaWNhdGlvblxuICogdGhyb3VnaCBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZ29Db2RpbmdUZXN0Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIG1haW4gQVBJIGVuZHBvaW50LlxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgbGlicmFyeSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBtYWluIEFQSSBzZXJ2aWNlLlxuICAgKiBcbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXBpLXRhbGVudC1zdGFnaW5nLnRlc3Rnb3JpbGxhLmNvbS9hcGkvJ1xuICAgKi9cbiAgYXBpVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIENvZGVSdW5uZXIgVjIgQVBJIGVuZHBvaW50LlxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgbGlicmFyeSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjb2RlIGV4ZWN1dGlvbiBzZXJ2aWNlLlxuICAgKiBcbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vY3ItdjItc3RhZ2luZy50ZXN0Z29yaWxsYS5jb20nXG4gICAqL1xuICBjb2RlcnVubmVyVjJFbmRwb2ludDogc3RyaW5nO1xufVxuXG4iXX0=
|