@natec/mef-dev-ui-kit 16.2.2 → 16.2.4

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 (32) hide show
  1. package/README.md +1 -6
  2. package/esm2022/lib/markup-kit/card/card-long/card-long.component.mjs +16 -16
  3. package/esm2022/lib/markup-kit/card/card-simple/card-simple.component.mjs +7 -7
  4. package/esm2022/lib/markup-kit/collapse/collapse/collapse.component.mjs +3 -3
  5. package/esm2022/lib/markup-kit/executors/index.mjs +5 -0
  6. package/esm2022/lib/markup-kit/executors/mefdev-executor-page/mefdev-executor-page.component.mjs +44 -0
  7. package/esm2022/lib/markup-kit/executors/stage/stage.component.mjs +24 -0
  8. package/esm2022/lib/markup-kit/executors/step-executor/step-executor.component.mjs +110 -0
  9. package/esm2022/lib/markup-kit/executors/step-executor.module.mjs +38 -0
  10. package/esm2022/lib/markup-kit/modals/fill/fill.component.mjs +3 -3
  11. package/esm2022/lib/markup-kit/modals/slide-up/slide-up.component.mjs +3 -3
  12. package/esm2022/lib/markup-kit/slider/index.mjs +3 -0
  13. package/esm2022/lib/markup-kit/slider/slider/slider.component.mjs +120 -0
  14. package/esm2022/lib/markup-kit/slider/slider.module.mjs +28 -0
  15. package/esm2022/lib/markup-kit/utils/datepicker/datepicker/datepicker.component.mjs +18 -7
  16. package/esm2022/public-api.mjs +3 -1
  17. package/fesm2022/natec-mef-dev-ui-kit.mjs +384 -34
  18. package/fesm2022/natec-mef-dev-ui-kit.mjs.map +1 -1
  19. package/lib/markup-kit/card/card-long/card-long.component.d.ts +14 -14
  20. package/lib/markup-kit/card/card-simple/card-simple.component.d.ts +5 -5
  21. package/lib/markup-kit/card/card.module.d.ts +1 -1
  22. package/lib/markup-kit/executors/index.d.ts +4 -0
  23. package/lib/markup-kit/executors/mefdev-executor-page/mefdev-executor-page.component.d.ts +16 -0
  24. package/lib/markup-kit/executors/stage/stage.component.d.ts +9 -0
  25. package/lib/markup-kit/executors/step-executor/step-executor.component.d.ts +29 -0
  26. package/lib/markup-kit/executors/step-executor.module.d.ts +11 -0
  27. package/lib/markup-kit/slider/index.d.ts +2 -0
  28. package/lib/markup-kit/slider/slider/slider.component.d.ts +93 -0
  29. package/lib/markup-kit/slider/slider.module.d.ts +9 -0
  30. package/package.json +1 -1
  31. package/public-api.d.ts +2 -0
  32. package/src/lib/styles/pg/vendor/ng-datatable.scss +5 -3
@@ -162,10 +162,15 @@ export class DatepickerComponent {
162
162
  */
163
163
  onClick(event) {
164
164
  const targetElement = event.target;
165
- const calendarElement = this.elementRef.nativeElement.querySelector('.calendar');
165
+ const calendar = this.elementRef.nativeElement.querySelector('.calendar');
166
+ const monthDropdown = this.elementRef.nativeElement.querySelector('.monthDropdown');
167
+ const yearDropdown = this.elementRef.nativeElement.querySelector('.yearDropdown');
166
168
  const inputElement = this.elementRef.nativeElement.querySelector('input');
167
- if (calendarElement && calendarElement.contains(targetElement)) {
168
- // Клік відбувся на елементі календаря, нічого не робимо
169
+ if (monthDropdown.contains(targetElement) && yearDropdown.contains(targetElement)) {
170
+ this.toggleMonthDropdown(event);
171
+ this.toggleYearDropdown(event);
172
+ }
173
+ if (calendar && calendar.contains(targetElement)) {
169
174
  return;
170
175
  }
171
176
  if (inputElement && inputElement.contains(targetElement) && !this.isEditing) {
@@ -175,6 +180,7 @@ export class DatepickerComponent {
175
180
  else {
176
181
  // Клік відбувся поза календарем та input, закриваємо календар
177
182
  this.isCalendarOpen = false;
183
+ this.isEditing = false;
178
184
  }
179
185
  }
180
186
  /**
@@ -234,8 +240,9 @@ export class DatepickerComponent {
234
240
  * This method sets the 'isEditing' flag to true and stores the current formatted date for editing.
235
241
  */
236
242
  toggleEdit() {
237
- this.isEditing = true;
243
+ this.isEditing = !this.isEditing;
238
244
  this.editedDate = this.formatSelectedDate(); // Store the current formatted date for editing
245
+ this.isCalendarOpen = false;
239
246
  }
240
247
  /**
241
248
  * Get a list of month names in the specified language and format.
@@ -284,7 +291,12 @@ export class DatepickerComponent {
284
291
  * ```
285
292
  */
286
293
  toggleCalendar() {
287
- this.isCalendarOpen = !this.isCalendarOpen;
294
+ if (this.isEditing) {
295
+ this.isCalendarOpen = false;
296
+ }
297
+ else {
298
+ this.isCalendarOpen = !this.isCalendarOpen;
299
+ }
288
300
  }
289
301
  /**
290
302
  * Save the edited date input by the user, provided it matches the specified date format.
@@ -301,7 +313,6 @@ export class DatepickerComponent {
301
313
  const [day, month, year] = this.editedDate.split('/');
302
314
  this.selectedDate = new Date(+year, +month - 1, +day);
303
315
  this.formatDate();
304
- this.toggleCalendar();
305
316
  }
306
317
  }
307
318
  /**
@@ -588,4 +599,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
588
599
  type: HostListener,
589
600
  args: ['document:click', ['$event']]
590
601
  }] } });
591
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1raXQtbGliL3NyYy9saWIvbWFya3VwLWtpdC91dGlscy9kYXRlcGlja2VyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1raXQtbGliL3NyYy9saWIvbWFya3VwLWtpdC91dGlscy9kYXRlcGlja2VyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF5QixZQUFZLEVBQWEsS0FBSyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFJMUk7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtCRTtBQVFGLE1BQU0sT0FBTyxtQkFBbUI7SUFxTFY7SUFBNEI7SUFuTGxEOzs7TUFHRTtJQUNGLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEM7OztNQUdFO0lBQ0YsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUUzQjs7O01BR0U7SUFDRixZQUFZLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUUvQjs7O0tBR0M7SUFDRixhQUFhLENBQU87SUFFbkI7OztLQUdDO0lBQ0YsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4Qjs7O01BR0U7SUFDRixtQkFBbUIsR0FBWSxJQUFJLENBQUM7SUFFcEM7OztNQUdFO0lBQ0Ysa0JBQWtCLEdBQVksSUFBSSxDQUFDO0lBRW5DOzs7TUFHRTtJQUNGLGlCQUFpQixHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFekQ7OztNQUdFO0lBQ0YsZ0JBQWdCLEdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUUxRDs7O0tBR0M7SUFD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Q1EsY0FBYyxDQUFDLElBQVU7UUFDL0IsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUg7Ozs7Ozs7O01BUUU7SUFDUSxXQUFXLENBQUMsU0FBaUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUg7Ozs7Ozs7O01BUUU7SUFDUSxXQUFXLENBQUMsSUFBVTtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxDQUFDO3VHQXprQlUsbUJBQW1COzJGQUFuQixtQkFBbUIsc1ZDOUJoQyw2dkhBeUdBOzsyRkQzRWEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLG1CQUFtQjt3SEEyRXRCLElBQUk7c0JBQVosS0FBSztnQkFVRyxVQUFVO3NCQUFsQixLQUFLO2dCQVVVLFVBQVU7c0JBQXpCLEtBQUs7dUJBQUMsT0FBTztnQkFVTCxRQUFRO3NCQUFoQixLQUFLO2dCQVVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBVUcsVUFBVTtzQkFBbEIsS0FBSztnQkFVSSxXQUFXO3NCQUFwQixNQUFNO2dCQTBCTCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuXHJcbi8qKlxyXG4gICogRGF0ZXBpY2tlciBDb21wb25lbnQgZm9yIHNlbGVjdGluZyBkYXRlcy5cclxuICAqXHJcbiAgKiBUaGlzIGNvbXBvbmVudCBhbGxvd3MgdXNlcnMgdG8gcGljayBhIGRhdGUgZnJvbSBhIGNhbGVuZGFyIGludGVyZmFjZS5cclxuICAqIEl0IHN1cHBvcnRzIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHN1Y2ggYXMgbGFuZ3VhZ2UsIGRhdGUgZm9ybWF0LCBhbmQgZGF0ZSByYW5nZS5cclxuICAqXHJcbiAgKiBAZXhhbXBsZVxyXG4gICogPG1lZmRldi1kYXRlcGlja2VyXHJcbiAgKiAgIFtsYW5nXT1cIid1aydcIlxyXG4gICogICBbZGF0ZUZvcm1hdF09XCInZGQvTU0veXl5eSdcIlxyXG4gICogICBbcmFuZ2VdPVwie3N0YXJ0WWVhcjogMTkwMCwgdG9ZZWFyOiAzMDB9XCJcclxuICAqICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcclxuICAqICAgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgKiAgIFt0b3BPZmZzZXRdPVwiJzIwJ1wiXHJcbiAgKiAgIFtsZWZ0T2Zmc2V0XT1cIicxMCdcIj5cclxuICAqIDwvbWVmZGV2LWRhdGVwaWNrZXI+XHJcbiAgKlxyXG4gICogPGV4YW1wbGUtdXJsPmh0dHBzOi8vbWVmLmRldi91aV9raXRfZGVtby92aWV3L3V0aWxzL2RhdGVwaWNrZXI8L2V4YW1wbGUtdXJsPlxyXG4qL1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtZWZkZXYtZGF0ZXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyAgT25DaGFuZ2VzLCBPbkluaXQge1xyXG5cclxuLyoqXHJcbiAqIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWxlbmRhciBpcyBvcGVuIG9yIGNsb3NlZC5cclxuICogRGVmYXVsdCB2YWx1ZTogZmFsc2UgKGNsb3NlZCkuXHJcbiovXHJcbmlzQ2FsZW5kYXJPcGVuOiBib29sZWFuID0gZmFsc2U7IFxyXG5cclxuLyoqXHJcbiAqIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb21wb25lbnQgaXMgaW4gZWRpdGluZyBtb2RlLlxyXG4gKiBEZWZhdWx0IHZhbHVlOiBmYWxzZSAobm90IGluIGVkaXRpbmcgbW9kZSkuXHJcbiovXHJcbmlzRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlOyAgXHJcblxyXG4vKipcclxuICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlLlxyXG4gKiBEZWZhdWx0IHZhbHVlOiBUb2RheSdzIGRhdGUuXHJcbiovXHJcbnNlbGVjdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7IFxyXG5cclxuIC8qKlxyXG4gKiBUaGUgZm9ybWF0dGVkIGRhdGUgZm9yIGRpc3BsYXkgaW4gdGhlIGlucHV0LlxyXG4gKiBEZWZhdWx0IHZhbHVlOiBGb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlbGVjdGVkIGRhdGUuXHJcbiovXHJcbmZvcm1hdHRlZERhdGU6IGFueSA7IFxyXG5cclxuIC8qKlxyXG4gKiBUcmFjayB0aGUgZWRpdGVkIGRhdGUgc2VwYXJhdGVseSB3aGVuIGluIGVkaXRpbmcgbW9kZS5cclxuICogRGVmYXVsdCB2YWx1ZTogQW4gZW1wdHkgc3RyaW5nLlxyXG4qL1xyXG5lZGl0ZWREYXRlOiBzdHJpbmcgPSAnJzsgXHJcblxyXG4vKipcclxuICogRmxhZyB0byBkZXRlcm1pbmUgaWYgdGhlIG1vbnRoIGRyb3Bkb3duIGlzIG9wZW4gb3IgY2xvc2VkLlxyXG4gKiBEZWZhdWx0IHZhbHVlOiB0cnVlIChvcGVuKS5cclxuKi9cclxuaXNNb250aERyb3Bkb3duT3BlbjogYm9vbGVhbiA9IHRydWU7IFxyXG5cclxuLyoqXHJcbiAqIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5ZWFyIGRyb3Bkb3duIGlzIG9wZW4gb3IgY2xvc2VkLlxyXG4gKiBEZWZhdWx0IHZhbHVlOiB0cnVlIChvcGVuKS5cclxuKi9cclxuaXNZZWFyRHJvcGRvd25PcGVuOiBib29sZWFuID0gdHJ1ZTsgXHJcblxyXG4vKipcclxuICogVGhlIHNlbGVjdGVkIG1vbnRoICgwLTExKS5cclxuICogRGVmYXVsdCB2YWx1ZTogVGhlIG1vbnRoIG9mIHRoZSBzZWxlY3RlZCBkYXRlLlxyXG4qL1xyXG5zZWxlY3RlZERhdGVNb250aDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTsgXHJcblxyXG4vKipcclxuICogVGhlIHNlbGVjdGVkIHllYXIuXHJcbiAqIERlZmF1bHQgdmFsdWU6IFRoZSB5ZWFyIG9mIHRoZSBzZWxlY3RlZCBkYXRlLlxyXG4qL1xyXG5zZWxlY3RlZERhdGVZZWFyOiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpOyBcclxuXHJcbiAvKipcclxuICogQW4gYXJyYXkgb2YgeWVhcnMgZm9yIHRoZSB5ZWFyIGRyb3Bkb3duLlxyXG4gKiBEZWZhdWx0IHZhbHVlOiBBbiBhcnJheSBvZiB5ZWFycyB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZS5cclxuKi9cclxueWVhcnM6IG51bWJlcltdIFxyXG5cclxuLyoqXHJcbiAqIFRoZSBsYW5ndWFnZS9sb2NhbGUgZm9yIHRoZSBkYXRlcGlja2VyLlxyXG4gKiBEZWZhdWx0IHZhbHVlOiAnZW4nIChFbmdsaXNoKS5cclxuICogQGV4YW1wbGVcclxuICogPG1lZmRldi1kYXRlcGlja2VyXHJcbiAqICAgW2xhbmddID0gXCIndWsnXCI+XHJcbiAqIDwvbWVmZGV2LWRhdGVwaWNrZXI+XHJcbiovXHJcbkBJbnB1dCgpIGxhbmc6IHN0cmluZyA9ICdlbic7IFxyXG5cclxuLyoqXHJcbiAqIFRoZSBkYXRlIGZvcm1hdCBmb3IgZGlzcGxheWluZyB0aGUgc2VsZWN0ZWQgZGF0ZS5cclxuICogRGVmYXVsdCB2YWx1ZTogJ0VFRSBNTU0gZGQgeXl5eScuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxtZWZkZXYtZGF0ZXBpY2tlclxyXG4gKiAgIFtkYXRlRm9ybWF0XT1cIidkZC9NTS95eXl5J1wiPlxyXG4gKiA8L21lZmRldi1kYXRlcGlja2VyPlxyXG4qL1xyXG5ASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmcgPSAnRUVFIE1NTSBkZCB5eXl5JzsgXHJcblxyXG4vKipcclxuICogVGhlIHJhbmdlIG9mIHllYXJzIGF2YWlsYWJsZSBpbiB0aGUgeWVhciBkcm9wZG93bi5cclxuICogRGVmYXVsdCB2YWx1ZTogeyBzdGFydFllYXI6IDE5MDAsIHRvWWVhcjogMzAwIH0uXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxtZWZkZXYtZGF0ZXBpY2tlclxyXG4gKiAgIFtyYW5nZV09XCJ7c3RhcnRZZWFyOiAxOTAwLCB0b1llYXI6IDMwMH1cIj5cclxuICogPC9tZWZkZXYtZGF0ZXBpY2tlcj5cclxuKi9cclxuQElucHV0KCdyYW5nZScpIHllYXJzUmFuZ2U6e3N0YXJ0WWVhcjpudW1iZXIsIHRvWWVhcjpudW1iZXJ9ID0ge3N0YXJ0WWVhcjoxOTAwLCB0b1llYXI6MzAwfTsgXHJcblxyXG4vKipcclxuICogV2hldGhlciB0aGUgZGF0ZXBpY2tlciBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAqIERlZmF1bHQgdmFsdWU6IGZhbHNlIChlbmFibGVkKS5cclxuICogQGV4YW1wbGVcclxuICogPG1lZmRldi1kYXRlcGlja2VyXHJcbiAqICAgW2Rpc2FibGVkXT1cImZhbHNlXCI+XHJcbiAqIDwvbWVmZGV2LWRhdGVwaWNrZXI+XHJcbiovXHJcbkBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7IFxyXG5cclxuLyoqXHJcbiAqIFRoZSB0b3Agb2Zmc2V0IGZvciBwb3NpdGlvbmluZyB0aGUgZGF0ZXBpY2tlci5cclxuICogRGVmYXVsdCB2YWx1ZTogJzIwJy5cclxuICogQGV4YW1wbGVcclxuICogPG1lZmRldi1kYXRlcGlja2VyXHJcbiAqICAgW3RvcE9mZnNldF09XCInMjAnXCI+XHJcbiAqIDwvbWVmZGV2LWRhdGVwaWNrZXI+XHJcbiovXHJcbkBJbnB1dCgpIHRvcE9mZnNldDogc3RyaW5nID0gJzIwJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgbGVmdCBvZmZzZXQgZm9yIHBvc2l0aW9uaW5nIHRoZSBkYXRlcGlja2VyLlxyXG4gKiBEZWZhdWx0IHZhbHVlOiAnMTAnLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8bWVmZGV2LWRhdGVwaWNrZXJcclxuICogICBbbGVmdE9mZnNldF09XCInMTAnXCI+XHJcbiAqIDwvbWVmZGV2LWRhdGVwaWNrZXI+XHJcbiovXHJcbkBJbnB1dCgpIGxlZnRPZmZzZXQ6IHN0cmluZyA9ICcxMCc7IC8vRGVmYXVsdCB2YWx1ZVxyXG5cclxuLyoqXHJcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgZGF0ZSBpbiB0aGUgZGF0ZXBpY2tlciBjaGFuZ2VzLlxyXG4gKiBJdCBlbWl0cyBhIGBEYXRlYCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RlZCBkYXRlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8bWVmZGV2LWRhdGVwaWNrZXJcclxuICogICAoZGF0ZUNoYW5nZWQpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAqIDwvbWVmZGV2LWRhdGVwaWNrZXI+XHJcbiovXHJcbkBPdXRwdXQoKSBkYXRlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG5cclxuLyoqXHJcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byB2YWxpZGF0ZSB1c2VyIGlucHV0IGZvciBkYXRlIGluIHRoZSBmb3JtYXQgXCJkZC9NTS95eXl5XCIuXHJcbiAqIC0gVGhlIGRheSAoZGQpIHNob3VsZCBiZSBiZXR3ZWVuIDAxIGFuZCAzMS5cclxuICogLSBUaGUgbW9udGggKE1NKSBzaG91bGQgYmUgYmV0d2VlbiAwMSBhbmQgMTIuXHJcbiAqIC0gVGhlIHllYXIgKHl5eXkpIHNob3VsZCBiZSBhIDQtZGlnaXQgbnVtYmVyLlxyXG4qL1xyXG4gIHByaXZhdGUgZGF0ZVJlZ0V4cDogUmVnRXhwID0gL14oMFsxLTldfFsxMl1bMC05XXwzWzAxXSlcXC8oMFsxLTldfDFbMC0yXSlcXC9cXGR7NH0kLztcclxuXHJcbi8qKlxyXG4gKiBUaGUgc3RyaW5nIGVudGVyZWQgYnkgdGhlIHVzZXIgZm9yIGRhdGUgaW5wdXQuXHJcbiAqIFRoaXMgdmFyaWFibGUgc3RvcmVzIHRoZSB1c2VyJ3MgaW5wdXQgYXMgdGhleSB0eXBlIGluIHRoZSBkYXRlIGZpZWxkLlxyXG4qL1xyXG4gIHVzZXJJbnB1dDogc3RyaW5nID0gJyc7XHJcbiAgXHJcbi8qKlxyXG4gKiBIb3N0IGxpc3RlbmVyIGZvciBkb2N1bWVudCBjbGljayBldmVudHMgdG8gaGFuZGxlIGNhbGVuZGFyIGludGVyYWN0aW9uLlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGNsaWNrIGV2ZW50IG9jY3VycmVkIHdpdGhpbiB0aGUgY2FsZW5kYXIgb3IgaW5wdXQgZWxlbWVudHMuXHJcbiAqIC0gSWYgdGhlIGNsaWNrIG9jY3VycmVkIHdpdGhpbiB0aGUgY2FsZW5kYXIsIG5vIGFjdGlvbiBpcyB0YWtlbi5cclxuICogLSBJZiB0aGUgY2xpY2sgb2NjdXJyZWQgd2l0aGluIHRoZSBpbnB1dCBlbGVtZW50IGFuZCB0aGUgY29tcG9uZW50IGlzIG5vdCBpbiBlZGl0aW5nIG1vZGUsXHJcbiAqICAgaXQgb3BlbnMgdGhlIGNhbGVuZGFyLlxyXG4gKiAtIElmIHRoZSBjbGljayBvY2N1cnJlZCBvdXRzaWRlIHRoZSBjYWxlbmRhciBhbmQgaW5wdXQsIGl0IGNsb3NlcyB0aGUgY2FsZW5kYXIuXHJcbiAqIEBwYXJhbSBldmVudCBUaGUgTW91c2VFdmVudCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjbGljayBldmVudC5cclxuKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGNhbGVuZGFyRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYWxlbmRhcicpO1xyXG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuXHJcbiAgICBpZiAoY2FsZW5kYXJFbGVtZW50ICYmIGNhbGVuZGFyRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSkge1xyXG4gICAgICAvLyDQmtC70ZbQuiDQstGW0LTQsdGD0LLRgdGPINC90LAg0LXQu9C10LzQtdC90YLRliDQutCw0LvQtdC90LTQsNGA0Y8sINC90ZbRh9C+0LPQviDQvdC1INGA0L7QsdC40LzQvlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkgJiYgIXRoaXMuaXNFZGl0aW5nKSB7XHJcbiAgICAgIC8vINCa0LvRltC6INCy0ZbQtNCx0YPQstGB0Y8g0L3QsCDQtdC70LXQvNC10L3RgtGWIGlucHV0LCDQstGW0LTQutGA0LjQstCw0ZTQvNC+INC60LDQu9C10L3QtNCw0YBcclxuICAgICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDQmtC70ZbQuiDQstGW0LTQsdGD0LLRgdGPINC/0L7Qt9CwINC60LDQu9C10L3QtNCw0YDQtdC8INGC0LAgaW5wdXQsINC30LDQutGA0LjQstCw0ZTQvNC+INC60LDQu9C10L3QtNCw0YBcclxuICAgICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RvciBmb3IgdGhlIERhdGVwaWNrZXJDb21wb25lbnQgY2xhc3MuXHJcbiAqIEBwYXJhbSBkYXRlUGlwZSBBIHNlcnZpY2UgZm9yIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgZGF0ZXMuXHJcbiAqIEBwYXJhbSBlbGVtZW50UmVmIEEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IG9uIHdoaWNoIHRoaXMgY29tcG9uZW50IGlzIGF0dGFjaGVkLlxyXG4gKiBJdCBpcyB1c2VkIHRvIGFjY2VzcyBET00gZWxlbWVudHMuXHJcbiovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy51cGRhdGVJbnB1dFZhbHVlKClcclxuICB9XHJcbiAgXHJcbi8qKlxyXG4gKiBMaWZlY3ljbGUgaG9vayBjYWxsZWQgYWZ0ZXIgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cclxuICogSXQgaW5pdGlhbGl6ZXMgdGhlIHllYXJzIGZvciB0aGUgeWVhciBzZWxlY3QgZHJvcGRvd24uXHJcbiovXHJcbiAgbmdPbkluaXQoKXtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVllYXJzKCk7XHJcbiAgfVxyXG4vKipcclxuICogTGlmZWN5Y2xlIGhvb2sgY2FsbGVkIHdoZW5ldmVyIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIG9mIHRoZSBjb21wb25lbnQgY2hhbmdlLlxyXG4gKiBJdCB1cGRhdGVzIHRoZSBpbnB1dCB2YWx1ZS5cclxuKi9cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBBbiBhcnJheSBvZiBtb250aCBuYW1lcyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UuXHJcbiAqIEl0IHByb3ZpZGVzIGxvY2FsaXplZCBtb250aCBuYW1lcyBmb3IgZGlzcGxheSBpbiB0aGUgZGF0ZXBpY2tlci5cclxuKi9cclxuICBwcml2YXRlIGdldCBtb250aHMoKXtcclxuICAgIHJldHVybiB0aGlzLmdldE1vbnRoTGlzdCh0aGlzLmxhbmcpO1xyXG4gIH0gIFxyXG5cclxuLyoqXHJcbiAqIEFuIGFycmF5IG9mIHdlZWtkYXkgbmFtZXMgYmFzZWQgb24gdGhlIHNlbGVjdGVkIGxhbmd1YWdlLlxyXG4gKiBJdCBwcm92aWRlcyBsb2NhbGl6ZWQgd2Vla2RheSBuYW1lcyBmb3IgZGlzcGxheSBpbiB0aGUgZGF0ZXBpY2tlci5cclxuKi9cclxuICBwcml2YXRlIGdldCB3ZWVrZGF5cygpIHtcclxuICAgIHJldHVybiB0aGlzLmdldFdlZWtkYXlMaXN0KHRoaXMubGFuZyk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpemUgdGhlIGxpc3Qgb2YgeWVhcnMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB5ZWFyIGRyb3Bkb3duLlxyXG4gKiBUaGlzIG1ldGhvZCBwb3B1bGF0ZXMgdGhlICd5ZWFycycgYXJyYXkgd2l0aCBhIHJhbmdlIG9mIHllYXJzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCAneWVhcnNSYW5nZScgY29uZmlndXJhdGlvbi5cclxuICogQGV4YW1wbGVcclxuICogYGBgXHJcbiAqIC8vIEFzc3VtaW5nICd5ZWFyc1JhbmdlJyBpcyB7IHN0YXJ0WWVhcjogMTkwMCwgdG9ZZWFyOiAzMDAgfVxyXG4gKiAvLyBBZnRlciBjYWxsaW5nIGluaXRpYWxpemVZZWFycygpLCAneWVhcnMnIG1pZ2h0IGNvbnRhaW4gWzE5MDAsIDE5MDEsIC4uLiwgMzAwXVxyXG4gKiB0aGlzLmluaXRpYWxpemVZZWFycygpO1xyXG4gKiBgYGBcclxuKi9cclxuICBwcml2YXRlIGluaXRpYWxpemVZZWFycygpIHtcclxuICAgIHRoaXMueWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnllYXJzUmFuZ2UudG9ZZWFyIH0sIChfLCBpbmRleCkgPT4gaW5kZXggKyB0aGlzLnllYXJzUmFuZ2Uuc3RhcnRZZWFyKTtcclxuICB9XHJcblxyXG4vKipcclxuICogVG9nZ2xlIHRoZSBlZGl0aW5nIG1vZGUgZm9yIHRoZSBkYXRlIGlucHV0LiBXaGVuIGVuYWJsZWQsIHRoZSB1c2VyIGNhbiBlZGl0IHRoZSBkYXRlIGRpcmVjdGx5IGluIHRoZSBpbnB1dCBmaWVsZC5cclxuICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgJ2lzRWRpdGluZycgZmxhZyB0byB0cnVlIGFuZCBzdG9yZXMgdGhlIGN1cnJlbnQgZm9ybWF0dGVkIGRhdGUgZm9yIGVkaXRpbmcuXHJcbiovXHJcbiAgdG9nZ2xlRWRpdCgpIHtcclxuICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZWRpdGVkRGF0ZSA9IHRoaXMuZm9ybWF0U2VsZWN0ZWREYXRlKCk7IC8vIFN0b3JlIHRoZSBjdXJyZW50IGZvcm1hdHRlZCBkYXRlIGZvciBlZGl0aW5nXHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGxpc3Qgb2YgbW9udGggbmFtZXMgaW4gdGhlIHNwZWNpZmllZCBsYW5ndWFnZSBhbmQgZm9ybWF0LlxyXG4gKiBAcGFyYW0gbG9jYWxlcyAtIEFuIG9wdGlvbmFsIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBsb2NhbGUgb3IgbG9jYWxlcyB0byB1c2UgZm9yIGZvcm1hdHRpbmcuXHJcbiAqIEBwYXJhbSBmb3JtYXQgLSBUaGUgZm9ybWF0IGZvciBtb250aCBuYW1lcywgZWl0aGVyIFwibG9uZ1wiIChkZWZhdWx0KSBvciBcInNob3J0XCIuXHJcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIG1vbnRoIG5hbWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBmb3JtYXQgYW5kIGxvY2FsZS5cclxuICogYGBgXHJcbiAqIC8vIEdldCBhIGxpc3Qgb2YgbW9udGggbmFtZXMgaW4gdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgYW5kIGxvbmcgZm9ybWF0XHJcbiAqIGNvbnN0IG1vbnRocyA9IHRoaXMuZ2V0TW9udGhMaXN0KHRoaXMubGFuZyk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgZ2V0TW9udGhMaXN0KCAgbG9jYWxlcz86IHN0cmluZyB8IHN0cmluZ1tdLCAgZm9ybWF0OiBcImxvbmdcIiB8IFwic2hvcnRcIiA9IFwibG9uZ1wiKTogc3RyaW5nW10geyAgXHJcbiAgICBjb25zdCB5ZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgY29uc3QgbW9udGhMaXN0ID0gWy4uLkFycmF5KDEyKS5rZXlzKCldO1xyXG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlcywgeyAgICBtb250aDogZm9ybWF0ICB9KTtcclxuICAgIGNvbnN0IGdldE1vbnRoTmFtZSA9IChtb250aEluZGV4OiBudW1iZXIpID0+IGZvcm1hdHRlci5mb3JtYXQobmV3IERhdGUoeWVhciwgbW9udGhJbmRleCkpO1xyXG4gICAgIHJldHVybiBtb250aExpc3QubWFwKGdldE1vbnRoTmFtZSk7XHJcbiAgfVxyXG4gIFxyXG4vKipcclxuICogR2V0IGEgbGlzdCBvZiB3ZWVrZGF5IG5hbWVzIGluIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgYW5kIGZvcm1hdC5cclxuICogQHBhcmFtIGxvY2FsZXMgLSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgbG9jYWxlIG9yIGxvY2FsZXMgdG8gdXNlIGZvciBmb3JtYXR0aW5nLlxyXG4gKiBAcGFyYW0gZm9ybWF0IC0gVGhlIGZvcm1hdCBmb3Igd2Vla2RheSBuYW1lcywgZWl0aGVyIFwic2hvcnRcIiAoZGVmYXVsdCkgb3IgXCJsb25nXCIuXHJcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHdlZWtkYXkgbmFtZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGZvcm1hdCBhbmQgbG9jYWxlLlxyXG4gKiBgYGBcclxuICogLy8gR2V0IGEgbGlzdCBvZiB3ZWVrZGF5IG5hbWVzIGluIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGFuZCBzaG9ydCBmb3JtYXRcclxuICogY29uc3Qgd2Vla2RheXMgPSB0aGlzLmdldFdlZWtkYXlMaXN0KCk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgZ2V0V2Vla2RheUxpc3QobG9jYWxlcz86IHN0cmluZyB8IHN0cmluZ1tdLCBmb3JtYXQ6IFwic2hvcnRcIiB8IFwibG9uZ1wiID0gXCJzaG9ydFwiKTogc3RyaW5nW10ge1xyXG4gICAgICBjb25zdCB3ZWVrZGF5cyA9IFsuLi5BcnJheSg3KS5rZXlzKCldO1xyXG4gICAgICBjb25zdCBtb25kYXlJbmRleCA9IHdlZWtkYXlzLmluZGV4T2YoMCk7XHJcbiAgICAgIHdlZWtkYXlzLnNwbGljZShtb25kYXlJbmRleCwgMSk7IFxyXG4gICAgICB3ZWVrZGF5cy5wdXNoKDApOyBcclxuICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlcywgeyB3ZWVrZGF5OiBmb3JtYXQgfSk7ICAgIFxyXG4gICAgICBjb25zdCBnZXRXZWVrZGF5TmFtZSA9ICh3ZWVrZGF5SW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KG5ldyBEYXRlKDIwMjMsIDksIHdlZWtkYXlJbmRleCArIDEpKTsgXHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB3ZWVrZGF5cy5tYXAoZ2V0V2Vla2RheU5hbWUpO1xyXG4gIH1cclxuICAgIFxyXG4gICAgXHJcbi8qKlxyXG4gKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNhbGVuZGFyIGNvbXBvbmVudC4gV2hlbiBjYWxsZWQsIHRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlICdpc0NhbGVuZGFyT3BlbicgZmxhZ1xyXG4gKiB0byBzaG93IG9yIGhpZGUgdGhlIGNhbGVuZGFyIGludGVyZmFjZS5cclxuICogYGBgXHJcbiAqIC8vIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgY2FsZW5kYXJcclxuICogdGhpcy50b2dnbGVDYWxlbmRhcigpO1xyXG4gKiBgYGBcclxuKi9cclxuICBwcml2YXRlIHRvZ2dsZUNhbGVuZGFyKCkge1xyXG4gICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSAhdGhpcy5pc0NhbGVuZGFyT3BlblxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBTYXZlIHRoZSBlZGl0ZWQgZGF0ZSBpbnB1dCBieSB0aGUgdXNlciwgcHJvdmlkZWQgaXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGRhdGUgZm9ybWF0LlxyXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGVudGVyZWQgZGF0ZSBpcyBpbiBhIHZhbGlkIGZvcm1hdCwgZGlzYWJsZXMgdGhlIGVkaXRpbmcgbW9kZSwgYW5kIGFwcGxpZXNcclxuICogdGhlIGVkaXRlZCBkYXRlIHRvIHRoZSAnc2VsZWN0ZWREYXRlJy4gSXQgdGhlbiByZWZvcm1hdHMgdGhlIHNlbGVjdGVkIGRhdGUgYW5kIGNsb3NlcyB0aGUgY2FsZW5kYXIuXHJcbiAqIGBgYFxyXG4gKiAvLyBTYXZlIHRoZSBlZGl0ZWQgZGF0ZSBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZCBkYXRlXHJcbiAqIHRoaXMuc2F2ZUVkaXRlZERhdGUoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBzYXZlRWRpdGVkRGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmlzRGF0ZVZhbGlkKHRoaXMuZWRpdGVkRGF0ZSkpIHtcclxuICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTsgXHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZWRpdGVkRGF0ZS5zcGxpdCgnLycpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKCt5ZWFyLCArbW9udGggLSAxLCArZGF5KTtcclxuICAgICAgdGhpcy5mb3JtYXREYXRlKCk7IFxyXG4gICAgICB0aGlzLnRvZ2dsZUNhbGVuZGFyKCk7IFxyXG4gICAgfSBcclxuICB9XHJcblxyXG4vKipcclxuICAqIEhhbmRsZSB1c2VyIGlucHV0IGluIHRoZSBlZGl0YWJsZSBpbnB1dCBmaWVsZCBmb3IgZGF0ZSBlZGl0aW5nLiBUaGlzIG1ldGhvZCBjYXB0dXJlcyB0aGUgaW5wdXQgdmFsdWVcclxuICAqIGFuZCBzdG9yZXMgaXQgaW4gdGhlICdlZGl0ZWREYXRlJyB2YXJpYWJsZS4gSWYgdGhlIGlucHV0IG1hdGNoZXMgdGhlIHZhbGlkIGRhdGUgZm9ybWF0LCBpdCB1cGRhdGVzXHJcbiAgKiAnc2VsZWN0ZWREYXRlTW9udGgnIGFuZCAnc2VsZWN0ZWREYXRlWWVhcicgYWNjb3JkaW5nbHkuXHJcbiAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnQgY29udGFpbmluZyB0aGUgdXNlcidzIGlucHV0LlxyXG4gICogYGBgXHJcbiAgKiAvLyBIYW5kbGUgdXNlciBpbnB1dCBpbiB0aGUgZWRpdGFibGUgaW5wdXQgZmllbGRcclxuICAqIHRoaXMub25EYXRlSW5wdXQoZXZlbnQpO1xyXG4gICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBvbkRhdGVJbnB1dChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBpbnB1dERhdGU6IHN0cmluZyA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIGlmICh0aGlzLmlzRGF0ZVZhbGlkKGlucHV0RGF0ZSkpIHtcclxuICAgICAgdGhpcy5lZGl0ZWREYXRlID0gaW5wdXREYXRlO1xyXG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gaW5wdXREYXRlLnNwbGl0KCcvJyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlTW9udGggPSArcGFyc2VkRGF0ZVsxXSAtIDE7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlWWVhciA9ICtwYXJzZWREYXRlWzJdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG1vbnRoIGRyb3Bkb3duIGluIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gb3BlbiBvciBjbG9zZSB0aGUgZHJvcGRvd24gZm9yIHNlbGVjdGluZyBtb250aHMuXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCB0cmlnZ2VyaW5nIHRoZSB0b2dnbGUgYWN0aW9uIChlLmcuLCBhIGNsaWNrIGV2ZW50KS5cclxuICogYGBgXHJcbiAqIC8vIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbW9udGggZHJvcGRvd25cclxuICogdGhpcy50b2dnbGVNb250aERyb3Bkb3duKGV2ZW50KTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSB0b2dnbGVNb250aERyb3Bkb3duKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5pc01vbnRoRHJvcGRvd25PcGVuID0gIXRoaXMuaXNNb250aERyb3Bkb3duT3BlbjtcclxuICB9XHJcblxyXG4vKipcclxuICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgeWVhciBkcm9wZG93biBpbiB0aGUgY2FsZW5kYXIgaW50ZXJmYWNlLlxyXG4gICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvcGVuIG9yIGNsb3NlIHRoZSBkcm9wZG93biBmb3Igc2VsZWN0aW5nIHllYXJzLlxyXG4gICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHRyaWdnZXJpbmcgdGhlIHRvZ2dsZSBhY3Rpb24gKGUuZy4sIGEgY2xpY2sgZXZlbnQpLlxyXG4gICogYGBgXHJcbiAgKiAvLyBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHllYXIgZHJvcGRvd25cclxuICAqIHRoaXMudG9nZ2xlWWVhckRyb3Bkb3duKGV2ZW50KTtcclxuICAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgdG9nZ2xlWWVhckRyb3Bkb3duKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5pc1llYXJEcm9wZG93bk9wZW4gPSAhdGhpcy5pc1llYXJEcm9wZG93bk9wZW47XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEhhbmRsZSB0aGUgY2hhbmdlIG9mIHRoZSBzZWxlY3RlZCBtb250aCBpbiB0aGUgY2FsZW5kYXIgaW50ZXJmYWNlLlxyXG4gKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBpbnB1dCB2YWx1ZSwgc2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZSB0byB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjaG9zZW4gbW9udGgsXHJcbiAqIGFuZCByZWNhbGN1bGF0ZXMgdGhlIGNhbGVuZGFyIGRpc3BsYXkgYWNjb3JkaW5nbHkuXHJcbiAqIGBgYFxyXG4gKiAvLyBIYW5kbGUgdGhlIGNoYW5nZSBvZiB0aGUgc2VsZWN0ZWQgbW9udGhcclxuICogdGhpcy5vbk1vbnRoQ2hhbmdlKCk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgb25Nb250aENoYW5nZSgpIHtcclxuICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZVllYXIsIHRoaXMuc2VsZWN0ZWREYXRlTW9udGgsIDEpO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVGaXJzdERheU9mQ2FsZW5kYXIoKTtcclxuICB9XHJcblxyXG4vKipcclxuICogSGFuZGxlIHRoZSBjaGFuZ2Ugb2YgdGhlIHNlbGVjdGVkIHllYXIgaW4gdGhlIGNhbGVuZGFyIGludGVyZmFjZS5cclxuICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgaW5wdXQgdmFsdWUsIHNldHMgdGhlIHNlbGVjdGVkIGRhdGUgdG8gdGhlIGZpcnN0IGRheSBvZiB0aGUgY2hvc2VuIHllYXIsXHJcbiAqIHJlZm9ybWF0cyB0aGUgc2VsZWN0ZWQgZGF0ZSwgYW5kIHJlY2FsY3VsYXRlcyB0aGUgY2FsZW5kYXIgZGlzcGxheS5cclxuICogYGBgXHJcbiAqIC8vIEhhbmRsZSB0aGUgY2hhbmdlIG9mIHRoZSBzZWxlY3RlZCB5ZWFyXHJcbiAqIHRoaXMub25ZZWFyQ2hhbmdlKCk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgb25ZZWFyQ2hhbmdlKCkge1xyXG4gICAgdGhpcy51cGRhdGVJbnB1dFZhbHVlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuc2VsZWN0ZWREYXRlWWVhciwgdGhpcy5zZWxlY3RlZERhdGVNb250aCwgMSk7XHJcbiAgICB0aGlzLmZvcm1hdERhdGUoKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlRmlyc3REYXlPZkNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIFNlbGVjdCBhIGRhdGUgaW4gdGhlIGNhbGVuZGFyIGludGVyZmFjZSBhbmQgcGVyZm9ybSBuZWNlc3NhcnkgdXBkYXRlcy5cclxuICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZSwgZm9ybWF0cyBpdCwgY2xvc2VzIHRoZSBjYWxlbmRhciwgYW5kIGVtaXRzIGEgZGF0ZUNoYW5nZWQgZXZlbnQuXHJcbiAqIEl0IGFsc28gdXBkYXRlcyB0aGUgc2VsZWN0ZWQgbW9udGggYW5kIHllYXIgZHJvcGRvd24gdmFsdWVzLlxyXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIHNlbGVjdGVkIGluIHRoZSBjYWxlbmRhci5cclxuKi9cclxuICBzZWxlY3REYXRlKGRhdGU6IERhdGUpIHtcclxuICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XHJcbiAgdGhpcy5mb3JtYXREYXRlKCk7XHJcbiAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gIHRoaXMuZGF0ZUNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcbiAgdGhpcy5zZWxlY3RlZERhdGVNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XHJcbiAgdGhpcy5zZWxlY3RlZERhdGVZZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcblxyXG4vKipcclxuICogRm9ybWF0IHRoZSBzZWxlY3RlZCBkYXRlIGJhc2VkIG9uIHRoZSBjaG9zZW4gZGF0ZSBmb3JtYXQgYW5kIGxhbmd1YWdlLlxyXG4gKiBUaGlzIG1ldGhvZCB1c2VzIHRoZSBBbmd1bGFyIERhdGVQaXBlIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZSBhbmQgdXBkYXRlcyB0aGUgZm9ybWF0dGVkRGF0ZSB2YXJpYWJsZS5cclxuICogYGBgXHJcbiAqIC8vIEZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZVxyXG4gKiB0aGlzLmZvcm1hdERhdGUoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBmb3JtYXREYXRlKCkge1xyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5zZWxlY3RlZERhdGUsIHRoaXMuZGF0ZUZvcm1hdCkgfHwgJyc7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZSBiYXNlZCBvbiB0aGUgY2hvc2VuIGRhdGUgZm9ybWF0LCBsYW5ndWFnZSwgYW5kIGxvY2FsZS5cclxuICogVGhpcyBtZXRob2QgdXNlcyB0aGUgQW5ndWxhciBEYXRlUGlwZSB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlIGFuZCB1cGRhdGVzIHRoZSBmb3JtYXR0ZWQgZGF0ZSBhcyBhIHN0cmluZy5cclxuICogQHJldHVybnMgQSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcuXHJcbiAqIGBgYFxyXG4gKiAvLyBGb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGUgd2l0aCBsYW5ndWFnZVxyXG4gKiBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFNlbGVjdGVkRGF0ZSgpO1xyXG4gKiBgYGBcclxuKi9cclxuICBwcml2YXRlIGZvcm1hdFNlbGVjdGVkRGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuc2VsZWN0ZWREYXRlLCB0aGlzLmRhdGVGb3JtYXQsIHRoaXMubGFuZykgfHwgJyc7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZSB0aGUgaW5wdXQgdmFsdWUgZGlzcGxheWVkIGluIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGlucHV0IHZhbHVlIHRvIGVpdGhlciB0aGUgZWRpdGVkIGRhdGUgb3IgdGhlIGZvcm1hdHRlZCBzZWxlY3RlZCBkYXRlLFxyXG4gKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdXNlciBpcyBpbiBlZGl0IG1vZGUgb3Igbm90LlxyXG4gKiBgYGBcclxuICogLy8gVXBkYXRlIHRoZSBpbnB1dCB2YWx1ZVxyXG4gKiB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSB1cGRhdGVJbnB1dFZhbHVlKCkge1xyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRlID0gdGhpcy5pc0VkaXRpbmcgPyB0aGlzLmVkaXRlZERhdGUgOiB0aGlzLmZvcm1hdFNlbGVjdGVkRGF0ZSgpO1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYW4gYXJyYXkgb2YgYXJyYXlzIHJlcHJlc2VudGluZyB0aGUgZGF5cyBvZiB0aGUgY3VycmVudCBtb250aC5cclxuICogRWFjaCBzdWItYXJyYXkgY29udGFpbnMgdGhlIGRheSBkYXRhIGZvciBhIHdlZWssIGFuZCBlYWNoIGRheSBkYXRhIG9iamVjdCBpbmNsdWRlcyB0aGUgZGF0ZSBhbmQgd2hldGhlciBpdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IG1vbnRoLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhcnJheXMgcmVwcmVzZW50aW5nIHRoZSBkYXlzIG9mIHRoZSBjdXJyZW50IG1vbnRoLlxyXG4gKiBgYGBcclxuICogLy8gR2V0IGFuIGFycmF5IG9mIGFycmF5cyByZXByZXNlbnRpbmcgdGhlIGRheXMgb2YgdGhlIGN1cnJlbnQgbW9udGhcclxuICogY29uc3QgY2FsZW5kYXIgPSB0aGlzLmNhbGVuZGFyRGF5cztcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBnZXQgY2FsZW5kYXJEYXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRmlyc3REYXlPZkNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgZGF0ZSBvZiB0aGUgcHJldmlvdXMgbW9udGggdG8gZGlzcGxheSBpbiBlbXB0eSBjZWxscyBvZiB0aGUgY3VycmVudCBtb250aC5cclxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGF0ZSBvZiB0aGUgcHJldmlvdXMgbW9udGggaWYgdGhlIHByb3ZpZGVkIGRhdGUgaXMgbm90IGluIHRoZSBjdXJyZW50IG1vbnRoLlxyXG4gKiBJZiB0aGUgcHJvdmlkZWQgZGF0ZSBpcyBpbiB0aGUgY3VycmVudCBtb250aCwgaXQgcmV0dXJucyB0aGUgZGF0ZSdzIGRheSBhcyBhIHN0cmluZy5cclxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBldmFsdWF0ZS5cclxuICogQHJldHVybnMgVGhlIGRhdGUgb2YgdGhlIHByZXZpb3VzIG1vbnRoIG9yIGEgZGF5IHN0cmluZy5cclxuICogYGBgXHJcbiAqIC8vIEdldCB0aGUgcHJldmlvdXMgbW9udGgncyBkYXRlIHRvIGRpc3BsYXkgaW4gZW1wdHkgY2VsbHNcclxuICogY29uc3QgcHJldmlvdXNNb250aERhdGUgPSB0aGlzLmdldFByZXZpb3VzTW9udGhEYXRlKG5ldyBEYXRlKDIwMjMsIDgsIDEpKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBnZXRQcmV2aW91c01vbnRoRGF0ZShkYXRlOiBEYXRlKTogYW55IHtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAoZGF0ZS5nZXRNb250aCgpID09PSBjdXJyZW50RGF0ZS5nZXRNb250aCgpICYmIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSkge1xyXG4gICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogTmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzIG1vbnRoIGluIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIHNlbGVjdGVkRGF0ZSwgZm9ybWF0cyBpdCwgYW5kIHJlY2FsY3VsYXRlcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhci5cclxuICogYGBgXHJcbiAqIC8vIE5hdmlnYXRlIHRvIHRoZSBwcmV2aW91cyBtb250aFxyXG4gKiB0aGlzLmdldFByZXZpb3VzTW9udGgoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBnZXRQcmV2aW91c01vbnRoKCkge1xyXG4gICAgY29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKSwgY3VycmVudE1vbnRoIC0gMSwgMSk7XHJcbiAgICB0aGlzLmZvcm1hdERhdGUoKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlRmlyc3REYXlPZkNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIE5hdmlnYXRlIHRvIHRoZSBuZXh0IG1vbnRoIGluIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIHNlbGVjdGVkRGF0ZSwgZm9ybWF0cyBpdCwgYW5kIHJlY2FsY3VsYXRlcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhci5cclxuICogYGBgXHJcbiAqIC8vIE5hdmlnYXRlIHRvIHRoZSBuZXh0IG1vbnRoXHJcbiAqIHRoaXMuZ2V0TmV4dE1vbnRoKCk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgZ2V0TmV4dE1vbnRoKCkge1xyXG4gICAgY29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKSwgY3VycmVudE1vbnRoICsgMSwgMSk7XHJcbiAgICB0aGlzLmZvcm1hdERhdGUoKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlRmlyc3REYXlPZkNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBnaXZlbiBtb250aCBvZiBhIHNwZWNpZmljIHllYXIuXHJcbiAqIEBwYXJhbSB5ZWFyIC0gVGhlIHllYXIgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGRheXMuXHJcbiAqIEBwYXJhbSBtb250aCAtIFRoZSBtb250aCAoMC1iYXNlZCBpbmRleCkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGRheXMuXHJcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgc3BlY2lmaWVkIG1vbnRoIG9mIHRoZSBnaXZlbiB5ZWFyLlxyXG4qL1xyXG4gIHByaXZhdGUgZGF5c0luTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcclxuICB9XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBzdHJ1Y3R1cmUgb2YgZGF5cyBpbiBhIG1vbnRoIGZvciB0aGUgY2FsZW5kYXIgZGlzcGxheS5cclxuICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWF0cml4IG9mIGRheSBkYXRhIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBkYXlzIGluIHRoZSBjYWxlbmRhci5cclxuICogRWFjaCBkYXkgZGF0YSBvYmplY3QgY29udGFpbnMgdGhlIGRhdGUgYW5kIHdoZXRoZXIgaXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBtb250aC5cclxuICogQHJldHVybnMgQSBtYXRyaXggb2YgZGF5IGRhdGEgb2JqZWN0cyBmb3IgdGhlIGNhbGVuZGFyIGRpc3BsYXkuXHJcbiovXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVGaXJzdERheU9mQ2FsZW5kYXIoKSB7XHJcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcclxuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcclxuICAgIGNvbnN0IGZpcnN0V2Vla2RheSA9IGZpcnN0RGF5T2ZNb250aC5nZXREYXkoKTtcclxuICAgIGNvbnN0IHN0YXJ0RGF5ID0gZmlyc3RXZWVrZGF5ID09PSAwID8gLTUgOiAyIC0gZmlyc3RXZWVrZGF5O1xyXG4gICAgY29uc3QgY2FsZW5kYXJEYXlzID0gW107XHJcbiAgICBsZXQgY3VycmVudERheSA9IHN0YXJ0RGF5O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgY29uc3Qgd2VlayA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDc7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGRheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBjdXJyZW50RGF5KTtcclxuICAgICAgICBjb25zdCBkYXlEYXRhID0ge1xyXG4gICAgICAgICAgZGF0ZTogZGF5LFxyXG4gICAgICAgICAgaXNDdXJyZW50TW9udGg6IGN1cnJlbnREYXkgPj0gMSAmJiBjdXJyZW50RGF5IDw9IHRoaXMuZGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2Vlay5wdXNoKGRheURhdGEpO1xyXG4gICAgICAgIGN1cnJlbnREYXkrKztcclxuICAgICAgfVxyXG4gICAgICBjYWxlbmRhckRheXMucHVzaCh3ZWVrKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjYWxlbmRhckRheXM7XHJcbiAgfVxyXG4gIFxyXG4vKipcclxuICogQ2hlY2sgaWYgYSBnaXZlbiBkYXRlIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBpbiB0aGUgY2FsZW5kYXIuXHJcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2suXHJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvdmlkZWQgZGF0ZSBtYXRjaGVzIHRoZSBzZWxlY3RlZCBkYXRlLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICogYGBgXHJcbiAqIC8vIENoZWNrIGlmIGEgZGF0ZSBpcyBzZWxlY3RlZFxyXG4gKiBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc0RhdGVTZWxlY3RlZChzb21lRGF0ZSk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgaXNEYXRlU2VsZWN0ZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUudG9EYXRlU3RyaW5nKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLnRvRGF0ZVN0cmluZygpO1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIGRhdGUgc3RyaW5nIGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZGF0ZSBmb3JtYXQuXHJcbiAqIEBwYXJhbSBpbnB1dERhdGUgLSBUaGUgZGF0ZSBzdHJpbmcgdG8gdmFsaWRhdGUuXHJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgZGF0ZSBzdHJpbmcgaXMgdmFsaWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKiBgYGBcclxuICogLy8gQ2hlY2sgaWYgYSBkYXRlIHN0cmluZyBpcyB2YWxpZFxyXG4gKiBjb25zdCBpc1ZhbGlkRGF0ZSA9IHRoaXMuaXNEYXRlVmFsaWQoJzA1LzI1LzIwMjMnKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBpc0RhdGVWYWxpZChpbnB1dERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVJlZ0V4cC50ZXN0KGlucHV0RGF0ZSk7XHJcbiAgfVxyXG4gIFxyXG4vKipcclxuICogQ2hlY2sgaWYgYSBnaXZlbiBkYXRlIGlzIHRvZGF5J3MgZGF0ZS5cclxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVjay5cclxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwcm92aWRlZCBkYXRlIGlzIHRvZGF5J3MgZGF0ZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqIGBgYFxyXG4gKiAvLyBDaGVjayBpZiBhIGRhdGUgaXMgdG9kYXkncyBkYXRlXHJcbiAqIGNvbnN0IGlzVG9kYXkgPSB0aGlzLmlzRGF0ZVRvZGF5KHNvbWVEYXRlKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBpc0RhdGVUb2RheShkYXRlOiBEYXRlKSB7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICByZXR1cm4gZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gdG9kYXkudG9EYXRlU3RyaW5nKCk7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCJcclxuW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuPlxyXG5cclxuICA8IS0tIElucHV0LCBzYXZlICYgZWRpdCBidXR0b25zIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFpc0VkaXRpbmdcIj5cclxuXHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcclxuICAgICAgICBbdmFsdWVdPVwiZm9ybWF0dGVkRGF0ZVwiXHJcbiAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0VkaXRpbmdcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gRWRpdCAtLT5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtbyBlZGl0LWJ1dHRvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIChjbGljayk9XCJ0b2dnbGVFZGl0KClcIj48L2k+IFxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0aW5nXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJlZGl0ZWREYXRlXCJcclxuICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJvcmRlci0zXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmxvcHB5LW8gZWRpdC1idXR0b25cIiAoY2xpY2spPVwic2F2ZUVkaXRlZERhdGUoKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICA8L2Rpdj4gICAgIFxyXG4gICAgPC9kaXY+XHJcblxyXG48IS0tIENhbGVuZGFyKERyb3Bkb3ducywgZGF0ZXMpIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0NhbGVuZGFyT3BlblwiIGNsYXNzPVwiY2FsZW5kYXJcIiAjY2FsZW5kYXJDb250YWluZXIgXHJcbiAgW3N0eWxlLnRvcF09XCJ0b3BPZmZzZXRcIlxyXG4gIFtzdHlsZS5sZWZ0XT1cImxlZnRPZmZzZXRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGhCdXR0b25Db250YWluZXJcIj5cclxuICAgICAgICAgICAgPCEtLSBNb250aCBkcm9wZG93biAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTW9udGhEcm9wZG93bk9wZW47IGVsc2UgbW9udGhMYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDxtZWZkZXYtc2VsZWN0ICAgIFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibW9udGhEcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVNb250aFwiIFxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9udGhDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgW1BsYWNlSG9sZGVyXT1cIidtb250aCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtZWZkZXYtb3B0aW9uIFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoczsgbGV0IGkgPSBpbmRleFwiIFxyXG4gICAgICAgICAgICAgICAgW1ZhbHVlXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgW0xhYmVsXSA9IFwibW9udGhcIiBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPnt7IG1vbnRoIH19PC9tZWZkZXYtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWVmZGV2LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbW9udGhMYWJlbD5cclxuICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwidG9nZ2xlTW9udGhEcm9wZG93bigkZXZlbnQpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBZZWFyIGRyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNZZWFyRHJvcGRvd25PcGVuOyBlbHNlIHllYXJMYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDxtZWZkZXYtc2VsZWN0IFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwieWVhckRyb3Bkb3duXCIgXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVZZWFyXCIgXHJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25ZZWFyQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgIFtQbGFjZUhvbGRlcl09XCIneWVhcidcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG1lZmRldi1vcHRpb24gXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJzXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtMYWJlbF0gPSBcInllYXJcIiBcclxuICAgICAgICAgICAgICAgICAgW1ZhbHVlXT1cInllYXJcIiBcclxuICAgICAgICAgICAgICAgICAgPnt7eWVhcn19PC9tZWZkZXYtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWVmZGV2LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjeWVhckxhYmVsPlxyXG4gICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJ0b2dnbGVZZWFyRHJvcGRvd24oJGV2ZW50KVwiPnt7IHNlbGVjdGVkRGF0ZVllYXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgPCEtLSBDYWxlbmRhciBleGl0IGJ1dHRvbiAtLT5cclxuICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzIHRvZ2dsZUNhbGVuZGFyQnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5XCI+XHJcbiAgICAgIDx0YWJsZT5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGggY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdGb3I9XCJsZXQgd2Vla2RheSBvZiB3ZWVrZGF5c1wiPnt7IHdlZWtkYXkgfX08L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB3ZWVrIG9mIGNhbGVuZGFyRGF5c1wiPlxyXG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXlEYXRhIG9mIHdlZWtcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF0ZShkYXlEYXRhLmRhdGUpXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3RlZCc6IGlzRGF0ZVNlbGVjdGVkKGRheURhdGEuZGF0ZSksICdwcmV2LW1vbnRoJzogIWRheURhdGEuaXNDdXJyZW50TW9udGggfVwiPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRlXCIgXHJcbiAgICAgICAgICAgICAgW2NsYXNzLnByZXYtbW9udGhdPVwiIWRheURhdGEuaXNDdXJyZW50TW9udGhcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBkYXlEYXRhLmRhdGUuZ2V0RGF0ZSgpIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
602
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1raXQtbGliL3NyYy9saWIvbWFya3VwLWtpdC91dGlscy9kYXRlcGlja2VyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1raXQtbGliL3NyYy9saWIvbWFya3VwLWtpdC91dGlscy9kYXRlcGlja2VyL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF5QixZQUFZLEVBQWEsS0FBSyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFJMUk7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtCRTtBQVFGLE1BQU0sT0FBTyxtQkFBbUI7SUEwTFY7SUFBNEI7SUF4TGxEOzs7TUFHRTtJQUNGLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEM7OztNQUdFO0lBQ0YsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUUzQjs7O01BR0U7SUFDRixZQUFZLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUUvQjs7O0tBR0M7SUFDRixhQUFhLENBQU87SUFFbkI7OztLQUdDO0lBQ0YsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4Qjs7O01BR0U7SUFDRixtQkFBbUIsR0FBWSxJQUFJLENBQUM7SUFFcEM7OztNQUdFO0lBQ0Ysa0JBQWtCLEdBQVksSUFBSSxDQUFDO0lBRW5DOzs7TUFHRTtJQUNGLGlCQUFpQixHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFekQ7OztNQUdFO0lBQ0YsZ0JBQWdCLEdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUUxRDs7O0tBR0M7SUFD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QUFJO3NCQUFaLEtBQUs7Z0JBVUcsVUFBVTtzQkFBbEIsS0FBSztnQkFVVSxVQUFVO3NCQUF6QixLQUFLO3VCQUFDLE9BQU87Z0JBVUwsUUFBUTtzQkFBaEIsS0FBSztnQkFVRyxTQUFTO3NCQUFqQixLQUFLO2dCQVVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBVUksV0FBVztzQkFBcEIsTUFBTTtnQkEwQkwsT0FBTztzQkFETixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcblxyXG4vKipcclxuICAqIERhdGVwaWNrZXIgQ29tcG9uZW50IGZvciBzZWxlY3RpbmcgZGF0ZXMuXHJcbiAgKlxyXG4gICogVGhpcyBjb21wb25lbnQgYWxsb3dzIHVzZXJzIHRvIHBpY2sgYSBkYXRlIGZyb20gYSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAgKiBJdCBzdXBwb3J0cyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzdWNoIGFzIGxhbmd1YWdlLCBkYXRlIGZvcm1hdCwgYW5kIGRhdGUgcmFuZ2UuXHJcbiAgKlxyXG4gICogQGV4YW1wbGVcclxuICAqIDxtZWZkZXYtZGF0ZXBpY2tlclxyXG4gICogICBbbGFuZ109XCIndWsnXCJcclxuICAqICAgW2RhdGVGb3JtYXRdPVwiJ2RkL01NL3l5eXknXCJcclxuICAqICAgW3JhbmdlXT1cIntzdGFydFllYXI6IDE5MDAsIHRvWWVhcjogMzAwfVwiXHJcbiAgKiAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXHJcbiAgKiAgIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudClcIlxyXG4gICogICBbdG9wT2Zmc2V0XT1cIicyMCdcIlxyXG4gICogICBbbGVmdE9mZnNldF09XCInMTAnXCI+XHJcbiAgKiA8L21lZmRldi1kYXRlcGlja2VyPlxyXG4gICpcclxuICAqIDxleGFtcGxlLXVybD5odHRwczovL21lZi5kZXYvdWlfa2l0X2RlbW8vdmlldy91dGlscy9kYXRlcGlja2VyPC9leGFtcGxlLXVybD5cclxuKi9cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbWVmZGV2LWRhdGVwaWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgIE9uQ2hhbmdlcywgT25Jbml0IHtcclxuXHJcbi8qKlxyXG4gKiBGbGFnIHRvIGRldGVybWluZSBpZiB0aGUgY2FsZW5kYXIgaXMgb3BlbiBvciBjbG9zZWQuXHJcbiAqIERlZmF1bHQgdmFsdWU6IGZhbHNlIChjbG9zZWQpLlxyXG4qL1xyXG5pc0NhbGVuZGFyT3BlbjogYm9vbGVhbiA9IGZhbHNlOyBcclxuXHJcbi8qKlxyXG4gKiBGbGFnIHRvIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IGlzIGluIGVkaXRpbmcgbW9kZS5cclxuICogRGVmYXVsdCB2YWx1ZTogZmFsc2UgKG5vdCBpbiBlZGl0aW5nIG1vZGUpLlxyXG4qL1xyXG5pc0VkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTsgIFxyXG5cclxuLyoqXHJcbiAqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZS5cclxuICogRGVmYXVsdCB2YWx1ZTogVG9kYXkncyBkYXRlLlxyXG4qL1xyXG5zZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpOyBcclxuXHJcbiAvKipcclxuICogVGhlIGZvcm1hdHRlZCBkYXRlIGZvciBkaXNwbGF5IGluIHRoZSBpbnB1dC5cclxuICogRGVmYXVsdCB2YWx1ZTogRm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZWxlY3RlZCBkYXRlLlxyXG4qL1xyXG5mb3JtYXR0ZWREYXRlOiBhbnkgOyBcclxuXHJcbiAvKipcclxuICogVHJhY2sgdGhlIGVkaXRlZCBkYXRlIHNlcGFyYXRlbHkgd2hlbiBpbiBlZGl0aW5nIG1vZGUuXHJcbiAqIERlZmF1bHQgdmFsdWU6IEFuIGVtcHR5IHN0cmluZy5cclxuKi9cclxuZWRpdGVkRGF0ZTogc3RyaW5nID0gJyc7IFxyXG5cclxuLyoqXHJcbiAqIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtb250aCBkcm9wZG93biBpcyBvcGVuIG9yIGNsb3NlZC5cclxuICogRGVmYXVsdCB2YWx1ZTogdHJ1ZSAob3BlbikuXHJcbiovXHJcbmlzTW9udGhEcm9wZG93bk9wZW46IGJvb2xlYW4gPSB0cnVlOyBcclxuXHJcbi8qKlxyXG4gKiBGbGFnIHRvIGRldGVybWluZSBpZiB0aGUgeWVhciBkcm9wZG93biBpcyBvcGVuIG9yIGNsb3NlZC5cclxuICogRGVmYXVsdCB2YWx1ZTogdHJ1ZSAob3BlbikuXHJcbiovXHJcbmlzWWVhckRyb3Bkb3duT3BlbjogYm9vbGVhbiA9IHRydWU7IFxyXG5cclxuLyoqXHJcbiAqIFRoZSBzZWxlY3RlZCBtb250aCAoMC0xMSkuXHJcbiAqIERlZmF1bHQgdmFsdWU6IFRoZSBtb250aCBvZiB0aGUgc2VsZWN0ZWQgZGF0ZS5cclxuKi9cclxuc2VsZWN0ZWREYXRlTW9udGg6IG51bWJlciA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7IFxyXG5cclxuLyoqXHJcbiAqIFRoZSBzZWxlY3RlZCB5ZWFyLlxyXG4gKiBEZWZhdWx0IHZhbHVlOiBUaGUgeWVhciBvZiB0aGUgc2VsZWN0ZWQgZGF0ZS5cclxuKi9cclxuc2VsZWN0ZWREYXRlWWVhcjogbnVtYmVyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTsgXHJcblxyXG4gLyoqXHJcbiAqIEFuIGFycmF5IG9mIHllYXJzIGZvciB0aGUgeWVhciBkcm9wZG93bi5cclxuICogRGVmYXVsdCB2YWx1ZTogQW4gYXJyYXkgb2YgeWVhcnMgd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXHJcbiovXHJcbnllYXJzOiBudW1iZXJbXSBcclxuXHJcbi8qKlxyXG4gKiBUaGUgbGFuZ3VhZ2UvbG9jYWxlIGZvciB0aGUgZGF0ZXBpY2tlci5cclxuICogRGVmYXVsdCB2YWx1ZTogJ2VuJyAoRW5nbGlzaCkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxtZWZkZXYtZGF0ZXBpY2tlclxyXG4gKiAgIFtsYW5nXSA9IFwiJ3VrJ1wiPlxyXG4gKiA8L21lZmRldi1kYXRlcGlja2VyPlxyXG4qL1xyXG5ASW5wdXQoKSBsYW5nOiBzdHJpbmcgPSAnZW4nOyBcclxuXHJcbi8qKlxyXG4gKiBUaGUgZGF0ZSBmb3JtYXQgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbGVjdGVkIGRhdGUuXHJcbiAqIERlZmF1bHQgdmFsdWU6ICdFRUUgTU1NIGRkIHl5eXknLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8bWVmZGV2LWRhdGVwaWNrZXJcclxuICogICBbZGF0ZUZvcm1hdF09XCInZGQvTU0veXl5eSdcIj5cclxuICogPC9tZWZkZXYtZGF0ZXBpY2tlcj5cclxuKi9cclxuQElucHV0KCkgZGF0ZUZvcm1hdDogc3RyaW5nID0gJ0VFRSBNTU0gZGQgeXl5eSc7IFxyXG5cclxuLyoqXHJcbiAqIFRoZSByYW5nZSBvZiB5ZWFycyBhdmFpbGFibGUgaW4gdGhlIHllYXIgZHJvcGRvd24uXHJcbiAqIERlZmF1bHQgdmFsdWU6IHsgc3RhcnRZZWFyOiAxOTAwLCB0b1llYXI6IDMwMCB9LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8bWVmZGV2LWRhdGVwaWNrZXJcclxuICogICBbcmFuZ2VdPVwie3N0YXJ0WWVhcjogMTkwMCwgdG9ZZWFyOiAzMDB9XCI+XHJcbiAqIDwvbWVmZGV2LWRhdGVwaWNrZXI+XHJcbiovXHJcbkBJbnB1dCgncmFuZ2UnKSB5ZWFyc1JhbmdlOntzdGFydFllYXI6bnVtYmVyLCB0b1llYXI6bnVtYmVyfSA9IHtzdGFydFllYXI6MTkwMCwgdG9ZZWFyOjMwMH07IFxyXG5cclxuLyoqXHJcbiAqIFdoZXRoZXIgdGhlIGRhdGVwaWNrZXIgaXMgZGlzYWJsZWQgb3Igbm90LlxyXG4gKiBEZWZhdWx0IHZhbHVlOiBmYWxzZSAoZW5hYmxlZCkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxtZWZkZXYtZGF0ZXBpY2tlclxyXG4gKiAgIFtkaXNhYmxlZF09XCJmYWxzZVwiPlxyXG4gKiA8L21lZmRldi1kYXRlcGlja2VyPlxyXG4qL1xyXG5ASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlOyBcclxuXHJcbi8qKlxyXG4gKiBUaGUgdG9wIG9mZnNldCBmb3IgcG9zaXRpb25pbmcgdGhlIGRhdGVwaWNrZXIuXHJcbiAqIERlZmF1bHQgdmFsdWU6ICcyMCcuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxtZWZkZXYtZGF0ZXBpY2tlclxyXG4gKiAgIFt0b3BPZmZzZXRdPVwiJzIwJ1wiPlxyXG4gKiA8L21lZmRldi1kYXRlcGlja2VyPlxyXG4qL1xyXG5ASW5wdXQoKSB0b3BPZmZzZXQ6IHN0cmluZyA9ICcyMCc7XHJcblxyXG4vKipcclxuICogVGhlIGxlZnQgb2Zmc2V0IGZvciBwb3NpdGlvbmluZyB0aGUgZGF0ZXBpY2tlci5cclxuICogRGVmYXVsdCB2YWx1ZTogJzEwJy5cclxuICogQGV4YW1wbGVcclxuICogPG1lZmRldi1kYXRlcGlja2VyXHJcbiAqICAgW2xlZnRPZmZzZXRdPVwiJzEwJ1wiPlxyXG4gKiA8L21lZmRldi1kYXRlcGlja2VyPlxyXG4qL1xyXG5ASW5wdXQoKSBsZWZ0T2Zmc2V0OiBzdHJpbmcgPSAnMTAnOyAvL0RlZmF1bHQgdmFsdWVcclxuXHJcbi8qKlxyXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIGRhdGUgaW4gdGhlIGRhdGVwaWNrZXIgY2hhbmdlcy5cclxuICogSXQgZW1pdHMgYSBgRGF0ZWAgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgZGF0ZS5cclxuICogQGV4YW1wbGVcclxuICogPG1lZmRldi1kYXRlcGlja2VyXHJcbiAqICAgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50KVwiPlxyXG4gKiA8L21lZmRldi1kYXRlcGlja2VyPlxyXG4qL1xyXG5AT3V0cHV0KCkgZGF0ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxEYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuXHJcbi8qKlxyXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dCBmb3IgZGF0ZSBpbiB0aGUgZm9ybWF0IFwiZGQvTU0veXl5eVwiLlxyXG4gKiAtIFRoZSBkYXkgKGRkKSBzaG91bGQgYmUgYmV0d2VlbiAwMSBhbmQgMzEuXHJcbiAqIC0gVGhlIG1vbnRoIChNTSkgc2hvdWxkIGJlIGJldHdlZW4gMDEgYW5kIDEyLlxyXG4gKiAtIFRoZSB5ZWFyICh5eXl5KSBzaG91bGQgYmUgYSA0LWRpZ2l0IG51bWJlci5cclxuKi9cclxuICBwcml2YXRlIGRhdGVSZWdFeHA6IFJlZ0V4cCA9IC9eKDBbMS05XXxbMTJdWzAtOV18M1swMV0pXFwvKDBbMS05XXwxWzAtMl0pXFwvXFxkezR9JC87XHJcblxyXG4vKipcclxuICogVGhlIHN0cmluZyBlbnRlcmVkIGJ5IHRoZSB1c2VyIGZvciBkYXRlIGlucHV0LlxyXG4gKiBUaGlzIHZhcmlhYmxlIHN0b3JlcyB0aGUgdXNlcidzIGlucHV0IGFzIHRoZXkgdHlwZSBpbiB0aGUgZGF0ZSBmaWVsZC5cclxuKi9cclxuICB1c2VySW5wdXQ6IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4vKipcclxuICogSG9zdCBsaXN0ZW5lciBmb3IgZG9jdW1lbnQgY2xpY2sgZXZlbnRzIHRvIGhhbmRsZSBjYWxlbmRhciBpbnRlcmFjdGlvbi5cclxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBjbGljayBldmVudCBvY2N1cnJlZCB3aXRoaW4gdGhlIGNhbGVuZGFyIG9yIGlucHV0IGVsZW1lbnRzLlxyXG4gKiAtIElmIHRoZSBjbGljayBvY2N1cnJlZCB3aXRoaW4gdGhlIGNhbGVuZGFyLCBubyBhY3Rpb24gaXMgdGFrZW4uXHJcbiAqIC0gSWYgdGhlIGNsaWNrIG9jY3VycmVkIHdpdGhpbiB0aGUgaW5wdXQgZWxlbWVudCBhbmQgdGhlIGNvbXBvbmVudCBpcyBub3QgaW4gZWRpdGluZyBtb2RlLFxyXG4gKiAgIGl0IG9wZW5zIHRoZSBjYWxlbmRhci5cclxuICogLSBJZiB0aGUgY2xpY2sgb2NjdXJyZWQgb3V0c2lkZSB0aGUgY2FsZW5kYXIgYW5kIGlucHV0LCBpdCBjbG9zZXMgdGhlIGNhbGVuZGFyLlxyXG4gKiBAcGFyYW0gZXZlbnQgVGhlIE1vdXNlRXZlbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY2xpY2sgZXZlbnQuXHJcbiovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBjYWxlbmRhciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYWxlbmRhcicpO1xyXG4gICAgY29uc3QgbW9udGhEcm9wZG93biA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tb250aERyb3Bkb3duJyk7XHJcbiAgICBjb25zdCB5ZWFyRHJvcGRvd24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcueWVhckRyb3Bkb3duJyk7XHJcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xyXG4gICAgaWYobW9udGhEcm9wZG93bi5jb250YWlucyh0YXJnZXRFbGVtZW50KSAmJiB5ZWFyRHJvcGRvd24uY29udGFpbnModGFyZ2V0RWxlbWVudCkgKXtcclxuICAgICAgdGhpcy50b2dnbGVNb250aERyb3Bkb3duKGV2ZW50KVxyXG4gICAgICB0aGlzLnRvZ2dsZVllYXJEcm9wZG93bihldmVudClcclxuICAgIH1cclxuICAgIGlmIChjYWxlbmRhciAmJiBjYWxlbmRhci5jb250YWlucyh0YXJnZXRFbGVtZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSAmJiAhdGhpcy5pc0VkaXRpbmcpIHtcclxuICAgICAgLy8g0JrQu9GW0Log0LLRltC00LHRg9Cy0YHRjyDQvdCwINC10LvQtdC80LXQvdGC0ZYgaW5wdXQsINCy0ZbQtNC60YDQuNCy0LDRlNC80L4g0LrQsNC70LXQvdC00LDRgFxyXG4gICAgICB0aGlzLmlzQ2FsZW5kYXJPcGVuID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vINCa0LvRltC6INCy0ZbQtNCx0YPQstGB0Y8g0L/QvtC30LAg0LrQsNC70LXQvdC00LDRgNC10Lwg0YLQsCBpbnB1dCwg0LfQsNC60YDQuNCy0LDRlNC80L4g0LrQsNC70LXQvdC00LDRgFxyXG4gICAgICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIENvbnN0cnVjdG9yIGZvciB0aGUgRGF0ZXBpY2tlckNvbXBvbmVudCBjbGFzcy5cclxuICogQHBhcmFtIGRhdGVQaXBlIEEgc2VydmljZSBmb3IgZm9ybWF0dGluZyBhbmQgcGFyc2luZyBkYXRlcy5cclxuICogQHBhcmFtIGVsZW1lbnRSZWYgQSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgb24gd2hpY2ggdGhpcyBjb21wb25lbnQgaXMgYXR0YWNoZWQuXHJcbiAqIEl0IGlzIHVzZWQgdG8gYWNjZXNzIERPTSBlbGVtZW50cy5cclxuKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoKVxyXG4gIH1cclxuICBcclxuLyoqXHJcbiAqIExpZmVjeWNsZSBob29rIGNhbGxlZCBhZnRlciB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gKiBJdCBpbml0aWFsaXplcyB0aGUgeWVhcnMgZm9yIHRoZSB5ZWFyIHNlbGVjdCBkcm9wZG93bi5cclxuKi9cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgdGhpcy5pbml0aWFsaXplWWVhcnMoKTtcclxuICB9XHJcbi8qKlxyXG4gKiBMaWZlY3ljbGUgaG9vayBjYWxsZWQgd2hlbmV2ZXIgdGhlIGlucHV0IHByb3BlcnRpZXMgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2UuXHJcbiAqIEl0IHVwZGF0ZXMgdGhlIGlucHV0IHZhbHVlLlxyXG4qL1xyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy51cGRhdGVJbnB1dFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEFuIGFycmF5IG9mIG1vbnRoIG5hbWVzIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBsYW5ndWFnZS5cclxuICogSXQgcHJvdmlkZXMgbG9jYWxpemVkIG1vbnRoIG5hbWVzIGZvciBkaXNwbGF5IGluIHRoZSBkYXRlcGlja2VyLlxyXG4qL1xyXG4gIHByaXZhdGUgZ2V0IG1vbnRocygpe1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9udGhMaXN0KHRoaXMubGFuZyk7XHJcbiAgfSAgXHJcblxyXG4vKipcclxuICogQW4gYXJyYXkgb2Ygd2Vla2RheSBuYW1lcyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UuXHJcbiAqIEl0IHByb3ZpZGVzIGxvY2FsaXplZCB3ZWVrZGF5IG5hbWVzIGZvciBkaXNwbGF5IGluIHRoZSBkYXRlcGlja2VyLlxyXG4qL1xyXG4gIHByaXZhdGUgZ2V0IHdlZWtkYXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0V2Vla2RheUxpc3QodGhpcy5sYW5nKTtcclxuICB9XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiB5ZWFycyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHllYXIgZHJvcGRvd24uXHJcbiAqIFRoaXMgbWV0aG9kIHBvcHVsYXRlcyB0aGUgJ3llYXJzJyBhcnJheSB3aXRoIGEgcmFuZ2Ugb2YgeWVhcnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkICd5ZWFyc1JhbmdlJyBjb25maWd1cmF0aW9uLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogLy8gQXNzdW1pbmcgJ3llYXJzUmFuZ2UnIGlzIHsgc3RhcnRZZWFyOiAxOTAwLCB0b1llYXI6IDMwMCB9XHJcbiAqIC8vIEFmdGVyIGNhbGxpbmcgaW5pdGlhbGl6ZVllYXJzKCksICd5ZWFycycgbWlnaHQgY29udGFpbiBbMTkwMCwgMTkwMSwgLi4uLCAzMDBdXHJcbiAqIHRoaXMuaW5pdGlhbGl6ZVllYXJzKCk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVllYXJzKCkge1xyXG4gICAgdGhpcy55ZWFycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMueWVhcnNSYW5nZS50b1llYXIgfSwgKF8sIGluZGV4KSA9PiBpbmRleCArIHRoaXMueWVhcnNSYW5nZS5zdGFydFllYXIpO1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBUb2dnbGUgdGhlIGVkaXRpbmcgbW9kZSBmb3IgdGhlIGRhdGUgaW5wdXQuIFdoZW4gZW5hYmxlZCwgdGhlIHVzZXIgY2FuIGVkaXQgdGhlIGRhdGUgZGlyZWN0bHkgaW4gdGhlIGlucHV0IGZpZWxkLlxyXG4gKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSAnaXNFZGl0aW5nJyBmbGFnIHRvIHRydWUgYW5kIHN0b3JlcyB0aGUgY3VycmVudCBmb3JtYXR0ZWQgZGF0ZSBmb3IgZWRpdGluZy5cclxuKi9cclxuICB0b2dnbGVFZGl0KCkge1xyXG4gICAgdGhpcy5pc0VkaXRpbmcgPSAhdGhpcy5pc0VkaXRpbmc7XHJcbiAgICB0aGlzLmVkaXRlZERhdGUgPSB0aGlzLmZvcm1hdFNlbGVjdGVkRGF0ZSgpOyAvLyBTdG9yZSB0aGUgY3VycmVudCBmb3JtYXR0ZWQgZGF0ZSBmb3IgZWRpdGluZ1xyXG4gICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBsaXN0IG9mIG1vbnRoIG5hbWVzIGluIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgYW5kIGZvcm1hdC5cclxuICogQHBhcmFtIGxvY2FsZXMgLSBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgbG9jYWxlIG9yIGxvY2FsZXMgdG8gdXNlIGZvciBmb3JtYXR0aW5nLlxyXG4gKiBAcGFyYW0gZm9ybWF0IC0gVGhlIGZvcm1hdCBmb3IgbW9udGggbmFtZXMsIGVpdGhlciBcImxvbmdcIiAoZGVmYXVsdCkgb3IgXCJzaG9ydFwiLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBtb250aCBuYW1lcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZm9ybWF0IGFuZCBsb2NhbGUuXHJcbiAqIGBgYFxyXG4gKiAvLyBHZXQgYSBsaXN0IG9mIG1vbnRoIG5hbWVzIGluIHRoZSBkZWZhdWx0IGxhbmd1YWdlIGFuZCBsb25nIGZvcm1hdFxyXG4gKiBjb25zdCBtb250aHMgPSB0aGlzLmdldE1vbnRoTGlzdCh0aGlzLmxhbmcpO1xyXG4gKiBgYGBcclxuKi9cclxuICBwcml2YXRlIGdldE1vbnRoTGlzdCggIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSwgIGZvcm1hdDogXCJsb25nXCIgfCBcInNob3J0XCIgPSBcImxvbmdcIik6IHN0cmluZ1tdIHsgIFxyXG4gICAgY29uc3QgeWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoTGlzdCA9IFsuLi5BcnJheSgxMikua2V5cygpXTtcclxuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZXMsIHsgICAgbW9udGg6IGZvcm1hdCAgfSk7XHJcbiAgICBjb25zdCBnZXRNb250aE5hbWUgPSAobW9udGhJbmRleDogbnVtYmVyKSA9PiBmb3JtYXR0ZXIuZm9ybWF0KG5ldyBEYXRlKHllYXIsIG1vbnRoSW5kZXgpKTtcclxuICAgICByZXR1cm4gbW9udGhMaXN0Lm1hcChnZXRNb250aE5hbWUpO1xyXG4gIH1cclxuICBcclxuLyoqXHJcbiAqIEdldCBhIGxpc3Qgb2Ygd2Vla2RheSBuYW1lcyBpbiB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlIGFuZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBsb2NhbGVzIC0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIGxvY2FsZSBvciBsb2NhbGVzIHRvIHVzZSBmb3IgZm9ybWF0dGluZy5cclxuICogQHBhcmFtIGZvcm1hdCAtIFRoZSBmb3JtYXQgZm9yIHdlZWtkYXkgbmFtZXMsIGVpdGhlciBcInNob3J0XCIgKGRlZmF1bHQpIG9yIFwibG9uZ1wiLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB3ZWVrZGF5IG5hbWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBmb3JtYXQgYW5kIGxvY2FsZS5cclxuICogYGBgXHJcbiAqIC8vIEdldCBhIGxpc3Qgb2Ygd2Vla2RheSBuYW1lcyBpbiB0aGUgZGVmYXVsdCBsYW5ndWFnZSBhbmQgc2hvcnQgZm9ybWF0XHJcbiAqIGNvbnN0IHdlZWtkYXlzID0gdGhpcy5nZXRXZWVrZGF5TGlzdCgpO1xyXG4gKiBgYGBcclxuKi9cclxuICBwcml2YXRlIGdldFdlZWtkYXlMaXN0KGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSwgZm9ybWF0OiBcInNob3J0XCIgfCBcImxvbmdcIiA9IFwic2hvcnRcIik6IHN0cmluZ1tdIHtcclxuICAgICAgY29uc3Qgd2Vla2RheXMgPSBbLi4uQXJyYXkoNykua2V5cygpXTtcclxuICAgICAgY29uc3QgbW9uZGF5SW5kZXggPSB3ZWVrZGF5cy5pbmRleE9mKDApO1xyXG4gICAgICB3ZWVrZGF5cy5zcGxpY2UobW9uZGF5SW5kZXgsIDEpOyBcclxuICAgICAgd2Vla2RheXMucHVzaCgwKTsgXHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZXMsIHsgd2Vla2RheTogZm9ybWF0IH0pOyAgICBcclxuICAgICAgY29uc3QgZ2V0V2Vla2RheU5hbWUgPSAod2Vla2RheUluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdChuZXcgRGF0ZSgyMDIzLCA5LCB3ZWVrZGF5SW5kZXggKyAxKSk7IFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gd2Vla2RheXMubWFwKGdldFdlZWtkYXlOYW1lKTtcclxuICB9XHJcbiAgICBcclxuICAgIFxyXG4vKipcclxuICogVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjYWxlbmRhciBjb21wb25lbnQuIFdoZW4gY2FsbGVkLCB0aGlzIG1ldGhvZCBjaGFuZ2VzIHRoZSAnaXNDYWxlbmRhck9wZW4nIGZsYWdcclxuICogdG8gc2hvdyBvciBoaWRlIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIGBgYFxyXG4gKiAvLyBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNhbGVuZGFyXHJcbiAqIHRoaXMudG9nZ2xlQ2FsZW5kYXIoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSB0b2dnbGVDYWxlbmRhcigpIHtcclxuICAgIGlmKHRoaXMuaXNFZGl0aW5nKXtcclxuICAgICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSAhdGhpcy5pc0NhbGVuZGFyT3BlblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBTYXZlIHRoZSBlZGl0ZWQgZGF0ZSBpbnB1dCBieSB0aGUgdXNlciwgcHJvdmlkZWQgaXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGRhdGUgZm9ybWF0LlxyXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGVudGVyZWQgZGF0ZSBpcyBpbiBhIHZhbGlkIGZvcm1hdCwgZGlzYWJsZXMgdGhlIGVkaXRpbmcgbW9kZSwgYW5kIGFwcGxpZXNcclxuICogdGhlIGVkaXRlZCBkYXRlIHRvIHRoZSAnc2VsZWN0ZWREYXRlJy4gSXQgdGhlbiByZWZvcm1hdHMgdGhlIHNlbGVjdGVkIGRhdGUgYW5kIGNsb3NlcyB0aGUgY2FsZW5kYXIuXHJcbiAqIGBgYFxyXG4gKiAvLyBTYXZlIHRoZSBlZGl0ZWQgZGF0ZSBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZCBkYXRlXHJcbiAqIHRoaXMuc2F2ZUVkaXRlZERhdGUoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBzYXZlRWRpdGVkRGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmlzRGF0ZVZhbGlkKHRoaXMuZWRpdGVkRGF0ZSkpIHtcclxuICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTsgXHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZWRpdGVkRGF0ZS5zcGxpdCgnLycpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKCt5ZWFyLCArbW9udGggLSAxLCArZGF5KTtcclxuICAgICAgdGhpcy5mb3JtYXREYXRlKCk7IFxyXG4gICAgfSBcclxuICB9XHJcblxyXG4vKipcclxuICAqIEhhbmRsZSB1c2VyIGlucHV0IGluIHRoZSBlZGl0YWJsZSBpbnB1dCBmaWVsZCBmb3IgZGF0ZSBlZGl0aW5nLiBUaGlzIG1ldGhvZCBjYXB0dXJlcyB0aGUgaW5wdXQgdmFsdWVcclxuICAqIGFuZCBzdG9yZXMgaXQgaW4gdGhlICdlZGl0ZWREYXRlJyB2YXJpYWJsZS4gSWYgdGhlIGlucHV0IG1hdGNoZXMgdGhlIHZhbGlkIGRhdGUgZm9ybWF0LCBpdCB1cGRhdGVzXHJcbiAgKiAnc2VsZWN0ZWREYXRlTW9udGgnIGFuZCAnc2VsZWN0ZWREYXRlWWVhcicgYWNjb3JkaW5nbHkuXHJcbiAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnQgY29udGFpbmluZyB0aGUgdXNlcidzIGlucHV0LlxyXG4gICogYGBgXHJcbiAgKiAvLyBIYW5kbGUgdXNlciBpbnB1dCBpbiB0aGUgZWRpdGFibGUgaW5wdXQgZmllbGRcclxuICAqIHRoaXMub25EYXRlSW5wdXQoZXZlbnQpO1xyXG4gICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBvbkRhdGVJbnB1dChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBpbnB1dERhdGU6IHN0cmluZyA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIGlmICh0aGlzLmlzRGF0ZVZhbGlkKGlucHV0RGF0ZSkpIHtcclxuICAgICAgdGhpcy5lZGl0ZWREYXRlID0gaW5wdXREYXRlO1xyXG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gaW5wdXREYXRlLnNwbGl0KCcvJyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlTW9udGggPSArcGFyc2VkRGF0ZVsxXSAtIDE7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlWWVhciA9ICtwYXJzZWREYXRlWzJdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG1vbnRoIGRyb3Bkb3duIGluIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gb3BlbiBvciBjbG9zZSB0aGUgZHJvcGRvd24gZm9yIHNlbGVjdGluZyBtb250aHMuXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCB0cmlnZ2VyaW5nIHRoZSB0b2dnbGUgYWN0aW9uIChlLmcuLCBhIGNsaWNrIGV2ZW50KS5cclxuICogYGBgXHJcbiAqIC8vIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbW9udGggZHJvcGRvd25cclxuICogdGhpcy50b2dnbGVNb250aERyb3Bkb3duKGV2ZW50KTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSB0b2dnbGVNb250aERyb3Bkb3duKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5pc01vbnRoRHJvcGRvd25PcGVuID0gIXRoaXMuaXNNb250aERyb3Bkb3duT3BlbjtcclxuICB9XHJcblxyXG4vKipcclxuICAqIFRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgeWVhciBkcm9wZG93biBpbiB0aGUgY2FsZW5kYXIgaW50ZXJmYWNlLlxyXG4gICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBvcGVuIG9yIGNsb3NlIHRoZSBkcm9wZG93biBmb3Igc2VsZWN0aW5nIHllYXJzLlxyXG4gICogQHBhcmFtIGV2ZW50IC0gVGhlIGV2ZW50IHRyaWdnZXJpbmcgdGhlIHRvZ2dsZSBhY3Rpb24gKGUuZy4sIGEgY2xpY2sgZXZlbnQpLlxyXG4gICogYGBgXHJcbiAgKiAvLyBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHllYXIgZHJvcGRvd25cclxuICAqIHRoaXMudG9nZ2xlWWVhckRyb3Bkb3duKGV2ZW50KTtcclxuICAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgdG9nZ2xlWWVhckRyb3Bkb3duKGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5pc1llYXJEcm9wZG93bk9wZW4gPSAhdGhpcy5pc1llYXJEcm9wZG93bk9wZW47XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEhhbmRsZSB0aGUgY2hhbmdlIG9mIHRoZSBzZWxlY3RlZCBtb250aCBpbiB0aGUgY2FsZW5kYXIgaW50ZXJmYWNlLlxyXG4gKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBpbnB1dCB2YWx1ZSwgc2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZSB0byB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjaG9zZW4gbW9udGgsXHJcbiAqIGFuZCByZWNhbGN1bGF0ZXMgdGhlIGNhbGVuZGFyIGRpc3BsYXkgYWNjb3JkaW5nbHkuXHJcbiAqIGBgYFxyXG4gKiAvLyBIYW5kbGUgdGhlIGNoYW5nZSBvZiB0aGUgc2VsZWN0ZWQgbW9udGhcclxuICogdGhpcy5vbk1vbnRoQ2hhbmdlKCk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgb25Nb250aENoYW5nZSgpIHtcclxuICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZVllYXIsIHRoaXMuc2VsZWN0ZWREYXRlTW9udGgsIDEpO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVGaXJzdERheU9mQ2FsZW5kYXIoKTtcclxuICB9XHJcblxyXG4vKipcclxuICogSGFuZGxlIHRoZSBjaGFuZ2Ugb2YgdGhlIHNlbGVjdGVkIHllYXIgaW4gdGhlIGNhbGVuZGFyIGludGVyZmFjZS5cclxuICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgaW5wdXQgdmFsdWUsIHNldHMgdGhlIHNlbGVjdGVkIGRhdGUgdG8gdGhlIGZpcnN0IGRheSBvZiB0aGUgY2hvc2VuIHllYXIsXHJcbiAqIHJlZm9ybWF0cyB0aGUgc2VsZWN0ZWQgZGF0ZSwgYW5kIHJlY2FsY3VsYXRlcyB0aGUgY2FsZW5kYXIgZGlzcGxheS5cclxuICogYGBgXHJcbiAqIC8vIEhhbmRsZSB0aGUgY2hhbmdlIG9mIHRoZSBzZWxlY3RlZCB5ZWFyXHJcbiAqIHRoaXMub25ZZWFyQ2hhbmdlKCk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgb25ZZWFyQ2hhbmdlKCkge1xyXG4gICAgdGhpcy51cGRhdGVJbnB1dFZhbHVlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuc2VsZWN0ZWREYXRlWWVhciwgdGhpcy5zZWxlY3RlZERhdGVNb250aCwgMSk7XHJcbiAgICB0aGlzLmZvcm1hdERhdGUoKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlRmlyc3REYXlPZkNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIFNlbGVjdCBhIGRhdGUgaW4gdGhlIGNhbGVuZGFyIGludGVyZmFjZSBhbmQgcGVyZm9ybSBuZWNlc3NhcnkgdXBkYXRlcy5cclxuICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZSwgZm9ybWF0cyBpdCwgY2xvc2VzIHRoZSBjYWxlbmRhciwgYW5kIGVtaXRzIGEgZGF0ZUNoYW5nZWQgZXZlbnQuXHJcbiAqIEl0IGFsc28gdXBkYXRlcyB0aGUgc2VsZWN0ZWQgbW9udGggYW5kIHllYXIgZHJvcGRvd24gdmFsdWVzLlxyXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGJlIHNlbGVjdGVkIGluIHRoZSBjYWxlbmRhci5cclxuKi9cclxuICBzZWxlY3REYXRlKGRhdGU6IERhdGUpIHtcclxuICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XHJcbiAgdGhpcy5mb3JtYXREYXRlKCk7XHJcbiAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gIHRoaXMuZGF0ZUNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcbiAgdGhpcy5zZWxlY3RlZERhdGVNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XHJcbiAgdGhpcy5zZWxlY3RlZERhdGVZZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcblxyXG4vKipcclxuICogRm9ybWF0IHRoZSBzZWxlY3RlZCBkYXRlIGJhc2VkIG9uIHRoZSBjaG9zZW4gZGF0ZSBmb3JtYXQgYW5kIGxhbmd1YWdlLlxyXG4gKiBUaGlzIG1ldGhvZCB1c2VzIHRoZSBBbmd1bGFyIERhdGVQaXBlIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZSBhbmQgdXBkYXRlcyB0aGUgZm9ybWF0dGVkRGF0ZSB2YXJpYWJsZS5cclxuICogYGBgXHJcbiAqIC8vIEZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZVxyXG4gKiB0aGlzLmZvcm1hdERhdGUoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBmb3JtYXREYXRlKCkge1xyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5zZWxlY3RlZERhdGUsIHRoaXMuZGF0ZUZvcm1hdCkgfHwgJyc7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEZvcm1hdCB0aGUgc2VsZWN0ZWQgZGF0ZSBiYXNlZCBvbiB0aGUgY2hvc2VuIGRhdGUgZm9ybWF0LCBsYW5ndWFnZSwgYW5kIGxvY2FsZS5cclxuICogVGhpcyBtZXRob2QgdXNlcyB0aGUgQW5ndWxhciBEYXRlUGlwZSB0byBmb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlIGFuZCB1cGRhdGVzIHRoZSBmb3JtYXR0ZWQgZGF0ZSBhcyBhIHN0cmluZy5cclxuICogQHJldHVybnMgQSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcuXHJcbiAqIGBgYFxyXG4gKiAvLyBGb3JtYXQgdGhlIHNlbGVjdGVkIGRhdGUgd2l0aCBsYW5ndWFnZVxyXG4gKiBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFNlbGVjdGVkRGF0ZSgpO1xyXG4gKiBgYGBcclxuKi9cclxuICBwcml2YXRlIGZvcm1hdFNlbGVjdGVkRGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuc2VsZWN0ZWREYXRlLCB0aGlzLmRhdGVGb3JtYXQsIHRoaXMubGFuZykgfHwgJyc7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZSB0aGUgaW5wdXQgdmFsdWUgZGlzcGxheWVkIGluIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGlucHV0IHZhbHVlIHRvIGVpdGhlciB0aGUgZWRpdGVkIGRhdGUgb3IgdGhlIGZvcm1hdHRlZCBzZWxlY3RlZCBkYXRlLFxyXG4gKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdXNlciBpcyBpbiBlZGl0IG1vZGUgb3Igbm90LlxyXG4gKiBgYGBcclxuICogLy8gVXBkYXRlIHRoZSBpbnB1dCB2YWx1ZVxyXG4gKiB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSB1cGRhdGVJbnB1dFZhbHVlKCkge1xyXG4gICAgdGhpcy5mb3JtYXR0ZWREYXRlID0gdGhpcy5pc0VkaXRpbmcgPyB0aGlzLmVkaXRlZERhdGUgOiB0aGlzLmZvcm1hdFNlbGVjdGVkRGF0ZSgpO1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYW4gYXJyYXkgb2YgYXJyYXlzIHJlcHJlc2VudGluZyB0aGUgZGF5cyBvZiB0aGUgY3VycmVudCBtb250aC5cclxuICogRWFjaCBzdWItYXJyYXkgY29udGFpbnMgdGhlIGRheSBkYXRhIGZvciBhIHdlZWssIGFuZCBlYWNoIGRheSBkYXRhIG9iamVjdCBpbmNsdWRlcyB0aGUgZGF0ZSBhbmQgd2hldGhlciBpdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IG1vbnRoLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhcnJheXMgcmVwcmVzZW50aW5nIHRoZSBkYXlzIG9mIHRoZSBjdXJyZW50IG1vbnRoLlxyXG4gKiBgYGBcclxuICogLy8gR2V0IGFuIGFycmF5IG9mIGFycmF5cyByZXByZXNlbnRpbmcgdGhlIGRheXMgb2YgdGhlIGN1cnJlbnQgbW9udGhcclxuICogY29uc3QgY2FsZW5kYXIgPSB0aGlzLmNhbGVuZGFyRGF5cztcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBnZXQgY2FsZW5kYXJEYXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRmlyc3REYXlPZkNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgZGF0ZSBvZiB0aGUgcHJldmlvdXMgbW9udGggdG8gZGlzcGxheSBpbiBlbXB0eSBjZWxscyBvZiB0aGUgY3VycmVudCBtb250aC5cclxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGF0ZSBvZiB0aGUgcHJldmlvdXMgbW9udGggaWYgdGhlIHByb3ZpZGVkIGRhdGUgaXMgbm90IGluIHRoZSBjdXJyZW50IG1vbnRoLlxyXG4gKiBJZiB0aGUgcHJvdmlkZWQgZGF0ZSBpcyBpbiB0aGUgY3VycmVudCBtb250aCwgaXQgcmV0dXJucyB0aGUgZGF0ZSdzIGRheSBhcyBhIHN0cmluZy5cclxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBldmFsdWF0ZS5cclxuICogQHJldHVybnMgVGhlIGRhdGUgb2YgdGhlIHByZXZpb3VzIG1vbnRoIG9yIGEgZGF5IHN0cmluZy5cclxuICogYGBgXHJcbiAqIC8vIEdldCB0aGUgcHJldmlvdXMgbW9udGgncyBkYXRlIHRvIGRpc3BsYXkgaW4gZW1wdHkgY2VsbHNcclxuICogY29uc3QgcHJldmlvdXNNb250aERhdGUgPSB0aGlzLmdldFByZXZpb3VzTW9udGhEYXRlKG5ldyBEYXRlKDIwMjMsIDgsIDEpKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBnZXRQcmV2aW91c01vbnRoRGF0ZShkYXRlOiBEYXRlKTogYW55IHtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAoZGF0ZS5nZXRNb250aCgpID09PSBjdXJyZW50RGF0ZS5nZXRNb250aCgpICYmIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSkge1xyXG4gICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4vKipcclxuICogTmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzIG1vbnRoIGluIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIHNlbGVjdGVkRGF0ZSwgZm9ybWF0cyBpdCwgYW5kIHJlY2FsY3VsYXRlcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhci5cclxuICogYGBgXHJcbiAqIC8vIE5hdmlnYXRlIHRvIHRoZSBwcmV2aW91cyBtb250aFxyXG4gKiB0aGlzLmdldFByZXZpb3VzTW9udGgoKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBnZXRQcmV2aW91c01vbnRoKCkge1xyXG4gICAgY29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKSwgY3VycmVudE1vbnRoIC0gMSwgMSk7XHJcbiAgICB0aGlzLmZvcm1hdERhdGUoKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlRmlyc3REYXlPZkNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIE5hdmlnYXRlIHRvIHRoZSBuZXh0IG1vbnRoIGluIHRoZSBjYWxlbmRhciBpbnRlcmZhY2UuXHJcbiAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIHNlbGVjdGVkRGF0ZSwgZm9ybWF0cyBpdCwgYW5kIHJlY2FsY3VsYXRlcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhci5cclxuICogYGBgXHJcbiAqIC8vIE5hdmlnYXRlIHRvIHRoZSBuZXh0IG1vbnRoXHJcbiAqIHRoaXMuZ2V0TmV4dE1vbnRoKCk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgZ2V0TmV4dE1vbnRoKCkge1xyXG4gICAgY29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKSwgY3VycmVudE1vbnRoICsgMSwgMSk7XHJcbiAgICB0aGlzLmZvcm1hdERhdGUoKTtcclxuICAgIHRoaXMuY2FsY3VsYXRlRmlyc3REYXlPZkNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBnaXZlbiBtb250aCBvZiBhIHNwZWNpZmljIHllYXIuXHJcbiAqIEBwYXJhbSB5ZWFyIC0gVGhlIHllYXIgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGRheXMuXHJcbiAqIEBwYXJhbSBtb250aCAtIFRoZSBtb250aCAoMC1iYXNlZCBpbmRleCkgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGRheXMuXHJcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgc3BlY2lmaWVkIG1vbnRoIG9mIHRoZSBnaXZlbiB5ZWFyLlxyXG4qL1xyXG4gIHByaXZhdGUgZGF5c0luTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApLmdldERhdGUoKTtcclxuICB9XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBzdHJ1Y3R1cmUgb2YgZGF5cyBpbiBhIG1vbnRoIGZvciB0aGUgY2FsZW5kYXIgZGlzcGxheS5cclxuICogVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGEgbWF0cml4IG9mIGRheSBkYXRhIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBkYXlzIGluIHRoZSBjYWxlbmRhci5cclxuICogRWFjaCBkYXkgZGF0YSBvYmplY3QgY29udGFpbnMgdGhlIGRhdGUgYW5kIHdoZXRoZXIgaXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBtb250aC5cclxuICogQHJldHVybnMgQSBtYXRyaXggb2YgZGF5IGRhdGEgb2JqZWN0cyBmb3IgdGhlIGNhbGVuZGFyIGRpc3BsYXkuXHJcbiovXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVGaXJzdERheU9mQ2FsZW5kYXIoKSB7XHJcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcclxuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcclxuICAgIGNvbnN0IGZpcnN0V2Vla2RheSA9IGZpcnN0RGF5T2ZNb250aC5nZXREYXkoKTtcclxuICAgIGNvbnN0IHN0YXJ0RGF5ID0gZmlyc3RXZWVrZGF5ID09PSAwID8gLTUgOiAyIC0gZmlyc3RXZWVrZGF5O1xyXG4gICAgY29uc3QgY2FsZW5kYXJEYXlzID0gW107XHJcbiAgICBsZXQgY3VycmVudERheSA9IHN0YXJ0RGF5O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgY29uc3Qgd2VlayA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDc7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGRheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBjdXJyZW50RGF5KTtcclxuICAgICAgICBjb25zdCBkYXlEYXRhID0ge1xyXG4gICAgICAgICAgZGF0ZTogZGF5LFxyXG4gICAgICAgICAgaXNDdXJyZW50TW9udGg6IGN1cnJlbnREYXkgPj0gMSAmJiBjdXJyZW50RGF5IDw9IHRoaXMuZGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2Vlay5wdXNoKGRheURhdGEpO1xyXG4gICAgICAgIGN1cnJlbnREYXkrKztcclxuICAgICAgfVxyXG4gICAgICBjYWxlbmRhckRheXMucHVzaCh3ZWVrKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjYWxlbmRhckRheXM7XHJcbiAgfVxyXG4gIFxyXG4vKipcclxuICogQ2hlY2sgaWYgYSBnaXZlbiBkYXRlIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0ZSBpbiB0aGUgY2FsZW5kYXIuXHJcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gY2hlY2suXHJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvdmlkZWQgZGF0ZSBtYXRjaGVzIHRoZSBzZWxlY3RlZCBkYXRlLCBvdGhlcndpc2UgYGZhbHNlYC5cclxuICogYGBgXHJcbiAqIC8vIENoZWNrIGlmIGEgZGF0ZSBpcyBzZWxlY3RlZFxyXG4gKiBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc0RhdGVTZWxlY3RlZChzb21lRGF0ZSk7XHJcbiAqIGBgYFxyXG4qL1xyXG4gIHByaXZhdGUgaXNEYXRlU2VsZWN0ZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIGRhdGUudG9EYXRlU3RyaW5nKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLnRvRGF0ZVN0cmluZygpO1xyXG4gIH1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIGRhdGUgc3RyaW5nIGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZGF0ZSBmb3JtYXQuXHJcbiAqIEBwYXJhbSBpbnB1dERhdGUgLSBUaGUgZGF0ZSBzdHJpbmcgdG8gdmFsaWRhdGUuXHJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgZGF0ZSBzdHJpbmcgaXMgdmFsaWQsIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gKiBgYGBcclxuICogLy8gQ2hlY2sgaWYgYSBkYXRlIHN0cmluZyBpcyB2YWxpZFxyXG4gKiBjb25zdCBpc1ZhbGlkRGF0ZSA9IHRoaXMuaXNEYXRlVmFsaWQoJzA1LzI1LzIwMjMnKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBpc0RhdGVWYWxpZChpbnB1dERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZVJlZ0V4cC50ZXN0KGlucHV0RGF0ZSk7XHJcbiAgfVxyXG4gIFxyXG4vKipcclxuICogQ2hlY2sgaWYgYSBnaXZlbiBkYXRlIGlzIHRvZGF5J3MgZGF0ZS5cclxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVjay5cclxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwcm92aWRlZCBkYXRlIGlzIHRvZGF5J3MgZGF0ZSwgb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAqIGBgYFxyXG4gKiAvLyBDaGVjayBpZiBhIGRhdGUgaXMgdG9kYXkncyBkYXRlXHJcbiAqIGNvbnN0IGlzVG9kYXkgPSB0aGlzLmlzRGF0ZVRvZGF5KHNvbWVEYXRlKTtcclxuICogYGBgXHJcbiovXHJcbiAgcHJpdmF0ZSBpc0RhdGVUb2RheShkYXRlOiBEYXRlKSB7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICByZXR1cm4gZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gdG9kYXkudG9EYXRlU3RyaW5nKCk7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItY29udGFpbmVyXCJcclxuW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuPlxyXG5cclxuICA8IS0tIElucHV0LCBzYXZlICYgZWRpdCBidXR0b25zIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFpc0VkaXRpbmdcIj5cclxuXHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcclxuICAgICAgICBbdmFsdWVdPVwiZm9ybWF0dGVkRGF0ZVwiXHJcbiAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0VkaXRpbmdcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gRWRpdCAtLT5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtbyBlZGl0LWJ1dHRvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIChjbGljayk9XCJ0b2dnbGVFZGl0KClcIj48L2k+IFxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0aW5nXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJlZGl0ZWREYXRlXCJcclxuICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJvcmRlci0zXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmxvcHB5LW8gZWRpdC1idXR0b25cIiAoY2xpY2spPVwic2F2ZUVkaXRlZERhdGUoKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICA8L2Rpdj4gICAgIFxyXG4gICAgPC9kaXY+XHJcblxyXG48IS0tIENhbGVuZGFyKERyb3Bkb3ducywgZGF0ZXMpIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0NhbGVuZGFyT3BlblwiIGNsYXNzPVwiY2FsZW5kYXJcIiAjY2FsZW5kYXJDb250YWluZXIgXHJcbiAgW3N0eWxlLnRvcF09XCJ0b3BPZmZzZXRcIlxyXG4gIFtzdHlsZS5sZWZ0XT1cImxlZnRPZmZzZXRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGhCdXR0b25Db250YWluZXJcIj5cclxuICAgICAgICAgICAgPCEtLSBNb250aCBkcm9wZG93biAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTW9udGhEcm9wZG93bk9wZW47IGVsc2UgbW9udGhMYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDxtZWZkZXYtc2VsZWN0ICAgIFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibW9udGhEcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVNb250aFwiIFxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9udGhDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgW1BsYWNlSG9sZGVyXT1cIidtb250aCdcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtZWZkZXYtb3B0aW9uIFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoczsgbGV0IGkgPSBpbmRleFwiIFxyXG4gICAgICAgICAgICAgICAgW1ZhbHVlXT1cImlcIlxyXG4gICAgICAgICAgICAgICAgW0xhYmVsXSA9IFwibW9udGhcIiBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPnt7IG1vbnRoIH19PC9tZWZkZXYtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWVmZGV2LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbW9udGhMYWJlbD5cclxuICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwidG9nZ2xlTW9udGhEcm9wZG93bigkZXZlbnQpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBZZWFyIGRyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNZZWFyRHJvcGRvd25PcGVuOyBlbHNlIHllYXJMYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDxtZWZkZXYtc2VsZWN0IFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwieWVhckRyb3Bkb3duXCIgXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVZZWFyXCIgXHJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25ZZWFyQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgIFtQbGFjZUhvbGRlcl09XCIneWVhcidcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG1lZmRldi1vcHRpb24gXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJzXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtMYWJlbF0gPSBcInllYXJcIiBcclxuICAgICAgICAgICAgICAgICAgW1ZhbHVlXT1cInllYXJcIiBcclxuICAgICAgICAgICAgICAgICAgPnt7eWVhcn19PC9tZWZkZXYtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWVmZGV2LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjeWVhckxhYmVsPlxyXG4gICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJ0b2dnbGVZZWFyRHJvcGRvd24oJGV2ZW50KVwiPnt7IHNlbGVjdGVkRGF0ZVllYXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgPCEtLSBDYWxlbmRhciBleGl0IGJ1dHRvbiAtLT5cclxuICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzIHRvZ2dsZUNhbGVuZGFyQnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5XCI+XHJcbiAgICAgIDx0YWJsZT5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGggY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdGb3I9XCJsZXQgd2Vla2RheSBvZiB3ZWVrZGF5c1wiPnt7IHdlZWtkYXkgfX08L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB3ZWVrIG9mIGNhbGVuZGFyRGF5c1wiPlxyXG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXlEYXRhIG9mIHdlZWtcIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF0ZShkYXlEYXRhLmRhdGUpXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3RlZCc6IGlzRGF0ZVNlbGVjdGVkKGRheURhdGEuZGF0ZSksICdwcmV2LW1vbnRoJzogIWRheURhdGEuaXNDdXJyZW50TW9udGggfVwiPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRlXCIgXHJcbiAgICAgICAgICAgICAgW2NsYXNzLnByZXYtbW9udGhdPVwiIWRheURhdGEuaXNDdXJyZW50TW9udGhcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBkYXlEYXRhLmRhdGUuZ2V0RGF0ZSgpIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
@@ -5,6 +5,8 @@ export * from './lib/markup-kit/utils/datepicker/index';
5
5
  export * from './lib/markup-kit/card/index';
6
6
  export * from './lib/markup-kit/modals/index';
7
7
  export * from './lib/markup-kit/page-layouts/index';
8
+ export * from './lib/markup-kit/executors';
9
+ export * from './lib/markup-kit/slider/index';
8
10
  // pg modules
9
11
  export * from './lib/pg-components/card/index';
10
12
  export * from './lib/pg-components/progress/index';
@@ -12,4 +14,4 @@ export * from './lib/pg-components/select/index';
12
14
  export * from './lib/pg-components/spec-flow-test/index';
13
15
  export * from './lib/pg-components/switch/index';
14
16
  export * from './lib/pg-components/tabs/index';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3VpLWtpdC1saWIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUdwRCxhQUFhO0FBQ2IsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9tYXJrdXAta2l0L2NvbGxhcHNlL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFya3VwLWtpdC91dGlscy9maWx0ZXJlZC1maWVsZC9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hcmt1cC1raXQvdXRpbHMvaGVscC1ibG9jay9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hcmt1cC1raXQvdXRpbHMvZGF0ZXBpY2tlci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hcmt1cC1raXQvY2FyZC9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hcmt1cC1raXQvbW9kYWxzL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFya3VwLWtpdC9wYWdlLWxheW91dHMvaW5kZXgnO1xyXG5cclxuXHJcbi8vIHBnIG1vZHVsZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGctY29tcG9uZW50cy9jYXJkL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGctY29tcG9uZW50cy9wcm9ncmVzcy9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BnLWNvbXBvbmVudHMvc2VsZWN0L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGctY29tcG9uZW50cy9zcGVjLWZsb3ctdGVzdC9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BnLWNvbXBvbmVudHMvc3dpdGNoL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGctY29tcG9uZW50cy90YWJzL2luZGV4JztcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3VpLWtpdC1saWIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsYUFBYTtBQUNiLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvbWFya3VwLWtpdC9jb2xsYXBzZS9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hcmt1cC1raXQvdXRpbHMvZmlsdGVyZWQtZmllbGQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXJrdXAta2l0L3V0aWxzL2hlbHAtYmxvY2svaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXJrdXAta2l0L3V0aWxzL2RhdGVwaWNrZXIvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXJrdXAta2l0L2NhcmQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXJrdXAta2l0L21vZGFscy9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hcmt1cC1raXQvcGFnZS1sYXlvdXRzL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFya3VwLWtpdC9leGVjdXRvcnMnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFya3VwLWtpdC9zbGlkZXIvaW5kZXgnO1xyXG5cclxuLy8gcGcgbW9kdWxlc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wZy1jb21wb25lbnRzL2NhcmQvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wZy1jb21wb25lbnRzL3Byb2dyZXNzL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGctY29tcG9uZW50cy9zZWxlY3QvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wZy1jb21wb25lbnRzL3NwZWMtZmxvdy10ZXN0L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGctY29tcG9uZW50cy9zd2l0Y2gvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wZy1jb21wb25lbnRzL3RhYnMvaW5kZXgnO1xyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuIl19