@sbb-esta/lyne-elements-experimental 2.10.0 → 2.11.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/custom-elements.json +4286 -0
- package/development/seat-reservation/common/mapper/icon-mapper.d.ts +112 -0
- package/development/seat-reservation/common/mapper/icon-mapper.d.ts.map +1 -0
- package/development/seat-reservation/common/mapper/icon-mapper.js +72 -0
- package/development/seat-reservation/common/mapper/mapper.d.ts +29 -0
- package/development/seat-reservation/common/mapper/mapper.d.ts.map +1 -0
- package/development/seat-reservation/common/mapper/mapper.js +117 -0
- package/development/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts +225 -0
- package/development/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts.map +1 -0
- package/development/seat-reservation/common/mapper/seat-reservation-sample-data.js +6152 -0
- package/development/seat-reservation/common/mapper.d.ts +3 -0
- package/development/seat-reservation/common/mapper.d.ts.map +1 -0
- package/development/seat-reservation/common/mapper.js +10 -0
- package/development/seat-reservation/common/svgs.d.ts +25 -0
- package/development/seat-reservation/common/svgs.d.ts.map +1 -0
- package/development/seat-reservation/common/svgs.js +48 -0
- package/development/seat-reservation/common/translations/i18n.d.ts +19 -0
- package/development/seat-reservation/common/translations/i18n.d.ts.map +1 -0
- package/development/seat-reservation/common/translations/i18n.js +462 -0
- package/development/seat-reservation/common/translations.d.ts +2 -0
- package/development/seat-reservation/common/translations.d.ts.map +1 -0
- package/development/seat-reservation/common/translations.js +5 -0
- package/development/seat-reservation/common.d.ts +5 -0
- package/development/seat-reservation/common.d.ts.map +1 -0
- package/development/seat-reservation/common.js +18 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +156 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +706 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-scoped-component/seat-reservation-scoped.component.d.ts +29 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-scoped-component/seat-reservation-scoped.component.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-scoped-component/seat-reservation-scoped.component.js +196 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-scoped-component.d.ts +2 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-scoped-component.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-scoped-component.js +5 -0
- package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts +62 -0
- package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation/seat-reservation.component.js +615 -0
- package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts +18 -0
- package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +108 -0
- package/development/seat-reservation/seat-reservation-area.d.ts +2 -0
- package/development/seat-reservation/seat-reservation-area.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-area.js +5 -0
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts +9 -0
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +326 -0
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +29 -0
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +224 -0
- package/development/seat-reservation/seat-reservation-graphic.d.ts +2 -0
- package/development/seat-reservation/seat-reservation-graphic.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-graphic.js +5 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts +65 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +576 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts +2 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.js +5 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts +21 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +123 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts +2 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.js +5 -0
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +53 -0
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +446 -0
- package/development/seat-reservation/seat-reservation-place-control.d.ts +2 -0
- package/development/seat-reservation/seat-reservation-place-control.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation-place-control.js +5 -0
- package/development/seat-reservation/seat-reservation.d.ts +73 -0
- package/development/seat-reservation/seat-reservation.d.ts.map +1 -0
- package/development/seat-reservation/seat-reservation.js +7 -0
- package/development/seat-reservation.d.ts +5 -0
- package/development/seat-reservation.d.ts.map +1 -0
- package/development/seat-reservation.js +7 -0
- package/index.d.ts +14 -0
- package/index.js +14 -0
- package/package.json +7 -2
- package/seat-reservation/common/mapper/icon-mapper.d.ts +112 -0
- package/seat-reservation/common/mapper/icon-mapper.d.ts.map +1 -0
- package/seat-reservation/common/mapper/icon-mapper.js +71 -0
- package/seat-reservation/common/mapper/mapper.d.ts +29 -0
- package/seat-reservation/common/mapper/mapper.d.ts.map +1 -0
- package/seat-reservation/common/mapper/mapper.js +87 -0
- package/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts +225 -0
- package/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts.map +1 -0
- package/seat-reservation/common/mapper/seat-reservation-sample-data.js +6149 -0
- package/seat-reservation/common/mapper.d.ts +3 -0
- package/seat-reservation/common/mapper.d.ts.map +1 -0
- package/seat-reservation/common/mapper.js +9 -0
- package/seat-reservation/common/svgs.d.ts +25 -0
- package/seat-reservation/common/svgs.d.ts.map +1 -0
- package/seat-reservation/common/svgs.js +250 -0
- package/seat-reservation/common/translations/i18n.d.ts +19 -0
- package/seat-reservation/common/translations/i18n.d.ts.map +1 -0
- package/seat-reservation/common/translations/i18n.js +460 -0
- package/seat-reservation/common/translations.d.ts +2 -0
- package/seat-reservation/common/translations.d.ts.map +1 -0
- package/seat-reservation/common/translations.js +4 -0
- package/seat-reservation/common.d.ts +5 -0
- package/seat-reservation/common.d.ts.map +1 -0
- package/seat-reservation/common.js +17 -0
- package/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +156 -0
- package/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -0
- package/seat-reservation/seat-reservation/seat-reservation-base-element.js +435 -0
- package/seat-reservation/seat-reservation/seat-reservation-scoped-component/seat-reservation-scoped.component.d.ts +29 -0
- package/seat-reservation/seat-reservation/seat-reservation-scoped-component/seat-reservation-scoped.component.d.ts.map +1 -0
- package/seat-reservation/seat-reservation/seat-reservation-scoped-component/seat-reservation-scoped.component.js +107 -0
- package/seat-reservation/seat-reservation/seat-reservation-scoped-component.d.ts +2 -0
- package/seat-reservation/seat-reservation/seat-reservation-scoped-component.d.ts.map +1 -0
- package/seat-reservation/seat-reservation/seat-reservation-scoped-component.js +4 -0
- package/seat-reservation/seat-reservation/seat-reservation.component.d.ts +62 -0
- package/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -0
- package/seat-reservation/seat-reservation/seat-reservation.component.js +404 -0
- package/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts +18 -0
- package/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +49 -0
- package/seat-reservation/seat-reservation-area.d.ts +2 -0
- package/seat-reservation/seat-reservation-area.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-area.js +4 -0
- package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts +9 -0
- package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +317 -0
- package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +29 -0
- package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +113 -0
- package/seat-reservation/seat-reservation-graphic.d.ts +2 -0
- package/seat-reservation/seat-reservation-graphic.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-graphic.js +4 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts +65 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +248 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts +2 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.js +4 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts +21 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +80 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts +2 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.js +4 -0
- package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +53 -0
- package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +190 -0
- package/seat-reservation/seat-reservation-place-control.d.ts +2 -0
- package/seat-reservation/seat-reservation-place-control.d.ts.map +1 -0
- package/seat-reservation/seat-reservation-place-control.js +4 -0
- package/seat-reservation/seat-reservation.d.ts +73 -0
- package/seat-reservation/seat-reservation.d.ts.map +1 -0
- package/seat-reservation/seat-reservation.js +6 -0
- package/seat-reservation.d.ts +5 -0
- package/seat-reservation.d.ts.map +1 -0
- package/seat-reservation.js +6 -0
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
import { __runInitializers, __esDecorate } from "tslib";
|
|
9
|
+
import { SbbLanguageController } from "@sbb-esta/lyne-elements/core/controllers.js";
|
|
10
|
+
import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
|
|
11
|
+
import { css, html, nothing } from "lit";
|
|
12
|
+
import { customElement, property } from "lit/decorators.js";
|
|
13
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
14
|
+
import { styleMap } from "lit/directives/style-map.js";
|
|
15
|
+
import { getI18nSeatReservation } from "../common.js";
|
|
16
|
+
import { SeatReservationBaseElement } from "./seat-reservation-base-element.js";
|
|
17
|
+
import "@sbb-esta/lyne-elements/screen-reader-only.js";
|
|
18
|
+
import "../seat-reservation-area.js";
|
|
19
|
+
import "../seat-reservation-graphic.js";
|
|
20
|
+
import "../seat-reservation-place-control.js";
|
|
21
|
+
import "../seat-reservation-navigation/seat-reservation-navigation-coach.js";
|
|
22
|
+
import "./seat-reservation-scoped-component/seat-reservation-scoped.component.js";
|
|
23
|
+
const style = css`*,
|
|
24
|
+
::before,
|
|
25
|
+
::after {
|
|
26
|
+
box-sizing: border-box;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
:host {
|
|
30
|
+
--sbb-seat-reservation-grid-size: 16px;
|
|
31
|
+
--sbb-seat-reservation-vertical-offset: 0;
|
|
32
|
+
display: block;
|
|
33
|
+
}
|
|
34
|
+
:host ::part(coach-floor) {
|
|
35
|
+
fill: var(--sbb-color-white);
|
|
36
|
+
}
|
|
37
|
+
@media (forced-colors: active) {
|
|
38
|
+
:host ::part(coach-floor) {
|
|
39
|
+
fill: transparent;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.sbb-sr__wrapper--vertical {
|
|
44
|
+
width: fit-content;
|
|
45
|
+
position: relative;
|
|
46
|
+
inset-inline-start: var(--sbb-seat-reservation-vertical-offset);
|
|
47
|
+
rotate: 90deg;
|
|
48
|
+
transform-origin: top left;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.sbb-sr__wrapper--vertical .sbb-sr__parent {
|
|
52
|
+
overflow-y: hidden;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.sbb-sr__wrapper--vertical .sbb-sr__list-coaches {
|
|
56
|
+
width: 100vw;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.sbb-sr-navigation--vertical {
|
|
60
|
+
inset-inline-start: var(--sbb-seat-reservation-vertical-offset);
|
|
61
|
+
margin-inline-start: 1.25rem;
|
|
62
|
+
position: absolute;
|
|
63
|
+
}
|
|
64
|
+
.sbb-sr-navigation--vertical .sbb-sr-navigation__list-coaches {
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.sbb-sr-navigation__list-coaches {
|
|
69
|
+
list-style: none;
|
|
70
|
+
margin: 0;
|
|
71
|
+
padding: 0;
|
|
72
|
+
font-size: inherit;
|
|
73
|
+
display: flex;
|
|
74
|
+
justify-content: center;
|
|
75
|
+
flex-wrap: nowrap;
|
|
76
|
+
gap: var(--sbb-spacing-fixed-1x);
|
|
77
|
+
min-height: 3.75rem;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.sbb-sr__parent {
|
|
81
|
+
overflow-x: scroll;
|
|
82
|
+
padding: 3rem 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.sbb-sr__list-coaches {
|
|
86
|
+
display: flex;
|
|
87
|
+
gap: 0.25rem;
|
|
88
|
+
padding: 0;
|
|
89
|
+
margin: 0;
|
|
90
|
+
list-style: none;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.sbb-sr__item-coach {
|
|
94
|
+
padding: 0;
|
|
95
|
+
margin: 0;
|
|
96
|
+
position: relative;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.sbb-sr-coach-wrapper__table {
|
|
100
|
+
outline: 0;
|
|
101
|
+
}`;
|
|
102
|
+
let SbbSeatReservationElement = (() => {
|
|
103
|
+
var _seatReservation_accessor_storage, _hasNavigation_accessor_storage, _alignVertical_accessor_storage, _maxReservations_accessor_storage, _preventPlaceClick_accessor_storage, _a;
|
|
104
|
+
let _classDecorators = [customElement("sbb-seat-reservation")];
|
|
105
|
+
let _classDescriptor;
|
|
106
|
+
let _classExtraInitializers = [];
|
|
107
|
+
let _classThis;
|
|
108
|
+
let _classSuper = SeatReservationBaseElement;
|
|
109
|
+
let _seatReservation_decorators;
|
|
110
|
+
let _seatReservation_initializers = [];
|
|
111
|
+
let _seatReservation_extraInitializers = [];
|
|
112
|
+
let _hasNavigation_decorators;
|
|
113
|
+
let _hasNavigation_initializers = [];
|
|
114
|
+
let _hasNavigation_extraInitializers = [];
|
|
115
|
+
let _alignVertical_decorators;
|
|
116
|
+
let _alignVertical_initializers = [];
|
|
117
|
+
let _alignVertical_extraInitializers = [];
|
|
118
|
+
let _maxReservations_decorators;
|
|
119
|
+
let _maxReservations_initializers = [];
|
|
120
|
+
let _maxReservations_extraInitializers = [];
|
|
121
|
+
let _preventPlaceClick_decorators;
|
|
122
|
+
let _preventPlaceClick_initializers = [];
|
|
123
|
+
let _preventPlaceClick_extraInitializers = [];
|
|
124
|
+
_a = class extends _classSuper {
|
|
125
|
+
constructor() {
|
|
126
|
+
super(...arguments);
|
|
127
|
+
__privateAdd(this, _seatReservation_accessor_storage);
|
|
128
|
+
__privateAdd(this, _hasNavigation_accessor_storage);
|
|
129
|
+
__privateAdd(this, _alignVertical_accessor_storage);
|
|
130
|
+
__privateAdd(this, _maxReservations_accessor_storage);
|
|
131
|
+
__privateAdd(this, _preventPlaceClick_accessor_storage);
|
|
132
|
+
__privateSet(this, _seatReservation_accessor_storage, __runInitializers(this, _seatReservation_initializers, null));
|
|
133
|
+
__privateSet(this, _hasNavigation_accessor_storage, (__runInitializers(this, _seatReservation_extraInitializers), __runInitializers(this, _hasNavigation_initializers, true)));
|
|
134
|
+
__privateSet(this, _alignVertical_accessor_storage, (__runInitializers(this, _hasNavigation_extraInitializers), __runInitializers(this, _alignVertical_initializers, false)));
|
|
135
|
+
__privateSet(this, _maxReservations_accessor_storage, (__runInitializers(this, _alignVertical_extraInitializers), __runInitializers(this, _maxReservations_initializers, null)));
|
|
136
|
+
__privateSet(this, _preventPlaceClick_accessor_storage, (__runInitializers(this, _maxReservations_extraInitializers), __runInitializers(this, _preventPlaceClick_initializers, false)));
|
|
137
|
+
this._language = (__runInitializers(this, _preventPlaceClick_extraInitializers), new SbbLanguageController(this));
|
|
138
|
+
this._notAreaElements = [
|
|
139
|
+
"DRIVER_AREA_FULL",
|
|
140
|
+
"COACH_PASSAGE",
|
|
141
|
+
"COACH_WALL_NO_PASSAGE",
|
|
142
|
+
"COMPARTMENT_PASSAGE",
|
|
143
|
+
"COMPARTMENT_PASSAGE_HIGH",
|
|
144
|
+
"COMPARTMENT_PASSAGE_MIDDLE",
|
|
145
|
+
"COMPARTMENT_PASSAGE_LOW"
|
|
146
|
+
];
|
|
147
|
+
this._notFixedRotatableAreaIcons = ["ENTRY_EXIT"];
|
|
148
|
+
}
|
|
149
|
+
/** The seat reservation object which contains all coaches and places */
|
|
150
|
+
get seatReservation() {
|
|
151
|
+
return __privateGet(this, _seatReservation_accessor_storage);
|
|
152
|
+
}
|
|
153
|
+
set seatReservation(value) {
|
|
154
|
+
__privateSet(this, _seatReservation_accessor_storage, value);
|
|
155
|
+
}
|
|
156
|
+
/** The seat resvervation navigation can be toggled by this property */
|
|
157
|
+
get hasNavigation() {
|
|
158
|
+
return __privateGet(this, _hasNavigation_accessor_storage);
|
|
159
|
+
}
|
|
160
|
+
set hasNavigation(value) {
|
|
161
|
+
__privateSet(this, _hasNavigation_accessor_storage, value);
|
|
162
|
+
}
|
|
163
|
+
/** controls the visual represention of seat reservation in a horizonal or vertical alignment */
|
|
164
|
+
get alignVertical() {
|
|
165
|
+
return __privateGet(this, _alignVertical_accessor_storage);
|
|
166
|
+
}
|
|
167
|
+
set alignVertical(value) {
|
|
168
|
+
__privateSet(this, _alignVertical_accessor_storage, value);
|
|
169
|
+
}
|
|
170
|
+
/** Maximal number of possible clickable seats */
|
|
171
|
+
get maxReservations() {
|
|
172
|
+
return __privateGet(this, _maxReservations_accessor_storage);
|
|
173
|
+
}
|
|
174
|
+
set maxReservations(value) {
|
|
175
|
+
__privateSet(this, _maxReservations_accessor_storage, value);
|
|
176
|
+
}
|
|
177
|
+
/** Any click functionality is prevented */
|
|
178
|
+
get preventPlaceClick() {
|
|
179
|
+
return __privateGet(this, _preventPlaceClick_accessor_storage);
|
|
180
|
+
}
|
|
181
|
+
set preventPlaceClick(value) {
|
|
182
|
+
__privateSet(this, _preventPlaceClick_accessor_storage, value);
|
|
183
|
+
}
|
|
184
|
+
willUpdate(changedProperties) {
|
|
185
|
+
var _a2, _b;
|
|
186
|
+
super.willUpdate(changedProperties);
|
|
187
|
+
if (changedProperties.has("hasNavigation")) {
|
|
188
|
+
if (this.hasNavigation) {
|
|
189
|
+
(_a2 = this.shadowRoot) == null ? void 0 : _a2.querySelectorAll("table").forEach((table) => table.removeAttribute("tabindex"));
|
|
190
|
+
} else {
|
|
191
|
+
(_b = this.shadowRoot) == null ? void 0 : _b.querySelectorAll("table").forEach((table) => table.setAttribute("tabindex", "0"));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
firstUpdated(changedProperties) {
|
|
196
|
+
super.firstUpdated(changedProperties);
|
|
197
|
+
this._componentSetup();
|
|
198
|
+
}
|
|
199
|
+
render() {
|
|
200
|
+
this._initVehicleSeatReservationConstruction();
|
|
201
|
+
return this._coachesHtmlTemplate || null;
|
|
202
|
+
}
|
|
203
|
+
_componentSetup() {
|
|
204
|
+
this.initNavigationSelectionByScrollEvent();
|
|
205
|
+
}
|
|
206
|
+
_initVehicleSeatReservationConstruction() {
|
|
207
|
+
var _a2;
|
|
208
|
+
const coachItems = JSON.parse(JSON.stringify((_a2 = this.seatReservation) == null ? void 0 : _a2.coachItems));
|
|
209
|
+
const classAlignVertical = this.alignVertical ? "sbb-sr__wrapper--vertical" : "";
|
|
210
|
+
this._coachesHtmlTemplate = html`
|
|
211
|
+
<div>
|
|
212
|
+
<sbb-screen-reader-only>
|
|
213
|
+
<input
|
|
214
|
+
id="first-tab-element"
|
|
215
|
+
role="contentinfo"
|
|
216
|
+
type="text"
|
|
217
|
+
aria-label="${getI18nSeatReservation("SEAT_RESERVATION_BEGIN", this._language.current)}"
|
|
218
|
+
readonly
|
|
219
|
+
/>
|
|
220
|
+
</sbb-screen-reader-only>
|
|
221
|
+
|
|
222
|
+
<div @keydown=${(evt) => this.handleKeyboardEvent(evt)}>
|
|
223
|
+
${this._renderNavigation()}
|
|
224
|
+
<div class="sbb-sr__wrapper ${classAlignVertical}">
|
|
225
|
+
<div id="sbb-sr__parent-area" class="sbb-sr__parent" tabindex="-1">
|
|
226
|
+
<ul class="sbb-sr__list-coaches" role="presentation">
|
|
227
|
+
${this._renderCoaches(coachItems)}
|
|
228
|
+
</ul>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
<sbb-screen-reader-only>
|
|
234
|
+
<input
|
|
235
|
+
id="last-tab-element"
|
|
236
|
+
role="contentinfo"
|
|
237
|
+
type="text"
|
|
238
|
+
aria-label="${getI18nSeatReservation("SEAT_RESERVATION_END", this._language.current)}"
|
|
239
|
+
readonly
|
|
240
|
+
/>
|
|
241
|
+
</sbb-screen-reader-only>
|
|
242
|
+
</div>
|
|
243
|
+
`;
|
|
244
|
+
}
|
|
245
|
+
_renderNavigation() {
|
|
246
|
+
var _a2;
|
|
247
|
+
if (!this.hasNavigation) {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
return html`
|
|
251
|
+
<nav class="${classMap({ "sbb-sr-navigation--vertical": this.alignVertical })}">
|
|
252
|
+
<ul
|
|
253
|
+
class="sbb-sr-navigation__list-coaches"
|
|
254
|
+
aria-label="${getI18nSeatReservation("SEAT_RESERVATION_NAVIGATION", this._language.current)}"
|
|
255
|
+
>
|
|
256
|
+
${(_a2 = this.seatReservation) == null ? void 0 : _a2.coachItems.map((coachItem, index) => {
|
|
257
|
+
var _a3, _b;
|
|
258
|
+
return html`<li>
|
|
259
|
+
<sbb-seat-reservation-navigation-coach
|
|
260
|
+
@selectCoach=${(event) => this._onSelectNavCoach(event)}
|
|
261
|
+
@focusCoach=${() => this._onFocusNavCoach()}
|
|
262
|
+
index="${index}"
|
|
263
|
+
coach-id="${coachItem.id}"
|
|
264
|
+
.selected=${this.selectedCoachIndex === index}
|
|
265
|
+
.focused=${this.focusedCoachIndex === index}
|
|
266
|
+
.propertyIds="${coachItem.propertyIds}"
|
|
267
|
+
.travelClass="${coachItem.travelClass}"
|
|
268
|
+
?driver-area="${!((_a3 = coachItem.places) == null ? void 0 : _a3.length)}"
|
|
269
|
+
?first="${index === 0}"
|
|
270
|
+
?last="${index === ((_b = this.seatReservation) == null ? void 0 : _b.coachItems.length) - 1}"
|
|
271
|
+
?vertical="${this.alignVertical}"
|
|
272
|
+
>
|
|
273
|
+
</sbb-seat-reservation-navigation-coach>
|
|
274
|
+
</li>`;
|
|
275
|
+
})}
|
|
276
|
+
</ul>
|
|
277
|
+
</nav>
|
|
278
|
+
`;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
*
|
|
282
|
+
* @param coaches
|
|
283
|
+
* @returns
|
|
284
|
+
*/
|
|
285
|
+
_renderCoaches(coaches) {
|
|
286
|
+
if (!coaches) {
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
return coaches.map((coachItem, index) => {
|
|
290
|
+
return html`
|
|
291
|
+
<li class="sbb-sr__item-coach">${this._renderCoachElement(coachItem, index)}</li>
|
|
292
|
+
`;
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
_renderCoachElement(coachItem, index) {
|
|
296
|
+
const calculatedCoachDimension = this.getCalculatedDimension(coachItem.dimension);
|
|
297
|
+
const descriptionTableCoachWithServices = this._getDescriptionTableCoach(coachItem);
|
|
298
|
+
return html` <sbb-seat-reservation-scoped
|
|
299
|
+
scoped-classes="coach-wrapper"
|
|
300
|
+
height="${calculatedCoachDimension.h}px"
|
|
301
|
+
width="${calculatedCoachDimension.w}px"
|
|
302
|
+
>
|
|
303
|
+
${this._getRenderedCoachBorders(coachItem, index)}
|
|
304
|
+
${this._getRenderedGraphicalElements(coachItem.graphicElements || [], coachItem.dimension)}
|
|
305
|
+
${this._getRenderedServiceElements(coachItem.serviceElements)}
|
|
306
|
+
<table
|
|
307
|
+
@focus=${() => this.onFocusTableCoachAndPreselectPlace(index)}
|
|
308
|
+
id="sbb-sr-coach-${index}"
|
|
309
|
+
class="sbb-sr-coach-wrapper__table"
|
|
310
|
+
aria-describedby="sbb-sr-coach-caption-${index}"
|
|
311
|
+
>
|
|
312
|
+
<caption id="sbb-sr-coach-caption-${index}" tabindex="-1">
|
|
313
|
+
<sbb-screen-reader-only>${descriptionTableCoachWithServices}</sbb-screen-reader-only>
|
|
314
|
+
</caption>
|
|
315
|
+
${this._getRenderedRowPlaces(coachItem, index)}
|
|
316
|
+
</table>
|
|
317
|
+
</sbb-seat-reservation-scoped>`;
|
|
318
|
+
}
|
|
319
|
+
_getRenderedCoachBorders(coachItem, coachIndex) {
|
|
320
|
+
const allElements = coachItem.graphicElements;
|
|
321
|
+
const COACH_PASSAGE_WIDTH = 1;
|
|
322
|
+
const driverArea = allElements == null ? void 0 : allElements.find((element) => element.icon === "DRIVER_AREA_FULL");
|
|
323
|
+
const borderWidth = driverArea ? coachItem.dimension.w - driverArea.dimension.w - COACH_PASSAGE_WIDTH : coachItem.dimension.w - COACH_PASSAGE_WIDTH * 2;
|
|
324
|
+
const borderOffsetX = coachIndex === 0 && driverArea ? (driverArea == null ? void 0 : driverArea.dimension.w) * this.baseGridSize : this.baseGridSize;
|
|
325
|
+
return html`
|
|
326
|
+
<sbb-seat-reservation-scoped
|
|
327
|
+
scoped-classes="coach-border"
|
|
328
|
+
inset-block-start="${this.coachBorderPadding * -1}px"
|
|
329
|
+
inset-inline-start="${borderOffsetX}px"
|
|
330
|
+
>
|
|
331
|
+
<sbb-seat-reservation-graphic
|
|
332
|
+
name="COACH_BORDER_MIDDLE"
|
|
333
|
+
width=${borderWidth * this.baseGridSize}
|
|
334
|
+
height=${(coachItem.dimension.h + this.coachBorderOffset * 2) * this.baseGridSize}
|
|
335
|
+
?stretch=${true}
|
|
336
|
+
role="presentation"
|
|
337
|
+
></sbb-seat-reservation-graphic>
|
|
338
|
+
</sbb-seat-reservation-scoped>
|
|
339
|
+
`;
|
|
340
|
+
}
|
|
341
|
+
_getRenderedRowPlaces(coach, coachIndex) {
|
|
342
|
+
if (!coach.places) {
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
const tableRowPlaces = {};
|
|
346
|
+
for (const place of coach.places) {
|
|
347
|
+
if (!tableRowPlaces[place.position.y]) {
|
|
348
|
+
tableRowPlaces[place.position.y] = [place];
|
|
349
|
+
} else {
|
|
350
|
+
tableRowPlaces[place.position.y].push(place);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return Object.values(tableRowPlaces).map((rowPlaces, index) => {
|
|
354
|
+
return html`
|
|
355
|
+
<tr id="row-${coachIndex}-${rowPlaces[0].position.y}" data-row-index=${index}>
|
|
356
|
+
${this._getRenderedColumnPlaces(rowPlaces, coachIndex)}
|
|
357
|
+
</tr>
|
|
358
|
+
`;
|
|
359
|
+
}).flatMap((rowTemplate) => rowTemplate);
|
|
360
|
+
}
|
|
361
|
+
_getRenderedColumnPlaces(places, coachIndex) {
|
|
362
|
+
places.sort((placeA, placeB) => Number(placeA.position.x) - Number(placeB.position.x));
|
|
363
|
+
return places == null ? void 0 : places.map((place, index) => {
|
|
364
|
+
const calculatedInternalDimension = this.getCalculatedDimension(place.dimension);
|
|
365
|
+
const calculatedInternalPosition = this.getCalculatedPosition(place.position);
|
|
366
|
+
const textRotation = this.alignVertical ? -90 : 0;
|
|
367
|
+
return html`
|
|
368
|
+
<sbb-seat-reservation-scoped
|
|
369
|
+
scoped-classes="graphical-element"
|
|
370
|
+
inset-block-start="${calculatedInternalPosition.y}px"
|
|
371
|
+
inset-inline-start="${calculatedInternalPosition.x}px"
|
|
372
|
+
width="${calculatedInternalDimension.w}px"
|
|
373
|
+
height="${calculatedInternalDimension.h}px"
|
|
374
|
+
z-index="${place.position.z}"
|
|
375
|
+
cell-id="cell-${coachIndex}-${place.position.y}-${index}"
|
|
376
|
+
>
|
|
377
|
+
<sbb-seat-reservation-place-control
|
|
378
|
+
@selectPlace=${(selectPlaceEvent) => this._onSelectPlace(selectPlaceEvent)}
|
|
379
|
+
exportparts="sbb-sr-place-part"
|
|
380
|
+
id="seat-reservation__place-button-${coachIndex}-${place.number}"
|
|
381
|
+
class="seat-reservation-place-control"
|
|
382
|
+
data-cell-id="${coachIndex}-${place.position.y}-${index}"
|
|
383
|
+
text=${place.number}
|
|
384
|
+
type=${place.type}
|
|
385
|
+
state=${place.state}
|
|
386
|
+
width=${place.dimension.w * this.baseGridSize}
|
|
387
|
+
height=${place.dimension.h * this.baseGridSize}
|
|
388
|
+
rotation=${place.rotation ?? nothing}
|
|
389
|
+
text-rotation=${textRotation}
|
|
390
|
+
coach-index=${coachIndex}
|
|
391
|
+
.propertyIds=${place.propertyIds}
|
|
392
|
+
.preventClick=${this.preventPlaceClick}
|
|
393
|
+
></sbb-seat-reservation-place-control>
|
|
394
|
+
</sbb-seat-reservation-scoped>
|
|
395
|
+
`;
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
_getRenderedGraphicalElements(graphicalElements, coachDimension) {
|
|
399
|
+
if (!graphicalElements) {
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
return graphicalElements == null ? void 0 : graphicalElements.map((graphicalElement) => {
|
|
403
|
+
const icon = graphicalElement.icon ?? "";
|
|
404
|
+
const elementRotation = graphicalElement.rotation || 0;
|
|
405
|
+
const isNotFixedRotationGraphicalElement = this._notFixedRotatableAreaIcons.indexOf(graphicalElement.icon) === -1;
|
|
406
|
+
const elementFixedRotation = this.alignVertical && isNotFixedRotationGraphicalElement ? elementRotation - 90 : elementRotation;
|
|
407
|
+
if (this._notAreaElements.findIndex((notAreaElement) => notAreaElement === icon) > -1) {
|
|
408
|
+
return this._getRenderElementWithoutArea(graphicalElement, elementRotation, coachDimension);
|
|
409
|
+
}
|
|
410
|
+
return this._getRenderElementWithArea(graphicalElement, elementFixedRotation, coachDimension);
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
_getRenderElementWithArea(graphicalElement, rotation, coachDimension) {
|
|
414
|
+
var _a2;
|
|
415
|
+
const isNotTableGraphicTempFix = ((_a2 = graphicalElement.icon) == null ? void 0 : _a2.indexOf("TABLE")) === -1;
|
|
416
|
+
const areaProperty = graphicalElement.icon && isNotTableGraphicTempFix ? graphicalElement.icon : null;
|
|
417
|
+
const stretchHeight = areaProperty !== "ENTRY_EXIT";
|
|
418
|
+
const ariaLabelForArea = graphicalElement.icon ? getI18nSeatReservation(graphicalElement.icon, this._language.current) : nothing;
|
|
419
|
+
const calculatedDimension = this.getCalculatedDimension(graphicalElement.dimension, coachDimension, true, stretchHeight);
|
|
420
|
+
const calculatedPosition = this.getCalculatedPosition(graphicalElement.position, graphicalElement.dimension, coachDimension, true);
|
|
421
|
+
let elementMounting = "free";
|
|
422
|
+
if (graphicalElement.position.y === this.coachBorderOffset * -1) {
|
|
423
|
+
elementMounting = "upper-border";
|
|
424
|
+
} else if (graphicalElement.position.y + graphicalElement.dimension.h === coachDimension.h + this.coachBorderOffset) {
|
|
425
|
+
elementMounting = "lower-border";
|
|
426
|
+
}
|
|
427
|
+
return html`
|
|
428
|
+
<sbb-seat-reservation-scoped
|
|
429
|
+
scoped-classes="graphical-element"
|
|
430
|
+
inset-block-start="${calculatedPosition.y}px"
|
|
431
|
+
inset-inline-start="${calculatedPosition.x}px"
|
|
432
|
+
width="${calculatedDimension.w}px"
|
|
433
|
+
height="${calculatedDimension.h}px"
|
|
434
|
+
z-index="${graphicalElement.position.z}"
|
|
435
|
+
>
|
|
436
|
+
<sbb-seat-reservation-area
|
|
437
|
+
style=${styleMap({
|
|
438
|
+
"--sbb-reservation-area-width": graphicalElement.dimension.w * this.baseGridSize,
|
|
439
|
+
"--sbb-reservation-area-height": graphicalElement.dimension.h * this.baseGridSize
|
|
440
|
+
})}
|
|
441
|
+
mounting=${elementMounting}
|
|
442
|
+
background="dark"
|
|
443
|
+
aria-hidden="true"
|
|
444
|
+
title=${ariaLabelForArea}
|
|
445
|
+
>
|
|
446
|
+
${areaProperty ? html`
|
|
447
|
+
<sbb-seat-reservation-graphic
|
|
448
|
+
name=${areaProperty}
|
|
449
|
+
rotation=${rotation}
|
|
450
|
+
width=${this.baseGridSize}
|
|
451
|
+
height=${this.baseGridSize}
|
|
452
|
+
role="img"
|
|
453
|
+
aria-hidden="true"
|
|
454
|
+
></sbb-seat-reservation-graphic>
|
|
455
|
+
` : nothing}
|
|
456
|
+
</sbb-seat-reservation-area>
|
|
457
|
+
</sbb-seat-reservation-scoped>
|
|
458
|
+
`;
|
|
459
|
+
}
|
|
460
|
+
_getRenderElementWithoutArea(graphicalElement, rotation, coachDimension) {
|
|
461
|
+
var _a2;
|
|
462
|
+
const calculatedDimension = this.getCalculatedDimension(graphicalElement.dimension, coachDimension);
|
|
463
|
+
const calculatedPosition = this.getCalculatedPosition(graphicalElement.position, graphicalElement.dimension, coachDimension);
|
|
464
|
+
const icon = graphicalElement.icon && graphicalElement.icon.indexOf("DRIVER_AREA") === -1 ? graphicalElement.icon : (_a2 = graphicalElement.icon) == null ? void 0 : _a2.concat("_", this.seatReservation.vehicleType);
|
|
465
|
+
return html`
|
|
466
|
+
<sbb-seat-reservation-scoped
|
|
467
|
+
scoped-classes="graphical-element"
|
|
468
|
+
inset-block-start="${calculatedPosition.y}px"
|
|
469
|
+
inset-inline-start="${calculatedPosition.x}px"
|
|
470
|
+
width="${calculatedDimension.w}px"
|
|
471
|
+
height="${calculatedDimension.h}px"
|
|
472
|
+
z-index="${graphicalElement.position.z}"
|
|
473
|
+
>
|
|
474
|
+
<sbb-seat-reservation-graphic
|
|
475
|
+
name=${icon ?? nothing}
|
|
476
|
+
width=${graphicalElement.dimension.w * this.baseGridSize}
|
|
477
|
+
height=${graphicalElement.dimension.h * this.baseGridSize}
|
|
478
|
+
rotation=${rotation}
|
|
479
|
+
aria-hidden="true"
|
|
480
|
+
?stretch=${true}
|
|
481
|
+
></sbb-seat-reservation-graphic>
|
|
482
|
+
</sbb-seat-reservation-scoped>
|
|
483
|
+
`;
|
|
484
|
+
}
|
|
485
|
+
_getRenderedServiceElements(serviceElements) {
|
|
486
|
+
if (!serviceElements) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
return serviceElements == null ? void 0 : serviceElements.map((serviceElement) => {
|
|
490
|
+
const titleDescription = serviceElement.icon ? getI18nSeatReservation(serviceElement.icon, this._language.current) : null;
|
|
491
|
+
const calculatedcCmpartmentNumberDimension = this.getCalculatedDimension(serviceElement.dimension);
|
|
492
|
+
const calculatedcCmpartmentNumberPosition = this.getCalculatedPosition(serviceElement.position);
|
|
493
|
+
const elementRotation = serviceElement.rotation || 0;
|
|
494
|
+
const elementFixedRotation = this.alignVertical ? elementRotation - 90 : elementRotation;
|
|
495
|
+
return html`
|
|
496
|
+
<sbb-seat-reservation-scoped
|
|
497
|
+
scoped-classes="graphical-element"
|
|
498
|
+
inset-block-start="${calculatedcCmpartmentNumberPosition.y}px"
|
|
499
|
+
inset-inline-start="${calculatedcCmpartmentNumberPosition.x}px"
|
|
500
|
+
width="${calculatedcCmpartmentNumberDimension.w}px"
|
|
501
|
+
height="${calculatedcCmpartmentNumberDimension.h}px"
|
|
502
|
+
z-index="${serviceElement.position.z}"
|
|
503
|
+
>
|
|
504
|
+
<sbb-seat-reservation-graphic
|
|
505
|
+
name=${serviceElement.icon ?? nothing}
|
|
506
|
+
width=${serviceElement.dimension.w * this.baseGridSize}
|
|
507
|
+
height=${serviceElement.dimension.h * this.baseGridSize}
|
|
508
|
+
.rotation=${elementFixedRotation}
|
|
509
|
+
role="img"
|
|
510
|
+
aria-hidden="true"
|
|
511
|
+
title=${titleDescription ?? nothing}
|
|
512
|
+
></sbb-seat-reservation-graphic>
|
|
513
|
+
</sbb-seat-reservation-scoped>
|
|
514
|
+
`;
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Manages the selected place event triggered from the place
|
|
519
|
+
* Each selection emits an array of all selected places
|
|
520
|
+
* @param selectPlaceEvent
|
|
521
|
+
*/
|
|
522
|
+
_onSelectPlace(selectPlaceEvent) {
|
|
523
|
+
const selectedPlace = selectPlaceEvent.detail;
|
|
524
|
+
this.preventCoachScrollByPlaceClick = true;
|
|
525
|
+
this.isCochGridFocusable = false;
|
|
526
|
+
if (!this.preventPlaceClick) {
|
|
527
|
+
this.updateSelectedSeatReservationPlaces(selectedPlace);
|
|
528
|
+
this.updateCurrentSelectedPlaceInCoach(selectedPlace);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
_onSelectNavCoach(event) {
|
|
532
|
+
const selectedNavCoachIndex = event.detail;
|
|
533
|
+
this.isKeyboardNavigation = false;
|
|
534
|
+
if (selectedNavCoachIndex !== null && selectedNavCoachIndex !== this.currSelectedCoachIndex) {
|
|
535
|
+
this.unfocusPlaceElement();
|
|
536
|
+
this.scrollToSelectedNavCoach(selectedNavCoachIndex);
|
|
537
|
+
} else if (selectedNavCoachIndex === this.currSelectedCoachIndex) {
|
|
538
|
+
this.updateCurrentSelectedCoach();
|
|
539
|
+
this.preselectPlaceInCoach();
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
_onFocusNavCoach() {
|
|
543
|
+
if (!this.preventCoachScrollByPlaceClick) {
|
|
544
|
+
this.preselectPlaceInCoach();
|
|
545
|
+
} else {
|
|
546
|
+
this.focusPlaceElement(this.currSelectedPlace);
|
|
547
|
+
}
|
|
548
|
+
this.isAutoScrolling = false;
|
|
549
|
+
}
|
|
550
|
+
_getDescriptionTableCoach(coachItem) {
|
|
551
|
+
var _a2;
|
|
552
|
+
if (!((_a2 = coachItem.places) == null ? void 0 : _a2.length)) {
|
|
553
|
+
return getI18nSeatReservation("COACH_BLOCKED_TABLE_CAPTION", this._language.current, [
|
|
554
|
+
coachItem.id
|
|
555
|
+
]);
|
|
556
|
+
}
|
|
557
|
+
let tableCoachDescription = "";
|
|
558
|
+
const areaDescriptions = this._getTitleDescriptionListString(coachItem.graphicElements);
|
|
559
|
+
const serviceDescriptions = this._getTitleDescriptionListString(coachItem.serviceElements);
|
|
560
|
+
tableCoachDescription = getI18nSeatReservation("COACH_TABLE_CAPTION", this._language.current, [
|
|
561
|
+
coachItem.id
|
|
562
|
+
]);
|
|
563
|
+
if (!!areaDescriptions || !!serviceDescriptions) {
|
|
564
|
+
tableCoachDescription += ". " + getI18nSeatReservation("COACH_AVAILABLE_SERVICES", this._language.current) + ": ";
|
|
565
|
+
tableCoachDescription += serviceDescriptions + ", " + areaDescriptions + ".";
|
|
566
|
+
}
|
|
567
|
+
return tableCoachDescription;
|
|
568
|
+
}
|
|
569
|
+
_getTitleDescriptionListString(descriptionsElements) {
|
|
570
|
+
const uniqueDescriptions = [];
|
|
571
|
+
return descriptionsElements == null ? void 0 : descriptionsElements.map((descriptionElement) => {
|
|
572
|
+
const icon = descriptionElement.icon;
|
|
573
|
+
if (!icon)
|
|
574
|
+
return null;
|
|
575
|
+
const descriptionAlreayExist = uniqueDescriptions.indexOf(icon) > -1;
|
|
576
|
+
const translation = getI18nSeatReservation(descriptionElement.icon, this._language.current);
|
|
577
|
+
const isValidDescription = this._notFixedRotatableAreaIcons.indexOf(icon) === -1 && this._notAreaElements.indexOf(icon) === -1;
|
|
578
|
+
if (!descriptionAlreayExist) {
|
|
579
|
+
uniqueDescriptions.push(descriptionElement.icon);
|
|
580
|
+
}
|
|
581
|
+
return !!translation && !descriptionAlreayExist && isValidDescription ? translation : null;
|
|
582
|
+
}).filter((description) => !!description).join(", ");
|
|
583
|
+
}
|
|
584
|
+
}, _seatReservation_accessor_storage = new WeakMap(), _hasNavigation_accessor_storage = new WeakMap(), _alignVertical_accessor_storage = new WeakMap(), _maxReservations_accessor_storage = new WeakMap(), _preventPlaceClick_accessor_storage = new WeakMap(), _classThis = _a, (() => {
|
|
585
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
586
|
+
_seatReservation_decorators = [property({ attribute: "seat-reservation", type: Object })];
|
|
587
|
+
_hasNavigation_decorators = [forceType(), property({ attribute: "has-navigation", type: Boolean })];
|
|
588
|
+
_alignVertical_decorators = [forceType(), property({ attribute: "align-vertical", type: Boolean })];
|
|
589
|
+
_maxReservations_decorators = [forceType(), property({ attribute: "max-reservations", type: Number })];
|
|
590
|
+
_preventPlaceClick_decorators = [forceType(), property({ attribute: "prevent-place-click", type: Boolean })];
|
|
591
|
+
__esDecorate(_a, null, _seatReservation_decorators, { kind: "accessor", name: "seatReservation", static: false, private: false, access: { has: (obj) => "seatReservation" in obj, get: (obj) => obj.seatReservation, set: (obj, value) => {
|
|
592
|
+
obj.seatReservation = value;
|
|
593
|
+
} }, metadata: _metadata }, _seatReservation_initializers, _seatReservation_extraInitializers);
|
|
594
|
+
__esDecorate(_a, null, _hasNavigation_decorators, { kind: "accessor", name: "hasNavigation", static: false, private: false, access: { has: (obj) => "hasNavigation" in obj, get: (obj) => obj.hasNavigation, set: (obj, value) => {
|
|
595
|
+
obj.hasNavigation = value;
|
|
596
|
+
} }, metadata: _metadata }, _hasNavigation_initializers, _hasNavigation_extraInitializers);
|
|
597
|
+
__esDecorate(_a, null, _alignVertical_decorators, { kind: "accessor", name: "alignVertical", static: false, private: false, access: { has: (obj) => "alignVertical" in obj, get: (obj) => obj.alignVertical, set: (obj, value) => {
|
|
598
|
+
obj.alignVertical = value;
|
|
599
|
+
} }, metadata: _metadata }, _alignVertical_initializers, _alignVertical_extraInitializers);
|
|
600
|
+
__esDecorate(_a, null, _maxReservations_decorators, { kind: "accessor", name: "maxReservations", static: false, private: false, access: { has: (obj) => "maxReservations" in obj, get: (obj) => obj.maxReservations, set: (obj, value) => {
|
|
601
|
+
obj.maxReservations = value;
|
|
602
|
+
} }, metadata: _metadata }, _maxReservations_initializers, _maxReservations_extraInitializers);
|
|
603
|
+
__esDecorate(_a, null, _preventPlaceClick_decorators, { kind: "accessor", name: "preventPlaceClick", static: false, private: false, access: { has: (obj) => "preventPlaceClick" in obj, get: (obj) => obj.preventPlaceClick, set: (obj, value) => {
|
|
604
|
+
obj.preventPlaceClick = value;
|
|
605
|
+
} }, metadata: _metadata }, _preventPlaceClick_initializers, _preventPlaceClick_extraInitializers);
|
|
606
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
607
|
+
_classThis = _classDescriptor.value;
|
|
608
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
609
|
+
})(), _a.styles = style, __runInitializers(_classThis, _classExtraInitializers), _a;
|
|
610
|
+
return _classThis;
|
|
611
|
+
})();
|
|
612
|
+
export {
|
|
613
|
+
SbbSeatReservationElement
|
|
614
|
+
};
|
|
615
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uL3NlYXQtcmVzZXJ2YXRpb24uY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgY2xhc3NNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9jbGFzcy1tYXAuanMnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAuanMnO1xuXG5pbXBvcnQgeyBnZXRJMThuU2VhdFJlc2VydmF0aW9uIH0gZnJvbSAnLi4vY29tbW9uLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29hY2hJdGVtLFxuICBQbGFjZSxcbiAgRWxlbWVudERpbWVuc2lvbixcbiAgQmFzZUVsZW1lbnQsXG4gIFBsYWNlU2VsZWN0aW9uLFxuICBTZWF0UmVzZXJ2YXRpb24sXG59IGZyb20gJy4uL3NlYXQtcmVzZXJ2YXRpb24uanMnO1xuXG5pbXBvcnQgeyBTZWF0UmVzZXJ2YXRpb25CYXNlRWxlbWVudCB9IGZyb20gJy4vc2VhdC1yZXNlcnZhdGlvbi1iYXNlLWVsZW1lbnQuanMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vc2VhdC1yZXNlcnZhdGlvbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3NjcmVlbi1yZWFkZXItb25seS5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tYXJlYS5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi9zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2guanMnO1xuaW1wb3J0ICcuL3NlYXQtcmVzZXJ2YXRpb24tc2NvcGVkLWNvbXBvbmVudC5qcyc7XG5cbi8qKlxuICogRGVzY3JpYmUgdGhlIHB1cnBvc2Ugb2YgdGhlIGNvbXBvbmVudCB3aXRoIGEgc2luZ2xlIHNob3J0IHNlbnRlbmNlLlxuICpcbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8U2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24+fSBzZWxlY3RlZFBsYWNlcyAtIEVtaXRzIHdoZW4gYSBwbGFjZSB3YXMgc2VsZWN0ZWQgYW5kIHJldHVybnMgYSBQbGFjZSBhcnJheSB3aXRoIGFsbCBzZWxlY3RlZCBwbGFjZXNcbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8U2VhdFJlc2VydmF0aW9uQ29hY2hTZWxlY3Rpb24+fSBzZWxlY3RlZENvYWNoIC0gRW1pdHMgd2hlbiBhIGNvYWNoIHdhcyBzZWxlY3RlZCBhbmQgcmV0dXJucyBhIENvYWNoU2VsZWN0aW9uXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1zZWF0LXJlc2VydmF0aW9uJylcbmNsYXNzIFNiYlNlYXRSZXNlcnZhdGlvbkVsZW1lbnQgZXh0ZW5kcyBTZWF0UmVzZXJ2YXRpb25CYXNlRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuXG4gIC8qKiBUaGUgc2VhdCByZXNlcnZhdGlvbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYWxsIGNvYWNoZXMgYW5kIHBsYWNlcyAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdzZWF0LXJlc2VydmF0aW9uJywgdHlwZTogT2JqZWN0IH0pXG4gIHB1YmxpYyBvdmVycmlkZSBhY2Nlc3NvciBzZWF0UmVzZXJ2YXRpb246IFNlYXRSZXNlcnZhdGlvbiA9IG51bGwhO1xuXG4gIC8qKiBUaGUgc2VhdCByZXN2ZXJ2YXRpb24gbmF2aWdhdGlvbiBjYW4gYmUgdG9nZ2xlZCBieSB0aGlzIHByb3BlcnR5ICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoYXMtbmF2aWdhdGlvbicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIG92ZXJyaWRlIGFjY2Vzc29yIGhhc05hdmlnYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBjb250cm9scyB0aGUgdmlzdWFsIHJlcHJlc2VudGlvbiBvZiBzZWF0IHJlc2VydmF0aW9uIGluIGEgaG9yaXpvbmFsIG9yIHZlcnRpY2FsIGFsaWdubWVudCAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWxpZ24tdmVydGljYWwnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBhY2Nlc3NvciBhbGlnblZlcnRpY2FsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE1heGltYWwgbnVtYmVyIG9mIHBvc3NpYmxlIGNsaWNrYWJsZSBzZWF0cyAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbWF4LXJlc2VydmF0aW9ucycsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgYWNjZXNzb3IgbWF4UmVzZXJ2YXRpb25zOiBudW1iZXIgPSBudWxsITtcblxuICAvKiogQW55IGNsaWNrIGZ1bmN0aW9uYWxpdHkgaXMgcHJldmVudGVkICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwcmV2ZW50LXBsYWNlLWNsaWNrJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgYWNjZXNzb3IgcHJldmVudFBsYWNlQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2NvYWNoZXNIdG1sVGVtcGxhdGU/OiBUZW1wbGF0ZVJlc3VsdDtcbiAgLy8gR3JhcGhpY3MgdGhhdCBzaG91bGQgbm90IGJlIHJlbmRlcmVkIHdpdGggYW4gYXJlYVxuICBwcml2YXRlIF9ub3RBcmVhRWxlbWVudHMgPSBbXG4gICAgJ0RSSVZFUl9BUkVBX0ZVTEwnLFxuICAgICdDT0FDSF9QQVNTQUdFJyxcbiAgICAnQ09BQ0hfV0FMTF9OT19QQVNTQUdFJyxcbiAgICAnQ09NUEFSVE1FTlRfUEFTU0FHRScsXG4gICAgJ0NPTVBBUlRNRU5UX1BBU1NBR0VfSElHSCcsXG4gICAgJ0NPTVBBUlRNRU5UX1BBU1NBR0VfTUlERExFJyxcbiAgICAnQ09NUEFSVE1FTlRfUEFTU0FHRV9MT1cnLFxuICBdO1xuICAvLyBBcmVhIGljb25zIHRoYXQgc2hvdWxkIG5vdCBiZSBmaXhlZCBkdXJpbmcgcm90YXRpb24gd2hlbiB2ZXJ0aWNhbCBtb2RlIGlzIHNlbGVjdGVkXG4gIHByaXZhdGUgX25vdEZpeGVkUm90YXRhYmxlQXJlYUljb25zID0gWydFTlRSWV9FWElUJ107XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdoYXNOYXZpZ2F0aW9uJykpIHtcbiAgICAgIGlmICh0aGlzLmhhc05hdmlnYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaGFkb3dSb290XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpXG4gICAgICAgICAgLmZvckVhY2goKHRhYmxlKSA9PiB0YWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaGFkb3dSb290XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpXG4gICAgICAgICAgLmZvckVhY2goKHRhYmxlKSA9PiB0YWJsZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIHRoaXMuX2NvbXBvbmVudFNldHVwKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHwgbnVsbCB7XG4gICAgdGhpcy5faW5pdFZlaGljbGVTZWF0UmVzZXJ2YXRpb25Db25zdHJ1Y3Rpb24oKTtcbiAgICByZXR1cm4gdGhpcy5fY29hY2hlc0h0bWxUZW1wbGF0ZSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tcG9uZW50U2V0dXAoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0TmF2aWdhdGlvblNlbGVjdGlvbkJ5U2Nyb2xsRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRWZWhpY2xlU2VhdFJlc2VydmF0aW9uQ29uc3RydWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvYWNoSXRlbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VhdFJlc2VydmF0aW9uPy5jb2FjaEl0ZW1zKSk7XG4gICAgY29uc3QgY2xhc3NBbGlnblZlcnRpY2FsID0gdGhpcy5hbGlnblZlcnRpY2FsID8gJ3NiYi1zcl9fd3JhcHBlci0tdmVydGljYWwnIDogJyc7XG5cbiAgICB0aGlzLl9jb2FjaGVzSHRtbFRlbXBsYXRlID0gaHRtbGBcbiAgICAgIDxkaXY+XG4gICAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJmaXJzdC10YWItZWxlbWVudFwiXG4gICAgICAgICAgICByb2xlPVwiY29udGVudGluZm9cIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIiR7Z2V0STE4blNlYXRSZXNlcnZhdGlvbignU0VBVF9SRVNFUlZBVElPTl9CRUdJTicsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpfVwiXG4gICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cblxuICAgICAgICA8ZGl2IEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5oYW5kbGVLZXlib2FyZEV2ZW50KGV2dCl9PlxuICAgICAgICAgICR7dGhpcy5fcmVuZGVyTmF2aWdhdGlvbigpfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3JfX3dyYXBwZXIgJHtjbGFzc0FsaWduVmVydGljYWx9XCI+XG4gICAgICAgICAgICA8ZGl2IGlkPVwic2JiLXNyX19wYXJlbnQtYXJlYVwiIGNsYXNzPVwic2JiLXNyX19wYXJlbnRcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cInNiYi1zcl9fbGlzdC1jb2FjaGVzXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICR7dGhpcy5fcmVuZGVyQ29hY2hlcyhjb2FjaEl0ZW1zKX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwibGFzdC10YWItZWxlbWVudFwiXG4gICAgICAgICAgICByb2xlPVwiY29udGVudGluZm9cIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIiR7Z2V0STE4blNlYXRSZXNlcnZhdGlvbignU0VBVF9SRVNFUlZBVElPTl9FTkQnLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KX1cIlxuICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyTmF2aWdhdGlvbigpOiBUZW1wbGF0ZVJlc3VsdCB8IG51bGwge1xuICAgIGlmICghdGhpcy5oYXNOYXZpZ2F0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxuYXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgJ3NiYi1zci1uYXZpZ2F0aW9uLS12ZXJ0aWNhbCc6IHRoaXMuYWxpZ25WZXJ0aWNhbCB9KX1cIj5cbiAgICAgICAgPHVsXG4gICAgICAgICAgY2xhc3M9XCJzYmItc3ItbmF2aWdhdGlvbl9fbGlzdC1jb2FjaGVzXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiJHtnZXRJMThuU2VhdFJlc2VydmF0aW9uKFxuICAgICAgICAgICAgJ1NFQVRfUkVTRVJWQVRJT05fTkFWSUdBVElPTicsXG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZS5jdXJyZW50LFxuICAgICAgICAgICl9XCJcbiAgICAgICAgPlxuICAgICAgICAgICR7dGhpcy5zZWF0UmVzZXJ2YXRpb24/LmNvYWNoSXRlbXMubWFwKChjb2FjaEl0ZW06IENvYWNoSXRlbSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWxgPGxpPlxuICAgICAgICAgICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1jb2FjaFxuICAgICAgICAgICAgICAgIEBzZWxlY3RDb2FjaD0keyhldmVudDogQ3VzdG9tRXZlbnQpID0+IHRoaXMuX29uU2VsZWN0TmF2Q29hY2goZXZlbnQpfVxuICAgICAgICAgICAgICAgIEBmb2N1c0NvYWNoPSR7KCkgPT4gdGhpcy5fb25Gb2N1c05hdkNvYWNoKCl9XG4gICAgICAgICAgICAgICAgaW5kZXg9XCIke2luZGV4fVwiXG4gICAgICAgICAgICAgICAgY29hY2gtaWQ9XCIke2NvYWNoSXRlbS5pZH1cIlxuICAgICAgICAgICAgICAgIC5zZWxlY3RlZD0ke3RoaXMuc2VsZWN0ZWRDb2FjaEluZGV4ID09PSBpbmRleH1cbiAgICAgICAgICAgICAgICAuZm9jdXNlZD0ke3RoaXMuZm9jdXNlZENvYWNoSW5kZXggPT09IGluZGV4fVxuICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUlkcz1cIiR7Y29hY2hJdGVtLnByb3BlcnR5SWRzfVwiXG4gICAgICAgICAgICAgICAgLnRyYXZlbENsYXNzPVwiJHtjb2FjaEl0ZW0udHJhdmVsQ2xhc3N9XCJcbiAgICAgICAgICAgICAgICA/ZHJpdmVyLWFyZWE9XCIkeyFjb2FjaEl0ZW0ucGxhY2VzPy5sZW5ndGh9XCJcbiAgICAgICAgICAgICAgICA/Zmlyc3Q9XCIke2luZGV4ID09PSAwfVwiXG4gICAgICAgICAgICAgICAgP2xhc3Q9XCIke2luZGV4ID09PSB0aGlzLnNlYXRSZXNlcnZhdGlvbj8uY29hY2hJdGVtcy5sZW5ndGggLSAxfVwiXG4gICAgICAgICAgICAgICAgP3ZlcnRpY2FsPVwiJHt0aGlzLmFsaWduVmVydGljYWx9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3NiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2g+XG4gICAgICAgICAgICA8L2xpPmA7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvdWw+XG4gICAgICA8L25hdj5cbiAgICBgO1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29hY2hlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyQ29hY2hlcyhjb2FjaGVzPzogQ29hY2hJdGVtW10pOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgaWYgKCFjb2FjaGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNvYWNoZXMubWFwKChjb2FjaEl0ZW06IENvYWNoSXRlbSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxsaSBjbGFzcz1cInNiYi1zcl9faXRlbS1jb2FjaFwiPiR7dGhpcy5fcmVuZGVyQ29hY2hFbGVtZW50KGNvYWNoSXRlbSwgaW5kZXgpfTwvbGk+XG4gICAgICBgO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ29hY2hFbGVtZW50KGNvYWNoSXRlbTogQ29hY2hJdGVtLCBpbmRleDogbnVtYmVyKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRDb2FjaERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihjb2FjaEl0ZW0uZGltZW5zaW9uKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvblRhYmxlQ29hY2hXaXRoU2VydmljZXMgPSB0aGlzLl9nZXREZXNjcmlwdGlvblRhYmxlQ29hY2goY29hY2hJdGVtKTtcblxuICAgIHJldHVybiBodG1sYCA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkXG4gICAgICBzY29wZWQtY2xhc3Nlcz1cImNvYWNoLXdyYXBwZXJcIlxuICAgICAgaGVpZ2h0PVwiJHtjYWxjdWxhdGVkQ29hY2hEaW1lbnNpb24uaH1weFwiXG4gICAgICB3aWR0aD1cIiR7Y2FsY3VsYXRlZENvYWNoRGltZW5zaW9uLnd9cHhcIlxuICAgID5cbiAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRDb2FjaEJvcmRlcnMoY29hY2hJdGVtLCBpbmRleCl9XG4gICAgICAke3RoaXMuX2dldFJlbmRlcmVkR3JhcGhpY2FsRWxlbWVudHMoY29hY2hJdGVtLmdyYXBoaWNFbGVtZW50cyB8fCBbXSwgY29hY2hJdGVtLmRpbWVuc2lvbil9XG4gICAgICAke3RoaXMuX2dldFJlbmRlcmVkU2VydmljZUVsZW1lbnRzKGNvYWNoSXRlbS5zZXJ2aWNlRWxlbWVudHMpfVxuICAgICAgPHRhYmxlXG4gICAgICAgIEBmb2N1cz0keygpID0+IHRoaXMub25Gb2N1c1RhYmxlQ29hY2hBbmRQcmVzZWxlY3RQbGFjZShpbmRleCl9XG4gICAgICAgIGlkPVwic2JiLXNyLWNvYWNoLSR7aW5kZXh9XCJcbiAgICAgICAgY2xhc3M9XCJzYmItc3ItY29hY2gtd3JhcHBlcl9fdGFibGVcIlxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwic2JiLXNyLWNvYWNoLWNhcHRpb24tJHtpbmRleH1cIlxuICAgICAgPlxuICAgICAgICA8Y2FwdGlvbiBpZD1cInNiYi1zci1jb2FjaC1jYXB0aW9uLSR7aW5kZXh9XCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5PiR7ZGVzY3JpcHRpb25UYWJsZUNvYWNoV2l0aFNlcnZpY2VzfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgPC9jYXB0aW9uPlxuICAgICAgICAke3RoaXMuX2dldFJlbmRlcmVkUm93UGxhY2VzKGNvYWNoSXRlbSwgaW5kZXgpfVxuICAgICAgPC90YWJsZT5cbiAgICA8L3NiYi1zZWF0LXJlc2VydmF0aW9uLXNjb3BlZD5gO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRDb2FjaEJvcmRlcnMoY29hY2hJdGVtOiBDb2FjaEl0ZW0sIGNvYWNoSW5kZXg6IG51bWJlcik6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBhbGxFbGVtZW50cyA9IGNvYWNoSXRlbS5ncmFwaGljRWxlbWVudHM7XG4gICAgY29uc3QgQ09BQ0hfUEFTU0FHRV9XSURUSCA9IDE7XG4gICAgY29uc3QgZHJpdmVyQXJlYSA9IGFsbEVsZW1lbnRzPy5maW5kKFxuICAgICAgKGVsZW1lbnQ6IEJhc2VFbGVtZW50KSA9PiBlbGVtZW50Lmljb24gPT09ICdEUklWRVJfQVJFQV9GVUxMJyxcbiAgICApO1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gZHJpdmVyQXJlYVxuICAgICAgPyBjb2FjaEl0ZW0uZGltZW5zaW9uLncgLSBkcml2ZXJBcmVhLmRpbWVuc2lvbi53IC0gQ09BQ0hfUEFTU0FHRV9XSURUSFxuICAgICAgOiBjb2FjaEl0ZW0uZGltZW5zaW9uLncgLSBDT0FDSF9QQVNTQUdFX1dJRFRIICogMjtcbiAgICBjb25zdCBib3JkZXJPZmZzZXRYID1cbiAgICAgIGNvYWNoSW5kZXggPT09IDAgJiYgZHJpdmVyQXJlYVxuICAgICAgICA/IGRyaXZlckFyZWE/LmRpbWVuc2lvbi53ICogdGhpcy5iYXNlR3JpZFNpemVcbiAgICAgICAgOiB0aGlzLmJhc2VHcmlkU2l6ZTtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLXNjb3BlZFxuICAgICAgICBzY29wZWQtY2xhc3Nlcz1cImNvYWNoLWJvcmRlclwiXG4gICAgICAgIGluc2V0LWJsb2NrLXN0YXJ0PVwiJHt0aGlzLmNvYWNoQm9yZGVyUGFkZGluZyAqIC0xfXB4XCJcbiAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0PVwiJHtib3JkZXJPZmZzZXRYfXB4XCJcbiAgICAgID5cbiAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgICAgICBuYW1lPVwiQ09BQ0hfQk9SREVSX01JRERMRVwiXG4gICAgICAgICAgd2lkdGg9JHtib3JkZXJXaWR0aCAqIHRoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgIGhlaWdodD0keyhjb2FjaEl0ZW0uZGltZW5zaW9uLmggKyB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0ICogMikgKiB0aGlzLmJhc2VHcmlkU2l6ZX1cbiAgICAgICAgICA/c3RyZXRjaD0ke3RydWV9XG4gICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWM+XG4gICAgICA8L3NiYi1zZWF0LXJlc2VydmF0aW9uLXNjb3BlZD5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRSb3dQbGFjZXMoY29hY2g6IENvYWNoSXRlbSwgY29hY2hJbmRleDogbnVtYmVyKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghY29hY2gucGxhY2VzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBQcmVwYWlyIHJvd3Mgd2l0aCB0aGUgcGxhY2VzIHRvIHJlbmRlciBhIHRhYmxlXG4gICAgY29uc3QgdGFibGVSb3dQbGFjZXM6IFJlY29yZDxudW1iZXIsIFBsYWNlW10+ID0ge307XG4gICAgZm9yIChjb25zdCBwbGFjZSBvZiBjb2FjaC5wbGFjZXMpIHtcbiAgICAgIGlmICghdGFibGVSb3dQbGFjZXNbcGxhY2UucG9zaXRpb24ueV0pIHtcbiAgICAgICAgdGFibGVSb3dQbGFjZXNbcGxhY2UucG9zaXRpb24ueV0gPSBbcGxhY2VdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFibGVSb3dQbGFjZXNbcGxhY2UucG9zaXRpb24ueV0ucHVzaChwbGFjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGFibGVSb3dQbGFjZXMpXG4gICAgICAubWFwKChyb3dQbGFjZXM6IFBsYWNlW10sIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgIDx0ciBpZD1cInJvdy0ke2NvYWNoSW5kZXh9LSR7cm93UGxhY2VzWzBdLnBvc2l0aW9uLnl9XCIgZGF0YS1yb3ctaW5kZXg9JHtpbmRleH0+XG4gICAgICAgICAgICAke3RoaXMuX2dldFJlbmRlcmVkQ29sdW1uUGxhY2VzKHJvd1BsYWNlcywgY29hY2hJbmRleCl9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgYDtcbiAgICAgIH0pXG4gICAgICAuZmxhdE1hcCgocm93VGVtcGxhdGUpID0+IHJvd1RlbXBsYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlcmVkQ29sdW1uUGxhY2VzKHBsYWNlczogUGxhY2VbXSwgY29hY2hJbmRleDogbnVtYmVyKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIC8vU29ydHMgZWFjaCBwbGFjZSBieSBpdHMgYXNjZW5kaW5nIHggY29vcmRpbmF0ZVxuICAgIHBsYWNlcy5zb3J0KFxuICAgICAgKHBsYWNlQTogUGxhY2UsIHBsYWNlQjogUGxhY2UpID0+IE51bWJlcihwbGFjZUEucG9zaXRpb24ueCkgLSBOdW1iZXIocGxhY2VCLnBvc2l0aW9uLngpLFxuICAgICk7XG5cbiAgICByZXR1cm4gcGxhY2VzPy5tYXAoKHBsYWNlOiBQbGFjZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY2FsY3VsYXRlZEludGVybmFsRGltZW5zaW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkRGltZW5zaW9uKHBsYWNlLmRpbWVuc2lvbik7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkSW50ZXJuYWxQb3NpdGlvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZFBvc2l0aW9uKHBsYWNlLnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IHRleHRSb3RhdGlvbiA9IHRoaXMuYWxpZ25WZXJ0aWNhbCA/IC05MCA6IDA7XG5cbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkXG4gICAgICAgICAgc2NvcGVkLWNsYXNzZXM9XCJncmFwaGljYWwtZWxlbWVudFwiXG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ9XCIke2NhbGN1bGF0ZWRJbnRlcm5hbFBvc2l0aW9uLnl9cHhcIlxuICAgICAgICAgIGluc2V0LWlubGluZS1zdGFydD1cIiR7Y2FsY3VsYXRlZEludGVybmFsUG9zaXRpb24ueH1weFwiXG4gICAgICAgICAgd2lkdGg9XCIke2NhbGN1bGF0ZWRJbnRlcm5hbERpbWVuc2lvbi53fXB4XCJcbiAgICAgICAgICBoZWlnaHQ9XCIke2NhbGN1bGF0ZWRJbnRlcm5hbERpbWVuc2lvbi5ofXB4XCJcbiAgICAgICAgICB6LWluZGV4PVwiJHtwbGFjZS5wb3NpdGlvbi56fVwiXG4gICAgICAgICAgY2VsbC1pZD1cImNlbGwtJHtjb2FjaEluZGV4fS0ke3BsYWNlLnBvc2l0aW9uLnl9LSR7aW5kZXh9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sXG4gICAgICAgICAgICBAc2VsZWN0UGxhY2U9JHsoc2VsZWN0UGxhY2VFdmVudDogQ3VzdG9tRXZlbnQpID0+IHRoaXMuX29uU2VsZWN0UGxhY2Uoc2VsZWN0UGxhY2VFdmVudCl9XG4gICAgICAgICAgICBleHBvcnRwYXJ0cz1cInNiYi1zci1wbGFjZS1wYXJ0XCJcbiAgICAgICAgICAgIGlkPVwic2VhdC1yZXNlcnZhdGlvbl9fcGxhY2UtYnV0dG9uLSR7Y29hY2hJbmRleH0tJHtwbGFjZS5udW1iZXJ9XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sXCJcbiAgICAgICAgICAgIGRhdGEtY2VsbC1pZD1cIiR7Y29hY2hJbmRleH0tJHtwbGFjZS5wb3NpdGlvbi55fS0ke2luZGV4fVwiXG4gICAgICAgICAgICB0ZXh0PSR7cGxhY2UubnVtYmVyfVxuICAgICAgICAgICAgdHlwZT0ke3BsYWNlLnR5cGV9XG4gICAgICAgICAgICBzdGF0ZT0ke3BsYWNlLnN0YXRlfVxuICAgICAgICAgICAgd2lkdGg9JHtwbGFjZS5kaW1lbnNpb24udyAqIHRoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgICAgaGVpZ2h0PSR7cGxhY2UuZGltZW5zaW9uLmggKiB0aGlzLmJhc2VHcmlkU2l6ZX1cbiAgICAgICAgICAgIHJvdGF0aW9uPSR7cGxhY2Uucm90YXRpb24gPz8gbm90aGluZ31cbiAgICAgICAgICAgIHRleHQtcm90YXRpb249JHt0ZXh0Um90YXRpb259XG4gICAgICAgICAgICBjb2FjaC1pbmRleD0ke2NvYWNoSW5kZXh9XG4gICAgICAgICAgICAucHJvcGVydHlJZHM9JHtwbGFjZS5wcm9wZXJ0eUlkc31cbiAgICAgICAgICAgIC5wcmV2ZW50Q2xpY2s9JHt0aGlzLnByZXZlbnRQbGFjZUNsaWNrfVxuICAgICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2w+XG4gICAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkPlxuICAgICAgYDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlcmVkR3JhcGhpY2FsRWxlbWVudHMoXG4gICAgZ3JhcGhpY2FsRWxlbWVudHM6IEJhc2VFbGVtZW50W10sXG4gICAgY29hY2hEaW1lbnNpb246IEVsZW1lbnREaW1lbnNpb24sXG4gICk6IFRlbXBsYXRlUmVzdWx0W10gfCBudWxsIHtcbiAgICBpZiAoIWdyYXBoaWNhbEVsZW1lbnRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhcGhpY2FsRWxlbWVudHM/Lm1hcCgoZ3JhcGhpY2FsRWxlbWVudDogQmFzZUVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGljb24gPSBncmFwaGljYWxFbGVtZW50Lmljb24gPz8gJyc7XG4gICAgICBjb25zdCBlbGVtZW50Um90YXRpb24gPSBncmFwaGljYWxFbGVtZW50LnJvdGF0aW9uIHx8IDA7XG4gICAgICBjb25zdCBpc05vdEZpeGVkUm90YXRpb25HcmFwaGljYWxFbGVtZW50ID1cbiAgICAgICAgdGhpcy5fbm90Rml4ZWRSb3RhdGFibGVBcmVhSWNvbnMuaW5kZXhPZihncmFwaGljYWxFbGVtZW50Lmljb24hKSA9PT0gLTE7XG4gICAgICBjb25zdCBlbGVtZW50Rml4ZWRSb3RhdGlvbiA9XG4gICAgICAgIHRoaXMuYWxpZ25WZXJ0aWNhbCAmJiBpc05vdEZpeGVkUm90YXRpb25HcmFwaGljYWxFbGVtZW50XG4gICAgICAgICAgPyBlbGVtZW50Um90YXRpb24gLSA5MFxuICAgICAgICAgIDogZWxlbWVudFJvdGF0aW9uO1xuXG4gICAgICAvL2NoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgbm90IGFuIGFyZWEgZWxlbWVudCwgc2luY2UgdGhpcyBlbGVtZW50IGlzIGRyYXduIHdpdGhvdXQgYW4gYXJlYSBjb21wb25lbnRcbiAgICAgIGlmICh0aGlzLl9ub3RBcmVhRWxlbWVudHMuZmluZEluZGV4KChub3RBcmVhRWxlbWVudCkgPT4gbm90QXJlYUVsZW1lbnQgPT09IGljb24pID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFJlbmRlckVsZW1lbnRXaXRob3V0QXJlYShncmFwaGljYWxFbGVtZW50LCBlbGVtZW50Um90YXRpb24sIGNvYWNoRGltZW5zaW9uKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRSZW5kZXJFbGVtZW50V2l0aEFyZWEoZ3JhcGhpY2FsRWxlbWVudCwgZWxlbWVudEZpeGVkUm90YXRpb24sIGNvYWNoRGltZW5zaW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlckVsZW1lbnRXaXRoQXJlYShcbiAgICBncmFwaGljYWxFbGVtZW50OiBCYXNlRWxlbWVudCxcbiAgICByb3RhdGlvbjogbnVtYmVyLFxuICAgIGNvYWNoRGltZW5zaW9uOiBFbGVtZW50RGltZW5zaW9uLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgLy8gVE9ETyAtPiBpc05vdFRhYmxlR3JhcGhpY1RlbXBGaXggaXMgdGVtcCBmaXggdG8gc2hvdyBjb2FjaCB0YWJsZXMgYXMgYXJlYSBhbmQgbm90IGFzIHN2ZyBncmFwaGljLlxuICAgIC8vIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB3aGVuIHVzaW5nIFRBQkxFIHN2ZyBncmFwaGljcyxcbiAgICAvLyB0aGV5IGFyZSBkaXNwbGF5ZWQgZGlzdG9ydGVkIGR1ZSB0byBkaWZmZXJlbnQgaGVpZ2h0cyBhbmQgd2lkdGhzIGFuZCB0aGlzIGlzIG5vdCB2aXN1YWxseSBnb29kLlxuICAgIGNvbnN0IGlzTm90VGFibGVHcmFwaGljVGVtcEZpeCA9IGdyYXBoaWNhbEVsZW1lbnQuaWNvbj8uaW5kZXhPZignVEFCTEUnKSA9PT0gLTE7XG5cbiAgICBjb25zdCBhcmVhUHJvcGVydHkgPVxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5pY29uICYmIGlzTm90VGFibGVHcmFwaGljVGVtcEZpeCA/IGdyYXBoaWNhbEVsZW1lbnQuaWNvbiA6IG51bGw7XG4gICAgY29uc3Qgc3RyZXRjaEhlaWdodCA9IGFyZWFQcm9wZXJ0eSAhPT0gJ0VOVFJZX0VYSVQnO1xuICAgIGNvbnN0IGFyaWFMYWJlbEZvckFyZWEgPSBncmFwaGljYWxFbGVtZW50Lmljb25cbiAgICAgID8gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihncmFwaGljYWxFbGVtZW50Lmljb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpXG4gICAgICA6IG5vdGhpbmc7XG4gICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgICB0cnVlLFxuICAgICAgc3RyZXRjaEhlaWdodCxcbiAgICApO1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRQb3NpdGlvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZFBvc2l0aW9uKFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbixcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBsZXQgZWxlbWVudE1vdW50aW5nID0gJ2ZyZWUnO1xuICAgIGlmIChncmFwaGljYWxFbGVtZW50LnBvc2l0aW9uLnkgPT09IHRoaXMuY29hY2hCb3JkZXJPZmZzZXQgKiAtMSkge1xuICAgICAgZWxlbWVudE1vdW50aW5nID0gJ3VwcGVyLWJvcmRlcic7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQucG9zaXRpb24ueSArIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLmggPT09XG4gICAgICBjb2FjaERpbWVuc2lvbi5oICsgdGhpcy5jb2FjaEJvcmRlck9mZnNldFxuICAgICkge1xuICAgICAgZWxlbWVudE1vdW50aW5nID0gJ2xvd2VyLWJvcmRlcic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkXG4gICAgICAgIHNjb3BlZC1jbGFzc2VzPVwiZ3JhcGhpY2FsLWVsZW1lbnRcIlxuICAgICAgICBpbnNldC1ibG9jay1zdGFydD1cIiR7Y2FsY3VsYXRlZFBvc2l0aW9uLnl9cHhcIlxuICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ9XCIke2NhbGN1bGF0ZWRQb3NpdGlvbi54fXB4XCJcbiAgICAgICAgd2lkdGg9XCIke2NhbGN1bGF0ZWREaW1lbnNpb24ud31weFwiXG4gICAgICAgIGhlaWdodD1cIiR7Y2FsY3VsYXRlZERpbWVuc2lvbi5ofXB4XCJcbiAgICAgICAgei1pbmRleD1cIiR7Z3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbi56fVwiXG4gICAgICA+XG4gICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhXG4gICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgICAnLS1zYmItcmVzZXJ2YXRpb24tYXJlYS13aWR0aCc6IGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLncgKiB0aGlzLmJhc2VHcmlkU2l6ZSxcbiAgICAgICAgICAgICctLXNiYi1yZXNlcnZhdGlvbi1hcmVhLWhlaWdodCc6IGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLmggKiB0aGlzLmJhc2VHcmlkU2l6ZSxcbiAgICAgICAgICB9KX1cbiAgICAgICAgICBtb3VudGluZz0ke2VsZW1lbnRNb3VudGluZ31cbiAgICAgICAgICBiYWNrZ3JvdW5kPVwiZGFya1wiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICB0aXRsZT0ke2FyaWFMYWJlbEZvckFyZWF9XG4gICAgICAgID5cbiAgICAgICAgICAke2FyZWFQcm9wZXJ0eVxuICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljXG4gICAgICAgICAgICAgICAgICBuYW1lPSR7YXJlYVByb3BlcnR5fVxuICAgICAgICAgICAgICAgICAgcm90YXRpb249JHtyb3RhdGlvbn1cbiAgICAgICAgICAgICAgICAgIHdpZHRoPSR7dGhpcy5iYXNlR3JpZFNpemV9XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9JHt0aGlzLmJhc2VHcmlkU2l6ZX1cbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJpbWdcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljPlxuICAgICAgICAgICAgICBgXG4gICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tYXJlYT5cbiAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZW5kZXJFbGVtZW50V2l0aG91dEFyZWEoXG4gICAgZ3JhcGhpY2FsRWxlbWVudDogQmFzZUVsZW1lbnQsXG4gICAgcm90YXRpb246IG51bWJlcixcbiAgICBjb2FjaERpbWVuc2lvbjogRWxlbWVudERpbWVuc2lvbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWREaW1lbnNpb24gPSB0aGlzLmdldENhbGN1bGF0ZWREaW1lbnNpb24oXG4gICAgICBncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbixcbiAgICAgIGNvYWNoRGltZW5zaW9uLFxuICAgICk7XG4gICAgY29uc3QgY2FsY3VsYXRlZFBvc2l0aW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkUG9zaXRpb24oXG4gICAgICBncmFwaGljYWxFbGVtZW50LnBvc2l0aW9uLFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24sXG4gICAgICBjb2FjaERpbWVuc2lvbixcbiAgICApO1xuXG4gICAgLy8gSWYgdGhlIGljb24gaXMgdGhlIGRyaXZlciBhcmVhLCB0aGVuIGhlcmUgY29uY2F0IHRoZSB2ZWhpY2xlIHR5cGUgdG8gZ2V0IHRoZSByaWdodCB2ZWhpY2xlIGNoYXNzaWUgaWNvblxuICAgIGNvbnN0IGljb24gPVxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5pY29uICYmIGdyYXBoaWNhbEVsZW1lbnQuaWNvbi5pbmRleE9mKCdEUklWRVJfQVJFQScpID09PSAtMVxuICAgICAgICA/IGdyYXBoaWNhbEVsZW1lbnQuaWNvblxuICAgICAgICA6IGdyYXBoaWNhbEVsZW1lbnQuaWNvbj8uY29uY2F0KCdfJywgdGhpcy5zZWF0UmVzZXJ2YXRpb24udmVoaWNsZVR5cGUpO1xuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkXG4gICAgICAgIHNjb3BlZC1jbGFzc2VzPVwiZ3JhcGhpY2FsLWVsZW1lbnRcIlxuICAgICAgICBpbnNldC1ibG9jay1zdGFydD1cIiR7Y2FsY3VsYXRlZFBvc2l0aW9uLnl9cHhcIlxuICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ9XCIke2NhbGN1bGF0ZWRQb3NpdGlvbi54fXB4XCJcbiAgICAgICAgd2lkdGg9XCIke2NhbGN1bGF0ZWREaW1lbnNpb24ud31weFwiXG4gICAgICAgIGhlaWdodD1cIiR7Y2FsY3VsYXRlZERpbWVuc2lvbi5ofXB4XCJcbiAgICAgICAgei1pbmRleD1cIiR7Z3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbi56fVwiXG4gICAgICA+XG4gICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljXG4gICAgICAgICAgbmFtZT0ke2ljb24gPz8gbm90aGluZ31cbiAgICAgICAgICB3aWR0aD0ke2dyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLncgKiB0aGlzLmJhc2VHcmlkU2l6ZX1cbiAgICAgICAgICBoZWlnaHQ9JHtncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbi5oICogdGhpcy5iYXNlR3JpZFNpemV9XG4gICAgICAgICAgcm90YXRpb249JHtyb3RhdGlvbn1cbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID9zdHJldGNoPSR7dHJ1ZX1cbiAgICAgICAgPjwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYz5cbiAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZW5kZXJlZFNlcnZpY2VFbGVtZW50cyhzZXJ2aWNlRWxlbWVudHM/OiBCYXNlRWxlbWVudFtdKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghc2VydmljZUVsZW1lbnRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VydmljZUVsZW1lbnRzPy5tYXAoKHNlcnZpY2VFbGVtZW50OiBCYXNlRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgdGl0bGVEZXNjcmlwdGlvbiA9IHNlcnZpY2VFbGVtZW50Lmljb25cbiAgICAgICAgPyBnZXRJMThuU2VhdFJlc2VydmF0aW9uKHNlcnZpY2VFbGVtZW50Lmljb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRjQ21wYXJ0bWVudE51bWJlckRpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihcbiAgICAgICAgc2VydmljZUVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRjQ21wYXJ0bWVudE51bWJlclBvc2l0aW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkUG9zaXRpb24oXG4gICAgICAgIHNlcnZpY2VFbGVtZW50LnBvc2l0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRSb3RhdGlvbiA9IHNlcnZpY2VFbGVtZW50LnJvdGF0aW9uIHx8IDA7XG4gICAgICBjb25zdCBlbGVtZW50Rml4ZWRSb3RhdGlvbiA9IHRoaXMuYWxpZ25WZXJ0aWNhbCA/IGVsZW1lbnRSb3RhdGlvbiAtIDkwIDogZWxlbWVudFJvdGF0aW9uO1xuXG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLXNjb3BlZFxuICAgICAgICAgIHNjb3BlZC1jbGFzc2VzPVwiZ3JhcGhpY2FsLWVsZW1lbnRcIlxuICAgICAgICAgIGluc2V0LWJsb2NrLXN0YXJ0PVwiJHtjYWxjdWxhdGVkY0NtcGFydG1lbnROdW1iZXJQb3NpdGlvbi55fXB4XCJcbiAgICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ9XCIke2NhbGN1bGF0ZWRjQ21wYXJ0bWVudE51bWJlclBvc2l0aW9uLnh9cHhcIlxuICAgICAgICAgIHdpZHRoPVwiJHtjYWxjdWxhdGVkY0NtcGFydG1lbnROdW1iZXJEaW1lbnNpb24ud31weFwiXG4gICAgICAgICAgaGVpZ2h0PVwiJHtjYWxjdWxhdGVkY0NtcGFydG1lbnROdW1iZXJEaW1lbnNpb24uaH1weFwiXG4gICAgICAgICAgei1pbmRleD1cIiR7c2VydmljZUVsZW1lbnQucG9zaXRpb24uen1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgICAgICAgIG5hbWU9JHtzZXJ2aWNlRWxlbWVudC5pY29uID8/IG5vdGhpbmd9XG4gICAgICAgICAgICB3aWR0aD0ke3NlcnZpY2VFbGVtZW50LmRpbWVuc2lvbi53ICogdGhpcy5iYXNlR3JpZFNpemV9XG4gICAgICAgICAgICBoZWlnaHQ9JHtzZXJ2aWNlRWxlbWVudC5kaW1lbnNpb24uaCAqIHRoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgICAgLnJvdGF0aW9uPSR7ZWxlbWVudEZpeGVkUm90YXRpb259XG4gICAgICAgICAgICByb2xlPVwiaW1nXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICB0aXRsZT0ke3RpdGxlRGVzY3JpcHRpb24gPz8gbm90aGluZ31cbiAgICAgICAgICA+PC9zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljPlxuICAgICAgICA8L3NiYi1zZWF0LXJlc2VydmF0aW9uLXNjb3BlZD5cbiAgICAgIGA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFuYWdlcyB0aGUgc2VsZWN0ZWQgcGxhY2UgZXZlbnQgdHJpZ2dlcmVkIGZyb20gdGhlIHBsYWNlXG4gICAqIEVhY2ggc2VsZWN0aW9uIGVtaXRzIGFuIGFycmF5IG9mIGFsbCBzZWxlY3RlZCBwbGFjZXNcbiAgICogQHBhcmFtIHNlbGVjdFBsYWNlRXZlbnRcbiAgICovXG4gIHByaXZhdGUgX29uU2VsZWN0UGxhY2Uoc2VsZWN0UGxhY2VFdmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFBsYWNlID0gc2VsZWN0UGxhY2VFdmVudC5kZXRhaWwgYXMgUGxhY2VTZWxlY3Rpb247XG4gICAgLy8gV2UgaGF2ZSB0byBzZXQgcHJldmVudENvYWNoU2Nyb2xsQnlQbGFjZUNsaWNrIHRvIHRydWUsIHRvIHByZXZlbnQgYXV0b21hdGljIHNjcm9sbGluZyB0byB0aGUgbmV3IGZvY3VzZWQgcGxhY2VcbiAgICB0aGlzLnByZXZlbnRDb2FjaFNjcm9sbEJ5UGxhY2VDbGljayA9IHRydWU7XG4gICAgdGhpcy5pc0NvY2hHcmlkRm9jdXNhYmxlID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnByZXZlbnRQbGFjZUNsaWNrKSB7XG4gICAgICAvLyBBZGQgcGxhY2UgdG8gcGxhY2UgY29sbGVjdGlvblxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcyhzZWxlY3RlZFBsYWNlKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFNlbGVjdGVkUGxhY2VJbkNvYWNoKHNlbGVjdGVkUGxhY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uU2VsZWN0TmF2Q29hY2goZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWROYXZDb2FjaEluZGV4ID0gZXZlbnQuZGV0YWlsIGFzIG51bWJlcjtcbiAgICB0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoc2VsZWN0ZWROYXZDb2FjaEluZGV4ICE9PSBudWxsICYmIHNlbGVjdGVkTmF2Q29hY2hJbmRleCAhPT0gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4KSB7XG4gICAgICB0aGlzLnVuZm9jdXNQbGFjZUVsZW1lbnQoKTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZE5hdkNvYWNoKHNlbGVjdGVkTmF2Q29hY2hJbmRleCk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZE5hdkNvYWNoSW5kZXggPT09IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCkge1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50U2VsZWN0ZWRDb2FjaCgpO1xuICAgICAgdGhpcy5wcmVzZWxlY3RQbGFjZUluQ29hY2goKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbkZvY3VzTmF2Q29hY2goKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXZlbnRDb2FjaFNjcm9sbEJ5UGxhY2VDbGljaykge1xuICAgICAgdGhpcy5wcmVzZWxlY3RQbGFjZUluQ29hY2goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c1BsYWNlRWxlbWVudCh0aGlzLmN1cnJTZWxlY3RlZFBsYWNlKTtcbiAgICB9XG4gICAgdGhpcy5pc0F1dG9TY3JvbGxpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldERlc2NyaXB0aW9uVGFibGVDb2FjaChjb2FjaEl0ZW06IENvYWNoSXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKCFjb2FjaEl0ZW0ucGxhY2VzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9CTE9DS0VEX1RBQkxFX0NBUFRJT04nLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50LCBbXG4gICAgICAgIGNvYWNoSXRlbS5pZCxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGxldCB0YWJsZUNvYWNoRGVzY3JpcHRpb24gPSAnJztcbiAgICBjb25zdCBhcmVhRGVzY3JpcHRpb25zID0gdGhpcy5fZ2V0VGl0bGVEZXNjcmlwdGlvbkxpc3RTdHJpbmcoY29hY2hJdGVtLmdyYXBoaWNFbGVtZW50cyEpO1xuICAgIGNvbnN0IHNlcnZpY2VEZXNjcmlwdGlvbnMgPSB0aGlzLl9nZXRUaXRsZURlc2NyaXB0aW9uTGlzdFN0cmluZyhjb2FjaEl0ZW0uc2VydmljZUVsZW1lbnRzISk7XG5cbiAgICB0YWJsZUNvYWNoRGVzY3JpcHRpb24gPSBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9UQUJMRV9DQVBUSU9OJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCwgW1xuICAgICAgY29hY2hJdGVtLmlkLFxuICAgIF0pO1xuXG4gICAgaWYgKCEhYXJlYURlc2NyaXB0aW9ucyB8fCAhIXNlcnZpY2VEZXNjcmlwdGlvbnMpIHtcbiAgICAgIHRhYmxlQ29hY2hEZXNjcmlwdGlvbiArPVxuICAgICAgICAnLiAnICsgZ2V0STE4blNlYXRSZXNlcnZhdGlvbignQ09BQ0hfQVZBSUxBQkxFX1NFUlZJQ0VTJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCkgKyAnOiAnO1xuICAgICAgdGFibGVDb2FjaERlc2NyaXB0aW9uICs9IHNlcnZpY2VEZXNjcmlwdGlvbnMgKyAnLCAnICsgYXJlYURlc2NyaXB0aW9ucyArICcuJztcbiAgICB9XG4gICAgcmV0dXJuIHRhYmxlQ29hY2hEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRpdGxlRGVzY3JpcHRpb25MaXN0U3RyaW5nKGRlc2NyaXB0aW9uc0VsZW1lbnRzOiBCYXNlRWxlbWVudFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1bmlxdWVEZXNjcmlwdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICByZXR1cm4gZGVzY3JpcHRpb25zRWxlbWVudHNcbiAgICAgID8ubWFwKChkZXNjcmlwdGlvbkVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IGRlc2NyaXB0aW9uRWxlbWVudC5pY29uO1xuICAgICAgICBpZiAoIWljb24pIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uQWxyZWF5RXhpc3QgPSB1bmlxdWVEZXNjcmlwdGlvbnMuaW5kZXhPZihpY29uKSA+IC0xO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgICAgZGVzY3JpcHRpb25FbGVtZW50Lmljb24hLFxuICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlzVmFsaWREZXNjcmlwdGlvbiA9XG4gICAgICAgICAgdGhpcy5fbm90Rml4ZWRSb3RhdGFibGVBcmVhSWNvbnMuaW5kZXhPZihpY29uKSA9PT0gLTEgJiZcbiAgICAgICAgICB0aGlzLl9ub3RBcmVhRWxlbWVudHMuaW5kZXhPZihpY29uKSA9PT0gLTE7XG5cbiAgICAgICAgaWYgKCFkZXNjcmlwdGlvbkFscmVheUV4aXN0KSB7XG4gICAgICAgICAgdW5pcXVlRGVzY3JpcHRpb25zLnB1c2goZGVzY3JpcHRpb25FbGVtZW50Lmljb24hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF0cmFuc2xhdGlvbiAmJiAhZGVzY3JpcHRpb25BbHJlYXlFeGlzdCAmJiBpc1ZhbGlkRGVzY3JpcHRpb24gPyB0cmFuc2xhdGlvbiA6IG51bGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZGVzY3JpcHRpb24pID0+ICEhZGVzY3JpcHRpb24pXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlYXQtcmVzZXJ2YXRpb24nOiBTYmJTZWF0UmVzZXJ2YXRpb25FbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiX2EiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBb0NNLDZCQUF5QixNQUFBOzswQkFEOUIsY0FBYyxzQkFBc0IsQ0FBQzs7OztvQkFDRTs7Ozs7Ozs7Ozs7Ozs7OztBQUFSLEVBQUEsbUJBQVEsWUFBMEI7QUFBQTs7QUFLaEU7QUFLQTtBQUtBO0FBS0E7QUFLQTtBQXBCeUIseUJBQUEsbUNBQUEsa0JBQUEsTUFBQSwrQkFBbUMsSUFBSztBQUt4Qyx5QkFBQSxrQ0FBQSxrQkFBQSxNQUFBLGtDQUFBLEdBQUEsa0JBQUEsTUFBQSw2QkFBeUIsSUFBSTtBQUs3Qix5QkFBQSxrQ0FBQSxrQkFBQSxNQUFBLGdDQUFBLEdBQUEsa0JB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
|