@loxia/mst-viewer 8.1.3-202512170346 → 8.1.3-202512172157
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/generated/openapi/api/api.mjs +26 -0
- package/esm2022/generated/openapi/api/appConfigController.service.mjs +140 -0
- package/esm2022/generated/openapi/api/appConfigController.serviceInterface.mjs +2 -0
- package/esm2022/generated/openapi/api/bewegingController.service.mjs +155 -0
- package/esm2022/generated/openapi/api/bewegingController.serviceInterface.mjs +2 -0
- package/esm2022/generated/openapi/api/class0BuildProperties.service.mjs +140 -0
- package/esm2022/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +2 -0
- package/esm2022/generated/openapi/api/connectorController.service.mjs +146 -0
- package/esm2022/generated/openapi/api/connectorController.serviceInterface.mjs +2 -0
- package/esm2022/generated/openapi/api/logController.service.mjs +150 -0
- package/esm2022/generated/openapi/api/logController.serviceInterface.mjs +2 -0
- package/esm2022/generated/openapi/api/p21Controller.service.mjs +236 -0
- package/esm2022/generated/openapi/api/p21Controller.serviceInterface.mjs +2 -0
- package/esm2022/generated/openapi/api/sbController.service.mjs +203 -0
- package/esm2022/generated/openapi/api/sbController.serviceInterface.mjs +2 -0
- package/esm2022/generated/openapi/api/svgController.service.mjs +155 -0
- package/esm2022/generated/openapi/api/svgController.serviceInterface.mjs +2 -0
- package/esm2022/generated/openapi/api.module.mjs +40 -0
- package/esm2022/generated/openapi/configuration.mjs +99 -0
- package/esm2022/generated/openapi/encoder.mjs +19 -0
- package/esm2022/generated/openapi/index.mjs +7 -0
- package/esm2022/generated/openapi/model/actieDto.mjs +13 -0
- package/esm2022/generated/openapi/model/algemeneRitDto.mjs +13 -0
- package/esm2022/generated/openapi/model/bewegingDto.mjs +2 -0
- package/esm2022/generated/openapi/model/frontendKeycloakConfig.mjs +13 -0
- package/esm2022/generated/openapi/model/frontendProperties.mjs +2 -0
- package/esm2022/generated/openapi/model/kilometrering.mjs +13 -0
- package/esm2022/generated/openapi/model/logDto.mjs +2 -0
- package/esm2022/generated/openapi/model/models.mjs +18 -0
- package/esm2022/generated/openapi/model/ritRequestDto.mjs +2 -0
- package/esm2022/generated/openapi/model/sein.mjs +10 -0
- package/esm2022/generated/openapi/model/signaleringsElement.mjs +13 -0
- package/esm2022/generated/openapi/model/signaleringsbeeldDto.mjs +13 -0
- package/esm2022/generated/openapi/model/spoornummer.mjs +13 -0
- package/esm2022/generated/openapi/model/spoortakFragment.mjs +2 -0
- package/esm2022/generated/openapi/model/svgInfoDto.mjs +2 -0
- package/esm2022/generated/openapi/model/svgTopology.mjs +2 -0
- package/esm2022/generated/openapi/model/topologyElement.mjs +2 -0
- package/esm2022/generated/openapi/model/wissel.mjs +2 -0
- package/esm2022/generated/openapi/param.mjs +2 -0
- package/esm2022/generated/openapi/variables.mjs +9 -0
- package/esm2022/generated.version.mjs +2 -0
- package/esm2022/lib/atomic-components/message/index.mjs +4 -0
- package/esm2022/lib/atomic-components/message/message.component.mjs +34 -0
- package/esm2022/lib/atomic-components/message/message.mjs +8 -0
- package/esm2022/lib/atomic-components/message/severity.enum.mjs +9 -0
- package/esm2022/lib/atomic-components/messages/messages.component.mjs +20 -0
- package/esm2022/lib/atomic-components/overlay/overlay.component.mjs +11 -0
- package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.component.mjs +11 -0
- package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.entity.mjs +11 -0
- package/esm2022/lib/atomic-components/services/messages.service.mjs +27 -0
- package/esm2022/lib/components/carousel-controls/carousel-controls.component.mjs +39 -0
- package/esm2022/lib/components/mstviewer/mstviewer.component.mjs +116 -0
- package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +273 -0
- package/esm2022/lib/components/ritdelen-view/ritdelen-view.component.mjs +103 -0
- package/esm2022/lib/components/rpe/rpe.component.mjs +37 -0
- package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +275 -0
- package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +55 -0
- package/esm2022/lib/model/alternatief-rit-deel.mjs +7 -0
- package/esm2022/lib/model/km-range.mjs +39 -0
- package/esm2022/lib/model/melding-event.mjs +7 -0
- package/esm2022/lib/model/nieuwe-route.mjs +10 -0
- package/esm2022/lib/model/ongeplande-actie.mjs +7 -0
- package/esm2022/lib/model/rijwegplan-rijweg-dwang-combinatie.mjs +24 -0
- package/esm2022/lib/model/ritdeel.mjs +205 -0
- package/esm2022/lib/model/sein-op-ritdeel.mjs +7 -0
- package/esm2022/lib/model/wissel-kant-code.mjs +7 -0
- package/esm2022/lib/mst-viewer.module.mjs +144 -0
- package/esm2022/lib/optimo.mjs +9 -0
- package/esm2022/lib/resources/mstlogging.resource.mjs +25 -0
- package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +66 -0
- package/esm2022/lib/services/base-rest.service.mjs +28 -0
- package/esm2022/lib/services/beweging-utils.service.mjs +139 -0
- package/esm2022/lib/services/beweging-verrijker.service.mjs +30 -0
- package/esm2022/lib/services/connector.service.mjs +30 -0
- package/esm2022/lib/services/debug.service.mjs +59 -0
- package/esm2022/lib/services/editor.service.mjs +50 -0
- package/esm2022/lib/services/print-beweging.service.mjs +69 -0
- package/esm2022/lib/services/rit-lezer.service.mjs +104 -0
- package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +92 -0
- package/esm2022/lib/services/viewer-control.service.mjs +84 -0
- package/esm2022/lib/state/actions/actions.mjs +133 -0
- package/esm2022/lib/state/actions/ritdelen.actions.mjs +45 -0
- package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +79 -0
- package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +67 -0
- package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +73 -0
- package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +39 -0
- package/esm2022/lib/state/effect/focus-effect.mjs +36 -0
- package/esm2022/lib/state/effect/laad-route-files.effect.mjs +64 -0
- package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +361 -0
- package/esm2022/lib/state/effect/rit-goedkeuren.effect.mjs +23 -0
- package/esm2022/lib/state/effect/ritdelen.effect.mjs +113 -0
- package/esm2022/lib/state/effect/svg-view.effect.mjs +89 -0
- package/esm2022/lib/state/mst-editor-state.mjs +88 -0
- package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +62 -0
- package/esm2022/lib/util/actie-helper.mjs +441 -0
- package/esm2022/lib/util/actie-popover-bepaler.mjs +90 -0
- package/esm2022/lib/util/date.service.mjs +17 -0
- package/esm2022/lib/util/logging-helper.mjs +56 -0
- package/esm2022/lib/util/melding-builder.mjs +13 -0
- package/esm2022/lib/util/message-builder.mjs +32 -0
- package/esm2022/lib/util/multi-map.mjs +75 -0
- package/esm2022/lib/util/utils.mjs +35 -0
- package/esm2022/lib/util/zone-util.mjs +33 -0
- package/esm2022/loxia-mst-viewer.mjs +5 -0
- package/esm2022/public-api.mjs +9 -0
- package/esm2022/src/generated/openapi/api/api.mjs +26 -0
- package/esm2022/src/generated/openapi/api/appConfigController.service.mjs +140 -0
- package/esm2022/src/generated/openapi/api/appConfigController.serviceInterface.mjs +2 -0
- package/esm2022/src/generated/openapi/api/bewegingController.service.mjs +155 -0
- package/esm2022/src/generated/openapi/api/bewegingController.serviceInterface.mjs +2 -0
- package/esm2022/src/generated/openapi/api/class0BuildProperties.service.mjs +140 -0
- package/esm2022/src/generated/openapi/api/class0BuildProperties.serviceInterface.mjs +2 -0
- package/esm2022/src/generated/openapi/api/connectorController.service.mjs +146 -0
- package/esm2022/src/generated/openapi/api/connectorController.serviceInterface.mjs +2 -0
- package/esm2022/src/generated/openapi/api/logController.service.mjs +150 -0
- package/esm2022/src/generated/openapi/api/logController.serviceInterface.mjs +2 -0
- package/esm2022/src/generated/openapi/api/p21Controller.service.mjs +236 -0
- package/esm2022/src/generated/openapi/api/p21Controller.serviceInterface.mjs +2 -0
- package/esm2022/src/generated/openapi/api/sbController.service.mjs +203 -0
- package/esm2022/src/generated/openapi/api/sbController.serviceInterface.mjs +2 -0
- package/esm2022/src/generated/openapi/api/svgController.service.mjs +155 -0
- package/esm2022/src/generated/openapi/api/svgController.serviceInterface.mjs +2 -0
- package/esm2022/src/generated/openapi/api.module.mjs +40 -0
- package/esm2022/src/generated/openapi/configuration.mjs +99 -0
- package/esm2022/src/generated/openapi/encoder.mjs +19 -0
- package/esm2022/src/generated/openapi/index.mjs +7 -0
- package/esm2022/src/generated/openapi/loxia-mst-viewer-src-generated-openapi.mjs +5 -0
- package/esm2022/src/generated/openapi/model/actieDto.mjs +13 -0
- package/esm2022/src/generated/openapi/model/algemeneRitDto.mjs +13 -0
- package/esm2022/src/generated/openapi/model/bewegingDto.mjs +2 -0
- package/esm2022/src/generated/openapi/model/frontendKeycloakConfig.mjs +13 -0
- package/esm2022/src/generated/openapi/model/frontendProperties.mjs +2 -0
- package/esm2022/src/generated/openapi/model/kilometrering.mjs +13 -0
- package/esm2022/src/generated/openapi/model/logDto.mjs +2 -0
- package/esm2022/src/generated/openapi/model/models.mjs +18 -0
- package/esm2022/src/generated/openapi/model/ritRequestDto.mjs +2 -0
- package/esm2022/src/generated/openapi/model/sein.mjs +10 -0
- package/esm2022/src/generated/openapi/model/signaleringsElement.mjs +13 -0
- package/esm2022/src/generated/openapi/model/signaleringsbeeldDto.mjs +13 -0
- package/esm2022/src/generated/openapi/model/spoornummer.mjs +13 -0
- package/esm2022/src/generated/openapi/model/spoortakFragment.mjs +2 -0
- package/esm2022/src/generated/openapi/model/svgInfoDto.mjs +2 -0
- package/esm2022/src/generated/openapi/model/svgTopology.mjs +2 -0
- package/esm2022/src/generated/openapi/model/topologyElement.mjs +2 -0
- package/esm2022/src/generated/openapi/model/wissel.mjs +2 -0
- package/esm2022/src/generated/openapi/param.mjs +2 -0
- package/esm2022/src/generated/openapi/variables.mjs +9 -0
- package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs +224 -43
- package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs.map +1 -1
- package/fesm2022/loxia-mst-viewer.mjs +774 -533
- package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
- package/generated/openapi/api/api.d.ts +25 -0
- package/generated/openapi/api/appConfigController.service.d.ts +38 -0
- package/generated/openapi/api/appConfigController.serviceInterface.d.ts +24 -0
- package/generated/openapi/api/bewegingController.service.d.ts +40 -0
- package/generated/openapi/api/bewegingController.serviceInterface.d.ts +27 -0
- package/generated/openapi/api/class0BuildProperties.service.d.ts +36 -0
- package/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +23 -0
- package/generated/openapi/api/connectorController.service.d.ts +38 -0
- package/generated/openapi/api/connectorController.serviceInterface.d.ts +25 -0
- package/generated/openapi/api/logController.service.d.ts +38 -0
- package/generated/openapi/api/logController.serviceInterface.d.ts +25 -0
- package/generated/openapi/api/p21Controller.service.d.ts +62 -0
- package/generated/openapi/api/p21Controller.serviceInterface.d.ts +30 -0
- package/generated/openapi/api/sbController.service.d.ts +60 -0
- package/generated/openapi/api/sbController.serviceInterface.d.ts +32 -0
- package/generated/openapi/api/svgController.service.d.ts +40 -0
- package/generated/openapi/api/svgController.serviceInterface.d.ts +27 -0
- package/generated/openapi/api.module.d.ts +11 -0
- package/generated/openapi/configuration.d.ts +104 -0
- package/generated/openapi/encoder.d.ts +11 -0
- package/generated/openapi/index.d.ts +6 -0
- package/generated/openapi/model/actieDto.d.ts +35 -0
- package/generated/openapi/model/algemeneRitDto.d.ts +20 -0
- package/generated/openapi/model/bewegingDto.d.ts +37 -0
- package/generated/openapi/model/frontendKeycloakConfig.d.ts +16 -0
- package/generated/openapi/model/frontendProperties.d.ts +15 -0
- package/generated/openapi/model/kilometrering.d.ts +15 -0
- package/generated/openapi/model/logDto.d.ts +22 -0
- package/generated/openapi/model/models.d.ts +17 -0
- package/generated/openapi/model/ritRequestDto.d.ts +17 -0
- package/generated/openapi/model/sein.d.ts +46 -0
- package/generated/openapi/model/signaleringsElement.d.ts +16 -0
- package/generated/openapi/model/signaleringsbeeldDto.d.ts +16 -0
- package/generated/openapi/model/spoornummer.d.ts +17 -0
- package/generated/openapi/model/spoortakFragment.d.ts +26 -0
- package/generated/openapi/model/svgInfoDto.d.ts +16 -0
- package/generated/openapi/model/svgTopology.d.ts +21 -0
- package/generated/openapi/model/topologyElement.d.ts +18 -0
- package/generated/openapi/model/wissel.d.ts +31 -0
- package/generated/openapi/param.d.ts +37 -0
- package/generated/openapi/variables.d.ts +8 -0
- package/generated.version.d.ts +1 -0
- package/index.d.ts +3 -1079
- package/lib/atomic-components/message/index.d.ts +3 -0
- package/lib/atomic-components/message/message.component.d.ts +12 -0
- package/lib/atomic-components/message/message.d.ts +7 -0
- package/lib/atomic-components/message/severity.enum.d.ts +7 -0
- package/lib/atomic-components/messages/messages.component.d.ts +9 -0
- package/lib/atomic-components/overlay/overlay.component.d.ts +5 -0
- package/lib/atomic-components/progress-indicator/progress-indicator.component.d.ts +5 -0
- package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +6 -0
- package/lib/atomic-components/services/messages.service.d.ts +12 -0
- package/lib/components/carousel-controls/carousel-controls.component.d.ts +19 -0
- package/lib/components/mstviewer/mstviewer.component.d.ts +39 -0
- package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +72 -0
- package/lib/components/ritdelen-view/ritdelen-view.component.d.ts +33 -0
- package/lib/components/rpe/rpe.component.d.ts +11 -0
- package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +56 -0
- package/lib/components/viewer-controls/viewer-controls.component.d.ts +26 -0
- package/lib/model/alternatief-rit-deel.d.ts +7 -0
- package/lib/model/km-range.d.ts +13 -0
- package/lib/model/melding-event.d.ts +5 -0
- package/lib/model/nieuwe-route.d.ts +8 -0
- package/lib/model/ongeplande-actie.d.ts +6 -0
- package/lib/model/rijwegplan-rijweg-dwang-combinatie.d.ts +12 -0
- package/lib/model/ritdeel.d.ts +62 -0
- package/lib/model/sein-op-ritdeel.d.ts +7 -0
- package/lib/model/wissel-kant-code.d.ts +5 -0
- package/lib/mst-viewer.module.d.ts +34 -0
- package/lib/optimo.d.ts +69 -0
- package/lib/resources/mstlogging.resource.d.ts +15 -0
- package/lib/resources/signaleringsbeeldinfo.resource.d.ts +31 -0
- package/lib/services/base-rest.service.d.ts +16 -0
- package/lib/services/beweging-utils.service.d.ts +25 -0
- package/lib/services/beweging-verrijker.service.d.ts +11 -0
- package/lib/services/connector.service.d.ts +10 -0
- package/lib/services/debug.service.d.ts +15 -0
- package/lib/services/editor.service.d.ts +23 -0
- package/lib/services/print-beweging.service.d.ts +16 -0
- package/lib/services/rit-lezer.service.d.ts +22 -0
- package/lib/services/signalerings-beeld-manager.service.d.ts +29 -0
- package/lib/services/viewer-control.service.d.ts +27 -0
- package/lib/state/actions/actions.d.ts +276 -0
- package/lib/state/actions/ritdelen.actions.d.ts +97 -0
- package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +24 -0
- package/lib/state/effect/bepaal-sb-infos.effect.d.ts +23 -0
- package/lib/state/effect/beweging-invoegen.effect.d.ts +17 -0
- package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +15 -0
- package/lib/state/effect/focus-effect.d.ts +17 -0
- package/lib/state/effect/laad-route-files.effect.d.ts +27 -0
- package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +58 -0
- package/lib/state/effect/rit-goedkeuren.effect.d.ts +17 -0
- package/lib/state/effect/ritdelen.effect.d.ts +33 -0
- package/lib/state/effect/svg-view.effect.d.ts +23 -0
- package/lib/state/mst-editor-state.d.ts +71 -0
- package/lib/state/reducer/rit-delen.reducer.d.ts +4 -0
- package/lib/util/actie-helper.d.ts +117 -0
- package/lib/util/actie-popover-bepaler.d.ts +14 -0
- package/lib/util/date.service.d.ts +6 -0
- package/lib/util/logging-helper.d.ts +16 -0
- package/lib/util/melding-builder.d.ts +8 -0
- package/lib/util/message-builder.d.ts +13 -0
- package/lib/util/multi-map.d.ts +39 -0
- package/lib/util/utils.d.ts +3 -0
- package/lib/util/zone-util.d.ts +11 -0
- package/package.json +10 -6
- package/public-api.d.ts +5 -0
- package/src/generated/openapi/api/api.d.ts +25 -0
- package/src/generated/openapi/api/appConfigController.service.d.ts +38 -0
- package/src/generated/openapi/api/appConfigController.serviceInterface.d.ts +24 -0
- package/src/generated/openapi/api/bewegingController.service.d.ts +40 -0
- package/src/generated/openapi/api/bewegingController.serviceInterface.d.ts +27 -0
- package/src/generated/openapi/api/class0BuildProperties.service.d.ts +36 -0
- package/src/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +23 -0
- package/src/generated/openapi/api/connectorController.service.d.ts +38 -0
- package/src/generated/openapi/api/connectorController.serviceInterface.d.ts +25 -0
- package/src/generated/openapi/api/logController.service.d.ts +38 -0
- package/src/generated/openapi/api/logController.serviceInterface.d.ts +25 -0
- package/src/generated/openapi/api/p21Controller.service.d.ts +62 -0
- package/src/generated/openapi/api/p21Controller.serviceInterface.d.ts +30 -0
- package/src/generated/openapi/api/sbController.service.d.ts +60 -0
- package/src/generated/openapi/api/sbController.serviceInterface.d.ts +32 -0
- package/src/generated/openapi/api/svgController.service.d.ts +40 -0
- package/src/generated/openapi/api/svgController.serviceInterface.d.ts +27 -0
- package/src/generated/openapi/api.module.d.ts +11 -0
- package/src/generated/openapi/configuration.d.ts +104 -0
- package/src/generated/openapi/encoder.d.ts +11 -0
- package/src/generated/openapi/index.d.ts +6 -825
- package/src/generated/openapi/model/actieDto.d.ts +35 -0
- package/src/generated/openapi/model/algemeneRitDto.d.ts +20 -0
- package/src/generated/openapi/model/bewegingDto.d.ts +37 -0
- package/src/generated/openapi/model/frontendKeycloakConfig.d.ts +16 -0
- package/src/generated/openapi/model/frontendProperties.d.ts +15 -0
- package/src/generated/openapi/model/kilometrering.d.ts +15 -0
- package/src/generated/openapi/model/logDto.d.ts +22 -0
- package/src/generated/openapi/model/models.d.ts +17 -0
- package/src/generated/openapi/model/ritRequestDto.d.ts +17 -0
- package/src/generated/openapi/model/sein.d.ts +46 -0
- package/src/generated/openapi/model/signaleringsElement.d.ts +16 -0
- package/src/generated/openapi/model/signaleringsbeeldDto.d.ts +16 -0
- package/src/generated/openapi/model/spoornummer.d.ts +17 -0
- package/src/generated/openapi/model/spoortakFragment.d.ts +26 -0
- package/src/generated/openapi/model/svgInfoDto.d.ts +16 -0
- package/src/generated/openapi/model/svgTopology.d.ts +21 -0
- package/src/generated/openapi/model/topologyElement.d.ts +18 -0
- package/src/generated/openapi/model/wissel.d.ts +31 -0
- package/src/generated/openapi/param.d.ts +37 -0
- package/src/generated/openapi/variables.d.ts +8 -0
- package/tailwind.scss +4 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { JsJavaUtil } from '@loxia/rijwegen';
|
|
3
|
+
import { tap } from 'rxjs/operators';
|
|
4
|
+
import { KmRange } from '../model/km-range';
|
|
5
|
+
import { WisselKantCode } from '../model/wissel-kant-code';
|
|
6
|
+
import { MeldingBuilder } from './melding-builder';
|
|
7
|
+
import { MessageBuilder } from './message-builder';
|
|
8
|
+
import { ArrayMultimap } from './multi-map';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../services/signalerings-beeld-manager.service";
|
|
11
|
+
import * as i2 from "../resources/mstlogging.resource";
|
|
12
|
+
import * as i3 from "../atomic-components/services/messages.service";
|
|
13
|
+
import * as i4 from "@ngrx/store";
|
|
14
|
+
import * as i5 from "./logging-helper";
|
|
15
|
+
/**
|
|
16
|
+
* export const RIT_ACTIE_1 = 1;
|
|
17
|
+
* export const RIT_ACTIE_SLIJPEN_VIADUCT_KLEIN = 2;
|
|
18
|
+
* export const RIT_ACTIE_SLIJPEN_BOOG = 3;
|
|
19
|
+
*/
|
|
20
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_KLEIN = 4;
|
|
21
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_GROOT = 5;
|
|
22
|
+
/**
|
|
23
|
+
* export const RIT_ACTIE_SLIJPEN_OVERWEG = 6;
|
|
24
|
+
* export const RIT_ACTIE_SLIJPEN_BRUG_GROOT = 7;
|
|
25
|
+
* export const RIT_ACTIE_SLIJPEN_BRUG_KLEIN = 8;
|
|
26
|
+
* export const RIT_ACTIE_SLIJPEN_SPOORTAK = 9;
|
|
27
|
+
*/
|
|
28
|
+
export const RIT_ACTIE_VST = 10;
|
|
29
|
+
/**
|
|
30
|
+
* export const RIT_ACTIE_BVLBLD_T = 11;
|
|
31
|
+
* export const RIT_ACTIE_SLIJPEN_VIADUCT_GROOT = 12;
|
|
32
|
+
* export const RIT_ACTIE_PANTCONT_T = 13;
|
|
33
|
+
* export const RIT_ACTIE_RIJDRLIG_T = 14;
|
|
34
|
+
* export const RIT_ACTIE_SPSTLAPR_T = 15;
|
|
35
|
+
* export const RIT_ACTIE_SPSTOPPDEF_T = 16;
|
|
36
|
+
* export const RIT_ACTIE_SPSTOPPBLD_T = 17;
|
|
37
|
+
* export const RIT_ACTIE_SPSTDEF_T = 18;
|
|
38
|
+
* export const RIT_ACTIE_SPSTDWPR_T = 19;
|
|
39
|
+
* export const RIT_ACTIE_BAANBLD_T = 20;
|
|
40
|
+
* export const RIT_ACTIE_SPGEOM_T = 21;
|
|
41
|
+
* export const RIT_ACTIE_22 = 22;
|
|
42
|
+
* export const RIT_ACTIE_23 = 23;
|
|
43
|
+
* export const RIT_ACTIE_RIJDRDIK_T = 24;
|
|
44
|
+
* export const RIT_ACTIE_SLIJPEN_TUNNEL = 25;
|
|
45
|
+
*/
|
|
46
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_2_KOMMA_5 = 26;
|
|
47
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_29 = 27;
|
|
48
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_20 = 28;
|
|
49
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_18_KOMMA_5 = 29;
|
|
50
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_18 = 30;
|
|
51
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_15 = 31;
|
|
52
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_12 = 32;
|
|
53
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_10 = 33;
|
|
54
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_34_KOMMA_7 = 34;
|
|
55
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_9 = 35;
|
|
56
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_7_KOMMA_5 = 36;
|
|
57
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_7 = 37;
|
|
58
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_6 = 38;
|
|
59
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_5 = 39;
|
|
60
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_4_KOMMA_5 = 40;
|
|
61
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_4 = 41;
|
|
62
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_3_KOMMA_5 = 42;
|
|
63
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_8 = 43;
|
|
64
|
+
export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_39_KOMMA_1 = 44;
|
|
65
|
+
export class MstKilometrering {
|
|
66
|
+
constructor(kmLint, kmWaarde) {
|
|
67
|
+
this.kmLint = kmLint;
|
|
68
|
+
this.kmWaarde = kmWaarde;
|
|
69
|
+
}
|
|
70
|
+
getKmLint() {
|
|
71
|
+
return this.kmLint;
|
|
72
|
+
}
|
|
73
|
+
getKmWaarde() {
|
|
74
|
+
return this.kmWaarde;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export class ActieHelper {
|
|
78
|
+
static { this.HALF_ENGELS_WISSEL = 'HalveEngelseWissel'; }
|
|
79
|
+
static { this.ENGELS_WISSEL = 'EngelseWissel'; }
|
|
80
|
+
static { this.SLIJPEN_WISSEL_ACTIES = [
|
|
81
|
+
RIT_ACTIE_SLIJPEN_WISSEL_KLEIN,
|
|
82
|
+
RIT_ACTIE_SLIJPEN_WISSEL_GROOT,
|
|
83
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_2_KOMMA_5,
|
|
84
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_29,
|
|
85
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_20,
|
|
86
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_18_KOMMA_5,
|
|
87
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_18,
|
|
88
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_15,
|
|
89
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_12,
|
|
90
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_10,
|
|
91
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_34_KOMMA_7,
|
|
92
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_9,
|
|
93
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_7_KOMMA_5,
|
|
94
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_7,
|
|
95
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_6,
|
|
96
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_5,
|
|
97
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_4_KOMMA_5,
|
|
98
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_4,
|
|
99
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_3_KOMMA_5,
|
|
100
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_8,
|
|
101
|
+
RIT_ACTIE_SLIJPEN_WISSEL_1_OP_39_KOMMA_1
|
|
102
|
+
]; }
|
|
103
|
+
constructor(sbmService, mstLogResource, messagesService, store, loggingHelper) {
|
|
104
|
+
this.sbmService = sbmService;
|
|
105
|
+
this.mstLogResource = mstLogResource;
|
|
106
|
+
this.messagesService = messagesService;
|
|
107
|
+
this.store = store;
|
|
108
|
+
this.loggingHelper = loggingHelper;
|
|
109
|
+
this.debug = false;
|
|
110
|
+
this.store.select('debug').subscribe(debug => this.debug = debug);
|
|
111
|
+
}
|
|
112
|
+
static getActieTopoElements(ritDeel, sbmService) {
|
|
113
|
+
const actieTopoElements = ritDeel.getTopologieElementen().slice();
|
|
114
|
+
const extraTopoElement = ActieHelper.getVoorSectieVanBeginSein(ritDeel, sbmService);
|
|
115
|
+
if (extraTopoElement) {
|
|
116
|
+
actieTopoElements.splice(0, 0, extraTopoElement);
|
|
117
|
+
}
|
|
118
|
+
return actieTopoElements;
|
|
119
|
+
}
|
|
120
|
+
static isVSTActie(actie) {
|
|
121
|
+
return actie.ritActieTypeId === RIT_ACTIE_VST;
|
|
122
|
+
}
|
|
123
|
+
static isWisselSlijpenActie(actie) {
|
|
124
|
+
return this.SLIJPEN_WISSEL_ACTIES.indexOf(actie.ritActieTypeId) >= 0;
|
|
125
|
+
}
|
|
126
|
+
static bepaalTakId(actie) {
|
|
127
|
+
return actie.pplgNaam + '-' + actie.wisselNaam + '-' + actie.wisselKantCode;
|
|
128
|
+
}
|
|
129
|
+
static isHeelOfHalfEngelsWisselActie(actie) {
|
|
130
|
+
return actie.infraObjectType === this.HALF_ENGELS_WISSEL || actie.infraObjectType === this.ENGELS_WISSEL;
|
|
131
|
+
}
|
|
132
|
+
static getVSTActieOmschrijving(actie) {
|
|
133
|
+
if (this.isEngelseWissel(actie)) {
|
|
134
|
+
const wisselNamen = this.getWisselDelen(actie.wisselNaam);
|
|
135
|
+
const kantCodes = this.getKantCodes(actie.wisselKantCode);
|
|
136
|
+
return `VST ${wisselNamen[0]} ${kantCodes[0]} - ${wisselNamen[1]} ${kantCodes[1]}`;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return `VST ${actie.wisselNaam} ${ActieHelper.getKantcodeTekst(actie.wisselKantCode)}`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
static actieComparator(actie1, actie2) {
|
|
143
|
+
if (actie1.vanKilometrering && actie2.vanKilometrering && actie1.vanKilometrering !== actie2.vanKilometrering) {
|
|
144
|
+
return actie1.vanKilometrering > actie2.vanKilometrering ? 1 : -1;
|
|
145
|
+
}
|
|
146
|
+
if (actie1.ritActieTypeOmschrijving && actie2.ritActieTypeOmschrijving && actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
|
|
147
|
+
return actie1.ritActieTypeOmschrijving > actie2.ritActieTypeOmschrijving ? 1 : -1;
|
|
148
|
+
}
|
|
149
|
+
if (actie1.wisselNaam !== actie2.wisselNaam) {
|
|
150
|
+
return actie1.wisselNaam > actie2.wisselNaam ? 1 : -1;
|
|
151
|
+
}
|
|
152
|
+
if (actie1.wisselKantCode !== actie2.wisselKantCode) {
|
|
153
|
+
return actie1.wisselKantCode > actie2.wisselKantCode ? 1 : -1;
|
|
154
|
+
}
|
|
155
|
+
return 0;
|
|
156
|
+
}
|
|
157
|
+
static getWisselKantCodes(actie) {
|
|
158
|
+
const wisselKantCodes = [];
|
|
159
|
+
const namen = this.getWisselDelen(actie.wisselNaam);
|
|
160
|
+
const kantCodes = this.getKantCodes(actie.wisselKantCode);
|
|
161
|
+
for (let i = 0; i < namen.length; i++) {
|
|
162
|
+
wisselKantCodes.push(new WisselKantCode(namen[i], kantCodes[i]));
|
|
163
|
+
}
|
|
164
|
+
return wisselKantCodes;
|
|
165
|
+
}
|
|
166
|
+
static getWisselDelen(wisselNaam) {
|
|
167
|
+
return wisselNaam.split('|');
|
|
168
|
+
}
|
|
169
|
+
static getKantCodes(kantCodes) {
|
|
170
|
+
if (kantCodes.length === 2) {
|
|
171
|
+
return [kantCodes.charAt(0), kantCodes.charAt(1)];
|
|
172
|
+
}
|
|
173
|
+
return [kantCodes];
|
|
174
|
+
}
|
|
175
|
+
static getVoorSectieVanBeginSein(ritDeel, sbmService) {
|
|
176
|
+
// RPE toont een rijweg vanaf de sectiescheiding behorend bij het beginsein. MST levert bewegingen waarbij acties gedaan moeten
|
|
177
|
+
// worden tussen het beginsein en de genoemde sectiescheiding. Om deze te kunnen tonen voegen we de voorsectie van het beginsein
|
|
178
|
+
// toe aan de lijst met route elementen.
|
|
179
|
+
const beginRouteSein = ritDeel.getRoute().getBeginSein();
|
|
180
|
+
const sbSein = sbmService.getSBSein(beginRouteSein);
|
|
181
|
+
return sbSein ? sbSein.getVoorSectie() : null;
|
|
182
|
+
}
|
|
183
|
+
// make sure the elems are sorted in ascending order
|
|
184
|
+
static sorteerTopoElementen(topoElems) {
|
|
185
|
+
const topoElementen = topoElems.slice();
|
|
186
|
+
let lint = undefined;
|
|
187
|
+
let first;
|
|
188
|
+
let second;
|
|
189
|
+
for (const topoElement of topoElementen) {
|
|
190
|
+
let kilometreringen = null;
|
|
191
|
+
const kms = JsJavaUtil.listToArray(topoElement.getKilometreringen());
|
|
192
|
+
if (kms !== null && kms.length > 0) {
|
|
193
|
+
kilometreringen = kms;
|
|
194
|
+
}
|
|
195
|
+
if (kilometreringen && !first) {
|
|
196
|
+
first = kilometreringen[0].getKmWaarde();
|
|
197
|
+
lint = kilometreringen[0].getKmLint();
|
|
198
|
+
}
|
|
199
|
+
else if (kilometreringen && first && !second) {
|
|
200
|
+
const km = KmRange.getKilometrering(lint, kilometreringen);
|
|
201
|
+
if (km) {
|
|
202
|
+
second = km.getKmWaarde();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (first && second && first > second) {
|
|
206
|
+
topoElementen.reverse();
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return topoElementen;
|
|
211
|
+
}
|
|
212
|
+
static corrigeerTopoElementenZonderKms(topoElementenZonderKms, vanKilometreringen, totKilometreringen, kmRanges) {
|
|
213
|
+
topoElementenZonderKms.forEach(e => {
|
|
214
|
+
if (!vanKilometreringen && totKilometreringen) {
|
|
215
|
+
vanKilometreringen = [new MstKilometrering(totKilometreringen[0].getKmLint(), -100000)];
|
|
216
|
+
}
|
|
217
|
+
if (!totKilometreringen && vanKilometreringen) {
|
|
218
|
+
totKilometreringen = [new MstKilometrering(vanKilometreringen[0].getKmLint(), 100000)];
|
|
219
|
+
}
|
|
220
|
+
if (vanKilometreringen && totKilometreringen && vanKilometreringen[0] > totKilometreringen[0]) {
|
|
221
|
+
kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, -1), this.addKm(totKilometreringen, 1)));
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen ?? [], 1), this.addKm(totKilometreringen ?? [], -1)));
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
static addKm(kms, aantal) {
|
|
229
|
+
const retval = [];
|
|
230
|
+
for (const km of kms) {
|
|
231
|
+
retval.push(new MstKilometrering(km.getKmLint(), km.getKmWaarde() + aantal));
|
|
232
|
+
}
|
|
233
|
+
return retval;
|
|
234
|
+
}
|
|
235
|
+
static kanActiesBepalen(ritdeel) {
|
|
236
|
+
return ritdeel.isZichtbaar() && ritdeel.acties;
|
|
237
|
+
}
|
|
238
|
+
static isKilometreringAanwezig(fragmenten) {
|
|
239
|
+
let aanwezig = false;
|
|
240
|
+
for (const fragment of fragmenten) {
|
|
241
|
+
const kms = JsJavaUtil.listToArray(fragment.getKilometreringen());
|
|
242
|
+
if (kms !== null && kms.length > 0) {
|
|
243
|
+
aanwezig = true;
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return aanwezig;
|
|
248
|
+
}
|
|
249
|
+
static bepaalSpoortakFragmenten(spoortak) {
|
|
250
|
+
return JsJavaUtil.listToArray(spoortak.getTakElementen());
|
|
251
|
+
}
|
|
252
|
+
static bepaalSpoortakFragmentenPuics(fragmenten) {
|
|
253
|
+
const puics = [];
|
|
254
|
+
fragmenten.forEach(deel => puics.push(deel.getPuic()));
|
|
255
|
+
return puics;
|
|
256
|
+
}
|
|
257
|
+
static isEngelseWissel(actie) {
|
|
258
|
+
return actie.wisselNaam.includes('|') && actie.wisselKantCode.length === 2;
|
|
259
|
+
}
|
|
260
|
+
static getKantcodeTekst(kantcode) {
|
|
261
|
+
let tekst = 'Voor';
|
|
262
|
+
if (this.isKantCodeLinks(kantcode)) {
|
|
263
|
+
tekst = 'Links';
|
|
264
|
+
}
|
|
265
|
+
else if (this.isKantCodeRechts(kantcode)) {
|
|
266
|
+
tekst = 'Rechts';
|
|
267
|
+
}
|
|
268
|
+
return tekst;
|
|
269
|
+
}
|
|
270
|
+
static isKantCodeRechts(kantcode) {
|
|
271
|
+
return kantcode === 'R';
|
|
272
|
+
}
|
|
273
|
+
static isKantCodeLinks(kantcode) {
|
|
274
|
+
return kantcode === 'L';
|
|
275
|
+
}
|
|
276
|
+
bepaalPuicsVoorActie(actie) {
|
|
277
|
+
let puics;
|
|
278
|
+
if (ActieHelper.isVSTActie(actie)) {
|
|
279
|
+
puics = this.bepaalPuicsVoorVSTActie(actie);
|
|
280
|
+
}
|
|
281
|
+
else if (ActieHelper.isWisselSlijpenActie(actie)) {
|
|
282
|
+
puics = this.bepaalPuicVoorWisselSlijpenActie(actie);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
puics = this.bepaalActiePuicsVoorSpoortak(actie);
|
|
286
|
+
}
|
|
287
|
+
return puics;
|
|
288
|
+
}
|
|
289
|
+
bepaalActiePuicsUitRitdeel(ritDeel) {
|
|
290
|
+
const map = new ArrayMultimap();
|
|
291
|
+
if (ActieHelper.kanActiesBepalen(ritDeel)) {
|
|
292
|
+
ritDeel.acties.forEach(a => {
|
|
293
|
+
map.putAll(a, this.bepaalPuicsVoorActie(a));
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
return map;
|
|
297
|
+
}
|
|
298
|
+
bepaalActiesPuics(acties, topoElem) {
|
|
299
|
+
const topoElementen = ActieHelper.sorteerTopoElementen(topoElem);
|
|
300
|
+
const kmRanges = this.verwerkTopoElementen(topoElementen);
|
|
301
|
+
return this.verwerkActies(acties, kmRanges);
|
|
302
|
+
}
|
|
303
|
+
verwerkActies(acties, kmRanges) {
|
|
304
|
+
const actieZonderElementen = [];
|
|
305
|
+
const logMeldingDTOs = [];
|
|
306
|
+
const retval = new ArrayMultimap();
|
|
307
|
+
acties.forEach(actie => {
|
|
308
|
+
if (ActieHelper.isWisselSlijpenActie(actie)) {
|
|
309
|
+
const puicArray = this.bepaalPuicVoorWisselSlijpenActie(actie);
|
|
310
|
+
retval.putAll(actie, puicArray);
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
const puics = [];
|
|
314
|
+
kmRanges.forEach(kmRange => {
|
|
315
|
+
if (actie.vanKilometrering && actie.vanKilometerlint && actie.totKilometrering && actie.totKilometerlint) {
|
|
316
|
+
let vanKilometrering = new MstKilometrering(actie.vanKilometerlint, actie.vanKilometrering);
|
|
317
|
+
let totKilometrering = new MstKilometrering(actie.totKilometerlint, actie.totKilometrering);
|
|
318
|
+
if (actie.vanKilometrering > actie.totKilometrering) {
|
|
319
|
+
const temp = { van: vanKilometrering, tot: totKilometrering };
|
|
320
|
+
vanKilometrering = temp.tot;
|
|
321
|
+
totKilometrering = temp.van;
|
|
322
|
+
}
|
|
323
|
+
if (kmRange.heeftOverlap(vanKilometrering, totKilometrering)) {
|
|
324
|
+
puics.push(kmRange.topologyElement.getPuic());
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
if (puics.length === 0) {
|
|
329
|
+
actieZonderElementen.push(actie.id);
|
|
330
|
+
const melding = MeldingBuilder.actieHighlightError(actieZonderElementen);
|
|
331
|
+
this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(dto => logMeldingDTOs.push(dto))).subscribe();
|
|
332
|
+
}
|
|
333
|
+
retval.putAll(actie, puics);
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
this.logLegeMeldingDto(logMeldingDTOs);
|
|
337
|
+
return retval;
|
|
338
|
+
}
|
|
339
|
+
logLegeMeldingDto(logDto) {
|
|
340
|
+
if (logDto.length > 0) {
|
|
341
|
+
return this.mstLogResource.logMessages(logDto);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
verwerkTopoElementen(topoElementen) {
|
|
345
|
+
const kmRanges = [];
|
|
346
|
+
let topoElementenZonderKms = [];
|
|
347
|
+
let laatstePuntKms = undefined;
|
|
348
|
+
topoElementen.forEach(elem => {
|
|
349
|
+
const kms = JsJavaUtil.listToArray(elem.getKilometreringen());
|
|
350
|
+
if (kms.length > 0) {
|
|
351
|
+
ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, kms, kmRanges);
|
|
352
|
+
topoElementenZonderKms = [];
|
|
353
|
+
kmRanges.push(KmRange.rangeVoorPuntObject(elem));
|
|
354
|
+
laatstePuntKms = kms;
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
topoElementenZonderKms.push(elem);
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
if (topoElementenZonderKms.length > 0 && laatstePuntKms) {
|
|
361
|
+
ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, undefined, kmRanges);
|
|
362
|
+
}
|
|
363
|
+
return kmRanges;
|
|
364
|
+
}
|
|
365
|
+
bepaalActiePuicsVoorSpoortak(actie) {
|
|
366
|
+
const spoortak = this.sbmService.getSbSpoortak(ActieHelper.bepaalTakId(actie));
|
|
367
|
+
let puics = [];
|
|
368
|
+
if (!spoortak) {
|
|
369
|
+
return puics;
|
|
370
|
+
}
|
|
371
|
+
const fragmenten = ActieHelper.bepaalSpoortakFragmenten(spoortak);
|
|
372
|
+
if (ActieHelper.isKilometreringAanwezig(fragmenten)) {
|
|
373
|
+
const map = this.bepaalActiesPuics([actie], fragmenten);
|
|
374
|
+
for (const key of Array.from(map.keys())) {
|
|
375
|
+
map.get(key).forEach(x => puics.push(x));
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
puics = ActieHelper.bepaalSpoortakFragmentenPuics(fragmenten);
|
|
380
|
+
}
|
|
381
|
+
return puics;
|
|
382
|
+
}
|
|
383
|
+
bepaalPuicsVoorVSTActie(actie) {
|
|
384
|
+
if (ActieHelper.isHeelOfHalfEngelsWisselActie(actie)) {
|
|
385
|
+
const retval = [];
|
|
386
|
+
const wisselDelen = ActieHelper.getWisselDelen(actie.wisselNaam);
|
|
387
|
+
const puicsEersteWissel = this.bepaalWisselPuics(wisselDelen[0], actie.pplgNaam, actie.wisselKantCode[0]);
|
|
388
|
+
const puicsTweedeWissel = this.bepaalWisselPuics(wisselDelen[1], actie.pplgNaam, actie.wisselKantCode[1]);
|
|
389
|
+
const puic1 = this.sbmService.getEersteVerbindingPuicVoorSplitEngelseWissel(wisselDelen[0], actie.wisselKantCode[0]);
|
|
390
|
+
if (puic1 !== '') {
|
|
391
|
+
retval.push(puic1);
|
|
392
|
+
}
|
|
393
|
+
const puic2 = this.sbmService.getEersteVerbindingPuicVoorSplitEngelseWissel(wisselDelen[1], actie.wisselKantCode[1]);
|
|
394
|
+
if (puic2 !== '') {
|
|
395
|
+
retval.push(puic2);
|
|
396
|
+
}
|
|
397
|
+
retval.push(...puicsEersteWissel);
|
|
398
|
+
retval.push(...puicsTweedeWissel);
|
|
399
|
+
return retval;
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
return this.bepaalWisselPuics(actie.wisselNaam, actie.pplgNaam, actie.wisselKantCode);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
bepaalWisselPuics(wisselNaam, pplgNaam, kantcode) {
|
|
406
|
+
const wissel = this.sbmService.getSBWissel(wisselNaam, pplgNaam);
|
|
407
|
+
if (!wissel) {
|
|
408
|
+
return [];
|
|
409
|
+
}
|
|
410
|
+
const kantElement = this.bepaalKantElement(kantcode, wissel);
|
|
411
|
+
if (!kantElement) {
|
|
412
|
+
return [];
|
|
413
|
+
}
|
|
414
|
+
const storingSymboolPuic = wissel.getStoringSymboolPuic();
|
|
415
|
+
return [storingSymboolPuic, kantElement.getPuic()];
|
|
416
|
+
}
|
|
417
|
+
bepaalKantElement(kantcode, wissel) {
|
|
418
|
+
if (ActieHelper.isKantCodeRechts(kantcode)) {
|
|
419
|
+
return wissel.getRight();
|
|
420
|
+
}
|
|
421
|
+
if (ActieHelper.isKantCodeLinks(kantcode)) {
|
|
422
|
+
return wissel.getLeft();
|
|
423
|
+
}
|
|
424
|
+
return undefined;
|
|
425
|
+
}
|
|
426
|
+
bepaalPuicVoorWisselSlijpenActie(actie) {
|
|
427
|
+
const storingsSymboolPuic = this.sbmService.getSBWissel(actie.wisselNaam, actie.pplgNaam)?.getStoringSymboolPuic();
|
|
428
|
+
if (!storingsSymboolPuic && this.debug) {
|
|
429
|
+
const melding = MeldingBuilder.actieHighlightError([actie.id]);
|
|
430
|
+
this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
|
|
431
|
+
this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(logDto => this.mstLogResource.logMessages([logDto]))).subscribe();
|
|
432
|
+
}
|
|
433
|
+
return storingsSymboolPuic ? [storingsSymboolPuic] : [];
|
|
434
|
+
}
|
|
435
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActieHelper, deps: [{ token: i1.SignaleringsBeeldManagerService }, { token: i2.MstLoggingResource }, { token: i3.MessagesService }, { token: i4.Store }, { token: i5.LoggingHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
436
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActieHelper }); }
|
|
437
|
+
}
|
|
438
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ActieHelper, decorators: [{
|
|
439
|
+
type: Injectable
|
|
440
|
+
}], ctorParameters: () => [{ type: i1.SignaleringsBeeldManagerService }, { type: i2.MstLoggingResource }, { type: i3.MessagesService }, { type: i4.Store }, { type: i5.LoggingHelper }] });
|
|
441
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWUtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvYWN0aWUtaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTTNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7OztBQUk1Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQUMsQ0FBQztBQUNoRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyxFQUFFLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBRyxFQUFFLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBQ25E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QUFDO1lBRWpGLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQzlDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUMzRCxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWxCLENBQUM7UUFDRCxPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1RCxDQUFDOytHQWhaUSxXQUFXO21IQUFYLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKc0phdmFVdGlsLCBzYmJsYWQgfSBmcm9tICdAbG94aWEvcmlqd2VnZW4nO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2dEdG8gfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvb3BlbmFwaSc7XG5pbXBvcnQgeyBNZXNzYWdlc1NlcnZpY2UgfSBmcm9tICcuLi9hdG9taWMtY29tcG9uZW50cy9zZXJ2aWNlcy9tZXNzYWdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEttUmFuZ2UgfSBmcm9tICcuLi9tb2RlbC9rbS1yYW5nZSc7XG5pbXBvcnQgeyBNZWxkaW5nRXZlbnQgfSBmcm9tICcuLi9tb2RlbC9tZWxkaW5nLWV2ZW50JztcbmltcG9ydCB7IFJpdGRlZWwgfSBmcm9tICcuLi9tb2RlbC9yaXRkZWVsJztcbmltcG9ydCB7IFdpc3NlbEthbnRDb2RlIH0gZnJvbSAnLi4vbW9kZWwvd2lzc2VsLWthbnQtY29kZSc7XG5pbXBvcnQgeyBBY3RpZSB9IGZyb20gJy4uL29wdGltbyc7XG5pbXBvcnQgeyBNc3RMb2dnaW5nUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZXMvbXN0bG9nZ2luZy5yZXNvdXJjZSc7XG5pbXBvcnQgeyBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2lnbmFsZXJpbmdzLWJlZWxkLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNc3RFZGl0b3JTdGF0ZSB9IGZyb20gJy4uL3N0YXRlL21zdC1lZGl0b3Itc3RhdGUnO1xuaW1wb3J0IHsgTG9nZ2luZ0hlbHBlciB9IGZyb20gJy4vbG9nZ2luZy1oZWxwZXInO1xuaW1wb3J0IHsgTWVsZGluZ0J1aWxkZXIgfSBmcm9tICcuL21lbGRpbmctYnVpbGRlcic7XG5pbXBvcnQgeyBNZXNzYWdlQnVpbGRlciB9IGZyb20gJy4vbWVzc2FnZS1idWlsZGVyJztcbmltcG9ydCB7IEFycmF5TXVsdGltYXAgfSBmcm9tICcuL211bHRpLW1hcCc7XG5pbXBvcnQgS2lsb21ldHJlcmluZyA9IHNiYmxhZC5LaWxvbWV0cmVyaW5nO1xuaW1wb3J0IFRvcG9sb2d5RWxlbWVudCA9IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnQ7XG5cbi8qKlxuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV8xID0gMTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9WSUFEVUNUX0tMRUlOID0gMjtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9CT09HID0gMztcbiAqL1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF9LTEVJTiA9IDQ7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMX0dST09UID0gNTtcbi8qKlxuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX09WRVJXRUcgPSA2O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX0JSVUdfR1JPT1QgPSA3O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX0JSVUdfS0xFSU4gPSA4O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1NQT09SVEFLID0gOTtcbiAqL1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9WU1QgPSAxMDtcbi8qKlxuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9CVkxCTERfVCA9IDExO1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1ZJQURVQ1RfR1JPT1QgPSAxMjtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfUEFOVENPTlRfVCA9IDEzO1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9SSUpEUkxJR19UID0gMTQ7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQU1RMQVBSX1QgPSAxNTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU1BTVE9QUERFRl9UID0gMTY7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQU1RPUFBCTERfVCA9IDE3O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TUFNUREVGX1QgPSAxODtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU1BTVERXUFJfVCA9IDE5O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9CQUFOQkxEX1QgPSAyMDtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU1BHRU9NX1QgPSAyMTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfMjIgPSAyMjtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfMjMgPSAyMztcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfUklKRFJESUtfVCA9IDI0O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1RVTk5FTCA9IDI1O1xuICovXG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMl9LT01NQV81ID0gMjY7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMjkgPSAyNztcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8yMCA9IDI4O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzE4X0tPTU1BXzUgPSAyOTtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xOCA9IDMwO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzE1ID0gMzE7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTIgPSAzMjtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xMCA9IDMzO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzM0X0tPTU1BXzcgPSAzNDtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF85ID0gMzU7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfN19LT01NQV81ID0gMzY7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNyA9IDM3O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzYgPSAzODtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF81ID0gMzk7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNF9LT01NQV81ID0gNDA7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNCA9IDQxO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzNfS09NTUFfNSA9IDQyO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzggPSA0MztcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zOV9LT01NQV8xID0gNDQ7XG5cbmV4cG9ydCBjbGFzcyBNc3RLaWxvbWV0cmVyaW5nIGltcGxlbWVudHMgc2JibGFkLktpbG9tZXRyZXJpbmcge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkga21MaW50OiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkga21XYWFyZGU6IG51bWJlcikge1xuICAgIH1cblxuICAgIGdldEttTGludCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5rbUxpbnQ7XG4gICAgfVxuXG4gICAgZ2V0S21XYWFyZGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua21XYWFyZGU7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWN0aWVIZWxwZXIge1xuICAgIHN0YXRpYyByZWFkb25seSBIQUxGX0VOR0VMU19XSVNTRUwgPSAnSGFsdmVFbmdlbHNlV2lzc2VsJztcbiAgICBzdGF0aWMgcmVhZG9ubHkgRU5HRUxTX1dJU1NFTCA9ICdFbmdlbHNlV2lzc2VsJztcbiAgICBzdGF0aWMgcmVhZG9ubHkgU0xJSlBFTl9XSVNTRUxfQUNUSUVTID0gW1xuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfS0xFSU4sXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF9HUk9PVCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMl9LT01NQV81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8yOSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMjAsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzE4X0tPTU1BXzUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzE4LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xNSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTIsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzEwLFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zNF9LT01NQV83LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF85LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF83X0tPTU1BXzUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzcsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzYsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzRfS09NTUFfNSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfM19LT01NQV81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF84LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zOV9LT01NQV8xXTtcblxuICAgIHByaXZhdGUgZGVidWcgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2JtU2VydmljZTogU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1zdExvZ1Jlc291cmNlOiBNc3RMb2dnaW5nUmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlc1NlcnZpY2U6IE1lc3NhZ2VzU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBTdG9yZTxNc3RFZGl0b3JTdGF0ZT4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2dnaW5nSGVscGVyOiBMb2dnaW5nSGVscGVyKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KCdkZWJ1ZycpLnN1YnNjcmliZShkZWJ1ZyA9PiB0aGlzLmRlYnVnID0gZGVidWcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWN0aWVUb3BvRWxlbWVudHMocml0RGVlbDogUml0ZGVlbCwgc2JtU2VydmljZTogU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSk6IFRvcG9sb2d5RWxlbWVudFtdIHtcbiAgICAgICAgY29uc3QgYWN0aWVUb3BvRWxlbWVudHMgPSByaXREZWVsLmdldFRvcG9sb2dpZUVsZW1lbnRlbigpLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IGV4dHJhVG9wb0VsZW1lbnQgPSBBY3RpZUhlbHBlci5nZXRWb29yU2VjdGllVmFuQmVnaW5TZWluKHJpdERlZWwsIHNibVNlcnZpY2UpO1xuICAgICAgICBpZiAoZXh0cmFUb3BvRWxlbWVudCkge1xuICAgICAgICAgICAgYWN0aWVUb3BvRWxlbWVudHMuc3BsaWNlKDAsIDAsIGV4dHJhVG9wb0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3RpZVRvcG9FbGVtZW50cztcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNWU1RBY3RpZShhY3RpZTogQWN0aWUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFjdGllLnJpdEFjdGllVHlwZUlkID09PSBSSVRfQUNUSUVfVlNUO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZTogQWN0aWUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU0xJSlBFTl9XSVNTRUxfQUNUSUVTLmluZGV4T2YoYWN0aWUucml0QWN0aWVUeXBlSWQpID49IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGJlcGFhbFRha0lkKGFjdGllOiBBY3RpZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBhY3RpZS5wcGxnTmFhbSArICctJyArIGFjdGllLndpc3NlbE5hYW0gKyAnLScgKyBhY3RpZS53aXNzZWxLYW50Q29kZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNIZWVsT2ZIYWxmRW5nZWxzV2lzc2VsQWN0aWUoYWN0aWU6IEFjdGllKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhY3RpZS5pbmZyYU9iamVjdFR5cGUgPT09IHRoaXMuSEFMRl9FTkdFTFNfV0lTU0VMIHx8IGFjdGllLmluZnJhT2JqZWN0VHlwZSA9PT0gdGhpcy5FTkdFTFNfV0lTU0VMO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRWU1RBY3RpZU9tc2NocmlqdmluZyhhY3RpZTogQWN0aWUpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5pc0VuZ2Vsc2VXaXNzZWwoYWN0aWUpKSB7XG4gICAgICAgICAgICBjb25zdCB3aXNzZWxOYW1lbiA9IHRoaXMuZ2V0V2lzc2VsRGVsZW4oYWN0aWUud2lzc2VsTmFhbSk7XG4gICAgICAgICAgICBjb25zdCBrYW50Q29kZXMgPSB0aGlzLmdldEthbnRDb2RlcyhhY3RpZS53aXNzZWxLYW50Q29kZSk7XG4gICAgICAgICAgICByZXR1cm4gYFZTVCAkeyB3aXNzZWxOYW1lblswXSB9ICR7IGthbnRDb2Rlc1swXSB9IC0gJHsgd2lzc2VsTmFtZW5bMV0gfSAkeyBrYW50Q29kZXNbMV0gfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYFZTVCAkeyBhY3RpZS53aXNzZWxOYWFtIH0gJHsgQWN0aWVIZWxwZXIuZ2V0S2FudGNvZGVUZWtzdChhY3RpZS53aXNzZWxLYW50Q29kZSkgfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFjdGllQ29tcGFyYXRvcihhY3RpZTE6IEFjdGllLCBhY3RpZTI6IEFjdGllKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGFjdGllMS52YW5LaWxvbWV0cmVyaW5nICYmIGFjdGllMi52YW5LaWxvbWV0cmVyaW5nICYmIGFjdGllMS52YW5LaWxvbWV0cmVyaW5nICE9PSBhY3RpZTIudmFuS2lsb21ldHJlcmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGllMS52YW5LaWxvbWV0cmVyaW5nID4gYWN0aWUyLnZhbktpbG9tZXRyZXJpbmcgPyAxIDogLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGllMS5yaXRBY3RpZVR5cGVPbXNjaHJpanZpbmcgJiYgYWN0aWUyLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyAmJiBhY3RpZTEucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nICE9PSBhY3RpZTIucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aWUxLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyA+IGFjdGllMi5yaXRBY3RpZVR5cGVPbXNjaHJpanZpbmcgPyAxIDogLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGllMS53aXNzZWxOYWFtICE9PSBhY3RpZTIud2lzc2VsTmFhbSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGllMS53aXNzZWxOYWFtID4gYWN0aWUyLndpc3NlbE5hYW0gPyAxIDogLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGllMS53aXNzZWxLYW50Q29kZSAhPT0gYWN0aWUyLndpc3NlbEthbnRDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aWUxLndpc3NlbEthbnRDb2RlID4gYWN0aWUyLndpc3NlbEthbnRDb2RlID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRXaXNzZWxLYW50Q29kZXMoYWN0aWU6IEFjdGllKTogV2lzc2VsS2FudENvZGVbXSB7XG4gICAgICAgIGNvbnN0IHdpc3NlbEthbnRDb2RlczogV2lzc2VsS2FudENvZGVbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IG5hbWVuID0gdGhpcy5nZXRXaXNzZWxEZWxlbihhY3RpZS53aXNzZWxOYWFtKTtcbiAgICAgICAgY29uc3Qga2FudENvZGVzID0gdGhpcy5nZXRLYW50Q29kZXMoYWN0aWUud2lzc2VsS2FudENvZGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB3aXNzZWxLYW50Q29kZXMucHVzaChuZXcgV2lzc2VsS2FudENvZGUobmFtZW5baV0sIGthbnRDb2Rlc1tpXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdpc3NlbEthbnRDb2RlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0V2lzc2VsRGVsZW4od2lzc2VsTmFhbTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gd2lzc2VsTmFhbS5zcGxpdCgnfCcpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRLYW50Q29kZXMoa2FudENvZGVzOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmIChrYW50Q29kZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gW2thbnRDb2Rlcy5jaGFyQXQoMCksIGthbnRDb2Rlcy5jaGFyQXQoMSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBba2FudENvZGVzXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRWb29yU2VjdGllVmFuQmVnaW5TZWluKHJpdERlZWw6IFJpdGRlZWwsIHNibVNlcnZpY2U6IFNpZ25hbGVyaW5nc0JlZWxkTWFuYWdlclNlcnZpY2UpOiBUb3BvbG9neUVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgLy8gUlBFIHRvb250IGVlbiByaWp3ZWcgdmFuYWYgZGUgc2VjdGllc2NoZWlkaW5nIGJlaG9yZW5kIGJpaiBoZXQgYmVnaW5zZWluLiBNU1QgbGV2ZXJ0IGJld2VnaW5nZW4gd2FhcmJpaiBhY3RpZXMgZ2VkYWFuIG1vZXRlblxuICAgICAgICAvLyB3b3JkZW4gdHVzc2VuIGhldCBiZWdpbnNlaW4gZW4gZGUgZ2Vub2VtZGUgc2VjdGllc2NoZWlkaW5nLiBPbSBkZXplIHRlIGt1bm5lbiB0b25lbiB2b2VnZW4gd2UgZGUgdm9vcnNlY3RpZSB2YW4gaGV0IGJlZ2luc2VpblxuICAgICAgICAvLyB0b2UgYWFuIGRlIGxpanN0IG1ldCByb3V0ZSBlbGVtZW50ZW4uXG4gICAgICAgIGNvbnN0IGJlZ2luUm91dGVTZWluID0gcml0RGVlbC5nZXRSb3V0ZSgpLmdldEJlZ2luU2VpbigpO1xuICAgICAgICBjb25zdCBzYlNlaW4gPSBzYm1TZXJ2aWNlLmdldFNCU2VpbihiZWdpblJvdXRlU2Vpbik7XG4gICAgICAgIHJldHVybiBzYlNlaW4gPyBzYlNlaW4uZ2V0Vm9vclNlY3RpZSgpIDogbnVsbDtcbiAgICB9XG5cbi8vIG1ha2Ugc3VyZSB0aGUgZWxlbXMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICBwcml2YXRlIHN0YXRpYyBzb3J0ZWVyVG9wb0VsZW1lbnRlbih0b3BvRWxlbXM6IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSk6IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSB7XG4gICAgICAgIGNvbnN0IHRvcG9FbGVtZW50ZW4gPSB0b3BvRWxlbXMuc2xpY2UoKTtcbiAgICAgICAgbGV0IGxpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGZpcnN0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBzZWNvbmQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgICAgICBmb3IgKGNvbnN0IHRvcG9FbGVtZW50IG9mIHRvcG9FbGVtZW50ZW4pIHtcbiAgICAgICAgICAgIGxldCBraWxvbWV0cmVyaW5nZW4gPSBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBrbXM6IHNiYmxhZC5LaWxvbWV0cmVyaW5nW10gPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KHRvcG9FbGVtZW50LmdldEtpbG9tZXRyZXJpbmdlbigpKTtcbiAgICAgICAgICAgIGlmIChrbXMgIT09IG51bGwgJiYga21zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBraWxvbWV0cmVyaW5nZW4gPSBrbXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChraWxvbWV0cmVyaW5nZW4gJiYgIWZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBraWxvbWV0cmVyaW5nZW5bMF0uZ2V0S21XYWFyZGUoKTtcbiAgICAgICAgICAgICAgICBsaW50ID0ga2lsb21ldHJlcmluZ2VuWzBdLmdldEttTGludCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChraWxvbWV0cmVyaW5nZW4gJiYgZmlyc3QgJiYgIXNlY29uZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGttID0gS21SYW5nZS5nZXRLaWxvbWV0cmVyaW5nKGxpbnQsIGtpbG9tZXRyZXJpbmdlbik7XG4gICAgICAgICAgICAgICAgaWYgKGttKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IGttLmdldEttV2FhcmRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0ICYmIHNlY29uZCAmJiBmaXJzdCA+IHNlY29uZCkge1xuICAgICAgICAgICAgICAgIHRvcG9FbGVtZW50ZW4ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3BvRWxlbWVudGVuO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvcnJpZ2VlclRvcG9FbGVtZW50ZW5ab25kZXJLbXModG9wb0VsZW1lbnRlblpvbmRlckttczogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdLCB2YW5LaWxvbWV0cmVyaW5nZW46IHNiYmxhZC5LaWxvbWV0cmVyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RLaWxvbWV0cmVyaW5nZW46IHNiYmxhZC5LaWxvbWV0cmVyaW5nW10gfCB1bmRlZmluZWQsIGttUmFuZ2VzOiBLbVJhbmdlW10pOiB2b2lkIHtcbiAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YW5LaWxvbWV0cmVyaW5nZW4gJiYgdG90S2lsb21ldHJlcmluZ2VuKSB7XG4gICAgICAgICAgICAgICAgdmFuS2lsb21ldHJlcmluZ2VuID0gW25ldyBNc3RLaWxvbWV0cmVyaW5nKHRvdEtpbG9tZXRyZXJpbmdlblswXS5nZXRLbUxpbnQoKSwgLTEwMDAwMCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0b3RLaWxvbWV0cmVyaW5nZW4gJiYgdmFuS2lsb21ldHJlcmluZ2VuKSB7XG4gICAgICAgICAgICAgICAgdG90S2lsb21ldHJlcmluZ2VuID0gW25ldyBNc3RLaWxvbWV0cmVyaW5nKHZhbktpbG9tZXRyZXJpbmdlblswXS5nZXRLbUxpbnQoKSwgMTAwMDAwKV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YW5LaWxvbWV0cmVyaW5nZW4gJiYgdG90S2lsb21ldHJlcmluZ2VuICYmIHZhbktpbG9tZXRyZXJpbmdlblswXSA+IHRvdEtpbG9tZXRyZXJpbmdlblswXSkge1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLnB1c2goS21SYW5nZS5yYW5nZVZvb3JTdHJla09iamVjdChlLCB0aGlzLmFkZEttKHZhbktpbG9tZXRyZXJpbmdlbiwgLTEpLCB0aGlzLmFkZEttKHRvdEtpbG9tZXRyZXJpbmdlbiwgMSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga21SYW5nZXMucHVzaChLbVJhbmdlLnJhbmdlVm9vclN0cmVrT2JqZWN0KGUsIHRoaXMuYWRkS20odmFuS2lsb21ldHJlcmluZ2VuID8/IFtdLCAxKSwgdGhpcy5hZGRLbSh0b3RLaWxvbWV0cmVyaW5nZW4gPz8gW10sIC0xKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhZGRLbShrbXM6IEtpbG9tZXRyZXJpbmdbXSwgYWFudGFsOiBudW1iZXIpOiBLaWxvbWV0cmVyaW5nW10ge1xuICAgICAgICBjb25zdCByZXR2YWwgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrbSBvZiBrbXMpIHtcbiAgICAgICAgICAgIHJldHZhbC5wdXNoKG5ldyBNc3RLaWxvbWV0cmVyaW5nKGttLmdldEttTGludCgpLCBrbS5nZXRLbVdhYXJkZSgpICsgYWFudGFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBrYW5BY3RpZXNCZXBhbGVuKHJpdGRlZWw6IFJpdGRlZWwpOiBib29sZWFuIHwgQWN0aWVbXSB7XG4gICAgICAgIHJldHVybiByaXRkZWVsLmlzWmljaHRiYWFyKCkgJiYgcml0ZGVlbC5hY3RpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNLaWxvbWV0cmVyaW5nQWFud2V6aWcoZnJhZ21lbnRlbjogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBhYW53ZXppZyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50ZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGttcyA9IEpzSmF2YVV0aWwubGlzdFRvQXJyYXkoZnJhZ21lbnQuZ2V0S2lsb21ldHJlcmluZ2VuKCkpO1xuICAgICAgICAgICAgaWYgKGttcyAhPT0gbnVsbCAmJiBrbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFhbndlemlnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWFud2V6aWc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYmVwYWFsU3Bvb3J0YWtGcmFnbWVudGVuKHNwb29ydGFrOiBzYmJsYWQuU3Bvb3J0YWspOiBzYmJsYWQuVG9wb2xvZ3lFbGVtZW50W10ge1xuICAgICAgICByZXR1cm4gSnNKYXZhVXRpbC5saXN0VG9BcnJheShzcG9vcnRhay5nZXRUYWtFbGVtZW50ZW4oKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYmVwYWFsU3Bvb3J0YWtGcmFnbWVudGVuUHVpY3MoZnJhZ21lbnRlbjogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBwdWljczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZnJhZ21lbnRlbi5mb3JFYWNoKGRlZWwgPT4gcHVpY3MucHVzaChkZWVsLmdldFB1aWMoKSkpO1xuICAgICAgICByZXR1cm4gcHVpY3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNFbmdlbHNlV2lzc2VsKGFjdGllOiBBY3RpZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYWN0aWUud2lzc2VsTmFhbS5pbmNsdWRlcygnfCcpICYmIGFjdGllLndpc3NlbEthbnRDb2RlLmxlbmd0aCA9PT0gMjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRLYW50Y29kZVRla3N0KGthbnRjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdGVrc3QgPSAnVm9vcic7XG4gICAgICAgIGlmICh0aGlzLmlzS2FudENvZGVMaW5rcyhrYW50Y29kZSkpIHtcbiAgICAgICAgICAgIHRla3N0ID0gJ0xpbmtzJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzS2FudENvZGVSZWNodHMoa2FudGNvZGUpKSB7XG4gICAgICAgICAgICB0ZWtzdCA9ICdSZWNodHMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZWtzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBpc0thbnRDb2RlUmVjaHRzKGthbnRjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGthbnRjb2RlID09PSAnUic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNLYW50Q29kZUxpbmtzKGthbnRjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGthbnRjb2RlID09PSAnTCc7XG4gICAgfVxuXG4gICAgYmVwYWFsUHVpY3NWb29yQWN0aWUoYWN0aWU6IEFjdGllKTogc3RyaW5nW10ge1xuICAgICAgICBsZXQgcHVpY3M7XG4gICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1ZTVEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgcHVpY3MgPSB0aGlzLmJlcGFhbFB1aWNzVm9vclZTVEFjdGllKGFjdGllKTtcbiAgICAgICAgfSBlbHNlIGlmIChBY3RpZUhlbHBlci5pc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgIHB1aWNzID0gdGhpcy5iZXBhYWxQdWljVm9vcldpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWljcyA9IHRoaXMuYmVwYWFsQWN0aWVQdWljc1Zvb3JTcG9vcnRhayhhY3RpZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNzO1xuICAgIH1cblxuICAgIGJlcGFhbEFjdGllUHVpY3NVaXRSaXRkZWVsKHJpdERlZWw6IFJpdGRlZWwpOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+IHsvLyB2b29yIGhpZ2hsaWdodHNcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4oKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmthbkFjdGllc0JlcGFsZW4ocml0RGVlbCkpIHtcbiAgICAgICAgICAgIHJpdERlZWwuYWN0aWVzLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbWFwLnB1dEFsbChhLCB0aGlzLmJlcGFhbFB1aWNzVm9vckFjdGllKGEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuXG4gICAgYmVwYWFsQWN0aWVzUHVpY3MoYWN0aWVzOiBBY3RpZVtdLCB0b3BvRWxlbTogVG9wb2xvZ3lFbGVtZW50W10pOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgdG9wb0VsZW1lbnRlbiA9IEFjdGllSGVscGVyLnNvcnRlZXJUb3BvRWxlbWVudGVuKHRvcG9FbGVtKTtcblxuICAgICAgICBjb25zdCBrbVJhbmdlcyA9IHRoaXMudmVyd2Vya1RvcG9FbGVtZW50ZW4odG9wb0VsZW1lbnRlbik7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcndlcmtBY3RpZXMoYWN0aWVzLCBrbVJhbmdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJ3ZXJrQWN0aWVzKGFjdGllczogQWN0aWVbXSwga21SYW5nZXM6IEttUmFuZ2VbXSk6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4ge1xuICAgICAgICBjb25zdCBhY3RpZVpvbmRlckVsZW1lbnRlbjogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgY29uc3QgbG9nTWVsZGluZ0RUT3M6IExvZ0R0b1tdID0gW107XG5cbiAgICAgICAgY29uc3QgcmV0dmFsID0gbmV3IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4oKTtcbiAgICAgICAgYWN0aWVzLmZvckVhY2goYWN0aWUgPT4ge1xuICAgICAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzV2lzc2VsU2xpanBlbkFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1aWNBcnJheSA9IHRoaXMuYmVwYWFsUHVpY1Zvb3JXaXNzZWxTbGlqcGVuQWN0aWUoYWN0aWUpO1xuICAgICAgICAgICAgICAgIHJldHZhbC5wdXRBbGwoYWN0aWUsIHB1aWNBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1aWNzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLmZvckVhY2goa21SYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggYWN0aWUudmFuS2lsb21ldHJlcmluZyAmJiBhY3RpZS52YW5LaWxvbWV0ZXJsaW50ICYmIGFjdGllLnRvdEtpbG9tZXRyZXJpbmcgJiYgYWN0aWUudG90S2lsb21ldGVybGludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbktpbG9tZXRyZXJpbmcgPSBuZXcgTXN0S2lsb21ldHJlcmluZyhhY3RpZS52YW5LaWxvbWV0ZXJsaW50LCBhY3RpZS52YW5LaWxvbWV0cmVyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b3RLaWxvbWV0cmVyaW5nID0gbmV3IE1zdEtpbG9tZXRyZXJpbmcoYWN0aWUudG90S2lsb21ldGVybGludCwgYWN0aWUudG90S2lsb21ldHJlcmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aWUudmFuS2lsb21ldHJlcmluZyA+IGFjdGllLnRvdEtpbG9tZXRyZXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wID0ge3ZhbjogdmFuS2lsb21ldHJlcmluZywgdG90OiB0b3RLaWxvbWV0cmVyaW5nfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW5LaWxvbWV0cmVyaW5nID0gdGVtcC50b3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90S2lsb21ldHJlcmluZyA9IHRlbXAudmFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa21SYW5nZS5oZWVmdE92ZXJsYXAodmFuS2lsb21ldHJlcmluZywgdG90S2lsb21ldHJlcmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWljcy5wdXNoKGttUmFuZ2UudG9wb2xvZ3lFbGVtZW50LmdldFB1aWMoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocHVpY3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGllWm9uZGVyRWxlbWVudGVuLnB1c2goYWN0aWUuaWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWxkaW5nOiBNZWxkaW5nRXZlbnQgPSBNZWxkaW5nQnVpbGRlci5hY3RpZUhpZ2hsaWdodEVycm9yKGFjdGllWm9uZGVyRWxlbWVudGVuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnaW5nSGVscGVyLm1hYWtMb2dEVE8obWVsZGluZywgYWN0aWUpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAoZHRvID0+IGxvZ01lbGRpbmdEVE9zLnB1c2goZHRvKSlcbiAgICAgICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dmFsLnB1dEFsbChhY3RpZSwgcHVpY3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2dMZWdlTWVsZGluZ0R0byhsb2dNZWxkaW5nRFRPcyk7XG4gICAgICAgIHJldHVybiByZXR2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dMZWdlTWVsZGluZ0R0byhsb2dEdG86IExvZ0R0b1tdKTogdm9pZCB7XG4gICAgICAgIGlmIChsb2dEdG8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubXN0TG9nUmVzb3VyY2UubG9nTWVzc2FnZXMobG9nRHRvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmVyd2Vya1RvcG9FbGVtZW50ZW4odG9wb0VsZW1lbnRlbjogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdKTogS21SYW5nZVtdIHtcbiAgICAgICAgY29uc3Qga21SYW5nZXM6IEttUmFuZ2VbXSA9IFtdO1xuXG4gICAgICAgIGxldCB0b3BvRWxlbWVudGVuWm9uZGVyS21zOiBUb3BvbG9neUVsZW1lbnRbXSA9IFtdO1xuICAgICAgICBsZXQgbGFhdHN0ZVB1bnRLbXM6IEtpbG9tZXRyZXJpbmdbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdG9wb0VsZW1lbnRlbi5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgICAgY29uc3Qga21zOiBLaWxvbWV0cmVyaW5nW10gPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KGVsZW0uZ2V0S2lsb21ldHJlcmluZ2VuKCkpO1xuICAgICAgICAgICAgaWYgKGttcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgQWN0aWVIZWxwZXIuY29ycmlnZWVyVG9wb0VsZW1lbnRlblpvbmRlckttcyh0b3BvRWxlbWVudGVuWm9uZGVyS21zLCBsYWF0c3RlUHVudEttcywga21zLCBrbVJhbmdlcyk7XG4gICAgICAgICAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcyA9IFtdO1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLnB1c2goS21SYW5nZS5yYW5nZVZvb3JQdW50T2JqZWN0KGVsZW0pKTtcbiAgICAgICAgICAgICAgICBsYWF0c3RlUHVudEttcyA9IGttcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcy5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRvcG9FbGVtZW50ZW5ab25kZXJLbXMubGVuZ3RoID4gMCAmJiBsYWF0c3RlUHVudEttcykge1xuICAgICAgICAgICAgQWN0aWVIZWxwZXIuY29ycmlnZWVyVG9wb0VsZW1lbnRlblpvbmRlckttcyh0b3BvRWxlbWVudGVuWm9uZGVyS21zLCBsYWF0c3RlUHVudEttcywgdW5kZWZpbmVkLCBrbVJhbmdlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGttUmFuZ2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsQWN0aWVQdWljc1Zvb3JTcG9vcnRhayhhY3RpZTogQWN0aWUpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHNwb29ydGFrID0gdGhpcy5zYm1TZXJ2aWNlLmdldFNiU3Bvb3J0YWsoQWN0aWVIZWxwZXIuYmVwYWFsVGFrSWQoYWN0aWUpKTtcblxuICAgICAgICBsZXQgcHVpY3M6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICghc3Bvb3J0YWspIHtcbiAgICAgICAgICAgIHJldHVybiBwdWljcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcmFnbWVudGVuID0gQWN0aWVIZWxwZXIuYmVwYWFsU3Bvb3J0YWtGcmFnbWVudGVuKHNwb29ydGFrKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2lsb21ldHJlcmluZ0FhbndlemlnKGZyYWdtZW50ZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSB0aGlzLmJlcGFhbEFjdGllc1B1aWNzKFthY3RpZV0sIGZyYWdtZW50ZW4pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgQXJyYXkuZnJvbShtYXAua2V5cygpKSkge1xuICAgICAgICAgICAgICAgIG1hcC5nZXQoa2V5KS5mb3JFYWNoKHggPT4gcHVpY3MucHVzaCh4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWljcyA9IEFjdGllSGVscGVyLmJlcGFhbFNwb29ydGFrRnJhZ21lbnRlblB1aWNzKGZyYWdtZW50ZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwdWljcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbFB1aWNzVm9vclZTVEFjdGllKGFjdGllOiBBY3RpZSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzSGVlbE9mSGFsZkVuZ2Vsc1dpc3NlbEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0dmFsID0gW107XG4gICAgICAgICAgICBjb25zdCB3aXNzZWxEZWxlbiA9IEFjdGllSGVscGVyLmdldFdpc3NlbERlbGVuKGFjdGllLndpc3NlbE5hYW0pO1xuICAgICAgICAgICAgY29uc3QgcHVpY3NFZXJzdGVXaXNzZWwgPSB0aGlzLmJlcGFhbFdpc3NlbFB1aWNzKHdpc3NlbERlbGVuWzBdLCBhY3RpZS5wcGxnTmFhbSwgYWN0aWUud2lzc2VsS2FudENvZGVbMF0pO1xuICAgICAgICAgICAgY29uc3QgcHVpY3NUd2VlZGVXaXNzZWwgPSB0aGlzLmJlcGFhbFdpc3NlbFB1aWNzKHdpc3NlbERlbGVuWzFdLCBhY3RpZS5wcGxnTmFhbSwgYWN0aWUud2lzc2VsS2FudENvZGVbMV0pO1xuXG4gICAgICAgICAgICBjb25zdCBwdWljMSA9IHRoaXMuc2JtU2VydmljZS5nZXRFZXJzdGVWZXJiaW5kaW5nUHVpY1Zvb3JTcGxpdEVuZ2Vsc2VXaXNzZWwod2lzc2VsRGVsZW5bMF0sIGFjdGllLndpc3NlbEthbnRDb2RlWzBdKTtcbiAgICAgICAgICAgIGlmIChwdWljMSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwucHVzaChwdWljMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwdWljMiA9IHRoaXMuc2JtU2VydmljZS5nZXRFZXJzdGVWZXJiaW5kaW5nUHVpY1Zvb3JTcGxpdEVuZ2Vsc2VXaXNzZWwod2lzc2VsRGVsZW5bMV0sIGFjdGllLndpc3NlbEthbnRDb2RlWzFdKTtcbiAgICAgICAgICAgIGlmIChwdWljMiAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwucHVzaChwdWljMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR2YWwucHVzaCguLi5wdWljc0VlcnN0ZVdpc3NlbCk7XG4gICAgICAgICAgICByZXR2YWwucHVzaCguLi5wdWljc1R3ZWVkZVdpc3NlbCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmVwYWFsV2lzc2VsUHVpY3MoYWN0aWUud2lzc2VsTmFhbSwgYWN0aWUucHBsZ05hYW0sIGFjdGllLndpc3NlbEthbnRDb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsV2lzc2VsUHVpY3Mod2lzc2VsTmFhbTogc3RyaW5nLCBwcGxnTmFhbTogc3RyaW5nLCBrYW50Y29kZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCB3aXNzZWwgPSB0aGlzLnNibVNlcnZpY2UuZ2V0U0JXaXNzZWwod2lzc2VsTmFhbSwgcHBsZ05hYW0pO1xuICAgICAgICBpZiAoIXdpc3NlbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGthbnRFbGVtZW50ID0gdGhpcy5iZXBhYWxLYW50RWxlbWVudChrYW50Y29kZSwgd2lzc2VsKTtcbiAgICAgICAgaWYgKCFrYW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3JpbmdTeW1ib29sUHVpYyA9IHdpc3NlbC5nZXRTdG9yaW5nU3ltYm9vbFB1aWMoKTtcblxuICAgICAgICByZXR1cm4gW3N0b3JpbmdTeW1ib29sUHVpYywga2FudEVsZW1lbnQuZ2V0UHVpYygpXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbEthbnRFbGVtZW50KGthbnRjb2RlOiBzdHJpbmcsIHdpc3NlbDogc2JibGFkLldpc3NlbCk6IHNiYmxhZC5TcG9vcnRha0ZyYWdtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2FudENvZGVSZWNodHMoa2FudGNvZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd2lzc2VsLmdldFJpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2FudENvZGVMaW5rcyhrYW50Y29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXNzZWwuZ2V0TGVmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZXBhYWxQdWljVm9vcldpc3NlbFNsaWpwZW5BY3RpZShhY3RpZTogQWN0aWUpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHN0b3JpbmdzU3ltYm9vbFB1aWMgPSB0aGlzLnNibVNlcnZpY2UuZ2V0U0JXaXNzZWwoYWN0aWUud2lzc2VsTmFhbSwgYWN0aWUucHBsZ05hYW0pPy5nZXRTdG9yaW5nU3ltYm9vbFB1aWMoKTtcbiAgICAgICAgaWYgKCFzdG9yaW5nc1N5bWJvb2xQdWljICYmIHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbGRpbmc6IE1lbGRpbmdFdmVudCA9IE1lbGRpbmdCdWlsZGVyLmFjdGllSGlnaGxpZ2h0RXJyb3IoW2FjdGllLmlkXSk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzU2VydmljZS5zaG93TWVzc2FnZShNZXNzYWdlQnVpbGRlci5hY3RpZUhpZ2hsaWdodEVycm9yKFthY3RpZS5pZF0pKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnaW5nSGVscGVyLm1hYWtMb2dEVE8obWVsZGluZywgYWN0aWUpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKGxvZ0R0byA9PiB0aGlzLm1zdExvZ1Jlc291cmNlLmxvZ01lc3NhZ2VzKFtsb2dEdG9dKSlcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmluZ3NTeW1ib29sUHVpYyA/IFtzdG9yaW5nc1N5bWJvb2xQdWljXSA6IFtdO1xuICAgIH1cbn1cblxuXG4iXX0=
|