@entake/particle 17.0.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 (208) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +396 -0
  3. package/app/modules/accordion/accordion.component.d.ts +26 -0
  4. package/app/modules/accordion/accordion.module.d.ts +11 -0
  5. package/app/modules/accordion/directives/accordion-content.directive.d.ts +8 -0
  6. package/app/modules/accordion/directives/accordion-header.directive.d.ts +8 -0
  7. package/app/modules/accordion/directives/accordion-item.directive.d.ts +13 -0
  8. package/app/modules/background-carousel/background-carousel.directive.d.ts +42 -0
  9. package/app/modules/background-carousel/carousel-options.model.d.ts +30 -0
  10. package/app/modules/background-carousel/particle-background-carousel.module.d.ts +8 -0
  11. package/app/modules/checkbox/checkbox.component.d.ts +43 -0
  12. package/app/modules/checkbox/checkbox.module.d.ts +9 -0
  13. package/app/modules/color-picker/color-picker.component.d.ts +149 -0
  14. package/app/modules/color-picker/color-picker.module.d.ts +9 -0
  15. package/app/modules/date-picker/components/calendar/calendar.component.d.ts +211 -0
  16. package/app/modules/date-picker/components/date-range-picker/date-range-picker.component.d.ts +95 -0
  17. package/app/modules/date-picker/date-picker.component.d.ts +259 -0
  18. package/app/modules/date-picker/date-picker.module.d.ts +15 -0
  19. package/app/modules/dialog/dialog.component.d.ts +87 -0
  20. package/app/modules/dialog/dialog.module.d.ts +9 -0
  21. package/app/modules/dropdown/dropdown.component.d.ts +288 -0
  22. package/app/modules/dropdown/dropdown.module.d.ts +9 -0
  23. package/app/modules/dropdown/models/dropdown-option-group.model.d.ts +16 -0
  24. package/app/modules/dropdown/models/dropdown-option.model.d.ts +25 -0
  25. package/app/modules/endpoint-state/components/endpoint-state.component.d.ts +46 -0
  26. package/app/modules/endpoint-state/endpoint-state.module.d.ts +8 -0
  27. package/app/modules/icons/components/icon-select.component.d.ts +229 -0
  28. package/app/modules/icons/models/fontawesome-icons-brands.model.d.ts +13 -0
  29. package/app/modules/icons/models/fontawesome-icons-regular.model.d.ts +13 -0
  30. package/app/modules/icons/models/fontawesome-icons-solid.model.d.ts +13 -0
  31. package/app/modules/icons/models/particle-icons-light.model.d.ts +197 -0
  32. package/app/modules/icons/models/particle-icons-regular.model.d.ts +205 -0
  33. package/app/modules/icons/models/particle-icons-solid.model.d.ts +365 -0
  34. package/app/modules/icons/particle-icons.module.d.ts +13 -0
  35. package/app/modules/icons/services/icons.service.d.ts +44 -0
  36. package/app/modules/idle-timeout/idle-timeout.component.d.ts +35 -0
  37. package/app/modules/idle-timeout/idle-timer.d.ts +14 -0
  38. package/app/modules/idle-timeout/particle-idle-timeout.module.d.ts +9 -0
  39. package/app/modules/input-mask/input-mask.component.d.ts +86 -0
  40. package/app/modules/input-mask/input-mask.module.d.ts +8 -0
  41. package/app/modules/keyfilter/keyfilter.directive.d.ts +60 -0
  42. package/app/modules/keyfilter/keyfilter.module.d.ts +8 -0
  43. package/app/modules/layout/components/layout-full-framing/layout-full-framing.component.d.ts +27 -0
  44. package/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.d.ts +23 -0
  45. package/app/modules/layout/layout.module.d.ts +10 -0
  46. package/app/modules/loader/components/loader.component.d.ts +11 -0
  47. package/app/modules/loader/loader.module.d.ts +8 -0
  48. package/app/modules/multi-select/models/multi-select-option-group.model.d.ts +16 -0
  49. package/app/modules/multi-select/models/multi-select-option.model.d.ts +25 -0
  50. package/app/modules/multi-select/multi-select.component.d.ts +279 -0
  51. package/app/modules/multi-select/multi-select.module.d.ts +8 -0
  52. package/app/modules/notification/models/notification.model.d.ts +21 -0
  53. package/app/modules/notification/notification.component.d.ts +46 -0
  54. package/app/modules/notification/notification.module.d.ts +8 -0
  55. package/app/modules/notification/services/notification.service.d.ts +54 -0
  56. package/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.d.ts +8 -0
  57. package/app/modules/ordinal-number-pipe/ordinal-number.pipe.d.ts +15 -0
  58. package/app/modules/paginator/pagination-event.model.d.ts +24 -0
  59. package/app/modules/paginator/paginator.component.d.ts +103 -0
  60. package/app/modules/paginator/particle-paginator.module.d.ts +13 -0
  61. package/app/modules/popover/popover.component.d.ts +140 -0
  62. package/app/modules/popover/popover.module.d.ts +9 -0
  63. package/app/modules/profile-pic/particle-profile-pic.module.d.ts +9 -0
  64. package/app/modules/profile-pic/profile-pic.component.d.ts +32 -0
  65. package/app/modules/progress-bar/progress-bar.component.d.ts +16 -0
  66. package/app/modules/progress-bar/progress-bar.module.d.ts +8 -0
  67. package/app/modules/push-container/particle-push-container.module.d.ts +9 -0
  68. package/app/modules/push-container/push-container-state.model.d.ts +7 -0
  69. package/app/modules/push-container/push-container.component.d.ts +137 -0
  70. package/app/modules/rich-text/particle-rich-text.module.d.ts +15 -0
  71. package/app/modules/rich-text/render-rich-text.component.d.ts +6 -0
  72. package/app/modules/rich-text/rich-text-capabilities.model.d.ts +7 -0
  73. package/app/modules/rich-text/rich-text.component.d.ts +48 -0
  74. package/app/modules/scroll-to-top/particle-scroll-to-top.module.d.ts +8 -0
  75. package/app/modules/scroll-to-top/scroll-to-top.component.d.ts +19 -0
  76. package/app/modules/slideover/particle-slideover.module.d.ts +8 -0
  77. package/app/modules/slideover/slideover.component.d.ts +35 -0
  78. package/app/modules/slider/slider.component.d.ts +143 -0
  79. package/app/modules/slider/slider.module.d.ts +9 -0
  80. package/app/modules/theming/components/theming.component.d.ts +43 -0
  81. package/app/modules/theming/models/theme.model.d.ts +88 -0
  82. package/app/modules/theming/services/theme-change-detection.service.d.ts +26 -0
  83. package/app/modules/theming/services/theming.service.d.ts +142 -0
  84. package/app/modules/theming/theming.module.d.ts +12 -0
  85. package/app/modules/toggle-switch/models/toggle-options.model.d.ts +11 -0
  86. package/app/modules/toggle-switch/toggle-switch.component.d.ts +43 -0
  87. package/app/modules/toggle-switch/toggle-switch.module.d.ts +8 -0
  88. package/app/modules/tooltip/tooltip.directive.d.ts +157 -0
  89. package/app/modules/tooltip/tooltip.module.d.ts +8 -0
  90. package/app/modules/week-picker/week-picker.component.d.ts +289 -0
  91. package/app/modules/week-picker/week-picker.module.d.ts +13 -0
  92. package/app/shared/enums/endpoint-status.enum.d.ts +9 -0
  93. package/app/shared/interceptors/json.interceptor.d.ts +17 -0
  94. package/app/shared/models/auditable.model.d.ts +21 -0
  95. package/app/shared/models/data-list.model.d.ts +9 -0
  96. package/app/shared/models/id.model.d.ts +9 -0
  97. package/app/shared/models/observable-container.d.ts +8 -0
  98. package/app/shared/models/particle-component-text.model.d.ts +211 -0
  99. package/app/shared/services/base-data.service.d.ts +130 -0
  100. package/app/shared/services/dialog.service.d.ts +10 -0
  101. package/app/shared/services/local-storage.service.d.ts +41 -0
  102. package/esm2022/app/modules/accordion/accordion.component.mjs +101 -0
  103. package/esm2022/app/modules/accordion/accordion.module.mjs +37 -0
  104. package/esm2022/app/modules/accordion/directives/accordion-content.directive.mjs +17 -0
  105. package/esm2022/app/modules/accordion/directives/accordion-header.directive.mjs +17 -0
  106. package/esm2022/app/modules/accordion/directives/accordion-item.directive.mjs +36 -0
  107. package/esm2022/app/modules/background-carousel/background-carousel.directive.mjs +91 -0
  108. package/esm2022/app/modules/background-carousel/carousel-options.model.mjs +36 -0
  109. package/esm2022/app/modules/background-carousel/particle-background-carousel.module.mjs +24 -0
  110. package/esm2022/app/modules/checkbox/checkbox.component.mjs +108 -0
  111. package/esm2022/app/modules/checkbox/checkbox.module.mjs +28 -0
  112. package/esm2022/app/modules/color-picker/color-picker.component.mjs +306 -0
  113. package/esm2022/app/modules/color-picker/color-picker.module.mjs +19 -0
  114. package/esm2022/app/modules/date-picker/components/calendar/calendar.component.mjs +496 -0
  115. package/esm2022/app/modules/date-picker/components/date-range-picker/date-range-picker.component.mjs +250 -0
  116. package/esm2022/app/modules/date-picker/date-picker.component.mjs +538 -0
  117. package/esm2022/app/modules/date-picker/date-picker.module.mjs +56 -0
  118. package/esm2022/app/modules/dialog/dialog.component.mjs +177 -0
  119. package/esm2022/app/modules/dialog/dialog.module.mjs +28 -0
  120. package/esm2022/app/modules/dropdown/dropdown.component.mjs +682 -0
  121. package/esm2022/app/modules/dropdown/dropdown.module.mjs +28 -0
  122. package/esm2022/app/modules/dropdown/models/dropdown-option-group.model.mjs +2 -0
  123. package/esm2022/app/modules/dropdown/models/dropdown-option.model.mjs +2 -0
  124. package/esm2022/app/modules/endpoint-state/components/endpoint-state.component.mjs +75 -0
  125. package/esm2022/app/modules/endpoint-state/endpoint-state.module.mjs +22 -0
  126. package/esm2022/app/modules/icons/components/icon-select.component.mjs +377 -0
  127. package/esm2022/app/modules/icons/models/fontawesome-icons-brands.model.mjs +471 -0
  128. package/esm2022/app/modules/icons/models/fontawesome-icons-regular.model.mjs +166 -0
  129. package/esm2022/app/modules/icons/models/fontawesome-icons-solid.model.mjs +1016 -0
  130. package/esm2022/app/modules/icons/models/particle-icons-light.model.mjs +310 -0
  131. package/esm2022/app/modules/icons/models/particle-icons-regular.model.mjs +324 -0
  132. package/esm2022/app/modules/icons/models/particle-icons-solid.model.mjs +581 -0
  133. package/esm2022/app/modules/icons/particle-icons.module.mjs +66 -0
  134. package/esm2022/app/modules/icons/services/icons.service.mjs +86 -0
  135. package/esm2022/app/modules/idle-timeout/idle-timeout.component.mjs +85 -0
  136. package/esm2022/app/modules/idle-timeout/idle-timer.mjs +66 -0
  137. package/esm2022/app/modules/idle-timeout/particle-idle-timeout.module.mjs +28 -0
  138. package/esm2022/app/modules/input-mask/input-mask.component.mjs +594 -0
  139. package/esm2022/app/modules/input-mask/input-mask.module.mjs +18 -0
  140. package/esm2022/app/modules/keyfilter/keyfilter.directive.mjs +158 -0
  141. package/esm2022/app/modules/keyfilter/keyfilter.module.mjs +18 -0
  142. package/esm2022/app/modules/layout/components/layout-full-framing/layout-full-framing.component.mjs +79 -0
  143. package/esm2022/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.mjs +65 -0
  144. package/esm2022/app/modules/layout/layout.module.mjs +33 -0
  145. package/esm2022/app/modules/loader/components/loader.component.mjs +30 -0
  146. package/esm2022/app/modules/loader/loader.module.mjs +24 -0
  147. package/esm2022/app/modules/multi-select/models/multi-select-option-group.model.mjs +2 -0
  148. package/esm2022/app/modules/multi-select/models/multi-select-option.model.mjs +2 -0
  149. package/esm2022/app/modules/multi-select/multi-select.component.mjs +665 -0
  150. package/esm2022/app/modules/multi-select/multi-select.module.mjs +18 -0
  151. package/esm2022/app/modules/notification/models/notification.model.mjs +2 -0
  152. package/esm2022/app/modules/notification/notification.component.mjs +122 -0
  153. package/esm2022/app/modules/notification/notification.module.mjs +18 -0
  154. package/esm2022/app/modules/notification/services/notification.service.mjs +84 -0
  155. package/esm2022/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.mjs +20 -0
  156. package/esm2022/app/modules/ordinal-number-pipe/ordinal-number.pipe.mjs +49 -0
  157. package/esm2022/app/modules/paginator/pagination-event.model.mjs +29 -0
  158. package/esm2022/app/modules/paginator/paginator.component.mjs +207 -0
  159. package/esm2022/app/modules/paginator/particle-paginator.module.mjs +48 -0
  160. package/esm2022/app/modules/popover/popover.component.mjs +352 -0
  161. package/esm2022/app/modules/popover/popover.module.mjs +24 -0
  162. package/esm2022/app/modules/profile-pic/particle-profile-pic.module.mjs +28 -0
  163. package/esm2022/app/modules/profile-pic/profile-pic.component.mjs +74 -0
  164. package/esm2022/app/modules/progress-bar/progress-bar.component.mjs +43 -0
  165. package/esm2022/app/modules/progress-bar/progress-bar.module.mjs +24 -0
  166. package/esm2022/app/modules/push-container/particle-push-container.module.mjs +26 -0
  167. package/esm2022/app/modules/push-container/push-container-state.model.mjs +2 -0
  168. package/esm2022/app/modules/push-container/push-container.component.mjs +363 -0
  169. package/esm2022/app/modules/rich-text/particle-rich-text.module.mjs +64 -0
  170. package/esm2022/app/modules/rich-text/render-rich-text.component.mjs +18 -0
  171. package/esm2022/app/modules/rich-text/rich-text-capabilities.model.mjs +2 -0
  172. package/esm2022/app/modules/rich-text/rich-text.component.mjs +187 -0
  173. package/esm2022/app/modules/scroll-to-top/particle-scroll-to-top.module.mjs +24 -0
  174. package/esm2022/app/modules/scroll-to-top/scroll-to-top.component.mjs +49 -0
  175. package/esm2022/app/modules/slideover/particle-slideover.module.mjs +24 -0
  176. package/esm2022/app/modules/slideover/slideover.component.mjs +115 -0
  177. package/esm2022/app/modules/slider/slider.component.mjs +243 -0
  178. package/esm2022/app/modules/slider/slider.module.mjs +26 -0
  179. package/esm2022/app/modules/theming/components/theming.component.mjs +86 -0
  180. package/esm2022/app/modules/theming/models/theme.model.mjs +9 -0
  181. package/esm2022/app/modules/theming/services/theme-change-detection.service.mjs +38 -0
  182. package/esm2022/app/modules/theming/services/theming.service.mjs +507 -0
  183. package/esm2022/app/modules/theming/theming.module.mjs +55 -0
  184. package/esm2022/app/modules/toggle-switch/models/toggle-options.model.mjs +2 -0
  185. package/esm2022/app/modules/toggle-switch/toggle-switch.component.mjs +107 -0
  186. package/esm2022/app/modules/toggle-switch/toggle-switch.module.mjs +24 -0
  187. package/esm2022/app/modules/tooltip/tooltip.directive.mjs +381 -0
  188. package/esm2022/app/modules/tooltip/tooltip.module.mjs +18 -0
  189. package/esm2022/app/modules/week-picker/week-picker.component.mjs +511 -0
  190. package/esm2022/app/modules/week-picker/week-picker.module.mjs +40 -0
  191. package/esm2022/app/shared/enums/endpoint-status.enum.mjs +11 -0
  192. package/esm2022/app/shared/interceptors/json.interceptor.mjs +23 -0
  193. package/esm2022/app/shared/models/auditable.model.mjs +2 -0
  194. package/esm2022/app/shared/models/data-list.model.mjs +2 -0
  195. package/esm2022/app/shared/models/id.model.mjs +2 -0
  196. package/esm2022/app/shared/models/observable-container.mjs +15 -0
  197. package/esm2022/app/shared/models/particle-component-text.model.mjs +2 -0
  198. package/esm2022/app/shared/services/base-data.service.mjs +190 -0
  199. package/esm2022/app/shared/services/dialog.service.mjs +50 -0
  200. package/esm2022/app/shared/services/local-storage.service.mjs +60 -0
  201. package/esm2022/entake-particle.mjs +5 -0
  202. package/esm2022/public_api.mjs +98 -0
  203. package/fesm2022/entake-particle.mjs +12477 -0
  204. package/fesm2022/entake-particle.mjs.map +1 -0
  205. package/index.d.ts +5 -0
  206. package/package.json +65 -0
  207. package/particle.css +1 -0
  208. package/public_api.d.ts +97 -0
@@ -0,0 +1,250 @@
1
+ import { Component, forwardRef, Input, ViewChild } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { BehaviorSubject, tap } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ import * as i3 from "../../../popover/popover.component";
8
+ import * as i4 from "../../date-picker.component";
9
+ import * as i5 from "../calendar/calendar.component";
10
+ export class DateRangePickerComponent {
11
+ changeDetectorRef;
12
+ currentYear = new Date().getFullYear();
13
+ _disabled = false;
14
+ _value$ = new BehaviorSubject(null);
15
+ _lastValue = null;
16
+ _init = false;
17
+ valueObs$ = this._value$.asObservable().pipe(tap(value => {
18
+ let newValue = { start: null, end: null };
19
+ if (value && value.start && value.end) {
20
+ newValue = { start: value.start, end: value.end };
21
+ }
22
+ if (newValue !== this._lastValue) {
23
+ this._lastValue = newValue;
24
+ if (this._init) {
25
+ this.onChange(this._lastValue);
26
+ }
27
+ }
28
+ }));
29
+ inputId = null;
30
+ inputClassList = '';
31
+ calendarButtonClassList = '';
32
+ text = {
33
+ begin: 'Begin',
34
+ end: 'End',
35
+ done: 'Done',
36
+ clear: 'Clear',
37
+ openCalendar: 'Open Calendar',
38
+ selectRange: 'Choose a Range'
39
+ };
40
+ set dateRange(value) {
41
+ this._dateRange = value;
42
+ if (this.value && this.value.start) {
43
+ this._endDateRange = {
44
+ minDate: this.value.start,
45
+ maxDate: value.maxDate
46
+ };
47
+ }
48
+ else {
49
+ this._endDateRange = value;
50
+ }
51
+ }
52
+ get dateRange() {
53
+ return this._dateRange;
54
+ }
55
+ get endDateRange() {
56
+ return this._endDateRange;
57
+ }
58
+ _dateRange = {
59
+ minDate: new Date(this.currentYear - 100, 0, 1),
60
+ maxDate: new Date(this.currentYear + 100, 11, 31)
61
+ };
62
+ _endDateRange = {
63
+ minDate: new Date(this.currentYear - 100, 0, 1),
64
+ maxDate: new Date(this.currentYear + 100, 11, 31)
65
+ };
66
+ set value(value) {
67
+ if (!value) {
68
+ value = { start: null, end: null };
69
+ }
70
+ this._value$.next(value);
71
+ if (value) {
72
+ this.beginDate = value.start;
73
+ }
74
+ }
75
+ get value() {
76
+ return this._lastValue;
77
+ }
78
+ set disabled(disabled) {
79
+ this._disabled = disabled;
80
+ }
81
+ get disabled() {
82
+ return this._disabled;
83
+ }
84
+ ariaLabel = null;
85
+ /**
86
+ * Format for the selected date range in the selection preview. Must
87
+ * be a valid Angular DatePipe format
88
+ */
89
+ dateFormat = 'MM/dd/y';
90
+ calendarPopover = null;
91
+ beginCalendar = null;
92
+ endCalendar = null;
93
+ ngAfterViewInit() {
94
+ this._init = true;
95
+ }
96
+ get beginDate() {
97
+ if (this._value$.value) {
98
+ return this._value$.value.start;
99
+ }
100
+ return null;
101
+ }
102
+ set beginDate(beginDate) {
103
+ let value = this._value$.value;
104
+ value.start = beginDate;
105
+ if (!beginDate && this.beginCalendar) {
106
+ if (this.beginCalendar) {
107
+ this.beginCalendar.clear();
108
+ }
109
+ }
110
+ this._value$.next(value);
111
+ if (!beginDate || beginDate > this.endDate) {
112
+ this.endDate = null;
113
+ }
114
+ this._endDateRange = {
115
+ minDate: beginDate,
116
+ maxDate: this.dateRange.maxDate
117
+ };
118
+ }
119
+ get endDate() {
120
+ if (this._value$.value) {
121
+ return this._value$.value.end;
122
+ }
123
+ return null;
124
+ }
125
+ set endDate(endDate) {
126
+ if (this._value$.value && endDate < this._value$.value.start) {
127
+ endDate = null;
128
+ if (this.endCalendar) {
129
+ this.endCalendar.clear();
130
+ }
131
+ }
132
+ let value = this._value$.value;
133
+ value.end = endDate;
134
+ if (!endDate && this.endCalendar) {
135
+ if (this.endCalendar) {
136
+ this.endCalendar.clear();
137
+ }
138
+ }
139
+ this._value$.next(value);
140
+ }
141
+ /**
142
+ * Function to call on change
143
+ */
144
+ onChange = () => { };
145
+ /**
146
+ * Function to call on touch
147
+ */
148
+ onTouched = () => { };
149
+ constructor(changeDetectorRef) {
150
+ this.changeDetectorRef = changeDetectorRef;
151
+ }
152
+ /**
153
+ * Write value
154
+ * @param value the value to write
155
+ */
156
+ writeValue(value) {
157
+ this.value = value;
158
+ this.changeDetectorRef.markForCheck();
159
+ }
160
+ /**
161
+ * Register function on change
162
+ * @param fn the function to change
163
+ */
164
+ registerOnChange(fn) {
165
+ this.onChange = fn;
166
+ }
167
+ /**
168
+ * Register function on touch
169
+ * @param fn the function to register
170
+ */
171
+ registerOnTouched(fn) {
172
+ this.onTouched = fn;
173
+ }
174
+ /**
175
+ * Set disabled state
176
+ * @param isDisabled whether or not the control is disabled
177
+ */
178
+ setDisabledState(isDisabled) {
179
+ this.disabled = isDisabled;
180
+ this.changeDetectorRef.markForCheck();
181
+ }
182
+ openCalendar(event) {
183
+ if (!this.disabled) {
184
+ this.calendarPopover.toggle(event);
185
+ }
186
+ }
187
+ updateModel(isBegin, date) {
188
+ if (isBegin) {
189
+ this.beginDate = date;
190
+ }
191
+ else {
192
+ this.endDate = date;
193
+ }
194
+ }
195
+ checkState() {
196
+ const val = this._value$.value;
197
+ if (val && ((val.start > val.end) || !(val.start && val.end))) {
198
+ this.clear();
199
+ }
200
+ }
201
+ clear() {
202
+ this.value = null;
203
+ }
204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: DateRangePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
205
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: DateRangePickerComponent, selector: "particle-date-range-picker", inputs: { inputId: "inputId", inputClassList: "inputClassList", calendarButtonClassList: "calendarButtonClassList", text: "text", dateRange: "dateRange", value: "value", disabled: "disabled", ariaLabel: "ariaLabel", dateFormat: "dateFormat" }, providers: [
206
+ {
207
+ provide: NG_VALUE_ACCESSOR,
208
+ useExisting: forwardRef(() => DateRangePickerComponent),
209
+ multi: true
210
+ }
211
+ ], viewQueries: [{ propertyName: "calendarPopover", first: true, predicate: ["calendarPopover"], descendants: true }, { propertyName: "beginCalendar", first: true, predicate: ["beginCalendar"], descendants: true }, { propertyName: "endCalendar", first: true, predicate: ["endCalendar"], descendants: true }], ngImport: i0, template: "<div style=\"cursor:default;overflow: hidden;\"\r\n [ngClass]=\"inputClassList ? '' : 'row ptl_input ptl_input_height ptl_input_bg_color ptl_brdr_color ptl_brdr_size ptl_brdr_radius ent_r2l_dir'\"\r\n [style.filter]=\"disabled ? 'brightness(.95)' : ''\">\r\n <button (click)=\"openCalendar($event)\"\r\n type=\"button\"\r\n aria-haspopup=\"dialog\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"(ariaLabel ? ariaLabel + ', ' : '') + text.openCalendar\"\r\n [attr.aria-expanded]=\"calendarPopover.visible\"\r\n [ngClass]=\"inputClassList ? inputClassList : 'clear'\"\r\n class=\"access btnset width100 height100 center_center\"\r\n style=\"outline-offset: -2px;\"\r\n >\r\n <div class=\"col size_1 height100 width100 ptl_input_text_size ptl_input_padding v_center\">\r\n <ng-container *ngIf=\"valueObs$ | async as value\">\r\n <ng-container *ngIf=\"value.start && value.end else placeholderTemplate\">\r\n {{value.start | date: dateFormat}} - {{value.end | date: dateFormat}}\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #placeholderTemplate>\r\n <div class=\"ent_r2l_txt\">{{text.selectRange}}...</div>\r\n </ng-template>\r\n </div>\r\n <div class=\"col min_w50 height100 center_center border_left\"\r\n [ngClass]=\"calendarButtonClassList ? calendarButtonClassList : 'bg_overlay ptl_brdr_color ptl_input_text_size'\">\r\n <div class=\"width100 height100 center_center\">\r\n <i class=\"fas fa-calendar-days ptl_input_text_size\"></i>\r\n </div>\r\n </div>\r\n </button>\r\n</div>\r\n\r\n<particle-popover (closed)=\"checkState()\" #calendarPopover>\r\n <div class=\"width100 space_between\">\r\n <div>\r\n <div class=\"pad_10 pad_bot0\">\r\n <div>{{text.begin}}:</div>\r\n <div>\r\n <particle-date-picker\r\n inputClassList=\"access input sm content_color\"\r\n [inputOnly]=\"true\"\r\n [(ngModel)]=\"beginDate\"\r\n [dateRange]=\"dateRange\">\r\n </particle-date-picker>\r\n </div>\r\n </div>\r\n <particle-calendar [value]=\"beginDate\"\r\n [text]=\"$any(text.calendarText)\"\r\n [dateRange]=\"dateRange\"\r\n [showControls]=\"false\"\r\n class=\"hide_element\"\r\n (selected)=\"updateModel(true, $event)\"\r\n #beginCalendar>\r\n </particle-calendar>\r\n </div>\r\n <div>\r\n <div class=\"pad_10 pad_bot0\">\r\n <div>{{text.end}}:</div>\r\n <div>\r\n <particle-date-picker\r\n inputClassList=\"access input sm content_color\"\r\n [inputOnly]=\"true\"\r\n [dateRange]=\"endDateRange\"\r\n [(ngModel)]=\"endDate\">\r\n </particle-date-picker>\r\n </div>\r\n </div>\r\n <particle-calendar [value]=\"endDate\"\r\n [text]=\"$any(text.calendarText)\"\r\n [dateRange]=\"endDateRange\"\r\n [showControls]=\"false\"\r\n class=\"hide_element\"\r\n (selected)=\"updateModel(false, $event)\"\r\n #endCalendar>\r\n </particle-calendar>\r\n <div class=\"mobile_only pad_bot10\"></div>\r\n </div>\r\n </div>\r\n <div class=\"bg_overlay brdr hr mar_5 mar_top0\"></div>\r\n <div class=\"row space_between\">\r\n <button (click)=\"clear()\"\r\n class=\"access btn sm bg_overlay_rev brdr mar_5 hov_bg\"\r\n [attr.aria-label]=\"text.clear\">\r\n <i class=\"fas fa-x mar_right5\"></i><span class=\"text bold\">{{text.clear}}</span>\r\n </button>\r\n\r\n <button (keyup.escape)=\"calendarPopover.close()\"\r\n (click)=\"calendarPopover.close()\"\r\n [attr.data-dialog-close-override]=\"true\"\r\n class=\"access btn sm bg_overlay_rev brdr mar_5 hov_bg\"\r\n [attr.aria-label]=\"text.done\">\r\n <i class=\"fas fa-check mar_right5\"></i><span class=\"text bold\">{{text.done}}</span>\r\n </button>\r\n </div>\r\n</particle-popover>\r\n\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PopoverComponent, selector: "particle-popover", inputs: ["offset", "width", "height", "classList", "targetOverride", "openDirection", "alignment", "scaleForMobile"], outputs: ["opened", "closed"] }, { kind: "component", type: i4.DatePickerComponent, selector: "particle-date-picker", inputs: ["value", "disabled", "dateRange", "inputId", "ariaLabel", "inputClassList", "calendarButtonClassList", "closeOnSelect", "placeholder", "inputOnly", "text"], outputs: ["input", "dateSelected"] }, { kind: "component", type: i5.CalendarComponent, selector: "particle-calendar", inputs: ["value", "dateRange", "text", "showControls"], outputs: ["selected", "closed"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
212
+ }
213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: DateRangePickerComponent, decorators: [{
214
+ type: Component,
215
+ args: [{ selector: 'particle-date-range-picker', providers: [
216
+ {
217
+ provide: NG_VALUE_ACCESSOR,
218
+ useExisting: forwardRef(() => DateRangePickerComponent),
219
+ multi: true
220
+ }
221
+ ], template: "<div style=\"cursor:default;overflow: hidden;\"\r\n [ngClass]=\"inputClassList ? '' : 'row ptl_input ptl_input_height ptl_input_bg_color ptl_brdr_color ptl_brdr_size ptl_brdr_radius ent_r2l_dir'\"\r\n [style.filter]=\"disabled ? 'brightness(.95)' : ''\">\r\n <button (click)=\"openCalendar($event)\"\r\n type=\"button\"\r\n aria-haspopup=\"dialog\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"(ariaLabel ? ariaLabel + ', ' : '') + text.openCalendar\"\r\n [attr.aria-expanded]=\"calendarPopover.visible\"\r\n [ngClass]=\"inputClassList ? inputClassList : 'clear'\"\r\n class=\"access btnset width100 height100 center_center\"\r\n style=\"outline-offset: -2px;\"\r\n >\r\n <div class=\"col size_1 height100 width100 ptl_input_text_size ptl_input_padding v_center\">\r\n <ng-container *ngIf=\"valueObs$ | async as value\">\r\n <ng-container *ngIf=\"value.start && value.end else placeholderTemplate\">\r\n {{value.start | date: dateFormat}} - {{value.end | date: dateFormat}}\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #placeholderTemplate>\r\n <div class=\"ent_r2l_txt\">{{text.selectRange}}...</div>\r\n </ng-template>\r\n </div>\r\n <div class=\"col min_w50 height100 center_center border_left\"\r\n [ngClass]=\"calendarButtonClassList ? calendarButtonClassList : 'bg_overlay ptl_brdr_color ptl_input_text_size'\">\r\n <div class=\"width100 height100 center_center\">\r\n <i class=\"fas fa-calendar-days ptl_input_text_size\"></i>\r\n </div>\r\n </div>\r\n </button>\r\n</div>\r\n\r\n<particle-popover (closed)=\"checkState()\" #calendarPopover>\r\n <div class=\"width100 space_between\">\r\n <div>\r\n <div class=\"pad_10 pad_bot0\">\r\n <div>{{text.begin}}:</div>\r\n <div>\r\n <particle-date-picker\r\n inputClassList=\"access input sm content_color\"\r\n [inputOnly]=\"true\"\r\n [(ngModel)]=\"beginDate\"\r\n [dateRange]=\"dateRange\">\r\n </particle-date-picker>\r\n </div>\r\n </div>\r\n <particle-calendar [value]=\"beginDate\"\r\n [text]=\"$any(text.calendarText)\"\r\n [dateRange]=\"dateRange\"\r\n [showControls]=\"false\"\r\n class=\"hide_element\"\r\n (selected)=\"updateModel(true, $event)\"\r\n #beginCalendar>\r\n </particle-calendar>\r\n </div>\r\n <div>\r\n <div class=\"pad_10 pad_bot0\">\r\n <div>{{text.end}}:</div>\r\n <div>\r\n <particle-date-picker\r\n inputClassList=\"access input sm content_color\"\r\n [inputOnly]=\"true\"\r\n [dateRange]=\"endDateRange\"\r\n [(ngModel)]=\"endDate\">\r\n </particle-date-picker>\r\n </div>\r\n </div>\r\n <particle-calendar [value]=\"endDate\"\r\n [text]=\"$any(text.calendarText)\"\r\n [dateRange]=\"endDateRange\"\r\n [showControls]=\"false\"\r\n class=\"hide_element\"\r\n (selected)=\"updateModel(false, $event)\"\r\n #endCalendar>\r\n </particle-calendar>\r\n <div class=\"mobile_only pad_bot10\"></div>\r\n </div>\r\n </div>\r\n <div class=\"bg_overlay brdr hr mar_5 mar_top0\"></div>\r\n <div class=\"row space_between\">\r\n <button (click)=\"clear()\"\r\n class=\"access btn sm bg_overlay_rev brdr mar_5 hov_bg\"\r\n [attr.aria-label]=\"text.clear\">\r\n <i class=\"fas fa-x mar_right5\"></i><span class=\"text bold\">{{text.clear}}</span>\r\n </button>\r\n\r\n <button (keyup.escape)=\"calendarPopover.close()\"\r\n (click)=\"calendarPopover.close()\"\r\n [attr.data-dialog-close-override]=\"true\"\r\n class=\"access btn sm bg_overlay_rev brdr mar_5 hov_bg\"\r\n [attr.aria-label]=\"text.done\">\r\n <i class=\"fas fa-check mar_right5\"></i><span class=\"text bold\">{{text.done}}</span>\r\n </button>\r\n </div>\r\n</particle-popover>\r\n\r\n" }]
222
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { inputId: [{
223
+ type: Input
224
+ }], inputClassList: [{
225
+ type: Input
226
+ }], calendarButtonClassList: [{
227
+ type: Input
228
+ }], text: [{
229
+ type: Input
230
+ }], dateRange: [{
231
+ type: Input
232
+ }], value: [{
233
+ type: Input
234
+ }], disabled: [{
235
+ type: Input
236
+ }], ariaLabel: [{
237
+ type: Input
238
+ }], dateFormat: [{
239
+ type: Input
240
+ }], calendarPopover: [{
241
+ type: ViewChild,
242
+ args: ['calendarPopover']
243
+ }], beginCalendar: [{
244
+ type: ViewChild,
245
+ args: ['beginCalendar']
246
+ }], endCalendar: [{
247
+ type: ViewChild,
248
+ args: ['endCalendar']
249
+ }] } });
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2RhdGUtcGlja2VyL2NvbXBvbmVudHMvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2RhdGUtcGlja2VyL2NvbXBvbmVudHMvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxlQUFlLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBaUIxQyxNQUFNLE9BQU8sd0JBQXdCO0lBbU1mO0lBak1wQixXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRVYsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBRXpDLFVBQVUsR0FBUSxJQUFXLENBQUM7SUFDOUIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUV0QixTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUM5QyxLQUFLLENBQUMsRUFBRTtRQUNOLElBQUksUUFBUSxHQUFHLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUss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QUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBVyxDQUFDO0lBQzNCLENBQUM7dUdBaFFVLHdCQUF3QjsyRkFBeEIsd0JBQXdCLHlTQVJ4QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3ZELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiw0VUNqQkgsMHRJQWdHQTs7MkZEN0VhLHdCQUF3QjtrQkFacEMsU0FBUzsrQkFDRSw0QkFBNEIsYUFHM0I7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3NGQThCRCxPQUFPO3NCQUROLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlOLHVCQUF1QjtzQkFEdEIsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBV0YsU0FBUztzQkFEWixLQUFLO2dCQWlDRixLQUFLO3NCQURSLEtBQUs7Z0JBa0JGLFFBQVE7c0JBRFgsS0FBSztnQkFVTixTQUFTO3NCQURSLEtBQUs7Z0JBUU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSTVCLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxlQUFlO2dCQUkxQixXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCB0YXB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0RhdGVSYW5nZVBpY2tlclRleHR9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvcGFydGljbGUtY29tcG9uZW50LXRleHQubW9kZWwnO1xyXG5pbXBvcnQge1BvcG92ZXJDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NhbGVuZGFyQ29tcG9uZW50fSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYXJ0aWNsZS1kYXRlLXJhbmdlLXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XHJcbiAgX2Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3ZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBfbGFzdFZhbHVlOiBhbnkgPSBudWxsIGFzIGFueTtcclxuICBwcml2YXRlIF9pbml0ID0gZmFsc2U7XHJcblxyXG4gIHZhbHVlT2JzJCA9IHRoaXMuX3ZhbHVlJC5hc09ic2VydmFibGUoKS5waXBlKHRhcChcclxuICAgIHZhbHVlID0+IHtcclxuICAgICAgbGV0IG5ld1ZhbHVlID0ge3N0YXJ0OiBudWxsLCBlbmQ6IG51bGx9O1xyXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuc3RhcnQgJiYgdmFsdWUuZW5kKSB7XHJcbiAgICAgICAgbmV3VmFsdWUgPSB7c3RhcnQ6IHZhbHVlLnN0YXJ0LCBlbmQ6IHZhbHVlLmVuZH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fbGFzdFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fbGFzdFZhbHVlID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pbml0KSB7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX2xhc3RWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgKSk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaW5wdXRJZDogc3RyaW5nID0gbnVsbCBhcyBhbnk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaW5wdXRDbGFzc0xpc3QgPSAnJztcclxuXHJcbiAgQElucHV0KClcclxuICBjYWxlbmRhckJ1dHRvbkNsYXNzTGlzdCA9ICcnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRleHQ6IERhdGVSYW5nZVBpY2tlclRleHQgPSB7XHJcbiAgICBiZWdpbjogJ0JlZ2luJyxcclxuICAgIGVuZDogJ0VuZCcsXHJcbiAgICBkb25lOiAnRG9uZScsXHJcbiAgICBjbGVhcjogJ0NsZWFyJyxcclxuICAgIG9wZW5DYWxlbmRhcjogJ09wZW4gQ2FsZW5kYXInLFxyXG4gICAgc2VsZWN0UmFuZ2U6ICdDaG9vc2UgYSBSYW5nZSdcclxuICB9IGFzIERhdGVSYW5nZVBpY2tlclRleHQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRhdGVSYW5nZSh2YWx1ZToge21pbkRhdGU6IERhdGUsICBtYXhEYXRlOiBEYXRlfSkge1xyXG4gICAgdGhpcy5fZGF0ZVJhbmdlID0gdmFsdWU7XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5zdGFydCkge1xyXG4gICAgICB0aGlzLl9lbmREYXRlUmFuZ2UgPSB7XHJcbiAgICAgICAgbWluRGF0ZTogdGhpcy52YWx1ZS5zdGFydCxcclxuICAgICAgICBtYXhEYXRlOiB2YWx1ZS5tYXhEYXRlXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9lbmREYXRlUmFuZ2UgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBkYXRlUmFuZ2UoKToge21pbkRhdGU6IERhdGUsICBtYXhEYXRlOiBEYXRlfSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZVJhbmdlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVuZERhdGVSYW5nZSgpOiB7bWluRGF0ZTogRGF0ZSwgIG1heERhdGU6IERhdGV9IHtcclxuICAgIHJldHVybiB0aGlzLl9lbmREYXRlUmFuZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRlUmFuZ2UgPSB7XHJcbiAgICBtaW5EYXRlOiBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyIC0gMTAwLCAwLCAxKSxcclxuICAgIG1heERhdGU6IG5ldyBEYXRlKHRoaXMuY3VycmVudFllYXIgKyAxMDAsIDExLCAzMSlcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9lbmREYXRlUmFuZ2UgPSB7XHJcbiAgICBtaW5EYXRlOiBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyIC0gMTAwLCAwLCAxKSxcclxuICAgIG1heERhdGU6IG5ldyBEYXRlKHRoaXMuY3VycmVudFllYXIgKyAxMDAsIDExLCAzMSlcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiB7IHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUgfSkge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICB2YWx1ZSA9IHtzdGFydDogbnVsbCBhcyBhbnksIGVuZDogbnVsbCBhcyBhbnl9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3ZhbHVlJC5uZXh0KHZhbHVlKTtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5iZWdpbkRhdGUgPSB2YWx1ZS5zdGFydDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB2YWx1ZSgpOiB7c3RhcnQ6IERhdGUsIGVuZDogRGF0ZX0ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhc3RWYWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGwgYXMgYW55O1xyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgZm9yIHRoZSBzZWxlY3RlZCBkYXRlIHJhbmdlIGluIHRoZSBzZWxlY3Rpb24gcHJldmlldy4gTXVzdFxyXG4gICAqIGJlIGEgdmFsaWQgQW5ndWxhciBEYXRlUGlwZSBmb3JtYXRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGRhdGVGb3JtYXQgPSAnTU0vZGQveSc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUG9wb3ZlcicpXHJcbiAgY2FsZW5kYXJQb3BvdmVyOiBQb3BvdmVyQ29tcG9uZW50ID0gbnVsbCBhcyBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2JlZ2luQ2FsZW5kYXInKVxyXG4gIGJlZ2luQ2FsZW5kYXI6IENhbGVuZGFyQ29tcG9uZW50ID0gbnVsbCBhcyBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2VuZENhbGVuZGFyJylcclxuICBlbmRDYWxlbmRhcjogQ2FsZW5kYXJDb21wb25lbnQgPSBudWxsIGFzIGFueTtcclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXQgYmVnaW5EYXRlKCk6IERhdGUge1xyXG4gICAgaWYgKHRoaXMuX3ZhbHVlJC52YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUkLnZhbHVlLnN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsIGFzIGFueTtcclxuICB9XHJcblxyXG4gIHNldCBiZWdpbkRhdGUoYmVnaW5EYXRlOiBEYXRlKSB7XHJcbiAgICBsZXQgdmFsdWUgPSB0aGlzLl92YWx1ZSQudmFsdWU7XHJcbiAgICB2YWx1ZS5zdGFydCA9IGJlZ2luRGF0ZTtcclxuXHJcbiAgICBpZiAoIWJlZ2luRGF0ZSAmJiB0aGlzLmJlZ2luQ2FsZW5kYXIpIHtcclxuICAgICAgaWYgKHRoaXMuYmVnaW5DYWxlbmRhcikge1xyXG4gICAgICAgIHRoaXMuYmVnaW5DYWxlbmRhci5jbGVhcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdmFsdWUkLm5leHQodmFsdWUpO1xyXG5cclxuICAgIGlmICghYmVnaW5EYXRlIHx8IGJlZ2luRGF0ZSA+IHRoaXMuZW5kRGF0ZSkge1xyXG4gICAgICB0aGlzLmVuZERhdGUgPSBudWxsIGFzIGFueTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9lbmREYXRlUmFuZ2UgPSB7XHJcbiAgICAgIG1pbkRhdGU6IGJlZ2luRGF0ZSxcclxuICAgICAgbWF4RGF0ZTogdGhpcy5kYXRlUmFuZ2UubWF4RGF0ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldCBlbmREYXRlKCk6IERhdGUge1xyXG4gICAgaWYgKHRoaXMuX3ZhbHVlJC52YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUkLnZhbHVlLmVuZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbCBhcyBhbnk7XHJcbiAgfVxyXG5cclxuICBzZXQgZW5kRGF0ZShlbmREYXRlOiBEYXRlKSB7XHJcbiAgICBpZiAodGhpcy5fdmFsdWUkLnZhbHVlICYmIGVuZERhdGUgPCB0aGlzLl92YWx1ZSQudmFsdWUuc3RhcnQpIHtcclxuICAgICAgZW5kRGF0ZSA9IG51bGwgYXMgYW55O1xyXG4gICAgICBpZiAodGhpcy5lbmRDYWxlbmRhcikge1xyXG4gICAgICAgIHRoaXMuZW5kQ2FsZW5kYXIuY2xlYXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YWx1ZSA9IHRoaXMuX3ZhbHVlJC52YWx1ZTtcclxuICAgIHZhbHVlLmVuZCA9IGVuZERhdGU7XHJcblxyXG4gICAgaWYgKCFlbmREYXRlICYmIHRoaXMuZW5kQ2FsZW5kYXIpIHtcclxuICAgICAgaWYgKHRoaXMuZW5kQ2FsZW5kYXIpIHtcclxuICAgICAgICB0aGlzLmVuZENhbGVuZGFyLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl92YWx1ZSQubmV4dCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0byBjYWxsIG9uIGNoYW5nZVxyXG4gICAqL1xyXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0byBjYWxsIG9uIHRvdWNoXHJcbiAgICovXHJcbiAgb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXcml0ZSB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gd3JpdGVcclxuICAgKi9cclxuICB3cml0ZVZhbHVlKHZhbHVlOiB7IHN0YXJ0OiBEYXRlLCBlbmQ6IERhdGUgfSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVyIGZ1bmN0aW9uIG9uIGNoYW5nZVxyXG4gICAqIEBwYXJhbSBmbiB0aGUgZnVuY3Rpb24gdG8gY2hhbmdlXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlciBmdW5jdGlvbiBvbiB0b3VjaFxyXG4gICAqIEBwYXJhbSBmbiB0aGUgZnVuY3Rpb24gdG8gcmVnaXN0ZXJcclxuICAgKi9cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRpc2FibGVkIHN0YXRlXHJcbiAgICogQHBhcmFtIGlzRGlzYWJsZWQgd2hldGhlciBvciBub3QgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWRcclxuICAgKi9cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9wZW5DYWxlbmRhcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmNhbGVuZGFyUG9wb3Zlci50b2dnbGUoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTW9kZWwoaXNCZWdpbjogYm9vbGVhbiwgZGF0ZTogRGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKGlzQmVnaW4pIHtcclxuICAgICAgdGhpcy5iZWdpbkRhdGUgPSBkYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbmREYXRlID0gZGF0ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrU3RhdGUoKTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLl92YWx1ZSQudmFsdWU7XHJcbiAgICBpZiAodmFsICYmICgodmFsLnN0YXJ0ID4gdmFsLmVuZCkgfHwgISh2YWwuc3RhcnQgJiYgdmFsLmVuZCkpKSB7XHJcbiAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IG51bGwgYXMgYW55O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cImN1cnNvcjpkZWZhdWx0O292ZXJmbG93OiBoaWRkZW47XCJcclxuICAgICBbbmdDbGFzc109XCJpbnB1dENsYXNzTGlzdCA/ICcnIDogJ3JvdyBwdGxfaW5wdXQgcHRsX2lucHV0X2hlaWdodCBwdGxfaW5wdXRfYmdfY29sb3IgcHRsX2JyZHJfY29sb3IgcHRsX2JyZHJfc2l6ZSBwdGxfYnJkcl9yYWRpdXMgZW50X3IybF9kaXInXCJcclxuICAgICBbc3R5bGUuZmlsdGVyXT1cImRpc2FibGVkID8gJ2JyaWdodG5lc3MoLjk1KScgOiAnJ1wiPlxyXG4gIDxidXR0b24gKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigkZXZlbnQpXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImRpYWxvZ1wiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoYXJpYUxhYmVsID8gYXJpYUxhYmVsICsgJywgJyA6ICcnKSArIHRleHQub3BlbkNhbGVuZGFyXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiY2FsZW5kYXJQb3BvdmVyLnZpc2libGVcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaW5wdXRDbGFzc0xpc3QgPyBpbnB1dENsYXNzTGlzdCA6ICdjbGVhcidcIlxyXG4gICAgICAgICAgY2xhc3M9XCJhY2Nlc3MgYnRuc2V0IHdpZHRoMTAwIGhlaWdodDEwMCBjZW50ZXJfY2VudGVyXCJcclxuICAgICAgICAgIHN0eWxlPVwib3V0bGluZS1vZmZzZXQ6IC0ycHg7XCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sIHNpemVfMSBoZWlnaHQxMDAgd2lkdGgxMDAgcHRsX2lucHV0X3RleHRfc2l6ZSBwdGxfaW5wdXRfcGFkZGluZyB2X2NlbnRlclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVPYnMkIHwgYXN5bmMgYXMgdmFsdWVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWUuc3RhcnQgJiYgdmFsdWUuZW5kIGVsc2UgcGxhY2Vob2xkZXJUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAge3t2YWx1ZS5zdGFydCB8IGRhdGU6IGRhdGVGb3JtYXR9fSAtIHt7dmFsdWUuZW5kIHwgZGF0ZTogZGF0ZUZvcm1hdH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVGVtcGxhdGU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVudF9yMmxfdHh0XCI+e3t0ZXh0LnNlbGVjdFJhbmdlfX0uLi48L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbCBtaW5fdzUwIGhlaWdodDEwMCBjZW50ZXJfY2VudGVyIGJvcmRlcl9sZWZ0XCJcclxuICAgICAgICAgW25nQ2xhc3NdPVwiY2FsZW5kYXJCdXR0b25DbGFzc0xpc3QgPyBjYWxlbmRhckJ1dHRvbkNsYXNzTGlzdCA6ICdiZ19vdmVybGF5IHB0bF9icmRyX2NvbG9yIHB0bF9pbnB1dF90ZXh0X3NpemUnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3aWR0aDEwMCBoZWlnaHQxMDAgY2VudGVyX2NlbnRlclwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNhbGVuZGFyLWRheXMgcHRsX2lucHV0X3RleHRfc2l6ZVwiPjwvaT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcblxyXG48cGFydGljbGUtcG9wb3ZlciAoY2xvc2VkKT1cImNoZWNrU3RhdGUoKVwiICNjYWxlbmRhclBvcG92ZXI+XHJcbiAgPGRpdiBjbGFzcz1cIndpZHRoMTAwIHNwYWNlX2JldHdlZW5cIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYWRfMTAgcGFkX2JvdDBcIj5cclxuICAgICAgICA8ZGl2Pnt7dGV4dC5iZWdpbn19OjwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8cGFydGljbGUtZGF0ZS1waWNrZXJcclxuICAgICAgICAgICAgaW5wdXRDbGFzc0xpc3Q9XCJhY2Nlc3MgaW5wdXQgc20gY29udGVudF9jb2xvclwiXHJcbiAgICAgICAgICAgIFtpbnB1dE9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYmVnaW5EYXRlXCJcclxuICAgICAgICAgICAgW2RhdGVSYW5nZV09XCJkYXRlUmFuZ2VcIj5cclxuICAgICAgICAgIDwvcGFydGljbGUtZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cGFydGljbGUtY2FsZW5kYXIgW3ZhbHVlXT1cImJlZ2luRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCIkYW55KHRleHQuY2FsZW5kYXJUZXh0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZVJhbmdlXT1cImRhdGVSYW5nZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NvbnRyb2xzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZV9lbGVtZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJ1cGRhdGVNb2RlbCh0cnVlLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICNiZWdpbkNhbGVuZGFyPlxyXG4gICAgICA8L3BhcnRpY2xlLWNhbGVuZGFyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFkXzEwIHBhZF9ib3QwXCI+XHJcbiAgICAgICAgPGRpdj57e3RleHQuZW5kfX06PC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxwYXJ0aWNsZS1kYXRlLXBpY2tlclxyXG4gICAgICAgICAgICBpbnB1dENsYXNzTGlzdD1cImFjY2VzcyBpbnB1dCBzbSBjb250ZW50X2NvbG9yXCJcclxuICAgICAgICAgICAgW2lucHV0T25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2RhdGVSYW5nZV09XCJlbmREYXRlUmFuZ2VcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVuZERhdGVcIj5cclxuICAgICAgICAgIDwvcGFydGljbGUtZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cGFydGljbGUtY2FsZW5kYXIgW3ZhbHVlXT1cImVuZERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJGFueSh0ZXh0LmNhbGVuZGFyVGV4dClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVSYW5nZV09XCJlbmREYXRlUmFuZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDb250cm9sc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGVfZWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwidXBkYXRlTW9kZWwoZmFsc2UsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgI2VuZENhbGVuZGFyPlxyXG4gICAgICA8L3BhcnRpY2xlLWNhbGVuZGFyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlX29ubHkgcGFkX2JvdDEwXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYmdfb3ZlcmxheSBicmRyIGhyIG1hcl81IG1hcl90b3AwXCI+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBzcGFjZV9iZXR3ZWVuXCI+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhcigpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhY2Nlc3MgYnRuIHNtIGJnX292ZXJsYXlfcmV2IGJyZHIgbWFyXzUgaG92X2JnXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0LmNsZWFyXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXggbWFyX3JpZ2h0NVwiPjwvaT48c3BhbiBjbGFzcz1cInRleHQgYm9sZFwiPnt7dGV4dC5jbGVhcn19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiAoa2V5dXAuZXNjYXBlKT1cImNhbGVuZGFyUG9wb3Zlci5jbG9zZSgpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNhbGVuZGFyUG9wb3Zlci5jbG9zZSgpXCJcclxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kaWFsb2ctY2xvc2Utb3ZlcnJpZGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYWNjZXNzIGJ0biBzbSBiZ19vdmVybGF5X3JldiBicmRyIG1hcl81IGhvdl9iZ1wiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dC5kb25lXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZWNrIG1hcl9yaWdodDVcIj48L2k+PHNwYW4gY2xhc3M9XCJ0ZXh0IGJvbGRcIj57e3RleHQuZG9uZX19PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvcGFydGljbGUtcG9wb3Zlcj5cclxuXHJcbiJdfQ==