@sbb-esta/lyne-elements-experimental 1.13.0 → 1.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 (49) hide show
  1. package/core/datetime.js +3 -9
  2. package/core/timetable.js +10 -64
  3. package/custom-elements.json +90 -40
  4. package/development/core/datetime.js +4 -10
  5. package/development/core/timetable.js +11 -65
  6. package/development/differenceInMinutes-Cmyza6nm.js +1 -1
  7. package/development/format-DTy5_IOt.js +1 -1
  8. package/development/isValid-DO_pHwcW.js +1 -1
  9. package/development/journey-summary/journey-summary.d.ts +6 -6
  10. package/development/journey-summary/journey-summary.d.ts.map +1 -1
  11. package/development/journey-summary.js +180 -82
  12. package/development/pearl-chain/pearl-chain.d.ts +2 -2
  13. package/development/pearl-chain/pearl-chain.d.ts.map +1 -1
  14. package/development/pearl-chain-time/pearl-chain-time.d.ts +7 -7
  15. package/development/pearl-chain-time/pearl-chain-time.d.ts.map +1 -1
  16. package/development/pearl-chain-time.js +176 -68
  17. package/development/pearl-chain-vertical/pearl-chain-vertical.d.ts.map +1 -1
  18. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.d.ts +2 -2
  19. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.d.ts.map +1 -1
  20. package/development/pearl-chain-vertical-item.js +67 -30
  21. package/development/pearl-chain-vertical.js +22 -21
  22. package/development/pearl-chain.js +210 -166
  23. package/development/timetable-duration/timetable-duration.d.ts +1 -1
  24. package/development/timetable-duration/timetable-duration.d.ts.map +1 -1
  25. package/development/timetable-duration.js +72 -45
  26. package/development/timetable-row/timetable-row.d.ts +10 -10
  27. package/development/timetable-row/timetable-row.d.ts.map +1 -1
  28. package/development/timetable-row.js +337 -205
  29. package/journey-summary/journey-summary.d.ts +6 -6
  30. package/journey-summary/journey-summary.d.ts.map +1 -1
  31. package/journey-summary.js +156 -100
  32. package/package.json +4 -3
  33. package/pearl-chain/pearl-chain.d.ts +2 -2
  34. package/pearl-chain/pearl-chain.d.ts.map +1 -1
  35. package/pearl-chain-time/pearl-chain-time.d.ts +7 -7
  36. package/pearl-chain-time/pearl-chain-time.d.ts.map +1 -1
  37. package/pearl-chain-time.js +137 -78
  38. package/pearl-chain-vertical/pearl-chain-vertical.d.ts.map +1 -1
  39. package/pearl-chain-vertical-item/pearl-chain-vertical-item.d.ts +2 -2
  40. package/pearl-chain-vertical-item/pearl-chain-vertical-item.d.ts.map +1 -1
  41. package/pearl-chain-vertical-item.js +57 -34
  42. package/pearl-chain-vertical.js +17 -18
  43. package/pearl-chain.js +156 -131
  44. package/timetable-duration/timetable-duration.d.ts +1 -1
  45. package/timetable-duration/timetable-duration.d.ts.map +1 -1
  46. package/timetable-duration.js +48 -30
  47. package/timetable-row/timetable-row.d.ts +10 -10
  48. package/timetable-row/timetable-row.d.ts.map +1 -1
  49. package/timetable-row.js +331 -267
@@ -1,6 +1,15 @@
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";
1
9
  import { defaultDateAdapter } from "@sbb-esta/lyne-elements/core/datetime.js";
2
- import { css, LitElement, html, nothing } from "lit";
3
- import { property, customElement } from "lit/decorators.js";
10
+ import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
11
+ import { css, html, nothing, LitElement } from "lit";
12
+ import { customElement, property } from "lit/decorators.js";
4
13
  import { styleMap } from "lit/directives/style-map.js";
5
14
  import { removeTimezoneFromISOTimeString } from "./core/datetime.js";
6
15
  import { isRideLeg } from "./core/timetable.js";
@@ -403,203 +412,238 @@ const style = css`*,
403
412
  white-space: nowrap;
404
413
  width: 1px;
405
414
  }`;
406
- var __defProp = Object.defineProperty;
407
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
408
- var __decorateClass = (decorators, target, key, kind) => {
409
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
410
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
411
- if (decorator = decorators[i])
412
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
413
- if (kind && result) __defProp(target, key, result);
414
- return result;
415
- };
416
- let SbbPearlChainElement = class extends LitElement {
417
- constructor() {
418
- super(...arguments);
419
- this._now = null;
420
- }
421
- set now(value) {
422
- this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
423
- }
424
- get now() {
425
- return this._now;
426
- }
427
- _getAllDuration(legs) {
428
- return legs == null ? void 0 : legs.reduce((sum, leg) => {
429
- var _a, _b;
430
- const arrivalNoTz = removeTimezoneFromISOTimeString((_a = leg.arrival) == null ? void 0 : _a.time);
415
+ let SbbPearlChainElement = (() => {
416
+ var _legs_accessor_storage, _disableAnimation_accessor_storage, _a;
417
+ let _classDecorators = [customElement("sbb-pearl-chain")];
418
+ let _classDescriptor;
419
+ let _classExtraInitializers = [];
420
+ let _classThis;
421
+ let _classSuper = LitElement;
422
+ let _instanceExtraInitializers = [];
423
+ let _legs_decorators;
424
+ let _legs_initializers = [];
425
+ let _legs_extraInitializers = [];
426
+ let _disableAnimation_decorators;
427
+ let _disableAnimation_initializers = [];
428
+ let _disableAnimation_extraInitializers = [];
429
+ let _set_now_decorators;
430
+ _a = class extends _classSuper {
431
+ constructor() {
432
+ super(...arguments);
433
+ __privateAdd(this, _legs_accessor_storage);
434
+ __privateAdd(this, _disableAnimation_accessor_storage);
435
+ __privateSet(this, _legs_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _legs_initializers, [])));
436
+ __privateSet(this, _disableAnimation_accessor_storage, (__runInitializers(this, _legs_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false)));
437
+ this._now = (__runInitializers(this, _disableAnimation_extraInitializers), null);
438
+ }
439
+ /**
440
+ * Define the legs of the pearl-chain.
441
+ * Format:
442
+ * `{"legs": [{"duration": 25}, ...]}`
443
+ * `duration` in minutes. Duration of the leg is relative
444
+ * to the total travel time. Example: departure 16:30, change at 16:40,
445
+ * arrival at 17:00. So the change should have a duration of 33.33%.
446
+ */
447
+ get legs() {
448
+ return __privateGet(this, _legs_accessor_storage);
449
+ }
450
+ set legs(value) {
451
+ __privateSet(this, _legs_accessor_storage, value);
452
+ }
453
+ /**
454
+ * Per default, the current location has a pulsating animation. You can
455
+ * disable the animation with this property.
456
+ */
457
+ get disableAnimation() {
458
+ return __privateGet(this, _disableAnimation_accessor_storage);
459
+ }
460
+ set disableAnimation(value) {
461
+ __privateSet(this, _disableAnimation_accessor_storage, value);
462
+ }
463
+ /** A configured date which acts as the current date instead of the real current date. Recommended for testing purposes. */
464
+ set now(value) {
465
+ this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
466
+ }
467
+ get now() {
468
+ return this._now;
469
+ }
470
+ _getAllDuration(legs) {
471
+ return legs == null ? void 0 : legs.reduce((sum, leg) => {
472
+ var _a2, _b;
473
+ const arrivalNoTz = removeTimezoneFromISOTimeString((_a2 = leg.arrival) == null ? void 0 : _a2.time);
474
+ const departureNoTz = removeTimezoneFromISOTimeString((_b = leg.departure) == null ? void 0 : _b.time);
475
+ if (arrivalNoTz && departureNoTz) {
476
+ return sum + differenceInMinutes(removeTimezoneFromISOTimeString(leg.arrival.time), removeTimezoneFromISOTimeString(leg.departure.time));
477
+ }
478
+ return sum;
479
+ }, 0);
480
+ }
481
+ _isAllCancelled(legs) {
482
+ return legs == null ? void 0 : legs.every((leg) => {
483
+ var _a2, _b;
484
+ return (_b = (_a2 = leg == null ? void 0 : leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b.cancelled;
485
+ });
486
+ }
487
+ _getRelativeDuration(legs, leg) {
488
+ var _a2, _b;
489
+ const arrivalNoTz = removeTimezoneFromISOTimeString((_a2 = leg.arrival) == null ? void 0 : _a2.time);
431
490
  const departureNoTz = removeTimezoneFromISOTimeString((_b = leg.departure) == null ? void 0 : _b.time);
432
491
  if (arrivalNoTz && departureNoTz) {
433
- return sum + differenceInMinutes(
434
- removeTimezoneFromISOTimeString(leg.arrival.time),
435
- removeTimezoneFromISOTimeString(leg.departure.time)
436
- );
437
- }
438
- return sum;
439
- }, 0);
440
- }
441
- _isAllCancelled(legs) {
442
- return legs == null ? void 0 : legs.every((leg) => {
443
- var _a, _b;
444
- return (_b = (_a = leg == null ? void 0 : leg.serviceJourney) == null ? void 0 : _a.serviceAlteration) == null ? void 0 : _b.cancelled;
445
- });
446
- }
447
- _getRelativeDuration(legs, leg) {
448
- var _a, _b;
449
- const arrivalNoTz = removeTimezoneFromISOTimeString((_a = leg.arrival) == null ? void 0 : _a.time);
450
- const departureNoTz = removeTimezoneFromISOTimeString((_b = leg.departure) == null ? void 0 : _b.time);
451
- if (arrivalNoTz && departureNoTz) {
452
- const duration = differenceInMinutes(
453
- removeTimezoneFromISOTimeString(leg.arrival.time),
454
- removeTimezoneFromISOTimeString(leg.departure.time)
455
- );
456
- const allDurations = this._getAllDuration(legs);
457
- if (allDurations === 0) {
458
- return 100;
492
+ const duration = differenceInMinutes(removeTimezoneFromISOTimeString(leg.arrival.time), removeTimezoneFromISOTimeString(leg.departure.time));
493
+ const allDurations = this._getAllDuration(legs);
494
+ if (allDurations === 0) {
495
+ return 100;
496
+ }
497
+ return duration / allDurations * 100;
459
498
  }
460
- return duration / allDurations * 100;
461
- }
462
- return 0;
463
- }
464
- _getProgress(now, start, end) {
465
- if (!(start == null ? void 0 : start.time) || !(end == null ? void 0 : end.time)) {
466
499
  return 0;
467
500
  }
468
- const startWithDelay = addMinutes(start.time, start.delay ?? 0);
469
- const endWithDelay = addMinutes(end.time, end.delay ?? 0);
470
- const total = differenceInMinutes(endWithDelay, startWithDelay);
471
- const progress = differenceInMinutes(now, startWithDelay);
472
- return total && progress / total * 100;
473
- }
474
- _getStatus(now, start, end) {
475
- const startWithDelay = start && start.time && addMinutes(start.time, start.delay ?? 0);
476
- const endWithDelay = end && end.time && addMinutes(end.time, end.delay ?? 0);
477
- if (startWithDelay && isBefore(startWithDelay, now) && endWithDelay && isAfter(endWithDelay, now)) {
478
- return "progress";
479
- } else if (endWithDelay && isBefore(endWithDelay, now)) {
480
- return "past";
501
+ _getProgress(now, start, end) {
502
+ if (!(start == null ? void 0 : start.time) || !(end == null ? void 0 : end.time)) {
503
+ return 0;
504
+ }
505
+ const startWithDelay = addMinutes(start.time, start.delay ?? 0);
506
+ const endWithDelay = addMinutes(end.time, end.delay ?? 0);
507
+ const total = differenceInMinutes(endWithDelay, startWithDelay);
508
+ const progress = differenceInMinutes(now, startWithDelay);
509
+ return total && progress / total * 100;
481
510
  }
482
- return "future";
483
- }
484
- _renderPosition(now, start, end) {
485
- const currentPosition = this._getProgress(now, start, end);
486
- if (currentPosition < 0 && currentPosition > 100) return void 0;
487
- const statusStyle = () => {
488
- return {
489
- "--sbb-pearl-chain-status-position": `${currentPosition}%`,
490
- ...currentPosition >= 50 ? { transform: `translateX(-100%)` } : {}
511
+ _getStatus(now, start, end) {
512
+ const startWithDelay = start && start.time && addMinutes(start.time, start.delay ?? 0);
513
+ const endWithDelay = end && end.time && addMinutes(end.time, end.delay ?? 0);
514
+ if (startWithDelay && isBefore(startWithDelay, now) && endWithDelay && isAfter(endWithDelay, now)) {
515
+ return "progress";
516
+ } else if (endWithDelay && isBefore(endWithDelay, now)) {
517
+ return "past";
518
+ }
519
+ return "future";
520
+ }
521
+ _renderPosition(now, start, end) {
522
+ const currentPosition = this._getProgress(now, start, end);
523
+ if (currentPosition < 0 && currentPosition > 100)
524
+ return void 0;
525
+ const statusStyle = () => {
526
+ return {
527
+ "--sbb-pearl-chain-status-position": `${currentPosition}%`,
528
+ ...currentPosition >= 50 ? { transform: `translateX(-100%)` } : {}
529
+ };
491
530
  };
492
- };
493
- const animation = this.disableAnimation ? "sbb-pearl-chain__position--no-animation" : "";
494
- return html`<span
531
+ const animation = this.disableAnimation ? "sbb-pearl-chain__position--no-animation" : "";
532
+ return html`<span
495
533
  style=${styleMap(statusStyle())}
496
534
  class="sbb-pearl-chain__position ${animation}"
497
535
  ></span>`;
498
- }
499
- render() {
500
- var _a, _b, _c, _d, _e;
501
- const now = this.now ?? /* @__PURE__ */ new Date();
502
- const rideLegs = (_a = this.legs) == null ? void 0 : _a.filter((leg) => isRideLeg(leg));
503
- const departureTime = (rideLegs == null ? void 0 : rideLegs.length) && removeTimezoneFromISOTimeString((_c = (_b = rideLegs[0]) == null ? void 0 : _b.departure) == null ? void 0 : _c.time);
504
- const departureWithDelay = departureTime && {
505
- time: departureTime,
506
- delay: rideLegs[0].departure.delay ?? 0
507
- };
508
- const arrivalTime = (rideLegs == null ? void 0 : rideLegs.length) && removeTimezoneFromISOTimeString((_d = rideLegs[rideLegs.length - 1].arrival) == null ? void 0 : _d.time);
509
- const arrivalTimeDelay = arrivalTime && {
510
- time: arrivalTime,
511
- delay: ((_e = rideLegs[rideLegs.length - 1]) == null ? void 0 : _e.arrival.delay) ?? 0
512
- };
513
- const departureNotServiced = (() => {
514
- var _a2, _b2, _c2, _d2;
515
- return rideLegs && ((_b2 = (_a2 = rideLegs[0]) == null ? void 0 : _a2.serviceJourney) == null ? void 0 : _b2.stopPoints) && ((_d2 = (_c2 = rideLegs[0]) == null ? void 0 : _c2.serviceJourney) == null ? void 0 : _d2.stopPoints[0].stopStatus) === "NOT_SERVICED" ? "sbb-pearl-chain--departure-skipped" : "";
516
- })();
517
- const arrivalNotServiced = (() => {
518
- var _a2;
519
- const lastLeg = rideLegs && rideLegs[rideLegs.length - 1];
520
- const stops = lastLeg && ((_a2 = lastLeg.serviceJourney) == null ? void 0 : _a2.stopPoints);
521
- return stops && stops[stops.length - 1].stopStatus === "NOT_SERVICED" ? "sbb-pearl-chain--arrival-skipped" : "";
522
- })();
523
- const departureCancelClass = (() => {
524
- var _a2, _b2, _c2;
525
- return rideLegs && ((_c2 = (_b2 = (_a2 = rideLegs[0]) == null ? void 0 : _a2.serviceJourney) == null ? void 0 : _b2.serviceAlteration) == null ? void 0 : _c2.cancelled) ? "sbb-pearl-chain--departure-disruption" : "";
526
- })();
527
- const arrivalCancelClass = (() => {
528
- var _a2, _b2, _c2;
529
- return rideLegs && ((_c2 = (_b2 = (_a2 = rideLegs[rideLegs.length - 1]) == null ? void 0 : _a2.serviceJourney) == null ? void 0 : _b2.serviceAlteration) == null ? void 0 : _c2.cancelled) ? "sbb-pearl-chain--arrival-disruption" : "";
530
- })();
531
- const status = departureWithDelay && arrivalTimeDelay && this._getStatus(now, departureWithDelay, arrivalTimeDelay);
532
- const statusClassDeparture = rideLegs && status && !departureCancelClass ? "sbb-pearl-chain__bullet--" + status : "";
533
- const statusClassArrival = rideLegs && status && !arrivalCancelClass ? "sbb-pearl-chain__bullet--" + this._getStatus(now, void 0, arrivalTimeDelay) : "";
534
- if (this._isAllCancelled(rideLegs)) {
535
- return html`
536
+ }
537
+ render() {
538
+ var _a2, _b, _c, _d, _e;
539
+ const now = this.now ?? /* @__PURE__ */ new Date();
540
+ const rideLegs = (_a2 = this.legs) == null ? void 0 : _a2.filter((leg) => isRideLeg(leg));
541
+ const departureTime = (rideLegs == null ? void 0 : rideLegs.length) && removeTimezoneFromISOTimeString((_c = (_b = rideLegs[0]) == null ? void 0 : _b.departure) == null ? void 0 : _c.time);
542
+ const departureWithDelay = departureTime && {
543
+ time: departureTime,
544
+ delay: rideLegs[0].departure.delay ?? 0
545
+ };
546
+ const arrivalTime = (rideLegs == null ? void 0 : rideLegs.length) && removeTimezoneFromISOTimeString((_d = rideLegs[rideLegs.length - 1].arrival) == null ? void 0 : _d.time);
547
+ const arrivalTimeDelay = arrivalTime && {
548
+ time: arrivalTime,
549
+ delay: ((_e = rideLegs[rideLegs.length - 1]) == null ? void 0 : _e.arrival.delay) ?? 0
550
+ };
551
+ const departureNotServiced = (() => {
552
+ var _a3, _b2, _c2, _d2;
553
+ return rideLegs && ((_b2 = (_a3 = rideLegs[0]) == null ? void 0 : _a3.serviceJourney) == null ? void 0 : _b2.stopPoints) && ((_d2 = (_c2 = rideLegs[0]) == null ? void 0 : _c2.serviceJourney) == null ? void 0 : _d2.stopPoints[0].stopStatus) === "NOT_SERVICED" ? "sbb-pearl-chain--departure-skipped" : "";
554
+ })();
555
+ const arrivalNotServiced = (() => {
556
+ var _a3;
557
+ const lastLeg = rideLegs && rideLegs[rideLegs.length - 1];
558
+ const stops = lastLeg && ((_a3 = lastLeg.serviceJourney) == null ? void 0 : _a3.stopPoints);
559
+ return stops && stops[stops.length - 1].stopStatus === "NOT_SERVICED" ? "sbb-pearl-chain--arrival-skipped" : "";
560
+ })();
561
+ const departureCancelClass = (() => {
562
+ var _a3, _b2, _c2;
563
+ return rideLegs && ((_c2 = (_b2 = (_a3 = rideLegs[0]) == null ? void 0 : _a3.serviceJourney) == null ? void 0 : _b2.serviceAlteration) == null ? void 0 : _c2.cancelled) ? "sbb-pearl-chain--departure-disruption" : "";
564
+ })();
565
+ const arrivalCancelClass = (() => {
566
+ var _a3, _b2, _c2;
567
+ return rideLegs && ((_c2 = (_b2 = (_a3 = rideLegs[rideLegs.length - 1]) == null ? void 0 : _a3.serviceJourney) == null ? void 0 : _b2.serviceAlteration) == null ? void 0 : _c2.cancelled) ? "sbb-pearl-chain--arrival-disruption" : "";
568
+ })();
569
+ const status = departureWithDelay && arrivalTimeDelay && this._getStatus(now, departureWithDelay, arrivalTimeDelay);
570
+ const statusClassDeparture = rideLegs && status && !departureCancelClass ? "sbb-pearl-chain__bullet--" + status : "";
571
+ const statusClassArrival = rideLegs && status && !arrivalCancelClass ? "sbb-pearl-chain__bullet--" + this._getStatus(now, void 0, arrivalTimeDelay) : "";
572
+ if (this._isAllCancelled(rideLegs)) {
573
+ return html`
536
574
  <div class="sbb-pearl-chain">
537
575
  <span class="sbb-pearl-chain__bullet sbb-pearl-chain--departure-disruption"></span>
538
576
  <div class="sbb-pearl-chain__leg sbb-pearl-chain__leg--disruption"></div>
539
577
  <span class="sbb-pearl-chain__bullet sbb-pearl-chain--departure-disruption"></span>
540
578
  </div>
541
579
  `;
542
- }
543
- return html`
580
+ }
581
+ return html`
544
582
  <div class="sbb-pearl-chain">
545
583
  <span
546
584
  class="sbb-pearl-chain__bullet ${statusClassDeparture} ${departureNotServiced} ${departureCancelClass}"
547
585
  ></span>
548
586
  ${rideLegs == null ? void 0 : rideLegs.map((leg, index) => {
549
- var _a2, _b2, _c2, _d2, _e2, _f, _g, _h;
550
- const { stopPoints, serviceAlteration } = (leg == null ? void 0 : leg.serviceJourney) || {};
551
- const duration = this._getRelativeDuration(rideLegs, leg);
552
- const departure = removeTimezoneFromISOTimeString((_a2 = leg.departure) == null ? void 0 : _a2.time);
553
- const arrival = removeTimezoneFromISOTimeString((_b2 = leg.arrival) == null ? void 0 : _b2.time);
554
- const isArrivalNotServiced = stopPoints && ((_c2 = stopPoints[stopPoints.length - 1]) == null ? void 0 : _c2.stopStatus) === "NOT_SERVICED";
555
- const isArrivalPlanned = stopPoints && ((_d2 = stopPoints[stopPoints.length - 1]) == null ? void 0 : _d2.stopStatus) === "PLANNED";
556
- const isDepartureNotServiced = stopPoints && ((_e2 = stopPoints[0]) == null ? void 0 : _e2.stopStatus) === "NOT_SERVICED";
557
- const stopPointsBefore = index > 0 && rideLegs[index - 1].serviceJourney.stopPoints;
558
- const isBeforeLegArrivalNotServiced = stopPointsBefore && ((_f = stopPointsBefore[stopPointsBefore.length - 1]) == null ? void 0 : _f.stopStatus) === "NOT_SERVICED";
559
- const skippedLeg = isArrivalNotServiced || isDepartureNotServiced && isArrivalPlanned ? "sbb-pearl-chain__leg--skipped" : "";
560
- const departureSkippedBullet = isDepartureNotServiced || isBeforeLegArrivalNotServiced ? "sbb-pearl-chain__stop--departure-skipped" : "";
561
- const cancelled = (serviceAlteration == null ? void 0 : serviceAlteration.cancelled) ? "sbb-pearl-chain__leg--disruption" : "";
562
- const legDepartureWithDelay = { time: departure, delay: ((_g = leg.departure) == null ? void 0 : _g.delay) ?? 0 };
563
- const legArrivalWithDelay = { time: arrival, delay: ((_h = leg.arrival) == null ? void 0 : _h.delay) ?? 0 };
564
- const status2 = this._getStatus(now, legDepartureWithDelay, legArrivalWithDelay);
565
- const legStatus = !cancelled && !skippedLeg && "sbb-pearl-chain__leg--" + status2;
566
- const legStyle = () => {
567
- return {
568
- "--sbb-pearl-chain-leg-width": `${duration}%`,
569
- ...status2 === "progress" && !cancelled && !skippedLeg ? {
570
- "--sbb-pearl-chain-leg-status": `${this._getProgress(now, legDepartureWithDelay, legArrivalWithDelay)}%`
571
- } : {}
587
+ var _a3, _b2, _c2, _d2, _e2, _f, _g, _h;
588
+ const { stopPoints, serviceAlteration } = (leg == null ? void 0 : leg.serviceJourney) || {};
589
+ const duration = this._getRelativeDuration(rideLegs, leg);
590
+ const departure = removeTimezoneFromISOTimeString((_a3 = leg.departure) == null ? void 0 : _a3.time);
591
+ const arrival = removeTimezoneFromISOTimeString((_b2 = leg.arrival) == null ? void 0 : _b2.time);
592
+ const isArrivalNotServiced = stopPoints && ((_c2 = stopPoints[stopPoints.length - 1]) == null ? void 0 : _c2.stopStatus) === "NOT_SERVICED";
593
+ const isArrivalPlanned = stopPoints && ((_d2 = stopPoints[stopPoints.length - 1]) == null ? void 0 : _d2.stopStatus) === "PLANNED";
594
+ const isDepartureNotServiced = stopPoints && ((_e2 = stopPoints[0]) == null ? void 0 : _e2.stopStatus) === "NOT_SERVICED";
595
+ const stopPointsBefore = index > 0 && rideLegs[index - 1].serviceJourney.stopPoints;
596
+ const isBeforeLegArrivalNotServiced = stopPointsBefore && ((_f = stopPointsBefore[stopPointsBefore.length - 1]) == null ? void 0 : _f.stopStatus) === "NOT_SERVICED";
597
+ const skippedLeg = isArrivalNotServiced || isDepartureNotServiced && isArrivalPlanned ? "sbb-pearl-chain__leg--skipped" : "";
598
+ const departureSkippedBullet = isDepartureNotServiced || isBeforeLegArrivalNotServiced ? "sbb-pearl-chain__stop--departure-skipped" : "";
599
+ const cancelled = (serviceAlteration == null ? void 0 : serviceAlteration.cancelled) ? "sbb-pearl-chain__leg--disruption" : "";
600
+ const legDepartureWithDelay = { time: departure, delay: ((_g = leg.departure) == null ? void 0 : _g.delay) ?? 0 };
601
+ const legArrivalWithDelay = { time: arrival, delay: ((_h = leg.arrival) == null ? void 0 : _h.delay) ?? 0 };
602
+ const status2 = this._getStatus(now, legDepartureWithDelay, legArrivalWithDelay);
603
+ const legStatus = !cancelled && !skippedLeg && "sbb-pearl-chain__leg--" + status2;
604
+ const legStyle = () => {
605
+ return {
606
+ "--sbb-pearl-chain-leg-width": `${duration}%`,
607
+ ...status2 === "progress" && !cancelled && !skippedLeg ? {
608
+ "--sbb-pearl-chain-leg-status": `${this._getProgress(now, legDepartureWithDelay, legArrivalWithDelay)}%`
609
+ } : {}
610
+ };
572
611
  };
573
- };
574
- return html` <div
612
+ return html` <div
575
613
  class="sbb-pearl-chain__leg ${legStatus || ""} ${cancelled} ${skippedLeg}"
576
614
  style=${styleMap(legStyle())}
577
615
  >
578
616
  ${index > 0 && index < rideLegs.length ? html`<span class="sbb-pearl-chain__stop ${departureSkippedBullet}"></span>` : nothing}
579
617
  ${status2 === "progress" && !cancelled && !skippedLeg ? this._renderPosition(now, legDepartureWithDelay, legArrivalWithDelay) : nothing}
580
618
  </div>`;
581
- })}
619
+ })}
582
620
  <span
583
621
  class="sbb-pearl-chain__bullet ${statusClassArrival} ${arrivalNotServiced} ${arrivalCancelClass}"
584
622
  ></span>
585
623
  </div>
586
624
  `;
587
- }
588
- };
589
- SbbPearlChainElement.styles = style;
590
- __decorateClass([
591
- property({ type: Array })
592
- ], SbbPearlChainElement.prototype, "legs", 2);
593
- __decorateClass([
594
- property({ attribute: "disable-animation", type: Boolean })
595
- ], SbbPearlChainElement.prototype, "disableAnimation", 2);
596
- __decorateClass([
597
- property()
598
- ], SbbPearlChainElement.prototype, "now", 1);
599
- SbbPearlChainElement = __decorateClass([
600
- customElement("sbb-pearl-chain")
601
- ], SbbPearlChainElement);
625
+ }
626
+ }, _legs_accessor_storage = new WeakMap(), _disableAnimation_accessor_storage = new WeakMap(), _classThis = _a, (() => {
627
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
628
+ _legs_decorators = [property({ type: Array })];
629
+ _disableAnimation_decorators = [forceType(), property({ attribute: "disable-animation", type: Boolean })];
630
+ _set_now_decorators = [property()];
631
+ __esDecorate(_a, null, _legs_decorators, { kind: "accessor", name: "legs", static: false, private: false, access: { has: (obj) => "legs" in obj, get: (obj) => obj.legs, set: (obj, value) => {
632
+ obj.legs = value;
633
+ } }, metadata: _metadata }, _legs_initializers, _legs_extraInitializers);
634
+ __esDecorate(_a, null, _disableAnimation_decorators, { kind: "accessor", name: "disableAnimation", static: false, private: false, access: { has: (obj) => "disableAnimation" in obj, get: (obj) => obj.disableAnimation, set: (obj, value) => {
635
+ obj.disableAnimation = value;
636
+ } }, metadata: _metadata }, _disableAnimation_initializers, _disableAnimation_extraInitializers);
637
+ __esDecorate(_a, null, _set_now_decorators, { kind: "setter", name: "now", static: false, private: false, access: { has: (obj) => "now" in obj, set: (obj, value) => {
638
+ obj.now = value;
639
+ } }, metadata: _metadata }, null, _instanceExtraInitializers);
640
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
641
+ _classThis = _classDescriptor.value;
642
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
643
+ })(), _a.styles = style, __runInitializers(_classThis, _classExtraInitializers), _a;
644
+ return _classThis;
645
+ })();
602
646
  export {
603
647
  SbbPearlChainElement
604
648
  };
605
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVhcmwtY2hhaW4uanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC9wZWFybC1jaGFpbi9wZWFybC1jaGFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc0FmdGVyXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBmaXJzdCBkYXRlIGFmdGVyIHRoZSBzZWNvbmQgb25lP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGZpcnN0IGRhdGUgYWZ0ZXIgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0aGF0IHNob3VsZCBiZSBhZnRlciB0aGUgb3RoZXIgb25lIHRvIHJldHVybiB0cnVlXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICpcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBkYXRlIGlzIGFmdGVyIHRoZSBzZWNvbmQgZGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAxMCBKdWx5IDE5ODkgYWZ0ZXIgMTEgRmVicnVhcnkgMTk4Nz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzQWZ0ZXIobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWZ0ZXIoZGF0ZSwgZGF0ZVRvQ29tcGFyZSkge1xuICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNBZnRlcjtcbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzQmVmb3JlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRoYXQgc2hvdWxkIGJlIGJlZm9yZSB0aGUgb3RoZXIgb25lIHRvIHJldHVybiB0cnVlXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICpcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBkYXRlIGlzIGJlZm9yZSB0aGUgc2Vjb25kIGRhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXMgMTAgSnVseSAxOTg5IGJlZm9yZSAxMSBGZWJydWFyeSAxOTg3P1xuICogY29uc3QgcmVzdWx0ID0gaXNCZWZvcmUobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JlZm9yZShkYXRlLCBkYXRlVG9Db21wYXJlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpIDwgK3RvRGF0ZShkYXRlVG9Db21wYXJlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0JlZm9yZTtcbiIsImltcG9ydCB7IGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlTGlrZSB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvaW50ZXJmYWNlcy90eXBlcyc7XG5pbXBvcnQgeyBhZGRNaW51dGVzLCBkaWZmZXJlbmNlSW5NaW51dGVzLCBpc0FmdGVyLCBpc0JlZm9yZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIExpdEVsZW1lbnQsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5cbmltcG9ydCB7IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcgfSBmcm9tICcuLi9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB0eXBlIHsgTGVnLCBQdFJpZGVMZWcgfSBmcm9tICcuLi9jb3JlL3RpbWV0YWJsZS5qcyc7XG5pbXBvcnQgeyBpc1JpZGVMZWcgfSBmcm9tICcuLi9jb3JlL3RpbWV0YWJsZS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3BlYXJsLWNoYWluLnNjc3M/bGl0JmlubGluZSc7XG5cbnR5cGUgU3RhdHVzID0gJ3Byb2dyZXNzJyB8ICdmdXR1cmUnIHwgJ3Bhc3QnO1xudHlwZSBUaW1lID0ge1xuICB0aW1lPzogRGF0ZTtcbiAgZGVsYXk6IG51bWJlcjtcbn07XG5cbi8qKlxuICogSXQgdmlzdWFsbHkgZGlzcGxheXMgam91cm5leSBpbmZvcm1hdGlvbi5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3NiYi1wZWFybC1jaGFpbicpXG5leHBvcnQgY2xhc3MgU2JiUGVhcmxDaGFpbkVsZW1lbnQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgbGVncyBvZiB0aGUgcGVhcmwtY2hhaW4uXG4gICAqIEZvcm1hdDpcbiAgICogYHtcImxlZ3NcIjogW3tcImR1cmF0aW9uXCI6IDI1fSwgLi4uXX1gXG4gICAqIGBkdXJhdGlvbmAgaW4gbWludXRlcy4gRHVyYXRpb24gb2YgdGhlIGxlZyBpcyByZWxhdGl2ZVxuICAgKiB0byB0aGUgdG90YWwgdHJhdmVsIHRpbWUuIEV4YW1wbGU6IGRlcGFydHVyZSAxNjozMCwgY2hhbmdlIGF0IDE2OjQwLFxuICAgKiBhcnJpdmFsIGF0IDE3OjAwLiBTbyB0aGUgY2hhbmdlIHNob3VsZCBoYXZlIGEgZHVyYXRpb24gb2YgMzMuMzMlLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQXJyYXkgfSkgcHVibGljIGxlZ3M/OiAoTGVnIHwgUHRSaWRlTGVnKVtdO1xuXG4gIC8qKlxuICAgKiBQZXIgZGVmYXVsdCwgdGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzIGEgcHVsc2F0aW5nIGFuaW1hdGlvbi4gWW91IGNhblxuICAgKiBkaXNhYmxlIHRoZSBhbmltYXRpb24gd2l0aCB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGlzYWJsZS1hbmltYXRpb24nLCB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBkaXNhYmxlQW5pbWF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogQSBjb25maWd1cmVkIGRhdGUgd2hpY2ggYWN0cyBhcyB0aGUgY3VycmVudCBkYXRlIGluc3RlYWQgb2YgdGhlIHJlYWwgY3VycmVudCBkYXRlLiBSZWNvbW1lbmRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IFNiYkRhdGVMaWtlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbm93ID0gZGVmYXVsdERhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChkZWZhdWx0RGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5vdygpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX25vdztcbiAgfVxuICBwcml2YXRlIF9ub3c6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9nZXRBbGxEdXJhdGlvbihsZWdzOiBQdFJpZGVMZWdbXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGxlZ3M/LnJlZHVjZSgoc3VtOiBudW1iZXIsIGxlZykgPT4ge1xuICAgICAgY29uc3QgYXJyaXZhbE5vVHogPSByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsPy50aW1lKTtcbiAgICAgIGNvbnN0IGRlcGFydHVyZU5vVHogPSByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5kZXBhcnR1cmU/LnRpbWUpO1xuICAgICAgaWYgKGFycml2YWxOb1R6ICYmIGRlcGFydHVyZU5vVHopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBzdW0gK1xuICAgICAgICAgIGRpZmZlcmVuY2VJbk1pbnV0ZXMoXG4gICAgICAgICAgICByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsLnRpbWUpISxcbiAgICAgICAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZS50aW1lKSEsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQWxsQ2FuY2VsbGVkKGxlZ3M6IFB0UmlkZUxlZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxlZ3M/LmV2ZXJ5KChsZWcpID0+IGxlZz8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5jYW5jZWxsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVsYXRpdmVEdXJhdGlvbihsZWdzOiBQdFJpZGVMZWdbXSwgbGVnOiBQdFJpZGVMZWcpOiBudW1iZXIge1xuICAgIGNvbnN0IGFycml2YWxOb1R6ID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuYXJyaXZhbD8udGltZSk7XG4gICAgY29uc3QgZGVwYXJ0dXJlTm9UeiA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZT8udGltZSk7XG4gICAgaWYgKGFycml2YWxOb1R6ICYmIGRlcGFydHVyZU5vVHopIHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZGlmZmVyZW5jZUluTWludXRlcyhcbiAgICAgICAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuYXJyaXZhbC50aW1lKSEsXG4gICAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZS50aW1lKSEsXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsRHVyYXRpb25zID0gdGhpcy5fZ2V0QWxsRHVyYXRpb24obGVncyk7XG5cbiAgICAgIGlmIChhbGxEdXJhdGlvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDEwMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChkdXJhdGlvbiAvIGFsbER1cmF0aW9ucykgKiAxMDA7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UHJvZ3Jlc3Mobm93OiBEYXRlLCBzdGFydD86IFRpbWUsIGVuZD86IFRpbWUpOiBudW1iZXIge1xuICAgIGlmICghc3RhcnQ/LnRpbWUgfHwgIWVuZD8udGltZSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRXaXRoRGVsYXkgPSBhZGRNaW51dGVzKHN0YXJ0LnRpbWUsIHN0YXJ0LmRlbGF5ID8/IDApO1xuICAgIGNvbnN0IGVuZFdpdGhEZWxheSA9IGFkZE1pbnV0ZXMoZW5kLnRpbWUsIGVuZC5kZWxheSA/PyAwKTtcbiAgICBjb25zdCB0b3RhbCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoZW5kV2l0aERlbGF5LCBzdGFydFdpdGhEZWxheSk7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBkaWZmZXJlbmNlSW5NaW51dGVzKG5vdywgc3RhcnRXaXRoRGVsYXkpO1xuXG4gICAgcmV0dXJuIHRvdGFsICYmIChwcm9ncmVzcyAvIHRvdGFsKSAqIDEwMDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFN0YXR1cyhub3c6IERhdGUsIHN0YXJ0PzogVGltZSwgZW5kPzogVGltZSk6IFN0YXR1cyB7XG4gICAgY29uc3Qgc3RhcnRXaXRoRGVsYXkgPSBzdGFydCAmJiBzdGFydC50aW1lICYmIGFkZE1pbnV0ZXMoc3RhcnQudGltZSwgc3RhcnQuZGVsYXkgPz8gMCk7XG4gICAgY29uc3QgZW5kV2l0aERlbGF5ID0gZW5kICYmIGVuZC50aW1lICYmIGFkZE1pbnV0ZXMoZW5kLnRpbWUsIGVuZC5kZWxheSA/PyAwKTtcblxuICAgIGlmIChcbiAgICAgIHN0YXJ0V2l0aERlbGF5ICYmXG4gICAgICBpc0JlZm9yZShzdGFydFdpdGhEZWxheSwgbm93KSAmJlxuICAgICAgZW5kV2l0aERlbGF5ICYmXG4gICAgICBpc0FmdGVyKGVuZFdpdGhEZWxheSwgbm93KVxuICAgICkge1xuICAgICAgcmV0dXJuICdwcm9ncmVzcyc7XG4gICAgfSBlbHNlIGlmIChlbmRXaXRoRGVsYXkgJiYgaXNCZWZvcmUoZW5kV2l0aERlbGF5LCBub3cpKSB7XG4gICAgICByZXR1cm4gJ3Bhc3QnO1xuICAgIH1cbiAgICByZXR1cm4gJ2Z1dHVyZSc7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJQb3NpdGlvbihub3c6IERhdGUsIHN0YXJ0PzogVGltZSwgZW5kPzogVGltZSk6IFRlbXBsYXRlUmVzdWx0IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLl9nZXRQcm9ncmVzcyhub3csIHN0YXJ0LCBlbmQpO1xuICAgIGlmIChjdXJyZW50UG9zaXRpb24gPCAwICYmIGN1cnJlbnRQb3NpdGlvbiA+IDEwMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHN0YXR1c1N0eWxlID0gKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc2JiLXBlYXJsLWNoYWluLXN0YXR1cy1wb3NpdGlvbic6IGAke2N1cnJlbnRQb3NpdGlvbn0lYCxcbiAgICAgICAgLi4uKGN1cnJlbnRQb3NpdGlvbiA+PSA1MCA/IHsgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgtMTAwJSlgIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmltYXRpb24gPSB0aGlzLmRpc2FibGVBbmltYXRpb24gPyAnc2JiLXBlYXJsLWNoYWluX19wb3NpdGlvbi0tbm8tYW5pbWF0aW9uJyA6ICcnO1xuXG4gICAgcmV0dXJuIGh0bWxgPHNwYW5cbiAgICAgIHN0eWxlPSR7c3R5bGVNYXAoc3RhdHVzU3R5bGUoKSl9XG4gICAgICBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fcG9zaXRpb24gJHthbmltYXRpb259XCJcbiAgICA+PC9zcGFuPmA7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLm5vdyA/PyBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc3QgcmlkZUxlZ3M6IFB0UmlkZUxlZ1tdID0gdGhpcy5sZWdzPy5maWx0ZXIoKGxlZykgPT4gaXNSaWRlTGVnKGxlZykpIGFzIFB0UmlkZUxlZ1tdO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlVGltZSA9XG4gICAgICByaWRlTGVncz8ubGVuZ3RoICYmIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcocmlkZUxlZ3NbMF0/LmRlcGFydHVyZT8udGltZSk7XG4gICAgY29uc3QgZGVwYXJ0dXJlV2l0aERlbGF5ID0gZGVwYXJ0dXJlVGltZSAmJiB7XG4gICAgICB0aW1lOiBkZXBhcnR1cmVUaW1lLFxuICAgICAgZGVsYXk6IHJpZGVMZWdzWzBdLmRlcGFydHVyZS5kZWxheSA/PyAwLFxuICAgIH07XG5cbiAgICBjb25zdCBhcnJpdmFsVGltZSA9XG4gICAgICByaWRlTGVncz8ubGVuZ3RoICYmXG4gICAgICByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKHJpZGVMZWdzW3JpZGVMZWdzLmxlbmd0aCAtIDFdLmFycml2YWw/LnRpbWUpO1xuICAgIGNvbnN0IGFycml2YWxUaW1lRGVsYXkgPSBhcnJpdmFsVGltZSAmJiB7XG4gICAgICB0aW1lOiBhcnJpdmFsVGltZSxcbiAgICAgIGRlbGF5OiByaWRlTGVnc1tyaWRlTGVncy5sZW5ndGggLSAxXT8uYXJyaXZhbC5kZWxheSA/PyAwLFxuICAgIH07XG5cbiAgICBjb25zdCBkZXBhcnR1cmVOb3RTZXJ2aWNlZCA9ICgoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiByaWRlTGVncyAmJlxuICAgICAgICByaWRlTGVnc1swXT8uc2VydmljZUpvdXJuZXk/LnN0b3BQb2ludHMgJiZcbiAgICAgICAgcmlkZUxlZ3NbMF0/LnNlcnZpY2VKb3VybmV5Py5zdG9wUG9pbnRzWzBdLnN0b3BTdGF0dXMgPT09ICdOT1RfU0VSVklDRUQnXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLXNraXBwZWQnXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGFycml2YWxOb3RTZXJ2aWNlZCA9ICgoKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IGxhc3RMZWcgPSByaWRlTGVncyAmJiByaWRlTGVnc1tyaWRlTGVncy5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IHN0b3BzID0gbGFzdExlZyAmJiBsYXN0TGVnLnNlcnZpY2VKb3VybmV5Py5zdG9wUG9pbnRzO1xuXG4gICAgICByZXR1cm4gc3RvcHMgJiYgc3RvcHNbc3RvcHMubGVuZ3RoIC0gMV0uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCdcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluLS1hcnJpdmFsLXNraXBwZWQnXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGRlcGFydHVyZUNhbmNlbENsYXNzID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIHJpZGVMZWdzICYmIHJpZGVMZWdzWzBdPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LmNhbmNlbGxlZFxuICAgICAgICA/ICdzYmItcGVhcmwtY2hhaW4tLWRlcGFydHVyZS1kaXNydXB0aW9uJ1xuICAgICAgICA6ICcnO1xuICAgIH0pKCk7XG5cbiAgICBjb25zdCBhcnJpdmFsQ2FuY2VsQ2xhc3MgPSAoKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gcmlkZUxlZ3MgJiYgcmlkZUxlZ3NbcmlkZUxlZ3MubGVuZ3RoIC0gMV0/LnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8uY2FuY2VsbGVkXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbi0tYXJyaXZhbC1kaXNydXB0aW9uJ1xuICAgICAgICA6ICcnO1xuICAgIH0pKCk7XG5cbiAgICBjb25zdCBzdGF0dXMgPVxuICAgICAgZGVwYXJ0dXJlV2l0aERlbGF5ICYmXG4gICAgICBhcnJpdmFsVGltZURlbGF5ICYmXG4gICAgICB0aGlzLl9nZXRTdGF0dXMobm93LCBkZXBhcnR1cmVXaXRoRGVsYXksIGFycml2YWxUaW1lRGVsYXkpO1xuXG4gICAgY29uc3Qgc3RhdHVzQ2xhc3NEZXBhcnR1cmUgPVxuICAgICAgcmlkZUxlZ3MgJiYgc3RhdHVzICYmICFkZXBhcnR1cmVDYW5jZWxDbGFzcyA/ICdzYmItcGVhcmwtY2hhaW5fX2J1bGxldC0tJyArIHN0YXR1cyA6ICcnO1xuXG4gICAgY29uc3Qgc3RhdHVzQ2xhc3NBcnJpdmFsID1cbiAgICAgIHJpZGVMZWdzICYmIHN0YXR1cyAmJiAhYXJyaXZhbENhbmNlbENsYXNzXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbl9fYnVsbGV0LS0nICsgdGhpcy5fZ2V0U3RhdHVzKG5vdywgdW5kZWZpbmVkLCBhcnJpdmFsVGltZURlbGF5KVxuICAgICAgICA6ICcnO1xuXG4gICAgaWYgKHRoaXMuX2lzQWxsQ2FuY2VsbGVkKHJpZGVMZWdzKSkge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0IHNiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLWRpc3J1cHRpb25cIj48L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fbGVnIHNiYi1wZWFybC1jaGFpbl9fbGVnLS1kaXNydXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX2J1bGxldCBzYmItcGVhcmwtY2hhaW4tLWRlcGFydHVyZS1kaXNydXB0aW9uXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXBlYXJsLWNoYWluXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX2J1bGxldCAke3N0YXR1c0NsYXNzRGVwYXJ0dXJlfSAke2RlcGFydHVyZU5vdFNlcnZpY2VkfSAke2RlcGFydHVyZUNhbmNlbENsYXNzfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgICR7cmlkZUxlZ3M/Lm1hcCgobGVnOiBQdFJpZGVMZWcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHN0b3BQb2ludHMsIHNlcnZpY2VBbHRlcmF0aW9uIH0gPSBsZWc/LnNlcnZpY2VKb3VybmV5IHx8IHt9O1xuXG4gICAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLl9nZXRSZWxhdGl2ZUR1cmF0aW9uKHJpZGVMZWdzLCBsZWcpO1xuICAgICAgICAgIGNvbnN0IGRlcGFydHVyZSA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZT8udGltZSk7XG4gICAgICAgICAgY29uc3QgYXJyaXZhbCA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmFycml2YWw/LnRpbWUpO1xuXG4gICAgICAgICAgY29uc3QgaXNBcnJpdmFsTm90U2VydmljZWQgPVxuICAgICAgICAgICAgc3RvcFBvaW50cyAmJiBzdG9wUG9pbnRzW3N0b3BQb2ludHMubGVuZ3RoIC0gMV0/LnN0b3BTdGF0dXMgPT09ICdOT1RfU0VSVklDRUQnO1xuICAgICAgICAgIGNvbnN0IGlzQXJyaXZhbFBsYW5uZWQgPVxuICAgICAgICAgICAgc3RvcFBvaW50cyAmJiBzdG9wUG9pbnRzW3N0b3BQb2ludHMubGVuZ3RoIC0gMV0/LnN0b3BTdGF0dXMgPT09ICdQTEFOTkVEJztcbiAgICAgICAgICBjb25zdCBpc0RlcGFydHVyZU5vdFNlcnZpY2VkID0gc3RvcFBvaW50cyAmJiBzdG9wUG9pbnRzWzBdPy5zdG9wU3RhdHVzID09PSAnTk9UX1NFUlZJQ0VEJztcblxuICAgICAgICAgIGNvbnN0IHN0b3BQb2ludHNCZWZvcmUgPSBpbmRleCA+IDAgJiYgcmlkZUxlZ3NbaW5kZXggLSAxXS5zZXJ2aWNlSm91cm5leS5zdG9wUG9pbnRzO1xuICAgICAgICAgIGNvbnN0IGlzQmVmb3JlTGVnQXJyaXZhbE5vdFNlcnZpY2VkID1cbiAgICAgICAgICAgIHN0b3BQb2ludHNCZWZvcmUgJiZcbiAgICAgICAgICAgIHN0b3BQb2ludHNCZWZvcmVbc3RvcFBvaW50c0JlZm9yZS5sZW5ndGggLSAxXT8uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCc7XG5cbiAgICAgICAgICBjb25zdCBza2lwcGVkTGVnID1cbiAgICAgICAgICAgIGlzQXJyaXZhbE5vdFNlcnZpY2VkIHx8IChpc0RlcGFydHVyZU5vdFNlcnZpY2VkICYmIGlzQXJyaXZhbFBsYW5uZWQpXG4gICAgICAgICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbl9fbGVnLS1za2lwcGVkJ1xuICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgIGNvbnN0IGRlcGFydHVyZVNraXBwZWRCdWxsZXQgPVxuICAgICAgICAgICAgaXNEZXBhcnR1cmVOb3RTZXJ2aWNlZCB8fCBpc0JlZm9yZUxlZ0Fycml2YWxOb3RTZXJ2aWNlZFxuICAgICAgICAgICAgICA/ICdzYmItcGVhcmwtY2hhaW5fX3N0b3AtLWRlcGFydHVyZS1za2lwcGVkJ1xuICAgICAgICAgICAgICA6ICcnO1xuXG4gICAgICAgICAgY29uc3QgY2FuY2VsbGVkID0gc2VydmljZUFsdGVyYXRpb24/LmNhbmNlbGxlZCA/ICdzYmItcGVhcmwtY2hhaW5fX2xlZy0tZGlzcnVwdGlvbicgOiAnJztcblxuICAgICAgICAgIGNvbnN0IGxlZ0RlcGFydHVyZVdpdGhEZWxheSA9IHsgdGltZTogZGVwYXJ0dXJlLCBkZWxheTogbGVnLmRlcGFydHVyZT8uZGVsYXkgPz8gMCB9O1xuICAgICAgICAgIGNvbnN0IGxlZ0Fycml2YWxXaXRoRGVsYXkgPSB7IHRpbWU6IGFycml2YWwsIGRlbGF5OiBsZWcuYXJyaXZhbD8uZGVsYXkgPz8gMCB9O1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuX2dldFN0YXR1cyhub3csIGxlZ0RlcGFydHVyZVdpdGhEZWxheSwgbGVnQXJyaXZhbFdpdGhEZWxheSk7XG5cbiAgICAgICAgICBjb25zdCBsZWdTdGF0dXMgPSAhY2FuY2VsbGVkICYmICFza2lwcGVkTGVnICYmICdzYmItcGVhcmwtY2hhaW5fX2xlZy0tJyArIHN0YXR1cztcbiAgICAgICAgICBjb25zdCBsZWdTdHlsZSA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICctLXNiYi1wZWFybC1jaGFpbi1sZWctd2lkdGgnOiBgJHtkdXJhdGlvbn0lYCxcbiAgICAgICAgICAgICAgLi4uKHN0YXR1cyA9PT0gJ3Byb2dyZXNzJyAmJiAhY2FuY2VsbGVkICYmICFza2lwcGVkTGVnXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICctLXNiYi1wZWFybC1jaGFpbi1sZWctc3RhdHVzJzogYCR7dGhpcy5fZ2V0UHJvZ3Jlc3Mobm93LCBsZWdEZXBhcnR1cmVXaXRoRGVsYXksIGxlZ0Fycml2YWxXaXRoRGVsYXkpfSVgLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGh0bWxgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19sZWcgJHtsZWdTdGF0dXMgfHwgJyd9ICR7Y2FuY2VsbGVkfSAke3NraXBwZWRMZWd9XCJcbiAgICAgICAgICAgIHN0eWxlPSR7c3R5bGVNYXAobGVnU3R5bGUoKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHtpbmRleCA+IDAgJiYgaW5kZXggPCByaWRlTGVncy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19zdG9wICR7ZGVwYXJ0dXJlU2tpcHBlZEJ1bGxldH1cIj48L3NwYW4+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAke3N0YXR1cyA9PT0gJ3Byb2dyZXNzJyAmJiAhY2FuY2VsbGVkICYmICFza2lwcGVkTGVnXG4gICAgICAgICAgICAgID8gdGhpcy5fcmVuZGVyUG9zaXRpb24obm93LCBsZWdEZXBhcnR1cmVXaXRoRGVsYXksIGxlZ0Fycml2YWxXaXRoRGVsYXkpXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KX1cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0ICR7c3RhdHVzQ2xhc3NBcnJpdmFsfSAke2Fycml2YWxOb3RTZXJ2aWNlZH0gJHthcnJpdmFsQ2FuY2VsQ2xhc3N9XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1wZWFybC1jaGFpbic6IFNiYlBlYXJsQ2hhaW5FbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsiX2IiLCJfYSIsIl9kIiwiX2MiLCJfZSIsInN0YXR1cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFvQk8sU0FBUyxRQUFRLE1BQU0sZUFBZTtBQUMzQyxTQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLGFBQWE7QUFDOUM7QUNGTyxTQUFTLFNBQVMsTUFBTSxlQUFlO0FBQzVDLFNBQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sYUFBYTtBQUM5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
649
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVhcmwtY2hhaW4uanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC9wZWFybC1jaGFpbi9wZWFybC1jaGFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc0FmdGVyXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBmaXJzdCBkYXRlIGFmdGVyIHRoZSBzZWNvbmQgb25lP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGZpcnN0IGRhdGUgYWZ0ZXIgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0aGF0IHNob3VsZCBiZSBhZnRlciB0aGUgb3RoZXIgb25lIHRvIHJldHVybiB0cnVlXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICpcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBkYXRlIGlzIGFmdGVyIHRoZSBzZWNvbmQgZGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAxMCBKdWx5IDE5ODkgYWZ0ZXIgMTEgRmVicnVhcnkgMTk4Nz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzQWZ0ZXIobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWZ0ZXIoZGF0ZSwgZGF0ZVRvQ29tcGFyZSkge1xuICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNBZnRlcjtcbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzQmVmb3JlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRoYXQgc2hvdWxkIGJlIGJlZm9yZSB0aGUgb3RoZXIgb25lIHRvIHJldHVybiB0cnVlXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICpcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBkYXRlIGlzIGJlZm9yZSB0aGUgc2Vjb25kIGRhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXMgMTAgSnVseSAxOTg5IGJlZm9yZSAxMSBGZWJydWFyeSAxOTg3P1xuICogY29uc3QgcmVzdWx0ID0gaXNCZWZvcmUobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JlZm9yZShkYXRlLCBkYXRlVG9Db21wYXJlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpIDwgK3RvRGF0ZShkYXRlVG9Db21wYXJlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0JlZm9yZTtcbiIsImltcG9ydCB7IGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRGF0ZUxpa2UgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2ludGVyZmFjZXMvdHlwZXMnO1xuaW1wb3J0IHsgYWRkTWludXRlcywgZGlmZmVyZW5jZUluTWludXRlcywgaXNBZnRlciwgaXNCZWZvcmUgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50LCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAuanMnO1xuXG5pbXBvcnQgeyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nIH0gZnJvbSAnLi4vY29yZS9kYXRldGltZS5qcyc7XG5pbXBvcnQgdHlwZSB7IExlZywgUHRSaWRlTGVnIH0gZnJvbSAnLi4vY29yZS90aW1ldGFibGUuanMnO1xuaW1wb3J0IHsgaXNSaWRlTGVnIH0gZnJvbSAnLi4vY29yZS90aW1ldGFibGUuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9wZWFybC1jaGFpbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG50eXBlIFN0YXR1cyA9ICdwcm9ncmVzcycgfCAnZnV0dXJlJyB8ICdwYXN0JztcbnR5cGUgVGltZSA9IHtcbiAgdGltZT86IERhdGU7XG4gIGRlbGF5OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIEl0IHZpc3VhbGx5IGRpc3BsYXlzIGpvdXJuZXkgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1wZWFybC1jaGFpbicpXG5jbGFzcyBTYmJQZWFybENoYWluRWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogRGVmaW5lIHRoZSBsZWdzIG9mIHRoZSBwZWFybC1jaGFpbi5cbiAgICogRm9ybWF0OlxuICAgKiBge1wibGVnc1wiOiBbe1wiZHVyYXRpb25cIjogMjV9LCAuLi5dfWBcbiAgICogYGR1cmF0aW9uYCBpbiBtaW51dGVzLiBEdXJhdGlvbiBvZiB0aGUgbGVnIGlzIHJlbGF0aXZlXG4gICAqIHRvIHRoZSB0b3RhbCB0cmF2ZWwgdGltZS4gRXhhbXBsZTogZGVwYXJ0dXJlIDE2OjMwLCBjaGFuZ2UgYXQgMTY6NDAsXG4gICAqIGFycml2YWwgYXQgMTc6MDAuIFNvIHRoZSBjaGFuZ2Ugc2hvdWxkIGhhdmUgYSBkdXJhdGlvbiBvZiAzMy4zMyUuXG4gICAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBBcnJheSB9KSBwdWJsaWMgYWNjZXNzb3IgbGVnczogKExlZyB8IFB0UmlkZUxlZylbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQZXIgZGVmYXVsdCwgdGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzIGEgcHVsc2F0aW5nIGFuaW1hdGlvbi4gWW91IGNhblxuICAgKiBkaXNhYmxlIHRoZSBhbmltYXRpb24gd2l0aCB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Rpc2FibGUtYW5pbWF0aW9uJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzYWJsZUFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuIFJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG5vdyh2YWx1ZTogU2JiRGF0ZUxpa2UgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ub3cgPSBkZWZhdWx0RGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKGRlZmF1bHREYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbm93O1xuICB9XG4gIHByaXZhdGUgX25vdzogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2dldEFsbER1cmF0aW9uKGxlZ3M6IFB0UmlkZUxlZ1tdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbGVncz8ucmVkdWNlKChzdW06IG51bWJlciwgbGVnKSA9PiB7XG4gICAgICBjb25zdCBhcnJpdmFsTm9UeiA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmFycml2YWw/LnRpbWUpO1xuICAgICAgY29uc3QgZGVwYXJ0dXJlTm9UeiA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZT8udGltZSk7XG4gICAgICBpZiAoYXJyaXZhbE5vVHogJiYgZGVwYXJ0dXJlTm9Ueikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHN1bSArXG4gICAgICAgICAgZGlmZmVyZW5jZUluTWludXRlcyhcbiAgICAgICAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmFycml2YWwudGltZSkhLFxuICAgICAgICAgICAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlLnRpbWUpISxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNBbGxDYW5jZWxsZWQobGVnczogUHRSaWRlTGVnW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGVncz8uZXZlcnkoKGxlZykgPT4gbGVnPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LmNhbmNlbGxlZCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZWxhdGl2ZUR1cmF0aW9uKGxlZ3M6IFB0UmlkZUxlZ1tdLCBsZWc6IFB0UmlkZUxlZyk6IG51bWJlciB7XG4gICAgY29uc3QgYXJyaXZhbE5vVHogPSByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsPy50aW1lKTtcbiAgICBjb25zdCBkZXBhcnR1cmVOb1R6ID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlPy50aW1lKTtcbiAgICBpZiAoYXJyaXZhbE5vVHogJiYgZGVwYXJ0dXJlTm9Ueikge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBkaWZmZXJlbmNlSW5NaW51dGVzKFxuICAgICAgICByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsLnRpbWUpISxcbiAgICAgICAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlLnRpbWUpISxcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxEdXJhdGlvbnMgPSB0aGlzLl9nZXRBbGxEdXJhdGlvbihsZWdzKTtcblxuICAgICAgaWYgKGFsbER1cmF0aW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMTAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKGR1cmF0aW9uIC8gYWxsRHVyYXRpb25zKSAqIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQcm9ncmVzcyhub3c6IERhdGUsIHN0YXJ0PzogVGltZSwgZW5kPzogVGltZSk6IG51bWJlciB7XG4gICAgaWYgKCFzdGFydD8udGltZSB8fCAhZW5kPy50aW1lKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFdpdGhEZWxheSA9IGFkZE1pbnV0ZXMoc3RhcnQudGltZSwgc3RhcnQuZGVsYXkgPz8gMCk7XG4gICAgY29uc3QgZW5kV2l0aERlbGF5ID0gYWRkTWludXRlcyhlbmQudGltZSwgZW5kLmRlbGF5ID8/IDApO1xuICAgIGNvbnN0IHRvdGFsID0gZGlmZmVyZW5jZUluTWludXRlcyhlbmRXaXRoRGVsYXksIHN0YXJ0V2l0aERlbGF5KTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMobm93LCBzdGFydFdpdGhEZWxheSk7XG5cbiAgICByZXR1cm4gdG90YWwgJiYgKHByb2dyZXNzIC8gdG90YWwpICogMTAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3RhdHVzKG5vdzogRGF0ZSwgc3RhcnQ/OiBUaW1lLCBlbmQ/OiBUaW1lKTogU3RhdHVzIHtcbiAgICBjb25zdCBzdGFydFdpdGhEZWxheSA9IHN0YXJ0ICYmIHN0YXJ0LnRpbWUgJiYgYWRkTWludXRlcyhzdGFydC50aW1lLCBzdGFydC5kZWxheSA/PyAwKTtcbiAgICBjb25zdCBlbmRXaXRoRGVsYXkgPSBlbmQgJiYgZW5kLnRpbWUgJiYgYWRkTWludXRlcyhlbmQudGltZSwgZW5kLmRlbGF5ID8/IDApO1xuXG4gICAgaWYgKFxuICAgICAgc3RhcnRXaXRoRGVsYXkgJiZcbiAgICAgIGlzQmVmb3JlKHN0YXJ0V2l0aERlbGF5LCBub3cpICYmXG4gICAgICBlbmRXaXRoRGVsYXkgJiZcbiAgICAgIGlzQWZ0ZXIoZW5kV2l0aERlbGF5LCBub3cpXG4gICAgKSB7XG4gICAgICByZXR1cm4gJ3Byb2dyZXNzJztcbiAgICB9IGVsc2UgaWYgKGVuZFdpdGhEZWxheSAmJiBpc0JlZm9yZShlbmRXaXRoRGVsYXksIG5vdykpIHtcbiAgICAgIHJldHVybiAncGFzdCc7XG4gICAgfVxuICAgIHJldHVybiAnZnV0dXJlJztcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlclBvc2l0aW9uKG5vdzogRGF0ZSwgc3RhcnQ/OiBUaW1lLCBlbmQ/OiBUaW1lKTogVGVtcGxhdGVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMuX2dldFByb2dyZXNzKG5vdywgc3RhcnQsIGVuZCk7XG4gICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA8IDAgJiYgY3VycmVudFBvc2l0aW9uID4gMTAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgc3RhdHVzU3R5bGUgPSAoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zYmItcGVhcmwtY2hhaW4tc3RhdHVzLXBvc2l0aW9uJzogYCR7Y3VycmVudFBvc2l0aW9ufSVgLFxuICAgICAgICAuLi4oY3VycmVudFBvc2l0aW9uID49IDUwID8geyB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKC0xMDAlKWAgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IHRoaXMuZGlzYWJsZUFuaW1hdGlvbiA/ICdzYmItcGVhcmwtY2hhaW5fX3Bvc2l0aW9uLS1uby1hbmltYXRpb24nIDogJyc7XG5cbiAgICByZXR1cm4gaHRtbGA8c3BhblxuICAgICAgc3R5bGU9JHtzdHlsZU1hcChzdGF0dXNTdHlsZSgpKX1cbiAgICAgIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19wb3NpdGlvbiAke2FuaW1hdGlvbn1cIlxuICAgID48L3NwYW4+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IG5vdyA9IHRoaXMubm93ID8/IG5ldyBEYXRlKCk7XG5cbiAgICBjb25zdCByaWRlTGVnczogUHRSaWRlTGVnW10gPSB0aGlzLmxlZ3M/LmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSkgYXMgUHRSaWRlTGVnW107XG5cbiAgICBjb25zdCBkZXBhcnR1cmVUaW1lID1cbiAgICAgIHJpZGVMZWdzPy5sZW5ndGggJiYgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhyaWRlTGVnc1swXT8uZGVwYXJ0dXJlPy50aW1lKTtcbiAgICBjb25zdCBkZXBhcnR1cmVXaXRoRGVsYXkgPSBkZXBhcnR1cmVUaW1lICYmIHtcbiAgICAgIHRpbWU6IGRlcGFydHVyZVRpbWUsXG4gICAgICBkZWxheTogcmlkZUxlZ3NbMF0uZGVwYXJ0dXJlLmRlbGF5ID8/IDAsXG4gICAgfTtcblxuICAgIGNvbnN0IGFycml2YWxUaW1lID1cbiAgICAgIHJpZGVMZWdzPy5sZW5ndGggJiZcbiAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcocmlkZUxlZ3NbcmlkZUxlZ3MubGVuZ3RoIC0gMV0uYXJyaXZhbD8udGltZSk7XG4gICAgY29uc3QgYXJyaXZhbFRpbWVEZWxheSA9IGFycml2YWxUaW1lICYmIHtcbiAgICAgIHRpbWU6IGFycml2YWxUaW1lLFxuICAgICAgZGVsYXk6IHJpZGVMZWdzW3JpZGVMZWdzLmxlbmd0aCAtIDFdPy5hcnJpdmFsLmRlbGF5ID8/IDAsXG4gICAgfTtcblxuICAgIGNvbnN0IGRlcGFydHVyZU5vdFNlcnZpY2VkID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIHJpZGVMZWdzICYmXG4gICAgICAgIHJpZGVMZWdzWzBdPy5zZXJ2aWNlSm91cm5leT8uc3RvcFBvaW50cyAmJlxuICAgICAgICByaWRlTGVnc1swXT8uc2VydmljZUpvdXJuZXk/LnN0b3BQb2ludHNbMF0uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCdcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluLS1kZXBhcnR1cmUtc2tpcHBlZCdcbiAgICAgICAgOiAnJztcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgYXJyaXZhbE5vdFNlcnZpY2VkID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgbGFzdExlZyA9IHJpZGVMZWdzICYmIHJpZGVMZWdzW3JpZGVMZWdzLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3Qgc3RvcHMgPSBsYXN0TGVnICYmIGxhc3RMZWcuc2VydmljZUpvdXJuZXk/LnN0b3BQb2ludHM7XG5cbiAgICAgIHJldHVybiBzdG9wcyAmJiBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXS5zdG9wU3RhdHVzID09PSAnTk9UX1NFUlZJQ0VEJ1xuICAgICAgICA/ICdzYmItcGVhcmwtY2hhaW4tLWFycml2YWwtc2tpcHBlZCdcbiAgICAgICAgOiAnJztcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlQ2FuY2VsQ2xhc3MgPSAoKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gcmlkZUxlZ3MgJiYgcmlkZUxlZ3NbMF0/LnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8uY2FuY2VsbGVkXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLWRpc3J1cHRpb24nXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGFycml2YWxDYW5jZWxDbGFzcyA9ICgoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiByaWRlTGVncyAmJiByaWRlTGVnc1tyaWRlTGVncy5sZW5ndGggLSAxXT8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5jYW5jZWxsZWRcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluLS1hcnJpdmFsLWRpc3J1cHRpb24nXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IHN0YXR1cyA9XG4gICAgICBkZXBhcnR1cmVXaXRoRGVsYXkgJiZcbiAgICAgIGFycml2YWxUaW1lRGVsYXkgJiZcbiAgICAgIHRoaXMuX2dldFN0YXR1cyhub3csIGRlcGFydHVyZVdpdGhEZWxheSwgYXJyaXZhbFRpbWVEZWxheSk7XG5cbiAgICBjb25zdCBzdGF0dXNDbGFzc0RlcGFydHVyZSA9XG4gICAgICByaWRlTGVncyAmJiBzdGF0dXMgJiYgIWRlcGFydHVyZUNhbmNlbENsYXNzID8gJ3NiYi1wZWFybC1jaGFpbl9fYnVsbGV0LS0nICsgc3RhdHVzIDogJyc7XG5cbiAgICBjb25zdCBzdGF0dXNDbGFzc0Fycml2YWwgPVxuICAgICAgcmlkZUxlZ3MgJiYgc3RhdHVzICYmICFhcnJpdmFsQ2FuY2VsQ2xhc3NcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluX19idWxsZXQtLScgKyB0aGlzLl9nZXRTdGF0dXMobm93LCB1bmRlZmluZWQsIGFycml2YWxUaW1lRGVsYXkpXG4gICAgICAgIDogJyc7XG5cbiAgICBpZiAodGhpcy5faXNBbGxDYW5jZWxsZWQocmlkZUxlZ3MpKSB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1wZWFybC1jaGFpblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19idWxsZXQgc2JiLXBlYXJsLWNoYWluLS1kZXBhcnR1cmUtZGlzcnVwdGlvblwiPjwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19sZWcgc2JiLXBlYXJsLWNoYWluX19sZWctLWRpc3J1cHRpb25cIj48L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0IHNiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLWRpc3J1cHRpb25cIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0ICR7c3RhdHVzQ2xhc3NEZXBhcnR1cmV9ICR7ZGVwYXJ0dXJlTm90U2VydmljZWR9ICR7ZGVwYXJ0dXJlQ2FuY2VsQ2xhc3N9XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgJHtyaWRlTGVncz8ubWFwKChsZWc6IFB0UmlkZUxlZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgc3RvcFBvaW50cywgc2VydmljZUFsdGVyYXRpb24gfSA9IGxlZz8uc2VydmljZUpvdXJuZXkgfHwge307XG5cbiAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2dldFJlbGF0aXZlRHVyYXRpb24ocmlkZUxlZ3MsIGxlZyk7XG4gICAgICAgICAgY29uc3QgZGVwYXJ0dXJlID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlPy50aW1lKTtcbiAgICAgICAgICBjb25zdCBhcnJpdmFsID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuYXJyaXZhbD8udGltZSk7XG5cbiAgICAgICAgICBjb25zdCBpc0Fycml2YWxOb3RTZXJ2aWNlZCA9XG4gICAgICAgICAgICBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbc3RvcFBvaW50cy5sZW5ndGggLSAxXT8uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCc7XG4gICAgICAgICAgY29uc3QgaXNBcnJpdmFsUGxhbm5lZCA9XG4gICAgICAgICAgICBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbc3RvcFBvaW50cy5sZW5ndGggLSAxXT8uc3RvcFN0YXR1cyA9PT0gJ1BMQU5ORUQnO1xuICAgICAgICAgIGNvbnN0IGlzRGVwYXJ0dXJlTm90U2VydmljZWQgPSBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbMF0/LnN0b3BTdGF0dXMgPT09ICdOT1RfU0VSVklDRUQnO1xuXG4gICAgICAgICAgY29uc3Qgc3RvcFBvaW50c0JlZm9yZSA9IGluZGV4ID4gMCAmJiByaWRlTGVnc1tpbmRleCAtIDFdLnNlcnZpY2VKb3VybmV5LnN0b3BQb2ludHM7XG4gICAgICAgICAgY29uc3QgaXNCZWZvcmVMZWdBcnJpdmFsTm90U2VydmljZWQgPVxuICAgICAgICAgICAgc3RvcFBvaW50c0JlZm9yZSAmJlxuICAgICAgICAgICAgc3RvcFBvaW50c0JlZm9yZVtzdG9wUG9pbnRzQmVmb3JlLmxlbmd0aCAtIDFdPy5zdG9wU3RhdHVzID09PSAnTk9UX1NFUlZJQ0VEJztcblxuICAgICAgICAgIGNvbnN0IHNraXBwZWRMZWcgPVxuICAgICAgICAgICAgaXNBcnJpdmFsTm90U2VydmljZWQgfHwgKGlzRGVwYXJ0dXJlTm90U2VydmljZWQgJiYgaXNBcnJpdmFsUGxhbm5lZClcbiAgICAgICAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluX19sZWctLXNraXBwZWQnXG4gICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgY29uc3QgZGVwYXJ0dXJlU2tpcHBlZEJ1bGxldCA9XG4gICAgICAgICAgICBpc0RlcGFydHVyZU5vdFNlcnZpY2VkIHx8IGlzQmVmb3JlTGVnQXJyaXZhbE5vdFNlcnZpY2VkXG4gICAgICAgICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbl9fc3RvcC0tZGVwYXJ0dXJlLXNraXBwZWQnXG4gICAgICAgICAgICAgIDogJyc7XG5cbiAgICAgICAgICBjb25zdCBjYW5jZWxsZWQgPSBzZXJ2aWNlQWx0ZXJhdGlvbj8uY2FuY2VsbGVkID8gJ3NiYi1wZWFybC1jaGFpbl9fbGVnLS1kaXNydXB0aW9uJyA6ICcnO1xuXG4gICAgICAgICAgY29uc3QgbGVnRGVwYXJ0dXJlV2l0aERlbGF5ID0geyB0aW1lOiBkZXBhcnR1cmUsIGRlbGF5OiBsZWcuZGVwYXJ0dXJlPy5kZWxheSA/PyAwIH07XG4gICAgICAgICAgY29uc3QgbGVnQXJyaXZhbFdpdGhEZWxheSA9IHsgdGltZTogYXJyaXZhbCwgZGVsYXk6IGxlZy5hcnJpdmFsPy5kZWxheSA/PyAwIH07XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fZ2V0U3RhdHVzKG5vdywgbGVnRGVwYXJ0dXJlV2l0aERlbGF5LCBsZWdBcnJpdmFsV2l0aERlbGF5KTtcblxuICAgICAgICAgIGNvbnN0IGxlZ1N0YXR1cyA9ICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWcgJiYgJ3NiYi1wZWFybC1jaGFpbl9fbGVnLS0nICsgc3RhdHVzO1xuICAgICAgICAgIGNvbnN0IGxlZ1N0eWxlID0gKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgJy0tc2JiLXBlYXJsLWNoYWluLWxlZy13aWR0aCc6IGAke2R1cmF0aW9ufSVgLFxuICAgICAgICAgICAgICAuLi4oc3RhdHVzID09PSAncHJvZ3Jlc3MnICYmICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWdcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgJy0tc2JiLXBlYXJsLWNoYWluLWxlZy1zdGF0dXMnOiBgJHt0aGlzLl9nZXRQcm9ncmVzcyhub3csIGxlZ0RlcGFydHVyZVdpdGhEZWxheSwgbGVnQXJyaXZhbFdpdGhEZWxheSl9JWAsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gaHRtbGAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX2xlZyAke2xlZ1N0YXR1cyB8fCAnJ30gJHtjYW5jZWxsZWR9ICR7c2tpcHBlZExlZ31cIlxuICAgICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcChsZWdTdHlsZSgpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAke2luZGV4ID4gMCAmJiBpbmRleCA8IHJpZGVMZWdzLmxlbmd0aFxuICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX3N0b3AgJHtkZXBhcnR1cmVTa2lwcGVkQnVsbGV0fVwiPjwvc3Bhbj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7c3RhdHVzID09PSAncHJvZ3Jlc3MnICYmICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWdcbiAgICAgICAgICAgICAgPyB0aGlzLl9yZW5kZXJQb3NpdGlvbihub3csIGxlZ0RlcGFydHVyZVdpdGhEZWxheSwgbGVnQXJyaXZhbFdpdGhEZWxheSlcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pfVxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19idWxsZXQgJHtzdGF0dXNDbGFzc0Fycml2YWx9ICR7YXJyaXZhbE5vdFNlcnZpY2VkfSAke2Fycml2YWxDYW5jZWxDbGFzc31cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXBlYXJsLWNoYWluJzogU2JiUGVhcmxDaGFpbkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSIsIl9iIiwiX2QiLCJfYyIsIl9lIiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQW9CTyxTQUFTLFFBQVEsTUFBTSxlQUFlO0FBQzNDLFNBQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sYUFBYTtBQUM5QztBQ0ZPLFNBQVMsU0FBUyxNQUFNLGVBQWU7QUFDNUMsU0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxhQUFhO0FBQzlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -10,7 +10,7 @@ export declare class SbbTimetableDurationElement extends LitElement {
10
10
  * individual stories to get an idea of the
11
11
  * structure.
12
12
  */
13
- config: string;
13
+ accessor config: string;
14
14
  private _language;
15
15
  protected render(): TemplateResult;
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"timetable-duration.d.ts","sourceRoot":"","sources":["../../../../src/elements-experimental/timetable-duration/timetable-duration.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1D,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAKvC;;GAEG;AACH,qBACa,2BAA4B,SAAQ,UAAU;IACzD,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD;;;;;OAKG;IACgB,MAAM,EAAG,MAAM,CAAC;IAEnC,OAAO,CAAC,SAAS,CAAmC;cAEjC,MAAM,IAAI,cAAc;CAqC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,wBAAwB,EAAE,2BAA2B,CAAC;KACvD;CACF"}
1
+ {"version":3,"file":"timetable-duration.d.ts","sourceRoot":"","sources":["../../../../src/elements-experimental/timetable-duration/timetable-duration.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC1D,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAKvC;;GAEG;AACH,qBAEM,2BAA4B,SAAQ,UAAU;IAClD,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD;;;;;OAKG;IACH,SAEgB,MAAM,EAAE,MAAM,CAAM;IAEpC,OAAO,CAAC,SAAS,CAAmC;cAEjC,MAAM,IAAI,cAAc;CAqC5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,wBAAwB,EAAE,2BAA2B,CAAC;KACvD;CACF"}