@koobiq/components 18.34.0 → 18.35.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 (139) hide show
  1. package/button/_button-theme.scss +1 -0
  2. package/core/form-field/field-sizing-content.d.ts +21 -0
  3. package/core/form-field/index.d.ts +1 -0
  4. package/core/locales/en-US.d.ts +6 -0
  5. package/core/locales/es-LA.d.ts +6 -0
  6. package/core/locales/fa-IR.d.ts +6 -0
  7. package/core/locales/locale-service.d.ts +42 -0
  8. package/core/locales/pt-BR.d.ts +6 -0
  9. package/core/locales/ru-RU.d.ts +6 -0
  10. package/core/locales/tk-TM.d.ts +6 -0
  11. package/core/locales/zh-CN.d.ts +6 -0
  12. package/core/navbar/index.d.ts +1 -0
  13. package/core/navbar/rectangle-item.d.ts +14 -0
  14. package/core/option/option.d.ts +3 -1
  15. package/core/pop-up/pop-up-trigger.d.ts +2 -0
  16. package/core/public-api.d.ts +1 -0
  17. package/core/utils/dom.d.ts +9 -0
  18. package/core/utils/index.d.ts +1 -0
  19. package/core/utils/utils.d.ts +4 -0
  20. package/datepicker/datepicker-input.directive.d.ts +18 -7
  21. package/dropdown/dropdown-item.scss +1 -0
  22. package/dropdown/dropdown-trigger.directive.d.ts +7 -1
  23. package/esm2022/breadcrumbs/breadcrumbs.mjs +2 -2
  24. package/esm2022/button/button.component.mjs +2 -2
  25. package/esm2022/core/form-field/field-sizing-content.mjs +114 -0
  26. package/esm2022/core/form-field/index.mjs +2 -1
  27. package/esm2022/core/locales/en-US.mjs +7 -1
  28. package/esm2022/core/locales/es-LA.mjs +7 -1
  29. package/esm2022/core/locales/fa-IR.mjs +7 -1
  30. package/esm2022/core/locales/pt-BR.mjs +7 -1
  31. package/esm2022/core/locales/ru-RU.mjs +7 -1
  32. package/esm2022/core/locales/tk-TM.mjs +7 -1
  33. package/esm2022/core/locales/zh-CN.mjs +7 -1
  34. package/esm2022/core/navbar/index.mjs +2 -0
  35. package/esm2022/core/navbar/rectangle-item.mjs +39 -0
  36. package/esm2022/core/option/option.mjs +8 -4
  37. package/esm2022/core/pop-up/pop-up-trigger.mjs +5 -1
  38. package/esm2022/core/public-api.mjs +2 -1
  39. package/esm2022/core/utils/dom.mjs +14 -0
  40. package/esm2022/core/utils/index.mjs +2 -1
  41. package/esm2022/core/utils/utils.mjs +9 -1
  42. package/esm2022/core/version.mjs +2 -2
  43. package/esm2022/datepicker/calendar-header.component.mjs +1 -1
  44. package/esm2022/datepicker/datepicker-input.directive.mjs +24 -21
  45. package/esm2022/dropdown/dropdown-item.component.mjs +2 -2
  46. package/esm2022/dropdown/dropdown-trigger.directive.mjs +30 -10
  47. package/esm2022/file-upload/file-upload.mjs +6 -1
  48. package/esm2022/file-upload/multiple-file-upload.component.mjs +12 -7
  49. package/esm2022/file-upload/single-file-upload.component.mjs +14 -7
  50. package/esm2022/filter-bar/filter-bar.mjs +3 -3
  51. package/esm2022/filter-bar/filters.mjs +16 -4
  52. package/esm2022/filter-bar/pipe-add.mjs +2 -2
  53. package/esm2022/filter-bar/pipes/pipe-date.mjs +2 -2
  54. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +2 -2
  55. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +9 -9
  56. package/esm2022/filter-bar/pipes/pipe-select.mjs +2 -2
  57. package/esm2022/filter-bar/pipes/pipe-text.mjs +2 -2
  58. package/esm2022/form-field/fieldset.mjs +2 -2
  59. package/esm2022/form-field/form-field.mjs +2 -2
  60. package/esm2022/navbar-ic/index.mjs +2 -0
  61. package/esm2022/navbar-ic/koobiq-components-navbar-ic.mjs +5 -0
  62. package/esm2022/navbar-ic/navbar-ic-header.mjs +58 -0
  63. package/esm2022/navbar-ic/navbar-ic-item.mjs +399 -0
  64. package/esm2022/navbar-ic/navbar-ic.animation.mjs +9 -0
  65. package/esm2022/navbar-ic/navbar-ic.mjs +281 -0
  66. package/esm2022/navbar-ic/navbar-ic.module.mjs +74 -0
  67. package/esm2022/navbar-ic/public-api.mjs +5 -0
  68. package/esm2022/popover/popover-confirm.component.mjs +3 -3
  69. package/esm2022/popover/popover.component.mjs +10 -5
  70. package/esm2022/select/select.component.mjs +2 -2
  71. package/esm2022/tags/tag-list.component.mjs +24 -5
  72. package/esm2022/tags/tag.component.mjs +231 -22
  73. package/esm2022/tags/tag.module.mjs +16 -6
  74. package/esm2022/tooltip/tooltip.component.mjs +3 -3
  75. package/esm2022/tree-select/tree-select.component.mjs +2 -2
  76. package/fesm2022/koobiq-components-breadcrumbs.mjs +1 -1
  77. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-button.mjs +2 -2
  79. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-core.mjs +243 -31
  81. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-datepicker.mjs +24 -22
  83. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-dropdown.mjs +31 -11
  85. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-file-upload.mjs +26 -9
  87. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-filter-bar.mjs +29 -17
  89. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-form-field.mjs +4 -4
  91. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-navbar-ic.mjs +800 -0
  93. package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -0
  94. package/fesm2022/koobiq-components-popover.mjs +11 -6
  95. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-select.mjs +1 -1
  97. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-tags.mjs +271 -34
  99. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-tooltip.mjs +2 -2
  101. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-tree-select.mjs +1 -1
  103. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  104. package/file-upload/file-upload.d.ts +5 -2
  105. package/file-upload/multiple-file-upload.component.d.ts +3 -1
  106. package/file-upload/single-file-upload.component.d.ts +3 -1
  107. package/filter-bar/_filter-bar-theme.scss +2 -2
  108. package/filter-bar/filters.d.ts +1 -0
  109. package/form-field/form-field.scss +7 -1
  110. package/navbar-ic/_navbar-ic-theme.scss +81 -0
  111. package/navbar-ic/index.d.ts +1 -0
  112. package/navbar-ic/navbar-ic-divider.scss +7 -0
  113. package/navbar-ic/navbar-ic-header.d.ts +18 -0
  114. package/navbar-ic/navbar-ic-header.scss +53 -0
  115. package/navbar-ic/navbar-ic-item.d.ts +125 -0
  116. package/navbar-ic/navbar-ic-item.scss +96 -0
  117. package/navbar-ic/navbar-ic-tokens.scss +22 -0
  118. package/navbar-ic/navbar-ic.animation.d.ts +2 -0
  119. package/navbar-ic/navbar-ic.d.ts +103 -0
  120. package/navbar-ic/navbar-ic.module.d.ts +14 -0
  121. package/navbar-ic/navbar-ic.scss +32 -0
  122. package/navbar-ic/public-api.d.ts +4 -0
  123. package/package.json +10 -4
  124. package/popover/_popover-theme.scss +6 -2
  125. package/popover/popover-tokens.scss +2 -0
  126. package/popover/popover.component.d.ts +4 -1
  127. package/prebuilt-themes/dark-theme.css +1 -1
  128. package/prebuilt-themes/light-theme.css +1 -1
  129. package/prebuilt-themes/theme.css +1 -1
  130. package/schematics/ng-add/index.js +3 -3
  131. package/tags/_tag-theme.scss +10 -1
  132. package/tags/tag-list.component.d.ts +10 -2
  133. package/tags/tag-list.scss +5 -0
  134. package/tags/tag.component.d.ts +78 -8
  135. package/tags/tag.module.d.ts +1 -1
  136. package/tags/tag.scss +18 -0
  137. package/textarea/textarea-tokens.scss +1 -1
  138. package/tooltip/_tooltip-theme.scss +9 -2
  139. package/tooltip/tooltip-tokens.scss +2 -0
@@ -36,6 +36,7 @@
36
36
  &.kbq-disabled {
37
37
  color: var(--kbq-#{$base-path}-states-disabled-foreground);
38
38
  background: var(--kbq-#{$base-path}-states-disabled-background);
39
+ border-color: var(--kbq-#{$base-path}-states-disabled-border);
39
40
 
40
41
  @include _icon(
41
42
  var(--kbq-#{$base-path}-states-disabled-left-icon),
@@ -0,0 +1,21 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Emulates [`field-sizing: content`](https://developer.mozilla.org/en-US/docs/Web/CSS/field-sizing) CSS property for
4
+ * browsers that do not support it natively.
5
+ *
6
+ * @docs-private
7
+ */
8
+ export declare class KbqFieldSizingContent {
9
+ private readonly element;
10
+ private readonly renderer;
11
+ private readonly window;
12
+ private readonly document;
13
+ private readonly destroyRef;
14
+ constructor();
15
+ private emulate;
16
+ private setupWidth;
17
+ private createRuler;
18
+ private calculateWidth;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqFieldSizingContent, never>;
20
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqFieldSizingContent, "[kbqFieldSizingContent]", ["kbqFieldSizingContent"], {}, {}, never, never, true, never>;
21
+ }
@@ -1 +1,2 @@
1
+ export * from './field-sizing-content';
1
2
  export * from './form-field-ref';
@@ -92,4 +92,10 @@ export declare const enUSLocaleData: {
92
92
  openText: string;
93
93
  closeText: string;
94
94
  };
95
+ navbarIc: {
96
+ toggle: {
97
+ pinButton: string;
98
+ collapseButton: string;
99
+ };
100
+ };
95
101
  };
@@ -91,4 +91,10 @@ export declare const esLALocaleData: {
91
91
  openText: string;
92
92
  closeText: string;
93
93
  };
94
+ navbarIc: {
95
+ toggle: {
96
+ pinButton: string;
97
+ collapseButton: string;
98
+ };
99
+ };
94
100
  };
@@ -91,4 +91,10 @@ export declare const faIRLocaleData: {
91
91
  openText: string;
92
92
  closeText: string;
93
93
  };
94
+ navbarIc: {
95
+ toggle: {
96
+ pinButton: string;
97
+ collapseButton: string;
98
+ };
99
+ };
94
100
  };
@@ -136,6 +136,12 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
136
136
  openText: string;
137
137
  closeText: string;
138
138
  };
139
+ navbarIc: {
140
+ toggle: {
141
+ pinButton: string;
142
+ collapseButton: string;
143
+ };
144
+ };
139
145
  };
140
146
  'zh-CN': {
141
147
  formatters: {
@@ -263,6 +269,12 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
263
269
  openText: string;
264
270
  closeText: string;
265
271
  };
272
+ navbarIc: {
273
+ toggle: {
274
+ pinButton: string;
275
+ collapseButton: string;
276
+ };
277
+ };
266
278
  };
267
279
  'es-LA': {
268
280
  formatters: {
@@ -395,6 +407,12 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
395
407
  openText: string;
396
408
  closeText: string;
397
409
  };
410
+ navbarIc: {
411
+ toggle: {
412
+ pinButton: string;
413
+ collapseButton: string;
414
+ };
415
+ };
398
416
  };
399
417
  'pt-BR': {
400
418
  formatters: {
@@ -523,6 +541,12 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
523
541
  openText: string;
524
542
  closeText: string;
525
543
  };
544
+ navbarIc: {
545
+ toggle: {
546
+ pinButton: string;
547
+ collapseButton: string;
548
+ };
549
+ };
526
550
  };
527
551
  'ru-RU': {
528
552
  formatters: {
@@ -657,6 +681,12 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
657
681
  openText: string;
658
682
  closeText: string;
659
683
  };
684
+ navbarIc: {
685
+ toggle: {
686
+ pinButton: string;
687
+ collapseButton: string;
688
+ };
689
+ };
660
690
  };
661
691
  'fa-IR': {
662
692
  formatters: {
@@ -786,6 +816,12 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
786
816
  openText: string;
787
817
  closeText: string;
788
818
  };
819
+ navbarIc: {
820
+ toggle: {
821
+ pinButton: string;
822
+ collapseButton: string;
823
+ };
824
+ };
789
825
  };
790
826
  'tk-TM': {
791
827
  formatters: {
@@ -915,6 +951,12 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
915
951
  openText: string;
916
952
  closeText: string;
917
953
  };
954
+ navbarIc: {
955
+ toggle: {
956
+ pinButton: string;
957
+ collapseButton: string;
958
+ };
959
+ };
918
960
  };
919
961
  };
920
962
  export declare const KBQ_LOCALE_DATA: InjectionToken<any>;
@@ -91,4 +91,10 @@ export declare const ptBRLocaleData: {
91
91
  openText: string;
92
92
  closeText: string;
93
93
  };
94
+ navbarIc: {
95
+ toggle: {
96
+ pinButton: string;
97
+ collapseButton: string;
98
+ };
99
+ };
94
100
  };
@@ -92,4 +92,10 @@ export declare const ruRULocaleData: {
92
92
  openText: string;
93
93
  closeText: string;
94
94
  };
95
+ navbarIc: {
96
+ toggle: {
97
+ pinButton: string;
98
+ collapseButton: string;
99
+ };
100
+ };
95
101
  };
@@ -92,4 +92,10 @@ export declare const tkTMLocaleData: {
92
92
  openText: string;
93
93
  closeText: string;
94
94
  };
95
+ navbarIc: {
96
+ toggle: {
97
+ pinButton: string;
98
+ collapseButton: string;
99
+ };
100
+ };
95
101
  };
@@ -91,4 +91,10 @@ export declare const zhCNLocaleData: {
91
91
  openText: string;
92
92
  closeText: string;
93
93
  };
94
+ navbarIc: {
95
+ toggle: {
96
+ pinButton: string;
97
+ collapseButton: string;
98
+ };
99
+ };
94
100
  };
@@ -0,0 +1 @@
1
+ export * from './rectangle-item';
@@ -0,0 +1,14 @@
1
+ import { Subject } from 'rxjs';
2
+ import * as i0 from "@angular/core";
3
+ export declare class KbqRectangleItem {
4
+ protected readonly isBrowser: boolean;
5
+ protected readonly nativeElement: any;
6
+ private readonly window;
7
+ readonly state: Subject<void>;
8
+ get collapsed(): boolean;
9
+ set collapsed(value: boolean);
10
+ private _collapsed;
11
+ getOuterElementWidth(): number;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqRectangleItem, never>;
13
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqRectangleItem, never, never, {}, {}, never, never, true, never>;
14
+ }
@@ -78,6 +78,8 @@ export declare class KbqOption extends KbqOptionBase implements AfterViewChecked
78
78
  * select's trigger.
79
79
  */
80
80
  get viewValue(): string;
81
+ set viewValue(value: string);
82
+ private _viewValue;
81
83
  /** Whether the wrapping component is in multiple selection mode. */
82
84
  get multiple(): boolean;
83
85
  get id(): string;
@@ -127,7 +129,7 @@ export declare class KbqOption extends KbqOptionBase implements AfterViewChecked
127
129
  getTabIndex(): string;
128
130
  getHostElement(): HTMLElement;
129
131
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqOption, [null, null, { optional: true; }, { optional: true; }]>;
130
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqOption, "kbq-option", ["kbqOption"], { "value": { "alias": "value"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "userSelect": { "alias": "userSelect"; "required": false; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "onSelectionChange": "onSelectionChange"; }, never, ["kbq-pseudo-checkbox", "*"], false, never>;
132
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqOption, "kbq-option", ["kbqOption"], { "value": { "alias": "value"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "userSelect": { "alias": "userSelect"; "required": false; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; }; "viewValue": { "alias": "viewValue"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "onSelectionChange": "onSelectionChange"; }, never, ["kbq-pseudo-checkbox", "*"], false, never>;
131
133
  static ngAcceptInputType_selectable: unknown;
132
134
  static ngAcceptInputType_userSelect: unknown;
133
135
  }
@@ -50,6 +50,8 @@ export declare abstract class KbqPopUpTrigger<T> implements OnInit, OnDestroy {
50
50
  protected strategy: FlexibleConnectedPositionStrategy;
51
51
  /** Hide pop-up with timeout. Need if you want to show pop-up after leaving trigger */
52
52
  protected hideWithTimeout: boolean;
53
+ /** prevents closure by any event */
54
+ protected preventClose: boolean;
53
55
  abstract updateClassMap(newPlacement?: string): void;
54
56
  abstract updateData(): void;
55
57
  abstract closingActions(): Observable<any>;
@@ -8,6 +8,7 @@ export * from './forms/index';
8
8
  export * from './highlight/index';
9
9
  export * from './line/line';
10
10
  export * from './locales/index';
11
+ export * from './navbar/index';
11
12
  export * from './option/index';
12
13
  export * from './overlay/overlay-position-map';
13
14
  export * from './pop-up/index';
@@ -0,0 +1,9 @@
1
+ import { ElementRef } from '@angular/core';
2
+ /**
3
+ * Injects the ElementRef for the current component.
4
+ */
5
+ export declare const kbqInjectElementRef: <T = HTMLElement>() => ElementRef<T>;
6
+ /**
7
+ * Injects the native element for the current component.
8
+ */
9
+ export declare const kbqInjectNativeElement: <T = HTMLElement>() => T;
@@ -1 +1,2 @@
1
+ export * from './dom';
1
2
  export * from './public-api';
@@ -1,4 +1,8 @@
1
1
  export declare function isBoolean(value: unknown): value is boolean;
2
+ /** Whether the value is undefined. */
3
+ export declare const isUndefined: (value: unknown) => value is undefined;
4
+ /** Whether the value is null. */
5
+ export declare const isNull: (value: unknown) => value is null;
2
6
  /**
3
7
  * Will be removed in the next major release
4
8
  *
@@ -1,6 +1,6 @@
1
- import { AfterContentInit, DoCheck, ElementRef, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
1
+ import { AfterContentInit, DoCheck, ElementRef, EventEmitter, InjectionToken, OnDestroy, Renderer2 } from '@angular/core';
2
2
  import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
3
- import { DateAdapter, ErrorStateMatcher, KbqDateFormats, KbqLocaleService } from '@koobiq/components/core';
3
+ import { DateAdapter, ErrorStateMatcher, KbqDateFormats } from '@koobiq/components/core';
4
4
  import { KbqFormFieldControl } from '@koobiq/components/form-field';
5
5
  import { KbqWarningTooltipTrigger } from '@koobiq/components/tooltip';
6
6
  import { Subject } from 'rxjs';
@@ -12,6 +12,15 @@ export declare const MAX_YEAR = 9999;
12
12
  export declare const KBQ_DATEPICKER_VALUE_ACCESSOR: any;
13
13
  /** @docs-private */
14
14
  export declare const KBQ_DATEPICKER_VALIDATORS: any;
15
+ /** default configuration of datepicker */
16
+ /** @docs-private */
17
+ export declare const KBQ_DATEPICKER_DEFAULT_CONFIGURATION: {
18
+ placeholder: string;
19
+ dateInput: string;
20
+ };
21
+ /** Injection Token for providing configuration of datepicker */
22
+ /** @docs-private */
23
+ export declare const KBQ_DATEPICKER_CONFIGURATION: InjectionToken<unknown>;
15
24
  /**
16
25
  * An event used for datepicker input and change events. We don't always have access to a native
17
26
  * input or change event because the event may have been triggered by the user clicking on the
@@ -36,7 +45,10 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
36
45
  private readonly renderer;
37
46
  readonly adapter: DateAdapter<D>;
38
47
  private readonly dateFormats;
39
- private localeService;
48
+ /** @docs-private */
49
+ protected readonly localeService: import("@koobiq/components/core").KbqLocaleService | null;
50
+ protected readonly externalConfiguration: unknown;
51
+ protected configuration: any;
40
52
  readonly stateChanges: Subject<void>;
41
53
  controlType: string;
42
54
  focused: boolean;
@@ -102,7 +114,6 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
102
114
  private control;
103
115
  private readonly uid;
104
116
  private datepickerSubscription;
105
- private localeSubscription;
106
117
  /** Whether the last value set on the input was valid. */
107
118
  private lastValueValid;
108
119
  /** The combined form control validator for this input. */
@@ -112,9 +123,8 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
112
123
  private secondDigit;
113
124
  private thirdDigit;
114
125
  private separatorPositions;
115
- private usePlaceholderFromInput;
116
126
  private errorStateTracker;
117
- constructor(elementRef: ElementRef<HTMLInputElement>, renderer: Renderer2, adapter: DateAdapter<D>, dateFormats: KbqDateFormats, localeService: KbqLocaleService);
127
+ constructor(elementRef: ElementRef<HTMLInputElement>, renderer: Renderer2, adapter: DateAdapter<D>, dateFormats: KbqDateFormats);
118
128
  ngDoCheck(): void;
119
129
  onContainerClick(): void;
120
130
  focus(): void;
@@ -142,6 +152,7 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
142
152
  updateErrorState(): void;
143
153
  private saveTimePart;
144
154
  private updateLocaleParams;
155
+ private initDefaultParams;
145
156
  private setFormat;
146
157
  private updateValue;
147
158
  private isKeyForClose;
@@ -199,6 +210,6 @@ export declare class KbqDatepickerInput<D> implements KbqFormFieldControl<D>, Co
199
210
  private createDate;
200
211
  private createDateTime;
201
212
  private correctCursorPosition;
202
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqDatepickerInput<any>, [null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
213
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqDatepickerInput<any>, [null, null, { optional: true; }, { optional: true; }]>;
203
214
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDatepickerInput<any>, "input[kbqDatepicker], input[kbqCalendar]", ["kbqDatepickerInput"], { "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "kbqDatepicker": { "alias": "kbqDatepicker"; "required": false; }; "kbqCalendar": { "alias": "kbqCalendar"; "required": false; }; "kbqDatepickerFilter": { "alias": "kbqDatepickerFilter"; "required": false; }; "value": { "alias": "value"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "id": { "alias": "id"; "required": false; }; "kbqValidationTooltip": { "alias": "kbqValidationTooltip"; "required": false; }; }, { "incorrectInput": "incorrectInput"; "dateChange": "dateChange"; "dateInput": "dateInput"; }, never, never, false, never>;
204
215
  }
@@ -13,6 +13,7 @@
13
13
 
14
14
  text-align: left;
15
15
  align-items: flex-start;
16
+ text-decoration: none;
16
17
 
17
18
  & > .kbq-icon:first-child:before {
18
19
  align-self: center;
@@ -36,6 +36,10 @@ export declare class KbqDropdownTrigger implements AfterContentInit, OnDestroy {
36
36
  protected readonly isBrowser: boolean;
37
37
  private readonly window;
38
38
  lastDestroyReason: DropdownCloseReason;
39
+ /** Position offset of the dropdown in the X axis. */
40
+ offsetX: number;
41
+ /** Position offset of the dropdown in the Y axis. */
42
+ offsetY: number;
39
43
  /** Data to be passed along to any lazily-rendered content. */
40
44
  data: any;
41
45
  openByArrowDown: boolean;
@@ -134,5 +138,7 @@ export declare class KbqDropdownTrigger implements AfterContentInit, OnDestroy {
134
138
  private getPortal;
135
139
  private getWidth;
136
140
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqDropdownTrigger, [null, null, null, null, { optional: true; }, { optional: true; self: true; }, { optional: true; }, null, null]>;
137
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDropdownTrigger, "[kbqDropdownTriggerFor]", ["kbqDropdownTrigger"], { "data": { "alias": "kbqDropdownTriggerData"; "required": false; }; "openByArrowDown": { "alias": "openByArrowDown"; "required": false; }; "restoreFocus": { "alias": "kbqDropdownTriggerRestoreFocus"; "required": false; }; "dropdown": { "alias": "kbqDropdownTriggerFor"; "required": false; }; }, { "dropdownOpened": "dropdownOpened"; "dropdownClosed": "dropdownClosed"; }, never, never, false, never>;
141
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqDropdownTrigger, "[kbqDropdownTriggerFor]", ["kbqDropdownTrigger"], { "offsetX": { "alias": "offsetX"; "required": false; }; "offsetY": { "alias": "offsetY"; "required": false; }; "data": { "alias": "kbqDropdownTriggerData"; "required": false; }; "openByArrowDown": { "alias": "openByArrowDown"; "required": false; }; "restoreFocus": { "alias": "kbqDropdownTriggerRestoreFocus"; "required": false; }; "dropdown": { "alias": "kbqDropdownTriggerFor"; "required": false; }; }, { "dropdownOpened": "dropdownOpened"; "dropdownClosed": "dropdownClosed"; }, never, never, false, never>;
142
+ static ngAcceptInputType_offsetX: unknown;
143
+ static ngAcceptInputType_offsetY: unknown;
138
144
  }
@@ -209,7 +209,7 @@ export class KbqBreadcrumbs {
209
209
  return item ? item.nativeElement.offsetWidth : 0;
210
210
  }
211
211
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqBreadcrumbs, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
212
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: KbqBreadcrumbs, isStandalone: true, selector: "kbq-breadcrumbs,[kbq-breadcrumbs]", inputs: { firstItemNegativeMargin: ["firstItemNegativeMargin", "firstItemNegativeMargin", booleanAttribute], size: "size", max: "max", disabled: ["disabled", "disabled", booleanAttribute], wrapMode: "wrapMode" }, host: { properties: { "class.kbq-breadcrumbs_compact": "size === \"compact\"", "class.kbq-breadcrumbs_normal": "size === \"normal\"", "class.kbq-breadcrumbs_big": "size === \"big\"", "class.kbq-breadcrumbs_wrap": "wrapMode === \"wrap\"", "class.kbq-breadcrumbs_first-item-negative-margin": "firstItemNegativeMargin", "attr.aria-label": "'breadcrumb'" }, classAttribute: "kbq-breadcrumbs" }, queries: [{ propertyName: "separator", first: true, predicate: KbqBreadcrumbsSeparator, descendants: true, read: TemplateRef }, { propertyName: "items", predicate: i0.forwardRef(() => KbqBreadcrumbItem) }], viewQueries: [{ propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, read: ElementRef }, { propertyName: "overflowItems", predicate: KbqOverflowItem, descendants: true, read: ElementRef }], hostDirectives: [{ directive: i1.RdxRovingFocusGroupDirective }], ngImport: i0, template: "<!--\n@TODO: check when updated to Angular 20.x (#DS-4034)\nresolved SSR issue with official hack https://github.com/angular/angular/issues/50543#issuecomment-1572900259\n-->\n<ng-content />\n@if (items.length < minVisibleItems || wrapMode !== 'auto') {\n @for (item of items; track item; let last = $last) {\n <div class=\"kbq-breadcrumb-item__container\">\n <ng-container *ngTemplateOutlet=\"breadcrumbTemplate; context: { $implicit: item, last: last }\" />\n @if (!last) {\n <ng-container [ngTemplateOutlet]=\"separatorTemplate\" />\n }\n </div>\n }\n} @else {\n <div\n #kbqOverflowItems=\"kbqOverflowItems\"\n kbqOverflowItems\n reverseOverflowOrder\n class=\"layout-align-start-center\"\n [style.max-width.px]=\"maxWidth\"\n >\n <div class=\"kbq-breadcrumb-item__container\" [kbqOverflowItem]=\"0\" [order]=\"items.length\">\n <ng-container *ngTemplateOutlet=\"breadcrumbTemplate; context: { $implicit: items.first, last: false }\" />\n <ng-container [ngTemplateOutlet]=\"separatorTemplate\" />\n </div>\n <!-- @TODO delay rendering for proper elements order (#DS-3334)--->\n @if (true) {\n <div kbqOverflowItemsResult class=\"kbq-breadcrumb-item__container\">\n <button\n kbq-button\n kbqBreadcrumb\n class=\"kbq-breadcrumb__expand\"\n [kbqDropdownTriggerFor]=\"hiddenBreadcrumbsDropdown\"\n [kbqStyle]=\"KbqButtonStyles.Transparent\"\n [openByArrowDown]=\"false\"\n >\n <i kbq-icon=\"kbq-ellipsis-horizontal_16\" [color]=\"KbqComponentColors.ContrastFade\"></i>\n </button>\n <ng-container [ngTemplateOutlet]=\"separatorTemplate\" />\n\n <kbq-dropdown #hiddenBreadcrumbsDropdown=\"kbqDropdown\">\n @for (item of items; track item) {\n @if (kbqOverflowItems.hiddenItemIDs().has($index)) {\n <a class=\"kbq-breadcrumb-item__link-behavior\" [routerLink]=\"item.routerLink?.urlTree\">\n <button kbq-dropdown-item [disabled]=\"item.disabled\">{{ item.text }}</button>\n </a>\n }\n }\n </kbq-dropdown>\n </div>\n }\n @for (item of itemsExcludingEdges; track item; let index = $index) {\n <div class=\"kbq-breadcrumb-item__container\" [kbqOverflowItem]=\"index + 1\">\n <ng-container *ngTemplateOutlet=\"breadcrumbTemplate; context: { $implicit: item, last: false }\" />\n <ng-container [ngTemplateOutlet]=\"separatorTemplate\" />\n </div>\n }\n <div alwaysVisible class=\"kbq-breadcrumb-item__container\" [kbqOverflowItem]=\"items.length - 1\">\n <ng-container *ngTemplateOutlet=\"breadcrumbTemplate; context: { $implicit: items.last, last: true }\" />\n </div>\n </div>\n}\n\n<ng-template #breadcrumbTemplate let-item let-last=\"last\">\n @if (item.customTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"item.customTemplateRef\" />\n } @else {\n <a tabindex=\"-1\" class=\"kbq-breadcrumb-item__link-behavior\" [routerLink]=\"item.routerLink?.urlTree\">\n <button\n kbq-button\n kbq-title\n kbqBreadcrumb\n [attr.aria-current]=\"last ? 'page' : null\"\n [disabled]=\"item.disabled || last\"\n [kbqPlacementPriority]=\"PopUpPlacements.Bottom\"\n [kbqTooltipArrow]=\"false\"\n >\n {{ item.text }}\n </button>\n </a>\n }\n</ng-template>\n\n<ng-template #separatorTemplate>\n @if (separator) {\n <ng-container [ngTemplateOutlet]=\"separator\" />\n } @else {\n <i kbq-icon=\"\" class=\"kbq-breadcrumb__separator\" [color]=\"KbqComponentColors.ContrastFade\">&nbsp;/&nbsp;</i>\n }\n</ng-template>\n", styles: [".kbq-breadcrumbs{display:flex;align-items:center;gap:var(--kbq-breadcrumbs-gap);flex-grow:1}.kbq-breadcrumbs .kbq-overflow-items{padding:1px}.kbq-breadcrumbs .kbq-breadcrumb-item__container{display:inline-flex;align-items:center}.kbq-breadcrumbs.kbq-breadcrumbs_first-item-negative-margin .kbq-overflow-items{margin-left:var(--kbq-breadcrumb-item-negative-margin)}.kbq-breadcrumbs.kbq-breadcrumbs_wrap{flex-wrap:wrap}.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb-item.kbq-button-icon{--kbq-breadcrumb-item-height: var(--kbq-size-xxl)}.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb__expand.kbq-button-icon{--kbq-breadcrumb-item-expand-horizontal-padding: var(--kbq-size-xxs)}.kbq-breadcrumbs.kbq-breadcrumbs_normal .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_normal .kbq-breadcrumb-item.kbq-button-icon{--kbq-button-size-horizontal-padding: var(--kbq-breadcrumb-item-horizontal-padding)}.kbq-breadcrumbs.kbq-breadcrumbs_big .kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_big .kbq-button-icon{--kbq-button-size-height: var(--kbq-breadcrumb-item-height)}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button-icon{--kbq-button-size-height: var(--kbq-breadcrumb-item-height);--kbq-button-size-horizontal-padding: var(--kbq-breadcrumb-item-horizontal-padding);--kbq-button-size-border-radius: var(--kbq-breadcrumb-item-border-radius)}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon{--kbq-button-icon-size-horizontal-padding: var(--kbq-breadcrumb-item-expand-horizontal-padding)}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button-icon{--kbq-button-transparent-contrast-fade-on-foreground: var(--kbq-foreground-contrast-secondary);--kbq-button-transparent-contrast-fade-on-right-icon: var(--kbq-breadcrumb-item-icon-color);--kbq-button-transparent-contrast-fade-on-left-icon: var(--kbq-breadcrumb-item-icon-color)}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button[aria-current=page],.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button-icon[aria-current=page]{--kbq-button-transparent-contrast-fade-on-states-disabled-foreground: var(--kbq-foreground-contrast)}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button[aria-current=page].kbq-disabled,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button-icon[aria-current=page].kbq-disabled{--kbq-button-transparent-contrast-fade-on-states-disabled-left-icon: var( --kbq-breadcrumb-item-icon-color );--kbq-button-transparent-contrast-fade-on-states-disabled-right-icon: var( --kbq-breadcrumb-item-icon-color )}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled):hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled).kbq-hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled).cdk-keyboard-focused .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled):hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled).kbq-hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled).cdk-keyboard-focused .kbq-icon{--kbq-button-transparent-contrast-fade-on-left-icon: var( --kbq-states-icon-contrast-fade-hover );--kbq-button-transparent-contrast-fade-on-right-icon: var( --kbq-states-icon-contrast-fade-hover )}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled):active .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled).kbq-active .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled):active .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled).kbq-active .kbq-icon{--kbq-button-transparent-contrast-fade-on-left-icon: var( --kbq-states-icon-contrast-fade-active );--kbq-button-transparent-contrast-fade-on-right-icon: var( --kbq-states-icon-contrast-fade-active )}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon{--kbq-button-transparent-contrast-fade-on-left-icon: var(--kbq-breadcrumb-expand-icon-color)}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon .kbq-icon{--kbq-breadcrumb-expand-icon-color: var(--kbq-icon-contrast-fade)}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled):hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled).kbq-hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled).cdk-keyboard-focused .kbq-icon{--kbq-breadcrumb-expand-icon-color: var(--kbq-states-icon-contrast-fade-hover)}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled):active .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled).kbq-active .kbq-icon{--kbq-breadcrumb-expand-icon-color: var(--kbq-states-icon-contrast-fade-active)}.kbq-breadcrumbs .kbq-breadcrumb_current{color:var(--kbq-foreground-contrast)}.kbq-breadcrumbs .kbq-breadcrumb_current .kbq-button.kbq-button_transparent.kbq-contrast,.kbq-breadcrumbs .kbq-breadcrumb_current .kbq-button-icon.kbq-button_transparent.kbq-contrast{--kbq-button-transparent-contrast-fade-on-foreground: var(--kbq-foreground-contrast)}.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb-item.kbq-button-icon{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-breadcrumbs.kbq-breadcrumbs_normal .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_normal .kbq-breadcrumb-item.kbq-button-icon{font-size:var(--kbq-typography-text-big-font-size);font-style:var(--kbq-typography-text-big-font-style);font-weight:var(--kbq-typography-text-big-font-weight);line-height:var(--kbq-typography-text-big-line-height);font-family:var(--kbq-typography-text-big-font-family);text-transform:var(--kbq-typography-text-big-text-transform);font-feature-settings:var(--kbq-typography-text-big-font-feature-settings);letter-spacing:var(--kbq-typography-text-big-letter-spacing)}.kbq-breadcrumbs.kbq-breadcrumbs_big .kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_big .kbq-button-icon{font-size:var(--kbq-typography-subheading-font-size);font-style:var(--kbq-typography-subheading-font-style);font-weight:var(--kbq-typography-subheading-font-weight);line-height:var(--kbq-typography-subheading-line-height);font-family:var(--kbq-typography-subheading-font-family);text-transform:var(--kbq-typography-subheading-text-transform);font-feature-settings:var(--kbq-typography-subheading-font-feature-settings);letter-spacing:var(--kbq-typography-subheading-letter-spacing)}.kbq-breadcrumbs .kbq-breadcrumb__separator{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:var(--kbq-typography-text-big-font-size);font-style:var(--kbq-typography-text-big-font-style);font-weight:var(--kbq-typography-text-big-font-weight);line-height:var(--kbq-typography-text-big-line-height);font-family:var(--kbq-typography-text-big-font-family);text-transform:var(--kbq-typography-text-big-text-transform);font-feature-settings:var(--kbq-typography-text-big-font-feature-settings);letter-spacing:var(--kbq-typography-text-big-letter-spacing)}.kbq-breadcrumb-item__link-behavior{text-decoration:none}\n", ":where(.kbq-breadcrumbs){--kbq-breadcrumb-item-horizontal-padding: var(--kbq-size-xs);--kbq-breadcrumb-item-height: var(--kbq-size-3xl);--kbq-breadcrumb-item-expand-horizontal-padding: var(--kbq-size-s);--kbq-breadcrumb-expand-icon-color: var(--kbq-icon-contrast-fade);--kbq-breadcrumb-item-border-radius: var(--kbq-size-xs);--kbq-breadcrumb-item-icon-color: var(--kbq-icon-contrast-fade);--kbq-breadcrumb-item-negative-margin: calc(-1 * var(--kbq-size-xs));--kbq-breadcrumbs-gap: 0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i3.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i3.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "directive", type: i3.KbqButtonDropdownTrigger, selector: "[kbq-button][kbqDropdownTriggerFor]" }, { kind: "ngmodule", type: KbqDropdownModule }, { kind: "component", type: i4.KbqDropdown, selector: "kbq-dropdown", inputs: ["navigationWithWrap", "xPosition", "yPosition", "overlapTriggerY", "overlapTriggerX", "hasBackdrop", "class", "backdropClass"], outputs: ["closed"], exportAs: ["kbqDropdown"] }, { kind: "component", type: i4.KbqDropdownItem, selector: "kbq-dropdown-item, [kbq-dropdown-item]", inputs: ["disabled"], exportAs: ["kbqDropdownItem"] }, { kind: "directive", type: i4.KbqDropdownTrigger, selector: "[kbqDropdownTriggerFor]", inputs: ["kbqDropdownTriggerData", "openByArrowDown", "kbqDropdownTriggerRestoreFocus", "kbqDropdownTriggerFor"], outputs: ["dropdownOpened", "dropdownClosed"], exportAs: ["kbqDropdownTrigger"] }, { kind: "directive", type: KbqBreadcrumbButton, selector: "[kbq-button][kbqBreadcrumb]" }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i5.KbqTitleDirective, selector: "[kbq-title]", exportAs: ["kbqTitle"] }, { kind: "ngmodule", type: KbqOverflowItemsModule }, { kind: "directive", type: i6.KbqOverflowItems, selector: "[kbqOverflowItems]", inputs: ["reverseOverflowOrder", "debounceTime", "additionalResizeObserverTargets"], outputs: ["changes"], exportAs: ["kbqOverflowItems"] }, { kind: "directive", type: i6.KbqOverflowItem, selector: "[kbqOverflowItem]", inputs: ["kbqOverflowItem", "order", "alwaysVisible"], exportAs: ["kbqOverflowItem"] }, { kind: "directive", type: i6.KbqOverflowItemsResult, selector: "[kbqOverflowItemsResult]", exportAs: ["kbqOverflowItemsResult"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
212
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: KbqBreadcrumbs, isStandalone: true, selector: "kbq-breadcrumbs,[kbq-breadcrumbs]", inputs: { firstItemNegativeMargin: ["firstItemNegativeMargin", "firstItemNegativeMargin", booleanAttribute], size: "size", max: "max", disabled: ["disabled", "disabled", booleanAttribute], wrapMode: "wrapMode" }, host: { properties: { "class.kbq-breadcrumbs_compact": "size === \"compact\"", "class.kbq-breadcrumbs_normal": "size === \"normal\"", "class.kbq-breadcrumbs_big": "size === \"big\"", "class.kbq-breadcrumbs_wrap": "wrapMode === \"wrap\"", "class.kbq-breadcrumbs_first-item-negative-margin": "firstItemNegativeMargin", "attr.aria-label": "'breadcrumb'" }, classAttribute: "kbq-breadcrumbs" }, queries: [{ propertyName: "separator", first: true, predicate: KbqBreadcrumbsSeparator, descendants: true, read: TemplateRef }, { propertyName: "items", predicate: i0.forwardRef(() => KbqBreadcrumbItem) }], viewQueries: [{ propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, read: ElementRef }, { propertyName: "overflowItems", predicate: KbqOverflowItem, descendants: true, read: ElementRef }], hostDirectives: [{ directive: i1.RdxRovingFocusGroupDirective }], ngImport: i0, template: "<!--\n@TODO: check when updated to Angular 20.x (#DS-4034)\nresolved SSR issue with official hack https://github.com/angular/angular/issues/50543#issuecomment-1572900259\n-->\n<ng-content />\n@if (items.length < minVisibleItems || wrapMode !== 'auto') {\n @for (item of items; track item; let last = $last) {\n <div class=\"kbq-breadcrumb-item__container\">\n <ng-container *ngTemplateOutlet=\"breadcrumbTemplate; context: { $implicit: item, last: last }\" />\n @if (!last) {\n <ng-container [ngTemplateOutlet]=\"separatorTemplate\" />\n }\n </div>\n }\n} @else {\n <div\n #kbqOverflowItems=\"kbqOverflowItems\"\n kbqOverflowItems\n reverseOverflowOrder\n class=\"layout-align-start-center\"\n [style.max-width.px]=\"maxWidth\"\n >\n <div class=\"kbq-breadcrumb-item__container\" [kbqOverflowItem]=\"0\" [order]=\"items.length\">\n <ng-container *ngTemplateOutlet=\"breadcrumbTemplate; context: { $implicit: items.first, last: false }\" />\n <ng-container [ngTemplateOutlet]=\"separatorTemplate\" />\n </div>\n <!-- @TODO delay rendering for proper elements order (#DS-3334)--->\n @if (true) {\n <div kbqOverflowItemsResult class=\"kbq-breadcrumb-item__container\">\n <button\n kbq-button\n kbqBreadcrumb\n class=\"kbq-breadcrumb__expand\"\n [kbqDropdownTriggerFor]=\"hiddenBreadcrumbsDropdown\"\n [kbqStyle]=\"KbqButtonStyles.Transparent\"\n [openByArrowDown]=\"false\"\n >\n <i kbq-icon=\"kbq-ellipsis-horizontal_16\" [color]=\"KbqComponentColors.ContrastFade\"></i>\n </button>\n <ng-container [ngTemplateOutlet]=\"separatorTemplate\" />\n\n <kbq-dropdown #hiddenBreadcrumbsDropdown=\"kbqDropdown\">\n @for (item of items; track item) {\n @if (kbqOverflowItems.hiddenItemIDs().has($index)) {\n <a class=\"kbq-breadcrumb-item__link-behavior\" [routerLink]=\"item.routerLink?.urlTree\">\n <button kbq-dropdown-item [disabled]=\"item.disabled\">{{ item.text }}</button>\n </a>\n }\n }\n </kbq-dropdown>\n </div>\n }\n @for (item of itemsExcludingEdges; track item; let index = $index) {\n <div class=\"kbq-breadcrumb-item__container\" [kbqOverflowItem]=\"index + 1\">\n <ng-container *ngTemplateOutlet=\"breadcrumbTemplate; context: { $implicit: item, last: false }\" />\n <ng-container [ngTemplateOutlet]=\"separatorTemplate\" />\n </div>\n }\n <div alwaysVisible class=\"kbq-breadcrumb-item__container\" [kbqOverflowItem]=\"items.length - 1\">\n <ng-container *ngTemplateOutlet=\"breadcrumbTemplate; context: { $implicit: items.last, last: true }\" />\n </div>\n </div>\n}\n\n<ng-template #breadcrumbTemplate let-item let-last=\"last\">\n @if (item.customTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"item.customTemplateRef\" />\n } @else {\n <a tabindex=\"-1\" class=\"kbq-breadcrumb-item__link-behavior\" [routerLink]=\"item.routerLink?.urlTree\">\n <button\n kbq-button\n kbq-title\n kbqBreadcrumb\n [attr.aria-current]=\"last ? 'page' : null\"\n [disabled]=\"item.disabled || last\"\n [kbqPlacementPriority]=\"PopUpPlacements.Bottom\"\n [kbqTooltipArrow]=\"false\"\n >\n {{ item.text }}\n </button>\n </a>\n }\n</ng-template>\n\n<ng-template #separatorTemplate>\n @if (separator) {\n <ng-container [ngTemplateOutlet]=\"separator\" />\n } @else {\n <i kbq-icon=\"\" class=\"kbq-breadcrumb__separator\" [color]=\"KbqComponentColors.ContrastFade\">&nbsp;/&nbsp;</i>\n }\n</ng-template>\n", styles: [".kbq-breadcrumbs{display:flex;align-items:center;gap:var(--kbq-breadcrumbs-gap);flex-grow:1}.kbq-breadcrumbs .kbq-overflow-items{padding:1px}.kbq-breadcrumbs .kbq-breadcrumb-item__container{display:inline-flex;align-items:center}.kbq-breadcrumbs.kbq-breadcrumbs_first-item-negative-margin .kbq-overflow-items{margin-left:var(--kbq-breadcrumb-item-negative-margin)}.kbq-breadcrumbs.kbq-breadcrumbs_wrap{flex-wrap:wrap}.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb-item.kbq-button-icon{--kbq-breadcrumb-item-height: var(--kbq-size-xxl)}.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb__expand.kbq-button-icon{--kbq-breadcrumb-item-expand-horizontal-padding: var(--kbq-size-xxs)}.kbq-breadcrumbs.kbq-breadcrumbs_normal .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_normal .kbq-breadcrumb-item.kbq-button-icon{--kbq-button-size-horizontal-padding: var(--kbq-breadcrumb-item-horizontal-padding)}.kbq-breadcrumbs.kbq-breadcrumbs_big .kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_big .kbq-button-icon{--kbq-button-size-height: var(--kbq-breadcrumb-item-height)}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button-icon{--kbq-button-size-height: var(--kbq-breadcrumb-item-height);--kbq-button-size-horizontal-padding: var(--kbq-breadcrumb-item-horizontal-padding);--kbq-button-size-border-radius: var(--kbq-breadcrumb-item-border-radius)}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon{--kbq-button-icon-size-horizontal-padding: var(--kbq-breadcrumb-item-expand-horizontal-padding)}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button-icon{--kbq-button-transparent-contrast-fade-on-foreground: var(--kbq-foreground-contrast-secondary);--kbq-button-transparent-contrast-fade-on-right-icon: var(--kbq-breadcrumb-item-icon-color);--kbq-button-transparent-contrast-fade-on-left-icon: var(--kbq-breadcrumb-item-icon-color)}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button[aria-current=page],.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button-icon[aria-current=page]{--kbq-button-transparent-contrast-fade-on-states-disabled-foreground: var(--kbq-foreground-contrast)}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button[aria-current=page].kbq-disabled,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-button-icon[aria-current=page].kbq-disabled{--kbq-button-transparent-contrast-fade-on-states-disabled-left-icon: var( --kbq-breadcrumb-item-icon-color );--kbq-button-transparent-contrast-fade-on-states-disabled-right-icon: var( --kbq-breadcrumb-item-icon-color )}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled):hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled).kbq-hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled).cdk-keyboard-focused .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled):hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled).kbq-hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled).cdk-keyboard-focused .kbq-icon{--kbq-button-transparent-contrast-fade-on-left-icon: var( --kbq-states-icon-contrast-fade-hover );--kbq-button-transparent-contrast-fade-on-right-icon: var( --kbq-states-icon-contrast-fade-hover )}.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled):active .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button:not(.kbq-disabled).kbq-active .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled):active .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb-item.kbq-dropdown-trigger.kbq-button-icon:not(.kbq-disabled).kbq-active .kbq-icon{--kbq-button-transparent-contrast-fade-on-left-icon: var( --kbq-states-icon-contrast-fade-active );--kbq-button-transparent-contrast-fade-on-right-icon: var( --kbq-states-icon-contrast-fade-active )}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon{--kbq-button-transparent-contrast-fade-on-left-icon: var(--kbq-breadcrumb-expand-icon-color)}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon .kbq-icon{--kbq-breadcrumb-expand-icon-color: var(--kbq-icon-contrast-fade)}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled):hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled).kbq-hover .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled).cdk-keyboard-focused .kbq-icon{--kbq-breadcrumb-expand-icon-color: var(--kbq-states-icon-contrast-fade-hover)}.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled):active .kbq-icon,.kbq-breadcrumbs .kbq-breadcrumb__expand.kbq-button-icon:not(.kbq-disabled).kbq-active .kbq-icon{--kbq-breadcrumb-expand-icon-color: var(--kbq-states-icon-contrast-fade-active)}.kbq-breadcrumbs .kbq-breadcrumb_current{color:var(--kbq-foreground-contrast)}.kbq-breadcrumbs .kbq-breadcrumb_current .kbq-button.kbq-button_transparent.kbq-contrast,.kbq-breadcrumbs .kbq-breadcrumb_current .kbq-button-icon.kbq-button_transparent.kbq-contrast{--kbq-button-transparent-contrast-fade-on-foreground: var(--kbq-foreground-contrast)}.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_compact .kbq-breadcrumb-item.kbq-button-icon{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-breadcrumbs.kbq-breadcrumbs_normal .kbq-breadcrumb-item.kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_normal .kbq-breadcrumb-item.kbq-button-icon{font-size:var(--kbq-typography-text-big-font-size);font-style:var(--kbq-typography-text-big-font-style);font-weight:var(--kbq-typography-text-big-font-weight);line-height:var(--kbq-typography-text-big-line-height);font-family:var(--kbq-typography-text-big-font-family);text-transform:var(--kbq-typography-text-big-text-transform);font-feature-settings:var(--kbq-typography-text-big-font-feature-settings);letter-spacing:var(--kbq-typography-text-big-letter-spacing)}.kbq-breadcrumbs.kbq-breadcrumbs_big .kbq-button,.kbq-breadcrumbs.kbq-breadcrumbs_big .kbq-button-icon{font-size:var(--kbq-typography-subheading-font-size);font-style:var(--kbq-typography-subheading-font-style);font-weight:var(--kbq-typography-subheading-font-weight);line-height:var(--kbq-typography-subheading-line-height);font-family:var(--kbq-typography-subheading-font-family);text-transform:var(--kbq-typography-subheading-text-transform);font-feature-settings:var(--kbq-typography-subheading-font-feature-settings);letter-spacing:var(--kbq-typography-subheading-letter-spacing)}.kbq-breadcrumbs .kbq-breadcrumb__separator{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:var(--kbq-typography-text-big-font-size);font-style:var(--kbq-typography-text-big-font-style);font-weight:var(--kbq-typography-text-big-font-weight);line-height:var(--kbq-typography-text-big-line-height);font-family:var(--kbq-typography-text-big-font-family);text-transform:var(--kbq-typography-text-big-text-transform);font-feature-settings:var(--kbq-typography-text-big-font-feature-settings);letter-spacing:var(--kbq-typography-text-big-letter-spacing)}.kbq-breadcrumb-item__link-behavior{text-decoration:none}\n", ":where(.kbq-breadcrumbs){--kbq-breadcrumb-item-horizontal-padding: var(--kbq-size-xs);--kbq-breadcrumb-item-height: var(--kbq-size-3xl);--kbq-breadcrumb-item-expand-horizontal-padding: var(--kbq-size-s);--kbq-breadcrumb-expand-icon-color: var(--kbq-icon-contrast-fade);--kbq-breadcrumb-item-border-radius: var(--kbq-size-xs);--kbq-breadcrumb-item-icon-color: var(--kbq-icon-contrast-fade);--kbq-breadcrumb-item-negative-margin: calc(-1 * var(--kbq-size-xs));--kbq-breadcrumbs-gap: 0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i3.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i3.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "directive", type: i3.KbqButtonDropdownTrigger, selector: "[kbq-button][kbqDropdownTriggerFor]" }, { kind: "ngmodule", type: KbqDropdownModule }, { kind: "component", type: i4.KbqDropdown, selector: "kbq-dropdown", inputs: ["navigationWithWrap", "xPosition", "yPosition", "overlapTriggerY", "overlapTriggerX", "hasBackdrop", "class", "backdropClass"], outputs: ["closed"], exportAs: ["kbqDropdown"] }, { kind: "component", type: i4.KbqDropdownItem, selector: "kbq-dropdown-item, [kbq-dropdown-item]", inputs: ["disabled"], exportAs: ["kbqDropdownItem"] }, { kind: "directive", type: i4.KbqDropdownTrigger, selector: "[kbqDropdownTriggerFor]", inputs: ["offsetX", "offsetY", "kbqDropdownTriggerData", "openByArrowDown", "kbqDropdownTriggerRestoreFocus", "kbqDropdownTriggerFor"], outputs: ["dropdownOpened", "dropdownClosed"], exportAs: ["kbqDropdownTrigger"] }, { kind: "directive", type: KbqBreadcrumbButton, selector: "[kbq-button][kbqBreadcrumb]" }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: i5.KbqTitleDirective, selector: "[kbq-title]", exportAs: ["kbqTitle"] }, { kind: "ngmodule", type: KbqOverflowItemsModule }, { kind: "directive", type: i6.KbqOverflowItems, selector: "[kbqOverflowItems]", inputs: ["reverseOverflowOrder", "debounceTime", "additionalResizeObserverTargets"], outputs: ["changes"], exportAs: ["kbqOverflowItems"] }, { kind: "directive", type: i6.KbqOverflowItem, selector: "[kbqOverflowItem]", inputs: ["kbqOverflowItem", "order", "alwaysVisible"], exportAs: ["kbqOverflowItem"] }, { kind: "directive", type: i6.KbqOverflowItemsResult, selector: "[kbqOverflowItemsResult]", exportAs: ["kbqOverflowItemsResult"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
213
213
  }
214
214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqBreadcrumbs, decorators: [{
215
215
  type: Component,
@@ -256,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
256
256
  type: ViewChildren,
257
257
  args: [KbqOverflowItem, { read: ElementRef }]
258
258
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9icmVhZGNydW1icy9icmVhZGNydW1icy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBR0wsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFtQixlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUs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QUU7Z0JBTTdCLElBQUk7c0JBQVosS0FBSztnQkFNRyxHQUFHO3NCQUFYLEtBQUs7Z0JBS2tDLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSTdCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR2EsU0FBUztzQkFEM0IsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSXpDLEtBQUs7c0JBRHZCLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUluQyxNQUFNO3NCQUR0QixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJdEMsYUFBYTtzQkFEN0IsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBQcm92aWRlcixcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgS2JxQnV0dG9uLCBLYnFCdXR0b25Nb2R1bGUsIEticUJ1dHRvblN0eWxlcyB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgS2JxQ29tcG9uZW50Q29sb3JzLCBLYnFEZWZhdWx0U2l6ZXMsIFBvcFVwUGxhY2VtZW50cyB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9jb3JlJztcbmltcG9ydCB7IEticURyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEticUljb25Nb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBLYnFPdmVyZmxvd0l0ZW0sIEticU92ZXJmbG93SXRlbXNNb2R1bGUsIEticU92ZXJmbG93SXRlbXNSZXN1bHQgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvb3ZlcmZsb3ctaXRlbXMnO1xuaW1wb3J0IHsgS2JxVGl0bGVNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdGl0bGUnO1xuaW1wb3J0IHsgUmR4Um92aW5nRm9jdXNHcm91cERpcmVjdGl2ZSwgUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvcm92aW5nLWZvY3VzJztcbmltcG9ydCB7IEticUJyZWFkY3J1bWJzQ29uZmlndXJhdGlvbiwgS2JxQnJlYWRjcnVtYnNXcmFwTW9kZSB9IGZyb20gJy4vYnJlYWRjcnVtYnMudHlwZXMnO1xuXG5jb25zdCBLQlFfQlJFQURDUlVNQlNfREVGQVVMVF9DT05GSUdVUkFUSU9OOiBLYnFCcmVhZGNydW1ic0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgbWF4OiA0LFxuICAgIHNpemU6ICdub3JtYWwnLFxuICAgIGZpcnN0SXRlbU5lZ2F0aXZlTWFyZ2luOiB0cnVlLFxuICAgIHdyYXBNb2RlOiAnYXV0bydcbn07XG5cbi8qKiBCcmVhZGNydW1icyBvcHRpb25zIGdsb2JhbCBjb25maWd1cmF0aW9uIHByb3ZpZGVyLiAqL1xuZXhwb3J0IGNvbnN0IEtCUV9CUkVBRENSVU1CU19DT05GSUdVUkFUSU9OID0gbmV3IEluamVjdGlvblRva2VuPEticUJyZWFkY3J1bWJzQ29uZmlndXJhdGlvbj4oXG4gICAgJ0tCUV9CUkVBRENSVU1CU19DT05GSUdVUkFUSU9OJyxcbiAgICB7IGZhY3Rvcnk6ICgpID0+IEtCUV9CUkVBRENSVU1CU19ERUZBVUxUX0NPTkZJR1VSQVRJT04gfVxuKTtcblxuLyoqIFV0aWxpdHkgcHJvdmlkZXIgZm9yIGBLQlFfQlJFQURDUlVNQlNfQ09ORklHVVJBVElPTmAuICovXG5leHBvcnQgY29uc3Qga2JxQnJlYWRjcnVtYnNDb25maWd1cmF0aW9uUHJvdmlkZXIgPSAoY29uZmlndXJhdGlvbjogUGFydGlhbDxLYnFCcmVhZGNydW1ic0NvbmZpZ3VyYXRpb24+KTogUHJvdmlkZXIgPT4gKHtcbiAgICBwcm92aWRlOiBLQlFfQlJFQURDUlVNQlNfQ09ORklHVVJBVElPTixcbiAgICB1c2VWYWx1ZTogeyAuLi5LQlFfQlJFQURDUlVNQlNfREVGQVVMVF9DT05GSUdVUkFUSU9OLCAuLi5jb25maWd1cmF0aW9uIH1cbn0pO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2ticUJyZWFkY3J1bWJzU2VwYXJhdG9yXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWJyZWFkY3J1bWJzLXNlcGFyYXRvcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticUJyZWFkY3J1bWJzU2VwYXJhdG9yIHtcbiAgICByZWFkb25seSB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZik7XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIHRvIHN0eWxlIGFuZCBjb25maWd1cmUgYnV0dG9ucyB1c2VkIGFzIGJyZWFkY3J1bWIgaXRlbXMuXG4gKiAtIEluaGVyaXRzIGZvY3VzIG1hbmFnZW1lbnQgYmVoYXZpb3IgZnJvbSBgUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlYC5cbiAqIC0gT3B0aW9uYWxseSBpbmplY3RzIGBLYnFCdXR0b25gIHRvIGN1c3RvbWl6ZSBpdHMgc3R5bGUgZm9yIGJyZWFkY3J1bWIgdXNhZ2UuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdba2JxLWJ1dHRvbl1ba2JxQnJlYWRjcnVtYl0nLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdrYnEtYnJlYWRjcnVtYi1pdGVtJyB9LFxuICAgIGhvc3REaXJlY3RpdmVzOiBbUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBLYnFCcmVhZGNydW1iQnV0dG9uIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1dHRvbiA9IGluamVjdChLYnFCdXR0b24sIHsgb3B0aW9uYWw6IHRydWUsIHNlbGY6IHRydWUgfSk7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbi5jb2xvciA9IEticUNvbXBvbmVudENvbG9ycy5Db250cmFzdDtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uLmticVN0eWxlID0gS2JxQnV0dG9uU3R5bGVzLlRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIERpcmVjdGl2ZSBwcm92aWRlcyBhIHdheSB0byBkZWZpbmUgYSBjdXN0b20gdGVtcGxhdGUgZm9yIGJyZWFkY3J1bWIgcmVuZGVyaW5nLCBsZXZlcmFnaW5nIFRlbXBsYXRlUmVmXG4gKlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW2ticUJyZWFkY3J1bWJWaWV3XSdcbn0pXG5leHBvcnQgY2xhc3MgS2JxQnJlYWRjcnVtYlZpZXcge1xuICAgIHJlYWRvbmx5IHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgcmVwcmVzZW50cyBhbiBpbmRpdmlkdWFsIGJyZWFkY3J1bWIgaXRlbSB3aXRoIG9wdGlvbmFsIHN1cHBvcnQgZm9yIHJvdXRlciBuYXZpZ2F0aW9uIGFuZCBzdHlsaW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAna2JxLWJyZWFkY3J1bWItaXRlbScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEticUJyZWFkY3J1bWJJdGVtIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBkaXNwbGF5ZWQgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0uXG4gICAgICogVGhpcyB0ZXh0IHdpbGwgYmUgc2hvd24gaWYgYnJlYWRjcnVtYiBpdGVtIGlzIGhpZGRlbiBpbiBkcm9wZG93bi5cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0ZXh0OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJyZWFkY3J1bWIgaXRlbSBpcyBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJyZWFkY3J1bWIgaXRlbSBpcyB0aGUgY3VycmVudC9hY3RpdmUgaXRlbS5cbiAgICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjdXJyZW50OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gYSBjdXN0b20gdGVtcGxhdGUgcHJvdmlkZWQgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0gY29udGVudC5cbiAgICAgKiBUaGUgdGVtcGxhdGUgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYXBwZWFyYW5jZSBvZiB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKEticUJyZWFkY3J1bWJWaWV3LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGN1c3RvbVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIGBSb3V0ZXJMaW5rYCBpbnN0YW5jZSBmb3IgbmF2aWdhdGluZyB0byBhIHNwZWNpZmljIHJvdXRlLlxuICAgICAqIEluamVjdGVkIGZyb20gdGhlIGhvc3QgZWxlbWVudCwgaWYgYXZhaWxhYmxlIGFuZCBwcm9qZWN0aW5nIHRvIHRoZSBoaWRkZW4gYnJlYWRjcnVtYiBpdGVtIGluIGRyb3Bkb3duLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHJvdXRlckxpbmsgPSBpbmplY3QoUm91dGVyTGluaywgeyBvcHRpb25hbDogdHJ1ZSwgaG9zdDogdHJ1ZSB9KTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2ticS1icmVhZGNydW1icyxba2JxLWJyZWFkY3J1bWJzXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWJzLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JyZWFkY3J1bWJzLnNjc3MnLCAnLi9icmVhZGNydW1icy10b2tlbnMuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBSb3V0ZXJMaW5rLFxuICAgICAgICBLYnFJY29uTW9kdWxlLFxuICAgICAgICBLYnFCdXR0b25Nb2R1bGUsXG4gICAgICAgIEticURyb3Bkb3duTW9kdWxlLFxuICAgICAgICBLYnFCcmVhZGNydW1iQnV0dG9uLFxuICAgICAgICBLYnFUaXRsZU1vZHVsZSxcbiAgICAgICAgS2JxT3ZlcmZsb3dJdGVtc01vZHVsZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ticS1icmVhZGNydW1icycsXG4gICAgICAgICdbY2xhc3Mua2JxLWJyZWFkY3J1bWJzX2NvbXBhY3RdJzogJ3NpemUgPT09IFwiY29tcGFjdFwiJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYnJlYWRjcnVtYnNfbm9ybWFsXSc6ICdzaXplID09PSBcIm5vcm1hbFwiJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYnJlYWRjcnVtYnNfYmlnXSc6ICdzaXplID09PSBcImJpZ1wiJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYnJlYWRjcnVtYnNfd3JhcF0nOiAnd3JhcE1vZGUgPT09IFwid3JhcFwiJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYnJlYWRjcnVtYnNfZmlyc3QtaXRlbS1uZWdhdGl2ZS1tYXJnaW5dJzogJ2ZpcnN0SXRlbU5lZ2F0aXZlTWFyZ2luJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogXCInYnJlYWRjcnVtYidcIlxuICAgIH0sXG4gICAgLy8gQFRPRE8gYWRkIHN1cHBvcnQgZm9yIEhvbWUsRW5kIGtleXMgaW50ZXJhY3Rpb24gKCNEUy0zMzM0KVxuICAgIGhvc3REaXJlY3RpdmVzOiBbUmR4Um92aW5nRm9jdXNHcm91cERpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgS2JxQnJlYWRjcnVtYnMgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlndXJhdGlvbiA9IGluamVjdChLQlFfQlJFQURDUlVNQlNfQ09ORklHVVJBVElPTik7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiBhIG5lZ2F0aXZlIG1hcmdpbiBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZmlyc3QgYnJlYWRjcnVtYiBpdGVtLlxuICAgICAqXG4gICAgICogQHNlZSBLYnFCcmVhZGNydW1ic0NvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmlyc3RJdGVtTmVnYXRpdmVNYXJnaW46IGJvb2xlYW4gPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uZmlyc3RJdGVtTmVnYXRpdmVNYXJnaW47XG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiB0aGUgYnJlYWRjcnVtYnMuIEFmZmVjdHMgZm9udCBzaXplLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KCkgc2l6ZTogS2JxRGVmYXVsdFNpemVzID0gdGhpcy5jb25maWd1cmF0aW9uLnNpemU7XG4gICAgLyoqXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgdmlzaWJsZSBicmVhZGNydW1iIGl0ZW1zLlxuICAgICAqIFJlbWFpbmluZyBpdGVtcyBhcmUgY29sbGFwc2VkIGludG8gYSBkcm9wZG93biBpZiB0aGUgdG90YWwgZXhjZWVkcyB0aGlzIHZhbHVlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KCkgbWF4OiBudW1iZXIgfCBudWxsID0gdGhpcy5jb25maWd1cmF0aW9uLm1heDtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYnJlYWRjcnVtYnMgYXJlIGRpc2FibGVkLlxuICAgICAqIFdoZW4gZGlzYWJsZWQsIHVzZXIgaW50ZXJhY3Rpb25zIGFyZSBibG9ja2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdyYXBwaW5nIGJlaGF2aW9yIG9mIHRoZSBicmVhZGNydW1iIGl0ZW1zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHdyYXBNb2RlOiBLYnFCcmVhZGNydW1ic1dyYXBNb2RlID0gdGhpcy5jb25maWd1cmF0aW9uLndyYXBNb2RlO1xuXG4gICAgQENvbnRlbnRDaGlsZChLYnFCcmVhZGNydW1ic1NlcGFyYXRvciwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHByb3RlY3RlZCByZWFkb25seSBzZXBhcmF0b3I/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEticUJyZWFkY3J1bWJJdGVtKSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXM6IFF1ZXJ5TGlzdDxLYnFCcmVhZGNydW1iSXRlbT47XG5cbiAgICBAVmlld0NoaWxkKEticU92ZXJmbG93SXRlbXNSZXN1bHQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdWx0OiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZHJlbihLYnFPdmVyZmxvd0l0ZW0sIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmZsb3dJdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgLyoqXG4gICAgICogRW5zdXJlcyBhdCBsZWFzdCBtaW5pbXVtIG51bWJlciBvZiBicmVhZGNydW1iIGl0ZW1zIGFyZSBzaG93bi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWluVmlzaWJsZUl0ZW1zID0gMjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgS2JxQ29tcG9uZW50Q29sb3JzID0gS2JxQ29tcG9uZW50Q29sb3JzO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBLYnFCdXR0b25TdHlsZXMgPSBLYnFCdXR0b25TdHlsZXM7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IFBvcFVwUGxhY2VtZW50cyA9IFBvcFVwUGxhY2VtZW50cztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGl0ZW1zRXhjbHVkaW5nRWRnZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLnRvQXJyYXkoKS5zbGljZSgxLCAtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgd2lkdGggb2YgdmlzaWJsZSBpdGVtcyBiYXNlZCBvbiB0aGUgYG1heGAgdmFsdWUgYW5kIG92ZXJmbG93IGl0ZW1zLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXIgfCBudWxsfSBUaGUgY29tcHV0ZWQgbWF4IHdpZHRoIGZvciBvdmVyZmxvdyBpdGVtcyBvciBudWxsIGlmIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgbWF4V2lkdGgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLm92ZXJmbG93SXRlbXMgfHxcbiAgICAgICAgICAgICF0aGlzLm92ZXJmbG93SXRlbXMubGVuZ3RoIHx8XG4gICAgICAgICAgICB0aGlzLm1heCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy5tYXggPj0gdGhpcy5pdGVtcy5sZW5ndGggfHxcbiAgICAgICAgICAgIHRoaXMubWF4IDwgdGhpcy5taW5WaXNpYmxlSXRlbXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2aXNpYmxlSXRlbXNXaWR0aCA9IHRoaXMuZ2V0SXRlbVdpZHRoKHRoaXMucmVzdWx0KTtcbiAgICAgICAgLy8gUmVvcmRlcnMgb3ZlcmZsb3cgaXRlbXMgdG8gcHJpb3JpdGl6ZSB0aGUgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHNcbiAgICAgICAgY29uc3Qgc29ydGVkSXRlbXMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLm92ZXJmbG93SXRlbXMudG9BcnJheSgpLnNsaWNlKDEsIC0xKSxcbiAgICAgICAgICAgIHRoaXMub3ZlcmZsb3dJdGVtcy5maXJzdCxcbiAgICAgICAgICAgIHRoaXMub3ZlcmZsb3dJdGVtcy5sYXN0XG4gICAgICAgIF07XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1heCAtIDE7IGkrKykge1xuICAgICAgICAgICAgdmlzaWJsZUl0ZW1zV2lkdGggKz0gdGhpcy5nZXRJdGVtV2lkdGgoc29ydGVkSXRlbXNbc29ydGVkSXRlbXMubGVuZ3RoIC0gaSAtIDFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2aXNpYmxlSXRlbXNXaWR0aDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbVdpZHRoKGl0ZW0/OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHJldHVybiBpdGVtID8gaXRlbS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDogMDtcbiAgICB9XG59XG4iLCI8IS0tXG5AVE9ETzogY2hlY2sgd2hlbiB1cGRhdGVkIHRvIEFuZ3VsYXIgMjAueCAoI0RTLTQwMzQpXG5yZXNvbHZlZCBTU1IgaXNzdWUgd2l0aCBvZmZpY2lhbCBoYWNrIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzUwNTQzI2lzc3VlY29tbWVudC0xNTcyOTAwMjU5XG4tLT5cbjxuZy1jb250ZW50IC8+XG5AaWYgKGl0ZW1zLmxlbmd0aCA8IG1pblZpc2libGVJdGVtcyB8fCB3cmFwTW9kZSAhPT0gJ2F1dG8nKSB7XG4gICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbTsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWJyZWFkY3J1bWItaXRlbV9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnJlYWRjcnVtYlRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgbGFzdDogbGFzdCB9XCIgLz5cbiAgICAgICAgICAgIEBpZiAoIWxhc3QpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlcGFyYXRvclRlbXBsYXRlXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxufSBAZWxzZSB7XG4gICAgPGRpdlxuICAgICAgICAja2JxT3ZlcmZsb3dJdGVtcz1cImticU92ZXJmbG93SXRlbXNcIlxuICAgICAgICBrYnFPdmVyZmxvd0l0ZW1zXG4gICAgICAgIHJldmVyc2VPdmVyZmxvd09yZGVyXG4gICAgICAgIGNsYXNzPVwibGF5b3V0LWFsaWduLXN0YXJ0LWNlbnRlclwiXG4gICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWF4V2lkdGhcIlxuICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1icmVhZGNydW1iLWl0ZW1fX2NvbnRhaW5lclwiIFtrYnFPdmVyZmxvd0l0ZW1dPVwiMFwiIFtvcmRlcl09XCJpdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJicmVhZGNydW1iVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtcy5maXJzdCwgbGFzdDogZmFsc2UgfVwiIC8+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlcGFyYXRvclRlbXBsYXRlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gQFRPRE8gZGVsYXkgcmVuZGVyaW5nIGZvciBwcm9wZXIgZWxlbWVudHMgb3JkZXIgKCNEUy0zMzM0KS0tLT5cbiAgICAgICAgQGlmICh0cnVlKSB7XG4gICAgICAgICAgICA8ZGl2IGticU92ZXJmbG93SXRlbXNSZXN1bHQgY2xhc3M9XCJrYnEtYnJlYWRjcnVtYi1pdGVtX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAga2JxQnJlYWRjcnVtYlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1icmVhZGNydW1iX19leHBhbmRcIlxuICAgICAgICAgICAgICAgICAgICBba2JxRHJvcGRvd25UcmlnZ2VyRm9yXT1cImhpZGRlbkJyZWFkY3J1bWJzRHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICBba2JxU3R5bGVdPVwiS2JxQnV0dG9uU3R5bGVzLlRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW29wZW5CeUFycm93RG93bl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1lbGxpcHNpcy1ob3Jpem9udGFsXzE2XCIgW2NvbG9yXT1cIkticUNvbXBvbmVudENvbG9ycy5Db250cmFzdEZhZGVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZXBhcmF0b3JUZW1wbGF0ZVwiIC8+XG5cbiAgICAgICAgICAgICAgICA8a2JxLWRyb3Bkb3duICNoaWRkZW5CcmVhZGNydW1ic0Ryb3Bkb3duPVwia2JxRHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChrYnFPdmVyZmxvd0l0ZW1zLmhpZGRlbkl0ZW1JRHMoKS5oYXMoJGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwia2JxLWJyZWFkY3J1bWItaXRlbV9fbGluay1iZWhhdmlvclwiIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGluaz8udXJsVHJlZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGticS1kcm9wZG93bi1pdGVtIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCI+e3sgaXRlbS50ZXh0IH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9rYnEtZHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zRXhjbHVkaW5nRWRnZXM7IHRyYWNrIGl0ZW07IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1icmVhZGNydW1iLWl0ZW1fX2NvbnRhaW5lclwiIFtrYnFPdmVyZmxvd0l0ZW1dPVwiaW5kZXggKyAxXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJyZWFkY3J1bWJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGxhc3Q6IGZhbHNlIH1cIiAvPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VwYXJhdG9yVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBhbHdheXNWaXNpYmxlIGNsYXNzPVwia2JxLWJyZWFkY3J1bWItaXRlbV9fY29udGFpbmVyXCIgW2ticU92ZXJmbG93SXRlbV09XCJpdGVtcy5sZW5ndGggLSAxXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnJlYWRjcnVtYlRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbXMubGFzdCwgbGFzdDogdHJ1ZSB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG5cbjxuZy10ZW1wbGF0ZSAjYnJlYWRjcnVtYlRlbXBsYXRlIGxldC1pdGVtIGxldC1sYXN0PVwibGFzdFwiPlxuICAgIEBpZiAoaXRlbS5jdXN0b21UZW1wbGF0ZVJlZikge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW0uY3VzdG9tVGVtcGxhdGVSZWZcIiAvPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJrYnEtYnJlYWRjcnVtYi1pdGVtX19saW5rLWJlaGF2aW9yXCIgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rPy51cmxUcmVlXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgICAgIGticS10aXRsZVxuICAgICAgICAgICAgICAgIGticUJyZWFkY3J1bWJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwibGFzdCA/ICdwYWdlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkIHx8IGxhc3RcIlxuICAgICAgICAgICAgICAgIFtrYnFQbGFjZW1lbnRQcmlvcml0eV09XCJQb3BVcFBsYWNlbWVudHMuQm90dG9tXCJcbiAgICAgICAgICAgICAgICBba2JxVG9vbHRpcEFycm93XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2E+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZXBhcmF0b3JUZW1wbGF0ZT5cbiAgICBAaWYgKHNlcGFyYXRvcikge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlcGFyYXRvclwiIC8+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxpIGticS1pY29uPVwiXCIgY2xhc3M9XCJrYnEtYnJlYWRjcnVtYl9fc2VwYXJhdG9yXCIgW2NvbG9yXT1cIkticUNvbXBvbmVudENvbG9ycy5Db250cmFzdEZhZGVcIj4mbmJzcDsvJm5ic3A7PC9pPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9icmVhZGNydW1icy9icmVhZGNydW1icy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLGNBQWMsRUFDZCxLQUFLLEVBR0wsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFtQixlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUs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QUU7Z0JBTTdCLElBQUk7c0JBQVosS0FBSztnQkFNRyxHQUFHO3NCQUFYLEtBQUs7Z0JBS2tDLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSTdCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR2EsU0FBUztzQkFEM0IsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSXpDLEtBQUs7c0JBRHZCLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUluQyxNQUFNO3NCQUR0QixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJdEMsYUFBYTtzQkFEN0IsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBQcm92aWRlcixcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgS2JxQnV0dG9uLCBLYnFCdXR0b25Nb2R1bGUsIEticUJ1dHRvblN0eWxlcyB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgS2JxQ29tcG9uZW50Q29sb3JzLCBLYnFEZWZhdWx0U2l6ZXMsIFBvcFVwUGxhY2VtZW50cyB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9jb3JlJztcbmltcG9ydCB7IEticURyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEticUljb25Nb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBLYnFPdmVyZmxvd0l0ZW0sIEticU92ZXJmbG93SXRlbXNNb2R1bGUsIEticU92ZXJmbG93SXRlbXNSZXN1bHQgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvb3ZlcmZsb3ctaXRlbXMnO1xuaW1wb3J0IHsgS2JxVGl0bGVNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdGl0bGUnO1xuaW1wb3J0IHsgUmR4Um92aW5nRm9jdXNHcm91cERpcmVjdGl2ZSwgUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQHJhZGl4LW5nL3ByaW1pdGl2ZXMvcm92aW5nLWZvY3VzJztcbmltcG9ydCB7IEticUJyZWFkY3J1bWJzQ29uZmlndXJhdGlvbiwgS2JxQnJlYWRjcnVtYnNXcmFwTW9kZSB9IGZyb20gJy4vYnJlYWRjcnVtYnMudHlwZXMnO1xuXG5jb25zdCBLQlFfQlJFQURDUlVNQlNfREVGQVVMVF9DT05GSUdVUkFUSU9OOiBLYnFCcmVhZGNydW1ic0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgbWF4OiA0LFxuICAgIHNpemU6ICdub3JtYWwnLFxuICAgIGZpcnN0SXRlbU5lZ2F0aXZlTWFyZ2luOiB0cnVlLFxuICAgIHdyYXBNb2RlOiAnYXV0bydcbn07XG5cbi8qKiBCcmVhZGNydW1icyBvcHRpb25zIGdsb2JhbCBjb25maWd1cmF0aW9uIHByb3ZpZGVyLiAqL1xuZXhwb3J0IGNvbnN0IEtCUV9CUkVBRENSVU1CU19DT05GSUdVUkFUSU9OID0gbmV3IEluamVjdGlvblRva2VuPEticUJyZWFkY3J1bWJzQ29uZmlndXJhdGlvbj4oXG4gICAgJ0tCUV9CUkVBRENSVU1CU19DT05GSUdVUkFUSU9OJyxcbiAgICB7IGZhY3Rvcnk6ICgpID0+IEtCUV9CUkVBRENSVU1CU19ERUZBVUxUX0NPTkZJR1VSQVRJT04gfVxuKTtcblxuLyoqIFV0aWxpdHkgcHJvdmlkZXIgZm9yIGBLQlFfQlJFQURDUlVNQlNfQ09ORklHVVJBVElPTmAuICovXG5leHBvcnQgY29uc3Qga2JxQnJlYWRjcnVtYnNDb25maWd1cmF0aW9uUHJvdmlkZXIgPSAoY29uZmlndXJhdGlvbjogUGFydGlhbDxLYnFCcmVhZGNydW1ic0NvbmZpZ3VyYXRpb24+KTogUHJvdmlkZXIgPT4gKHtcbiAgICBwcm92aWRlOiBLQlFfQlJFQURDUlVNQlNfQ09ORklHVVJBVElPTixcbiAgICB1c2VWYWx1ZTogeyAuLi5LQlFfQlJFQURDUlVNQlNfREVGQVVMVF9DT05GSUdVUkFUSU9OLCAuLi5jb25maWd1cmF0aW9uIH1cbn0pO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2ticUJyZWFkY3J1bWJzU2VwYXJhdG9yXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWJyZWFkY3J1bWJzLXNlcGFyYXRvcidcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticUJyZWFkY3J1bWJzU2VwYXJhdG9yIHtcbiAgICByZWFkb25seSB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZik7XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIHRvIHN0eWxlIGFuZCBjb25maWd1cmUgYnV0dG9ucyB1c2VkIGFzIGJyZWFkY3J1bWIgaXRlbXMuXG4gKiAtIEluaGVyaXRzIGZvY3VzIG1hbmFnZW1lbnQgYmVoYXZpb3IgZnJvbSBgUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlYC5cbiAqIC0gT3B0aW9uYWxseSBpbmplY3RzIGBLYnFCdXR0b25gIHRvIGN1c3RvbWl6ZSBpdHMgc3R5bGUgZm9yIGJyZWFkY3J1bWIgdXNhZ2UuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdba2JxLWJ1dHRvbl1ba2JxQnJlYWRjcnVtYl0nLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdrYnEtYnJlYWRjcnVtYi1pdGVtJyB9LFxuICAgIGhvc3REaXJlY3RpdmVzOiBbUmR4Um92aW5nRm9jdXNJdGVtRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBLYnFCcmVhZGNydW1iQnV0dG9uIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1dHRvbiA9IGluamVjdChLYnFCdXR0b24sIHsgb3B0aW9uYWw6IHRydWUsIHNlbGY6IHRydWUgfSk7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbi5jb2xvciA9IEticUNvbXBvbmVudENvbG9ycy5Db250cmFzdDtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uLmticVN0eWxlID0gS2JxQnV0dG9uU3R5bGVzLlRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIERpcmVjdGl2ZSBwcm92aWRlcyBhIHdheSB0byBkZWZpbmUgYSBjdXN0b20gdGVtcGxhdGUgZm9yIGJyZWFkY3J1bWIgcmVuZGVyaW5nLCBsZXZlcmFnaW5nIFRlbXBsYXRlUmVmXG4gKlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW2ticUJyZWFkY3J1bWJWaWV3XSdcbn0pXG5leHBvcnQgY2xhc3MgS2JxQnJlYWRjcnVtYlZpZXcge1xuICAgIHJlYWRvbmx5IHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgcmVwcmVzZW50cyBhbiBpbmRpdmlkdWFsIGJyZWFkY3J1bWIgaXRlbSB3aXRoIG9wdGlvbmFsIHN1cHBvcnQgZm9yIHJvdXRlciBuYXZpZ2F0aW9uIGFuZCBzdHlsaW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAna2JxLWJyZWFkY3J1bWItaXRlbScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEticUJyZWFkY3J1bWJJdGVtIHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCBkaXNwbGF5ZWQgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0uXG4gICAgICogVGhpcyB0ZXh0IHdpbGwgYmUgc2hvd24gaWYgYnJlYWRjcnVtYiBpdGVtIGlzIGhpZGRlbiBpbiBkcm9wZG93bi5cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0ZXh0OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJyZWFkY3J1bWIgaXRlbSBpcyBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJyZWFkY3J1bWIgaXRlbSBpcyB0aGUgY3VycmVudC9hY3RpdmUgaXRlbS5cbiAgICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjdXJyZW50OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQSByZWZlcmVuY2UgdG8gYSBjdXN0b20gdGVtcGxhdGUgcHJvdmlkZWQgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0gY29udGVudC5cbiAgICAgKiBUaGUgdGVtcGxhdGUgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYXBwZWFyYW5jZSBvZiB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKEticUJyZWFkY3J1bWJWaWV3LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGN1c3RvbVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIGBSb3V0ZXJMaW5rYCBpbnN0YW5jZSBmb3IgbmF2aWdhdGluZyB0byBhIHNwZWNpZmljIHJvdXRlLlxuICAgICAqIEluamVjdGVkIGZyb20gdGhlIGhvc3QgZWxlbWVudCwgaWYgYXZhaWxhYmxlIGFuZCBwcm9qZWN0aW5nIHRvIHRoZSBoaWRkZW4gYnJlYWRjcnVtYiBpdGVtIGluIGRyb3Bkb3duLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHJvdXRlckxpbmsgPSBpbmplY3QoUm91dGVyTGluaywgeyBvcHRpb25hbDogdHJ1ZSwgaG9zdDogdHJ1ZSB9KTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2ticS1icmVhZGNydW1icyxba2JxLWJyZWFkY3J1bWJzXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWJzLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JyZWFkY3J1bWJzLnNjc3MnLCAnLi9icmVhZGNydW1icy10b2tlbnMuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBSb3V0ZXJMaW5rLFxuICAgICAgICBLYnFJY29uTW9kdWxlLFxuICAgICAgICBLYnFCdXR0b25Nb2R1bGUsXG4gICAgICAgIEticURyb3Bkb3duTW9kdWxlLFxuICAgICAgICBLYnFCcmVhZGNydW1iQnV0dG9uLFxuICAgICAgICBLYnFUaXRsZU1vZHVsZSxcbiAgICAgICAgS2JxT3ZlcmZsb3dJdGVtc01vZHVsZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ticS1icmVhZGNydW1icycsXG4gICAgICAgICdbY2xhc3Mua2JxLWJyZWFkY3J1bWJzX2NvbXBhY3RdJzogJ3NpemUgPT09IFwiY29tcGFjdFwiJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYnJlYWRjcnVtYnNfbm9ybWFsXSc6ICdzaXplID09PSBcIm5vcm1hbFwiJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYnJlYWRjcnVtYnNfYmlnXSc6ICdzaXplID09PSBcImJpZ1wiJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYnJlYWRjcnVtYnNfd3JhcF0nOiAnd3JhcE1vZGUgPT09IFwid3JhcFwiJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtYnJlYWRjcnVtYnNfZmlyc3QtaXRlbS1uZWdhdGl2ZS1tYXJnaW5dJzogJ2ZpcnN0SXRlbU5lZ2F0aXZlTWFyZ2luJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogXCInYnJlYWRjcnVtYidcIlxuICAgIH0sXG4gICAgLy8gQFRPRE8gYWRkIHN1cHBvcnQgZm9yIEhvbWUsRW5kIGtleXMgaW50ZXJhY3Rpb24gKCNEUy0zMzM0KVxuICAgIGhvc3REaXJlY3RpdmVzOiBbUmR4Um92aW5nRm9jdXNHcm91cERpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgS2JxQnJlYWRjcnVtYnMgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlndXJhdGlvbiA9IGluamVjdChLQlFfQlJFQURDUlVNQlNfQ09ORklHVVJBVElPTik7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiBhIG5lZ2F0aXZlIG1hcmdpbiBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgZmlyc3QgYnJlYWRjcnVtYiBpdGVtLlxuICAgICAqXG4gICAgICogQHNlZSBLYnFCcmVhZGNydW1ic0NvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmlyc3RJdGVtTmVnYXRpdmVNYXJnaW46IGJvb2xlYW4gPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uZmlyc3RJdGVtTmVnYXRpdmVNYXJnaW47XG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiB0aGUgYnJlYWRjcnVtYnMuIEFmZmVjdHMgZm9udCBzaXplLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KCkgc2l6ZTogS2JxRGVmYXVsdFNpemVzID0gdGhpcy5jb25maWd1cmF0aW9uLnNpemU7XG4gICAgLyoqXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgdmlzaWJsZSBicmVhZGNydW1iIGl0ZW1zLlxuICAgICAqIFJlbWFpbmluZyBpdGVtcyBhcmUgY29sbGFwc2VkIGludG8gYSBkcm9wZG93biBpZiB0aGUgdG90YWwgZXhjZWVkcyB0aGlzIHZhbHVlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KCkgbWF4OiBudW1iZXIgfCBudWxsID0gdGhpcy5jb25maWd1cmF0aW9uLm1heDtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYnJlYWRjcnVtYnMgYXJlIGRpc2FibGVkLlxuICAgICAqIFdoZW4gZGlzYWJsZWQsIHVzZXIgaW50ZXJhY3Rpb25zIGFyZSBibG9ja2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdyYXBwaW5nIGJlaGF2aW9yIG9mIHRoZSBicmVhZGNydW1iIGl0ZW1zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHdyYXBNb2RlOiBLYnFCcmVhZGNydW1ic1dyYXBNb2RlID0gdGhpcy5jb25maWd1cmF0aW9uLndyYXBNb2RlO1xuXG4gICAgQENvbnRlbnRDaGlsZChLYnFCcmVhZGNydW1ic1NlcGFyYXRvciwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHByb3RlY3RlZCByZWFkb25seSBzZXBhcmF0b3I/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEticUJyZWFkY3J1bWJJdGVtKSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXM6IFF1ZXJ5TGlzdDxLYnFCcmVhZGNydW1iSXRlbT47XG5cbiAgICBAVmlld0NoaWxkKEticU92ZXJmbG93SXRlbXNSZXN1bHQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdWx0OiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZHJlbihLYnFPdmVyZmxvd0l0ZW0sIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmZsb3dJdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgLyoqXG4gICAgICogRW5zdXJlcyBhdCBsZWFzdCBtaW5pbXVtIG51bWJlciBvZiBicmVhZGNydW1iIGl0ZW1zIGFyZSBzaG93bi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWluVmlzaWJsZUl0ZW1zID0gMjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgS2JxQ29tcG9uZW50Q29sb3JzID0gS2JxQ29tcG9uZW50Q29sb3JzO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBLYnFCdXR0b25TdHlsZXMgPSBLYnFCdXR0b25TdHlsZXM7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IFBvcFVwUGxhY2VtZW50cyA9IFBvcFVwUGxhY2VtZW50cztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGl0ZW1zRXhjbHVkaW5nRWRnZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLnRvQXJyYXkoKS5zbGljZSgxLCAtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgd2lkdGggb2YgdmlzaWJsZSBpdGVtcyBiYXNlZCBvbiB0aGUgYG1heGAgdmFsdWUgYW5kIG92ZXJmbG93IGl0ZW1zLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXIgfCBudWxsfSBUaGUgY29tcHV0ZWQgbWF4IHdpZHRoIGZvciBvdmVyZmxvdyBpdGVtcyBvciBudWxsIGlmIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgbWF4V2lkdGgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLm92ZXJmbG93SXRlbXMgfHxcbiAgICAgICAgICAgICF0aGlzLm92ZXJmbG93SXRlbXMubGVuZ3RoIHx8XG4gICAgICAgICAgICB0aGlzLm1heCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy5tYXggPj0gdGhpcy5pdGVtcy5sZW5ndGggfHxcbiAgICAgICAgICAgIHRoaXMubWF4IDwgdGhpcy5taW5WaXNpYmxlSXRlbXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2aXNpYmxlSXRlbXNXaWR0aCA9IHRoaXMuZ2V0SXRlbVdpZHRoKHRoaXMucmVzdWx0KTtcbiAgICAgICAgLy8gUmVvcmRlcnMgb3ZlcmZsb3cgaXRlbXMgdG8gcHJpb3JpdGl6ZSB0aGUgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHNcbiAgICAgICAgY29uc3Qgc29ydGVkSXRlbXMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLm92ZXJmbG93SXRlbXMudG9BcnJheSgpLnNsaWNlKDEsIC0xKSxcbiAgICAgICAgICAgIHRoaXMub3ZlcmZsb3dJdGVtcy5maXJzdCxcbiAgICAgICAgICAgIHRoaXMub3ZlcmZsb3dJdGVtcy5sYXN0XG4gICAgICAgIF07XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1heCAtIDE7IGkrKykge1xuICAgICAgICAgICAgdmlzaWJsZUl0ZW1zV2lkdGggKz0gdGhpcy5nZXRJdGVtV2lkdGgoc29ydGVkSXRlbXNbc29ydGVkSXRlbXMubGVuZ3RoIC0gaSAtIDFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2aXNpYmxlSXRlbXNXaWR0aDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbVdpZHRoKGl0ZW0/OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHJldHVybiBpdGVtID8gaXRlbS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDogMDtcbiAgICB9XG59XG4iLCI8IS0tXG5AVE9ETzogY2hlY2sgd2hlbiB1cGRhdGVkIHRvIEFuZ3VsYXIgMjAueCAoI0RTLTQwMzQpXG5yZXNvbHZlZCBTU1IgaXNzdWUgd2l0aCBvZmZpY2lhbCBoYWNrIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzUwNTQzI2lzc3VlY29tbWVudC0xNTcyOTAwMjU5XG4tLT5cbjxuZy1jb250ZW50IC8+XG5AaWYgKGl0ZW1zLmxlbmd0aCA8IG1pblZpc2libGVJdGVtcyB8fCB3cmFwTW9kZSAhPT0gJ2F1dG8nKSB7XG4gICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbTsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWJyZWFkY3J1bWItaXRlbV9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnJlYWRjcnVtYlRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgbGFzdDogbGFzdCB9XCIgLz5cbiAgICAgICAgICAgIEBpZiAoIWxhc3QpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlcGFyYXRvclRlbXBsYXRlXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxufSBAZWxzZSB7XG4gICAgPGRpdlxuICAgICAgICAja2JxT3ZlcmZsb3dJdGVtcz1cImticU92ZXJmbG93SXRlbXNcIlxuICAgICAgICBrYnFPdmVyZmxvd0l0ZW1zXG4gICAgICAgIHJldmVyc2VPdmVyZmxvd09yZGVyXG4gICAgICAgIGNsYXNzPVwibGF5b3V0LWFsaWduLXN0YXJ0LWNlbnRlclwiXG4gICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWF4V2lkdGhcIlxuICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1icmVhZGNydW1iLWl0ZW1fX2NvbnRhaW5lclwiIFtrYnFPdmVyZmxvd0l0ZW1dPVwiMFwiIFtvcmRlcl09XCJpdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJicmVhZGNydW1iVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtcy5maXJzdCwgbGFzdDogZmFsc2UgfVwiIC8+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlcGFyYXRvclRlbXBsYXRlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gQFRPRE8gZGVsYXkgcmVuZGVyaW5nIGZvciBwcm9wZXIgZWxlbWVudHMgb3JkZXIgKCNEUy0zMzM0KS0tLT5cbiAgICAgICAgQGlmICh0cnVlKSB7XG4gICAgICAgICAgICA8ZGl2IGticU92ZXJmbG93SXRlbXNSZXN1bHQgY2xhc3M9XCJrYnEtYnJlYWRjcnVtYi1pdGVtX19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGticS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAga2JxQnJlYWRjcnVtYlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1icmVhZGNydW1iX19leHBhbmRcIlxuICAgICAgICAgICAgICAgICAgICBba2JxRHJvcGRvd25UcmlnZ2VyRm9yXT1cImhpZGRlbkJyZWFkY3J1bWJzRHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICBba2JxU3R5bGVdPVwiS2JxQnV0dG9uU3R5bGVzLlRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW29wZW5CeUFycm93RG93bl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aSBrYnEtaWNvbj1cImticS1lbGxpcHNpcy1ob3Jpem9udGFsXzE2XCIgW2NvbG9yXT1cIkticUNvbXBvbmVudENvbG9ycy5Db250cmFzdEZhZGVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZXBhcmF0b3JUZW1wbGF0ZVwiIC8+XG5cbiAgICAgICAgICAgICAgICA8a2JxLWRyb3Bkb3duICNoaWRkZW5CcmVhZGNydW1ic0Ryb3Bkb3duPVwia2JxRHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChrYnFPdmVyZmxvd0l0ZW1zLmhpZGRlbkl0ZW1JRHMoKS5oYXMoJGluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwia2JxLWJyZWFkY3J1bWItaXRlbV9fbGluay1iZWhhdmlvclwiIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGluaz8udXJsVHJlZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGticS1kcm9wZG93bi1pdGVtIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCI+e3sgaXRlbS50ZXh0IH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9rYnEtZHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zRXhjbHVkaW5nRWRnZXM7IHRyYWNrIGl0ZW07IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1icmVhZGNydW1iLWl0ZW1fX2NvbnRhaW5lclwiIFtrYnFPdmVyZmxvd0l0ZW1dPVwiaW5kZXggKyAxXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJyZWFkY3J1bWJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGxhc3Q6IGZhbHNlIH1cIiAvPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VwYXJhdG9yVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBhbHdheXNWaXNpYmxlIGNsYXNzPVwia2JxLWJyZWFkY3J1bWItaXRlbV9fY29udGFpbmVyXCIgW2ticU92ZXJmbG93SXRlbV09XCJpdGVtcy5sZW5ndGggLSAxXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnJlYWRjcnVtYlRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbXMubGFzdCwgbGFzdDogdHJ1ZSB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG5cbjxuZy10ZW1wbGF0ZSAjYnJlYWRjcnVtYlRlbXBsYXRlIGxldC1pdGVtIGxldC1sYXN0PVwibGFzdFwiPlxuICAgIEBpZiAoaXRlbS5jdXN0b21UZW1wbGF0ZVJlZikge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW0uY3VzdG9tVGVtcGxhdGVSZWZcIiAvPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJrYnEtYnJlYWRjcnVtYi1pdGVtX19saW5rLWJlaGF2aW9yXCIgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rPy51cmxUcmVlXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAga2JxLWJ1dHRvblxuICAgICAgICAgICAgICAgIGticS10aXRsZVxuICAgICAgICAgICAgICAgIGticUJyZWFkY3J1bWJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwibGFzdCA/ICdwYWdlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkIHx8IGxhc3RcIlxuICAgICAgICAgICAgICAgIFtrYnFQbGFjZW1lbnRQcmlvcml0eV09XCJQb3BVcFBsYWNlbWVudHMuQm90dG9tXCJcbiAgICAgICAgICAgICAgICBba2JxVG9vbHRpcEFycm93XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2E+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZXBhcmF0b3JUZW1wbGF0ZT5cbiAgICBAaWYgKHNlcGFyYXRvcikge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlcGFyYXRvclwiIC8+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxpIGticS1pY29uPVwiXCIgY2xhc3M9XCJrYnEtYnJlYWRjcnVtYl9fc2VwYXJhdG9yXCIgW2NvbG9yXT1cIkticUNvbXBvbmVudENvbG9ycy5Db250cmFzdEZhZGVcIj4mbmJzcDsvJm5ic3A7PC9pPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=