@sbb-esta/lyne-elements-experimental 4.13.0 → 4.14.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.
Files changed (176) hide show
  1. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +1 -1
  2. package/autocomplete-grid/autocomplete-grid-cell.js +1 -1
  3. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +1 -1
  4. package/autocomplete-grid/autocomplete-grid-option.js +1 -1
  5. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +1 -1
  6. package/autocomplete-grid/autocomplete-grid-row.js +1 -1
  7. package/autocomplete-grid.js +3 -3
  8. package/autocomplete-grid.pure.js +3 -3
  9. package/core/datetime/date-helper.js +1 -1
  10. package/core/datetime.js +1 -1
  11. package/custom-elements.json +84 -93
  12. package/{date-helper-CGproP5d.js → date-helper-NgYaHPR7.js} +3 -3
  13. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +1 -1
  14. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +1 -1
  15. package/development/autocomplete-grid/autocomplete-grid-button.js +1 -1
  16. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +1 -1
  17. package/development/autocomplete-grid/autocomplete-grid-cell.js +2 -2
  18. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +1 -1
  19. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +1 -1
  20. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +1 -1
  21. package/development/autocomplete-grid/autocomplete-grid-option.js +2 -2
  22. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +1 -1
  23. package/development/autocomplete-grid/autocomplete-grid-row.js +2 -2
  24. package/development/autocomplete-grid/autocomplete-grid.js +1 -1
  25. package/development/{autocomplete-grid-cell.component-BxkWGaX0.js → autocomplete-grid-cell.component-CTC6s1q3.js} +1 -1
  26. package/development/{autocomplete-grid-option.component-5mPGswUO.js → autocomplete-grid-option.component-DqkLWHcg.js} +1 -1
  27. package/development/{autocomplete-grid-row.component-DEm6zyHZ.js → autocomplete-grid-row.component-CvF3ZWDZ.js} +1 -1
  28. package/development/autocomplete-grid.js +4 -4
  29. package/development/autocomplete-grid.pure.js +3 -3
  30. package/development/core/datetime/date-helper.js +1 -1
  31. package/development/core/datetime.js +1 -1
  32. package/development/core/timetable/access-leg-helper.js +1 -1
  33. package/development/core/timetable/timetable-helper.js +1 -1
  34. package/development/core/timetable/timetable-properties.d.ts +2 -0
  35. package/development/core/timetable/timetable-properties.d.ts.map +1 -1
  36. package/development/date-helper-QhWjANc3.js +539 -0
  37. package/development/{differenceInMinutes-B7_GTDq7.js → differenceInMinutes-CxAbGYQ3.js} +2 -2
  38. package/development/{format-DFx4997p.js → format-Cx3zmmaF.js} +3 -3
  39. package/development/{isValid-JpZ7FphI.js → isValid-40Olgzo1.js} +2 -2
  40. package/development/journey-summary/journey-summary.component.js +1 -1
  41. package/development/{journey-summary.component-BZwgD4im.js → journey-summary.component-BTaPGCGZ.js} +3 -3
  42. package/development/journey-summary.js +2 -2
  43. package/development/journey-summary.pure.js +1 -1
  44. package/development/{mapper-hWWm7Uke.js → mapper-BrZOqqfe.js} +1 -1
  45. package/development/pearl-chain/pearl-chain.component.d.ts.map +1 -1
  46. package/development/pearl-chain/pearl-chain.component.js +1 -1
  47. package/development/pearl-chain-time/pearl-chain-time.component.js +1 -1
  48. package/development/{pearl-chain-time.component-B2_BI6E_.js → pearl-chain-time.component-BMHLITah.js} +2 -2
  49. package/development/pearl-chain-time.js +2 -2
  50. package/development/pearl-chain-time.pure.js +1 -1
  51. package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +1 -1
  52. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  53. package/development/{pearl-chain-vertical-item.component-D4clzjjQ.js → pearl-chain-vertical-item.component-JYDWs8ta.js} +1 -1
  54. package/development/pearl-chain-vertical-item.js +2 -2
  55. package/development/pearl-chain-vertical-item.pure.js +1 -1
  56. package/development/{pearl-chain-vertical.component-CpcNFl-x.js → pearl-chain-vertical.component-YYXS_74c.js} +1 -1
  57. package/development/pearl-chain-vertical.js +2 -2
  58. package/development/pearl-chain-vertical.pure.js +1 -1
  59. package/development/pearl-chain.component-BlrYDesj.js +323 -0
  60. package/development/pearl-chain.js +2 -2
  61. package/development/pearl-chain.pure.js +1 -1
  62. package/development/seat-reservation/common/mapper/icon-mapper.js +1 -1
  63. package/development/seat-reservation/common/mapper/mapper.js +1 -1
  64. package/development/seat-reservation/common/mapper.js +1 -1
  65. package/development/seat-reservation/common/svgs.js +1 -1
  66. package/development/seat-reservation/common/translations/i18n.js +1 -1
  67. package/development/seat-reservation/common.js +3 -3
  68. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -1
  69. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +8 -8
  70. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
  71. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +1 -1
  72. package/development/seat-reservation/seat-reservation-area.js +2 -2
  73. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +2 -2
  74. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +1 -1
  75. package/development/seat-reservation/seat-reservation-graphic.js +2 -2
  76. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +1 -1
  77. package/development/seat-reservation/seat-reservation-navigation-coach.js +2 -2
  78. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +1 -1
  79. package/development/seat-reservation/seat-reservation-navigation-services.js +2 -2
  80. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +0 -1
  81. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -1
  82. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +1 -1
  83. package/development/seat-reservation/seat-reservation-place-control.js +2 -2
  84. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +1 -1
  85. package/development/seat-reservation/seat-reservation-scoped.js +2 -2
  86. package/development/seat-reservation/seat-reservation.js +2 -2
  87. package/development/{seat-reservation-area.component-BWdrKqek.js → seat-reservation-area.component-dG1GXJQP.js} +1 -1
  88. package/development/{seat-reservation-graphic.component-CN5sWn0I.js → seat-reservation-graphic.component-BmhZpVL0.js} +1 -1
  89. package/development/{seat-reservation-navigation-coach.component-tDZkXl-3.js → seat-reservation-navigation-coach.component-Be9CBw62.js} +1 -1
  90. package/development/{seat-reservation-navigation-services.component-CGel7__P.js → seat-reservation-navigation-services.component-B2uWa_VN.js} +1 -1
  91. package/development/{seat-reservation-place-control.component-CM9efId7.js → seat-reservation-place-control.component-CdL6yPUZ.js} +21 -26
  92. package/development/{seat-reservation-scoped.component-CFA_bJ3o.js → seat-reservation-scoped.component-CJCkuKGz.js} +1 -1
  93. package/development/{seat-reservation.component-44IHFFlM.js → seat-reservation.component-B4BxXyLr.js} +1 -1
  94. package/development/seat-reservation.js +10 -10
  95. package/development/seat-reservation.pure.js +9 -9
  96. package/development/{svgs-kDpBCto5.js → svgs-Dj-RKmRs.js} +1 -1
  97. package/development/timetable-duration/timetable-duration.component.js +1 -1
  98. package/development/{timetable-duration.component-BhFlqYbV.js → timetable-duration.component-CXF0oJbO.js} +1 -1
  99. package/development/timetable-duration.js +2 -2
  100. package/development/timetable-duration.pure.js +1 -1
  101. package/development/timetable-row/timetable-row.component.d.ts.map +1 -1
  102. package/development/timetable-row/timetable-row.component.js +1 -1
  103. package/development/timetable-row.component-CQHA4ihk.js +733 -0
  104. package/development/timetable-row.js +2 -2
  105. package/development/timetable-row.pure.js +1 -1
  106. package/development/{toDate-DOFAOjP-.js → toDate-CDWut5fS.js} +1 -1
  107. package/{differenceInMinutes-Dr9gRqtu.js → differenceInMinutes-BAZ-Fham.js} +1 -1
  108. package/{format-DbUuNYFU.js → format-DjgG1QPc.js} +2 -2
  109. package/{isValid-B9oVW3lA.js → isValid-CXnsFZVu.js} +1 -1
  110. package/journey-summary/journey-summary.component.js +1 -1
  111. package/{journey-summary.component-OFYXlkzg.js → journey-summary.component-DyTUTCOU.js} +2 -2
  112. package/journey-summary.js +1 -1
  113. package/journey-summary.pure.js +1 -1
  114. package/package.json +3 -3
  115. package/pearl-chain/pearl-chain.component.js +1 -1
  116. package/pearl-chain-time/pearl-chain-time.component.js +1 -1
  117. package/{pearl-chain-time.component-CNKsGfIp.js → pearl-chain-time.component-DXe2o6S1.js} +1 -1
  118. package/pearl-chain-time.js +1 -1
  119. package/pearl-chain-time.pure.js +1 -1
  120. package/pearl-chain-vertical/pearl-chain-vertical.component.js +1 -1
  121. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  122. package/pearl-chain-vertical-item.js +1 -1
  123. package/pearl-chain-vertical-item.pure.js +1 -1
  124. package/pearl-chain-vertical.js +1 -1
  125. package/pearl-chain-vertical.pure.js +1 -1
  126. package/{pearl-chain.component-CpISVoAu.js → pearl-chain.component-NsjuHEuY.js} +9 -9
  127. package/pearl-chain.js +1 -1
  128. package/pearl-chain.pure.js +1 -1
  129. package/seat-reservation/common/mapper/mapper.js +1 -1
  130. package/seat-reservation/common/mapper.js +1 -1
  131. package/seat-reservation/common/svgs.js +1 -1
  132. package/seat-reservation/common.js +2 -2
  133. package/seat-reservation/seat-reservation/seat-reservation-base-element.js +4 -4
  134. package/seat-reservation/seat-reservation/seat-reservation.component.js +1 -1
  135. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +1 -1
  136. package/seat-reservation/seat-reservation-area.js +1 -1
  137. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +1 -1
  138. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +1 -1
  139. package/seat-reservation/seat-reservation-graphic.js +1 -1
  140. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +1 -1
  141. package/seat-reservation/seat-reservation-navigation-coach.js +1 -1
  142. package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +1 -1
  143. package/seat-reservation/seat-reservation-navigation-services.js +1 -1
  144. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +1 -1
  145. package/seat-reservation/seat-reservation-place-control.js +1 -1
  146. package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +1 -1
  147. package/seat-reservation/seat-reservation-scoped.js +1 -1
  148. package/seat-reservation/seat-reservation.js +1 -1
  149. package/{seat-reservation-place-control.component-CE7d9M2b.js → seat-reservation-place-control.component-kx07J_YK.js} +14 -21
  150. package/seat-reservation.js +9 -9
  151. package/seat-reservation.pure.js +9 -9
  152. package/timetable-duration/timetable-duration.component.js +1 -1
  153. package/timetable-duration.js +1 -1
  154. package/timetable-duration.pure.js +1 -1
  155. package/timetable-row/timetable-row.component.js +1 -1
  156. package/{timetable-row.component-Cd_7Pu_E.js → timetable-row.component-BoMbHP6s.js} +9 -5
  157. package/timetable-row.js +1 -1
  158. package/timetable-row.pure.js +1 -1
  159. package/development/date-helper-qNdwgC9O.js +0 -520
  160. package/development/pearl-chain.component-oQZUzsyW.js +0 -316
  161. package/development/timetable-row.component-Dko8laRT.js +0 -729
  162. /package/{autocomplete-grid-cell.component-DkD9aFKc.js → autocomplete-grid-cell.component-D-Kk9HwQ.js} +0 -0
  163. /package/{autocomplete-grid-option.component-CtATJy7n.js → autocomplete-grid-option.component-qBUSf0mD.js} +0 -0
  164. /package/{autocomplete-grid-row.component-6nJv5PMj.js → autocomplete-grid-row.component-57jjeZWF.js} +0 -0
  165. /package/{mapper-Cqie5ivY.js → mapper-Dcou8VEf.js} +0 -0
  166. /package/{pearl-chain-vertical-item.component-CGYNzFlK.js → pearl-chain-vertical-item.component-Bby13csG.js} +0 -0
  167. /package/{pearl-chain-vertical.component-Df9CvRxo.js → pearl-chain-vertical.component-0EgQ4knk.js} +0 -0
  168. /package/{seat-reservation-area.component-B5_N7H_a.js → seat-reservation-area.component-DZsXvaMQ.js} +0 -0
  169. /package/{seat-reservation-graphic.component-Dh1e2Pve.js → seat-reservation-graphic.component-BnJuHVZQ.js} +0 -0
  170. /package/{seat-reservation-navigation-coach.component-BdCUfksf.js → seat-reservation-navigation-coach.component-DgdpqMzG.js} +0 -0
  171. /package/{seat-reservation-navigation-services.component-C9dDYD_M.js → seat-reservation-navigation-services.component-6ECATtWB.js} +0 -0
  172. /package/{seat-reservation-scoped.component-DVyP2JGE.js → seat-reservation-scoped.component-L1wMt65t.js} +0 -0
  173. /package/{seat-reservation.component-CtEqqosF.js → seat-reservation.component-B_T6eTf6.js} +0 -0
  174. /package/{svgs-D5DhLHxC.js → svgs-D4fuYTHV.js} +0 -0
  175. /package/{timetable-duration.component-BnJA8wSb.js → timetable-duration.component-Bqo5N_De.js} +0 -0
  176. /package/{toDate-p-Tpkb7t.js → toDate-BhNUyM4s.js} +0 -0
@@ -1,729 +0,0 @@
1
- import { t as format } from "./format-DFx4997p.js";
2
- import { __esDecorate, __runInitializers } from "tslib";
3
- import { SbbElement } from "@sbb-esta/lyne-elements/core/base-elements.js";
4
- import { SbbLanguageController } from "@sbb-esta/lyne-elements/core/controllers.js";
5
- import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
6
- import { boxSizingStyles } from "@sbb-esta/lyne-elements/core/styles.js";
7
- import "@sbb-esta/lyne-elements/icon.js";
8
- import { html, nothing, unsafeCSS } from "lit";
9
- import { setOrRemoveAttribute } from "@sbb-esta/lyne-elements/core/dom.js";
10
- import { defaultDateAdapter } from "@sbb-esta/lyne-elements/core/datetime.js";
11
- import { i18nArrival, i18nClass, i18nDeparture, i18nDirection, i18nFromPlatform, i18nMeansOfTransport, i18nNew, i18nOccupancy, i18nRealTimeInfo, i18nSupersaver, i18nTransferProcedure, i18nTransferProcedures, i18nTravelhints, i18nTripDuration, i18nTripQuayChange } from "@sbb-esta/lyne-elements/core/i18n.js";
12
- import { property } from "lit/decorators.js";
13
- import { durationToTime, removeTimezoneFromISOTimeString } from "./core/datetime.js";
14
- import "./pearl-chain-time.js";
15
- import { getDepartureArrivalTimeAttribute, isRideLeg } from "./core/timetable.js";
16
- import "@sbb-esta/lyne-elements/card.js";
17
- import "@sbb-esta/lyne-elements/timetable-occupancy.js";
18
- //#region src/elements-experimental/timetable-row/timetable-row.scss?inline
19
- var timetable_row_default = ":host {\n --sbb-timetable-row-gap: var(--sbb-spacing-fixed-2x);\n --sbb-timetable-row-height: 1.5625rem;\n --sbb-timetable-row-height-header: 1.25rem;\n --sbb-timetable-row-height-footer: 1rem;\n --sbb-timetable-row-skeleton-pulse-duration: 1800ms;\n display: block;\n}\n\n:host([disable-animation]) {\n --sbb-timetable-row-skeleton-pulse-duration: 0;\n}\n\n.sbb-timetable__row-transport-icon {\n --sbb-icon-svg-width: 1.25rem;\n --sbb-icon-svg-height: 1.25rem;\n}\n\n.sbb-travel-hints__item {\n --sbb-icon-svg-height: 0.875rem;\n}\n\n.sbb-screen-reader-only {\n border: 0;\n clip-path: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}\n\n.sbb-timetable__row--quay {\n margin-inline-end: var(--sbb-spacing-fixed-1x);\n}\n\n.sbb-timetable__row--quay-type {\n float: left;\n}\n\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n display: inline-flex;\n}\n\nli {\n display: inline-flex;\n align-self: center;\n}\n\n.sbb-timetable__row-transport {\n display: inline-flex;\n align-self: center;\n}\n\n.sbb-timetable__row-transportnumber,\n.sbb-timetable__row-time {\n --sbb-text-font-size: var(--sbb-text-font-size-s);\n font-family: var(--sbb-typo-font-family);\n font-weight: normal;\n line-height: var(--sbb-typo-line-height-text);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n font-size: var(--sbb-text-font-size);\n font-weight: bold;\n line-height: unset;\n white-space: nowrap;\n align-self: center;\n}\n\n.sbb-timetable__row {\n --sbb-text-font-size: var(--sbb-text-font-size-s);\n font-family: var(--sbb-typo-font-family);\n font-weight: normal;\n line-height: var(--sbb-typo-line-height-text);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n font-size: var(--sbb-text-font-size);\n display: flex;\n flex-direction: column;\n gap: var(--sbb-timetable-row-gap);\n}\n\n.sbb-timetable__row-header,\n.sbb-timetable__row-footer {\n animation: none;\n}\n\n.sbb-timetable__row-header {\n display: flex;\n gap: var(--sbb-spacing-fixed-2x);\n align-items: center;\n line-height: var(--sbb-timetable-row-height-header);\n}\n\n.sbb-timetable__row-details,\n.sbb-timetable__row-hints {\n display: inline-flex;\n gap: var(--sbb-spacing-fixed-1x);\n align-items: center;\n}\n\n.sbb-timetable__row-header p {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin: 0;\n align-self: center;\n}\n\n.sbb-timetable__row-footer {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n align-items: center;\n gap: var(--sbb-spacing-fixed-2x);\n line-height: var(--sbb-timetable-row-height-footer);\n}\n.sbb-timetable__row-footer > span {\n align-self: center;\n}\n.sbb-timetable__row-footer :only-child {\n margin-inline-start: auto;\n}\n\n.sbb-timetable__row-quay--changed {\n color: var(--sbb-color-primary);\n}\n\n.sbb-timetable__row-transport-wrapper,\n.sbb-timetable__row-warning {\n display: inline-flex;\n}\n\n.sbb-loading {\n pointer-events: none;\n}\n\n.sbb-loading__wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--sbb-spacing-fixed-2x);\n}\n\n.sbb-loading__row {\n width: 100%;\n border-radius: var(--sbb-border-radius-1x);\n height: var(--sbb-timetable-row-height);\n}\n@media (min-width: calc(64rem)) {\n .sbb-loading__row {\n height: 1.75rem;\n }\n}\n@media (forced-colors: active) {\n .sbb-loading__row {\n border: var(--sbb-border-width-1x) solid ButtonBorder !important;\n }\n}\n\n.sbb-loading__row,\n.sbb-loading__badge {\n background: var(--sbb-background-color-4);\n animation: skeleton-pulse var(--sbb-timetable-row-skeleton-pulse-duration) ease-out infinite;\n}\n\n.sbb-loading__row:first-of-type {\n height: var(--sbb-timetable-row-height-header);\n width: 50%;\n}\n\n.sbb-loading__row:last-of-type {\n height: var(--sbb-timetable-row-height-footer);\n}\n\n.sbb-loading__badge {\n margin-inline: auto calc(var(--sbb-spacing-fixed-3x) * -1);\n padding-inline-end: var(--sbb-spacing-fixed-6x);\n border-end-start-radius: var(--sbb-card-badge-border-radius);\n transform: var(--sbb-card-badge-skew);\n width: 7.1875rem;\n height: 1.25rem;\n}\n\n@keyframes skeleton-pulse {\n 0% {\n background: var(--sbb-background-color-4);\n }\n 17% {\n background: var(--sbb-background-color-4);\n }\n 50% {\n background: var(--sbb-background-color-3);\n }\n 67% {\n background: var(--sbb-background-color-3);\n }\n 100% {\n background: var(--sbb-background-color-4);\n }\n}";
20
- //#endregion
21
- //#region src/elements-experimental/timetable-row/timetable-row.component.ts
22
- var renderIconProduct = (icon, name) => {
23
- return html`<span class="sbb-timetable__row-transport">
24
- <sbb-icon name=${icon}></sbb-icon>
25
- <span class="sbb-screen-reader-only">${name}</span>
26
- </span>`;
27
- };
28
- var renderStringProduct = (vehicleName, line) => {
29
- const space = [
30
- "M",
31
- "B",
32
- "T"
33
- ].includes(vehicleName) ? " " : "";
34
- return html`<span class="sbb-timetable__row-transportnumber">
35
- ${line !== null ? vehicleName + space + line : vehicleName}
36
- </span>`;
37
- };
38
- var getReachableText = (legs) => {
39
- return legs?.find((leg) => leg.serviceJourney?.serviceAlteration?.reachableText)?.serviceJourney?.serviceAlteration?.reachableText;
40
- };
41
- var getDelayText = (legs) => {
42
- return legs?.find((leg) => leg.serviceJourney?.serviceAlteration?.delayText)?.serviceJourney?.serviceAlteration?.delayText;
43
- };
44
- var getRedirectedText = (legs) => {
45
- return legs?.find((leg) => !!leg.serviceJourney?.serviceAlteration?.redirectedText)?.serviceJourney?.serviceAlteration?.redirectedText;
46
- };
47
- var getUnplannedStop = (legs) => {
48
- return legs?.find((leg) => !!leg.serviceJourney?.serviceAlteration?.unplannedStopPointsText)?.serviceJourney?.serviceAlteration?.unplannedStopPointsText;
49
- };
50
- var sortSituation = (situations) => {
51
- const priorities = {
52
- DISTURBANCE: 0,
53
- INFORMATION: 1,
54
- DELAY: 2,
55
- TRAIN_REPLACEMENT_BY_BUS: 3,
56
- CONSTRUCTION_SITE: 4,
57
- END_MESSAGE: 5
58
- };
59
- return [...situations]?.sort((a, b) => priorities[a.cause] - priorities[b.cause]);
60
- };
61
- var getHimIcon = (situation) => {
62
- switch (situation?.cause) {
63
- case "DISTURBANCE": return {
64
- name: "disruption",
65
- text: situation?.broadcastMessages?.length ? situation?.broadcastMessages[0].title : ""
66
- };
67
- case "INFORMATION": return {
68
- name: "info",
69
- text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
70
- };
71
- case "DELAY": return {
72
- name: "delay",
73
- text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
74
- };
75
- case "TRAIN_REPLACEMENT_BY_BUS": return {
76
- name: "replacementbus",
77
- text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
78
- };
79
- case "CONSTRUCTION_SITE": return {
80
- name: "construction",
81
- text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
82
- };
83
- default: return {
84
- name: "info",
85
- text: situation?.broadcastMessages.length ? situation?.broadcastMessages[0].title : ""
86
- };
87
- }
88
- };
89
- var getCus = (trip, currentLanguage) => {
90
- const { summary, legs } = trip || {};
91
- const rideLegs = legs?.filter((leg) => isRideLeg(leg));
92
- const { tripStatus } = summary || {};
93
- if (tripStatus?.cancelled || tripStatus?.partiallyCancelled) return {
94
- name: "cancellation",
95
- text: tripStatus?.cancelledText
96
- };
97
- if (getReachableText(rideLegs)) return {
98
- name: "missed-connection",
99
- text: getReachableText(rideLegs)
100
- };
101
- if (tripStatus?.alternative) return {
102
- name: "alternative",
103
- text: tripStatus.alternativeText
104
- };
105
- if (getRedirectedText(rideLegs)) return {
106
- name: "reroute",
107
- text: getRedirectedText(rideLegs)
108
- };
109
- if (getUnplannedStop(rideLegs)) return {
110
- name: "add-stop",
111
- text: getUnplannedStop(rideLegs)
112
- };
113
- if (tripStatus?.delayed || tripStatus?.delayedUnknown) return {
114
- name: "delay",
115
- text: getDelayText(rideLegs)
116
- };
117
- if (tripStatus?.quayChanged) {
118
- const departure = rideLegs[0].departure;
119
- return {
120
- name: "platform-change",
121
- text: departure.quayChanged ? departure.quayChangedText : i18nTripQuayChange[currentLanguage]
122
- };
123
- }
124
- return {};
125
- };
126
- var findAndReplaceNotice = (notices) => {
127
- const reservationNotice = [
128
- "RR",
129
- "RK",
130
- "RC",
131
- "RL",
132
- "RM",
133
- "RS",
134
- "RU",
135
- "XP",
136
- "XR",
137
- "XT"
138
- ];
139
- return notices.reduce((foundNotice, notice) => {
140
- if (foundNotice) return foundNotice;
141
- if (reservationNotice.includes(notice.name)) return {
142
- ...notice,
143
- name: "RR"
144
- };
145
- }, void 0);
146
- };
147
- var filterNotices = (notices) => {
148
- const allowedNames = [
149
- "Z",
150
- "SB",
151
- "SZ",
152
- "VR",
153
- "TG"
154
- ];
155
- return notices.filter((notice, index) => {
156
- return notices.findIndex((n) => n.name === notice.name) === index;
157
- }).filter((notice) => allowedNames.includes(notice.name)).sort((a, b) => allowedNames.indexOf(a.name) - allowedNames.indexOf(b.name));
158
- };
159
- var handleNotices = (notices) => {
160
- const reservationNotice = findAndReplaceNotice(notices);
161
- const filteredNotices = filterNotices(notices);
162
- if (reservationNotice === void 0) return filteredNotices;
163
- if (!filteredNotices.length) return [reservationNotice];
164
- if (filteredNotices[0].name === "Z" && filteredNotices[1]) return [
165
- filteredNotices[0],
166
- reservationNotice,
167
- filteredNotices[1]
168
- ].concat(filteredNotices.slice(2));
169
- return [reservationNotice, ...filteredNotices];
170
- };
171
- /**
172
- * It displays information about the trip, acting as a container for all the `sbb-timetable-*` components.
173
- * */
174
- var SbbTimetableRowElement = (() => {
175
- let _classSuper = SbbElement;
176
- let _instanceExtraInitializers = [];
177
- let _trip_decorators;
178
- let _trip_initializers = [];
179
- let _trip_extraInitializers = [];
180
- let _price_decorators;
181
- let _price_initializers = [];
182
- let _price_extraInitializers = [];
183
- let _disableAnimation_decorators;
184
- let _disableAnimation_initializers = [];
185
- let _disableAnimation_extraInitializers = [];
186
- let _boarding_decorators;
187
- let _boarding_initializers = [];
188
- let _boarding_extraInitializers = [];
189
- let _loadingTrip_decorators;
190
- let _loadingTrip_initializers = [];
191
- let _loadingTrip_extraInitializers = [];
192
- let _a11yFootpath_decorators;
193
- let _a11yFootpath_initializers = [];
194
- let _a11yFootpath_extraInitializers = [];
195
- let _loadingPrice_decorators;
196
- let _loadingPrice_initializers = [];
197
- let _loadingPrice_extraInitializers = [];
198
- let _cardActionLabel_decorators;
199
- let _cardActionLabel_initializers = [];
200
- let _cardActionLabel_extraInitializers = [];
201
- let _accessibilityExpanded_decorators;
202
- let _accessibilityExpanded_initializers = [];
203
- let _accessibilityExpanded_extraInitializers = [];
204
- let _active_decorators;
205
- let _active_initializers = [];
206
- let _active_extraInitializers = [];
207
- let _set_now_decorators;
208
- return class SbbTimetableRowElement extends _classSuper {
209
- constructor() {
210
- super(...arguments);
211
- this.#trip_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _trip_initializers, null));
212
- this.#price_accessor_storage = (__runInitializers(this, _trip_extraInitializers), __runInitializers(this, _price_initializers, null));
213
- this.#disableAnimation_accessor_storage = (__runInitializers(this, _price_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false));
214
- this.#boarding_accessor_storage = (__runInitializers(this, _disableAnimation_extraInitializers), __runInitializers(this, _boarding_initializers, null));
215
- this.#loadingTrip_accessor_storage = (__runInitializers(this, _boarding_extraInitializers), __runInitializers(this, _loadingTrip_initializers, false));
216
- this.#a11yFootpath_accessor_storage = (__runInitializers(this, _loadingTrip_extraInitializers), __runInitializers(this, _a11yFootpath_initializers, false));
217
- this.#loadingPrice_accessor_storage = (__runInitializers(this, _a11yFootpath_extraInitializers), __runInitializers(this, _loadingPrice_initializers, false));
218
- this.#cardActionLabel_accessor_storage = (__runInitializers(this, _loadingPrice_extraInitializers), __runInitializers(this, _cardActionLabel_initializers, ""));
219
- this.#accessibilityExpanded_accessor_storage = (__runInitializers(this, _cardActionLabel_extraInitializers), __runInitializers(this, _accessibilityExpanded_initializers, false));
220
- this.#active_accessor_storage = (__runInitializers(this, _accessibilityExpanded_extraInitializers), __runInitializers(this, _active_initializers, false));
221
- this._now = (__runInitializers(this, _active_extraInitializers), null);
222
- this._language = new SbbLanguageController(this);
223
- }
224
- static {
225
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
226
- _trip_decorators = [property({ type: Object })];
227
- _price_decorators = [property({ type: Object })];
228
- _disableAnimation_decorators = [forceType(), property({
229
- attribute: "disable-animation",
230
- reflect: true,
231
- type: Boolean
232
- })];
233
- _boarding_decorators = [property({ type: Object })];
234
- _loadingTrip_decorators = [forceType(), property({
235
- attribute: "loading-trip",
236
- type: Boolean
237
- })];
238
- _a11yFootpath_decorators = [forceType(), property({
239
- attribute: "a11y-footpath",
240
- type: Boolean
241
- })];
242
- _loadingPrice_decorators = [forceType(), property({
243
- attribute: "loading-price",
244
- type: Boolean
245
- })];
246
- _cardActionLabel_decorators = [forceType(), property({ attribute: "card-action-label" })];
247
- _accessibilityExpanded_decorators = [forceType(), property({
248
- attribute: "accessibility-expanded",
249
- type: Boolean
250
- })];
251
- _active_decorators = [forceType(), property({ type: Boolean })];
252
- _set_now_decorators = [property()];
253
- __esDecorate(this, null, _trip_decorators, {
254
- kind: "accessor",
255
- name: "trip",
256
- static: false,
257
- private: false,
258
- access: {
259
- has: (obj) => "trip" in obj,
260
- get: (obj) => obj.trip,
261
- set: (obj, value) => {
262
- obj.trip = value;
263
- }
264
- },
265
- metadata: _metadata
266
- }, _trip_initializers, _trip_extraInitializers);
267
- __esDecorate(this, null, _price_decorators, {
268
- kind: "accessor",
269
- name: "price",
270
- static: false,
271
- private: false,
272
- access: {
273
- has: (obj) => "price" in obj,
274
- get: (obj) => obj.price,
275
- set: (obj, value) => {
276
- obj.price = value;
277
- }
278
- },
279
- metadata: _metadata
280
- }, _price_initializers, _price_extraInitializers);
281
- __esDecorate(this, null, _disableAnimation_decorators, {
282
- kind: "accessor",
283
- name: "disableAnimation",
284
- static: false,
285
- private: false,
286
- access: {
287
- has: (obj) => "disableAnimation" in obj,
288
- get: (obj) => obj.disableAnimation,
289
- set: (obj, value) => {
290
- obj.disableAnimation = value;
291
- }
292
- },
293
- metadata: _metadata
294
- }, _disableAnimation_initializers, _disableAnimation_extraInitializers);
295
- __esDecorate(this, null, _boarding_decorators, {
296
- kind: "accessor",
297
- name: "boarding",
298
- static: false,
299
- private: false,
300
- access: {
301
- has: (obj) => "boarding" in obj,
302
- get: (obj) => obj.boarding,
303
- set: (obj, value) => {
304
- obj.boarding = value;
305
- }
306
- },
307
- metadata: _metadata
308
- }, _boarding_initializers, _boarding_extraInitializers);
309
- __esDecorate(this, null, _loadingTrip_decorators, {
310
- kind: "accessor",
311
- name: "loadingTrip",
312
- static: false,
313
- private: false,
314
- access: {
315
- has: (obj) => "loadingTrip" in obj,
316
- get: (obj) => obj.loadingTrip,
317
- set: (obj, value) => {
318
- obj.loadingTrip = value;
319
- }
320
- },
321
- metadata: _metadata
322
- }, _loadingTrip_initializers, _loadingTrip_extraInitializers);
323
- __esDecorate(this, null, _a11yFootpath_decorators, {
324
- kind: "accessor",
325
- name: "a11yFootpath",
326
- static: false,
327
- private: false,
328
- access: {
329
- has: (obj) => "a11yFootpath" in obj,
330
- get: (obj) => obj.a11yFootpath,
331
- set: (obj, value) => {
332
- obj.a11yFootpath = value;
333
- }
334
- },
335
- metadata: _metadata
336
- }, _a11yFootpath_initializers, _a11yFootpath_extraInitializers);
337
- __esDecorate(this, null, _loadingPrice_decorators, {
338
- kind: "accessor",
339
- name: "loadingPrice",
340
- static: false,
341
- private: false,
342
- access: {
343
- has: (obj) => "loadingPrice" in obj,
344
- get: (obj) => obj.loadingPrice,
345
- set: (obj, value) => {
346
- obj.loadingPrice = value;
347
- }
348
- },
349
- metadata: _metadata
350
- }, _loadingPrice_initializers, _loadingPrice_extraInitializers);
351
- __esDecorate(this, null, _cardActionLabel_decorators, {
352
- kind: "accessor",
353
- name: "cardActionLabel",
354
- static: false,
355
- private: false,
356
- access: {
357
- has: (obj) => "cardActionLabel" in obj,
358
- get: (obj) => obj.cardActionLabel,
359
- set: (obj, value) => {
360
- obj.cardActionLabel = value;
361
- }
362
- },
363
- metadata: _metadata
364
- }, _cardActionLabel_initializers, _cardActionLabel_extraInitializers);
365
- __esDecorate(this, null, _accessibilityExpanded_decorators, {
366
- kind: "accessor",
367
- name: "accessibilityExpanded",
368
- static: false,
369
- private: false,
370
- access: {
371
- has: (obj) => "accessibilityExpanded" in obj,
372
- get: (obj) => obj.accessibilityExpanded,
373
- set: (obj, value) => {
374
- obj.accessibilityExpanded = value;
375
- }
376
- },
377
- metadata: _metadata
378
- }, _accessibilityExpanded_initializers, _accessibilityExpanded_extraInitializers);
379
- __esDecorate(this, null, _active_decorators, {
380
- kind: "accessor",
381
- name: "active",
382
- static: false,
383
- private: false,
384
- access: {
385
- has: (obj) => "active" in obj,
386
- get: (obj) => obj.active,
387
- set: (obj, value) => {
388
- obj.active = value;
389
- }
390
- },
391
- metadata: _metadata
392
- }, _active_initializers, _active_extraInitializers);
393
- __esDecorate(this, null, _set_now_decorators, {
394
- kind: "setter",
395
- name: "now",
396
- static: false,
397
- private: false,
398
- access: {
399
- has: (obj) => "now" in obj,
400
- set: (obj, value) => {
401
- obj.now = value;
402
- }
403
- },
404
- metadata: _metadata
405
- }, null, _instanceExtraInitializers);
406
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
407
- enumerable: true,
408
- configurable: true,
409
- writable: true,
410
- value: _metadata
411
- });
412
- }
413
- static {
414
- this.elementName = "sbb-timetable-row";
415
- }
416
- static {
417
- this.styles = [boxSizingStyles, unsafeCSS(timetable_row_default)];
418
- }
419
- #trip_accessor_storage;
420
- /** The trip Prop. */
421
- get trip() {
422
- return this.#trip_accessor_storage;
423
- }
424
- set trip(value) {
425
- this.#trip_accessor_storage = value;
426
- }
427
- #price_accessor_storage;
428
- /** The price Prop, which consists of the data for the badge. */
429
- get price() {
430
- return this.#price_accessor_storage;
431
- }
432
- set price(value) {
433
- this.#price_accessor_storage = value;
434
- }
435
- #disableAnimation_accessor_storage;
436
- /** This will be forwarded to the sbb-pearl-chain component - if true the position won't be animated. */
437
- get disableAnimation() {
438
- return this.#disableAnimation_accessor_storage;
439
- }
440
- set disableAnimation(value) {
441
- this.#disableAnimation_accessor_storage = value;
442
- }
443
- #boarding_accessor_storage;
444
- /** This will be forwarded to the notices section */
445
- get boarding() {
446
- return this.#boarding_accessor_storage;
447
- }
448
- set boarding(value) {
449
- this.#boarding_accessor_storage = value;
450
- }
451
- #loadingTrip_accessor_storage;
452
- /**
453
- * The loading state -
454
- * when this is true it will be render skeleton with an idling animation
455
- */
456
- get loadingTrip() {
457
- return this.#loadingTrip_accessor_storage;
458
- }
459
- set loadingTrip(value) {
460
- this.#loadingTrip_accessor_storage = value;
461
- }
462
- #a11yFootpath_accessor_storage;
463
- /**
464
- * The Footpath attribute for rendering different icons
465
- * true: render a11y-icon
466
- * false: render walk-icon
467
- * default: render walk-icon
468
- */
469
- get a11yFootpath() {
470
- return this.#a11yFootpath_accessor_storage;
471
- }
472
- set a11yFootpath(value) {
473
- this.#a11yFootpath_accessor_storage = value;
474
- }
475
- #loadingPrice_accessor_storage;
476
- /**
477
- * The loading state -
478
- * when this is true it will be render skeleton with an idling animation
479
- */
480
- get loadingPrice() {
481
- return this.#loadingPrice_accessor_storage;
482
- }
483
- set loadingPrice(value) {
484
- this.#loadingPrice_accessor_storage = value;
485
- }
486
- #cardActionLabel_accessor_storage;
487
- /**
488
- * Hidden label for the card action. It overrides the automatically generated accessibility text for the component. Use this prop to provide custom accessibility information for the component.
489
- */
490
- get cardActionLabel() {
491
- return this.#cardActionLabel_accessor_storage;
492
- }
493
- set cardActionLabel(value) {
494
- this.#cardActionLabel_accessor_storage = value;
495
- }
496
- #accessibilityExpanded_accessor_storage;
497
- /** This will be forwarded to the sbb-card component as aria-expanded. */
498
- get accessibilityExpanded() {
499
- return this.#accessibilityExpanded_accessor_storage;
500
- }
501
- set accessibilityExpanded(value) {
502
- this.#accessibilityExpanded_accessor_storage = value;
503
- }
504
- #active_accessor_storage;
505
- /** When this prop is true the sbb-card will be in the active state. */
506
- get active() {
507
- return this.#active_accessor_storage;
508
- }
509
- set active(value) {
510
- this.#active_accessor_storage = value;
511
- }
512
- /**
513
- * A configured date which acts as the current date instead of the real current date.
514
- * Only recommended for testing purposes.
515
- */
516
- set now(value) {
517
- this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
518
- }
519
- get now() {
520
- return this._now ?? /* @__PURE__ */ new Date();
521
- }
522
- willUpdate(changedProperties) {
523
- super.willUpdate(changedProperties);
524
- if (changedProperties.has("loadingTrip")) setOrRemoveAttribute(this, "role", !this.loadingTrip ? "rowgroup" : null);
525
- }
526
- /** The skeleton render function for the loading state */
527
- _renderSkeleton() {
528
- return html`
529
- <sbb-card class="sbb-loading sbb-card-spacing-4x-xxs">
530
- ${this.loadingPrice ? html`<div class="sbb-loading__badge" slot="badge"></div>` : nothing}
531
- <div class="sbb-loading__wrapper">
532
- <div class="sbb-loading__row"></div>
533
- <div class="sbb-loading__row"></div>
534
- <div class="sbb-loading__row"></div>
535
- </div>
536
- </sbb-card>
537
- `;
538
- }
539
- _getRideLegs() {
540
- return this.trip?.legs?.filter((leg) => isRideLeg(leg)) ?? [];
541
- }
542
- _getQuayTypeStrings() {
543
- if (!this.trip.summary?.product) return null;
544
- const rideLegs = this._getRideLegs();
545
- const short = this.trip.summary.product?.vehicleMode === "TRAIN" ? rideLegs[0].serviceJourney.quayTypeShortName || "" : rideLegs[0].serviceJourney.quayTypeName || "";
546
- return {
547
- long: i18nFromPlatform[this._language.current] + " " + short,
548
- short
549
- };
550
- }
551
- /** map Quay */
552
- _renderQuayType() {
553
- if (!this.trip.summary?.product) return void 0;
554
- const quayTypeStrings = this._getQuayTypeStrings();
555
- return html`
556
- <span class="sbb-timetable__row--quay">
557
- <span class="sbb-screen-reader-only">${quayTypeStrings?.long}&nbsp;</span>
558
- <span class="sbb-timetable__row--quay-type" aria-hidden="true"
559
- >${quayTypeStrings?.short}</span
560
- >
561
- </span>
562
- `;
563
- }
564
- _handleHimCus(trip) {
565
- const { situations } = trip || {};
566
- const sortedSituations = situations && sortSituation(situations);
567
- const cus = getCus(trip, this._language.current);
568
- return {
569
- cus: Object.keys(cus)?.length ? cus : null,
570
- him: situations?.length ? getHimIcon(sortedSituations[0]) : null
571
- };
572
- }
573
- _getAccessibilityText(trip) {
574
- const { summary, legs, notices } = trip || {};
575
- const { departureWalk, arrivalWalk, departure, arrival, product, direction, occupancy, duration } = summary || {};
576
- const { departureTimeAttribute, arrivalTimeAttribute } = getDepartureArrivalTimeAttribute(legs, departureWalk || 0, arrivalWalk || 0, this._language.current, this.a11yFootpath);
577
- const rideLegs = this._getRideLegs();
578
- const departureTime = departure?.time ? removeTimezoneFromISOTimeString(departure.time) : void 0;
579
- const arrivalTime = arrival?.time ? removeTimezoneFromISOTimeString(arrival.time) : void 0;
580
- const departureWalkText = departureTimeAttribute ? `${departureTimeAttribute.text} ${departureTimeAttribute.duration}, ` : "";
581
- const arrivalWalkText = arrivalTimeAttribute ? `${arrivalTimeAttribute.text} ${arrivalTimeAttribute.duration}, ` : "";
582
- const departureTimeText = departureTime ? `${i18nDeparture[this._language.current]}: ${format(departureTime, "HH:mm")}, ` : "";
583
- const getDepartureQuayText = () => {
584
- if (!departure?.quayFormatted) return "";
585
- return `${departure?.quayChanged ? `${i18nNew[this._language.current]} ` : ""}${this._getQuayTypeStrings()?.long} ${departure?.quayFormatted}, `;
586
- };
587
- const meansOfTransportText = product && product.vehicleMode ? i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && `${i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}, ` : "";
588
- const vehicleSubModeText = product?.vehicleSubModeShortName ? `${product.vehicleSubModeShortName} ${product.line || ""}, ` : "";
589
- const directionText = `${i18nDirection[this._language.current]} ${direction}, `;
590
- const himCus = this._handleHimCus(trip);
591
- const cusText = himCus?.cus?.text ? `${i18nRealTimeInfo[this._language.current]}: ${himCus?.cus?.text}, ` : "";
592
- const himText = himCus?.him?.text ? `${i18nRealTimeInfo[this._language.current]}: ${himCus?.him?.text}, ` : "";
593
- const boardingText = this.boarding ? `${this.boarding.text}, ` : "";
594
- const priceText = `${this.price?.isDiscount ? i18nSupersaver[this._language.current] : ""} ${this.price?.text && this.price?.price ? (this.price?.text || "") + " " + (this.price?.price || "") + ", " : ""}`;
595
- const transferProcedures = rideLegs.length > 2 ? `${rideLegs.length - 1} ${i18nTransferProcedures[this._language.current]}, ` : rideLegs.length > 1 ? `${rideLegs.length - 1} ${i18nTransferProcedure[this._language.current]}, ` : "";
596
- const arrivalTimeText = arrivalTime ? `${i18nArrival[this._language.current]}: ${format(arrivalTime, "HH:mm")}, ` : "";
597
- let occupancyText = "";
598
- if (occupancy) {
599
- if (occupancy.firstClass && occupancy.firstClass !== "UNKNOWN") occupancyText += `${i18nClass.first[this._language.current]} ${i18nOccupancy[occupancy.firstClass.toLowerCase()]?.[this._language.current]}.`;
600
- if (occupancy.secondClass && occupancy.secondClass !== "UNKNOWN") occupancyText += ` ${i18nClass.second[this._language.current]} ${i18nOccupancy[occupancy.secondClass.toLowerCase()]?.[this._language.current]}.`;
601
- }
602
- const attributes = notices && handleNotices(notices).length && handleNotices(notices)?.map((notice, index) => index < 4 && notice.text?.template).join(", ") + ", ";
603
- const attributesText = attributes ? `${i18nTravelhints[this._language.current]}: ${attributes}` : "";
604
- const durationText = !!duration && duration > 0 ? `${i18nTripDuration[this._language.current]} ${durationToTime(duration, this._language.current).long}, ` : "";
605
- return [
606
- departureWalkText,
607
- departureTimeText,
608
- getDepartureQuayText(),
609
- meansOfTransportText,
610
- vehicleSubModeText,
611
- directionText,
612
- cusText,
613
- boardingText,
614
- priceText,
615
- cusText ? "" : himText,
616
- arrivalTimeText,
617
- arrivalWalkText,
618
- durationText,
619
- transferProcedures,
620
- occupancyText,
621
- attributesText
622
- ].map((e) => e?.trim()).filter((e) => e && e.length > 0).join(" ");
623
- }
624
- render() {
625
- if (this.loadingTrip) return this._renderSkeleton();
626
- const { legs, id, notices, summary } = this.trip || {};
627
- const { product, direction, departureWalk, departure, arrival, arrivalWalk, occupancy, duration } = summary || {};
628
- const himCus = this._handleHimCus(this.trip);
629
- const hasHimCus = !!himCus.cus || !!himCus.him;
630
- const noticeAttributes = notices && handleNotices(notices);
631
- const durationObj = duration ? durationToTime(duration, this._language.current) : null;
632
- return html`
633
- <sbb-card class="sbb-card-spacing-4x-xxs" id=${id}>
634
- <sbb-card-button
635
- ?active=${this.active}
636
- aria-expanded=${this.accessibilityExpanded ? "true" : nothing}
637
- >
638
- ${this.cardActionLabel ? this.cardActionLabel : this._getAccessibilityText(this.trip)}
639
- </sbb-card-button>
640
- ${this.loadingPrice ? html`<div class="sbb-loading__badge" slot="badge"></div>` : nothing}
641
- ${this.price && !this.loadingPrice ? html`<sbb-card-badge color=${this.price.isDiscount ? "charcoal" : "white"}>
642
- ${this.price.isDiscount ? html`<span aria-hidden="true">
643
- %<span class="sbb-screen-reader-only"
644
- >${i18nSupersaver[this._language.current]}</span
645
- >
646
- </span>` : nothing}
647
- ${this.price.text ? html`<span>${this.price.text}</span>` : nothing}
648
- ${this.price.price ? html`<span>${this.price.price}</span>` : nothing}
649
- </sbb-card-badge>` : nothing}
650
- <div class="sbb-timetable__row" role="row">
651
- <div class="sbb-timetable__row-header" role="gridcell">
652
- <div class="sbb-timetable__row-details">
653
- ${product?.corporateIdentityPictogram && html`<span class="sbb-timetable__row-transport-wrapper">
654
- <sbb-icon
655
- class="sbb-timetable__row-transport-icon"
656
- name="picto:${product.corporateIdentityPictogram}"
657
- ></sbb-icon>
658
- <span class="sbb-screen-reader-only">
659
- ${product && product.vehicleMode && i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}
660
- &nbsp;
661
- </span>
662
- </span>`}
663
- ${product && (product.corporateIdentityIcon ? renderIconProduct(product.corporateIdentityIcon, product.name) : product.vehicleSubModeShortName && renderStringProduct(product.vehicleSubModeShortName, product?.line))}
664
- </div>
665
- ${direction ? html`<p>${`${i18nDirection[this._language.current]} ${direction}`}</p>` : nothing}
666
- </div>
667
- <sbb-pearl-chain-time
668
- role="gridcell"
669
- .legs=${legs}
670
- .departureTime=${departure?.time}
671
- .arrivalTime=${arrival?.time}
672
- .departureWalk=${departureWalk}
673
- .arrivalWalk=${arrivalWalk}
674
- ?disable-animation=${this.disableAnimation}
675
- ?a11y-footpath=${this.a11yFootpath}
676
- .now=${this.now}
677
- ></sbb-pearl-chain-time>
678
- <div class="sbb-timetable__row-footer" role="gridcell">
679
- ${product && departure?.quayFormatted ? html`<span
680
- class=${departure?.quayChanged ? `sbb-timetable__row-quay--changed` : nothing}
681
- >
682
- <span class="sbb-screen-reader-only">
683
- ${`${i18nDeparture[this._language.current]} ${departure?.quayChanged ? i18nNew[this._language.current] : ""}`}
684
- &nbsp;
685
- </span>
686
- ${this._renderQuayType()} ${departure?.quayFormatted}
687
- </span>` : nothing}
688
- ${occupancy?.firstClass && occupancy?.firstClass !== "UNKNOWN" || occupancy?.secondClass && occupancy.secondClass !== "UNKNOWN" ? html`<sbb-timetable-occupancy
689
- .firstClassOccupancy=${occupancy?.firstClass?.toLowerCase()}
690
- .secondClassOccupancy=${occupancy?.secondClass?.toLowerCase()}
691
- ></sbb-timetable-occupancy>` : nothing}
692
- ${noticeAttributes && noticeAttributes.length || this.boarding ? html`<ul class="sbb-timetable__row-hints" role="list">
693
- ${noticeAttributes?.map((notice, index) => index < 4 ? html`<li>
694
- <sbb-icon
695
- class="sbb-travel-hints__item"
696
- name=${"sa-" + notice.name?.toLowerCase()}
697
- ></sbb-icon>
698
- <span class="sbb-screen-reader-only">${notice.text?.template}</span>
699
- </li>` : nothing)}
700
- ${this.boarding ? html`<li>
701
- <sbb-icon
702
- class="sbb-travel-hints__item"
703
- name=${this.boarding?.name}
704
- aria-label=${this.boarding?.text}
705
- aria-hidden="false"
706
- ></sbb-icon>
707
- </li>` : nothing}
708
- </ul>` : nothing}
709
- ${duration && duration > 0 ? html`<time>
710
- <span class="sbb-screen-reader-only">
711
- ${`${i18nTripDuration[this._language.current]} ${durationObj.long}`}
712
- </span>
713
- <span aria-hidden="true">${durationObj.short}</span>
714
- </time>` : nothing}
715
- ${hasHimCus && (himCus.cus || himCus.him) ? html`<span class="sbb-timetable__row-warning">
716
- <sbb-icon name=${(himCus.cus || himCus.him).name}></sbb-icon>
717
- <span class="sbb-screen-reader-only">${(himCus.cus || himCus.him).text}</span>
718
- </span>` : nothing}
719
- </div>
720
- </div>
721
- </sbb-card>
722
- `;
723
- }
724
- };
725
- })();
726
- //#endregion
727
- export { handleNotices as a, sortSituation as c, getHimIcon as i, filterNotices as n, renderIconProduct as o, getCus as r, renderStringProduct as s, SbbTimetableRowElement as t };
728
-
729
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLXJvdy5jb21wb25lbnQtRGtvOGxhUlQuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC90aW1ldGFibGUtcm93L3RpbWV0YWJsZS1yb3cuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMtZXhwZXJpbWVudGFsL3RpbWV0YWJsZS1yb3cvdGltZXRhYmxlLXJvdy5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICAtLXNiYi10aW1ldGFibGUtcm93LWdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMngpO1xuICAtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDI1KX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctaGVpZ2h0LWhlYWRlcjogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDIwKX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctaGVpZ2h0LWZvb3RlcjogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDE2KX07XG4gIC0tc2JiLXRpbWV0YWJsZS1yb3ctc2tlbGV0b24tcHVsc2UtZHVyYXRpb246IDE4MDBtcztcblxuICBkaXNwbGF5OiBibG9jaztcbn1cblxuOmhvc3QoW2Rpc2FibGUtYW5pbWF0aW9uXSkge1xuICAtLXNiYi10aW1ldGFibGUtcm93LXNrZWxldG9uLXB1bHNlLWR1cmF0aW9uOiAwO1xufVxuXG4vLyBvdmVycmlkZSBpY29ucyBzaXplc1xuLnNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQtaWNvbiB7XG4gIC0tc2JiLWljb24tc3ZnLXdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbn1cblxuLy8gb3ZlcnJpZGUgaWNvbnMgc2l6ZXNcbi5zYmItdHJhdmVsLWhpbnRzX19pdGVtIHtcbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMTQpfTtcbn1cblxuLnNiYi1zY3JlZW4tcmVhZGVyLW9ubHkge1xuICBAaW5jbHVkZSBzYmIuc2NyZWVuLXJlYWRlci1vbmx5O1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LS1xdWF5IHtcbiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KTtcbn1cblxuLnNiYi10aW1ldGFibGVfX3Jvdy0tcXVheS10eXBlIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi8vIHJlc2V0cyBsaXN0c1xudWwge1xuICBAaW5jbHVkZSBzYmIubGlzdC1yZXNldDtcblxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbn1cblxubGkge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0bnVtYmVyLFxuLnNiYi10aW1ldGFibGVfX3Jvdy10aW1lIHtcbiAgQGluY2x1ZGUgc2JiLnRleHQtcy0tYm9sZDtcblxuICBsaW5lLWhlaWdodDogdW5zZXQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLnNiYi10aW1ldGFibGVfX3JvdyB7XG4gIEBpbmNsdWRlIHNiYi50ZXh0LXMtLXJlZ3VsYXI7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1nYXApO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWhlYWRlcixcbi5zYmItdGltZXRhYmxlX19yb3ctZm9vdGVyIHtcbiAgLy8gRHVlIHRvIGEgYnVnIGluIFNhZmFyaSB3aGljaCBkaXNwbGF5cyBza2VsZXRvbiBhbmltYXRpb24gZXZlbiBvbiBsb2FkZWQgY29udGVudCwgd2UgbmVlZCB0byBtYW51YWxseSBkaXNhYmxlIGFuaW1hdGlvbi5cbiAgYW5pbWF0aW9uOiBub25lO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMngpO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBsaW5lLWhlaWdodDogdmFyKC0tc2JiLXRpbWV0YWJsZS1yb3ctaGVpZ2h0LWhlYWRlcik7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3ctZGV0YWlscyxcbi5zYmItdGltZXRhYmxlX19yb3ctaGludHMge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCk7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3ctaGVhZGVyIHAge1xuICBAaW5jbHVkZSBzYmIuZWxsaXBzaXM7XG5cbiAgbWFyZ2luOiAwO1xuICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi5zYmItdGltZXRhYmxlX19yb3ctZm9vdGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMngpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tc2JiLXRpbWV0YWJsZS1yb3ctaGVpZ2h0LWZvb3Rlcik7XG5cbiAgPiBzcGFuIHtcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gIH1cblxuICA6b25seS1jaGlsZCB7XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogYXV0bztcbiAgfVxufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LXF1YXktLWNoYW5nZWQge1xuICBjb2xvcjogdmFyKC0tc2JiLWNvbG9yLXByaW1hcnkpO1xufVxuXG4uc2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydC13cmFwcGVyLFxuLnNiYi10aW1ldGFibGVfX3Jvdy13YXJuaW5nIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG5cbi5zYmItbG9hZGluZyB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uc2JiLWxvYWRpbmdfX3dyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbn1cblxuLnNiYi1sb2FkaW5nX19yb3cge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2JiLWJvcmRlci1yYWRpdXMtMXgpO1xuICBoZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodCk7XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIGhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDI4KX07XG4gIH1cblxuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgYm9yZGVyOiB2YXIoLS1zYmItYm9yZGVyLXdpZHRoLTF4KSBzb2xpZCBCdXR0b25Cb3JkZXIgIWltcG9ydGFudDtcbiAgfVxufVxuXG4uc2JiLWxvYWRpbmdfX3Jvdyxcbi5zYmItbG9hZGluZ19fYmFkZ2Uge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci00KTtcbiAgYW5pbWF0aW9uOiBza2VsZXRvbi1wdWxzZSB2YXIoLS1zYmItdGltZXRhYmxlLXJvdy1za2VsZXRvbi1wdWxzZS1kdXJhdGlvbikgZWFzZS1vdXQgaW5maW5pdGU7XG59XG5cbi5zYmItbG9hZGluZ19fcm93OmZpcnN0LW9mLXR5cGUge1xuICBoZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1oZWFkZXIpO1xuICB3aWR0aDogNTAlO1xufVxuXG4uc2JiLWxvYWRpbmdfX3JvdzpsYXN0LW9mLXR5cGUge1xuICBoZWlnaHQ6IHZhcigtLXNiYi10aW1ldGFibGUtcm93LWhlaWdodC1mb290ZXIpO1xufVxuXG4uc2JiLWxvYWRpbmdfX2JhZGdlIHtcbiAgbWFyZ2luLWlubGluZTogYXV0byBjYWxjKHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KSAqIC0xKTtcbiAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC02eCk7XG4gIGJvcmRlci1lbmQtc3RhcnQtcmFkaXVzOiB2YXIoLS1zYmItY2FyZC1iYWRnZS1ib3JkZXItcmFkaXVzKTtcbiAgdHJhbnNmb3JtOiB2YXIoLS1zYmItY2FyZC1iYWRnZS1za2V3KTtcbiAgd2lkdGg6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxMTUpfTtcbiAgaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMjApfTtcbn1cblxuQGtleWZyYW1lcyBza2VsZXRvbi1wdWxzZSB7XG4gIDAlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci00KTtcbiAgfVxuXG4gIDE3JSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItNCk7XG4gIH1cblxuICA1MCUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTMpO1xuICB9XG5cbiAgNjclIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0zKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTQpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBTYmJFbGVtZW50IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgZGVmYXVsdERhdGVBZGFwdGVyIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kYXRldGltZS5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgc2V0T3JSZW1vdmVBdHRyaWJ1dGUgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RvbS5qcyc7XG5pbXBvcnQge1xuICBpMThuQXJyaXZhbCxcbiAgaTE4bkNsYXNzLFxuICBpMThuRGVwYXJ0dXJlLFxuICBpMThuRGlyZWN0aW9uLFxuICBpMThuRnJvbVBsYXRmb3JtLFxuICBpMThuTWVhbnNPZlRyYW5zcG9ydCxcbiAgaTE4bk5ldyxcbiAgaTE4bk9jY3VwYW5jeSxcbiAgaTE4blJlYWxUaW1lSW5mbyxcbiAgaTE4blN1cGVyc2F2ZXIsXG4gIGkxOG5UcmFuc2ZlclByb2NlZHVyZSxcbiAgaTE4blRyYW5zZmVyUHJvY2VkdXJlcyxcbiAgaTE4blRyYXZlbGhpbnRzLFxuICBpMThuVHJpcER1cmF0aW9uLFxuICBpMThuVHJpcFF1YXlDaGFuZ2UsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9jY3VwYW5jeSB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvaW50ZXJmYWNlcy5qcyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL3N0eWxlcy5qcyc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQge1xuICBodG1sLFxuICBub3RoaW5nLFxuICB1bnNhZmVDU1MsXG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZHVyYXRpb25Ub1RpbWUsIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcgfSBmcm9tICcuLi9jb3JlL2RhdGV0aW1lLnRzJztcbmltcG9ydCB0eXBlIHsgSVRyaXBJdGVtLCBOb3RpY2UsIFB0UmlkZUxlZywgUHRTaXR1YXRpb24gfSBmcm9tICcuLi9jb3JlL3RpbWV0YWJsZS50cyc7XG5pbXBvcnQgeyBnZXREZXBhcnR1cmVBcnJpdmFsVGltZUF0dHJpYnV0ZSwgaXNSaWRlTGVnIH0gZnJvbSAnLi4vY29yZS90aW1ldGFibGUudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi90aW1ldGFibGUtcm93LnNjc3M/aW5saW5lJztcblxuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jYXJkLmpzJztcbmltcG9ydCAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvaWNvbi5qcyc7XG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3RpbWV0YWJsZS1vY2N1cGFuY3kuanMnO1xuaW1wb3J0ICcuLi9wZWFybC1jaGFpbi10aW1lLnRzJztcblxuLyoqIEhpbUN1cyBpbnRlcmZhY2UgZm9yIG1hcHBlZCBpY29uIG5hbWUgYW5kIHRleHQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGltQ3VzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIEJvYXJkaW5nIGljb24gaW50ZXJmYWNlIGZvciBtYXBwZWQgaWNvbiBuYW1lIGFuZCB0ZXh0ICovXG5leHBvcnQgaW50ZXJmYWNlIEJvYXJkaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2Uge1xuICBwcmljZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgaXNEaXNjb3VudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJJY29uUHJvZHVjdCA9IChpY29uOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVzdWx0ID0+IHtcbiAgcmV0dXJuIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0XCI+XG4gICAgPHNiYi1pY29uIG5hbWU9JHtpY29ufT48L3NiYi1pY29uPlxuICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bmFtZX08L3NwYW4+XG4gIDwvc3Bhbj5gO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclN0cmluZ1Byb2R1Y3QgPSAodmVoaWNsZU5hbWU6IHN0cmluZywgbGluZT86IHN0cmluZyB8IG51bGwpOiBUZW1wbGF0ZVJlc3VsdCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWydNJywgJ0InLCAnVCddLmluY2x1ZGVzKHZlaGljbGVOYW1lKSA/ICcgJyA6ICcnO1xuICByZXR1cm4gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnRudW1iZXJcIj5cbiAgICAke2xpbmUgIT09IG51bGwgPyB2ZWhpY2xlTmFtZSArIHNwYWNlICsgbGluZSA6IHZlaGljbGVOYW1lfVxuICA8L3NwYW4+YDtcbn07XG5cbmNvbnN0IGdldFJlYWNoYWJsZVRleHQgPSAobGVnczogUHRSaWRlTGVnW10pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIGxlZ3M/LmZpbmQoKGxlZykgPT4gbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVhY2hhYmxlVGV4dCk/LnNlcnZpY2VKb3VybmV5XG4gICAgPy5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVhY2hhYmxlVGV4dDtcbn07XG5cbmNvbnN0IGdldERlbGF5VGV4dCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiBsZWcuc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5kZWxheVRleHQpPy5zZXJ2aWNlSm91cm5leVxuICAgID8uc2VydmljZUFsdGVyYXRpb24/LmRlbGF5VGV4dDtcbn07XG5cbmNvbnN0IGdldFJlZGlyZWN0ZWRUZXh0ID0gKGxlZ3M6IFB0UmlkZUxlZ1tdKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBsZWdzPy5maW5kKChsZWcpID0+ICEhbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVkaXJlY3RlZFRleHQpXG4gICAgPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnJlZGlyZWN0ZWRUZXh0O1xufTtcblxuY29uc3QgZ2V0VW5wbGFubmVkU3RvcCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiAhIWxlZy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnVucGxhbm5lZFN0b3BQb2ludHNUZXh0KVxuICAgID8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy51bnBsYW5uZWRTdG9wUG9pbnRzVGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0U2l0dWF0aW9uID0gKHNpdHVhdGlvbnM6IFB0U2l0dWF0aW9uW10pOiBQdFNpdHVhdGlvbltdID0+IHtcbiAgY29uc3QgcHJpb3JpdGllcyA9IHtcbiAgICBESVNUVVJCQU5DRTogMCxcbiAgICBJTkZPUk1BVElPTjogMSxcbiAgICBERUxBWTogMixcbiAgICBUUkFJTl9SRVBMQUNFTUVOVF9CWV9CVVM6IDMsXG4gICAgQ09OU1RSVUNUSU9OX1NJVEU6IDQsXG4gICAgRU5EX01FU1NBR0U6IDUsXG4gIH07XG5cbiAgcmV0dXJuIFsuLi5zaXR1YXRpb25zXT8uc29ydChcbiAgICAoYTogUHRTaXR1YXRpb24sIGI6IFB0U2l0dWF0aW9uKSA9PiBwcmlvcml0aWVzW2EuY2F1c2UhXSAtIHByaW9yaXRpZXNbYi5jYXVzZSFdLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpbUljb24gPSAoc2l0dWF0aW9uOiBQdFNpdHVhdGlvbik6IEhpbUN1cyA9PiB7XG4gIHN3aXRjaCAoc2l0dWF0aW9uPy5jYXVzZSkge1xuICAgIGNhc2UgJ0RJU1RVUkJBTkNFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdkaXNydXB0aW9uJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcz8ubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdJTkZPUk1BVElPTic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnaW5mbycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdERUxBWSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnZGVsYXknLFxuICAgICAgICB0ZXh0OiBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzLmxlbmd0aCA/IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXNbMF0udGl0bGUgOiAnJyxcbiAgICAgIH07XG4gICAgY2FzZSAnVFJBSU5fUkVQTEFDRU1FTlRfQllfQlVTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdyZXBsYWNlbWVudGJ1cycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdDT05TVFJVQ1RJT05fU0lURSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnY29uc3RydWN0aW9uJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcy5sZW5ndGggPyBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnRpdGxlIDogJycsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnaW5mbycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cyA9ICh0cmlwOiBJVHJpcEl0ZW0sIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nKTogSGltQ3VzID0+IHtcbiAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzIH0gPSB0cmlwIHx8IHt9O1xuICBjb25zdCByaWRlTGVncyA9IGxlZ3M/LmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSkgYXMgUHRSaWRlTGVnW107XG4gIGNvbnN0IHsgdHJpcFN0YXR1cyB9ID0gc3VtbWFyeSB8fCB7fTtcblxuICBpZiAodHJpcFN0YXR1cz8uY2FuY2VsbGVkIHx8IHRyaXBTdGF0dXM/LnBhcnRpYWxseUNhbmNlbGxlZClcbiAgICByZXR1cm4geyBuYW1lOiAnY2FuY2VsbGF0aW9uJywgdGV4dDogdHJpcFN0YXR1cz8uY2FuY2VsbGVkVGV4dCB9O1xuICBpZiAoZ2V0UmVhY2hhYmxlVGV4dChyaWRlTGVncykpXG4gICAgcmV0dXJuIHsgbmFtZTogJ21pc3NlZC1jb25uZWN0aW9uJywgdGV4dDogZ2V0UmVhY2hhYmxlVGV4dChyaWRlTGVncykgfTtcbiAgaWYgKHRyaXBTdGF0dXM/LmFsdGVybmF0aXZlKSByZXR1cm4geyBuYW1lOiAnYWx0ZXJuYXRpdmUnLCB0ZXh0OiB0cmlwU3RhdHVzLmFsdGVybmF0aXZlVGV4dCB9O1xuICBpZiAoZ2V0UmVkaXJlY3RlZFRleHQocmlkZUxlZ3MpKSByZXR1cm4geyBuYW1lOiAncmVyb3V0ZScsIHRleHQ6IGdldFJlZGlyZWN0ZWRUZXh0KHJpZGVMZWdzKSB9O1xuICBpZiAoZ2V0VW5wbGFubmVkU3RvcChyaWRlTGVncykpIHJldHVybiB7IG5hbWU6ICdhZGQtc3RvcCcsIHRleHQ6IGdldFVucGxhbm5lZFN0b3AocmlkZUxlZ3MpIH07XG4gIGlmICh0cmlwU3RhdHVzPy5kZWxheWVkIHx8IHRyaXBTdGF0dXM/LmRlbGF5ZWRVbmtub3duKVxuICAgIHJldHVybiB7IG5hbWU6ICdkZWxheScsIHRleHQ6IGdldERlbGF5VGV4dChyaWRlTGVncykgfTtcbiAgaWYgKHRyaXBTdGF0dXM/LnF1YXlDaGFuZ2VkKSB7XG4gICAgY29uc3QgZGVwYXJ0dXJlID0gcmlkZUxlZ3NbMF0uZGVwYXJ0dXJlO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAncGxhdGZvcm0tY2hhbmdlJyxcbiAgICAgIHRleHQ6IGRlcGFydHVyZS5xdWF5Q2hhbmdlZCA/IGRlcGFydHVyZS5xdWF5Q2hhbmdlZFRleHQgOiBpMThuVHJpcFF1YXlDaGFuZ2VbY3VycmVudExhbmd1YWdlXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHt9IGFzIEhpbUN1cztcbn07XG5cbmNvbnN0IGZpbmRBbmRSZXBsYWNlTm90aWNlID0gKG5vdGljZXM6IE5vdGljZVtdKTogTm90aWNlIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmVzZXJ2YXRpb25Ob3RpY2UgPSBbJ1JSJywgJ1JLJywgJ1JDJywgJ1JMJywgJ1JNJywgJ1JTJywgJ1JVJywgJ1hQJywgJ1hSJywgJ1hUJ107XG5cbiAgcmV0dXJuIG5vdGljZXMucmVkdWNlKChmb3VuZE5vdGljZTogTm90aWNlIHwgdW5kZWZpbmVkLCBub3RpY2U6IE5vdGljZSk6IE5vdGljZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKGZvdW5kTm90aWNlKSByZXR1cm4gZm91bmROb3RpY2U7XG4gICAgaWYgKHJlc2VydmF0aW9uTm90aWNlLmluY2x1ZGVzKG5vdGljZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIHsgLi4ubm90aWNlLCBuYW1lOiAnUlInIH0gYXMgTm90aWNlO1xuICAgIH1cbiAgfSwgdW5kZWZpbmVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJOb3RpY2VzID0gKG5vdGljZXM6IE5vdGljZVtdKTogTm90aWNlW10gPT4ge1xuICBjb25zdCBhbGxvd2VkTmFtZXMgPSBbJ1onLCAnU0InLCAnU1onLCAnVlInLCAnVEcnXTtcblxuICBjb25zdCBmaWx0ZXJOb3RpY2UgPSBub3RpY2VzLmZpbHRlcigobm90aWNlLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBub3RpY2VzLmZpbmRJbmRleCgobikgPT4gbi5uYW1lID09PSBub3RpY2UubmFtZSkgPT09IGluZGV4O1xuICB9KTtcblxuICByZXR1cm4gZmlsdGVyTm90aWNlXG4gICAgLmZpbHRlcigobm90aWNlKSA9PiBhbGxvd2VkTmFtZXMuaW5jbHVkZXMobm90aWNlLm5hbWUpKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhbGxvd2VkTmFtZXMuaW5kZXhPZihhLm5hbWUpIC0gYWxsb3dlZE5hbWVzLmluZGV4T2YoYi5uYW1lKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlTm90aWNlcyA9IChub3RpY2VzOiBOb3RpY2VbXSk6IE5vdGljZVtdID0+IHtcbiAgY29uc3QgcmVzZXJ2YXRpb25Ob3RpY2UgPSBmaW5kQW5kUmVwbGFjZU5vdGljZShub3RpY2VzKTtcbiAgY29uc3QgZmlsdGVyZWROb3RpY2VzID0gZmlsdGVyTm90aWNlcyhub3RpY2VzKTtcblxuICBpZiAocmVzZXJ2YXRpb25Ob3RpY2UgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpbHRlcmVkTm90aWNlcztcbiAgaWYgKCFmaWx0ZXJlZE5vdGljZXMubGVuZ3RoKSByZXR1cm4gW3Jlc2VydmF0aW9uTm90aWNlXTtcblxuICBpZiAoZmlsdGVyZWROb3RpY2VzWzBdLm5hbWUgPT09ICdaJyAmJiBmaWx0ZXJlZE5vdGljZXNbMV0pIHtcbiAgICByZXR1cm4gW2ZpbHRlcmVkTm90aWNlc1swXSwgcmVzZXJ2YXRpb25Ob3RpY2UsIGZpbHRlcmVkTm90aWNlc1sxXV0uY29uY2F0KFxuICAgICAgZmlsdGVyZWROb3RpY2VzLnNsaWNlKDIpLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gW3Jlc2VydmF0aW9uTm90aWNlLCAuLi5maWx0ZXJlZE5vdGljZXNdO1xufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJpcCwgYWN0aW5nIGFzIGEgY29udGFpbmVyIGZvciBhbGwgdGhlIGBzYmItdGltZXRhYmxlLSpgIGNvbXBvbmVudHMuXG4gKiAqL1xuZXhwb3J0IGNsYXNzIFNiYlRpbWV0YWJsZVJvd0VsZW1lbnQgZXh0ZW5kcyBTYmJFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi10aW1ldGFibGUtcm93JztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgLyoqIFRoZSB0cmlwIFByb3AuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgdHJpcDogSVRyaXBJdGVtID0gbnVsbCE7XG5cbiAgLyoqIFRoZSBwcmljZSBQcm9wLCB3aGljaCBjb25zaXN0cyBvZiB0aGUgZGF0YSBmb3IgdGhlIGJhZGdlLiAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBPYmplY3QgfSkgcHVibGljIGFjY2Vzc29yIHByaWNlOiBQcmljZSA9IG51bGwhO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSBzYmItcGVhcmwtY2hhaW4gY29tcG9uZW50IC0gaWYgdHJ1ZSB0aGUgcG9zaXRpb24gd29uJ3QgYmUgYW5pbWF0ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkaXNhYmxlLWFuaW1hdGlvbicsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGRpc2FibGVBbmltYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgbm90aWNlcyBzZWN0aW9uICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgYm9hcmRpbmc6IEJvYXJkaW5nID0gbnVsbCE7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkaW5nIHN0YXRlIC1cbiAgICogd2hlbiB0aGlzIGlzIHRydWUgaXQgd2lsbCBiZSByZW5kZXIgc2tlbGV0b24gd2l0aCBhbiBpZGxpbmcgYW5pbWF0aW9uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbG9hZGluZy10cmlwJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbG9hZGluZ1RyaXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIEZvb3RwYXRoIGF0dHJpYnV0ZSBmb3IgcmVuZGVyaW5nIGRpZmZlcmVudCBpY29uc1xuICAgKiB0cnVlOiByZW5kZXIgYTExeS1pY29uXG4gICAqIGZhbHNlOiByZW5kZXIgd2Fsay1pY29uXG4gICAqIGRlZmF1bHQ6IHJlbmRlciB3YWxrLWljb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhMTF5LWZvb3RwYXRoJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYTExeUZvb3RwYXRoOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkaW5nIHN0YXRlIC1cbiAgICogd2hlbiB0aGlzIGlzIHRydWUgaXQgd2lsbCBiZSByZW5kZXIgc2tlbGV0b24gd2l0aCBhbiBpZGxpbmcgYW5pbWF0aW9uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbG9hZGluZy1wcmljZScsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGxvYWRpbmdQcmljZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbGFiZWwgZm9yIHRoZSBjYXJkIGFjdGlvbi4gSXQgb3ZlcnJpZGVzIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhY2Nlc3NpYmlsaXR5IHRleHQgZm9yIHRoZSBjb21wb25lbnQuIFVzZSB0aGlzIHByb3AgdG8gcHJvdmlkZSBjdXN0b20gYWNjZXNzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjYXJkLWFjdGlvbi1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGNhcmRBY3Rpb25MYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIHNiYi1jYXJkIGNvbXBvbmVudCBhcyBhcmlhLWV4cGFuZGVkLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1leHBhbmRlZCcsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGVuIHRoaXMgcHJvcCBpcyB0cnVlIHRoZSBzYmItY2FyZCB3aWxsIGJlIGluIHRoZSBhY3RpdmUgc3RhdGUuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBjb25maWd1cmVkIGRhdGUgd2hpY2ggYWN0cyBhcyB0aGUgY3VycmVudCBkYXRlIGluc3RlYWQgb2YgdGhlIHJlYWwgY3VycmVudCBkYXRlLlxuICAgKiBPbmx5IHJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbm93ID0gZGVmYXVsdERhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChkZWZhdWx0RGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5vdygpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbm93ID8/IG5ldyBEYXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfbm93OiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbG9hZGluZ1RyaXAnKSkge1xuICAgICAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUodGhpcywgJ3JvbGUnLCAhdGhpcy5sb2FkaW5nVHJpcCA/ICdyb3dncm91cCcgOiBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIHNrZWxldG9uIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIGxvYWRpbmcgc3RhdGUgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyU2tlbGV0b24oKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1jYXJkIGNsYXNzPVwic2JiLWxvYWRpbmcgc2JiLWNhcmQtc3BhY2luZy00eC14eHNcIj5cbiAgICAgICAgJHt0aGlzLmxvYWRpbmdQcmljZSA/IGh0bWxgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19iYWRnZVwiIHNsb3Q9XCJiYWRnZVwiPjwvZGl2PmAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3dyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3Jvd1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbG9hZGluZ19fcm93XCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19yb3dcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NiYi1jYXJkPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSaWRlTGVncygpOiBQdFJpZGVMZWdbXSB7XG4gICAgcmV0dXJuIHRoaXMudHJpcD8ubGVncz8uZmlsdGVyKChsZWcpID0+IGlzUmlkZUxlZyhsZWcpKSA/PyBbXTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFF1YXlUeXBlU3RyaW5ncygpOiB7IGxvbmc6IHN0cmluZzsgc2hvcnQ6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnRyaXAuc3VtbWFyeT8ucHJvZHVjdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmlkZUxlZ3MgPSB0aGlzLl9nZXRSaWRlTGVncygpO1xuICAgIGNvbnN0IGlzU2hvcnQgPSB0aGlzLnRyaXAuc3VtbWFyeS5wcm9kdWN0Py52ZWhpY2xlTW9kZSA9PT0gJ1RSQUlOJztcbiAgICBjb25zdCBzaG9ydCA9IGlzU2hvcnRcbiAgICAgID8gcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVTaG9ydE5hbWUgfHwgJydcbiAgICAgIDogcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVOYW1lIHx8ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbmc6IGkxOG5Gcm9tUGxhdGZvcm1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gKyAnICcgKyBzaG9ydCxcbiAgICAgIHNob3J0LFxuICAgIH07XG4gIH1cblxuICAvKiogbWFwIFF1YXkgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyUXVheVR5cGUoKTogVGVtcGxhdGVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy50cmlwLnN1bW1hcnk/LnByb2R1Y3QpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcXVheVR5cGVTdHJpbmdzID0gdGhpcy5fZ2V0UXVheVR5cGVTdHJpbmdzKCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy0tcXVheVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke3F1YXlUeXBlU3RyaW5ncz8ubG9uZ30mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LS1xdWF5LXR5cGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID4ke3F1YXlUeXBlU3RyaW5ncz8uc2hvcnR9PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSGltQ3VzKHRyaXA6IElUcmlwSXRlbSk6IHsgY3VzOiBIaW1DdXMgfCBudWxsOyBoaW06IEhpbUN1cyB8IG51bGwgfSB7XG4gICAgY29uc3QgeyBzaXR1YXRpb25zIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHNvcnRlZFNpdHVhdGlvbnMgPSBzaXR1YXRpb25zICYmIHNvcnRTaXR1YXRpb24oc2l0dWF0aW9ucyk7XG4gICAgY29uc3QgY3VzID0gZ2V0Q3VzKHRyaXAsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1czogT2JqZWN0LmtleXMoY3VzKT8ubGVuZ3RoID8gY3VzIDogbnVsbCxcbiAgICAgIGhpbTogc2l0dWF0aW9ucz8ubGVuZ3RoID8gZ2V0SGltSWNvbihzb3J0ZWRTaXR1YXRpb25zWzBdKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRyaXA6IElUcmlwSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzLCBub3RpY2VzIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBhcnJpdmFsV2FsayxcbiAgICAgIGRlcGFydHVyZSxcbiAgICAgIGFycml2YWwsXG4gICAgICBwcm9kdWN0LFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgb2NjdXBhbmN5LFxuICAgICAgZHVyYXRpb24sXG4gICAgfSA9IHN1bW1hcnkgfHwge307XG5cbiAgICBjb25zdCB7IGRlcGFydHVyZVRpbWVBdHRyaWJ1dGUsIGFycml2YWxUaW1lQXR0cmlidXRlIH0gPSBnZXREZXBhcnR1cmVBcnJpdmFsVGltZUF0dHJpYnV0ZShcbiAgICAgIGxlZ3MsXG4gICAgICBkZXBhcnR1cmVXYWxrIHx8IDAsXG4gICAgICBhcnJpdmFsV2FsayB8fCAwLFxuICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgIHRoaXMuYTExeUZvb3RwYXRoLFxuICAgICk7XG5cbiAgICBjb25zdCByaWRlTGVncyA9IHRoaXMuX2dldFJpZGVMZWdzKCk7XG5cbiAgICBjb25zdCBkZXBhcnR1cmVUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gZGVwYXJ0dXJlPy50aW1lXG4gICAgICA/IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcoZGVwYXJ0dXJlLnRpbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFycml2YWxUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gYXJyaXZhbD8udGltZVxuICAgICAgPyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGFycml2YWwudGltZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlV2Fsa1RleHQgPSBkZXBhcnR1cmVUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2RlcGFydHVyZVRpbWVBdHRyaWJ1dGUudGV4dH0gJHtkZXBhcnR1cmVUaW1lQXR0cmlidXRlLmR1cmF0aW9ufSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGFycml2YWxXYWxrVGV4dCA9IGFycml2YWxUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2Fycml2YWxUaW1lQXR0cmlidXRlLnRleHR9ICR7YXJyaXZhbFRpbWVBdHRyaWJ1dGUuZHVyYXRpb259LCBgXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlVGltZVRleHQgPSBkZXBhcnR1cmVUaW1lXG4gICAgICA/IGAke2kxOG5EZXBhcnR1cmVbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChkZXBhcnR1cmVUaW1lLCAnSEg6bW0nKX0sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBnZXREZXBhcnR1cmVRdWF5VGV4dCA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCFkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgcHJlZml4IFwibmV3XCIgaWYgcXVheSB3YXMgY2hhbmdlZFxuICAgICAgY29uc3QgY2hhbmdlZFF1YXlQcmVmaXggPSBkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gYCR7aTE4bk5ld1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gYCA6ICcnO1xuICAgICAgcmV0dXJuIGAke2NoYW5nZWRRdWF5UHJlZml4fSR7XG4gICAgICAgIHRoaXMuX2dldFF1YXlUeXBlU3RyaW5ncygpPy5sb25nXG4gICAgICB9ICR7ZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkfSwgYDtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVhbnNPZlRyYW5zcG9ydFRleHQgPVxuICAgICAgcHJvZHVjdCAmJiBwcm9kdWN0LnZlaGljbGVNb2RlXG4gICAgICAgID8gaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXSAmJlxuICAgICAgICAgIGAke2kxOG5NZWFuc09mVHJhbnNwb3J0W3Byb2R1Y3QudmVoaWNsZU1vZGUudG9Mb3dlckNhc2UoKV1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZWhpY2xlU3ViTW9kZVRleHQgPSBwcm9kdWN0Py52ZWhpY2xlU3ViTW9kZVNob3J0TmFtZVxuICAgICAgPyBgJHtwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lfSAke3Byb2R1Y3QubGluZSB8fCAnJ30sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkaXJlY3Rpb25UZXh0ID0gYCR7aTE4bkRpcmVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkaXJlY3Rpb259LCBgO1xuXG4gICAgY29uc3QgaGltQ3VzID0gdGhpcy5faGFuZGxlSGltQ3VzKHRyaXApO1xuICAgIGNvbnN0IGN1c1RleHQgPSBoaW1DdXM/LmN1cz8udGV4dFxuICAgICAgPyBgJHtpMThuUmVhbFRpbWVJbmZvW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHtoaW1DdXM/LmN1cz8udGV4dH0sIGBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaGltVGV4dCA9IGhpbUN1cz8uaGltPy50ZXh0XG4gICAgICA/IGAke2kxOG5SZWFsVGltZUluZm9bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2hpbUN1cz8uaGltPy50ZXh0fSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGJvYXJkaW5nVGV4dCA9IHRoaXMuYm9hcmRpbmcgPyBgJHt0aGlzLmJvYXJkaW5nLnRleHR9LCBgIDogJyc7XG5cbiAgICBjb25zdCBwcmljZVRleHQgPSBgJHt0aGlzLnByaWNlPy5pc0Rpc2NvdW50ID8gaTE4blN1cGVyc2F2ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gOiAnJ30gJHtcbiAgICAgIHRoaXMucHJpY2U/LnRleHQgJiYgdGhpcy5wcmljZT8ucHJpY2VcbiAgICAgICAgPyAodGhpcy5wcmljZT8udGV4dCB8fCAnJykgKyAnICcgKyAodGhpcy5wcmljZT8ucHJpY2UgfHwgJycpICsgJywgJ1xuICAgICAgICA6ICcnXG4gICAgfWA7XG5cbiAgICBjb25zdCB0cmFuc2ZlclByb2NlZHVyZXMgPVxuICAgICAgcmlkZUxlZ3MubGVuZ3RoID4gMlxuICAgICAgICA/IGAke3JpZGVMZWdzLmxlbmd0aCAtIDF9ICR7aTE4blRyYW5zZmVyUHJvY2VkdXJlc1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgOiByaWRlTGVncy5sZW5ndGggPiAxXG4gICAgICAgICAgPyBgJHtyaWRlTGVncy5sZW5ndGggLSAxfSAke2kxOG5UcmFuc2ZlclByb2NlZHVyZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgICA6ICcnO1xuXG4gICAgY29uc3QgYXJyaXZhbFRpbWVUZXh0ID0gYXJyaXZhbFRpbWVcbiAgICAgID8gYCR7aTE4bkFycml2YWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChhcnJpdmFsVGltZSwgJ0hIOm1tJyl9LCBgXG4gICAgICA6ICcnO1xuXG4gICAgbGV0IG9jY3VwYW5jeVRleHQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChvY2N1cGFuY3kpIHtcbiAgICAgIGlmIChvY2N1cGFuY3kuZmlyc3RDbGFzcyAmJiBvY2N1cGFuY3kuZmlyc3RDbGFzcyAhPT0gJ1VOS05PV04nKSB7XG4gICAgICAgIG9jY3VwYW5jeVRleHQgKz0gYCR7aTE4bkNsYXNzLmZpcnN0W3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LmZpcnN0Q2xhc3MudG9Mb3dlckNhc2UoKSBhcyBTYmJPY2N1cGFuY3ldIGFzIFJlY29yZDxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICAgID5cbiAgICAgICAgICApPy5bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgICAgfS5gO1xuICAgICAgfVxuICAgICAgaWYgKG9jY3VwYW5jeS5zZWNvbmRDbGFzcyAmJiBvY2N1cGFuY3kuc2Vjb25kQ2xhc3MgIT09ICdVTktOT1dOJykge1xuICAgICAgICBvY2N1cGFuY3lUZXh0ICs9IGAgJHtpMThuQ2xhc3Muc2Vjb25kW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LnNlY29uZENsYXNzLnRvTG93ZXJDYXNlKCkgYXMgU2JiT2NjdXBhbmN5XSBhcyBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgICA+XG4gICAgICAgICAgKT8uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdXG4gICAgICAgIH0uYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID1cbiAgICAgIG5vdGljZXMgJiZcbiAgICAgIGhhbmRsZU5vdGljZXMobm90aWNlcykubGVuZ3RoICYmXG4gICAgICBoYW5kbGVOb3RpY2VzKG5vdGljZXMpXG4gICAgICAgID8ubWFwKChub3RpY2UsIGluZGV4KSA9PiBpbmRleCA8IDQgJiYgbm90aWNlLnRleHQ/LnRlbXBsYXRlKVxuICAgICAgICAuam9pbignLCAnKSArICcsICc7XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzVGV4dCA9IGF0dHJpYnV0ZXNcbiAgICAgID8gYCR7aTE4blRyYXZlbGhpbnRzW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHthdHRyaWJ1dGVzfWBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkdXJhdGlvblRleHQgPVxuICAgICAgISFkdXJhdGlvbiAmJiBkdXJhdGlvbiA+IDBcbiAgICAgICAgPyBgJHtpMThuVHJpcER1cmF0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgICAgZHVyYXRpb25Ub1RpbWUoZHVyYXRpb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpLmxvbmdcbiAgICAgICAgICB9LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgZGVwYXJ0dXJlV2Fsa1RleHQsXG4gICAgICBkZXBhcnR1cmVUaW1lVGV4dCxcbiAgICAgIGdldERlcGFydHVyZVF1YXlUZXh0KCksXG4gICAgICBtZWFuc09mVHJhbnNwb3J0VGV4dCxcbiAgICAgIHZlaGljbGVTdWJNb2RlVGV4dCxcbiAgICAgIGRpcmVjdGlvblRleHQsXG4gICAgICBjdXNUZXh0LFxuICAgICAgYm9hcmRpbmdUZXh0LFxuICAgICAgcHJpY2VUZXh0LFxuICAgICAgY3VzVGV4dCA/ICcnIDogaGltVGV4dCxcbiAgICAgIGFycml2YWxUaW1lVGV4dCxcbiAgICAgIGFycml2YWxXYWxrVGV4dCxcbiAgICAgIGR1cmF0aW9uVGV4dCxcbiAgICAgIHRyYW5zZmVyUHJvY2VkdXJlcyxcbiAgICAgIG9jY3VwYW5jeVRleHQsXG4gICAgICBhdHRyaWJ1dGVzVGV4dCxcbiAgICBdXG4gICAgICAubWFwKChlKSA9PiBlPy50cmltKCkpXG4gICAgICAuZmlsdGVyKChlKSA9PiBlICYmIGUubGVuZ3RoID4gMClcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nVHJpcCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclNrZWxldG9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBsZWdzLCBpZCwgbm90aWNlcywgc3VtbWFyeSB9ID0gdGhpcy50cmlwIHx8IHt9O1xuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdCxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBkZXBhcnR1cmUsXG4gICAgICBhcnJpdmFsLFxuICAgICAgYXJyaXZhbFdhbGssXG4gICAgICBvY2N1cGFuY3ksXG4gICAgICBkdXJhdGlvbixcbiAgICB9ID0gc3VtbWFyeSB8fCB7fTtcblxuICAgIGNvbnN0IGhpbUN1cyA9IHRoaXMuX2hhbmRsZUhpbUN1cyh0aGlzLnRyaXApO1xuICAgIGNvbnN0IGhhc0hpbUN1cyA9ICEhaGltQ3VzLmN1cyB8fCAhIWhpbUN1cy5oaW07XG5cbiAgICBjb25zdCBub3RpY2VBdHRyaWJ1dGVzID0gbm90aWNlcyAmJiBoYW5kbGVOb3RpY2VzKG5vdGljZXMpO1xuXG4gICAgY29uc3QgZHVyYXRpb25PYmogPSBkdXJhdGlvbiA/IGR1cmF0aW9uVG9UaW1lKGR1cmF0aW9uLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KSA6IG51bGw7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItY2FyZCBjbGFzcz1cInNiYi1jYXJkLXNwYWNpbmctNHgteHhzXCIgaWQ9JHtpZH0+XG4gICAgICAgIDxzYmItY2FyZC1idXR0b25cbiAgICAgICAgICA/YWN0aXZlPSR7dGhpcy5hY3RpdmV9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD0ke3RoaXMuYWNjZXNzaWJpbGl0eUV4cGFuZGVkID8gJ3RydWUnIDogbm90aGluZ31cbiAgICAgICAgPlxuICAgICAgICAgICR7dGhpcy5jYXJkQWN0aW9uTGFiZWwgPyB0aGlzLmNhcmRBY3Rpb25MYWJlbCA6IHRoaXMuX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRoaXMudHJpcCl9XG4gICAgICAgIDwvc2JiLWNhcmQtYnV0dG9uPlxuICAgICAgICAke3RoaXMubG9hZGluZ1ByaWNlID8gaHRtbGA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX2JhZGdlXCIgc2xvdD1cImJhZGdlXCI+PC9kaXY+YCA6IG5vdGhpbmd9XG4gICAgICAgICR7dGhpcy5wcmljZSAmJiAhdGhpcy5sb2FkaW5nUHJpY2VcbiAgICAgICAgICA/IGh0bWxgPHNiYi1jYXJkLWJhZGdlIGNvbG9yPSR7dGhpcy5wcmljZS5pc0Rpc2NvdW50ID8gJ2NoYXJjb2FsJyA6ICd3aGl0ZSd9PlxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UuaXNEaXNjb3VudFxuICAgICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgJTxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgPiR7aTE4blN1cGVyc2F2ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UudGV4dCA/IGh0bWxgPHNwYW4+JHt0aGlzLnByaWNlLnRleHR9PC9zcGFuPmAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAke3RoaXMucHJpY2UucHJpY2UgPyBodG1sYDxzcGFuPiR7dGhpcy5wcmljZS5wcmljZX08L3NwYW4+YCA6IG5vdGhpbmd9XG4gICAgICAgICAgICA8L3NiYi1jYXJkLWJhZGdlPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3dcIiByb2xlPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy1oZWFkZXJcIiByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAke3Byb2R1Y3Q/LmNvcnBvcmF0ZUlkZW50aXR5UGljdG9ncmFtICYmXG4gICAgICAgICAgICAgIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LXRyYW5zcG9ydC1pY29uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJwaWN0bzoke3Byb2R1Y3QuY29ycG9yYXRlSWRlbnRpdHlQaWN0b2dyYW19XCJcbiAgICAgICAgICAgICAgICA+PC9zYmItaWNvbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICR7cHJvZHVjdCAmJlxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC52ZWhpY2xlTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXSAmJlxuICAgICAgICAgICAgICAgICAgaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPmB9XG4gICAgICAgICAgICAgICR7cHJvZHVjdCAmJlxuICAgICAgICAgICAgICAocHJvZHVjdC5jb3Jwb3JhdGVJZGVudGl0eUljb25cbiAgICAgICAgICAgICAgICA/IHJlbmRlckljb25Qcm9kdWN0KHByb2R1Y3QuY29ycG9yYXRlSWRlbnRpdHlJY29uLCBwcm9kdWN0Lm5hbWUpXG4gICAgICAgICAgICAgICAgOiBwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lICYmXG4gICAgICAgICAgICAgICAgICByZW5kZXJTdHJpbmdQcm9kdWN0KHByb2R1Y3QudmVoaWNsZVN1Yk1vZGVTaG9ydE5hbWUsIHByb2R1Y3Q/LmxpbmUpKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgJHtkaXJlY3Rpb25cbiAgICAgICAgICAgICAgPyBodG1sYDxwPiR7YCR7aTE4bkRpcmVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkaXJlY3Rpb259YH08L3A+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNiYi1wZWFybC1jaGFpbi10aW1lXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgLmxlZ3M9JHtsZWdzfVxuICAgICAgICAgICAgLmRlcGFydHVyZVRpbWU9JHtkZXBhcnR1cmU/LnRpbWV9XG4gICAgICAgICAgICAuYXJyaXZhbFRpbWU9JHthcnJpdmFsPy50aW1lfVxuICAgICAgICAgICAgLmRlcGFydHVyZVdhbGs9JHtkZXBhcnR1cmVXYWxrfVxuICAgICAgICAgICAgLmFycml2YWxXYWxrPSR7YXJyaXZhbFdhbGt9XG4gICAgICAgICAgICA/ZGlzYWJsZS1hbmltYXRpb249JHt0aGlzLmRpc2FibGVBbmltYXRpb259XG4gICAgICAgICAgICA/YTExeS1mb290cGF0aD0ke3RoaXMuYTExeUZvb3RwYXRofVxuICAgICAgICAgICAgLm5vdz0ke3RoaXMubm93fVxuICAgICAgICAgID48L3NiYi1wZWFybC1jaGFpbi10aW1lPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctZm9vdGVyXCIgcm9sZT1cImdyaWRjZWxsXCI+XG4gICAgICAgICAgICAke3Byb2R1Y3QgJiYgZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkXG4gICAgICAgICAgICAgID8gaHRtbGA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9JHtkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gYHNiYi10aW1ldGFibGVfX3Jvdy1xdWF5LS1jaGFuZ2VkYCA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICR7YCR7aTE4bkRlcGFydHVyZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gaTE4bk5ld1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5fcmVuZGVyUXVheVR5cGUoKX0gJHtkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWR9XG4gICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHsob2NjdXBhbmN5Py5maXJzdENsYXNzICYmIG9jY3VwYW5jeT8uZmlyc3RDbGFzcyAhPT0gJ1VOS05PV04nKSB8fFxuICAgICAgICAgICAgKG9jY3VwYW5jeT8uc2Vjb25kQ2xhc3MgJiYgb2NjdXBhbmN5LnNlY29uZENsYXNzICE9PSAnVU5LTk9XTicpXG4gICAgICAgICAgICAgID8gaHRtbGA8c2JiLXRpbWV0YWJsZS1vY2N1cGFuY3lcbiAgICAgICAgICAgICAgICAgIC5maXJzdENsYXNzT2NjdXBhbmN5PSR7b2NjdXBhbmN5Py5maXJzdENsYXNzPy50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgLnNlY29uZENsYXNzT2NjdXBhbmN5PSR7b2NjdXBhbmN5Py5zZWNvbmRDbGFzcz8udG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgICA+PC9zYmItdGltZXRhYmxlLW9jY3VwYW5jeT5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7KG5vdGljZUF0dHJpYnV0ZXMgJiYgbm90aWNlQXR0cmlidXRlcy5sZW5ndGgpIHx8IHRoaXMuYm9hcmRpbmdcbiAgICAgICAgICAgICAgPyBodG1sYDx1bCBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy1oaW50c1wiIHJvbGU9XCJsaXN0XCI+XG4gICAgICAgICAgICAgICAgICAke25vdGljZUF0dHJpYnV0ZXM/Lm1hcCgobm90aWNlLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCA0XG4gICAgICAgICAgICAgICAgICAgICAgPyBodG1sYDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItdHJhdmVsLWhpbnRzX19pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSR7J3NhLScgKyBub3RpY2UubmFtZT8udG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bm90aWNlLnRleHQ/LnRlbXBsYXRlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+YFxuICAgICAgICAgICAgICAgICAgICAgIDogbm90aGluZyxcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAke3RoaXMuYm9hcmRpbmdcbiAgICAgICAgICAgICAgICAgICAgPyBodG1sYDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmF2ZWwtaGludHNfX2l0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSR7dGhpcy5ib2FyZGluZz8ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYm9hcmRpbmc/LnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5gXG4gICAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICA8L3VsPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHtkdXJhdGlvbiAmJiBkdXJhdGlvbiA+IDBcbiAgICAgICAgICAgICAgPyBodG1sYDx0aW1lPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICR7YCR7aTE4blRyaXBEdXJhdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkdXJhdGlvbk9iaiEubG9uZ31gfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHtkdXJhdGlvbk9iaiEuc2hvcnR9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGltZT5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7aGFzSGltQ3VzICYmIChoaW1DdXMuY3VzIHx8IGhpbUN1cy5oaW0pXG4gICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy13YXJuaW5nXCI+XG4gICAgICAgICAgICAgICAgICA8c2JiLWljb24gbmFtZT0keyhoaW1DdXMuY3VzIHx8IGhpbUN1cy5oaW0pIS5uYW1lfT48L3NiYi1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHsoaGltQ3VzLmN1cyB8fCBoaW1DdXMuaGltKSEudGV4dH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2JiLWNhcmQ+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXRpbWV0YWJsZS1yb3cnOiBTYmJUaW1ldGFibGVSb3dFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2dFQSxJQUFhLHFCQUFxQixNQUFjLFNBQWdDO0NBQzlFLE9BQU8sSUFBSTtxQkFDUSxLQUFJOzJDQUNrQixLQUFJOzs7QUFJL0MsSUFBYSx1QkFBdUIsYUFBcUIsU0FBd0M7Q0FDL0YsTUFBTSxRQUFRO0VBQUM7RUFBSztFQUFLO0VBQUksQ0FBQyxTQUFTLFlBQVksR0FBRyxNQUFNO0NBQzVELE9BQU8sSUFBSTtNQUNQLFNBQVMsT0FBTyxjQUFjLFFBQVEsT0FBTyxZQUFBOzs7QUFJbkQsSUFBTSxvQkFBb0IsU0FBZ0Q7Q0FDeEUsT0FBTyxNQUFNLE1BQU0sUUFBUSxJQUFJLGdCQUFnQixtQkFBbUIsY0FBYyxFQUFFLGdCQUM5RSxtQkFBbUI7O0FBR3pCLElBQU0sZ0JBQWdCLFNBQWdEO0NBQ3BFLE9BQU8sTUFBTSxNQUFNLFFBQVEsSUFBSSxnQkFB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