mediasfu-angular 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +871 -769
- package/dist/README.md +870 -769
- package/dist/fesm2022/mediasfu-angular.mjs +13241 -3372
- package/dist/fesm2022/mediasfu-angular.mjs.map +1 -1
- package/dist/lib/@types/types.d.ts +22 -1
- package/dist/lib/components/background-components/background-modal/background-modal.component.d.ts +36 -0
- package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +51 -0
- package/dist/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.d.ts +48 -0
- package/dist/lib/components/co-host-components/co-host-modal/co-host-modal.component.d.ts +62 -0
- package/dist/lib/components/display-components/alert-component/alert.component.component.d.ts +24 -18
- package/dist/lib/components/display-components/audio-card/audio-card.component.d.ts +59 -0
- package/dist/lib/components/display-components/audio-grid/audio-grid.component.d.ts +20 -0
- package/dist/lib/components/display-components/card-video-display/card-video-display.component.d.ts +35 -0
- package/dist/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.d.ts +38 -0
- package/dist/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.d.ts +24 -40
- package/dist/lib/components/display-components/control-widgets/menu-participants-widget.component.d.ts +21 -0
- package/dist/lib/components/display-components/control-widgets/menu-record-widget.component.d.ts +22 -0
- package/dist/lib/components/display-components/control-widgets/menu-widget.component.d.ts +23 -0
- package/dist/lib/components/display-components/control-widgets/message-widget.component.d.ts +23 -0
- package/dist/lib/components/display-components/control-widgets/record-timer-widget.component.d.ts +15 -0
- package/dist/lib/components/display-components/control-widgets/screenshare-widget.component.d.ts +27 -0
- package/dist/lib/components/display-components/flexible-grid/flexible-grid.component.d.ts +27 -18
- package/dist/lib/components/display-components/flexible-video/flexible-video.component.d.ts +30 -45
- package/dist/lib/components/display-components/loading-modal/loading-modal.component.d.ts +19 -17
- package/dist/lib/components/display-components/main-aspect-component/main-aspect-component.component.d.ts +32 -24
- package/dist/lib/components/display-components/main-container-component/main-container-component.component.d.ts +28 -16
- package/dist/lib/components/display-components/main-grid-component/main-grid-component.component.d.ts +28 -14
- package/dist/lib/components/display-components/main-screen-component/main-screen-component.component.d.ts +43 -22
- package/dist/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.d.ts +25 -30
- package/dist/lib/components/display-components/mini-audio/mini-audio.component.d.ts +55 -62
- package/dist/lib/components/display-components/mini-card/mini-card.component.d.ts +19 -23
- package/dist/lib/components/display-components/mini-card-audio/mini-card-audio.component.d.ts +39 -39
- package/dist/lib/components/display-components/other-grid-component/other-grid-component.component.d.ts +28 -13
- package/dist/lib/components/display-components/pagination/pagination.component.d.ts +29 -23
- package/dist/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.d.ts +18 -24
- package/dist/lib/components/display-components/video-card/video-card.component.d.ts +62 -0
- package/dist/lib/components/display-settings-components/display-settings-modal.component.d.ts +28 -17
- package/dist/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.d.ts +47 -38
- package/dist/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.d.ts +35 -22
- package/dist/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.d.ts +35 -24
- package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +258 -117
- package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +254 -117
- package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +312 -162
- package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +312 -162
- package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +310 -162
- package/dist/lib/components/menu-components/custom-buttons/custom-buttons.component.d.ts +49 -51
- package/dist/lib/components/menu-components/meeting-id-component/meeting-id-component.component.d.ts +6 -1
- package/dist/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.d.ts +5 -0
- package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +27 -29
- package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +20 -15
- package/dist/lib/components/message-components/message-panel/message-panel.component.d.ts +24 -0
- package/dist/lib/components/message-components/messages-modal/messages-modal.component.d.ts +34 -0
- package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +20 -35
- package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +79 -66
- package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +19 -1
- package/dist/lib/components/misc-components/welcome-page/welcome-page.component.d.ts +15 -0
- package/dist/lib/components/participants-components/participant-list/participant-list.component.d.ts +19 -0
- package/dist/lib/components/participants-components/participant-list-item/participant-list-item.component.d.ts +19 -0
- package/dist/lib/components/participants-components/participant-list-others/participant-list-others.component.d.ts +17 -0
- package/dist/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.d.ts +17 -0
- package/dist/lib/components/participants-components/participants-modal/participants-modal.component.d.ts +24 -0
- package/dist/lib/components/polls-components/poll-modal/poll-modal.component.d.ts +27 -0
- package/dist/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.d.ts +15 -0
- package/dist/lib/components/recording-components/recording-modal/recording-modal.component.d.ts +12 -0
- package/dist/lib/components/recording-components/standard-panel-component/standard-panel-component.component.d.ts +5 -0
- package/dist/lib/components/requests-components/render-request-component/render-request-component.component.d.ts +22 -0
- package/dist/lib/components/requests-components/requests-modal/requests-modal.component.d.ts +17 -0
- package/dist/lib/components/screenboard-components/screenboard/screenboard.component.d.ts +10 -0
- package/dist/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.d.ts +11 -0
- package/dist/lib/components/waiting-components/waiting-room-modal.component.d.ts +59 -0
- package/dist/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.d.ts +21 -0
- package/dist/lib/components/whiteboard-components/whiteboard/whiteboard.component.d.ts +49 -0
- package/dist/lib/consumers/add-videos-grid.service.d.ts +49 -0
- package/dist/lib/consumers/auto-adjust.service.d.ts +26 -0
- package/dist/lib/consumers/calculate-rows-and-columns.service.d.ts +18 -0
- package/dist/lib/consumers/change-vids.service.d.ts +131 -66
- package/dist/lib/consumers/check-grid.service.d.ts +32 -18
- package/dist/lib/consumers/check-permission.service.d.ts +25 -0
- package/dist/lib/consumers/check-screen-share.service.d.ts +35 -0
- package/dist/lib/consumers/close-and-resize.service.d.ts +102 -0
- package/dist/lib/consumers/compare-active-names.service.d.ts +31 -0
- package/dist/lib/consumers/compare-screen-states.service.d.ts +35 -0
- package/dist/lib/consumers/connect-ips.service.d.ts +42 -0
- package/dist/lib/consumers/connect-local-ips.service.d.ts +81 -0
- package/dist/lib/consumers/connect-recv-transport.service.d.ts +33 -0
- package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +81 -11
- package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +96 -15
- package/dist/lib/consumers/connect-send-transport-video.service.d.ts +101 -11
- package/dist/lib/consumers/connect-send-transport.service.d.ts +59 -1
- package/dist/lib/consumers/consumer-resume.service.d.ts +36 -0
- package/dist/lib/consumers/control-media.service.d.ts +45 -0
- package/dist/lib/consumers/create-send-transport.service.d.ts +149 -13
- package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +100 -13
- package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +75 -2
- package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +99 -17
- package/dist/lib/consumers/disp-streams.service.d.ts +92 -0
- package/dist/lib/consumers/generate-page-content.service.d.ts +47 -0
- package/dist/lib/consumers/get-estimate.service.d.ts +50 -0
- package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +38 -1
- package/dist/lib/consumers/get-producers-piped.service.d.ts +33 -0
- package/dist/lib/consumers/get-videos.service.d.ts +33 -0
- package/dist/lib/consumers/mix-streams.service.d.ts +22 -0
- package/dist/lib/consumers/on-screen-changes.service.d.ts +40 -0
- package/dist/lib/consumers/prepopulate-user-media.service.d.ts +99 -0
- package/dist/lib/consumers/process-consumer-transports-audio.service.d.ts +29 -0
- package/dist/lib/consumers/process-consumer-transports.service.d.ts +37 -0
- package/dist/lib/consumers/re-port.service.d.ts +48 -0
- package/dist/lib/consumers/re-update-inter.service.d.ts +82 -0
- package/dist/lib/consumers/readjust.service.d.ts +50 -0
- package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +36 -1
- package/dist/lib/consumers/receive-room-messages.service.d.ts +27 -0
- package/dist/lib/consumers/reorder-streams.service.d.ts +58 -0
- package/dist/lib/consumers/request-screen-share.service.d.ts +34 -0
- package/dist/lib/consumers/resume-pause-audio-streams.service.d.ts +51 -0
- package/dist/lib/consumers/resume-pause-streams.service.d.ts +33 -0
- package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +76 -7
- package/dist/lib/consumers/signal-new-consumer-transport.service.d.ts +37 -37
- package/dist/lib/consumers/socket-receive-methods/join-consume-room.service.d.ts +33 -0
- package/dist/lib/consumers/socket-receive-methods/new-pipe-producer.service.d.ts +39 -0
- package/dist/lib/consumers/socket-receive-methods/producer-closed.service.d.ts +27 -0
- package/dist/lib/consumers/start-share-screen.service.d.ts +40 -0
- package/dist/lib/consumers/stop-share-screen.service.d.ts +55 -0
- package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +148 -11
- package/dist/lib/consumers/stream-success-audio.service.d.ts +61 -0
- package/dist/lib/consumers/stream-success-screen.service.d.ts +50 -0
- package/dist/lib/consumers/stream-success-video.service.d.ts +58 -0
- package/dist/lib/consumers/switch-user-audio.service.d.ts +33 -0
- package/dist/lib/consumers/switch-user-video-alt.service.d.ts +32 -0
- package/dist/lib/consumers/switch-user-video.service.d.ts +47 -0
- package/dist/lib/consumers/trigger.service.d.ts +41 -0
- package/dist/lib/consumers/update-mini-cards-grid.service.d.ts +54 -0
- package/dist/lib/consumers/update-participant-audio-decibels.service.d.ts +45 -0
- package/dist/lib/methods/background-methods/launch-background.service.d.ts +25 -0
- package/dist/lib/methods/breakout-room-methods/breakout-room-updated.service.d.ts +71 -0
- package/dist/lib/methods/breakout-room-methods/launch-breakout-rooms.service.d.ts +24 -0
- package/dist/lib/methods/co-host-methods/launch-co-host.service.d.ts +24 -0
- package/dist/lib/methods/co-host-methods/modify-co-host-settings.service.d.ts +44 -0
- package/dist/lib/methods/display-settings-methods/launch-display-settings.service.d.ts +22 -0
- package/dist/lib/methods/display-settings-methods/modify-display-settings.service.d.ts +75 -0
- package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +29 -1
- package/dist/lib/methods/exit-methods/launch-confirm-exit.service.d.ts +20 -0
- package/dist/lib/methods/media-settings-methods/launch-media-settings.service.d.ts +35 -0
- package/dist/lib/methods/menu-methods/launch-menu-modal.service.d.ts +22 -0
- package/dist/lib/methods/message-methods/launch-messages.service.d.ts +22 -0
- package/dist/lib/methods/message-methods/send-message.service.d.ts +49 -0
- package/dist/lib/methods/participants-methods/launch-participants.service.d.ts +24 -0
- package/dist/lib/methods/participants-methods/message-participants.service.d.ts +46 -0
- package/dist/lib/methods/participants-methods/mute-participants.service.d.ts +39 -0
- package/dist/lib/methods/participants-methods/remove-participants.service.d.ts +45 -0
- package/dist/lib/methods/polls-methods/handle-create-poll.service.d.ts +38 -0
- package/dist/lib/methods/polls-methods/handle-end-poll.service.d.ts +32 -0
- package/dist/lib/methods/polls-methods/handle-vote-poll.service.d.ts +34 -0
- package/dist/lib/methods/polls-methods/launch-poll.service.d.ts +20 -0
- package/dist/lib/methods/polls-methods/poll-updated.service.d.ts +31 -0
- package/dist/lib/methods/recording-methods/check-pause-state.service.d.ts +24 -0
- package/dist/lib/methods/recording-methods/check-resume-state.service.d.ts +22 -0
- package/dist/lib/methods/recording-methods/confirm-recording.service.d.ts +63 -0
- package/dist/lib/methods/recording-methods/launch-recording.service.d.ts +43 -0
- package/dist/lib/methods/recording-methods/record-pause-timer.service.d.ts +27 -0
- package/dist/lib/methods/recording-methods/record-resume-timer.service.d.ts +44 -0
- package/dist/lib/methods/recording-methods/record-start-timer.service.d.ts +45 -0
- package/dist/lib/methods/recording-methods/record-update-timer.service.d.ts +32 -0
- package/dist/lib/methods/recording-methods/start-recording.service.d.ts +53 -0
- package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +42 -1
- package/dist/lib/methods/recording-methods/update-recording.service.d.ts +51 -0
- package/dist/lib/methods/requests-methods/launch-requests.service.d.ts +25 -0
- package/dist/lib/methods/requests-methods/respond-to-requests.service.d.ts +39 -0
- package/dist/lib/methods/settings-methods/launch-settings.service.d.ts +25 -0
- package/dist/lib/methods/settings-methods/modify-settings.service.d.ts +42 -0
- package/dist/lib/methods/stream-methods/click-audio.service.d.ts +100 -0
- package/dist/lib/methods/stream-methods/click-chat.service.d.ts +31 -0
- package/dist/lib/methods/stream-methods/click-screen-share.service.d.ts +68 -0
- package/dist/lib/methods/stream-methods/click-video.service.d.ts +88 -0
- package/dist/lib/methods/stream-methods/switch-audio.service.d.ts +47 -0
- package/dist/lib/methods/stream-methods/switch-video-alt.service.d.ts +50 -0
- package/dist/lib/methods/stream-methods/switch-video.service.d.ts +56 -0
- package/dist/lib/methods/utils/check-limits-and-make-request.service.d.ts +23 -0
- package/dist/lib/methods/utils/create-response-join-room.util.d.ts +33 -0
- package/dist/lib/methods/utils/create-room-on-media-sfu.service.d.ts +25 -0
- package/dist/lib/methods/utils/format-number.service.d.ts +26 -14
- package/dist/lib/methods/utils/generate-random-messages.service.d.ts +33 -0
- package/dist/lib/methods/utils/generate-random-participants.service.d.ts +27 -0
- package/dist/lib/methods/utils/generate-random-polls.service.d.ts +26 -0
- package/dist/lib/methods/utils/generate-random-request-list.service.d.ts +36 -0
- package/dist/lib/methods/utils/generate-random-waiting-room-list.service.d.ts +21 -0
- package/dist/lib/methods/utils/get-modal-position.util.d.ts +13 -3
- package/dist/lib/methods/utils/get-overlay-position.util.d.ts +13 -3
- package/dist/lib/methods/utils/initial-values.util.d.ts +6 -0
- package/dist/lib/methods/utils/join-room-on-media-sfu.service.d.ts +52 -0
- package/dist/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.d.ts +37 -0
- package/dist/lib/methods/utils/mini-audio-player/mini-audio-player.component.d.ts +55 -0
- package/dist/lib/methods/utils/producer/a-params.service.d.ts +37 -0
- package/dist/lib/methods/utils/producer/h-params.service.d.ts +50 -0
- package/dist/lib/methods/utils/producer/screen-params.service.d.ts +37 -0
- package/dist/lib/methods/utils/producer/v-params.service.d.ts +50 -0
- package/dist/lib/methods/utils/producer/video-capture-constraints.service.d.ts +46 -0
- package/dist/lib/methods/utils/sleep.util.d.ts +9 -3
- package/dist/lib/methods/utils/sound-player.service.d.ts +21 -0
- package/dist/lib/methods/utils/validate-alphanumeric.service.d.ts +16 -0
- package/dist/lib/methods/waiting-methods/launch-waiting.service.d.ts +18 -0
- package/dist/lib/methods/waiting-methods/respond-to-waiting.service.d.ts +29 -0
- package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +46 -0
- package/dist/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.d.ts +20 -0
- package/dist/lib/producer-client/producer-client-emits/create-device-client.service.d.ts +23 -0
- package/dist/lib/producer-client/producer-client-emits/join-room-client.service.d.ts +31 -0
- package/dist/lib/producer-client/producer-client-emits/update-room-parameters-client.service.d.ts +44 -0
- package/dist/lib/producers/producer-emits/join-con-room.service.d.ts +38 -0
- package/dist/lib/producers/producer-emits/join-local-room.service.d.ts +125 -0
- package/dist/lib/producers/producer-emits/join-room.service.d.ts +38 -0
- package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +80 -2
- package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +78 -2
- package/dist/lib/producers/socket-receive-methods/all-waiting-room-members.service.d.ts +27 -0
- package/dist/lib/producers/socket-receive-methods/ban-participant.service.d.ts +36 -0
- package/dist/lib/producers/socket-receive-methods/control-media-host.service.d.ts +37 -0
- package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +29 -1
- package/dist/lib/producers/socket-receive-methods/disconnect.service.d.ts +26 -0
- package/dist/lib/producers/socket-receive-methods/get-domains.service.d.ts +24 -9
- package/dist/lib/producers/socket-receive-methods/host-request-response.service.d.ts +31 -48
- package/dist/lib/producers/socket-receive-methods/meeting-ended.service.d.ts +29 -0
- package/dist/lib/producers/socket-receive-methods/meeting-still-there.service.d.ts +23 -0
- package/dist/lib/producers/socket-receive-methods/meeting-time-remaining.service.d.ts +27 -0
- package/dist/lib/producers/socket-receive-methods/participant-requested.service.d.ts +31 -0
- package/dist/lib/producers/socket-receive-methods/person-joined.service.d.ts +25 -0
- package/dist/lib/producers/socket-receive-methods/producer-media-closed.service.d.ts +61 -0
- package/dist/lib/producers/socket-receive-methods/producer-media-paused.service.d.ts +62 -0
- package/dist/lib/producers/socket-receive-methods/producer-media-resumed.service.d.ts +45 -0
- package/dist/lib/producers/socket-receive-methods/re-initiate-recording.service.d.ts +29 -0
- package/dist/lib/producers/socket-receive-methods/receive-message.service.d.ts +38 -0
- package/dist/lib/producers/socket-receive-methods/recording-notice.service.d.ts +38 -0
- package/dist/lib/producers/socket-receive-methods/room-record-params.service.d.ts +62 -0
- package/dist/lib/producers/socket-receive-methods/screen-producer-id.service.d.ts +41 -0
- package/dist/lib/producers/socket-receive-methods/start-records.service.d.ts +25 -0
- package/dist/lib/producers/socket-receive-methods/stopped-recording.service.d.ts +25 -0
- package/dist/lib/producers/socket-receive-methods/time-left-recording.service.d.ts +21 -0
- package/dist/lib/producers/socket-receive-methods/update-consuming-domains.service.d.ts +42 -0
- package/dist/lib/producers/socket-receive-methods/update-media-settings.service.d.ts +30 -0
- package/dist/lib/producers/socket-receive-methods/updated-co-host.service.d.ts +40 -0
- package/dist/lib/producers/socket-receive-methods/user-waiting.service.d.ts +14 -40
- package/dist/lib/sockets/socket-manager.service.d.ts +130 -0
- package/dist/public-api.d.ts +11 -1
- package/package.json +17 -20
- package/dist/esm2022/lib/@types/types.mjs +0 -2
- package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +0 -763
- package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +0 -316
- package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +0 -95
- package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +0 -40
- package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +0 -246
- package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +0 -73
- package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +0 -297
- package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +0 -60
- package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +0 -94
- package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +0 -100
- package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +0 -231
- package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +0 -298
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +0 -61
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +0 -43
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +0 -114
- package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +0 -114
- package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +0 -36
- package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +0 -74
- package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +0 -142
- package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +0 -265
- package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +0 -100
- package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +0 -132
- package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +0 -119
- package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +0 -106
- package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +0 -180
- package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +0 -120
- package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +0 -326
- package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +0 -165
- package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +0 -230
- package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +0 -111
- package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +0 -328
- package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +0 -118
- package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +0 -330
- package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +0 -95
- package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +0 -190
- package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +0 -119
- package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +0 -209
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +0 -4189
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +0 -3705
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +0 -5024
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +0 -5333
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +0 -5023
- package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +0 -85
- package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +0 -22
- package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +0 -22
- package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +0 -132
- package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +0 -104
- package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +0 -204
- package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +0 -243
- package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +0 -147
- package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +0 -335
- package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +0 -113
- package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +0 -226
- package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +0 -63
- package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +0 -120
- package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +0 -23
- package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +0 -43
- package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +0 -100
- package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +0 -174
- package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +0 -77
- package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +0 -121
- package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +0 -85
- package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +0 -59
- package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +0 -130
- package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +0 -617
- package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +0 -380
- package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +0 -142
- package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +0 -265
- package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +0 -1784
- package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +0 -296
- package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +0 -83
- package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +0 -42
- package/dist/esm2022/lib/consumers/change-vids.service.mjs +0 -486
- package/dist/esm2022/lib/consumers/check-grid.service.mjs +0 -79
- package/dist/esm2022/lib/consumers/check-permission.service.mjs +0 -80
- package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +0 -71
- package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +0 -229
- package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +0 -75
- package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +0 -63
- package/dist/esm2022/lib/consumers/connect-ips.service.mjs +0 -112
- package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +0 -113
- package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +0 -46
- package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +0 -62
- package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +0 -55
- package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +0 -86
- package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +0 -332
- package/dist/esm2022/lib/consumers/control-media.service.mjs +0 -68
- package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +0 -126
- package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +0 -58
- package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +0 -45
- package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +0 -56
- package/dist/esm2022/lib/consumers/disp-streams.service.mjs +0 -421
- package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +0 -59
- package/dist/esm2022/lib/consumers/get-estimate.service.mjs +0 -70
- package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +0 -49
- package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +0 -46
- package/dist/esm2022/lib/consumers/get-videos.service.mjs +0 -58
- package/dist/esm2022/lib/consumers/mix-streams.service.mjs +0 -73
- package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +0 -63
- package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +0 -442
- package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +0 -72
- package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +0 -91
- package/dist/esm2022/lib/consumers/re-port.service.mjs +0 -66
- package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +0 -157
- package/dist/esm2022/lib/consumers/readjust.service.mjs +0 -123
- package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +0 -56
- package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +0 -42
- package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +0 -181
- package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +0 -67
- package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +0 -99
- package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +0 -70
- package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +0 -55
- package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +0 -136
- package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +0 -63
- package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +0 -61
- package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +0 -51
- package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +0 -80
- package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +0 -132
- package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +0 -149
- package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +0 -143
- package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +0 -202
- package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +0 -87
- package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +0 -228
- package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +0 -125
- package/dist/esm2022/lib/consumers/trigger.service.mjs +0 -172
- package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +0 -81
- package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +0 -39
- package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +0 -23
- package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +0 -112
- package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +0 -22
- package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +0 -22
- package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +0 -60
- package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +0 -24
- package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +0 -119
- package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +0 -28
- package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +0 -22
- package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +0 -50
- package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +0 -22
- package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +0 -23
- package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +0 -94
- package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +0 -23
- package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +0 -52
- package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +0 -57
- package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +0 -62
- package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +0 -37
- package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +0 -40
- package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +0 -49
- package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +0 -23
- package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +0 -64
- package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +0 -45
- package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +0 -34
- package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +0 -215
- package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +0 -82
- package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +0 -40
- package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +0 -86
- package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +0 -89
- package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +0 -48
- package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +0 -147
- package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +0 -74
- package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +0 -224
- package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +0 -26
- package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +0 -45
- package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +0 -26
- package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +0 -67
- package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +0 -178
- package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +0 -44
- package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +0 -110
- package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +0 -183
- package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +0 -33
- package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +0 -66
- package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +0 -76
- package/dist/esm2022/lib/methods/utils/format-number.service.mjs +0 -45
- package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +0 -87
- package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +0 -99
- package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +0 -52
- package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +0 -54
- package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +0 -38
- package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +0 -22
- package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +0 -21
- package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +0 -379
- package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +0 -59
- package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +0 -260
- package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +0 -21
- package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +0 -37
- package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +0 -24
- package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +0 -37
- package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +0 -38
- package/dist/esm2022/lib/methods/utils/sleep.util.mjs +0 -11
- package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +0 -42
- package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +0 -33
- package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +0 -23
- package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +0 -40
- package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +0 -69
- package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +0 -24
- package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +0 -51
- package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +0 -65
- package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +0 -232
- package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +0 -114
- package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +0 -114
- package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +0 -155
- package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +0 -147
- package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +0 -30
- package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +0 -40
- package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +0 -146
- package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +0 -26
- package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +0 -38
- package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +0 -63
- package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +0 -167
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +0 -44
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +0 -24
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +0 -36
- package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +0 -32
- package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +0 -29
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +0 -68
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +0 -90
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +0 -54
- package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +0 -38
- package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +0 -96
- package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +0 -195
- package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +0 -59
- package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +0 -45
- package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +0 -35
- package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +0 -37
- package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +0 -36
- package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +0 -63
- package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +0 -36
- package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +0 -56
- package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +0 -78
- package/dist/esm2022/lib/sockets/socket-manager.service.mjs +0 -73
- package/dist/esm2022/mediasfu-angular.mjs +0 -5
- package/dist/esm2022/public-api.mjs +0 -187
|
@@ -1,486 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class ChangeVids {
|
|
4
|
-
/**
|
|
5
|
-
* Asynchronously changes the video streams based on the provided options.
|
|
6
|
-
*
|
|
7
|
-
* @param {Object} options - The options for changing video streams.
|
|
8
|
-
* @param {boolean} [options.screenChanged=false] - Indicates if the screen has changed.
|
|
9
|
-
* @param {ChangeVidsOptions} options.parameters - The parameters for changing video streams.
|
|
10
|
-
* @returns {Promise<void>} A promise that resolves when the video streams have been changed.
|
|
11
|
-
*
|
|
12
|
-
* @typedef {Object} ChangeVidsOptions
|
|
13
|
-
* @property {Function} getUpdatedAllParams - Function to get updated parameters.
|
|
14
|
-
* @property {Array} allVideoStreams - Array of all video streams.
|
|
15
|
-
* @property {Array} p_activeNames - Array of active participant names.
|
|
16
|
-
* @property {Array} activeNames - Array of active names.
|
|
17
|
-
* @property {Array} dispActiveNames - Array of displayed active names.
|
|
18
|
-
* @property {boolean} shareScreenStarted - Indicates if screen sharing has started.
|
|
19
|
-
* @property {boolean} shared - Indicates if the screen is shared.
|
|
20
|
-
* @property {Array} newLimitedStreams - Array of new limited streams.
|
|
21
|
-
* @property {Array} non_alVideoStreams - Array of non-al video streams.
|
|
22
|
-
* @property {Array} ref_participants - Array of reference participants.
|
|
23
|
-
* @property {Array} participants - Array of participants.
|
|
24
|
-
* @property {string} eventType - Type of the event.
|
|
25
|
-
* @property {string} islevel - Level of the participant.
|
|
26
|
-
* @property {string} member - Name of the member.
|
|
27
|
-
* @property {boolean} sortAudioLoudness - Indicates if audio loudness should be sorted.
|
|
28
|
-
* @property {Array} audioDecibels - Array of audio decibels.
|
|
29
|
-
* @property {Array} mixed_alVideoStreams - Array of mixed al video streams.
|
|
30
|
-
* @property {Array} non_alVideoStreams_muted - Array of muted non-al video streams.
|
|
31
|
-
* @property {string} remoteProducerId - ID of the remote producer.
|
|
32
|
-
* @property {Object} localStreamVideo - Local stream video object.
|
|
33
|
-
* @property {Array} oldAllStreams - Array of old all streams.
|
|
34
|
-
* @property {number} screenPageLimit - Limit of streams per screen page.
|
|
35
|
-
* @property {string} meetingDisplayType - Type of meeting display.
|
|
36
|
-
* @property {boolean} meetingVideoOptimized - Indicates if meeting video is optimized.
|
|
37
|
-
* @property {boolean} recordingVideoOptimized - Indicates if recording video is optimized.
|
|
38
|
-
* @property {string} recordingDisplayType - Type of recording display.
|
|
39
|
-
* @property {Array} paginatedStreams - Array of paginated streams.
|
|
40
|
-
* @property {number} itemPageLimit - Limit of items per page.
|
|
41
|
-
* @property {boolean} doPaginate - Indicates if pagination should be done.
|
|
42
|
-
* @property {boolean} prevDoPaginate - Indicates if pagination was previously done.
|
|
43
|
-
* @property {number} currentUserPage - Current user page number.
|
|
44
|
-
* @property {Array} breakoutRooms - Array of breakout rooms.
|
|
45
|
-
* @property {number} hostNewRoom - Index of the new room for the host.
|
|
46
|
-
* @property {boolean} breakOutRoomStarted - Indicates if breakout room has started.
|
|
47
|
-
* @property {boolean} breakOutRoomEnded - Indicates if breakout room has ended.
|
|
48
|
-
* @property {Object} virtualStream - Virtual stream object.
|
|
49
|
-
* @property {number} mainRoomsLength - Length of main rooms.
|
|
50
|
-
* @property {string} memberRoom - Room of the member.
|
|
51
|
-
* @property {Function} updateP_activeNames - Function to update active participant names.
|
|
52
|
-
* @property {Function} updateActiveNames - Function to update active names.
|
|
53
|
-
* @property {Function} updateDispActiveNames - Function to update displayed active names.
|
|
54
|
-
* @property {Function} updateNewLimitedStreams - Function to update new limited streams.
|
|
55
|
-
* @property {Function} updateNon_alVideoStreams - Function to update non-al video streams.
|
|
56
|
-
* @property {Function} updateRef_participants - Function to update reference participants.
|
|
57
|
-
* @property {Function} updateSortAudioLoudness - Function to update audio loudness sorting.
|
|
58
|
-
* @property {Function} updateMixed_alVideoStreams - Function to update mixed al video streams.
|
|
59
|
-
* @property {Function} updateNon_alVideoStreams_muted - Function to update muted non-al video streams.
|
|
60
|
-
* @property {Function} updatePaginatedStreams - Function to update paginated streams.
|
|
61
|
-
* @property {Function} updateDoPaginate - Function to update pagination status.
|
|
62
|
-
* @property {Function} updatePrevDoPaginate - Function to update previous pagination status.
|
|
63
|
-
* @property {Function} updateCurrentUserPage - Function to update current user page.
|
|
64
|
-
* @property {Function} updateNumberPages - Function to update number of pages.
|
|
65
|
-
* @property {Function} updateMainRoomsLength - Function to update main rooms length.
|
|
66
|
-
* @property {Function} updateMemberRoom - Function to update member room.
|
|
67
|
-
* @property {Function} mixStreams - Function to mix streams.
|
|
68
|
-
* @property {Function} dispStreams - Function to display streams.
|
|
69
|
-
*/
|
|
70
|
-
changeVids = async ({ screenChanged = false, parameters }) => {
|
|
71
|
-
let { getUpdatedAllParams } = parameters;
|
|
72
|
-
parameters = getUpdatedAllParams();
|
|
73
|
-
let { allVideoStreams, p_activeNames, activeNames, dispActiveNames, shareScreenStarted, shared, newLimitedStreams, non_alVideoStreams, ref_participants, participants, eventType, islevel, member, sortAudioLoudness, audioDecibels, mixed_alVideoStreams, non_alVideoStreams_muted, remoteProducerId, localStreamVideo, oldAllStreams, screenPageLimit, meetingDisplayType, meetingVideoOptimized, recordingVideoOptimized, recordingDisplayType, paginatedStreams, itemPageLimit, doPaginate, prevDoPaginate, currentUserPage, breakoutRooms, hostNewRoom, breakOutRoomStarted, breakOutRoomEnded, virtualStream, mainRoomsLength, memberRoom, updateP_activeNames, updateActiveNames, updateDispActiveNames, updateNewLimitedStreams, updateNon_alVideoStreams, updateRef_participants, updateSortAudioLoudness, updateMixed_alVideoStreams, updateNon_alVideoStreams_muted, updatePaginatedStreams, updateDoPaginate, updatePrevDoPaginate, updateCurrentUserPage, updateNumberPages, updateMainRoomsLength, updateMemberRoom,
|
|
74
|
-
// mediasfu functions
|
|
75
|
-
mixStreams, dispStreams, } = parameters;
|
|
76
|
-
try {
|
|
77
|
-
let alVideoStreams = [...allVideoStreams];
|
|
78
|
-
p_activeNames = [...activeNames];
|
|
79
|
-
let streame;
|
|
80
|
-
if (shareScreenStarted || shared) {
|
|
81
|
-
alVideoStreams = [...newLimitedStreams];
|
|
82
|
-
activeNames = [];
|
|
83
|
-
}
|
|
84
|
-
activeNames = [];
|
|
85
|
-
dispActiveNames = [];
|
|
86
|
-
ref_participants = participants;
|
|
87
|
-
let temp = alVideoStreams;
|
|
88
|
-
await Promise.all(temp.map(async (stream) => {
|
|
89
|
-
let participant = ref_participants.find((obj) => obj.videoID === stream.producerId);
|
|
90
|
-
if (!participant && stream.producerId !== 'youyou' && stream.producerId !== 'youyouyou') {
|
|
91
|
-
alVideoStreams = alVideoStreams.filter((obj) => obj.producerId !== stream.producerId);
|
|
92
|
-
}
|
|
93
|
-
}));
|
|
94
|
-
if (eventType === 'broadcast' || eventType === 'chat') {
|
|
95
|
-
sortAudioLoudness = false;
|
|
96
|
-
}
|
|
97
|
-
if (shareScreenStarted || shared) {
|
|
98
|
-
non_alVideoStreams = [];
|
|
99
|
-
non_alVideoStreams_muted = [];
|
|
100
|
-
mixed_alVideoStreams = [];
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
if (alVideoStreams.length > screenPageLimit) {
|
|
104
|
-
alVideoStreams = alVideoStreams.filter((obj) => obj.producerId !== 'youyou' && obj.producerId !== 'youyouyou');
|
|
105
|
-
ref_participants = ref_participants.sort((a, b) => (a.muted ?? false) > (b.muted ?? false) ? 1 : -1);
|
|
106
|
-
let temp = [];
|
|
107
|
-
await Promise.all(ref_participants.map((participant) => {
|
|
108
|
-
let stream = alVideoStreams.find((obj) => obj.producerId === participant.videoID);
|
|
109
|
-
if (stream) {
|
|
110
|
-
temp.push(stream);
|
|
111
|
-
}
|
|
112
|
-
}));
|
|
113
|
-
alVideoStreams = temp;
|
|
114
|
-
let youyou = allVideoStreams.find((obj) => obj.producerId === 'youyou');
|
|
115
|
-
if (!youyou) {
|
|
116
|
-
let youyouyou = allVideoStreams.find((obj) => obj.producerId === 'youyouyou');
|
|
117
|
-
if (youyouyou) {
|
|
118
|
-
alVideoStreams.unshift(youyouyou);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
if (youyou) {
|
|
123
|
-
alVideoStreams.unshift(youyou);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
const admin = participants.filter((participant) => participant.islevel === '2');
|
|
128
|
-
let adminName = '';
|
|
129
|
-
if (admin.length > 0) {
|
|
130
|
-
adminName = admin[0].name || '';
|
|
131
|
-
}
|
|
132
|
-
non_alVideoStreams = [];
|
|
133
|
-
await Promise.all(ref_participants.map(async (participant) => {
|
|
134
|
-
let stream = alVideoStreams.find((obj) => obj.producerId === participant.videoID);
|
|
135
|
-
if (eventType !== 'chat' && eventType !== 'conference') {
|
|
136
|
-
if (!stream &&
|
|
137
|
-
participant.name !== member &&
|
|
138
|
-
!participant['muted'] &&
|
|
139
|
-
participant.name !== adminName) {
|
|
140
|
-
non_alVideoStreams.push(participant);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
if (!stream && participant.name !== member && !participant['muted']) {
|
|
145
|
-
non_alVideoStreams.push(participant);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}));
|
|
149
|
-
if (sortAudioLoudness) {
|
|
150
|
-
non_alVideoStreams.sort((a, b) => {
|
|
151
|
-
const avgLoudnessA = audioDecibels.find((obj) => obj.name === a.name)?.averageLoudness || 127;
|
|
152
|
-
const avgLoudnessB = audioDecibels.find((obj) => obj.name === b.name)?.averageLoudness || 127;
|
|
153
|
-
return avgLoudnessB - avgLoudnessA;
|
|
154
|
-
});
|
|
155
|
-
if (!(meetingDisplayType === 'video' && meetingVideoOptimized) ||
|
|
156
|
-
!(recordingVideoOptimized && recordingDisplayType === 'video')) {
|
|
157
|
-
mixed_alVideoStreams = await mixStreams({
|
|
158
|
-
alVideoStreams,
|
|
159
|
-
non_alVideoStreams,
|
|
160
|
-
ref_participants,
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
non_alVideoStreams_muted = [];
|
|
165
|
-
await Promise.all(ref_participants.map(async (participant) => {
|
|
166
|
-
let stream = alVideoStreams.find((obj) => obj.producerId === participant.videoID);
|
|
167
|
-
if (eventType !== 'chat' && eventType !== 'conference') {
|
|
168
|
-
if (!stream &&
|
|
169
|
-
participant.name !== member &&
|
|
170
|
-
participant['muted'] &&
|
|
171
|
-
participant.name !== adminName) {
|
|
172
|
-
non_alVideoStreams_muted.push(participant);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
if (!stream && participant.name !== member && participant['muted']) {
|
|
177
|
-
non_alVideoStreams_muted.push(participant);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}));
|
|
181
|
-
}
|
|
182
|
-
if (eventType === 'conference' && islevel !== '2') {
|
|
183
|
-
let host = participants.find((obj) => obj.islevel === '2');
|
|
184
|
-
if (host) {
|
|
185
|
-
if (host.videoID) {
|
|
186
|
-
remoteProducerId = host.videoID;
|
|
187
|
-
}
|
|
188
|
-
if (islevel === '2') {
|
|
189
|
-
host['stream'] = virtualStream || localStreamVideo;
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
let hostVideo = alVideoStreams.find((obj) => obj.producerId === remoteProducerId);
|
|
193
|
-
if (!hostVideo) {
|
|
194
|
-
streame = oldAllStreams.find((streame) => streame.producerId === remoteProducerId);
|
|
195
|
-
if (streame) {
|
|
196
|
-
alVideoStreams = alVideoStreams.filter((obj) => obj.producerId !== host.videoID);
|
|
197
|
-
non_alVideoStreams = non_alVideoStreams.filter((obj) => obj.name !== host.name);
|
|
198
|
-
non_alVideoStreams_muted = non_alVideoStreams_muted.filter((obj) => obj.name !== host.name);
|
|
199
|
-
if (sortAudioLoudness) {
|
|
200
|
-
mixed_alVideoStreams = mixed_alVideoStreams.filter((obj) => obj.name !== host.name);
|
|
201
|
-
non_alVideoStreams_muted = non_alVideoStreams_muted.filter((obj) => obj.name !== host.name);
|
|
202
|
-
if (meetingDisplayType == 'video' && meetingVideoOptimized) {
|
|
203
|
-
alVideoStreams.unshift(streame);
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
mixed_alVideoStreams.unshift(streame);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
alVideoStreams.unshift(streame);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
await Promise.all(ref_participants.map(async (participant) => {
|
|
215
|
-
let stream = alVideoStreams.find((obj) => obj.producerId == participant.videoID && participant.name == host.name);
|
|
216
|
-
if (stream) {
|
|
217
|
-
if (sortAudioLoudness) {
|
|
218
|
-
mixed_alVideoStreams = mixed_alVideoStreams.filter((obj) => obj.name !== host.name);
|
|
219
|
-
non_alVideoStreams_muted = non_alVideoStreams_muted.filter((obj) => obj.name !== host.name);
|
|
220
|
-
mixed_alVideoStreams.unshift(participant);
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
non_alVideoStreams = non_alVideoStreams.filter((obj) => obj.name !== host.name);
|
|
224
|
-
non_alVideoStreams.unshift(participant);
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
let allStreamsPaged = [];
|
|
235
|
-
if (sortAudioLoudness) {
|
|
236
|
-
if (meetingDisplayType === 'video') {
|
|
237
|
-
if (meetingVideoOptimized) {
|
|
238
|
-
allStreamsPaged = [...alVideoStreams];
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
allStreamsPaged = [...mixed_alVideoStreams];
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
else if (meetingDisplayType === 'media') {
|
|
245
|
-
allStreamsPaged = [...mixed_alVideoStreams];
|
|
246
|
-
}
|
|
247
|
-
else if (meetingDisplayType === 'all') {
|
|
248
|
-
allStreamsPaged = [...mixed_alVideoStreams, ...non_alVideoStreams_muted];
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
if (meetingDisplayType === 'video') {
|
|
253
|
-
allStreamsPaged = [...alVideoStreams];
|
|
254
|
-
}
|
|
255
|
-
else if (meetingDisplayType === 'media') {
|
|
256
|
-
allStreamsPaged = [...alVideoStreams, ...non_alVideoStreams];
|
|
257
|
-
}
|
|
258
|
-
else if (meetingDisplayType === 'all') {
|
|
259
|
-
allStreamsPaged = [...alVideoStreams, ...non_alVideoStreams, ...non_alVideoStreams_muted];
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
paginatedStreams = [];
|
|
263
|
-
let limit = itemPageLimit;
|
|
264
|
-
if (shareScreenStarted || shared) {
|
|
265
|
-
limit = screenPageLimit;
|
|
266
|
-
}
|
|
267
|
-
let firstPage = [];
|
|
268
|
-
let page = [];
|
|
269
|
-
let limit_ = limit + 1;
|
|
270
|
-
if (eventType === 'conference' && !shared && !shareScreenStarted) {
|
|
271
|
-
limit_ = limit_ - 1;
|
|
272
|
-
}
|
|
273
|
-
// Create pagination
|
|
274
|
-
let memberInRoom = false;
|
|
275
|
-
let filterHost = false;
|
|
276
|
-
if (breakOutRoomStarted && !breakOutRoomEnded) {
|
|
277
|
-
let tempBreakoutRooms = JSON.parse(JSON.stringify(breakoutRooms));
|
|
278
|
-
let host = participants.find((obj) => obj.islevel == '2');
|
|
279
|
-
for (let room of tempBreakoutRooms) {
|
|
280
|
-
try {
|
|
281
|
-
let currentStreams = [];
|
|
282
|
-
const roomIndex = tempBreakoutRooms.indexOf(room);
|
|
283
|
-
if (hostNewRoom != -1 && roomIndex == hostNewRoom) {
|
|
284
|
-
if (host) {
|
|
285
|
-
if (!room.map((obj) => obj.name).includes(host.name)) {
|
|
286
|
-
room = [...room, { name: host.name, breakRoom: roomIndex }];
|
|
287
|
-
filterHost = true;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
for (let participant of room) {
|
|
292
|
-
if (participant.name == member && !memberInRoom) {
|
|
293
|
-
memberInRoom = true;
|
|
294
|
-
memberRoom = participant.breakRoom;
|
|
295
|
-
updateMemberRoom(memberRoom);
|
|
296
|
-
}
|
|
297
|
-
let streams = allStreamsPaged.filter((stream) => {
|
|
298
|
-
if ((Object.prototype.hasOwnProperty.call(stream, 'producerId') &&
|
|
299
|
-
stream.producerId != null &&
|
|
300
|
-
stream.producerId !== '') ||
|
|
301
|
-
(Object.prototype.hasOwnProperty.call(stream, 'audioID') &&
|
|
302
|
-
stream['audioID'] != null &&
|
|
303
|
-
stream['audioID'] !== '')) {
|
|
304
|
-
let producerId = stream.producerId || stream['audioID'];
|
|
305
|
-
let matchingParticipant = ref_participants.find((obj) => obj['audioID'] === producerId ||
|
|
306
|
-
obj.videoID === producerId ||
|
|
307
|
-
((producerId == 'youyou' || producerId == 'youyouyou') &&
|
|
308
|
-
member == participant.name));
|
|
309
|
-
return ((matchingParticipant && matchingParticipant.name === participant.name) ||
|
|
310
|
-
(participant.name == member &&
|
|
311
|
-
(producerId == 'youyou' || producerId == 'youyouyou')));
|
|
312
|
-
}
|
|
313
|
-
else {
|
|
314
|
-
return (Object.prototype.hasOwnProperty.call(stream, 'name') &&
|
|
315
|
-
stream.name == participant.name);
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
for (let stream of streams) {
|
|
319
|
-
if (currentStreams.length < limit_) {
|
|
320
|
-
currentStreams.push(stream);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
paginatedStreams.push(currentStreams);
|
|
325
|
-
}
|
|
326
|
-
catch {
|
|
327
|
-
/* handle error */
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
let remainingStreams = allStreamsPaged.filter((stream) => {
|
|
331
|
-
if ((Object.prototype.hasOwnProperty.call(stream, 'producerId') &&
|
|
332
|
-
stream.producerId != null &&
|
|
333
|
-
stream.producerId !== '') ||
|
|
334
|
-
(Object.prototype.hasOwnProperty.call(stream, 'audioID') &&
|
|
335
|
-
stream['audioID'] != null &&
|
|
336
|
-
stream['audioID'] !== '')) {
|
|
337
|
-
let producerId = stream.producerId || stream['audioID'];
|
|
338
|
-
let matchingParticipant = ref_participants.find((obj) => obj['audioID'] === producerId ||
|
|
339
|
-
obj.videoID === producerId ||
|
|
340
|
-
((producerId == 'youyou' || producerId == 'youyouyou') && member == obj.name));
|
|
341
|
-
return (matchingParticipant &&
|
|
342
|
-
!breakoutRooms
|
|
343
|
-
.flat()
|
|
344
|
-
.map((obj) => obj.name)
|
|
345
|
-
.includes(matchingParticipant.name) &&
|
|
346
|
-
(!filterHost || matchingParticipant.name != host?.name));
|
|
347
|
-
}
|
|
348
|
-
else {
|
|
349
|
-
return (!breakoutRooms
|
|
350
|
-
.flat()
|
|
351
|
-
.map((obj) => obj.name)
|
|
352
|
-
.includes(stream.name ?? '') &&
|
|
353
|
-
(!filterHost || stream.name != host?.name));
|
|
354
|
-
}
|
|
355
|
-
});
|
|
356
|
-
if (memberInRoom) {
|
|
357
|
-
let memberStream = allStreamsPaged.find((stream) => {
|
|
358
|
-
if (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&
|
|
359
|
-
stream.producerId != null &&
|
|
360
|
-
stream.producerId !== '') {
|
|
361
|
-
return stream.producerId == 'youyou' || stream.producerId == 'youyouyou';
|
|
362
|
-
}
|
|
363
|
-
return false; // Add a return statement here
|
|
364
|
-
});
|
|
365
|
-
if (memberStream && !remainingStreams.includes(memberStream)) {
|
|
366
|
-
remainingStreams.unshift(memberStream);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
let remainingPaginatedStreams = [];
|
|
370
|
-
if (remainingStreams.length > 0) {
|
|
371
|
-
firstPage = remainingStreams.slice(0, limit_);
|
|
372
|
-
remainingPaginatedStreams.push(firstPage);
|
|
373
|
-
for (let i = limit_; i < remainingStreams.length; i += limit) {
|
|
374
|
-
page = remainingStreams.slice(i, i + limit);
|
|
375
|
-
remainingPaginatedStreams.push(page);
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
mainRoomsLength = remainingPaginatedStreams.length;
|
|
379
|
-
updateMainRoomsLength(mainRoomsLength);
|
|
380
|
-
// Add the remaining streams to the beginning of the paginatedStreams
|
|
381
|
-
for (let i = remainingPaginatedStreams.length - 1; i >= 0; i--) {
|
|
382
|
-
paginatedStreams.unshift(remainingPaginatedStreams[i]);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
firstPage = allStreamsPaged.slice(0, limit_);
|
|
387
|
-
paginatedStreams.push(firstPage);
|
|
388
|
-
for (let i = limit_; i < allStreamsPaged.length; i += limit) {
|
|
389
|
-
page = allStreamsPaged.slice(i, i + limit);
|
|
390
|
-
paginatedStreams.push(page);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
// State updates
|
|
394
|
-
updateP_activeNames(p_activeNames);
|
|
395
|
-
updateActiveNames(activeNames);
|
|
396
|
-
updateDispActiveNames(dispActiveNames);
|
|
397
|
-
updateNewLimitedStreams(newLimitedStreams);
|
|
398
|
-
updateNon_alVideoStreams(non_alVideoStreams);
|
|
399
|
-
updateRef_participants(ref_participants);
|
|
400
|
-
updateSortAudioLoudness(sortAudioLoudness);
|
|
401
|
-
updateMixed_alVideoStreams(mixed_alVideoStreams);
|
|
402
|
-
updateNon_alVideoStreams_muted(non_alVideoStreams_muted);
|
|
403
|
-
updatePaginatedStreams(paginatedStreams);
|
|
404
|
-
prevDoPaginate = doPaginate;
|
|
405
|
-
doPaginate = false;
|
|
406
|
-
updatePrevDoPaginate(prevDoPaginate);
|
|
407
|
-
updateDoPaginate(doPaginate);
|
|
408
|
-
let isActive = false;
|
|
409
|
-
if (paginatedStreams.length > 1) {
|
|
410
|
-
if (!shareScreenStarted && !shared) {
|
|
411
|
-
doPaginate = true;
|
|
412
|
-
}
|
|
413
|
-
updateDoPaginate(doPaginate);
|
|
414
|
-
if (currentUserPage > paginatedStreams.length - 1) {
|
|
415
|
-
if (breakOutRoomStarted && !breakOutRoomEnded) {
|
|
416
|
-
currentUserPage = 0;
|
|
417
|
-
}
|
|
418
|
-
else {
|
|
419
|
-
currentUserPage = paginatedStreams.length - 1;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
else if (currentUserPage == 0) {
|
|
423
|
-
isActive = true;
|
|
424
|
-
}
|
|
425
|
-
updateCurrentUserPage(currentUserPage);
|
|
426
|
-
updateNumberPages(paginatedStreams.length - 1);
|
|
427
|
-
if (screenChanged) {
|
|
428
|
-
await dispStreams({
|
|
429
|
-
lStreams: paginatedStreams[0],
|
|
430
|
-
ind: 0,
|
|
431
|
-
parameters,
|
|
432
|
-
});
|
|
433
|
-
}
|
|
434
|
-
else {
|
|
435
|
-
await dispStreams({
|
|
436
|
-
lStreams: paginatedStreams[0],
|
|
437
|
-
ind: 0,
|
|
438
|
-
auto: true,
|
|
439
|
-
parameters,
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
if (!isActive) {
|
|
443
|
-
const currentPageBreak = currentUserPage - mainRoomsLength;
|
|
444
|
-
await dispStreams({
|
|
445
|
-
lStreams: paginatedStreams[currentUserPage],
|
|
446
|
-
ind: currentUserPage,
|
|
447
|
-
parameters,
|
|
448
|
-
breakRoom: currentPageBreak,
|
|
449
|
-
inBreakRoom: currentPageBreak >= 0,
|
|
450
|
-
});
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
else {
|
|
454
|
-
currentUserPage = 0;
|
|
455
|
-
updateCurrentUserPage(currentUserPage);
|
|
456
|
-
if (screenChanged) {
|
|
457
|
-
await dispStreams({
|
|
458
|
-
lStreams: paginatedStreams[0],
|
|
459
|
-
ind: 0,
|
|
460
|
-
parameters,
|
|
461
|
-
});
|
|
462
|
-
}
|
|
463
|
-
else {
|
|
464
|
-
await dispStreams({
|
|
465
|
-
lStreams: paginatedStreams[0],
|
|
466
|
-
ind: 0,
|
|
467
|
-
auto: true,
|
|
468
|
-
parameters,
|
|
469
|
-
});
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
catch (error) {
|
|
474
|
-
console.log('changeVids error', error);
|
|
475
|
-
}
|
|
476
|
-
};
|
|
477
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ChangeVids, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
478
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ChangeVids, providedIn: 'root' });
|
|
479
|
-
}
|
|
480
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ChangeVids, decorators: [{
|
|
481
|
-
type: Injectable,
|
|
482
|
-
args: [{
|
|
483
|
-
providedIn: 'root',
|
|
484
|
-
}]
|
|
485
|
-
}] });
|
|
486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLXZpZHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb25zdW1lcnMvY2hhbmdlLXZpZHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQXFGM0MsTUFBTSxPQUFPLFVBQVU7SUFDckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUVHO0lBQ0gsVUFBVSxHQUFHLEtBQUssRUFBRSxFQUFFLGFBQWEsR0FBRyxLQUFLLEVBQUUsVUFBVSxFQUFxQixFQUFpQixFQUFFO1FBQzdGLElBQUksRUFBRSxtQkFBbUIsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUN6QyxVQUFVLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUVuQyxJQUFJLEVBQ0YsZUFBZSxFQUNmLGFBQWEsRUFDYixXQUFXLEVBQ1gsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxPQUFPLEVBQ1AsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsVUFBVSxFQUNWLGNBQWMsRUFDZCxlQUFlLEVBRWYsYUFBYSxFQUNiLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixlQUFlLEVBQ2YsVUFBVSxFQUVW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TyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUMsQ0FBQzt1R0EzbEJTLFVBQVU7MkdBQVYsVUFBVSxjQUZULE1BQU07OzJGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU3RyZWFtLFxuICBQYXJ0aWNpcGFudCxcbiAgRGlzcFN0cmVhbXNUeXBlLFxuICBEaXNwU3RyZWFtc1BhcmFtZXRlcnMsXG4gIEF1ZGlvRGVjaWJlbHMsXG4gIE1peFN0cmVhbXNUeXBlLFxuICBCcmVha291dFBhcnRpY2lwYW50LFxuICBFdmVudFR5cGUsXG59IGZyb20gJy4uL0B0eXBlcy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlVmlkc1BhcmFtZXRlcnMgZXh0ZW5kcyBEaXNwU3RyZWFtc1BhcmFtZXRlcnMge1xuICBhbGxWaWRlb1N0cmVhbXM6IChTdHJlYW0gfCBQYXJ0aWNpcGFudClbXTtcbiAgcF9hY3RpdmVOYW1lczogc3RyaW5nW107XG4gIGFjdGl2ZU5hbWVzOiBzdHJpbmdbXTtcbiAgZGlzcEFjdGl2ZU5hbWVzOiBzdHJpbmdbXTtcbiAgc2hhcmVTY3JlZW5TdGFydGVkOiBib29sZWFuO1xuICBzaGFyZWQ6IGJvb2xlYW47XG4gIG5ld0xpbWl0ZWRTdHJlYW1zOiAoU3RyZWFtIHwgUGFydGljaXBhbnQpW107XG4gIG5vbl9hbFZpZGVvU3RyZWFtczogUGFydGljaXBhbnRbXTtcbiAgcmVmX3BhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcbiAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuICBldmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgaXNsZXZlbDogc3RyaW5nO1xuICBtZW1iZXI6IHN0cmluZztcbiAgc29ydEF1ZGlvTG91ZG5lc3M6IGJvb2xlYW47XG4gIGF1ZGlvRGVjaWJlbHM6IEF1ZGlvRGVjaWJlbHNbXTtcbiAgbWl4ZWRfYWxWaWRlb1N0cmVhbXM6IChTdHJlYW0gfCBQYXJ0aWNpcGFudClbXTtcbiAgbm9uX2FsVmlkZW9TdHJlYW1zX211dGVkOiBQYXJ0aWNpcGFudFtdO1xuICByZW1vdGVQcm9kdWNlcklkPzogc3RyaW5nO1xuICBsb2NhbFN0cmVhbVZpZGVvOiBNZWRpYVN0cmVhbSB8IG51bGw7XG4gIG9sZEFsbFN0cmVhbXM6IChTdHJlYW0gfCBQYXJ0aWNpcGFudClbXTtcbiAgc2NyZWVuUGFnZUxpbWl0OiBudW1iZXI7XG4gIG1lZXRpbmdEaXNwbGF5VHlwZTogc3RyaW5nO1xuICBtZWV0aW5nVmlkZW9PcHRpbWl6ZWQ6IGJvb2xlYW47XG4gIHJlY29yZGluZ1ZpZGVvT3B0aW1pemVkOiBib29sZWFuO1xuICByZWNvcmRpbmdEaXNwbGF5VHlwZTogJ3ZpZGVvJyB8ICdtZWRpYScgfCAnYWxsJztcbiAgcGFnaW5hdGVkU3RyZWFtczogKFN0cmVhbSB8IFBhcnRpY2lwYW50KVtdW107XG4gIGl0ZW1QYWdlTGltaXQ6IG51bWJlcjtcbiAgZG9QYWdpbmF0ZTogYm9vbGVhbjtcbiAgcHJldkRvUGFnaW5hdGU6IGJvb2xlYW47XG4gIGN1cnJlbnRVc2VyUGFnZTogbnVtYmVyO1xuICBicmVha291dFJvb21zOiBCcmVha291dFBhcnRpY2lwYW50W11bXTtcbiAgaG9zdE5ld1Jvb206IG51bWJlcjtcbiAgYnJlYWtPdXRSb29tU3RhcnRlZDogYm9vbGVhbjtcbiAgYnJlYWtPdXRSb29tRW5kZWQ6IGJvb2xlYW47XG4gIHZpcnR1YWxTdHJlYW06IE1lZGlhU3RyZWFtIHwgbnVsbDtcbiAgbWFpblJvb21zTGVuZ3RoOiBudW1iZXI7XG4gIG1lbWJlclJvb206IG51bWJlcjtcbiAgdXBkYXRlUF9hY3RpdmVOYW1lczogKG5hbWVzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgdXBkYXRlQWN0aXZlTmFtZXM6IChuYW1lczogc3RyaW5nW10pID0+IHZvaWQ7XG4gIHVwZGF0ZURpc3BBY3RpdmVOYW1lczogKG5hbWVzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgdXBkYXRlTmV3TGltaXRlZFN0cmVhbXM6IChzdHJlYW1zOiAoU3RyZWFtIHwgUGFydGljaXBhbnQpW10pID0+IHZvaWQ7XG4gIHVwZGF0ZU5vbl9hbFZpZGVvU3RyZWFtczogKHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXSkgPT4gdm9pZDtcbiAgdXBkYXRlUmVmX3BhcnRpY2lwYW50czogKHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXSkgPT4gdm9pZDtcbiAgdXBkYXRlU29ydEF1ZGlvTG91ZG5lc3M6IChzb3J0OiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVNaXhlZF9hbFZpZGVvU3RyZWFtczogKHN0cmVhbXM6IChTdHJlYW0gfCBQYXJ0aWNpcGFudClbXSkgPT4gdm9pZDtcbiAgdXBkYXRlTm9uX2FsVmlkZW9TdHJlYW1zX211dGVkOiAocGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdKSA9PiB2b2lkO1xuICB1cGRhdGVQYWdpbmF0ZWRTdHJlYW1zOiAoc3RyZWFtczogKFN0cmVhbSB8IFBhcnRpY2lwYW50KVtdW10pID0+IHZvaWQ7XG4gIHVwZGF0ZURvUGFnaW5hdGU6IChwYWdpbmF0ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlUHJldkRvUGFnaW5hdGU6IChwYWdpbmF0ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlQ3VycmVudFVzZXJQYWdlOiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVOdW1iZXJQYWdlczogKHBhZ2VzOiBudW1iZXIpID0+IHZvaWQ7XG4gIHVwZGF0ZU1haW5Sb29tc0xlbmd0aDogKGxlbmd0aDogbnVtYmVyKSA9PiB2b2lkO1xuICB1cGRhdGVNZW1iZXJSb29tOiAocm9vbTogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIC8vIG1lZGlhc2Z1IGZ1bmN0aW9uc1xuICBtaXhTdHJlYW1zOiBNaXhTdHJlYW1zVHlwZTtcbiAgZGlzcFN0cmVhbXM6IERpc3BTdHJlYW1zVHlwZTtcbiAgZ2V0VXBkYXRlZEFsbFBhcmFtczogKCkgPT4gQ2hhbmdlVmlkc1BhcmFtZXRlcnM7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VWaWRzT3B0aW9ucyB7XG4gIHNjcmVlbkNoYW5nZWQ/OiBib29sZWFuO1xuICBwYXJhbWV0ZXJzOiBDaGFuZ2VWaWRzUGFyYW1ldGVycztcbn1cblxuLy8gRXhwb3J0IHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgQ2hhbmdlVmlkc1R5cGUgPSAob3B0aW9uczogQ2hhbmdlVmlkc09wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFuZ2VWaWRzIHtcbiAgLyoqXG4gICAqIEFzeW5jaHJvbm91c2x5IGNoYW5nZXMgdGhlIHZpZGVvIHN0cmVhbXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGNoYW5naW5nIHZpZGVvIHN0cmVhbXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuc2NyZWVuQ2hhbmdlZD1mYWxzZV0gLSBJbmRpY2F0ZXMgaWYgdGhlIHNjcmVlbiBoYXMgY2hhbmdlZC5cbiAgICogQHBhcmFtIHtDaGFuZ2VWaWRzT3B0aW9uc30gb3B0aW9ucy5wYXJhbWV0ZXJzIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGNoYW5naW5nIHZpZGVvIHN0cmVhbXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB2aWRlbyBzdHJlYW1zIGhhdmUgYmVlbiBjaGFuZ2VkLlxuICAgKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBDaGFuZ2VWaWRzT3B0aW9uc1xuICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBnZXRVcGRhdGVkQWxsUGFyYW1zIC0gRnVuY3Rpb24gdG8gZ2V0IHVwZGF0ZWQgcGFyYW1ldGVycy5cbiAgICogQHByb3BlcnR5IHtBcnJheX0gYWxsVmlkZW9TdHJlYW1zIC0gQXJyYXkgb2YgYWxsIHZpZGVvIHN0cmVhbXMuXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXl9IHBfYWN0aXZlTmFtZXMgLSBBcnJheSBvZiBhY3RpdmUgcGFydGljaXBhbnQgbmFtZXMuXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXl9IGFjdGl2ZU5hbWVzIC0gQXJyYXkgb2YgYWN0aXZlIG5hbWVzLlxuICAgKiBAcHJvcGVydHkge0FycmF5fSBkaXNwQWN0aXZlTmFtZXMgLSBBcnJheSBvZiBkaXNwbGF5ZWQgYWN0aXZlIG5hbWVzLlxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHNoYXJlU2NyZWVuU3RhcnRlZCAtIEluZGljYXRlcyBpZiBzY3JlZW4gc2hhcmluZyBoYXMgc3RhcnRlZC5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBzaGFyZWQgLSBJbmRpY2F0ZXMgaWYgdGhlIHNjcmVlbiBpcyBzaGFyZWQuXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXl9IG5ld0xpbWl0ZWRTdHJlYW1zIC0gQXJyYXkgb2YgbmV3IGxpbWl0ZWQgc3RyZWFtcy5cbiAgICogQHByb3BlcnR5IHtBcnJheX0gbm9uX2FsVmlkZW9TdHJlYW1zIC0gQXJyYXkgb2Ygbm9uLWFsIHZpZGVvIHN0cmVhbXMuXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlZl9wYXJ0aWNpcGFudHMgLSBBcnJheSBvZiByZWZlcmVuY2UgcGFydGljaXBhbnRzLlxuICAgKiBAcHJvcGVydHkge0FycmF5fSBwYXJ0aWNpcGFudHMgLSBBcnJheSBvZiBwYXJ0aWNpcGFudHMuXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBldmVudFR5cGUgLSBUeXBlIG9mIHRoZSBldmVudC5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGlzbGV2ZWwgLSBMZXZlbCBvZiB0aGUgcGFydGljaXBhbnQuXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZW1iZXIgLSBOYW1lIG9mIHRoZSBtZW1iZXIuXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc29ydEF1ZGlvTG91ZG5lc3MgLSBJbmRpY2F0ZXMgaWYgYXVkaW8gbG91ZG5lc3Mgc2hvdWxkIGJlIHNvcnRlZC5cbiAgICogQHByb3BlcnR5IHtBcnJheX0gYXVkaW9EZWNpYmVscyAtIEFycmF5IG9mIGF1ZGlvIGRlY2liZWxzLlxuICAgKiBAcHJvcGVydHkge0FycmF5fSBtaXhlZF9hbFZpZGVvU3RyZWFtcyAtIEFycmF5IG9mIG1peGVkIGFsIHZpZGVvIHN0cmVhbXMuXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXl9IG5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZCAtIEFycmF5IG9mIG11dGVkIG5vbi1hbCB2aWRlbyBzdHJlYW1zLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gcmVtb3RlUHJvZHVjZXJJZCAtIElEIG9mIHRoZSByZW1vdGUgcHJvZHVjZXIuXG4gICAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2NhbFN0cmVhbVZpZGVvIC0gTG9jYWwgc3RyZWFtIHZpZGVvIG9iamVjdC5cbiAgICogQHByb3BlcnR5IHtBcnJheX0gb2xkQWxsU3RyZWFtcyAtIEFycmF5IG9mIG9sZCBhbGwgc3RyZWFtcy5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNjcmVlblBhZ2VMaW1pdCAtIExpbWl0IG9mIHN0cmVhbXMgcGVyIHNjcmVlbiBwYWdlLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbWVldGluZ0Rpc3BsYXlUeXBlIC0gVHlwZSBvZiBtZWV0aW5nIGRpc3BsYXkuXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbWVldGluZ1ZpZGVvT3B0aW1pemVkIC0gSW5kaWNhdGVzIGlmIG1lZXRpbmcgdmlkZW8gaXMgb3B0aW1pemVkLlxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlY29yZGluZ1ZpZGVvT3B0aW1pemVkIC0gSW5kaWNhdGVzIGlmIHJlY29yZGluZyB2aWRlbyBpcyBvcHRpbWl6ZWQuXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWNvcmRpbmdEaXNwbGF5VHlwZSAtIFR5cGUgb2YgcmVjb3JkaW5nIGRpc3BsYXkuXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXl9IHBhZ2luYXRlZFN0cmVhbXMgLSBBcnJheSBvZiBwYWdpbmF0ZWQgc3RyZWFtcy5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGl0ZW1QYWdlTGltaXQgLSBMaW1pdCBvZiBpdGVtcyBwZXIgcGFnZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBkb1BhZ2luYXRlIC0gSW5kaWNhdGVzIGlmIHBhZ2luYXRpb24gc2hvdWxkIGJlIGRvbmUuXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcHJldkRvUGFnaW5hdGUgLSBJbmRpY2F0ZXMgaWYgcGFnaW5hdGlvbiB3YXMgcHJldmlvdXNseSBkb25lLlxuICAgKiBAcHJvcGVydHkge251bWJlcn0gY3VycmVudFVzZXJQYWdlIC0gQ3VycmVudCB1c2VyIHBhZ2UgbnVtYmVyLlxuICAgKiBAcHJvcGVydHkge0FycmF5fSBicmVha291dFJvb21zIC0gQXJyYXkgb2YgYnJlYWtvdXQgcm9vbXMuXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBob3N0TmV3Um9vbSAtIEluZGV4IG9mIHRoZSBuZXcgcm9vbSBmb3IgdGhlIGhvc3QuXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYnJlYWtPdXRSb29tU3RhcnRlZCAtIEluZGljYXRlcyBpZiBicmVha291dCByb29tIGhhcyBzdGFydGVkLlxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGJyZWFrT3V0Um9vbUVuZGVkIC0gSW5kaWNhdGVzIGlmIGJyZWFrb3V0IHJvb20gaGFzIGVuZGVkLlxuICAgKiBAcHJvcGVydHkge09iamVjdH0gdmlydHVhbFN0cmVhbSAtIFZpcnR1YWwgc3RyZWFtIG9iamVjdC5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IG1haW5Sb29tc0xlbmd0aCAtIExlbmd0aCBvZiBtYWluIHJvb21zLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbWVtYmVyUm9vbSAtIFJvb20gb2YgdGhlIG1lbWJlci5cbiAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdXBkYXRlUF9hY3RpdmVOYW1lcyAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSBhY3RpdmUgcGFydGljaXBhbnQgbmFtZXMuXG4gICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVwZGF0ZUFjdGl2ZU5hbWVzIC0gRnVuY3Rpb24gdG8gdXBkYXRlIGFjdGl2ZSBuYW1lcy5cbiAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdXBkYXRlRGlzcEFjdGl2ZU5hbWVzIC0gRnVuY3Rpb24gdG8gdXBkYXRlIGRpc3BsYXllZCBhY3RpdmUgbmFtZXMuXG4gICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVwZGF0ZU5ld0xpbWl0ZWRTdHJlYW1zIC0gRnVuY3Rpb24gdG8gdXBkYXRlIG5ldyBsaW1pdGVkIHN0cmVhbXMuXG4gICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVwZGF0ZU5vbl9hbFZpZGVvU3RyZWFtcyAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSBub24tYWwgdmlkZW8gc3RyZWFtcy5cbiAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdXBkYXRlUmVmX3BhcnRpY2lwYW50cyAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSByZWZlcmVuY2UgcGFydGljaXBhbnRzLlxuICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1cGRhdGVTb3J0QXVkaW9Mb3VkbmVzcyAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSBhdWRpbyBsb3VkbmVzcyBzb3J0aW5nLlxuICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1cGRhdGVNaXhlZF9hbFZpZGVvU3RyZWFtcyAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSBtaXhlZCBhbCB2aWRlbyBzdHJlYW1zLlxuICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1cGRhdGVOb25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQgLSBGdW5jdGlvbiB0byB1cGRhdGUgbXV0ZWQgbm9uLWFsIHZpZGVvIHN0cmVhbXMuXG4gICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVwZGF0ZVBhZ2luYXRlZFN0cmVhbXMgLSBGdW5jdGlvbiB0byB1cGRhdGUgcGFnaW5hdGVkIHN0cmVhbXMuXG4gICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVwZGF0ZURvUGFnaW5hdGUgLSBGdW5jdGlvbiB0byB1cGRhdGUgcGFnaW5hdGlvbiBzdGF0dXMuXG4gICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVwZGF0ZVByZXZEb1BhZ2luYXRlIC0gRnVuY3Rpb24gdG8gdXBkYXRlIHByZXZpb3VzIHBhZ2luYXRpb24gc3RhdHVzLlxuICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1cGRhdGVDdXJyZW50VXNlclBhZ2UgLSBGdW5jdGlvbiB0byB1cGRhdGUgY3VycmVudCB1c2VyIHBhZ2UuXG4gICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHVwZGF0ZU51bWJlclBhZ2VzIC0gRnVuY3Rpb24gdG8gdXBkYXRlIG51bWJlciBvZiBwYWdlcy5cbiAgICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdXBkYXRlTWFpblJvb21zTGVuZ3RoIC0gRnVuY3Rpb24gdG8gdXBkYXRlIG1haW4gcm9vbXMgbGVuZ3RoLlxuICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB1cGRhdGVNZW1iZXJSb29tIC0gRnVuY3Rpb24gdG8gdXBkYXRlIG1lbWJlciByb29tLlxuICAgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBtaXhTdHJlYW1zIC0gRnVuY3Rpb24gdG8gbWl4IHN0cmVhbXMuXG4gICAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGRpc3BTdHJlYW1zIC0gRnVuY3Rpb24gdG8gZGlzcGxheSBzdHJlYW1zLlxuICAgKi9cbiAgY2hhbmdlVmlkcyA9IGFzeW5jICh7IHNjcmVlbkNoYW5nZWQgPSBmYWxzZSwgcGFyYW1ldGVycyB9OiBDaGFuZ2VWaWRzT3B0aW9ucyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGxldCB7IGdldFVwZGF0ZWRBbGxQYXJhbXMgfSA9IHBhcmFtZXRlcnM7XG4gICAgcGFyYW1ldGVycyA9IGdldFVwZGF0ZWRBbGxQYXJhbXMoKTtcblxuICAgIGxldCB7XG4gICAgICBhbGxWaWRlb1N0cmVhbXMsXG4gICAgICBwX2FjdGl2ZU5hbWVzLFxuICAgICAgYWN0aXZlTmFtZXMsXG4gICAgICBkaXNwQWN0aXZlTmFtZXMsXG4gICAgICBzaGFyZVNjcmVlblN0YXJ0ZWQsXG4gICAgICBzaGFyZWQsXG4gICAgICBuZXdMaW1pdGVkU3RyZWFtcyxcbiAgICAgIG5vbl9hbFZpZGVvU3RyZWFtcyxcbiAgICAgIHJlZl9wYXJ0aWNpcGFudHMsXG4gICAgICBwYXJ0aWNpcGFudHMsXG4gICAgICBldmVudFR5cGUsXG4gICAgICBpc2xldmVsLFxuICAgICAgbWVtYmVyLFxuICAgICAgc29ydEF1ZGlvTG91ZG5lc3MsXG4gICAgICBhdWRpb0RlY2liZWxzLFxuICAgICAgbWl4ZWRfYWxWaWRlb1N0cmVhbXMsXG4gICAgICBub25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQsXG4gICAgICByZW1vdGVQcm9kdWNlcklkLFxuICAgICAgbG9jYWxTdHJlYW1WaWRlbyxcbiAgICAgIG9sZEFsbFN0cmVhbXMsXG4gICAgICBzY3JlZW5QYWdlTGltaXQsXG4gICAgICBtZWV0aW5nRGlzcGxheVR5cGUsXG4gICAgICBtZWV0aW5nVmlkZW9PcHRpbWl6ZWQsXG4gICAgICByZWNvcmRpbmdWaWRlb09wdGltaXplZCxcbiAgICAgIHJlY29yZGluZ0Rpc3BsYXlUeXBlLFxuICAgICAgcGFnaW5hdGVkU3RyZWFtcyxcbiAgICAgIGl0ZW1QYWdlTGltaXQsXG4gICAgICBkb1BhZ2luYXRlLFxuICAgICAgcHJldkRvUGFnaW5hdGUsXG4gICAgICBjdXJyZW50VXNlclBhZ2UsXG5cbiAgICAgIGJyZWFrb3V0Um9vbXMsXG4gICAgICBob3N0TmV3Um9vbSxcbiAgICAgIGJyZWFrT3V0Um9vbVN0YXJ0ZWQsXG4gICAgICBicmVha091dFJvb21FbmRlZCxcbiAgICAgIHZpcnR1YWxTdHJlYW0sXG4gICAgICBtYWluUm9vbXNMZW5ndGgsXG4gICAgICBtZW1iZXJSb29tLFxuXG4gICAgICB1cGRhdGVQX2FjdGl2ZU5hbWVzLFxuICAgICAgdXBkYXRlQWN0aXZlTmFtZXMsXG4gICAgICB1cGRhdGVEaXNwQWN0aXZlTmFtZXMsXG4gICAgICB1cGRhdGVOZXdMaW1pdGVkU3RyZWFtcyxcbiAgICAgIHVwZGF0ZU5vbl9hbFZpZGVvU3RyZWFtcyxcbiAgICAgIHVwZGF0ZVJlZl9wYXJ0aWNpcGFudHMsXG4gICAgICB1cGRhdGVTb3J0QXVkaW9Mb3VkbmVzcyxcbiAgICAgIHVwZGF0ZU1peGVkX2FsVmlkZW9TdHJlYW1zLFxuICAgICAgdXBkYXRlTm9uX2FsVmlkZW9TdHJlYW1zX211dGVkLFxuICAgICAgdXBkYXRlUGFnaW5hdGVkU3RyZWFtcyxcbiAgICAgIHVwZGF0ZURvUGFnaW5hdGUsXG4gICAgICB1cGRhdGVQcmV2RG9QYWdpbmF0ZSxcbiAgICAgIHVwZGF0ZUN1cnJlbnRVc2VyUGFnZSxcbiAgICAgIHVwZGF0ZU51bWJlclBhZ2VzLFxuXG4gICAgICB1cGRhdGVNYWluUm9vbXNMZW5ndGgsXG4gICAgICB1cGRhdGVNZW1iZXJSb29tLFxuXG4gICAgICAvLyBtZWRpYXNmdSBmdW5jdGlvbnNcbiAgICAgIG1peFN0cmVhbXMsXG4gICAgICBkaXNwU3RyZWFtcyxcbiAgICB9ID0gcGFyYW1ldGVycztcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYWxWaWRlb1N0cmVhbXMgPSBbLi4uYWxsVmlkZW9TdHJlYW1zXTtcbiAgICAgIHBfYWN0aXZlTmFtZXMgPSBbLi4uYWN0aXZlTmFtZXNdO1xuXG4gICAgICBsZXQgc3RyZWFtZTtcblxuICAgICAgaWYgKHNoYXJlU2NyZWVuU3RhcnRlZCB8fCBzaGFyZWQpIHtcbiAgICAgICAgYWxWaWRlb1N0cmVhbXMgPSBbLi4ubmV3TGltaXRlZFN0cmVhbXNdO1xuICAgICAgICBhY3RpdmVOYW1lcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBhY3RpdmVOYW1lcyA9IFtdO1xuICAgICAgZGlzcEFjdGl2ZU5hbWVzID0gW107XG4gICAgICByZWZfcGFydGljaXBhbnRzID0gcGFydGljaXBhbnRzO1xuXG4gICAgICBsZXQgdGVtcCA9IGFsVmlkZW9TdHJlYW1zO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdGVtcC5tYXAoYXN5bmMgKHN0cmVhbSkgPT4ge1xuICAgICAgICAgIGxldCBwYXJ0aWNpcGFudCA9IHJlZl9wYXJ0aWNpcGFudHMuZmluZCgob2JqKSA9PiBvYmoudmlkZW9JRCA9PT0gc3RyZWFtLnByb2R1Y2VySWQpO1xuICAgICAgICAgIGlmICghcGFydGljaXBhbnQgJiYgc3RyZWFtLnByb2R1Y2VySWQgIT09ICd5b3V5b3UnICYmIHN0cmVhbS5wcm9kdWNlcklkICE9PSAneW91eW91eW91Jykge1xuICAgICAgICAgICAgYWxWaWRlb1N0cmVhbXMgPSBhbFZpZGVvU3RyZWFtcy5maWx0ZXIoKG9iaikgPT4gb2JqLnByb2R1Y2VySWQgIT09IHN0cmVhbS5wcm9kdWNlcklkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gJ2Jyb2FkY2FzdCcgfHwgZXZlbnRUeXBlID09PSAnY2hhdCcpIHtcbiAgICAgICAgc29ydEF1ZGlvTG91ZG5lc3MgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNoYXJlU2NyZWVuU3RhcnRlZCB8fCBzaGFyZWQpIHtcbiAgICAgICAgbm9uX2FsVmlkZW9TdHJlYW1zID0gW107XG4gICAgICAgIG5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZCA9IFtdO1xuICAgICAgICBtaXhlZF9hbFZpZGVvU3RyZWFtcyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGFsVmlkZW9TdHJlYW1zLmxlbmd0aCA+IHNjcmVlblBhZ2VMaW1pdCkge1xuICAgICAgICAgIGFsVmlkZW9TdHJlYW1zID0gYWxWaWRlb1N0cmVhbXMuZmlsdGVyKFxuICAgICAgICAgICAgKG9iaikgPT4gb2JqLnByb2R1Y2VySWQgIT09ICd5b3V5b3UnICYmIG9iai5wcm9kdWNlcklkICE9PSAneW91eW91eW91JyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmVmX3BhcnRpY2lwYW50cyA9IHJlZl9wYXJ0aWNpcGFudHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgIChhLm11dGVkID8/IGZhbHNlKSA+IChiLm11dGVkID8/IGZhbHNlKSA/IDEgOiAtMSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgbGV0IHRlbXA6IChTdHJlYW0gfCBQYXJ0aWNpcGFudClbXSA9IFtdO1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgcmVmX3BhcnRpY2lwYW50cy5tYXAoKHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBzdHJlYW0gPSBhbFZpZGVvU3RyZWFtcy5maW5kKChvYmopID0+IG9iai5wcm9kdWNlcklkID09PSBwYXJ0aWNpcGFudC52aWRlb0lEKTtcbiAgICAgICAgICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRlbXAucHVzaChzdHJlYW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYWxWaWRlb1N0cmVhbXMgPSB0ZW1wO1xuXG4gICAgICAgICAgbGV0IHlvdXlvdSA9IGFsbFZpZGVvU3RyZWFtcy5maW5kKChvYmopID0+IG9iai5wcm9kdWNlcklkID09PSAneW91eW91Jyk7XG4gICAgICAgICAgaWYgKCF5b3V5b3UpIHtcbiAgICAgICAgICAgIGxldCB5b3V5b3V5b3UgPSBhbGxWaWRlb1N0cmVhbXMuZmluZCgob2JqKSA9PiBvYmoucHJvZHVjZXJJZCA9PT0gJ3lvdXlvdXlvdScpO1xuICAgICAgICAgICAgaWYgKHlvdXlvdXlvdSkge1xuICAgICAgICAgICAgICBhbFZpZGVvU3RyZWFtcy51bnNoaWZ0KHlvdXlvdXlvdSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh5b3V5b3UpIHtcbiAgICAgICAgICAgICAgYWxWaWRlb1N0cmVhbXMudW5zaGlmdCh5b3V5b3UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkbWluID0gcGFydGljaXBhbnRzLmZpbHRlcigocGFydGljaXBhbnQpID0+IHBhcnRpY2lwYW50LmlzbGV2ZWwgPT09ICcyJyk7XG4gICAgICAgIGxldCBhZG1pbk5hbWUgPSAnJztcbiAgICAgICAgaWYgKGFkbWluLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhZG1pbk5hbWUgPSBhZG1pblswXS5uYW1lIHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9uX2FsVmlkZW9TdHJlYW1zID0gW107XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVmX3BhcnRpY2lwYW50cy5tYXAoYXN5bmMgKHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RyZWFtID0gYWxWaWRlb1N0cmVhbXMuZmluZCgob2JqKSA9PiBvYmoucHJvZHVjZXJJZCA9PT0gcGFydGljaXBhbnQudmlkZW9JRCk7XG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlICE9PSAnY2hhdCcgJiYgZXZlbnRUeXBlICE9PSAnY29uZmVyZW5jZScpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFzdHJlYW0gJiZcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudC5uYW1lICE9PSBtZW1iZXIgJiZcbiAgICAgICAgICAgICAgICAhcGFydGljaXBhbnRbJ211dGVkJ10gJiZcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudC5uYW1lICE9PSBhZG1pbk5hbWVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbm9uX2FsVmlkZW9TdHJlYW1zLnB1c2gocGFydGljaXBhbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoIXN0cmVhbSAmJiBwYXJ0aWNpcGFudC5uYW1lICE9PSBtZW1iZXIgJiYgIXBhcnRpY2lwYW50WydtdXRlZCddKSB7XG4gICAgICAgICAgICAgICAgbm9uX2FsVmlkZW9TdHJlYW1zLnB1c2gocGFydGljaXBhbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHNvcnRBdWRpb0xvdWRuZXNzKSB7XG4gICAgICAgICAgbm9uX2FsVmlkZW9TdHJlYW1zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF2Z0xvdWRuZXNzQSA9XG4gICAgICAgICAgICAgIGF1ZGlvRGVjaWJlbHMuZmluZCgob2JqKSA9PiBvYmoubmFtZSA9PT0gYS5uYW1lKT8uYXZlcmFnZUxvdWRuZXNzIHx8IDEyNztcbiAgICAgICAgICAgIGNvbnN0IGF2Z0xvdWRuZXNzQiA9XG4gICAgICAgICAgICAgIGF1ZGlvRGVjaWJlbHMuZmluZCgob2JqKSA9PiBvYmoubmFtZSA9PT0gYi5uYW1lKT8uYXZlcmFnZUxvdWRuZXNzIHx8IDEyNztcbiAgICAgICAgICAgIHJldHVybiBhdmdMb3VkbmVzc0IgLSBhdmdMb3VkbmVzc0E7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKG1lZXRpbmdEaXNwbGF5VHlwZSA9PT0gJ3ZpZGVvJyAmJiBtZWV0aW5nVmlkZW9PcHRpbWl6ZWQpIHx8XG4gICAgICAgICAgICAhKHJlY29yZGluZ1ZpZGVvT3B0aW1pemVkICYmIHJlY29yZGluZ0Rpc3BsYXlUeXBlID09PSAndmlkZW8nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbWl4ZWRfYWxWaWRlb1N0cmVhbXMgPSBhd2FpdCBtaXhTdHJlYW1zKHtcbiAgICAgICAgICAgICAgYWxWaWRlb1N0cmVhbXMsXG4gICAgICAgICAgICAgIG5vbl9hbFZpZGVvU3RyZWFtcyxcbiAgICAgICAgICAgICAgcmVmX3BhcnRpY2lwYW50cyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZCA9IFtdO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICByZWZfcGFydGljaXBhbnRzLm1hcChhc3luYyAocGFydGljaXBhbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBzdHJlYW0gPSBhbFZpZGVvU3RyZWFtcy5maW5kKChvYmopID0+IG9iai5wcm9kdWNlcklkID09PSBwYXJ0aWNpcGFudC52aWRlb0lEKTtcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgIT09ICdjaGF0JyAmJiBldmVudFR5cGUgIT09ICdjb25mZXJlbmNlJykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXN0cmVhbSAmJlxuICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50Lm5hbWUgIT09IG1lbWJlciAmJlxuICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50WydtdXRlZCddICYmXG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnQubmFtZSAhPT0gYWRtaW5OYW1lXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZC5wdXNoKHBhcnRpY2lwYW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCFzdHJlYW0gJiYgcGFydGljaXBhbnQubmFtZSAhPT0gbWVtYmVyICYmIHBhcnRpY2lwYW50WydtdXRlZCddKSB7XG4gICAgICAgICAgICAgICAgbm9uX2FsVmlkZW9TdHJlYW1zX211dGVkLnB1c2gocGFydGljaXBhbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudFR5cGUgPT09ICdjb25mZXJlbmNlJyAmJiBpc2xldmVsICE9PSAnMicpIHtcbiAgICAgICAgbGV0IGhvc3QgPSBwYXJ0aWNpcGFudHMuZmluZCgob2JqKSA9PiBvYmouaXNsZXZlbCA9PT0gJzInKTtcbiAgICAgICAgaWYgKGhvc3QpIHtcbiAgICAgICAgICBpZiAoaG9zdC52aWRlb0lEKSB7XG4gICAgICAgICAgICByZW1vdGVQcm9kdWNlcklkID0gaG9zdC52aWRlb0lEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNsZXZlbCA9PT0gJzInKSB7XG4gICAgICAgICAgICBob3N0WydzdHJlYW0nXSA9IHZpcnR1YWxTdHJlYW0gfHwgbG9jYWxTdHJlYW1WaWRlbztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGhvc3RWaWRlbyA9IGFsVmlkZW9TdHJlYW1zLmZpbmQoKG9iaikgPT4gb2JqLnByb2R1Y2VySWQgPT09IHJlbW90ZVByb2R1Y2VySWQpO1xuICAgICAgICAgICAgaWYgKCFob3N0VmlkZW8pIHtcbiAgICAgICAgICAgICAgc3RyZWFtZSA9IG9sZEFsbFN0cmVhbXMuZmluZCgoc3RyZWFtZSkgPT4gc3RyZWFtZS5wcm9kdWNlcklkID09PSByZW1vdGVQcm9kdWNlcklkKTtcbiAgICAgICAgICAgICAgaWYgKHN0cmVhbWUpIHtcbiAgICAgICAgICAgICAgICBhbFZpZGVvU3RyZWFtcyA9IGFsVmlkZW9TdHJlYW1zLmZpbHRlcigob2JqKSA9PiBvYmoucHJvZHVjZXJJZCAhPT0gaG9zdC52aWRlb0lEKTtcbiAgICAgICAgICAgICAgICBub25fYWxWaWRlb1N0cmVhbXMgPSBub25fYWxWaWRlb1N0cmVhbXMuZmlsdGVyKChvYmopID0+IG9iai5uYW1lICE9PSBob3N0Lm5hbWUpO1xuICAgICAgICAgICAgICAgIG5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZCA9IG5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAob2JqKSA9PiBvYmoubmFtZSAhPT0gaG9zdC5uYW1lLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHNvcnRBdWRpb0xvdWRuZXNzKSB7XG4gICAgICAgICAgICAgICAgICBtaXhlZF9hbFZpZGVvU3RyZWFtcyA9IG1peGVkX2FsVmlkZW9TdHJlYW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKG9iaikgPT4gb2JqLm5hbWUgIT09IGhvc3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBub25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQgPSBub25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAob2JqKSA9PiBvYmoubmFtZSAhPT0gaG9zdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtZWV0aW5nRGlzcGxheVR5cGUgPT0gJ3ZpZGVvJyAmJiBtZWV0aW5nVmlkZW9PcHRpbWl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxWaWRlb1N0cmVhbXMudW5zaGlmdChzdHJlYW1lKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1peGVkX2FsVmlkZW9TdHJlYW1zLnVuc2hpZnQoc3RyZWFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGFsVmlkZW9TdHJlYW1zLnVuc2hpZnQoc3RyZWFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgcmVmX3BhcnRpY2lwYW50cy5tYXAoYXN5bmMgKHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdHJlYW0gPSBhbFZpZGVvU3RyZWFtcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgIChvYmopID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoucHJvZHVjZXJJZCA9PSBwYXJ0aWNpcGFudC52aWRlb0lEICYmIHBhcnRpY2lwYW50Lm5hbWUgPT0gaG9zdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNvcnRBdWRpb0xvdWRuZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaXhlZF9hbFZpZGVvU3RyZWFtcyA9IG1peGVkX2FsVmlkZW9TdHJlYW1zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iaikgPT4gb2JqLm5hbWUgIT09IGhvc3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQgPSBub25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqKSA9PiBvYmoubmFtZSAhPT0gaG9zdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peGVkX2FsVmlkZW9TdHJlYW1zLnVuc2hpZnQocGFydGljaXBhbnQpO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub25fYWxWaWRlb1N0cmVhbXMgPSBub25fYWxWaWRlb1N0cmVhbXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqKSA9PiBvYmoubmFtZSAhPT0gaG9zdC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vbl9hbFZpZGVvU3RyZWFtcy51bnNoaWZ0KHBhcnRpY2lwYW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGFsbFN0cmVhbXNQYWdlZDogKFN0cmVhbSB8IFBhcnRpY2lwYW50KVtdID0gW107XG4gICAgICBpZiAoc29ydEF1ZGlvTG91ZG5lc3MpIHtcbiAgICAgICAgaWYgKG1lZXRpbmdEaXNwbGF5VHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgIGlmIChtZWV0aW5nVmlkZW9PcHRpbWl6ZWQpIHtcbiAgICAgICAgICAgIGFsbFN0cmVhbXNQYWdlZCA9IFsuLi5hbFZpZGVvU3RyZWFtc107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFsbFN0cmVhbXNQYWdlZCA9IFsuLi5taXhlZF9hbFZpZGVvU3RyZWFtc107XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1lZXRpbmdEaXNwbGF5VHlwZSA9PT0gJ21lZGlhJykge1xuICAgICAgICAgIGFsbFN0cmVhbXNQYWdlZCA9IFsuLi5taXhlZF9hbFZpZGVvU3RyZWFtc107XG4gICAgICAgIH0gZWxzZSBpZiAobWVldGluZ0Rpc3BsYXlUeXBlID09PSAnYWxsJykge1xuICAgICAgICAgIGFsbFN0cmVhbXNQYWdlZCA9IFsuLi5taXhlZF9hbFZpZGVvU3RyZWFtcywgLi4ubm9uX2FsVmlkZW9TdHJlYW1zX211dGVkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1lZXRpbmdEaXNwbGF5VHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgIGFsbFN0cmVhbXNQYWdlZCA9IFsuLi5hbFZpZGVvU3RyZWFtc107XG4gICAgICAgIH0gZWxzZSBpZiAobWVldGluZ0Rpc3BsYXlUeXBlID09PSAnbWVkaWEnKSB7XG4gICAgICAgICAgYWxsU3RyZWFtc1BhZ2VkID0gWy4uLmFsVmlkZW9TdHJlYW1zLCAuLi5ub25fYWxWaWRlb1N0cmVhbXNdO1xuICAgICAgICB9IGVsc2UgaWYgKG1lZXRpbmdEaXNwbGF5VHlwZSA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICBhbGxTdHJlYW1zUGFnZWQgPSBbLi4uYWxWaWRlb1N0cmVhbXMsIC4uLm5vbl9hbFZpZGVvU3RyZWFtcywgLi4ubm9uX2FsVmlkZW9TdHJlYW1zX211dGVkXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwYWdpbmF0ZWRTdHJlYW1zID0gW107XG4gICAgICBsZXQgbGltaXQgPSBpdGVtUGFnZUxpbWl0O1xuXG4gICAgICBpZiAoc2hhcmVTY3JlZW5TdGFydGVkIHx8IHNoYXJlZCkge1xuICAgICAgICBsaW1pdCA9IHNjcmVlblBhZ2VMaW1pdDtcbiAgICAgIH1cblxuICAgICAgbGV0IGZpcnN0UGFnZTogKFN0cmVhbSB8IFBhcnRpY2lwYW50KVtdID0gW107XG4gICAgICBsZXQgcGFnZTogKFN0cmVhbSB8IFBhcnRpY2lwYW50KVtdID0gW107XG4gICAgICBsZXQgbGltaXRfID0gbGltaXQgKyAxO1xuXG4gICAgICBpZiAoZXZlbnRUeXBlID09PSAnY29uZmVyZW5jZScgJiYgIXNoYXJlZCAmJiAhc2hhcmVTY3JlZW5TdGFydGVkKSB7XG4gICAgICAgIGxpbWl0XyA9IGxpbWl0XyAtIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBwYWdpbmF0aW9uXG4gICAgICBsZXQgbWVtYmVySW5Sb29tID0gZmFsc2U7XG4gICAgICBsZXQgZmlsdGVySG9zdCA9IGZhbHNlO1xuICAgICAgaWYgKGJyZWFrT3V0Um9vbVN0YXJ0ZWQgJiYgIWJyZWFrT3V0Um9vbUVuZGVkKSB7XG4gICAgICAgIGxldCB0ZW1wQnJlYWtvdXRSb29tcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYnJlYWtvdXRSb29tcykpO1xuICAgICAgICBsZXQgaG9zdCA9IHBhcnRpY2lwYW50cy5maW5kKChvYmopID0+IG9iai5pc2xldmVsID09ICcyJyk7XG4gICAgICAgIGZvciAobGV0IHJvb20gb2YgdGVtcEJyZWFrb3V0Um9vbXMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHJlYW1zID0gW107XG4gICAgICAgICAgICBjb25zdCByb29tSW5kZXggPSB0ZW1wQnJlYWtvdXRSb29tcy5pbmRleE9mKHJvb20pO1xuICAgICAgICAgICAgaWYgKGhvc3ROZXdSb29tICE9IC0xICYmIHJvb21JbmRleCA9PSBob3N0TmV3Um9vbSkge1xuICAgICAgICAgICAgICBpZiAoaG9zdCkge1xuICAgICAgICAgICAgICAgIGlmICghcm9vbS5tYXAoKG9iajogYW55KSA9PiBvYmoubmFtZSkuaW5jbHVkZXMoaG9zdC5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgcm9vbSA9IFsuLi5yb29tLCB7IG5hbWU6IGhvc3QubmFtZSwgYnJlYWtSb29tOiByb29tSW5kZXggfV07XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJIb3N0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IHBhcnRpY2lwYW50IG9mIHJvb20pIHtcbiAgICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50Lm5hbWUgPT0gbWVtYmVyICYmICFtZW1iZXJJblJvb20pIHtcbiAgICAgICAgICAgICAgICBtZW1iZXJJblJvb20gPSB0cnVlO1xuICAgICAgICAgICAgICAgIG1lbWJlclJvb20gPSBwYXJ0aWNpcGFudC5icmVha1Jvb207XG4gICAgICAgICAgICAgICAgdXBkYXRlTWVtYmVyUm9vbShtZW1iZXJSb29tKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgc3RyZWFtcyA9IGFsbFN0cmVhbXNQYWdlZC5maWx0ZXIoKHN0cmVhbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RyZWFtLCAncHJvZHVjZXJJZCcpICYmXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wcm9kdWNlcklkICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnByb2R1Y2VySWQgIT09ICcnKSB8fFxuICAgICAgICAgICAgICAgICAgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdHJlYW0sICdhdWRpb0lEJykgJiZcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtWydhdWRpb0lEJ10gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1bJ2F1ZGlvSUQnXSAhPT0gJycpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgcHJvZHVjZXJJZCA9IHN0cmVhbS5wcm9kdWNlcklkIHx8IHN0cmVhbVsnYXVkaW9JRCddO1xuICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoaW5nUGFydGljaXBhbnQgPSByZWZfcGFydGljaXBhbnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChvYmopID0+XG4gICAgICAgICAgICAgICAgICAgICAgb2JqWydhdWRpb0lEJ10gPT09IHByb2R1Y2VySWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICBvYmoudmlkZW9JRCA9PT0gcHJvZHVjZXJJZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICgocHJvZHVjZXJJZCA9PSAneW91eW91JyB8fCBwcm9kdWNlcklkID09ICd5b3V5b3V5b3UnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyID09IHBhcnRpY2lwYW50Lm5hbWUpLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIChtYXRjaGluZ1BhcnRpY2lwYW50ICYmIG1hdGNoaW5nUGFydGljaXBhbnQubmFtZSA9PT0gcGFydGljaXBhbnQubmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHBhcnRpY2lwYW50Lm5hbWUgPT0gbWVtYmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHByb2R1Y2VySWQgPT0gJ3lvdXlvdScgfHwgcHJvZHVjZXJJZCA9PSAneW91eW91eW91JykpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RyZWFtLCAnbmFtZScpICYmXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5uYW1lID09IHBhcnRpY2lwYW50Lm5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgc3RyZWFtIG9mIHN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0cmVhbXMubGVuZ3RoIDwgbGltaXRfKSB7XG4gICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWdpbmF0ZWRTdHJlYW1zLnB1c2goY3VycmVudFN0cmVhbXMpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLyogaGFuZGxlIGVycm9yICovXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlbWFpbmluZ1N0cmVhbXMgPSBhbGxTdHJlYW1zUGFnZWQuZmlsdGVyKChzdHJlYW0pID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0cmVhbSwgJ3Byb2R1Y2VySWQnKSAmJlxuICAgICAgICAgICAgICBzdHJlYW0ucHJvZHVjZXJJZCAhPSBudWxsICYmXG4gICAgICAgICAgICAgIHN0cmVhbS5wcm9kdWNlcklkICE9PSAnJykgfHxcbiAgICAgICAgICAgIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RyZWFtLCAnYXVkaW9JRCcpICYmXG4gICAgICAgICAgICAgIHN0cmVhbVsnYXVkaW9JRCddICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgc3RyZWFtWydhdWRpb0lEJ10gIT09ICcnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGV0IHByb2R1Y2VySWQgPSBzdHJlYW0ucHJvZHVjZXJJZCB8fCBzdHJlYW1bJ2F1ZGlvSUQnXTtcbiAgICAgICAgICAgIGxldCBtYXRjaGluZ1BhcnRpY2lwYW50ID0gcmVmX3BhcnRpY2lwYW50cy5maW5kKFxuICAgICAgICAgICAgICAob2JqKSA9PlxuICAgICAgICAgICAgICAgIG9ialsnYXVkaW9JRCddID09PSBwcm9kdWNlcklkIHx8XG4gICAgICAgICAgICAgICAgb2JqLnZpZGVvSUQgPT09IHByb2R1Y2VySWQgfHxcbiAgICAgICAgICAgICAgICAoKHByb2R1Y2VySWQgPT0gJ3lvdXlvdScgfHwgcHJvZHVjZXJJZCA9PSAneW91eW91eW91JykgJiYgbWVtYmVyID09IG9iai5uYW1lKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBtYXRjaGluZ1BhcnRpY2lwYW50ICYmXG4gICAgICAgICAgICAgICFicmVha291dFJvb21zXG4gICAgICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgICAgIC5tYXAoKG9iaikgPT4gb2JqLm5hbWUpXG4gICAgICAgICAgICAgICAgLmluY2x1ZGVzKG1hdGNoaW5nUGFydGljaXBhbnQubmFtZSkgJiZcbiAgICAgICAgICAgICAgKCFmaWx0ZXJIb3N0IHx8IG1hdGNoaW5nUGFydGljaXBhbnQubmFtZSAhPSBob3N0Py5uYW1lKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgIWJyZWFrb3V0Um9vbXNcbiAgICAgICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAgICAgLm1hcCgob2JqKSA9PiBvYmoubmFtZSlcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoc3RyZWFtLm5hbWUgPz8gJycpICYmXG4gICAgICAgICAgICAgICghZmlsdGVySG9zdCB8fCBzdHJlYW0ubmFtZSAhPSBob3N0Py5uYW1lKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtZW1iZXJJblJvb20pIHtcbiAgICAgICAgICBsZXQgbWVtYmVyU3RyZWFtID0gYWxsU3RyZWFtc1BhZ2VkLmZpbmQoKHN0cmVhbSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RyZWFtLCAncHJvZHVjZXJJZCcpICYmXG4gICAgICAgICAgICAgIHN0cmVhbS5wcm9kdWNlcklkICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgc3RyZWFtLnByb2R1Y2VySWQgIT09ICcnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5wcm9kdWNlcklkID09ICd5b3V5b3UnIHx8IHN0cmVhbS5wcm9kdWNlcklkID09ICd5b3V5b3V5b3UnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBZGQgYSByZXR1cm4gc3RhdGVtZW50IGhlcmVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAobWVtYmVyU3RyZWFtICYmICFyZW1haW5pbmdTdHJlYW1zLmluY2x1ZGVzKG1lbWJlclN0cmVhbSkpIHtcbiAgICAgICAgICAgIHJlbWFpbmluZ1N0cmVhbXMudW5zaGlmdChtZW1iZXJTdHJlYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVtYWluaW5nUGFnaW5hdGVkU3RyZWFtcyA9IFtdO1xuXG4gICAgICAgIGlmIChyZW1haW5pbmdTdHJlYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmaXJzdFBhZ2UgPSByZW1haW5pbmdTdHJlYW1zLnNsaWNlKDAsIGxpbWl0Xyk7XG4gICAgICAgICAgcmVtYWluaW5nUGFnaW5hdGVkU3RyZWFtcy5wdXNoKGZpcnN0UGFnZSk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGxpbWl0XzsgaSA8IHJlbWFpbmluZ1N0cmVhbXMubGVuZ3RoOyBpICs9IGxpbWl0KSB7XG4gICAgICAgICAgICBwYWdlID0gcmVtYWluaW5nU3RyZWFtcy5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgICAgcmVtYWluaW5nUGFnaW5hdGVkU3RyZWFtcy5wdXNoKHBhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG1haW5Sb29tc0xlbmd0aCA9IHJlbWFpbmluZ1BhZ2luYXRlZFN0cmVhbXMubGVuZ3RoO1xuICAgICAgICB1cGRhdGVNYWluUm9vbXNMZW5ndGgobWFpblJvb21zTGVuZ3RoKTtcbiAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcgc3RyZWFtcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWdpbmF0ZWRTdHJlYW1zXG4gICAgICAgIGZvciAobGV0IGkgPSByZW1haW5pbmdQYWdpbmF0ZWRTdHJlYW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgcGFnaW5hdGVkU3RyZWFtcy51bnNoaWZ0KHJlbWFpbmluZ1BhZ2luYXRlZFN0cmVhbXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXJzdFBhZ2UgPSBhbGxTdHJlYW1zUGFnZWQuc2xpY2UoMCwgbGltaXRfKTtcbiAgICAgICAgcGFnaW5hdGVkU3RyZWFtcy5wdXNoKGZpcnN0UGFnZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGxpbWl0XzsgaSA8IGFsbFN0cmVhbXNQYWdlZC5sZW5ndGg7IGkgKz0gbGltaXQpIHtcbiAgICAgICAgICBwYWdlID0gYWxsU3RyZWFtc1BhZ2VkLnNsaWNlKGksIGkgKyBsaW1pdCk7XG4gICAgICAgICAgcGFnaW5hdGVkU3RyZWFtcy5wdXNoKHBhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXRlIHVwZGF0ZXNcbiAgICAgIHVwZGF0ZVBfYWN0aXZlTmFtZXMocF9hY3RpdmVOYW1lcyk7XG4gICAgICB1cGRhdGVBY3RpdmVOYW1lcyhhY3RpdmVOYW1lcyk7XG4gICAgICB1cGRhdGVEaXNwQWN0aXZlTmFtZXMoZGlzcEFjdGl2ZU5hbWVzKTtcbiAgICAgIHVwZGF0ZU5ld0xpbWl0ZWRTdHJlYW1zKG5ld0xpbWl0ZWRTdHJlYW1zKTtcbiAgICAgIHVwZGF0ZU5vbl9hbFZpZGVvU3RyZWFtcyhub25fYWxWaWRlb1N0cmVhbXMpO1xuICAgICAgdXBkYXRlUmVmX3BhcnRpY2lwYW50cyhyZWZfcGFydGljaXBhbnRzKTtcbiAgICAgIHVwZGF0ZVNvcnRBdWRpb0xvdWRuZXNzKHNvcnRBdWRpb0xvdWRuZXNzKTtcbiAgICAgIHVwZGF0ZU1peGVkX2FsVmlkZW9TdHJlYW1zKG1peGVkX2FsVmlkZW9TdHJlYW1zKTtcbiAgICAgIHVwZGF0ZU5vbl9hbFZpZGVvU3RyZWFtc19tdXRlZChub25fYWxWaWRlb1N0cmVhbXNfbXV0ZWQpO1xuICAgICAgdXBkYXRlUGFnaW5hdGVkU3RyZWFtcyhwYWdpbmF0ZWRTdHJlYW1zKTtcblxuICAgICAgcHJldkRvUGFnaW5hdGUgPSBkb1BhZ2luYXRlO1xuICAgICAgZG9QYWdpbmF0ZSA9IGZhbHNlO1xuICAgICAgdXBkYXRlUHJldkRvUGFnaW5hdGUocHJldkRvUGFnaW5hdGUpO1xuICAgICAgdXBkYXRlRG9QYWdpbmF0ZShkb1BhZ2luYXRlKTtcblxuICAgICAgbGV0IGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgIGlmIChwYWdpbmF0ZWRTdHJlYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKCFzaGFyZVNjcmVlblN0YXJ0ZWQgJiYgIXNoYXJlZCkge1xuICAgICAgICAgIGRvUGFnaW5hdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZURvUGFnaW5hdGUoZG9QYWdpbmF0ZSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRVc2VyUGFnZSA+IHBhZ2luYXRlZFN0cmVhbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGlmIChicmVha091dFJvb21TdGFydGVkICYmICFicmVha091dFJvb21FbmRlZCkge1xuICAgICAgICAgICAgY3VycmVudFVzZXJQYWdlID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudFVzZXJQYWdlID0gcGFnaW5hdGVkU3RyZWFtcy5sZW5ndGggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VXNlclBhZ2UgPT0gMCkge1xuICAgICAgICAgIGlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVDdXJyZW50VXNlclBhZ2UoY3VycmVudFVzZXJQYWdlKTtcbiAgICAgICAgdXBkYXRlTnVtYmVyUGFnZXMocGFnaW5hdGVkU3RyZWFtcy5sZW5ndGggLSAxKTtcblxuICAgICAgICBpZiAoc2NyZWVuQ2hhbmdlZCkge1xuICAgICAgICAgIGF3YWl0IGRpc3BTdHJlYW1zKHtcbiAgICAgICAgICAgIGxTdHJlYW1zOiBwYWdpbmF0ZWRTdHJlYW1zWzBdLFxuICAgICAgICAgICAgaW5kOiAwLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBkaXNwU3RyZWFtcyh7XG4gICAgICAgICAgICBsU3RyZWFtczogcGFnaW5hdGVkU3RyZWFtc1swXSxcbiAgICAgICAgICAgIGluZDogMCxcbiAgICAgICAgICAgIGF1dG86IHRydWUsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlQnJlYWsgPSBjdXJyZW50VXNlclBhZ2UgLSBtYWluUm9vbXNMZW5ndGg7XG4gICAgICAgICAgYXdhaXQgZGlzcFN0cmVhbXMoe1xuICAgICAgICAgICAgbFN0cmVhbXM6IHBhZ2luYXRlZFN0cmVhbXNbY3VycmVudFVzZXJQYWdlXSxcbiAgICAgICAgICAgIGluZDogY3VycmVudFVzZXJQYWdlLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICAgIGJyZWFrUm9vbTogY3VycmVudFBhZ2VCcmVhayxcbiAgICAgICAgICAgIGluQnJlYWtSb29tOiBjdXJyZW50UGFnZUJyZWFrID49IDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRVc2VyUGFnZSA9IDA7XG4gICAgICAgIHVwZGF0ZUN1cnJlbnRVc2VyUGFnZShjdXJyZW50VXNlclBhZ2UpO1xuXG4gICAgICAgIGlmIChzY3JlZW5DaGFuZ2VkKSB7XG4gICAgICAgICAgYXdhaXQgZGlzcFN0cmVhbXMoe1xuICAgICAgICAgICAgbFN0cmVhbXM6IHBhZ2luYXRlZFN0cmVhbXNbMF0sXG4gICAgICAgICAgICBpbmQ6IDAsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGRpc3BTdHJlYW1zKHtcbiAgICAgICAgICAgIGxTdHJlYW1zOiBwYWdpbmF0ZWRTdHJlYW1zWzBdLFxuICAgICAgICAgICAgaW5kOiAwLFxuICAgICAgICAgICAgYXV0bzogdHJ1ZSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ2NoYW5nZVZpZHMgZXJyb3InLCBlcnJvcik7XG4gICAgfVxuICB9O1xufVxuIl19
|