@rocketshow/designer 1.32.0 → 1.35.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/assets/i18n/de.json +2 -1
- package/assets/i18n/en.json +2 -1
- package/esm2022/lib/array-sort-pipe.mjs +30 -0
- package/esm2022/lib/designer.component.mjs +672 -0
- package/esm2022/lib/designer.module.mjs +186 -0
- package/esm2022/lib/designer.service.mjs +14 -0
- package/esm2022/lib/dropzone/dropzone.component.mjs +93 -0
- package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +577 -0
- package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +36 -0
- package/esm2022/lib/effect/effect.component.mjs +174 -0
- package/esm2022/lib/error-dialog/error-dialog.component.mjs +75 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +222 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +147 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +213 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +78 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +119 -0
- package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +169 -0
- package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +162 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +365 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +151 -0
- package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +46 -0
- package/esm2022/lib/fixture/fixture.component.mjs +148 -0
- package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +145 -0
- package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +643 -0
- package/esm2022/lib/intro/intro.component.mjs +95 -0
- package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +66 -0
- package/esm2022/lib/models/cached-fixture-capability.mjs +9 -0
- package/esm2022/lib/models/cached-fixture-channel.mjs +7 -0
- package/esm2022/lib/models/cached-fixture.mjs +6 -0
- package/esm2022/lib/models/color.mjs +8 -0
- package/esm2022/lib/models/composition.mjs +46 -0
- package/esm2022/lib/models/effect-curve-profile-channel.mjs +15 -0
- package/esm2022/lib/models/effect-curve.mjs +69 -0
- package/esm2022/lib/models/effect-pan-tilt.mjs +19 -0
- package/esm2022/lib/models/effect.mjs +12 -0
- package/esm2022/lib/models/fixture-capability-value.mjs +15 -0
- package/esm2022/lib/models/fixture-capability.mjs +84 -0
- package/esm2022/lib/models/fixture-channel-value.mjs +11 -0
- package/esm2022/lib/models/fixture-channel.mjs +24 -0
- package/esm2022/lib/models/fixture-matrix-pixel-group-constraints.mjs +27 -0
- package/esm2022/lib/models/fixture-matrix-pixel-group.mjs +12 -0
- package/esm2022/lib/models/fixture-matrix.mjs +25 -0
- package/esm2022/lib/models/fixture-mode-channel.mjs +26 -0
- package/esm2022/lib/models/fixture-mode.mjs +17 -0
- package/esm2022/lib/models/fixture-physical.mjs +14 -0
- package/esm2022/lib/models/fixture-profile.mjs +85 -0
- package/esm2022/lib/models/fixture-wheel-slot.mjs +26 -0
- package/esm2022/lib/models/fixture-wheel.mjs +15 -0
- package/esm2022/lib/models/fixture.mjs +40 -0
- package/esm2022/lib/models/preset-fixture.mjs +10 -0
- package/esm2022/lib/models/preset-region-scene.mjs +8 -0
- package/esm2022/lib/models/preset.mjs +65 -0
- package/esm2022/lib/models/project.mjs +78 -0
- package/esm2022/lib/models/scene-playback-region.mjs +11 -0
- package/esm2022/lib/models/scene.mjs +27 -0
- package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +194 -0
- package/esm2022/lib/preset/preset.component.mjs +131 -0
- package/esm2022/lib/preview/models/color-changer-3d.mjs +64 -0
- package/esm2022/lib/preview/models/fixture-3d.mjs +274 -0
- package/esm2022/lib/preview/models/moving-head-3d.mjs +124 -0
- package/esm2022/lib/preview/preview.component.mjs +219 -0
- package/esm2022/lib/project/project-browser/project-browser.component.mjs +143 -0
- package/esm2022/lib/project/project-import/project-import.component.mjs +107 -0
- package/esm2022/lib/project/project-save/project-save.component.mjs +178 -0
- package/esm2022/lib/project/project-share/project-share.component.mjs +71 -0
- package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +146 -0
- package/esm2022/lib/scene/scene.component.mjs +110 -0
- package/esm2022/lib/services/animation.service.mjs +16 -0
- package/esm2022/lib/services/config.service.mjs +28 -0
- package/esm2022/lib/services/effect.service.mjs +14 -0
- package/esm2022/lib/services/error-dialog.service.mjs +39 -0
- package/esm2022/lib/services/fixture-pool.service.mjs +30 -0
- package/esm2022/lib/services/fixture.service.mjs +639 -0
- package/esm2022/lib/services/hotkey-target-exclude.service.mjs +24 -0
- package/esm2022/lib/services/intro.service.mjs +140 -0
- package/esm2022/lib/services/preset.service.mjs +449 -0
- package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
- package/esm2022/lib/services/preview.service.mjs +497 -0
- package/esm2022/lib/services/project-load.service.mjs +209 -0
- package/esm2022/lib/services/project.service.mjs +93 -0
- package/esm2022/lib/services/scene.service.mjs +164 -0
- package/esm2022/lib/services/timeline.service.mjs +726 -0
- package/esm2022/lib/services/user-ensure-login.service.mjs +38 -0
- package/esm2022/lib/services/user.service.mjs +89 -0
- package/esm2022/lib/services/uuid.service.mjs +23 -0
- package/esm2022/lib/services/warning-dialog.service.mjs +38 -0
- package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +304 -0
- package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +216 -0
- package/esm2022/lib/timeline/timeline.component.mjs +418 -0
- package/esm2022/lib/user/user-login/user-login.component.mjs +144 -0
- package/esm2022/lib/user/user-register/user-register.component.mjs +220 -0
- package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +26 -0
- package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +68 -0
- package/esm2022/public_api.mjs +7 -0
- package/esm2022/rocketshow-designer.mjs +5 -0
- package/fesm2022/rocketshow-designer.mjs +11171 -0
- package/fesm2022/rocketshow-designer.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/array-sort-pipe.d.ts +3 -0
- package/lib/designer.component.d.ts +19 -16
- package/lib/designer.module.d.ts +55 -0
- package/lib/designer.service.d.ts +3 -0
- package/lib/dropzone/dropzone.component.d.ts +24 -0
- package/lib/effect/effect-curve/effect-curve.component.d.ts +4 -1
- package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +3 -0
- package/lib/effect/effect.component.d.ts +3 -0
- package/lib/error-dialog/error-dialog.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +4 -1
- package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +5 -2
- package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +3 -0
- package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +3 -0
- package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +3 -0
- package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +3 -0
- package/lib/fixture/fixture.component.d.ts +7 -3
- package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +3 -0
- package/lib/fixture-pool/fixture-pool.component.d.ts +3 -0
- package/lib/intro/intro.component.d.ts +3 -0
- package/lib/master-dimmer/master-dimmer.component.d.ts +3 -0
- package/lib/models/cached-fixture.d.ts +1 -0
- package/lib/models/fixture-matrix-pixel-group-constraints.d.ts +8 -0
- package/lib/models/fixture-matrix-pixel-group.d.ts +6 -0
- package/lib/models/fixture-matrix.d.ts +6 -0
- package/lib/models/fixture-mode-channel.d.ts +8 -0
- package/lib/models/fixture-mode.d.ts +3 -1
- package/lib/models/fixture-physical.d.ts +4 -0
- package/lib/models/fixture-profile.d.ts +5 -0
- package/lib/models/preset-fixture.d.ts +5 -0
- package/lib/models/preset.d.ts +2 -0
- package/lib/models/project.d.ts +3 -0
- package/lib/preset/preset-settings/preset-settings.component.d.ts +3 -0
- package/lib/preset/preset.component.d.ts +3 -0
- package/lib/preview/models/color-changer-3d.d.ts +1 -11
- package/lib/preview/models/fixture-3d.d.ts +11 -0
- package/lib/preview/models/moving-head-3d.d.ts +1 -11
- package/lib/preview/preview.component.d.ts +4 -4
- package/lib/project/project-browser/project-browser.component.d.ts +3 -0
- package/lib/project/project-import/project-import.component.d.ts +3 -0
- package/lib/project/project-save/project-save.component.d.ts +3 -0
- package/lib/project/project-share/project-share.component.d.ts +3 -0
- package/lib/scene/scene-settings/scene-settings.component.d.ts +3 -0
- package/lib/scene/scene.component.d.ts +3 -0
- package/lib/services/animation.service.d.ts +3 -0
- package/lib/services/config.service.d.ts +4 -0
- package/lib/services/effect.service.d.ts +3 -0
- package/lib/services/error-dialog.service.d.ts +3 -0
- package/lib/services/fixture-pool.service.d.ts +3 -0
- package/lib/services/fixture.service.d.ts +10 -2
- package/lib/services/hotkey-target-exclude.service.d.ts +3 -0
- package/lib/services/intro.service.d.ts +3 -0
- package/lib/services/preset.service.d.ts +7 -2
- package/lib/services/preview-mesh.service.d.ts +3 -0
- package/lib/services/preview.service.d.ts +6 -4
- package/lib/services/project-load.service.d.ts +8 -1
- package/lib/services/project.service.d.ts +5 -3
- package/lib/services/scene.service.d.ts +3 -0
- package/lib/services/timeline.service.d.ts +3 -0
- package/lib/services/user-ensure-login.service.d.ts +3 -0
- package/lib/services/user.service.d.ts +3 -0
- package/lib/services/uuid.service.d.ts +3 -0
- package/lib/services/warning-dialog.service.d.ts +3 -0
- package/lib/timeline/composition-settings/composition-settings.component.d.ts +5 -1
- package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +3 -0
- package/lib/timeline/timeline.component.d.ts +3 -0
- package/lib/user/user-login/user-login.component.d.ts +3 -0
- package/lib/user/user-register/user-register.component.d.ts +3 -0
- package/lib/wait-dialog/wait-dialog.component.d.ts +3 -0
- package/lib/warning-dialog/warning-dialog.component.d.ts +3 -0
- package/package.json +20 -22
- package/rocketshow-designer-1.35.0.tgz +0 -0
- package/bundles/rocketshow-designer.umd.js +0 -9966
- package/bundles/rocketshow-designer.umd.js.map +0 -1
- package/bundles/rocketshow-designer.umd.min.js +0 -17
- package/bundles/rocketshow-designer.umd.min.js.map +0 -1
- package/esm2015/lib/array-sort-pipe.js +0 -28
- package/esm2015/lib/designer.component.js +0 -411
- package/esm2015/lib/designer.module.js +0 -117
- package/esm2015/lib/designer.service.js +0 -16
- package/esm2015/lib/effect/effect-curve/effect-curve.component.js +0 -325
- package/esm2015/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -30
- package/esm2015/lib/effect/effect.component.js +0 -73
- package/esm2015/lib/error-dialog/error-dialog.component.js +0 -42
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -141
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -128
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -163
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -60
- package/esm2015/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -87
- package/esm2015/lib/fixture/fixture-capability/fixture-capability.component.js +0 -97
- package/esm2015/lib/fixture/fixture-channel/fixture-channel.component.js +0 -66
- package/esm2015/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -200
- package/esm2015/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -31
- package/esm2015/lib/fixture/fixture-settings/fixture-settings.component.js +0 -35
- package/esm2015/lib/fixture/fixture.component.js +0 -70
- package/esm2015/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -128
- package/esm2015/lib/fixture-pool/fixture-pool.component.js +0 -331
- package/esm2015/lib/intro/intro.component.js +0 -25
- package/esm2015/lib/master-dimmer/master-dimmer.component.js +0 -41
- package/esm2015/lib/models/cached-fixture-capability.js +0 -9
- package/esm2015/lib/models/cached-fixture-channel.js +0 -7
- package/esm2015/lib/models/cached-fixture.js +0 -6
- package/esm2015/lib/models/color.js +0 -8
- package/esm2015/lib/models/composition.js +0 -46
- package/esm2015/lib/models/effect-curve-profile-channel.js +0 -15
- package/esm2015/lib/models/effect-curve.js +0 -69
- package/esm2015/lib/models/effect-pan-tilt.js +0 -19
- package/esm2015/lib/models/effect.js +0 -12
- package/esm2015/lib/models/fixture-capability-value.js +0 -15
- package/esm2015/lib/models/fixture-capability.js +0 -84
- package/esm2015/lib/models/fixture-channel-value.js +0 -11
- package/esm2015/lib/models/fixture-channel.js +0 -24
- package/esm2015/lib/models/fixture-mode.js +0 -14
- package/esm2015/lib/models/fixture-profile.js +0 -70
- package/esm2015/lib/models/fixture-wheel-slot.js +0 -26
- package/esm2015/lib/models/fixture-wheel.js +0 -15
- package/esm2015/lib/models/fixture.js +0 -40
- package/esm2015/lib/models/preset-region-scene.js +0 -8
- package/esm2015/lib/models/preset.js +0 -56
- package/esm2015/lib/models/project.js +0 -68
- package/esm2015/lib/models/scene-playback-region.js +0 -11
- package/esm2015/lib/models/scene.js +0 -27
- package/esm2015/lib/models/universe.js +0 -11
- package/esm2015/lib/preset/preset-settings/preset-settings.component.js +0 -66
- package/esm2015/lib/preset/preset.component.js +0 -85
- package/esm2015/lib/preview/models/color-changer-3d.js +0 -167
- package/esm2015/lib/preview/models/fixture-3d.js +0 -150
- package/esm2015/lib/preview/models/moving-head-3d.js +0 -233
- package/esm2015/lib/preview/preview.component.js +0 -242
- package/esm2015/lib/project/project-browser/project-browser.component.js +0 -73
- package/esm2015/lib/project/project-import/project-import.component.js +0 -89
- package/esm2015/lib/project/project-save/project-save.component.js +0 -105
- package/esm2015/lib/project/project-share/project-share.component.js +0 -43
- package/esm2015/lib/scene/scene-settings/scene-settings.component.js +0 -52
- package/esm2015/lib/scene/scene.component.js +0 -56
- package/esm2015/lib/services/animation.service.js +0 -17
- package/esm2015/lib/services/config.service.js +0 -28
- package/esm2015/lib/services/effect.service.js +0 -16
- package/esm2015/lib/services/error-dialog.service.js +0 -44
- package/esm2015/lib/services/fixture-pool.service.js +0 -34
- package/esm2015/lib/services/fixture.service.js +0 -443
- package/esm2015/lib/services/hotkey-target-exclude.service.js +0 -26
- package/esm2015/lib/services/intro.service.js +0 -144
- package/esm2015/lib/services/preset.service.js +0 -416
- package/esm2015/lib/services/preview-mesh.service.js +0 -58
- package/esm2015/lib/services/preview.service.js +0 -500
- package/esm2015/lib/services/project-load.service.js +0 -171
- package/esm2015/lib/services/project.service.js +0 -113
- package/esm2015/lib/services/scene.service.js +0 -174
- package/esm2015/lib/services/timeline.service.js +0 -738
- package/esm2015/lib/services/universe.service.js +0 -24
- package/esm2015/lib/services/user-ensure-login.service.js +0 -44
- package/esm2015/lib/services/user.service.js +0 -93
- package/esm2015/lib/services/uuid.service.js +0 -25
- package/esm2015/lib/services/warning-dialog.service.js +0 -43
- package/esm2015/lib/timeline/composition-settings/composition-settings.component.js +0 -197
- package/esm2015/lib/timeline/timeline-grid/timeline-grid.component.js +0 -55
- package/esm2015/lib/timeline/timeline.component.js +0 -239
- package/esm2015/lib/user/user-login/user-login.component.js +0 -64
- package/esm2015/lib/user/user-register/user-register.component.js +0 -89
- package/esm2015/lib/wait-dialog/wait-dialog.component.js +0 -16
- package/esm2015/lib/warning-dialog/warning-dialog.component.js +0 -42
- package/esm2015/public_api.js +0 -7
- package/esm2015/rocketshow-designer.js +0 -61
- package/esm5/lib/array-sort-pipe.js +0 -31
- package/esm5/lib/designer.component.js +0 -468
- package/esm5/lib/designer.module.js +0 -120
- package/esm5/lib/designer.service.js +0 -17
- package/esm5/lib/effect/effect-curve/effect-curve.component.js +0 -386
- package/esm5/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -31
- package/esm5/lib/effect/effect.component.js +0 -75
- package/esm5/lib/error-dialog/error-dialog.component.js +0 -43
- package/esm5/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -159
- package/esm5/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -130
- package/esm5/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -215
- package/esm5/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -61
- package/esm5/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -88
- package/esm5/lib/fixture/fixture-capability/fixture-capability.component.js +0 -130
- package/esm5/lib/fixture/fixture-channel/fixture-channel.component.js +0 -68
- package/esm5/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -306
- package/esm5/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -32
- package/esm5/lib/fixture/fixture-settings/fixture-settings.component.js +0 -36
- package/esm5/lib/fixture/fixture.component.js +0 -71
- package/esm5/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -127
- package/esm5/lib/fixture-pool/fixture-pool.component.js +0 -430
- package/esm5/lib/intro/intro.component.js +0 -26
- package/esm5/lib/master-dimmer/master-dimmer.component.js +0 -42
- package/esm5/lib/models/cached-fixture-capability.js +0 -11
- package/esm5/lib/models/cached-fixture-channel.js +0 -9
- package/esm5/lib/models/cached-fixture.js +0 -8
- package/esm5/lib/models/color.js +0 -10
- package/esm5/lib/models/composition.js +0 -60
- package/esm5/lib/models/effect-curve-profile-channel.js +0 -29
- package/esm5/lib/models/effect-curve.js +0 -95
- package/esm5/lib/models/effect-pan-tilt.js +0 -24
- package/esm5/lib/models/effect.js +0 -14
- package/esm5/lib/models/fixture-capability-value.js +0 -17
- package/esm5/lib/models/fixture-capability.js +0 -86
- package/esm5/lib/models/fixture-channel-value.js +0 -13
- package/esm5/lib/models/fixture-channel.js +0 -38
- package/esm5/lib/models/fixture-mode.js +0 -16
- package/esm5/lib/models/fixture-profile.js +0 -114
- package/esm5/lib/models/fixture-wheel-slot.js +0 -28
- package/esm5/lib/models/fixture-wheel.js +0 -29
- package/esm5/lib/models/fixture.js +0 -42
- package/esm5/lib/models/preset-region-scene.js +0 -10
- package/esm5/lib/models/preset.js +0 -90
- package/esm5/lib/models/project.js +0 -122
- package/esm5/lib/models/scene-playback-region.js +0 -13
- package/esm5/lib/models/scene.js +0 -29
- package/esm5/lib/models/universe.js +0 -13
- package/esm5/lib/preset/preset-settings/preset-settings.component.js +0 -67
- package/esm5/lib/preset/preset.component.js +0 -86
- package/esm5/lib/preview/models/color-changer-3d.js +0 -194
- package/esm5/lib/preview/models/fixture-3d.js +0 -196
- package/esm5/lib/preview/models/moving-head-3d.js +0 -250
- package/esm5/lib/preview/preview.component.js +0 -280
- package/esm5/lib/project/project-browser/project-browser.component.js +0 -77
- package/esm5/lib/project/project-import/project-import.component.js +0 -88
- package/esm5/lib/project/project-save/project-save.component.js +0 -120
- package/esm5/lib/project/project-share/project-share.component.js +0 -44
- package/esm5/lib/scene/scene-settings/scene-settings.component.js +0 -53
- package/esm5/lib/scene/scene.component.js +0 -57
- package/esm5/lib/services/animation.service.js +0 -18
- package/esm5/lib/services/config.service.js +0 -29
- package/esm5/lib/services/effect.service.js +0 -17
- package/esm5/lib/services/error-dialog.service.js +0 -46
- package/esm5/lib/services/fixture-pool.service.js +0 -36
- package/esm5/lib/services/fixture.service.js +0 -643
- package/esm5/lib/services/hotkey-target-exclude.service.js +0 -27
- package/esm5/lib/services/intro.service.js +0 -145
- package/esm5/lib/services/preset.service.js +0 -637
- package/esm5/lib/services/preview-mesh.service.js +0 -61
- package/esm5/lib/services/preview.service.js +0 -754
- package/esm5/lib/services/project-load.service.js +0 -185
- package/esm5/lib/services/project.service.js +0 -127
- package/esm5/lib/services/scene.service.js +0 -251
- package/esm5/lib/services/timeline.service.js +0 -845
- package/esm5/lib/services/universe.service.js +0 -36
- package/esm5/lib/services/user-ensure-login.service.js +0 -45
- package/esm5/lib/services/user.service.js +0 -95
- package/esm5/lib/services/uuid.service.js +0 -26
- package/esm5/lib/services/warning-dialog.service.js +0 -45
- package/esm5/lib/timeline/composition-settings/composition-settings.component.js +0 -206
- package/esm5/lib/timeline/timeline-grid/timeline-grid.component.js +0 -56
- package/esm5/lib/timeline/timeline.component.js +0 -243
- package/esm5/lib/user/user-login/user-login.component.js +0 -66
- package/esm5/lib/user/user-register/user-register.component.js +0 -91
- package/esm5/lib/wait-dialog/wait-dialog.component.js +0 -18
- package/esm5/lib/warning-dialog/warning-dialog.component.js +0 -43
- package/esm5/public_api.js +0 -7
- package/esm5/rocketshow-designer.js +0 -61
- package/fesm2015/rocketshow-designer.js +0 -7945
- package/fesm2015/rocketshow-designer.js.map +0 -1
- package/fesm5/rocketshow-designer.js +0 -9690
- package/fesm5/rocketshow-designer.js.map +0 -1
- package/lib/models/universe.d.ts +0 -8
- package/lib/services/universe.service.d.ts +0 -6
- package/rocketshow-designer-1.32.0.tgz +0 -0
- package/rocketshow-designer.d.ts +0 -60
- package/rocketshow-designer.metadata.json +0 -1
|
@@ -1,637 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata, __values } from "tslib";
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { Injectable } from '@angular/core';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
import { FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';
|
|
6
|
-
import { FixtureCapabilityValue } from '../models/fixture-capability-value';
|
|
7
|
-
import { FixtureChannelValue } from '../models/fixture-channel-value';
|
|
8
|
-
import { Preset } from '../models/preset';
|
|
9
|
-
import { AnimationService } from './animation.service';
|
|
10
|
-
import { ConfigService } from './config.service';
|
|
11
|
-
import { EffectService } from './effect.service';
|
|
12
|
-
import { FixtureService } from './fixture.service';
|
|
13
|
-
import { ProjectService } from './project.service';
|
|
14
|
-
import { UuidService } from './uuid.service';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "./effect.service";
|
|
17
|
-
import * as i2 from "./uuid.service";
|
|
18
|
-
import * as i3 from "./project.service";
|
|
19
|
-
import * as i4 from "./fixture.service";
|
|
20
|
-
import * as i5 from "./config.service";
|
|
21
|
-
import * as i6 from "@angular/common/http";
|
|
22
|
-
import * as i7 from "./animation.service";
|
|
23
|
-
var PresetService = /** @class */ (function () {
|
|
24
|
-
function PresetService(effectService, uuidService, projectService, fixtureService, configService, http, animationService) {
|
|
25
|
-
this.effectService = effectService;
|
|
26
|
-
this.uuidService = uuidService;
|
|
27
|
-
this.projectService = projectService;
|
|
28
|
-
this.fixtureService = fixtureService;
|
|
29
|
-
this.configService = configService;
|
|
30
|
-
this.http = http;
|
|
31
|
-
this.animationService = animationService;
|
|
32
|
-
// fires, when the current preview element has changed (scene/preset)
|
|
33
|
-
this.previewSelectionChanged = new Subject();
|
|
34
|
-
// fires, when the fixture selection has changed
|
|
35
|
-
this.fixtureSelectionChanged = new Subject();
|
|
36
|
-
// fires, when the fixture selection has changed for settings
|
|
37
|
-
this.fixtureSelectionSettingsChanged = new Subject();
|
|
38
|
-
// fires, when the selected color has changed. This is required,
|
|
39
|
-
// because detectChanges is not enough to trigger different components.
|
|
40
|
-
this.fixtureColorChanged = new Subject();
|
|
41
|
-
this.liveChangePending = false;
|
|
42
|
-
}
|
|
43
|
-
PresetService.prototype.getPresetByUuid = function (uuid) {
|
|
44
|
-
var e_1, _a;
|
|
45
|
-
try {
|
|
46
|
-
for (var _b = __values(this.projectService.project.presets), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
47
|
-
var preset = _c.value;
|
|
48
|
-
if (preset.uuid === uuid) {
|
|
49
|
-
return preset;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
54
|
-
finally {
|
|
55
|
-
try {
|
|
56
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
57
|
-
}
|
|
58
|
-
finally { if (e_1) throw e_1.error; }
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
PresetService.prototype.fixtureIsSelected = function (fixture, preset) {
|
|
62
|
-
var e_2, _a;
|
|
63
|
-
// is the passed fixture selected in the passed/currently selected preset?
|
|
64
|
-
if (!preset) {
|
|
65
|
-
if (this.selectedPreset) {
|
|
66
|
-
preset = this.selectedPreset;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
try {
|
|
73
|
-
for (var _b = __values(preset.fixtureUuids), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
74
|
-
var selectedFixtureUuid = _c.value;
|
|
75
|
-
if (selectedFixtureUuid === fixture.uuid) {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
81
|
-
finally {
|
|
82
|
-
try {
|
|
83
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
84
|
-
}
|
|
85
|
-
finally { if (e_2) throw e_2.error; }
|
|
86
|
-
}
|
|
87
|
-
return false;
|
|
88
|
-
};
|
|
89
|
-
PresetService.prototype.switchFixtureSelection = function (fixture) {
|
|
90
|
-
var e_3, _a;
|
|
91
|
-
if (!this.selectedPreset) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
// select all fixtures at the specified start channel or unselect them,
|
|
95
|
-
// if already selected
|
|
96
|
-
if (this.fixtureIsSelected(fixture)) {
|
|
97
|
-
for (var i = this.selectedPreset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
98
|
-
var projectFixture = this.fixtureService.getFixtureByUuid(this.selectedPreset.fixtureUuids[i]);
|
|
99
|
-
if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {
|
|
100
|
-
this.selectedPreset.fixtureUuids.splice(i, 1);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
try {
|
|
106
|
-
for (var _b = __values(this.projectService.project.fixtures), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
107
|
-
var projectFixture = _c.value;
|
|
108
|
-
if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {
|
|
109
|
-
this.selectedPreset.fixtureUuids.push(projectFixture.uuid);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
114
|
-
finally {
|
|
115
|
-
try {
|
|
116
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
117
|
-
}
|
|
118
|
-
finally { if (e_3) throw e_3.error; }
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
PresetService.prototype.selectAllFixtures = function () {
|
|
123
|
-
var e_4, _a;
|
|
124
|
-
if (!this.selectedPreset) {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
try {
|
|
128
|
-
for (var _b = __values(this.projectService.project.fixtures), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
129
|
-
var fixture = _c.value;
|
|
130
|
-
if (!this.fixtureIsSelected(fixture)) {
|
|
131
|
-
this.selectedPreset.fixtureUuids.push(fixture.uuid);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
136
|
-
finally {
|
|
137
|
-
try {
|
|
138
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
139
|
-
}
|
|
140
|
-
finally { if (e_4) throw e_4.error; }
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
PresetService.prototype.selectNoFixtures = function () {
|
|
144
|
-
if (!this.selectedPreset) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
this.selectedPreset.fixtureUuids = [];
|
|
148
|
-
};
|
|
149
|
-
PresetService.prototype.removeDeletedFixtures = function () {
|
|
150
|
-
var e_5, _a;
|
|
151
|
-
try {
|
|
152
|
-
// after changing the configuration in the fixture pool, we might need to
|
|
153
|
-
// delete some fixtures
|
|
154
|
-
for (var _b = __values(this.projectService.project.presets), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
155
|
-
var preset = _c.value;
|
|
156
|
-
for (var i = preset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
157
|
-
var presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);
|
|
158
|
-
if (!presetFixture) {
|
|
159
|
-
preset.fixtureUuids.splice(i, 1);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
165
|
-
finally {
|
|
166
|
-
try {
|
|
167
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
168
|
-
}
|
|
169
|
-
finally { if (e_5) throw e_5.error; }
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
PresetService.prototype.updateFixtureSelection = function () {
|
|
173
|
-
var e_6, _a, e_7, _b;
|
|
174
|
-
try {
|
|
175
|
-
// after changing the configuration in the fixture pool, we might need to
|
|
176
|
-
// select some more fixtures on the same channel as already selected ones
|
|
177
|
-
for (var _c = __values(this.projectService.project.presets), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
178
|
-
var preset = _d.value;
|
|
179
|
-
for (var i = preset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
180
|
-
var presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);
|
|
181
|
-
try {
|
|
182
|
-
for (var _e = (e_7 = void 0, __values(this.projectService.project.fixtures)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
183
|
-
var projectFixture = _f.value;
|
|
184
|
-
if (projectFixture.dmxFirstChannel === presetFixture.dmxFirstChannel && !this.fixtureIsSelected(projectFixture, preset)) {
|
|
185
|
-
preset.fixtureUuids.push(projectFixture.uuid);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
190
|
-
finally {
|
|
191
|
-
try {
|
|
192
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
193
|
-
}
|
|
194
|
-
finally { if (e_7) throw e_7.error; }
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
200
|
-
finally {
|
|
201
|
-
try {
|
|
202
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
203
|
-
}
|
|
204
|
-
finally { if (e_6) throw e_6.error; }
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
PresetService.prototype.deleteCapabilityValue = function (preset, capabilityType, color, wheel, profileUuid) {
|
|
208
|
-
for (var i = 0; i < preset.fixtureCapabilityValues.length; i++) {
|
|
209
|
-
if (this.fixtureService.capabilitiesMatch(preset.fixtureCapabilityValues[i].type, capabilityType, preset.fixtureCapabilityValues[i].color, color, preset.fixtureCapabilityValues[i].wheel, wheel, preset.fixtureCapabilityValues[i].profileUuid, profileUuid)) {
|
|
210
|
-
preset.fixtureCapabilityValues.splice(i, 1);
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
PresetService.prototype.setCapabilityValue = function (preset, capabilityType, valuePercentage, slotNumber, color, wheel, profileUuid) {
|
|
216
|
-
// Delete existant properties with this type and set the new value
|
|
217
|
-
this.deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid);
|
|
218
|
-
var fixtureCapabilityValue = new FixtureCapabilityValue();
|
|
219
|
-
fixtureCapabilityValue.type = capabilityType;
|
|
220
|
-
fixtureCapabilityValue.color = color;
|
|
221
|
-
fixtureCapabilityValue.wheel = wheel;
|
|
222
|
-
fixtureCapabilityValue.valuePercentage = valuePercentage;
|
|
223
|
-
fixtureCapabilityValue.slotNumber = slotNumber;
|
|
224
|
-
fixtureCapabilityValue.profileUuid = profileUuid;
|
|
225
|
-
preset.fixtureCapabilityValues.push(fixtureCapabilityValue);
|
|
226
|
-
};
|
|
227
|
-
PresetService.prototype.getCapabilityValue = function (preset, capabilityType, color, wheel, profileUuid) {
|
|
228
|
-
var e_8, _a;
|
|
229
|
-
try {
|
|
230
|
-
for (var _b = __values(preset.fixtureCapabilityValues), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
231
|
-
var capabilityValue = _c.value;
|
|
232
|
-
if (this.fixtureService.capabilitiesMatch(capabilityValue.type, capabilityType, capabilityValue.color, color, capabilityValue.wheel, wheel, capabilityValue.profileUuid, profileUuid)) {
|
|
233
|
-
return capabilityValue;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
238
|
-
finally {
|
|
239
|
-
try {
|
|
240
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
241
|
-
}
|
|
242
|
-
finally { if (e_8) throw e_8.error; }
|
|
243
|
-
}
|
|
244
|
-
return undefined;
|
|
245
|
-
};
|
|
246
|
-
PresetService.prototype.deleteChannelValue = function (channelName, profileUuid) {
|
|
247
|
-
for (var i = 0; i < this.selectedPreset.fixtureChannelValues.length; i++) {
|
|
248
|
-
if (this.selectedPreset.fixtureChannelValues[i].channelName === channelName &&
|
|
249
|
-
this.selectedPreset.fixtureChannelValues[i].profileUuid === profileUuid) {
|
|
250
|
-
this.selectedPreset.fixtureChannelValues.splice(i, 1);
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
};
|
|
255
|
-
PresetService.prototype.setChannelValue = function (channelName, profileUuid, value) {
|
|
256
|
-
// Delete existant properties with this type and set the new value
|
|
257
|
-
this.deleteChannelValue(channelName, profileUuid);
|
|
258
|
-
var fixtureChannelValue = new FixtureChannelValue();
|
|
259
|
-
fixtureChannelValue.channelName = channelName;
|
|
260
|
-
fixtureChannelValue.profileUuid = profileUuid;
|
|
261
|
-
fixtureChannelValue.value = value;
|
|
262
|
-
this.selectedPreset.fixtureChannelValues.push(fixtureChannelValue);
|
|
263
|
-
};
|
|
264
|
-
PresetService.prototype.getChannelValue = function (channelName, profileUuid) {
|
|
265
|
-
var e_9, _a;
|
|
266
|
-
try {
|
|
267
|
-
for (var _b = __values(this.selectedPreset.fixtureChannelValues), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
268
|
-
var channelValue = _c.value;
|
|
269
|
-
if (channelValue.channelName === channelName && channelValue.profileUuid === profileUuid) {
|
|
270
|
-
return channelValue.value;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
275
|
-
finally {
|
|
276
|
-
try {
|
|
277
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
278
|
-
}
|
|
279
|
-
finally { if (e_9) throw e_9.error; }
|
|
280
|
-
}
|
|
281
|
-
};
|
|
282
|
-
PresetService.prototype.getApproximatedColorWheelCapability = function (preset, cachedChannel) {
|
|
283
|
-
var e_10, _a;
|
|
284
|
-
// return an approximated wheel slot channel capability, if a color or a slot on a different
|
|
285
|
-
// wheel has been selected
|
|
286
|
-
var colorRed;
|
|
287
|
-
var colorGreen;
|
|
288
|
-
var colorBlue;
|
|
289
|
-
var lowestDiff = Number.MAX_VALUE;
|
|
290
|
-
var lowestDiffCapability;
|
|
291
|
-
var capabilityValue;
|
|
292
|
-
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);
|
|
293
|
-
if (capabilityValue) {
|
|
294
|
-
colorRed = 255 * capabilityValue.valuePercentage;
|
|
295
|
-
}
|
|
296
|
-
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);
|
|
297
|
-
if (capabilityValue) {
|
|
298
|
-
colorGreen = 255 * capabilityValue.valuePercentage;
|
|
299
|
-
}
|
|
300
|
-
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);
|
|
301
|
-
if (capabilityValue) {
|
|
302
|
-
colorBlue = 255 * capabilityValue.valuePercentage;
|
|
303
|
-
}
|
|
304
|
-
if (!colorRed && !colorGreen && !colorBlue) {
|
|
305
|
-
// no color found -> search the first color wheel
|
|
306
|
-
// TODO
|
|
307
|
-
}
|
|
308
|
-
if (colorRed !== undefined && colorGreen !== undefined && colorBlue !== undefined) {
|
|
309
|
-
try {
|
|
310
|
-
for (var _b = __values(cachedChannel.capabilities), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
311
|
-
var capability = _c.value;
|
|
312
|
-
if (capability.capability.slotNumber) {
|
|
313
|
-
var mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);
|
|
314
|
-
if (mixedColor) {
|
|
315
|
-
var diff = Math.abs(mixedColor.red - colorRed) + Math.abs(mixedColor.green - colorGreen) + Math.abs(mixedColor.blue - colorBlue);
|
|
316
|
-
if (diff < lowestDiff) {
|
|
317
|
-
lowestDiff = diff;
|
|
318
|
-
lowestDiffCapability = capability;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
325
|
-
finally {
|
|
326
|
-
try {
|
|
327
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
328
|
-
}
|
|
329
|
-
finally { if (e_10) throw e_10.error; }
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
return lowestDiffCapability;
|
|
333
|
-
};
|
|
334
|
-
PresetService.prototype.hasCapabilityType = function (type) {
|
|
335
|
-
var e_11, _a, e_12, _b, e_13, _c;
|
|
336
|
-
try {
|
|
337
|
-
// there is at least one channel with at least one intensity capability
|
|
338
|
-
for (var _d = __values(this.selectedPreset.fixtureUuids), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
339
|
-
var fixtureUuid = _e.value;
|
|
340
|
-
var fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
341
|
-
try {
|
|
342
|
-
for (var _f = (e_12 = void 0, __values(fixture.channels)), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
343
|
-
var channel = _g.value;
|
|
344
|
-
if (channel.channel) {
|
|
345
|
-
try {
|
|
346
|
-
for (var _h = (e_13 = void 0, __values(channel.capabilities)), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
347
|
-
var capability = _j.value;
|
|
348
|
-
if (capability.capability.type === type) {
|
|
349
|
-
return true;
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
354
|
-
finally {
|
|
355
|
-
try {
|
|
356
|
-
if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
|
|
357
|
-
}
|
|
358
|
-
finally { if (e_13) throw e_13.error; }
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
364
|
-
finally {
|
|
365
|
-
try {
|
|
366
|
-
if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
|
|
367
|
-
}
|
|
368
|
-
finally { if (e_12) throw e_12.error; }
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
373
|
-
finally {
|
|
374
|
-
try {
|
|
375
|
-
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
376
|
-
}
|
|
377
|
-
finally { if (e_11) throw e_11.error; }
|
|
378
|
-
}
|
|
379
|
-
return false;
|
|
380
|
-
};
|
|
381
|
-
PresetService.prototype.hasCapabilityDimmer = function () {
|
|
382
|
-
return this.hasCapabilityType(FixtureCapabilityType.Intensity);
|
|
383
|
-
};
|
|
384
|
-
PresetService.prototype.hasCapabilityColor = function () {
|
|
385
|
-
// TODO optionally color temperature and color white (see stairville/mh-100)
|
|
386
|
-
// one of the profiles has a color intensity
|
|
387
|
-
if (this.hasCapabilityType(FixtureCapabilityType.ColorIntensity)) {
|
|
388
|
-
return true;
|
|
389
|
-
}
|
|
390
|
-
return false;
|
|
391
|
-
};
|
|
392
|
-
PresetService.prototype.hasCapabilityColorOrColorWheel = function () {
|
|
393
|
-
// TODO optionally color temperature and color white (see stairville/mh-100)
|
|
394
|
-
var e_14, _a, e_15, _b;
|
|
395
|
-
// one of the profiles has a color intensity
|
|
396
|
-
if (this.hasCapabilityColor()) {
|
|
397
|
-
return true;
|
|
398
|
-
}
|
|
399
|
-
try {
|
|
400
|
-
// a color wheel is involved
|
|
401
|
-
for (var _c = __values(this.selectedPreset.fixtureUuids), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
402
|
-
var fixtureUuid = _d.value;
|
|
403
|
-
var fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
404
|
-
try {
|
|
405
|
-
for (var _e = (e_15 = void 0, __values(fixture.channels)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
406
|
-
var channel = _f.value;
|
|
407
|
-
if (channel.colorWheel) {
|
|
408
|
-
return true;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
413
|
-
finally {
|
|
414
|
-
try {
|
|
415
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
416
|
-
}
|
|
417
|
-
finally { if (e_15) throw e_15.error; }
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
422
|
-
finally {
|
|
423
|
-
try {
|
|
424
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
425
|
-
}
|
|
426
|
-
finally { if (e_14) throw e_14.error; }
|
|
427
|
-
}
|
|
428
|
-
return false;
|
|
429
|
-
};
|
|
430
|
-
PresetService.prototype.hasCapabilityPanTilt = function () {
|
|
431
|
-
var hasPan = false;
|
|
432
|
-
var hasTilt = false;
|
|
433
|
-
// there is at least one pan and one tilt channel
|
|
434
|
-
if (this.hasCapabilityType(FixtureCapabilityType.Pan)) {
|
|
435
|
-
hasPan = true;
|
|
436
|
-
}
|
|
437
|
-
if (this.hasCapabilityType(FixtureCapabilityType.Tilt)) {
|
|
438
|
-
hasTilt = true;
|
|
439
|
-
}
|
|
440
|
-
if (hasPan && hasTilt) {
|
|
441
|
-
return true;
|
|
442
|
-
}
|
|
443
|
-
return false;
|
|
444
|
-
};
|
|
445
|
-
PresetService.prototype.selectPreset = function (index) {
|
|
446
|
-
this.effectService.selectedEffect = undefined;
|
|
447
|
-
this.selectedPreset = this.projectService.project.presets[index];
|
|
448
|
-
this.projectService.project.selectedPresetUuid = this.projectService.project.presets[index].uuid;
|
|
449
|
-
this.autoOpenFirstEffect();
|
|
450
|
-
this.previewSelectionChanged.next();
|
|
451
|
-
this.previewLive();
|
|
452
|
-
};
|
|
453
|
-
PresetService.prototype.autoOpenFirstEffect = function () {
|
|
454
|
-
// open the first effect, if the preset only has one
|
|
455
|
-
if (this.selectedPreset && this.selectedPreset.effects.length === 1) {
|
|
456
|
-
this.effectService.selectedEffect = this.selectedPreset.effects[0];
|
|
457
|
-
}
|
|
458
|
-
};
|
|
459
|
-
PresetService.prototype.addPreset = function (name) {
|
|
460
|
-
var preset = new Preset();
|
|
461
|
-
preset.uuid = this.uuidService.getUuid();
|
|
462
|
-
preset.name = name || 'New Preset';
|
|
463
|
-
// Insert the new preset before the highest currently selected preset
|
|
464
|
-
var highestSelectedPresetIndex = 0;
|
|
465
|
-
for (var i = 0; i < this.projectService.project.presets.length; i++) {
|
|
466
|
-
if (this.selectedPreset === this.projectService.project.presets[i]) {
|
|
467
|
-
highestSelectedPresetIndex = i;
|
|
468
|
-
break;
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
this.projectService.project.presets.splice(highestSelectedPresetIndex, 0, preset);
|
|
472
|
-
this.selectPreset(highestSelectedPresetIndex);
|
|
473
|
-
};
|
|
474
|
-
PresetService.prototype.getSelectedProfiles = function () {
|
|
475
|
-
var e_16, _a;
|
|
476
|
-
var profiles = [];
|
|
477
|
-
if (!this.selectedPreset) {
|
|
478
|
-
return profiles;
|
|
479
|
-
}
|
|
480
|
-
try {
|
|
481
|
-
for (var _b = __values(this.selectedPreset.fixtureUuids), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
482
|
-
var fixtureUuid = _c.value;
|
|
483
|
-
var fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);
|
|
484
|
-
var profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);
|
|
485
|
-
if (profiles.indexOf(profile) < 0) {
|
|
486
|
-
profiles.push(profile);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
catch (e_16_1) { e_16 = { error: e_16_1 }; }
|
|
491
|
-
finally {
|
|
492
|
-
try {
|
|
493
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
494
|
-
}
|
|
495
|
-
finally { if (e_16) throw e_16.error; }
|
|
496
|
-
}
|
|
497
|
-
return profiles;
|
|
498
|
-
};
|
|
499
|
-
PresetService.prototype.getSelectedProfileChannels = function (selectedProfiles) {
|
|
500
|
-
var e_17, _a, e_18, _b;
|
|
501
|
-
var _this = this;
|
|
502
|
-
var availableChannels = new Map();
|
|
503
|
-
var calculatedProfileModes = new Map();
|
|
504
|
-
try {
|
|
505
|
-
for (var selectedProfiles_1 = __values(selectedProfiles), selectedProfiles_1_1 = selectedProfiles_1.next(); !selectedProfiles_1_1.done; selectedProfiles_1_1 = selectedProfiles_1.next()) {
|
|
506
|
-
var profile = selectedProfiles_1_1.value;
|
|
507
|
-
var modes = [];
|
|
508
|
-
try {
|
|
509
|
-
for (var _c = (e_18 = void 0, __values(this.selectedPreset.fixtureUuids)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
510
|
-
var fixtureUuid = _d.value;
|
|
511
|
-
var fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
512
|
-
if (modes.indexOf(fixture.mode) < 0) {
|
|
513
|
-
modes.push(fixture.mode);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
catch (e_18_1) { e_18 = { error: e_18_1 }; }
|
|
518
|
-
finally {
|
|
519
|
-
try {
|
|
520
|
-
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
521
|
-
}
|
|
522
|
-
finally { if (e_18) throw e_18.error; }
|
|
523
|
-
}
|
|
524
|
-
calculatedProfileModes.set(profile, modes);
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
catch (e_17_1) { e_17 = { error: e_17_1 }; }
|
|
528
|
-
finally {
|
|
529
|
-
try {
|
|
530
|
-
if (selectedProfiles_1_1 && !selectedProfiles_1_1.done && (_a = selectedProfiles_1.return)) _a.call(selectedProfiles_1);
|
|
531
|
-
}
|
|
532
|
-
finally { if (e_17) throw e_17.error; }
|
|
533
|
-
}
|
|
534
|
-
// calculate all required channels from the modes
|
|
535
|
-
calculatedProfileModes.forEach(function (modes, profile) {
|
|
536
|
-
var e_19, _a, e_20, _b;
|
|
537
|
-
var profileChannels = [];
|
|
538
|
-
try {
|
|
539
|
-
for (var modes_1 = __values(modes), modes_1_1 = modes_1.next(); !modes_1_1.done; modes_1_1 = modes_1.next()) {
|
|
540
|
-
var mode = modes_1_1.value;
|
|
541
|
-
var channels = _this.fixtureService.getCachedChannels(profile, mode);
|
|
542
|
-
var _loop_1 = function (channel) {
|
|
543
|
-
// only add the channel, if no channel with the same name has already been added
|
|
544
|
-
// (e.g. a fine channel)
|
|
545
|
-
if (channel.channel && !profileChannels.find(function (c) { return c.name === channel.name; })) {
|
|
546
|
-
profileChannels.push(channel);
|
|
547
|
-
}
|
|
548
|
-
};
|
|
549
|
-
try {
|
|
550
|
-
for (var channels_1 = (e_20 = void 0, __values(channels)), channels_1_1 = channels_1.next(); !channels_1_1.done; channels_1_1 = channels_1.next()) {
|
|
551
|
-
var channel = channels_1_1.value;
|
|
552
|
-
_loop_1(channel);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
catch (e_20_1) { e_20 = { error: e_20_1 }; }
|
|
556
|
-
finally {
|
|
557
|
-
try {
|
|
558
|
-
if (channels_1_1 && !channels_1_1.done && (_b = channels_1.return)) _b.call(channels_1);
|
|
559
|
-
}
|
|
560
|
-
finally { if (e_20) throw e_20.error; }
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
catch (e_19_1) { e_19 = { error: e_19_1 }; }
|
|
565
|
-
finally {
|
|
566
|
-
try {
|
|
567
|
-
if (modes_1_1 && !modes_1_1.done && (_a = modes_1.return)) _a.call(modes_1);
|
|
568
|
-
}
|
|
569
|
-
finally { if (e_19) throw e_19.error; }
|
|
570
|
-
}
|
|
571
|
-
availableChannels.set(profile, profileChannels);
|
|
572
|
-
});
|
|
573
|
-
return availableChannels;
|
|
574
|
-
};
|
|
575
|
-
PresetService.prototype.previewLive = function (compositionName, positionMillis) {
|
|
576
|
-
var _this = this;
|
|
577
|
-
if (compositionName === void 0) { compositionName = ''; }
|
|
578
|
-
if (!this.configService.livePreview) {
|
|
579
|
-
return;
|
|
580
|
-
}
|
|
581
|
-
// collect all changes and delay them to not flood the backend
|
|
582
|
-
// (except play events. they need to be delivered always)
|
|
583
|
-
if (this.livePreviewTimer && !compositionName) {
|
|
584
|
-
this.liveChangePending = true;
|
|
585
|
-
return;
|
|
586
|
-
}
|
|
587
|
-
var position = positionMillis;
|
|
588
|
-
if (position === undefined) {
|
|
589
|
-
position = Math.round(this.animationService.timeMillis);
|
|
590
|
-
}
|
|
591
|
-
this.http
|
|
592
|
-
.post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))
|
|
593
|
-
.subscribe();
|
|
594
|
-
this.liveChangePending = false;
|
|
595
|
-
if (!compositionName) {
|
|
596
|
-
this.livePreviewTimer = setTimeout(function () {
|
|
597
|
-
_this.livePreviewTimer = undefined;
|
|
598
|
-
if (_this.liveChangePending) {
|
|
599
|
-
_this.http
|
|
600
|
-
.post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(_this.projectService.project))
|
|
601
|
-
.subscribe();
|
|
602
|
-
}
|
|
603
|
-
}, 50);
|
|
604
|
-
}
|
|
605
|
-
};
|
|
606
|
-
PresetService.prototype.stopPreviewPlay = function () {
|
|
607
|
-
if (!this.configService.livePreview) {
|
|
608
|
-
return;
|
|
609
|
-
}
|
|
610
|
-
this.http.post('stop-preview-play', null).subscribe();
|
|
611
|
-
};
|
|
612
|
-
PresetService.ctorParameters = function () { return [
|
|
613
|
-
{ type: EffectService },
|
|
614
|
-
{ type: UuidService },
|
|
615
|
-
{ type: ProjectService },
|
|
616
|
-
{ type: FixtureService },
|
|
617
|
-
{ type: ConfigService },
|
|
618
|
-
{ type: HttpClient },
|
|
619
|
-
{ type: AnimationService }
|
|
620
|
-
]; };
|
|
621
|
-
PresetService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PresetService_Factory() { return new PresetService(i0.ɵɵinject(i1.EffectService), i0.ɵɵinject(i2.UuidService), i0.ɵɵinject(i3.ProjectService), i0.ɵɵinject(i4.FixtureService), i0.ɵɵinject(i5.ConfigService), i0.ɵɵinject(i6.HttpClient), i0.ɵɵinject(i7.AnimationService)); }, token: PresetService, providedIn: "root" });
|
|
622
|
-
PresetService = __decorate([
|
|
623
|
-
Injectable({
|
|
624
|
-
providedIn: 'root',
|
|
625
|
-
}),
|
|
626
|
-
__metadata("design:paramtypes", [EffectService,
|
|
627
|
-
UuidService,
|
|
628
|
-
ProjectService,
|
|
629
|
-
FixtureService,
|
|
630
|
-
ConfigService,
|
|
631
|
-
HttpClient,
|
|
632
|
-
AnimationService])
|
|
633
|
-
], PresetService);
|
|
634
|
-
return PresetService;
|
|
635
|
-
}());
|
|
636
|
-
export { PresetService };
|
|
637
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Acm9ja2V0c2hvdy9kZXNpZ25lci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUd0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBSzdDO0lBbUJFLHVCQUNVLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLElBQWdCLEVBQ2hCLGdCQUFrQztRQU5sQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFk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RyxLQUFLLENBQUM7UUFFL0IsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO2dCQUNqQyxLQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUNsQyxJQUFJLEtBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDMUIsS0FBSSxDQUFDLElBQUk7eUJBQ04sSUFBSSxDQUFDLHlCQUF5QixHQUFHLFFBQVEsR0FBRyxtQkFBbUIsR0FBRyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3lCQUMvSCxTQUFTLEVBQUUsQ0FBQztpQkFDaEI7WUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDUjtJQUNILENBQUM7SUFFRCx1Q0FBZSxHQUFmO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hELENBQUM7O2dCQWpkd0IsYUFBYTtnQkFDZixXQUFXO2dCQUNSLGNBQWM7Z0JBQ2QsY0FBYztnQkFDZixhQUFhO2dCQUN0QixVQUFVO2dCQUNFLGdCQUFnQjs7O0lBMUJqQyxhQUFhO1FBSHpCLFVBQVUsQ0FBQztZQUNWLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7eUNBcUJ5QixhQUFhO1lBQ2YsV0FBVztZQUNSLGNBQWM7WUFDZCxjQUFjO1lBQ2YsYUFBYTtZQUN0QixVQUFVO1lBQ0UsZ0JBQWdCO09BMUJqQyxhQUFhLENBc2V6Qjt3QkE1ZkQ7Q0E0ZkMsQUF0ZUQsSUFzZUM7U0F0ZVksYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB9IGZyb20gJy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDaGFubmVsIH0gZnJvbSAnLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNoYW5uZWwnO1xuaW1wb3J0IHsgRml4dHVyZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHktdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZU1vZGUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1tb2RlJztcbmltcG9ydCB7IEZpeHR1cmVQcm9maWxlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtcHJvZmlsZSc7XG5pbXBvcnQgeyBQcmVzZXQgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0JztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuL2FuaW1hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVmZmVjdFNlcnZpY2UgfSBmcm9tICcuL2VmZmVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuL3Byb2plY3Quc2VydmljZSc7XG5pbXBvcnQgeyBVdWlkU2VydmljZSB9IGZyb20gJy4vdXVpZC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByZXNldFNlcnZpY2Uge1xuICBzZWxlY3RlZFByZXNldDogUHJlc2V0O1xuXG4gIC8vIGZpcmVzLCB3aGVuIHRoZSBjdXJyZW50IHByZXZpZXcgZWxlbWVudCBoYXMgY2hhbmdlZCAoc2NlbmUvcHJlc2V0KVxuICBwcmV2aWV3U2VsZWN0aW9uQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gZmlyZXMsIHdoZW4gdGhlIGZpeHR1cmUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkXG4gIGZpeHR1cmVTZWxlY3Rpb25DaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBmaXJlcywgd2hlbiB0aGUgZml4dHVyZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQgZm9yIHNldHRpbmdzXG4gIGZpeHR1cmVTZWxlY3Rpb25TZXR0aW5nc0NoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIGZpcmVzLCB3aGVuIHRoZSBzZWxlY3RlZCBjb2xvciBoYXMgY2hhbmdlZC4gVGhpcyBpcyByZXF1aXJlZCxcbiAgLy8gYmVjYXVzZSBkZXRlY3RDaGFuZ2VzIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBkaWZmZXJlbnQgY29tcG9uZW50cy5cbiAgZml4dHVyZUNvbG9yQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgbGl2ZVByZXZpZXdUaW1lcjogYW55O1xuICBsaXZlQ2hhbmdlUGVuZGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWZmZWN0U2VydmljZTogRWZmZWN0U2VydmljZSxcbiAgICBwcml2YXRlIHV1aWRTZXJ2aWNlOiBVdWlkU2VydmljZSxcbiAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGZpeHR1cmVTZXJ2aWNlOiBGaXh0dXJlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgYW5pbWF0aW9uU2VydmljZTogQW5pbWF0aW9uU2VydmljZVxuICApIHt9XG5cbiAgZ2V0UHJlc2V0QnlVdWlkKHV1aWQ6IHN0cmluZyk6IFByZXNldCB7XG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMpIHtcbiAgICAgIGlmIChwcmVzZXQudXVpZCA9PT0gdXVpZCkge1xuICAgICAgICByZXR1cm4gcHJlc2V0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmU6IEZpeHR1cmUsIHByZXNldD86IFByZXNldCk6IGJvb2xlYW4ge1xuICAgIC8vIGlzIHRoZSBwYXNzZWQgZml4dHVyZSBzZWxlY3RlZCBpbiB0aGUgcGFzc2VkL2N1cnJlbnRseSBzZWxlY3RlZCBwcmVzZXQ/XG4gICAgaWYgKCFwcmVzZXQpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgIHByZXNldCA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZWxlY3RlZEZpeHR1cmVVdWlkIG9mIHByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgIGlmIChzZWxlY3RlZEZpeHR1cmVVdWlkID09PSBmaXh0dXJlLnV1aWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoRml4dHVyZVNlbGVjdGlvbihmaXh0dXJlOiBGaXh0dXJlKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0IGFsbCBmaXh0dXJlcyBhdCB0aGUgc3BlY2lmaWVkIHN0YXJ0IGNoYW5uZWwgb3IgdW5zZWxlY3QgdGhlbSxcbiAgICAvLyBpZiBhbHJlYWR5IHNlbGVjdGVkXG4gICAgaWYgKHRoaXMuZml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBwcm9qZWN0Rml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZCh0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkc1tpXSk7XG4gICAgICAgIGlmIChwcm9qZWN0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmUuZG14Rmlyc3RDaGFubmVsKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LmZpeHR1cmVzKSB7XG4gICAgICAgIGlmIChwcm9qZWN0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmUuZG14Rmlyc3RDaGFubmVsKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMucHVzaChwcm9qZWN0Rml4dHVyZS51dWlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbEZpeHR1cmVzKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMpIHtcbiAgICAgIGlmICghdGhpcy5maXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcy5wdXNoKGZpeHR1cmUudXVpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Tm9GaXh0dXJlcygpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcyA9IFtdO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZURlbGV0ZWRGaXh0dXJlcygpIHtcbiAgICAvLyBhZnRlciBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgZml4dHVyZSBwb29sLCB3ZSBtaWdodCBuZWVkIHRvXG4gICAgLy8gZGVsZXRlIHNvbWUgZml4dHVyZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cykge1xuICAgICAgZm9yIChsZXQgaSA9IHByZXNldC5maXh0dXJlVXVpZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcHJlc2V0Rml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcmVzZXQuZml4dHVyZVV1aWRzW2ldKTtcbiAgICAgICAgaWYgKCFwcmVzZXRGaXh0dXJlKSB7XG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVVdWlkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRml4dHVyZVNlbGVjdGlvbigpIHtcbiAgICAvLyBhZnRlciBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgZml4dHVyZSBwb29sLCB3ZSBtaWdodCBuZWVkIHRvXG4gICAgLy8gc2VsZWN0IHNvbWUgbW9yZSBmaXh0dXJlcyBvbiB0aGUgc2FtZSBjaGFubmVsIGFzIGFscmVhZHkgc2VsZWN0ZWQgb25lc1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gcHJlc2V0LmZpeHR1cmVVdWlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKHByZXNldC5maXh0dXJlVXVpZHNbaV0pO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2plY3RGaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcykge1xuICAgICAgICAgIGlmIChwcm9qZWN0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IHByZXNldEZpeHR1cmUuZG14Rmlyc3RDaGFubmVsICYmICF0aGlzLmZpeHR1cmVJc1NlbGVjdGVkKHByb2plY3RGaXh0dXJlLCBwcmVzZXQpKSB7XG4gICAgICAgICAgICBwcmVzZXQuZml4dHVyZVV1aWRzLnB1c2gocHJvamVjdEZpeHR1cmUudXVpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlQ2FwYWJpbGl0eVZhbHVlKFxuICAgIHByZXNldDogUHJlc2V0LFxuICAgIGNhcGFiaWxpdHlUeXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUsXG4gICAgY29sb3I/OiBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLFxuICAgIHdoZWVsPzogc3RyaW5nLFxuICAgIHByb2ZpbGVVdWlkPzogc3RyaW5nXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZml4dHVyZVNlcnZpY2UuY2FwYWJpbGl0aWVzTWF0Y2goXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLnR5cGUsXG4gICAgICAgICAgY2FwYWJpbGl0eVR5cGUsXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLmNvbG9yLFxuICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlc1tpXS53aGVlbCxcbiAgICAgICAgICB3aGVlbCxcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXNbaV0ucHJvZmlsZVV1aWQsXG4gICAgICAgICAgcHJvZmlsZVV1aWRcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDYXBhYmlsaXR5VmFsdWUoXG4gICAgcHJlc2V0OiBQcmVzZXQsXG4gICAgY2FwYWJpbGl0eVR5cGU6IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSxcbiAgICB2YWx1ZVBlcmNlbnRhZ2U6IG51bWJlcixcbiAgICBzbG90TnVtYmVyPzogbnVtYmVyLFxuICAgIGNvbG9yPzogRml4dHVyZUNhcGFiaWxpdHlDb2xvcixcbiAgICB3aGVlbD86IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZD86IHN0cmluZ1xuICApIHtcbiAgICAvLyBEZWxldGUgZXhpc3RhbnQgcHJvcGVydGllcyB3aXRoIHRoaXMgdHlwZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWVcbiAgICB0aGlzLmRlbGV0ZUNhcGFiaWxpdHlWYWx1ZShwcmVzZXQsIGNhcGFiaWxpdHlUeXBlLCBjb2xvciwgd2hlZWwsIHByb2ZpbGVVdWlkKTtcblxuICAgIGNvbnN0IGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUgPSBuZXcgRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSgpO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUudHlwZSA9IGNhcGFiaWxpdHlUeXBlO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUuY29sb3IgPSBjb2xvcjtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLndoZWVsID0gd2hlZWw7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2UgPSB2YWx1ZVBlcmNlbnRhZ2U7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyID0gc2xvdE51bWJlcjtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLnByb2ZpbGVVdWlkID0gcHJvZmlsZVV1aWQ7XG5cbiAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMucHVzaChmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlKTtcbiAgfVxuXG4gIGdldENhcGFiaWxpdHlWYWx1ZShcbiAgICBwcmVzZXQ6IFByZXNldCxcbiAgICBjYXBhYmlsaXR5VHlwZTogRml4dHVyZUNhcGFiaWxpdHlUeXBlLFxuICAgIGNvbG9yPzogRml4dHVyZUNhcGFiaWxpdHlDb2xvcixcbiAgICB3aGVlbD86IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZD86IHN0cmluZ1xuICApOiBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlIHtcbiAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHlWYWx1ZSBvZiBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5jYXBhYmlsaXRpZXNNYXRjaChcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUudHlwZSxcbiAgICAgICAgICBjYXBhYmlsaXR5VHlwZSxcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUuY29sb3IsXG4gICAgICAgICAgY29sb3IsXG4gICAgICAgICAgY2FwYWJpbGl0eVZhbHVlLndoZWVsLFxuICAgICAgICAgIHdoZWVsLFxuICAgICAgICAgIGNhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCxcbiAgICAgICAgICBwcm9maWxlVXVpZFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHlWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGRlbGV0ZUNoYW5uZWxWYWx1ZShjaGFubmVsTmFtZTogc3RyaW5nLCBwcm9maWxlVXVpZDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxOYW1lICYmXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IHByb2ZpbGVVdWlkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDaGFubmVsVmFsdWUoY2hhbm5lbE5hbWU6IHN0cmluZywgcHJvZmlsZVV1aWQ6IHN0cmluZywgdmFsdWU6IG51bWJlcikge1xuICAgIC8vIERlbGV0ZSBleGlzdGFudCBwcm9wZXJ0aWVzIHdpdGggdGhpcyB0eXBlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZVxuICAgIHRoaXMuZGVsZXRlQ2hhbm5lbFZhbHVlKGNoYW5uZWxOYW1lLCBwcm9maWxlVXVpZCk7XG5cbiAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2hhbm5lbE5hbWU7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IHByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIGdldENoYW5uZWxWYWx1ZShjaGFubmVsTmFtZTogc3RyaW5nLCBwcm9maWxlVXVpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzKSB7XG4gICAgICBpZiAoY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsTmFtZSAmJiBjaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPT09IHByb2ZpbGVVdWlkKSB7XG4gICAgICAgIHJldHVybiBjaGFubmVsVmFsdWUudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBwcm94aW1hdGVkQ29sb3JXaGVlbENhcGFiaWxpdHkocHJlc2V0OiBQcmVzZXQsIGNhY2hlZENoYW5uZWw6IENhY2hlZEZpeHR1cmVDaGFubmVsKTogQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHkge1xuICAgIC8vIHJldHVybiBhbiBhcHByb3hpbWF0ZWQgd2hlZWwgc2xvdCBjaGFubmVsIGNhcGFiaWxpdHksIGlmIGEgY29sb3Igb3IgYSBzbG90IG9uIGEgZGlmZmVyZW50XG4gICAgLy8gd2hlZWwgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICBsZXQgY29sb3JSZWQ6IG51bWJlcjtcbiAgICBsZXQgY29sb3JHcmVlbjogbnVtYmVyO1xuICAgIGxldCBjb2xvckJsdWU6IG51bWJlcjtcbiAgICBsZXQgbG93ZXN0RGlmZiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgbGV0IGxvd2VzdERpZmZDYXBhYmlsaXR5OiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eTtcbiAgICBsZXQgY2FwYWJpbGl0eVZhbHVlOiBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlO1xuXG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5nZXRDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuUmVkKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBjb2xvclJlZCA9IDI1NSAqIGNhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2U7XG4gICAgfVxuICAgIGNhcGFiaWxpdHlWYWx1ZSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eVZhbHVlKHByZXNldCwgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LCBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkdyZWVuKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBjb2xvckdyZWVuID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5nZXRDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuQmx1ZSk7XG4gICAgaWYgKGNhcGFiaWxpdHlWYWx1ZSkge1xuICAgICAgY29sb3JCbHVlID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbG9yUmVkICYmICFjb2xvckdyZWVuICYmICFjb2xvckJsdWUpIHtcbiAgICAgIC8vIG5vIGNvbG9yIGZvdW5kIC0+IHNlYXJjaCB0aGUgZmlyc3QgY29sb3Igd2hlZWxcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICBpZiAoY29sb3JSZWQgIT09IHVuZGVmaW5lZCAmJiBjb2xvckdyZWVuICE9PSB1bmRlZmluZWQgJiYgY29sb3JCbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICBpZiAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBtaXhlZENvbG9yID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRNaXhlZFdoZWVsU2xvdENvbG9yKGNhcGFiaWxpdHkud2hlZWwsIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5zbG90TnVtYmVyKTtcbiAgICAgICAgICBpZiAobWl4ZWRDb2xvcikge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9XG4gICAgICAgICAgICAgIE1hdGguYWJzKG1peGVkQ29sb3IucmVkIC0gY29sb3JSZWQpICsgTWF0aC5hYnMobWl4ZWRDb2xvci5ncmVlbiAtIGNvbG9yR3JlZW4pICsgTWF0aC5hYnMobWl4ZWRDb2xvci5ibHVlIC0gY29sb3JCbHVlKTtcblxuICAgICAgICAgICAgaWYgKGRpZmYgPCBsb3dlc3REaWZmKSB7XG4gICAgICAgICAgICAgIGxvd2VzdERpZmYgPSBkaWZmO1xuICAgICAgICAgICAgICBsb3dlc3REaWZmQ2FwYWJpbGl0eSA9IGNhcGFiaWxpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvd2VzdERpZmZDYXBhYmlsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDYXBhYmlsaXR5VHlwZSh0eXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUpOiBib29sZWFuIHtcbiAgICAvLyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhbm5lbCB3aXRoIGF0IGxlYXN0IG9uZSBpbnRlbnNpdHkgY2FwYWJpbGl0eVxuICAgIGZvciAoY29uc3QgZml4dHVyZVV1aWQgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQoZml4dHVyZVV1aWQpO1xuICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgaWYgKGNoYW5uZWwuY2hhbm5lbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBjaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgaWYgKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYXNDYXBhYmlsaXR5RGltbWVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkpO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eUNvbG9yKCk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gb3B0aW9uYWxseSBjb2xvciB0ZW1wZXJhdHVyZSBhbmQgY29sb3Igd2hpdGUgKHNlZSBzdGFpcnZpbGxlL21oLTEwMClcblxuICAgIC8vIG9uZSBvZiB0aGUgcHJvZmlsZXMgaGFzIGEgY29sb3IgaW50ZW5zaXR5XG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eUNvbG9yT3JDb2xvcldoZWVsKCk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gb3B0aW9uYWxseSBjb2xvciB0ZW1wZXJhdHVyZSBhbmQgY29sb3Igd2hpdGUgKHNlZSBzdGFpcnZpbGxlL21oLTEwMClcblxuICAgIC8vIG9uZSBvZiB0aGUgcHJvZmlsZXMgaGFzIGEgY29sb3IgaW50ZW5zaXR5XG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eUNvbG9yKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGEgY29sb3Igd2hlZWwgaXMgaW52b2x2ZWRcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmVVdWlkIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzKSB7XG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDYWNoZWRGaXh0dXJlQnlVdWlkKGZpeHR1cmVVdWlkKTtcbiAgICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBmaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgIGlmIChjaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHlQYW5UaWx0KCk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNQYW4gPSBmYWxzZTtcbiAgICBsZXQgaGFzVGlsdCA9IGZhbHNlO1xuXG4gICAgLy8gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBhbiBhbmQgb25lIHRpbHQgY2hhbm5lbFxuICAgIGlmICh0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5QYW4pKSB7XG4gICAgICBoYXNQYW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5UaWx0KSkge1xuICAgICAgaGFzVGlsdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhbiAmJiBoYXNUaWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZWxlY3RQcmVzZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZWZmZWN0U2VydmljZS5zZWxlY3RlZEVmZmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbaW5kZXhdO1xuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zZWxlY3RlZFByZXNldFV1aWQgPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1tpbmRleF0udXVpZDtcbiAgICB0aGlzLmF1dG9PcGVuRmlyc3RFZmZlY3QoKTtcbiAgICB0aGlzLnByZXZpZXdTZWxlY3Rpb25DaGFuZ2VkLm5leHQoKTtcbiAgICB0aGlzLnByZXZpZXdMaXZlKCk7XG4gIH1cblxuICBhdXRvT3BlbkZpcnN0RWZmZWN0KCkge1xuICAgIC8vIG9wZW4gdGhlIGZpcnN0IGVmZmVjdCwgaWYgdGhlIHByZXNldCBvbmx5IGhhcyBvbmVcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByZXNldCAmJiB0aGlzLnNlbGVjdGVkUHJlc2V0LmVmZmVjdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmVmZmVjdFNlcnZpY2Uuc2VsZWN0ZWRFZmZlY3QgPSB0aGlzLnNlbGVjdGVkUHJlc2V0LmVmZmVjdHNbMF07XG4gICAgfVxuICB9XG5cbiAgYWRkUHJlc2V0KG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVzZXQ6IFByZXNldCA9IG5ldyBQcmVzZXQoKTtcbiAgICBwcmVzZXQudXVpZCA9IHRoaXMudXVpZFNlcnZpY2UuZ2V0VXVpZCgpO1xuICAgIHByZXNldC5uYW1lID0gbmFtZSB8fCAnTmV3IFByZXNldCc7XG5cbiAgICAvLyBJbnNlcnQgdGhlIG5ldyBwcmVzZXQgYmVmb3JlIHRoZSBoaWdoZXN0IGN1cnJlbnRseSBzZWxlY3RlZCBwcmVzZXRcbiAgICBsZXQgaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcmVzZXQgPT09IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzW2ldKSB7XG4gICAgICAgIGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMuc3BsaWNlKGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4LCAwLCBwcmVzZXQpO1xuICAgIHRoaXMuc2VsZWN0UHJlc2V0KGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4KTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkUHJvZmlsZXMoKSB7XG4gICAgY29uc3QgcHJvZmlsZXM6IEZpeHR1cmVQcm9maWxlW10gPSBbXTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuIHByb2ZpbGVzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZml4dHVyZVV1aWQgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQoZml4dHVyZVV1aWQpO1xuICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0UHJvZmlsZUJ5VXVpZChmaXh0dXJlLnByb2ZpbGVVdWlkKTtcblxuICAgICAgaWYgKHByb2ZpbGVzLmluZGV4T2YocHJvZmlsZSkgPCAwKSB7XG4gICAgICAgIHByb2ZpbGVzLnB1c2gocHJvZmlsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2ZpbGVzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRQcm9maWxlQ2hhbm5lbHMoc2VsZWN0ZWRQcm9maWxlczogRml4dHVyZVByb2ZpbGVbXSkge1xuICAgIGNvbnN0IGF2YWlsYWJsZUNoYW5uZWxzOiBNYXA8Rml4dHVyZVByb2ZpbGUsIENhY2hlZEZpeHR1cmVDaGFubmVsW10+ID0gbmV3IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWxbXT4oKTtcblxuICAgIGNvbnN0IGNhbGN1bGF0ZWRQcm9maWxlTW9kZXMgPSBuZXcgTWFwPEZpeHR1cmVQcm9maWxlLCBGaXh0dXJlTW9kZVtdPigpO1xuICAgIGZvciAoY29uc3QgcHJvZmlsZSBvZiBzZWxlY3RlZFByb2ZpbGVzKSB7XG4gICAgICBjb25zdCBtb2RlczogRml4dHVyZU1vZGVbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmaXh0dXJlVXVpZCBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcykge1xuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDYWNoZWRGaXh0dXJlQnlVdWlkKGZpeHR1cmVVdWlkKTtcbiAgICAgICAgaWYgKG1vZGVzLmluZGV4T2YoZml4dHVyZS5tb2RlKSA8IDApIHtcbiAgICAgICAgICBtb2Rlcy5wdXNoKGZpeHR1cmUubW9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGN1bGF0ZWRQcm9maWxlTW9kZXMuc2V0KHByb2ZpbGUsIG1vZGVzKTtcbiAgICB9XG5cbiAgICAvLyBjYWxjdWxhdGUgYWxsIHJlcXVpcmVkIGNoYW5uZWxzIGZyb20gdGhlIG1vZGVzXG4gICAgY2FsY3VsYXRlZFByb2ZpbGVNb2Rlcy5mb3JFYWNoKChtb2RlczogRml4dHVyZU1vZGVbXSwgcHJvZmlsZTogRml4dHVyZVByb2ZpbGUpID0+IHtcbiAgICAgIGNvbnN0IHByb2ZpbGVDaGFubmVsczogQ2FjaGVkRml4dHVyZUNoYW5uZWxbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBtb2RlIG9mIG1vZGVzKSB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxzID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDYWNoZWRDaGFubmVscyhwcm9maWxlLCBtb2RlKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7XG4gICAgICAgICAgLy8gb25seSBhZGQgdGhlIGNoYW5uZWwsIGlmIG5vIGNoYW5uZWwgd2l0aCB0aGUgc2FtZSBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcbiAgICAgICAgICAvLyAoZS5nLiBhIGZpbmUgY2hhbm5lbClcbiAgICAgICAgICBpZiAoY2hhbm5lbC5jaGFubmVsICYmICFwcm9maWxlQ2hhbm5lbHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjaGFubmVsLm5hbWUpKSB7XG4gICAgICAgICAgICBwcm9maWxlQ2hhbm5lbHMucHVzaChjaGFubmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF2YWlsYWJsZUNoYW5uZWxzLnNldChwcm9maWxlLCBwcm9maWxlQ2hhbm5lbHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF2YWlsYWJsZUNoYW5uZWxzO1xuICB9XG5cbiAgcHJldmlld0xpdmUoY29tcG9zaXRpb25OYW1lOiBzdHJpbmcgPSAnJywgcG9zaXRpb25NaWxsaXM/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnU2VydmljZS5saXZlUHJldmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNvbGxlY3QgYWxsIGNoYW5nZXMgYW5kIGRlbGF5IHRoZW0gdG8gbm90IGZsb29kIHRoZSBiYWNrZW5kXG4gICAgLy8gKGV4Y2VwdCBwbGF5IGV2ZW50cy4gdGhleSBuZWVkIHRvIGJlIGRlbGl2ZXJlZCBhbHdheXMpXG4gICAgaWYgKHRoaXMubGl2ZVByZXZpZXdUaW1lciAmJiAhY29tcG9zaXRpb25OYW1lKSB7XG4gICAgICB0aGlzLmxpdmVDaGFuZ2VQZW5kaW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcG9zaXRpb24gPSBwb3NpdGlvbk1pbGxpcztcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwb3NpdGlvbiA9IE1hdGgucm91bmQodGhpcy5hbmltYXRpb25TZXJ2aWNlLnRpbWVNaWxsaXMpO1xuICAgIH1cblxuICAgIHRoaXMuaHR0cFxuICAgICAgLnBvc3QoJ3ByZXZpZXc/cG9zaXRpb25NaWxsaXM9JyArIHBvc2l0aW9uICsgJyZjb21wb3NpdGlvbk5hbWU9JyArIGNvbXBvc2l0aW9uTmFtZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0KSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubGl2ZUNoYW5nZVBlbmRpbmcgPSBmYWxzZTtcblxuICAgIGlmICghY29tcG9zaXRpb25OYW1lKSB7XG4gICAgICB0aGlzLmxpdmVQcmV2aWV3VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5saXZlUHJldmlld1RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5saXZlQ2hhbmdlUGVuZGluZykge1xuICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3QoJ3ByZXZpZXc/cG9zaXRpb25NaWxsaXM9JyArIHBvc2l0aW9uICsgJyZjb21wb3NpdGlvbk5hbWU9JyArIGNvbXBvc2l0aW9uTmFtZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgfSwgNTApO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BQcmV2aWV3UGxheSgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnU2VydmljZS5saXZlUHJldmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaHR0cC5wb3N0KCdzdG9wLXByZXZpZXctcGxheScsIG51bGwpLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
|