@rocketshow/designer 1.31.0 → 1.33.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/esm2022/lib/array-sort-pipe.mjs +30 -0
- package/esm2022/lib/designer.component.mjs +605 -0
- package/esm2022/lib/designer.module.mjs +183 -0
- package/esm2022/lib/designer.service.mjs +14 -0
- package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +569 -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 +160 -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 +138 -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 +589 -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-mode.mjs +14 -0
- package/esm2022/lib/models/fixture-profile.mjs +70 -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-region-scene.mjs +8 -0
- package/esm2022/lib/models/preset.mjs +56 -0
- package/esm2022/lib/models/project.mjs +68 -0
- package/esm2022/lib/models/scene-playback-region.mjs +11 -0
- package/esm2022/lib/models/scene.mjs +27 -0
- package/esm2022/lib/models/universe.mjs +11 -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 +167 -0
- package/esm2022/lib/preview/models/fixture-3d.mjs +150 -0
- package/esm2022/lib/preview/models/moving-head-3d.mjs +243 -0
- package/esm2022/lib/preview/preview.component.mjs +212 -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 +27 -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 +431 -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 +400 -0
- package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
- package/esm2022/lib/services/preview.service.mjs +496 -0
- package/esm2022/lib/services/project-load.service.mjs +149 -0
- package/esm2022/lib/services/project.service.mjs +97 -0
- package/esm2022/lib/services/scene.service.mjs +164 -0
- package/esm2022/lib/services/timeline.service.mjs +726 -0
- package/esm2022/lib/services/universe.service.mjs +23 -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 +334 -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 +10626 -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 +15 -12
- package/lib/designer.module.d.ts +54 -0
- package/lib/designer.service.d.ts +3 -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 +3 -0
- 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/preset/preset-settings/preset-settings.component.d.ts +3 -0
- package/lib/preset/preset.component.d.ts +3 -0
- 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 +3 -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 +3 -0
- 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 +3 -0
- package/lib/services/preview-mesh.service.d.ts +3 -0
- package/lib/services/preview.service.d.ts +4 -0
- package/lib/services/project-load.service.d.ts +3 -0
- package/lib/services/project.service.d.ts +3 -0
- package/lib/services/scene.service.d.ts +3 -0
- package/lib/services/timeline.service.d.ts +4 -1
- package/lib/services/universe.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 +3 -0
- 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.33.0.tgz +0 -0
- package/bundles/rocketshow-designer.umd.js +0 -9947
- 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/rocketshow-designer-1.31.0.tgz +0 -0
- package/rocketshow-designer.d.ts +0 -60
- package/rocketshow-designer.metadata.json +0 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { ConfigService } from './config.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./config.service";
|
|
6
|
+
export class IntroService {
|
|
7
|
+
constructor(configService) {
|
|
8
|
+
this.configService = configService;
|
|
9
|
+
this.showIntro = false;
|
|
10
|
+
this.activeStep = 'start';
|
|
11
|
+
this.positionTopPercentage = 50;
|
|
12
|
+
this.positionLeftPercentage = 50;
|
|
13
|
+
this.stylePosition = 'top: calc(50% - 150px); left: calc(50% - 200px);';
|
|
14
|
+
this.stepChanged = new Subject();
|
|
15
|
+
}
|
|
16
|
+
refresh() {
|
|
17
|
+
// called, as soon as the config has been updated
|
|
18
|
+
if (this.configService.intro) {
|
|
19
|
+
if (localStorage.getItem('showIntro')) {
|
|
20
|
+
this.showIntro = localStorage.getItem('showIntro') === 'true';
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.showIntro = true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
setShowIntro(value) {
|
|
28
|
+
this.showIntro = value;
|
|
29
|
+
if (value) {
|
|
30
|
+
localStorage.setItem('showIntro', 'true');
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
localStorage.setItem('showIntro', 'false');
|
|
34
|
+
}
|
|
35
|
+
this.stepChanged.next();
|
|
36
|
+
}
|
|
37
|
+
reset() {
|
|
38
|
+
this.activeStep = 'start';
|
|
39
|
+
this.setShowIntro(true);
|
|
40
|
+
this.stepChanged.next();
|
|
41
|
+
}
|
|
42
|
+
showStep(step) {
|
|
43
|
+
if (!this.showIntro) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
if (this.activeStep !== step) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
next() {
|
|
52
|
+
switch (this.activeStep) {
|
|
53
|
+
case 'start':
|
|
54
|
+
this.activeStep = 'preview';
|
|
55
|
+
this.positionTopPercentage = 60;
|
|
56
|
+
this.positionLeftPercentage = 40;
|
|
57
|
+
break;
|
|
58
|
+
case 'preview':
|
|
59
|
+
this.activeStep = 'fixtures';
|
|
60
|
+
this.positionTopPercentage = 40;
|
|
61
|
+
this.positionLeftPercentage = 30;
|
|
62
|
+
break;
|
|
63
|
+
case 'fixtures':
|
|
64
|
+
this.activeStep = 'presets';
|
|
65
|
+
this.positionTopPercentage = 30;
|
|
66
|
+
this.positionLeftPercentage = 50;
|
|
67
|
+
break;
|
|
68
|
+
case 'presets':
|
|
69
|
+
this.activeStep = 'capabilities';
|
|
70
|
+
this.positionTopPercentage = 50;
|
|
71
|
+
this.positionLeftPercentage = 60;
|
|
72
|
+
break;
|
|
73
|
+
case 'capabilities':
|
|
74
|
+
this.activeStep = 'scenes';
|
|
75
|
+
this.positionTopPercentage = 50;
|
|
76
|
+
this.positionLeftPercentage = 40;
|
|
77
|
+
break;
|
|
78
|
+
case 'scenes':
|
|
79
|
+
this.activeStep = 'timeline';
|
|
80
|
+
this.positionTopPercentage = 40;
|
|
81
|
+
this.positionLeftPercentage = 50;
|
|
82
|
+
break;
|
|
83
|
+
case 'timeline':
|
|
84
|
+
this.activeStep = 'finish';
|
|
85
|
+
this.positionTopPercentage = 50;
|
|
86
|
+
this.positionLeftPercentage = 50;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
this.stepChanged.next();
|
|
90
|
+
}
|
|
91
|
+
back() {
|
|
92
|
+
switch (this.activeStep) {
|
|
93
|
+
case 'preview':
|
|
94
|
+
this.activeStep = 'start';
|
|
95
|
+
this.positionTopPercentage = 50;
|
|
96
|
+
this.positionLeftPercentage = 50;
|
|
97
|
+
break;
|
|
98
|
+
case 'fixtures':
|
|
99
|
+
this.activeStep = 'preview';
|
|
100
|
+
this.positionTopPercentage = 60;
|
|
101
|
+
this.positionLeftPercentage = 40;
|
|
102
|
+
break;
|
|
103
|
+
case 'presets':
|
|
104
|
+
this.activeStep = 'fixtures';
|
|
105
|
+
this.positionTopPercentage = 30;
|
|
106
|
+
this.positionLeftPercentage = 50;
|
|
107
|
+
break;
|
|
108
|
+
case 'capabilities':
|
|
109
|
+
this.activeStep = 'presets';
|
|
110
|
+
this.positionTopPercentage = 40;
|
|
111
|
+
this.positionLeftPercentage = 30;
|
|
112
|
+
break;
|
|
113
|
+
case 'scenes':
|
|
114
|
+
this.activeStep = 'capabilities';
|
|
115
|
+
this.positionTopPercentage = 50;
|
|
116
|
+
this.positionLeftPercentage = 60;
|
|
117
|
+
break;
|
|
118
|
+
case 'timeline':
|
|
119
|
+
this.activeStep = 'scenes';
|
|
120
|
+
this.positionTopPercentage = 50;
|
|
121
|
+
this.positionLeftPercentage = 40;
|
|
122
|
+
break;
|
|
123
|
+
case 'finish':
|
|
124
|
+
this.activeStep = 'timeline';
|
|
125
|
+
this.positionTopPercentage = 40;
|
|
126
|
+
this.positionLeftPercentage = 50;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
this.stepChanged.next();
|
|
130
|
+
}
|
|
131
|
+
static { this.ɵfac = function IntroService_Factory(t) { return new (t || IntroService)(i0.ɵɵinject(i1.ConfigService)); }; }
|
|
132
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: IntroService, factory: IntroService.ɵfac, providedIn: 'root' }); }
|
|
133
|
+
}
|
|
134
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntroService, [{
|
|
135
|
+
type: Injectable,
|
|
136
|
+
args: [{
|
|
137
|
+
providedIn: 'root',
|
|
138
|
+
}]
|
|
139
|
+
}], () => [{ type: i1.ConfigService }], null); })();
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvc2VydmljZXMvaW50cm8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFLakQsTUFBTSxPQUFPLFlBQVk7SUFRdkIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFQaEQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixlQUFVLEdBQUcsT0FBTyxDQUFDO1FBQ3JCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMzQiwyQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxrREFBa0QsQ0FBQztRQUNuRSxnQkFBVyxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRUUsQ0FBQztJQUVwRCxPQUFPO1FBQ0wsaURBQWlEO1FBQ2pELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLE1BQU0sQ0FBQztZQUNoRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZ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MUIsQ0FBQzs2RUFuSVUsWUFBWTt1RUFBWixZQUFZLFdBQVosWUFBWSxtQkFGWCxNQUFNOztpRkFFUCxZQUFZO2NBSHhCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEludHJvU2VydmljZSB7XG4gIHNob3dJbnRybyA9IGZhbHNlO1xuICBhY3RpdmVTdGVwID0gJ3N0YXJ0JztcbiAgcG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNTA7XG4gIHBvc2l0aW9uTGVmdFBlcmNlbnRhZ2UgPSA1MDtcbiAgc3R5bGVQb3NpdGlvbiA9ICd0b3A6IGNhbGMoNTAlIC0gMTUwcHgpOyBsZWZ0OiBjYWxjKDUwJSAtIDIwMHB4KTsnO1xuICBzdGVwQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlKSB7fVxuXG4gIHJlZnJlc2goKSB7XG4gICAgLy8gY2FsbGVkLCBhcyBzb29uIGFzIHRoZSBjb25maWcgaGFzIGJlZW4gdXBkYXRlZFxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaW50cm8pIHtcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2hvd0ludHJvJykpIHtcbiAgICAgICAgdGhpcy5zaG93SW50cm8gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2hvd0ludHJvJykgPT09ICd0cnVlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0ludHJvID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRTaG93SW50cm8odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dJbnRybyA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Nob3dJbnRybycsICd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzaG93SW50cm8nLCAnZmFsc2UnKTtcbiAgICB9XG4gICAgdGhpcy5zdGVwQ2hhbmdlZC5uZXh0KCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAnc3RhcnQnO1xuICAgIHRoaXMuc2V0U2hvd0ludHJvKHRydWUpO1xuICAgIHRoaXMuc3RlcENoYW5nZWQubmV4dCgpO1xuICB9XG5cbiAgc2hvd1N0ZXAoc3RlcDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3dJbnRybykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZVN0ZXAgIT09IHN0ZXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgc3dpdGNoICh0aGlzLmFjdGl2ZVN0ZXApIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ3ByZXZpZXcnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uVG9wUGVyY2VudGFnZSA9IDYwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFBlcmNlbnRhZ2UgPSA0MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcmV2aWV3JzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ2ZpeHR1cmVzJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA0MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gMzA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZml4dHVyZXMnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAncHJlc2V0cyc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gMzA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDUwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ByZXNldHMnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAnY2FwYWJpbGl0aWVzJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA1MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNjA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2FwYWJpbGl0aWVzJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ3NjZW5lcyc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDQwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NjZW5lcyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU3RlcCA9ICd0aW1lbGluZSc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNDA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDUwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWVsaW5lJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ2ZpbmlzaCc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDUwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnN0ZXBDaGFuZ2VkLm5leHQoKTtcbiAgfVxuXG4gIGJhY2soKSB7XG4gICAgc3dpdGNoICh0aGlzLmFjdGl2ZVN0ZXApIHtcbiAgICAgIGNhc2UgJ3ByZXZpZXcnOlxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSAnc3RhcnQnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uVG9wUGVyY2VudGFnZSA9IDUwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFBlcmNlbnRhZ2UgPSA1MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmaXh0dXJlcyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU3RlcCA9ICdwcmV2aWV3JztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA2MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gNDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncHJlc2V0cyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU3RlcCA9ICdmaXh0dXJlcyc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gMzA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDUwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhcGFiaWxpdGllcyc6XG4gICAgICAgIHRoaXMuYWN0aXZlU3RlcCA9ICdwcmVzZXRzJztcbiAgICAgICAgdGhpcy5wb3NpdGlvblRvcFBlcmNlbnRhZ2UgPSA0MDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRQZXJjZW50YWdlID0gMzA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2NlbmVzJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ2NhcGFiaWxpdGllcyc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDYwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWVsaW5lJzpcbiAgICAgICAgdGhpcy5hY3RpdmVTdGVwID0gJ3NjZW5lcyc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNTA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDQwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZpbmlzaCc6XG4gICAgICAgIHRoaXMuYWN0aXZlU3RlcCA9ICd0aW1lbGluZSc7XG4gICAgICAgIHRoaXMucG9zaXRpb25Ub3BQZXJjZW50YWdlID0gNDA7XG4gICAgICAgIHRoaXMucG9zaXRpb25MZWZ0UGVyY2VudGFnZSA9IDUwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnN0ZXBDaGFuZ2VkLm5leHQoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';
|
|
5
|
+
import { FixtureCapabilityValue } from '../models/fixture-capability-value';
|
|
6
|
+
import { FixtureChannelValue } from '../models/fixture-channel-value';
|
|
7
|
+
import { Preset } from '../models/preset';
|
|
8
|
+
import { AnimationService } from './animation.service';
|
|
9
|
+
import { ConfigService } from './config.service';
|
|
10
|
+
import { EffectService } from './effect.service';
|
|
11
|
+
import { FixtureService } from './fixture.service';
|
|
12
|
+
import { ProjectService } from './project.service';
|
|
13
|
+
import { UuidService } from './uuid.service';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "./effect.service";
|
|
16
|
+
import * as i2 from "./uuid.service";
|
|
17
|
+
import * as i3 from "./project.service";
|
|
18
|
+
import * as i4 from "./fixture.service";
|
|
19
|
+
import * as i5 from "./config.service";
|
|
20
|
+
import * as i6 from "@angular/common/http";
|
|
21
|
+
import * as i7 from "./animation.service";
|
|
22
|
+
export class PresetService {
|
|
23
|
+
constructor(effectService, uuidService, projectService, fixtureService, configService, http, animationService) {
|
|
24
|
+
this.effectService = effectService;
|
|
25
|
+
this.uuidService = uuidService;
|
|
26
|
+
this.projectService = projectService;
|
|
27
|
+
this.fixtureService = fixtureService;
|
|
28
|
+
this.configService = configService;
|
|
29
|
+
this.http = http;
|
|
30
|
+
this.animationService = animationService;
|
|
31
|
+
// fires, when the current preview element has changed (scene/preset)
|
|
32
|
+
this.previewSelectionChanged = new Subject();
|
|
33
|
+
// fires, when the fixture selection has changed
|
|
34
|
+
this.fixtureSelectionChanged = new Subject();
|
|
35
|
+
// fires, when the fixture selection has changed for settings
|
|
36
|
+
this.fixtureSelectionSettingsChanged = new Subject();
|
|
37
|
+
// fires, when the selected color has changed. This is required,
|
|
38
|
+
// because detectChanges is not enough to trigger different components.
|
|
39
|
+
this.fixtureColorChanged = new Subject();
|
|
40
|
+
this.liveChangePending = false;
|
|
41
|
+
}
|
|
42
|
+
getPresetByUuid(uuid) {
|
|
43
|
+
for (const preset of this.projectService.project.presets) {
|
|
44
|
+
if (preset.uuid === uuid) {
|
|
45
|
+
return preset;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
fixtureIsSelected(fixture, preset) {
|
|
50
|
+
// is the passed fixture selected in the passed/currently selected preset?
|
|
51
|
+
if (!preset) {
|
|
52
|
+
if (this.selectedPreset) {
|
|
53
|
+
preset = this.selectedPreset;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
for (const selectedFixtureUuid of preset.fixtureUuids) {
|
|
60
|
+
if (selectedFixtureUuid === fixture.uuid) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
switchFixtureSelection(fixture) {
|
|
67
|
+
if (!this.selectedPreset) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// select all fixtures at the specified start channel or unselect them,
|
|
71
|
+
// if already selected
|
|
72
|
+
if (this.fixtureIsSelected(fixture)) {
|
|
73
|
+
for (let i = this.selectedPreset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
74
|
+
const projectFixture = this.fixtureService.getFixtureByUuid(this.selectedPreset.fixtureUuids[i]);
|
|
75
|
+
if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {
|
|
76
|
+
this.selectedPreset.fixtureUuids.splice(i, 1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
for (const projectFixture of this.projectService.project.fixtures) {
|
|
82
|
+
if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {
|
|
83
|
+
this.selectedPreset.fixtureUuids.push(projectFixture.uuid);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
selectAllFixtures() {
|
|
89
|
+
if (!this.selectedPreset) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
for (const fixture of this.projectService.project.fixtures) {
|
|
93
|
+
if (!this.fixtureIsSelected(fixture)) {
|
|
94
|
+
this.selectedPreset.fixtureUuids.push(fixture.uuid);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
selectNoFixtures() {
|
|
99
|
+
if (!this.selectedPreset) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this.selectedPreset.fixtureUuids = [];
|
|
103
|
+
}
|
|
104
|
+
removeDeletedFixtures() {
|
|
105
|
+
// after changing the configuration in the fixture pool, we might need to
|
|
106
|
+
// delete some fixtures
|
|
107
|
+
for (const preset of this.projectService.project.presets) {
|
|
108
|
+
for (let i = preset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
109
|
+
const presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);
|
|
110
|
+
if (!presetFixture) {
|
|
111
|
+
preset.fixtureUuids.splice(i, 1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
updateFixtureSelection() {
|
|
117
|
+
// after changing the configuration in the fixture pool, we might need to
|
|
118
|
+
// select some more fixtures on the same channel as already selected ones
|
|
119
|
+
for (const preset of this.projectService.project.presets) {
|
|
120
|
+
for (let i = preset.fixtureUuids.length - 1; i >= 0; i--) {
|
|
121
|
+
const presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);
|
|
122
|
+
for (const projectFixture of this.projectService.project.fixtures) {
|
|
123
|
+
if (projectFixture.dmxFirstChannel === presetFixture.dmxFirstChannel && !this.fixtureIsSelected(projectFixture, preset)) {
|
|
124
|
+
preset.fixtureUuids.push(projectFixture.uuid);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid) {
|
|
131
|
+
for (let i = 0; i < preset.fixtureCapabilityValues.length; i++) {
|
|
132
|
+
if (this.fixtureService.capabilitiesMatch(preset.fixtureCapabilityValues[i].type, capabilityType, preset.fixtureCapabilityValues[i].color, color, preset.fixtureCapabilityValues[i].wheel, wheel, preset.fixtureCapabilityValues[i].profileUuid, profileUuid)) {
|
|
133
|
+
preset.fixtureCapabilityValues.splice(i, 1);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
setCapabilityValue(preset, capabilityType, valuePercentage, slotNumber, color, wheel, profileUuid) {
|
|
139
|
+
// Delete existant properties with this type and set the new value
|
|
140
|
+
this.deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid);
|
|
141
|
+
const fixtureCapabilityValue = new FixtureCapabilityValue();
|
|
142
|
+
fixtureCapabilityValue.type = capabilityType;
|
|
143
|
+
fixtureCapabilityValue.color = color;
|
|
144
|
+
fixtureCapabilityValue.wheel = wheel;
|
|
145
|
+
fixtureCapabilityValue.valuePercentage = valuePercentage;
|
|
146
|
+
fixtureCapabilityValue.slotNumber = slotNumber;
|
|
147
|
+
fixtureCapabilityValue.profileUuid = profileUuid;
|
|
148
|
+
preset.fixtureCapabilityValues.push(fixtureCapabilityValue);
|
|
149
|
+
}
|
|
150
|
+
getCapabilityValue(preset, capabilityType, color, wheel, profileUuid) {
|
|
151
|
+
for (const capabilityValue of preset.fixtureCapabilityValues) {
|
|
152
|
+
if (this.fixtureService.capabilitiesMatch(capabilityValue.type, capabilityType, capabilityValue.color, color, capabilityValue.wheel, wheel, capabilityValue.profileUuid, profileUuid)) {
|
|
153
|
+
return capabilityValue;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
deleteChannelValue(channelName, profileUuid) {
|
|
159
|
+
for (let i = 0; i < this.selectedPreset.fixtureChannelValues.length; i++) {
|
|
160
|
+
if (this.selectedPreset.fixtureChannelValues[i].channelName === channelName &&
|
|
161
|
+
this.selectedPreset.fixtureChannelValues[i].profileUuid === profileUuid) {
|
|
162
|
+
this.selectedPreset.fixtureChannelValues.splice(i, 1);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
setChannelValue(channelName, profileUuid, value) {
|
|
168
|
+
// Delete existant properties with this type and set the new value
|
|
169
|
+
this.deleteChannelValue(channelName, profileUuid);
|
|
170
|
+
const fixtureChannelValue = new FixtureChannelValue();
|
|
171
|
+
fixtureChannelValue.channelName = channelName;
|
|
172
|
+
fixtureChannelValue.profileUuid = profileUuid;
|
|
173
|
+
fixtureChannelValue.value = value;
|
|
174
|
+
this.selectedPreset.fixtureChannelValues.push(fixtureChannelValue);
|
|
175
|
+
}
|
|
176
|
+
getChannelValue(channelName, profileUuid) {
|
|
177
|
+
for (const channelValue of this.selectedPreset.fixtureChannelValues) {
|
|
178
|
+
if (channelValue.channelName === channelName && channelValue.profileUuid === profileUuid) {
|
|
179
|
+
return channelValue.value;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
getApproximatedColorWheelCapability(preset, cachedChannel) {
|
|
184
|
+
// return an approximated wheel slot channel capability, if a color or a slot on a different
|
|
185
|
+
// wheel has been selected
|
|
186
|
+
let colorRed;
|
|
187
|
+
let colorGreen;
|
|
188
|
+
let colorBlue;
|
|
189
|
+
let lowestDiff = Number.MAX_VALUE;
|
|
190
|
+
let lowestDiffCapability;
|
|
191
|
+
let capabilityValue;
|
|
192
|
+
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);
|
|
193
|
+
if (capabilityValue) {
|
|
194
|
+
colorRed = 255 * capabilityValue.valuePercentage;
|
|
195
|
+
}
|
|
196
|
+
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);
|
|
197
|
+
if (capabilityValue) {
|
|
198
|
+
colorGreen = 255 * capabilityValue.valuePercentage;
|
|
199
|
+
}
|
|
200
|
+
capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);
|
|
201
|
+
if (capabilityValue) {
|
|
202
|
+
colorBlue = 255 * capabilityValue.valuePercentage;
|
|
203
|
+
}
|
|
204
|
+
if (!colorRed && !colorGreen && !colorBlue) {
|
|
205
|
+
// no color found -> search the first color wheel
|
|
206
|
+
// TODO
|
|
207
|
+
}
|
|
208
|
+
if (colorRed !== undefined && colorGreen !== undefined && colorBlue !== undefined) {
|
|
209
|
+
for (const capability of cachedChannel.capabilities) {
|
|
210
|
+
if (capability.capability.slotNumber) {
|
|
211
|
+
const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);
|
|
212
|
+
if (mixedColor) {
|
|
213
|
+
const diff = Math.abs(mixedColor.red - colorRed) + Math.abs(mixedColor.green - colorGreen) + Math.abs(mixedColor.blue - colorBlue);
|
|
214
|
+
if (diff < lowestDiff) {
|
|
215
|
+
lowestDiff = diff;
|
|
216
|
+
lowestDiffCapability = capability;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return lowestDiffCapability;
|
|
223
|
+
}
|
|
224
|
+
hasCapabilityType(type) {
|
|
225
|
+
// there is at least one channel with at least one intensity capability
|
|
226
|
+
for (const fixtureUuid of this.selectedPreset.fixtureUuids) {
|
|
227
|
+
const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
228
|
+
for (const channel of fixture.channels) {
|
|
229
|
+
if (channel.channel) {
|
|
230
|
+
for (const capability of channel.capabilities) {
|
|
231
|
+
if (capability.capability.type === type) {
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
hasCapabilityDimmer() {
|
|
241
|
+
return this.hasCapabilityType(FixtureCapabilityType.Intensity);
|
|
242
|
+
}
|
|
243
|
+
hasCapabilityColor() {
|
|
244
|
+
// TODO optionally color temperature and color white (see stairville/mh-100)
|
|
245
|
+
// one of the profiles has a color intensity
|
|
246
|
+
if (this.hasCapabilityType(FixtureCapabilityType.ColorIntensity)) {
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
hasCapabilityColorOrColorWheel() {
|
|
252
|
+
// TODO optionally color temperature and color white (see stairville/mh-100)
|
|
253
|
+
// one of the profiles has a color intensity
|
|
254
|
+
if (this.hasCapabilityColor()) {
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
// a color wheel is involved
|
|
258
|
+
for (const fixtureUuid of this.selectedPreset.fixtureUuids) {
|
|
259
|
+
const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
260
|
+
for (const channel of fixture.channels) {
|
|
261
|
+
if (channel.colorWheel) {
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
hasCapabilityPanTilt() {
|
|
269
|
+
let hasPan = false;
|
|
270
|
+
let hasTilt = false;
|
|
271
|
+
// there is at least one pan and one tilt channel
|
|
272
|
+
if (this.hasCapabilityType(FixtureCapabilityType.Pan)) {
|
|
273
|
+
hasPan = true;
|
|
274
|
+
}
|
|
275
|
+
if (this.hasCapabilityType(FixtureCapabilityType.Tilt)) {
|
|
276
|
+
hasTilt = true;
|
|
277
|
+
}
|
|
278
|
+
if (hasPan && hasTilt) {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
selectPreset(index) {
|
|
284
|
+
this.effectService.selectedEffect = undefined;
|
|
285
|
+
this.selectedPreset = this.projectService.project.presets[index];
|
|
286
|
+
this.projectService.project.selectedPresetUuid = this.projectService.project.presets[index].uuid;
|
|
287
|
+
this.autoOpenFirstEffect();
|
|
288
|
+
this.previewSelectionChanged.next();
|
|
289
|
+
this.previewLive();
|
|
290
|
+
}
|
|
291
|
+
autoOpenFirstEffect() {
|
|
292
|
+
// open the first effect, if the preset only has one
|
|
293
|
+
if (this.selectedPreset && this.selectedPreset.effects.length === 1) {
|
|
294
|
+
this.effectService.selectedEffect = this.selectedPreset.effects[0];
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
addPreset(name) {
|
|
298
|
+
const preset = new Preset();
|
|
299
|
+
preset.uuid = this.uuidService.getUuid();
|
|
300
|
+
preset.name = name || 'New Preset';
|
|
301
|
+
// Insert the new preset before the highest currently selected preset
|
|
302
|
+
let highestSelectedPresetIndex = 0;
|
|
303
|
+
for (let i = 0; i < this.projectService.project.presets.length; i++) {
|
|
304
|
+
if (this.selectedPreset === this.projectService.project.presets[i]) {
|
|
305
|
+
highestSelectedPresetIndex = i;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
this.projectService.project.presets.splice(highestSelectedPresetIndex, 0, preset);
|
|
310
|
+
this.selectPreset(highestSelectedPresetIndex);
|
|
311
|
+
}
|
|
312
|
+
getSelectedProfiles() {
|
|
313
|
+
const profiles = [];
|
|
314
|
+
if (!this.selectedPreset) {
|
|
315
|
+
return profiles;
|
|
316
|
+
}
|
|
317
|
+
for (const fixtureUuid of this.selectedPreset.fixtureUuids) {
|
|
318
|
+
const fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);
|
|
319
|
+
const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);
|
|
320
|
+
if (profiles.indexOf(profile) < 0) {
|
|
321
|
+
profiles.push(profile);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return profiles;
|
|
325
|
+
}
|
|
326
|
+
getSelectedProfileChannels(selectedProfiles) {
|
|
327
|
+
const availableChannels = new Map();
|
|
328
|
+
const calculatedProfileModes = new Map();
|
|
329
|
+
for (const profile of selectedProfiles) {
|
|
330
|
+
const modes = [];
|
|
331
|
+
for (const fixtureUuid of this.selectedPreset.fixtureUuids) {
|
|
332
|
+
const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
|
|
333
|
+
if (modes.indexOf(fixture.mode) < 0) {
|
|
334
|
+
modes.push(fixture.mode);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
calculatedProfileModes.set(profile, modes);
|
|
338
|
+
}
|
|
339
|
+
// calculate all required channels from the modes
|
|
340
|
+
calculatedProfileModes.forEach((modes, profile) => {
|
|
341
|
+
const profileChannels = [];
|
|
342
|
+
for (const mode of modes) {
|
|
343
|
+
const channels = this.fixtureService.getCachedChannels(profile, mode);
|
|
344
|
+
for (const channel of channels) {
|
|
345
|
+
// only add the channel, if no channel with the same name has already been added
|
|
346
|
+
// (e.g. a fine channel)
|
|
347
|
+
if (channel.channel && !profileChannels.find((c) => c.name === channel.name)) {
|
|
348
|
+
profileChannels.push(channel);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
availableChannels.set(profile, profileChannels);
|
|
353
|
+
});
|
|
354
|
+
return availableChannels;
|
|
355
|
+
}
|
|
356
|
+
previewLive(compositionName = '', positionMillis) {
|
|
357
|
+
if (!this.configService.livePreview) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
// collect all changes and delay them to not flood the backend
|
|
361
|
+
// (except play events. they need to be delivered always)
|
|
362
|
+
if (this.livePreviewTimer && !compositionName) {
|
|
363
|
+
this.liveChangePending = true;
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
let position = positionMillis;
|
|
367
|
+
if (position === undefined) {
|
|
368
|
+
position = Math.round(this.animationService.timeMillis);
|
|
369
|
+
}
|
|
370
|
+
this.http
|
|
371
|
+
.post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))
|
|
372
|
+
.subscribe();
|
|
373
|
+
this.liveChangePending = false;
|
|
374
|
+
if (!compositionName) {
|
|
375
|
+
this.livePreviewTimer = setTimeout(() => {
|
|
376
|
+
this.livePreviewTimer = undefined;
|
|
377
|
+
if (this.liveChangePending) {
|
|
378
|
+
this.http
|
|
379
|
+
.post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))
|
|
380
|
+
.subscribe();
|
|
381
|
+
}
|
|
382
|
+
}, 50);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
stopPreviewPlay() {
|
|
386
|
+
if (!this.configService.livePreview) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
this.http.post('stop-preview-play', null).subscribe();
|
|
390
|
+
}
|
|
391
|
+
static { this.ɵfac = function PresetService_Factory(t) { return new (t || 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)); }; }
|
|
392
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PresetService, factory: PresetService.ɵfac, providedIn: 'root' }); }
|
|
393
|
+
}
|
|
394
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PresetService, [{
|
|
395
|
+
type: Injectable,
|
|
396
|
+
args: [{
|
|
397
|
+
providedIn: 'root',
|
|
398
|
+
}]
|
|
399
|
+
}], () => [{ type: i1.EffectService }, { type: i2.UuidService }, { type: i3.ProjectService }, { type: i4.FixtureService }, { type: i5.ConfigService }, { type: i6.HttpClient }, { type: i7.AnimationService }], null); })();
|
|
400
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3NlcnZpY2VzL3ByZXNldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQUs3QyxNQUFNLE9BQU8sYUFBYTtJQW1CeEIsWUFDVSxhQUE0QixFQUM1QixXQUF3QixFQUN4QixjQUE4QixFQUM5QixjQUE4QixFQUM5QixhQUE0QixFQUM1QixJQUFnQixFQUNoQixnQkFBa0M7UUFObEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxX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LENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4RCxDQUFDOzhFQXJlVSxhQUFhO3VFQUFiLGFBQWEsV0FBYixhQUFhLG1CQUZaLE1BQU07O2lGQUVQLGFBQWE7Y0FIekIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5IH0gZnJvbSAnLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNoYW5uZWwgfSBmcm9tICcuLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2hhbm5lbCc7XG5pbXBvcnQgeyBGaXh0dXJlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlDb2xvciwgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eS12YWx1ZSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2hhbm5lbFZhbHVlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2hhbm5lbC12YWx1ZSc7XG5pbXBvcnQgeyBGaXh0dXJlTW9kZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLW1vZGUnO1xuaW1wb3J0IHsgRml4dHVyZVByb2ZpbGUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1wcm9maWxlJztcbmltcG9ydCB7IFByZXNldCB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4vYW5pbWF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWZmZWN0U2VydmljZSB9IGZyb20gJy4vZWZmZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFV1aWRTZXJ2aWNlIH0gZnJvbSAnLi91dWlkLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJlc2V0U2VydmljZSB7XG4gIHNlbGVjdGVkUHJlc2V0OiBQcmVzZXQ7XG5cbiAgLy8gZmlyZXMsIHdoZW4gdGhlIGN1cnJlbnQgcHJldmlldyBlbGVtZW50IGhhcyBjaGFuZ2VkIChzY2VuZS9wcmVzZXQpXG4gIHByZXZpZXdTZWxlY3Rpb25DaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBmaXJlcywgd2hlbiB0aGUgZml4dHVyZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWRcbiAgZml4dHVyZVNlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIGZpcmVzLCB3aGVuIHRoZSBmaXh0dXJlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZCBmb3Igc2V0dGluZ3NcbiAgZml4dHVyZVNlbGVjdGlvblNldHRpbmdzQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gZmlyZXMsIHdoZW4gdGhlIHNlbGVjdGVkIGNvbG9yIGhhcyBjaGFuZ2VkLiBUaGlzIGlzIHJlcXVpcmVkLFxuICAvLyBiZWNhdXNlIGRldGVjdENoYW5nZXMgaXMgbm90IGVub3VnaCB0byB0cmlnZ2VyIGRpZmZlcmVudCBjb21wb25lbnRzLlxuICBmaXh0dXJlQ29sb3JDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBsaXZlUHJldmlld1RpbWVyOiBhbnk7XG4gIGxpdmVDaGFuZ2VQZW5kaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlZmZlY3RTZXJ2aWNlOiBFZmZlY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXVpZFNlcnZpY2U6IFV1aWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TZXJ2aWNlOiBBbmltYXRpb25TZXJ2aWNlXG4gICkge31cblxuICBnZXRQcmVzZXRCeVV1aWQodXVpZDogc3RyaW5nKTogUHJlc2V0IHtcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cykge1xuICAgICAgaWYgKHByZXNldC51dWlkID09PSB1dWlkKSB7XG4gICAgICAgIHJldHVybiBwcmVzZXQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZTogRml4dHVyZSwgcHJlc2V0PzogUHJlc2V0KTogYm9vbGVhbiB7XG4gICAgLy8gaXMgdGhlIHBhc3NlZCBmaXh0dXJlIHNlbGVjdGVkIGluIHRoZSBwYXNzZWQvY3VycmVudGx5IHNlbGVjdGVkIHByZXNldD9cbiAgICBpZiAoIXByZXNldCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgICAgcHJlc2V0ID0gdGhpcy5zZWxlY3RlZFByZXNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlbGVjdGVkRml4dHVyZVV1aWQgb2YgcHJlc2V0LmZpeHR1cmVVdWlkcykge1xuICAgICAgaWYgKHNlbGVjdGVkRml4dHVyZVV1aWQgPT09IGZpeHR1cmUudXVpZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2hGaXh0dXJlU2VsZWN0aW9uKGZpeHR1cmU6IEZpeHR1cmUpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgYWxsIGZpeHR1cmVzIGF0IHRoZSBzcGVjaWZpZWQgc3RhcnQgY2hhbm5lbCBvciB1bnNlbGVjdCB0aGVtLFxuICAgIC8vIGlmIGFscmVhZHkgc2VsZWN0ZWRcbiAgICBpZiAodGhpcy5maXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlKSkge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3RGaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzW2ldKTtcbiAgICAgICAgaWYgKHByb2plY3RGaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCA9PT0gZml4dHVyZS5kbXhGaXJzdENoYW5uZWwpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBwcm9qZWN0Rml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMpIHtcbiAgICAgICAgaWYgKHByb2plY3RGaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCA9PT0gZml4dHVyZS5kbXhGaXJzdENoYW5uZWwpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcy5wdXNoKHByb2plY3RGaXh0dXJlLnV1aWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsRml4dHVyZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcykge1xuICAgICAgaWYgKCF0aGlzLmZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzLnB1c2goZml4dHVyZS51dWlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3ROb0ZpeHR1cmVzKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzID0gW107XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRGVsZXRlZEZpeHR1cmVzKCkge1xuICAgIC8vIGFmdGVyIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBmaXh0dXJlIHBvb2wsIHdlIG1pZ2h0IG5lZWQgdG9cbiAgICAvLyBkZWxldGUgc29tZSBmaXh0dXJlc1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gcHJlc2V0LmZpeHR1cmVVdWlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKHByZXNldC5maXh0dXJlVXVpZHNbaV0pO1xuICAgICAgICBpZiAoIXByZXNldEZpeHR1cmUpIHtcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZVV1aWRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGaXh0dXJlU2VsZWN0aW9uKCkge1xuICAgIC8vIGFmdGVyIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBmaXh0dXJlIHBvb2wsIHdlIG1pZ2h0IG5lZWQgdG9cbiAgICAvLyBzZWxlY3Qgc29tZSBtb3JlIGZpeHR1cmVzIG9uIHRoZSBzYW1lIGNoYW5uZWwgYXMgYWxyZWFkeSBzZWxlY3RlZCBvbmVzXG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSBwcmVzZXQuZml4dHVyZVV1aWRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHByZXNldEZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJlc2V0LmZpeHR1cmVVdWlkc1tpXSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LmZpeHR1cmVzKSB7XG4gICAgICAgICAgaWYgKHByb2plY3RGaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCA9PT0gcHJlc2V0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgJiYgIXRoaXMuZml4dHVyZUlzU2VsZWN0ZWQocHJvamVjdEZpeHR1cmUsIHByZXNldCkpIHtcbiAgICAgICAgICAgIHByZXNldC5maXh0dXJlVXVpZHMucHVzaChwcm9qZWN0Rml4dHVyZS51dWlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZWxldGVDYXBhYmlsaXR5VmFsdWUoXG4gICAgcHJlc2V0OiBQcmVzZXQsXG4gICAgY2FwYWJpbGl0eVR5cGU6IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSxcbiAgICBjb2xvcj86IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsXG4gICAgd2hlZWw/OiBzdHJpbmcsXG4gICAgcHJvZmlsZVV1aWQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5jYXBhYmlsaXRpZXNNYXRjaChcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXNbaV0udHlwZSxcbiAgICAgICAgICBjYXBhYmlsaXR5VHlwZSxcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXNbaV0uY29sb3IsXG4gICAgICAgICAgY29sb3IsXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLndoZWVsLFxuICAgICAgICAgIHdoZWVsLFxuICAgICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlc1tpXS5wcm9maWxlVXVpZCxcbiAgICAgICAgICBwcm9maWxlVXVpZFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldENhcGFiaWxpdHlWYWx1ZShcbiAgICBwcmVzZXQ6IFByZXNldCxcbiAgICBjYXBhYmlsaXR5VHlwZTogRml4dHVyZUNhcGFiaWxpdHlUeXBlLFxuICAgIHZhbHVlUGVyY2VudGFnZTogbnVtYmVyLFxuICAgIHNsb3ROdW1iZXI/OiBudW1iZXIsXG4gICAgY29sb3I/OiBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLFxuICAgIHdoZWVsPzogc3RyaW5nLFxuICAgIHByb2ZpbGVVdWlkPzogc3RyaW5nXG4gICkge1xuICAgIC8vIERlbGV0ZSBleGlzdGFudCBwcm9wZXJ0aWVzIHdpdGggdGhpcyB0eXBlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZVxuICAgIHRoaXMuZGVsZXRlQ2FwYWJpbGl0eVZhbHVlKHByZXNldCwgY2FwYWJpbGl0eVR5cGUsIGNvbG9yLCB3aGVlbCwgcHJvZmlsZVV1aWQpO1xuXG4gICAgY29uc3QgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZSA9IG5ldyBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlKCk7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS50eXBlID0gY2FwYWJpbGl0eVR5cGU7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS5jb2xvciA9IGNvbG9yO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUud2hlZWwgPSB3aGVlbDtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZSA9IHZhbHVlUGVyY2VudGFnZTtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLnNsb3ROdW1iZXIgPSBzbG90TnVtYmVyO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUucHJvZmlsZVV1aWQgPSBwcm9maWxlVXVpZDtcblxuICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcy5wdXNoKGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUpO1xuICB9XG5cbiAgZ2V0Q2FwYWJpbGl0eVZhbHVlKFxuICAgIHByZXNldDogUHJlc2V0LFxuICAgIGNhcGFiaWxpdHlUeXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUsXG4gICAgY29sb3I/OiBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLFxuICAgIHdoZWVsPzogc3RyaW5nLFxuICAgIHByb2ZpbGVVdWlkPzogc3RyaW5nXG4gICk6IEZpeHR1cmVDYXBhYmlsaXR5VmFsdWUge1xuICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eVZhbHVlIG9mIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgIGNhcGFiaWxpdHlWYWx1ZS50eXBlLFxuICAgICAgICAgIGNhcGFiaWxpdHlUeXBlLFxuICAgICAgICAgIGNhcGFiaWxpdHlWYWx1ZS5jb2xvcixcbiAgICAgICAgICBjb2xvcixcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUud2hlZWwsXG4gICAgICAgICAgd2hlZWwsXG4gICAgICAgICAgY2FwYWJpbGl0eVZhbHVlLnByb2ZpbGVVdWlkLFxuICAgICAgICAgIHByb2ZpbGVVdWlkXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FwYWJpbGl0eVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZGVsZXRlQ2hhbm5lbFZhbHVlKGNoYW5uZWxOYW1lOiBzdHJpbmcsIHByb2ZpbGVVdWlkOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlc1tpXS5jaGFubmVsTmFtZSA9PT0gY2hhbm5lbE5hbWUgJiZcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlc1tpXS5wcm9maWxlVXVpZCA9PT0gcHJvZmlsZVV1aWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldENoYW5uZWxWYWx1ZShjaGFubmVsTmFtZTogc3RyaW5nLCBwcm9maWxlVXVpZDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgLy8gRGVsZXRlIGV4aXN0YW50IHByb3BlcnRpZXMgd2l0aCB0aGlzIHR5cGUgYW5kIHNldCB0aGUgbmV3IHZhbHVlXG4gICAgdGhpcy5kZWxldGVDaGFubmVsVmFsdWUoY2hhbm5lbE5hbWUsIHByb2ZpbGVVdWlkKTtcblxuICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gcHJvZmlsZVV1aWQ7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlcy5wdXNoKGZpeHR1cmVDaGFubmVsVmFsdWUpO1xuICB9XG5cbiAgZ2V0Q2hhbm5lbFZhbHVlKGNoYW5uZWxOYW1lOiBzdHJpbmcsIHByb2ZpbGVVdWlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgIGlmIChjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxOYW1lICYmIGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9PT0gcHJvZmlsZVV1aWQpIHtcbiAgICAgICAgcmV0dXJuIGNoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBcHByb3hpbWF0ZWRDb2xvcldoZWVsQ2FwYWJpbGl0eShwcmVzZXQ6IFByZXNldCwgY2FjaGVkQ2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWwpOiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB7XG4gICAgLy8gcmV0dXJuIGFuIGFwcHJveGltYXRlZCB3aGVlbCBzbG90IGNoYW5uZWwgY2FwYWJpbGl0eSwgaWYgYSBjb2xvciBvciBhIHNsb3Qgb24gYSBkaWZmZXJlbnRcbiAgICAvLyB3aGVlbCBoYXMgYmVlbiBzZWxlY3RlZFxuICAgIGxldCBjb2xvclJlZDogbnVtYmVyO1xuICAgIGxldCBjb2xvckdyZWVuOiBudW1iZXI7XG4gICAgbGV0IGNvbG9yQmx1ZTogbnVtYmVyO1xuICAgIGxldCBsb3dlc3REaWZmID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICBsZXQgbG93ZXN0RGlmZkNhcGFiaWxpdHk6IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5O1xuICAgIGxldCBjYXBhYmlsaXR5VmFsdWU6IEZpeHR1cmVDYXBhYmlsaXR5VmFsdWU7XG5cbiAgICBjYXBhYmlsaXR5VmFsdWUgPSB0aGlzLmdldENhcGFiaWxpdHlWYWx1ZShwcmVzZXQsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSwgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5SZWQpO1xuICAgIGlmIChjYXBhYmlsaXR5VmFsdWUpIHtcbiAgICAgIGNvbG9yUmVkID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5nZXRDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuR3JlZW4pO1xuICAgIGlmIChjYXBhYmlsaXR5VmFsdWUpIHtcbiAgICAgIGNvbG9yR3JlZW4gPSAyNTUgKiBjYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgIH1cbiAgICBjYXBhYmlsaXR5VmFsdWUgPSB0aGlzLmdldENhcGFiaWxpdHlWYWx1ZShwcmVzZXQsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSwgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5CbHVlKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBjb2xvckJsdWUgPSAyNTUgKiBjYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgIH1cblxuICAgIGlmICghY29sb3JSZWQgJiYgIWNvbG9yR3JlZW4gJiYgIWNvbG9yQmx1ZSkge1xuICAgICAgLy8gbm8gY29sb3IgZm91bmQgLT4gc2VhcmNoIHRoZSBmaXJzdCBjb2xvciB3aGVlbFxuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIGlmIChjb2xvclJlZCAhPT0gdW5kZWZpbmVkICYmIGNvbG9yR3JlZW4gIT09IHVuZGVmaW5lZCAmJiBjb2xvckJsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNhY2hlZENoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIGlmIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuc2xvdE51bWJlcikge1xuICAgICAgICAgIGNvbnN0IG1peGVkQ29sb3IgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldE1peGVkV2hlZWxTbG90Q29sb3IoY2FwYWJpbGl0eS53aGVlbCwgY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIpO1xuICAgICAgICAgIGlmIChtaXhlZENvbG9yKSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID1cbiAgICAgICAgICAgICAgTWF0aC5hYnMobWl4ZWRDb2xvci5yZWQgLSBjb2xvclJlZCkgKyBNYXRoLmFicyhtaXhlZENvbG9yLmdyZWVuIC0gY29sb3JHcmVlbikgKyBNYXRoLmFicyhtaXhlZENvbG9yLmJsdWUgLSBjb2xvckJsdWUpO1xuXG4gICAgICAgICAgICBpZiAoZGlmZiA8IGxvd2VzdERpZmYpIHtcbiAgICAgICAgICAgICAgbG93ZXN0RGlmZiA9IGRpZmY7XG4gICAgICAgICAgICAgIGxvd2VzdERpZmZDYXBhYmlsaXR5ID0gY2FwYWJpbGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG93ZXN0RGlmZkNhcGFiaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIGhhc0NhcGFiaWxpdHlUeXBlKHR5cGU6IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSk6IGJvb2xlYW4ge1xuICAgIC8vIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFubmVsIHdpdGggYXQgbGVhc3Qgb25lIGludGVuc2l0eSBjYXBhYmlsaXR5XG4gICAgZm9yIChjb25zdCBmaXh0dXJlVXVpZCBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcykge1xuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2FjaGVkRml4dHVyZUJ5VXVpZChmaXh0dXJlVXVpZCk7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgZml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBpZiAoY2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICBpZiAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHlEaW1tZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLkludGVuc2l0eSk7XG4gIH1cblxuICBoYXNDYXBhYmlsaXR5Q29sb3IoKTogYm9vbGVhbiB7XG4gICAgLy8gVE9ETyBvcHRpb25hbGx5IGNvbG9yIHRlbXBlcmF0dXJlIGFuZCBjb2xvciB3aGl0ZSAoc2VlIHN0YWlydmlsbGUvbWgtMTAwKVxuXG4gICAgLy8gb25lIG9mIHRoZSBwcm9maWxlcyBoYXMgYSBjb2xvciBpbnRlbnNpdHlcbiAgICBpZiAodGhpcy5oYXNDYXBhYmlsaXR5VHlwZShGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYXNDYXBhYmlsaXR5Q29sb3JPckNvbG9yV2hlZWwoKTogYm9vbGVhbiB7XG4gICAgLy8gVE9ETyBvcHRpb25hbGx5IGNvbG9yIHRlbXBlcmF0dXJlIGFuZCBjb2xvciB3aGl0ZSAoc2VlIHN0YWlydmlsbGUvbWgtMTAwKVxuXG4gICAgLy8gb25lIG9mIHRoZSBwcm9maWxlcyBoYXMgYSBjb2xvciBpbnRlbnNpdHlcbiAgICBpZiAodGhpcy5oYXNDYXBhYmlsaXR5Q29sb3IoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gYSBjb2xvciB3aGVlbCBpcyBpbnZvbHZlZFxuICAgIGZvciAoY29uc3QgZml4dHVyZVV1aWQgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQoZml4dHVyZVV1aWQpO1xuICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgaWYgKGNoYW5uZWwuY29sb3JXaGVlbCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eVBhblRpbHQoKTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc1BhbiA9IGZhbHNlO1xuICAgIGxldCBoYXNUaWx0ID0gZmFsc2U7XG5cbiAgICAvLyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcGFuIGFuZCBvbmUgdGlsdCBjaGFubmVsXG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLlBhbikpIHtcbiAgICAgIGhhc1BhbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLlRpbHQpKSB7XG4gICAgICBoYXNUaWx0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGFzUGFuICYmIGhhc1RpbHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdFByZXNldChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZmZlY3RTZXJ2aWNlLnNlbGVjdGVkRWZmZWN0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1tpbmRleF07XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNlbGVjdGVkUHJlc2V0VXVpZCA9IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzW2luZGV4XS51dWlkO1xuICAgIHRoaXMuYXV0b09wZW5GaXJzdEVmZmVjdCgpO1xuICAgIHRoaXMucHJldmlld1NlbGVjdGlvbkNoYW5nZWQubmV4dCgpO1xuICAgIHRoaXMucHJldmlld0xpdmUoKTtcbiAgfVxuXG4gIGF1dG9PcGVuRmlyc3RFZmZlY3QoKSB7XG4gICAgLy8gb3BlbiB0aGUgZmlyc3QgZWZmZWN0LCBpZiB0aGUgcHJlc2V0IG9ubHkgaGFzIG9uZVxuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJlc2V0ICYmIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZWZmZWN0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuZWZmZWN0U2VydmljZS5zZWxlY3RlZEVmZmVjdCA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQuZWZmZWN0c1swXTtcbiAgICB9XG4gIH1cblxuICBhZGRQcmVzZXQobmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHByZXNldDogUHJlc2V0ID0gbmV3IFByZXNldCgpO1xuICAgIHByZXNldC51dWlkID0gdGhpcy51dWlkU2VydmljZS5nZXRVdWlkKCk7XG4gICAgcHJlc2V0Lm5hbWUgPSBuYW1lIHx8ICdOZXcgUHJlc2V0JztcblxuICAgIC8vIEluc2VydCB0aGUgbmV3IHByZXNldCBiZWZvcmUgdGhlIGhpZ2hlc3QgY3VycmVudGx5IHNlbGVjdGVkIHByZXNldFxuICAgIGxldCBoaWdoZXN0U2VsZWN0ZWRQcmVzZXRJbmRleCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFByZXNldCA9PT0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbaV0pIHtcbiAgICAgICAgaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXggPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5zcGxpY2UoaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXgsIDAsIHByZXNldCk7XG4gICAgdGhpcy5zZWxlY3RQcmVzZXQoaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXgpO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRQcm9maWxlcygpIHtcbiAgICBjb25zdCBwcm9maWxlczogRml4dHVyZVByb2ZpbGVbXSA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICByZXR1cm4gcHJvZmlsZXM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaXh0dXJlVXVpZCBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcykge1xuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChmaXh0dXJlVXVpZCk7XG4gICAgICBjb25zdCBwcm9maWxlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRQcm9maWxlQnlVdWlkKGZpeHR1cmUucHJvZmlsZVV1aWQpO1xuXG4gICAgICBpZiAocHJvZmlsZXMuaW5kZXhPZihwcm9maWxlKSA8IDApIHtcbiAgICAgICAgcHJvZmlsZXMucHVzaChwcm9maWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZmlsZXM7XG4gIH1cblxuICBnZXRTZWxlY3RlZFByb2ZpbGVDaGFubmVscyhzZWxlY3RlZFByb2ZpbGVzOiBGaXh0dXJlUHJvZmlsZVtdKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlQ2hhbm5lbHM6IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWxbXT4gPSBuZXcgTWFwPEZpeHR1cmVQcm9maWxlLCBDYWNoZWRGaXh0dXJlQ2hhbm5lbFtdPigpO1xuXG4gICAgY29uc3QgY2FsY3VsYXRlZFByb2ZpbGVNb2RlcyA9IG5ldyBNYXA8Rml4dHVyZVByb2ZpbGUsIEZpeHR1cmVNb2RlW10+KCk7XG4gICAgZm9yIChjb25zdCBwcm9maWxlIG9mIHNlbGVjdGVkUHJvZmlsZXMpIHtcbiAgICAgIGNvbnN0IG1vZGVzOiBGaXh0dXJlTW9kZVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpeHR1cmVVdWlkIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzKSB7XG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQoZml4dHVyZVV1aWQpO1xuICAgICAgICBpZiAobW9kZXMuaW5kZXhPZihmaXh0dXJlLm1vZGUpIDwgMCkge1xuICAgICAgICAgIG1vZGVzLnB1c2goZml4dHVyZS5tb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsY3VsYXRlZFByb2ZpbGVNb2Rlcy5zZXQocHJvZmlsZSwgbW9kZXMpO1xuICAgIH1cblxuICAgIC8vIGNhbGN1bGF0ZSBhbGwgcmVxdWlyZWQgY2hhbm5lbHMgZnJvbSB0aGUgbW9kZXNcbiAgICBjYWxjdWxhdGVkUHJvZmlsZU1vZGVzLmZvckVhY2goKG1vZGVzOiBGaXh0dXJlTW9kZVtdLCBwcm9maWxlOiBGaXh0dXJlUHJvZmlsZSkgPT4ge1xuICAgICAgY29uc3QgcHJvZmlsZUNoYW5uZWxzOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbFtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG1vZGUgb2YgbW9kZXMpIHtcbiAgICAgICAgY29uc3QgY2hhbm5lbHMgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZENoYW5uZWxzKHByb2ZpbGUsIG1vZGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbHMpIHtcbiAgICAgICAgICAvLyBvbmx5IGFkZCB0aGUgY2hhbm5lbCwgaWYgbm8gY2hhbm5lbCB3aXRoIHRoZSBzYW1lIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZFxuICAgICAgICAgIC8vIChlLmcuIGEgZmluZSBjaGFubmVsKVxuICAgICAgICAgIGlmIChjaGFubmVsLmNoYW5uZWwgJiYgIXByb2ZpbGVDaGFubmVscy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNoYW5uZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHByb2ZpbGVDaGFubmVscy5wdXNoKGNoYW5uZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXZhaWxhYmxlQ2hhbm5lbHMuc2V0KHByb2ZpbGUsIHByb2ZpbGVDaGFubmVscyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlQ2hhbm5lbHM7XG4gIH1cblxuICBwcmV2aWV3TGl2ZShjb21wb3NpdGlvbk5hbWU6IHN0cmluZyA9ICcnLCBwb3NpdGlvbk1pbGxpcz86IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jb25maWdTZXJ2aWNlLmxpdmVQcmV2aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29sbGVjdCBhbGwgY2hhbmdlcyBhbmQgZGVsYXkgdGhlbSB0byBub3QgZmxvb2QgdGhlIGJhY2tlbmRcbiAgICAvLyAoZXhjZXB0IHBsYXkgZXZlbnRzLiB0aGV5IG5lZWQgdG8gYmUgZGVsaXZlcmVkIGFsd2F5cylcbiAgICBpZiAodGhpcy5saXZlUHJldmlld1RpbWVyICYmICFjb21wb3NpdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMubGl2ZUNoYW5nZVBlbmRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBwb3NpdGlvbiA9IHBvc2l0aW9uTWlsbGlzO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBvc2l0aW9uID0gTWF0aC5yb3VuZCh0aGlzLmFuaW1hdGlvblNlcnZpY2UudGltZU1pbGxpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5odHRwXG4gICAgICAucG9zdCgncHJldmlldz9wb3NpdGlvbk1pbGxpcz0nICsgcG9zaXRpb24gKyAnJmNvbXBvc2l0aW9uTmFtZT0nICsgY29tcG9zaXRpb25OYW1lLCBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5saXZlQ2hhbmdlUGVuZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKCFjb21wb3NpdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMubGl2ZVByZXZpZXdUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxpdmVQcmV2aWV3VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmxpdmVDaGFuZ2VQZW5kaW5nKSB7XG4gICAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdCgncHJldmlldz9wb3NpdGlvbk1pbGxpcz0nICsgcG9zaXRpb24gKyAnJmNvbXBvc2l0aW9uTmFtZT0nICsgY29tcG9zaXRpb25OYW1lLCBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9LCA1MCk7XG4gICAgfVxuICB9XG5cbiAgc3RvcFByZXZpZXdQbGF5KCkge1xuICAgIGlmICghdGhpcy5jb25maWdTZXJ2aWNlLmxpdmVQcmV2aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5odHRwLnBvc3QoJ3N0b3AtcHJldmlldy1wbGF5JywgbnVsbCkuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==
|