desy-angular 12.1.0 → 13.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 (71) hide show
  1. package/esm2022/lib/desy-angular.module.mjs +10 -9
  2. package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +1 -1
  3. package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +15 -15
  4. package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +3 -3
  5. package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +190 -0
  6. package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +34 -0
  7. package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +10 -8
  8. package/esm2022/lib/desy-forms/desy-forms.module.mjs +40 -24
  9. package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +3 -3
  10. package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +4 -2
  11. package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +3 -3
  12. package/esm2022/lib/desy-nav/components/header/header.component.mjs +3 -3
  13. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +3 -3
  14. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +3 -3
  15. package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +3 -3
  16. package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +16 -0
  17. package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +6 -2
  18. package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +5 -3
  19. package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +3 -3
  20. package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +3 -3
  21. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +3 -3
  22. package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +3 -3
  23. package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +3 -3
  24. package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +5 -1
  25. package/esm2022/lib/desy-nav/desy-nav.module.mjs +6 -5
  26. package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +2 -1
  27. package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +18 -19
  28. package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +2 -2
  29. package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +16 -8
  30. package/esm2022/lib/desy-tables/components/table/table.component.mjs +24 -4
  31. package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +9 -10
  32. package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +1 -5
  33. package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +11 -3
  34. package/esm2022/lib/desy-views/desy-views.module.mjs +27 -32
  35. package/esm2022/lib/shared/components/index.mjs +4 -3
  36. package/esm2022/lib/{desy-views → shared}/components/spinner/spinner.component.mjs +2 -2
  37. package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +21 -4
  38. package/esm2022/lib/shared/sharedExternal.module.mjs +24 -0
  39. package/esm2022/public-api.mjs +5 -2
  40. package/fesm2022/desy-angular.mjs +1128 -819
  41. package/fesm2022/desy-angular.mjs.map +1 -1
  42. package/lib/desy-angular.module.d.ts +2 -1
  43. package/lib/desy-buttons/desy-buttons.module.d.ts +3 -3
  44. package/lib/desy-forms/components/datepicker/datepicker.component.d.ts +31 -0
  45. package/lib/desy-forms/components/datepicker/datepicker.pipe.d.ts +7 -0
  46. package/lib/desy-forms/components/tree/tree.component.d.ts +5 -4
  47. package/lib/desy-forms/desy-forms.module.d.ts +10 -6
  48. package/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.d.ts +2 -1
  49. package/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.d.ts +1 -1
  50. package/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.d.ts +1 -1
  51. package/lib/desy-nav/components/header-mini/header-mini.component.d.ts +1 -1
  52. package/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.d.ts +8 -0
  53. package/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.d.ts +3 -1
  54. package/lib/desy-nav/components/links-list/links-list.component.d.ts +2 -1
  55. package/lib/desy-nav/desy-nav.module.d.ts +29 -28
  56. package/lib/desy-nav/interfaces/footer-logo.d.ts +1 -0
  57. package/lib/desy-pagination/components/pagination/pagination.component.d.ts +3 -3
  58. package/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.d.ts +3 -3
  59. package/lib/desy-pagination/desy-pagination.module.d.ts +3 -1
  60. package/lib/desy-tables/components/table/table.component.d.ts +3 -0
  61. package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +1 -1
  62. package/lib/desy-views/components/collapsible/collapsible.component.d.ts +5 -1
  63. package/lib/desy-views/desy-views.module.d.ts +30 -31
  64. package/lib/shared/components/index.d.ts +3 -2
  65. package/lib/{desy-views → shared}/components/spinner/spinner.component.d.ts +1 -1
  66. package/lib/shared/directives/custom-inner-content.directive.d.ts +3 -2
  67. package/lib/shared/sharedExternal.module.d.ts +8 -0
  68. package/package.json +2 -2
  69. package/public-api.d.ts +4 -1
  70. package/esm2022/lib/desy-pagination/interfaces/index.mjs +0 -2
  71. package/lib/desy-pagination/interfaces/index.d.ts +0 -1
@@ -0,0 +1,190 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Component, ContentChildren, ElementRef, forwardRef, Input, ViewChild } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
5
+ import { ErrorMessageComponent } from '../error-message/error-message.component';
6
+ import { FormFieldComponent } from '../form-field/form-field.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "../../../shared/directives/accessibility-directive";
10
+ import * as i3 from "../../../desy-commons/components/content/content.component";
11
+ import * as i4 from "../../../desy-buttons/components/button/button.component";
12
+ import * as i5 from "../../../desy-buttons/components/dropdown/dropdown.component";
13
+ export class DatepickerComponent extends FormFieldComponent {
14
+ constructor() {
15
+ super();
16
+ this.standalone = false;
17
+ }
18
+ ngAfterViewInit() {
19
+ const inputElement = this.calendar.nativeElement.getElementsByTagName('input')[0];
20
+ if (inputElement && !this.standalone) {
21
+ const dropdownId = inputElement.getAttribute('id');
22
+ const datepickerDropdown = inputElement.parentNode.querySelector('desy-dropdown button');
23
+ let isOpen = false;
24
+ const focusCalendar = () => {
25
+ const inputInitialValue = inputElement.value;
26
+ requestAnimationFrame(() => {
27
+ const datepickerSelect = this.calendar.nativeElement.querySelector(':is(select)');
28
+ const datepickerCalendar = this.calendar.nativeElement.querySelector(':is(calendar-date, calendar-multi, calendar-range)');
29
+ const datepickerInitialValue = datepickerCalendar?.value;
30
+ if (this.value && datepickerCalendar) {
31
+ console.log(datepickerCalendar);
32
+ datepickerCalendar.value = this.value;
33
+ inputElement.value = this.value;
34
+ datepickerCalendar.focus();
35
+ }
36
+ else {
37
+ this.value = datepickerInitialValue;
38
+ inputElement.value = this.value;
39
+ this.onChange(this.value);
40
+ }
41
+ if (datepickerSelect) {
42
+ datepickerSelect.addEventListener('change', function () {
43
+ const selectedValue = this.value;
44
+ datepickerCalendar.min = selectedValue + "-01-01";
45
+ datepickerCalendar.max = selectedValue + "-31-12";
46
+ datepickerCalendar.focusedDate = datepickerCalendar.min;
47
+ });
48
+ datepickerSelect.focus();
49
+ }
50
+ const datepickerCancel = this.calendar.nativeElement.querySelector('#' + dropdownId + '-cancel');
51
+ const datepickerSubmit = this.calendar.nativeElement.querySelector('#' + dropdownId + '-submit');
52
+ if (datepickerCancel) {
53
+ datepickerCancel.onclick = () => {
54
+ inputElement.value = inputInitialValue;
55
+ datepickerCalendar.tentative = "";
56
+ datepickerCalendar.value = datepickerInitialValue;
57
+ closeDropdown();
58
+ };
59
+ }
60
+ if (datepickerSubmit) {
61
+ datepickerSubmit.onclick = () => {
62
+ this.value = datepickerCalendar?.value;
63
+ inputElement.value = this.value;
64
+ this.onChange(this.value);
65
+ closeDropdown();
66
+ };
67
+ }
68
+ });
69
+ };
70
+ const closeDropdown = () => {
71
+ setTimeout(() => {
72
+ isOpen = false;
73
+ inputElement.focus();
74
+ }, 300);
75
+ };
76
+ const observer = new MutationObserver((mutations) => {
77
+ mutations.forEach((mutation) => {
78
+ if (mutation.type === 'attributes' && mutation.attributeName === 'aria-expanded') {
79
+ const currentExpandedValue = mutation.target.getAttribute('aria-expanded');
80
+ if (currentExpandedValue !== isOpen.toString()) {
81
+ const datepickerTimeout = setTimeout(focusCalendar, 0);
82
+ isOpen = currentExpandedValue === 'true';
83
+ if (!isOpen) {
84
+ clearTimeout(datepickerTimeout);
85
+ closeDropdown();
86
+ }
87
+ }
88
+ }
89
+ });
90
+ });
91
+ observer.observe(datepickerDropdown, { attributes: true, attributeFilter: ['aria-expanded'] });
92
+ }
93
+ else {
94
+ const datepickerSelect = this.calendar.nativeElement.querySelector(':is(select)');
95
+ const datepickerCalendar = this.calendar.nativeElement.querySelector(':is(calendar-date, calendar-multi, calendar-range)');
96
+ if (datepickerSelect) {
97
+ datepickerSelect.addEventListener('change', function () {
98
+ const selectedValue = this.value;
99
+ datepickerCalendar.min = selectedValue + "-01-01";
100
+ datepickerCalendar.max = selectedValue + "-31-12";
101
+ datepickerCalendar.focusedDate = datepickerCalendar.min;
102
+ });
103
+ }
104
+ }
105
+ }
106
+ onInput(event) {
107
+ this.value = event.target.value;
108
+ this.onChange(this.value);
109
+ }
110
+ ngDoCheck() {
111
+ if (this.attributes) {
112
+ this.setAttributes();
113
+ }
114
+ }
115
+ setAttributes() {
116
+ const input = this.calendar.nativeElement.getElementsByTagName('input')[0];
117
+ const attr = this.attributes;
118
+ Object.keys(attr).forEach(key => {
119
+ input?.setAttribute(key, attr[key]);
120
+ });
121
+ }
122
+ writeValue(value) {
123
+ if (value) {
124
+ this.value = value || '';
125
+ }
126
+ else {
127
+ this.value = '';
128
+ }
129
+ this.onChange(this.value);
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerComponent, selector: "desy-datepicker", inputs: { containerClasses: "containerClasses", standalone: "standalone", formGroupClasses: "formGroupClasses", id: "id", name: "name", type: "type", inputmode: "inputmode", describedBy: "describedBy", errorId: "errorId", classes: "classes", autocomplete: "autocomplete", pattern: "pattern", placeholder: "placeholder", attributes: "attributes", dropdownClasses: "dropdownClasses" }, providers: [
133
+ {
134
+ provide: NG_VALUE_ACCESSOR,
135
+ useExisting: forwardRef(() => DatepickerComponent),
136
+ multi: true
137
+ }
138
+ ], queries: [{ propertyName: "errorMessage", predicate: ErrorMessageComponent }], viewQueries: [{ propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div #calendar\n class=\"c-datepicker\"\n [ngClass]=\"containerClasses\"\n [desyAppAccessibility]=\"this\">\n <ng-container *ngIf=\"standalone\">\n <ng-container *ngTemplateOutlet=\"calendarContent\"></ng-container>\n </ng-container>\n <div *ngIf=\"!standalone\"\n class=\"c-form-group\"\n [ngClass]=\"formGroupClasses\">\n <ng-content select=\"desy-label\"></ng-content>\n <ng-content select=\"desy-hint\"></ng-content> \n <ng-content select=\"desy-error-message\"></ng-content>\n\n <div class=\"relative \">\n <input class=\"c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base pr-16 w-full\"\n [ngClass]=\"{'border-alert-base ring-2 ring-alert-base': errorMessage}\"\n [attr.id]=\"id\"\n [attr.name]=\"name\"\n [type]=\"type || 'text'\"\n [attr.value]=\"value\"\n [attr.aria-describedby]=\"describedBy || (errorMessage || errorId ? errorId : null)\"\n [attr.aria-errormessage]=\"errorMessage || errorId ? errorId : null\"\n [attr.aria-invalid]=\"errorMessage || errorId ? 'true' : null\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [attr.inputmode]=\"inputmode\"\n (input)=\"onInput($event)\"\n [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\" />\n\n\n <div class=\"absolute top-0 right-0\">\n <desy-dropdown [classes]=\"dropdownClasses ? dropdownClasses : 'c-dropdown--transparent'\"\n [disabled]=\"disabled\"\n (blur)=\"onBlur($event)\"\n [id]=\"id+'-dropdown'\">\n <span class=\"sr-only\">Seleccionar fecha con una tabla de calendario</span><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 14 14\"\n width=\"1.375em\"\n height=\"1.375em\"\n aria-hidden=\"true\">\n <g>\n <path fill=\"currentColor\"\n fill-rule=\"evenodd\"\n d=\"M4.5 1.5c0 -0.552285 -0.44772 -1 -1 -1s-1 0.447715 -1 1v1H2C1.17157 2.5 0.5 3.17157 0.5 4v8c0 0.8284 0.67157 1.5 1.5 1.5h10c0.8284 0 1.5 -0.6716 1.5 -1.5V4c0 -0.82843 -0.6716 -1.5 -1.5 -1.5h-0.5v-1c0 -0.552285 -0.4477 -1 -1 -1 -0.55229 0 -1 0.447715 -1 1v1h-5v-1Zm-1 5.75c0.55228 0 1 -0.44772 1 -1s-0.44772 -1 -1 -1 -1 0.44772 -1 1 0.44772 1 1 1Zm3.5 0c0.55228 0 1 -0.44772 1 -1s-0.44772 -1 -1 -1 -1 0.44772 -1 1 0.44772 1 1 1Zm-2.5 3c0 0.5523 -0.44772 1 -1 1s-1 -0.4477 -1 -1c0 -0.55229 0.44772 -1 1 -1s1 0.44771 1 1Zm2.5 1c0.55228 0 1 -0.4477 1 -1 0 -0.55229 -0.44772 -1 -1 -1s-1 0.44771 -1 1c0 0.5523 0.44772 1 1 1Zm4.5 -5c0 0.55228 -0.4477 1 -1 1 -0.55229 0 -1 -0.44772 -1 -1s0.44771 -1 1 -1c0.5523 0 1 0.44772 1 1Z\"\n clip-rule=\"evenodd\"\n stroke-width=\"1\"></path>\n </g>\n </svg>\n <desy-content>\n <ng-container *ngTemplateOutlet=\"calendarContent\"></ng-container>\n <ul class=\"flex flex-wrap justify-between gap-sm p-sm\">\n <li>\n <desy-button [id]=\"id + '-submit'\"\n classes=\"c-button--primary c-button--sm\">\n Aceptar\n </desy-button>\n </li>\n <li>\n <desy-button [id]=\"id + '-cancel'\"\n classes=\"c-button--sm\">\n Cancelar\n </desy-button>\n </li>\n </ul>\n </desy-content>\n </desy-dropdown>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #calendarContent>\n <div class=\"p-sm overflow-x-auto\">\n <ng-content></ng-content>\n </div>\n</ng-template>", 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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "component", type: i3.ContentComponent, selector: "desy-content", inputs: ["classes"] }, { kind: "component", type: i4.ButtonComponent, selector: "desy-button", inputs: ["id", "classes", "html", "text", "element", "name", "type", "value", "disabled", "href", "target", "preventDoubleClick", "fragment", "routerLink", "routerLinkActiveClasses"], outputs: ["clickEvent"] }, { kind: "component", type: i5.DropdownComponent, selector: "desy-dropdown", inputs: ["id", "disabled", "hiddenText", "classesContainer", "classesTooltip", "caller", "classes"], outputs: ["clickEvent"] }] }); }
139
+ }
140
+ __decorate([
141
+ DesyContentChild(),
142
+ __metadata("design:type", ErrorMessageComponent)
143
+ ], DatepickerComponent.prototype, "errorMessage", void 0);
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerComponent, decorators: [{
145
+ type: Component,
146
+ args: [{ selector: 'desy-datepicker', providers: [
147
+ {
148
+ provide: NG_VALUE_ACCESSOR,
149
+ useExisting: forwardRef(() => DatepickerComponent),
150
+ multi: true
151
+ }
152
+ ], template: "<div #calendar\n class=\"c-datepicker\"\n [ngClass]=\"containerClasses\"\n [desyAppAccessibility]=\"this\">\n <ng-container *ngIf=\"standalone\">\n <ng-container *ngTemplateOutlet=\"calendarContent\"></ng-container>\n </ng-container>\n <div *ngIf=\"!standalone\"\n class=\"c-form-group\"\n [ngClass]=\"formGroupClasses\">\n <ng-content select=\"desy-label\"></ng-content>\n <ng-content select=\"desy-hint\"></ng-content> \n <ng-content select=\"desy-error-message\"></ng-content>\n\n <div class=\"relative \">\n <input class=\"c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base pr-16 w-full\"\n [ngClass]=\"{'border-alert-base ring-2 ring-alert-base': errorMessage}\"\n [attr.id]=\"id\"\n [attr.name]=\"name\"\n [type]=\"type || 'text'\"\n [attr.value]=\"value\"\n [attr.aria-describedby]=\"describedBy || (errorMessage || errorId ? errorId : null)\"\n [attr.aria-errormessage]=\"errorMessage || errorId ? errorId : null\"\n [attr.aria-invalid]=\"errorMessage || errorId ? 'true' : null\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [attr.inputmode]=\"inputmode\"\n (input)=\"onInput($event)\"\n [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\" />\n\n\n <div class=\"absolute top-0 right-0\">\n <desy-dropdown [classes]=\"dropdownClasses ? dropdownClasses : 'c-dropdown--transparent'\"\n [disabled]=\"disabled\"\n (blur)=\"onBlur($event)\"\n [id]=\"id+'-dropdown'\">\n <span class=\"sr-only\">Seleccionar fecha con una tabla de calendario</span><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 14 14\"\n width=\"1.375em\"\n height=\"1.375em\"\n aria-hidden=\"true\">\n <g>\n <path fill=\"currentColor\"\n fill-rule=\"evenodd\"\n d=\"M4.5 1.5c0 -0.552285 -0.44772 -1 -1 -1s-1 0.447715 -1 1v1H2C1.17157 2.5 0.5 3.17157 0.5 4v8c0 0.8284 0.67157 1.5 1.5 1.5h10c0.8284 0 1.5 -0.6716 1.5 -1.5V4c0 -0.82843 -0.6716 -1.5 -1.5 -1.5h-0.5v-1c0 -0.552285 -0.4477 -1 -1 -1 -0.55229 0 -1 0.447715 -1 1v1h-5v-1Zm-1 5.75c0.55228 0 1 -0.44772 1 -1s-0.44772 -1 -1 -1 -1 0.44772 -1 1 0.44772 1 1 1Zm3.5 0c0.55228 0 1 -0.44772 1 -1s-0.44772 -1 -1 -1 -1 0.44772 -1 1 0.44772 1 1 1Zm-2.5 3c0 0.5523 -0.44772 1 -1 1s-1 -0.4477 -1 -1c0 -0.55229 0.44772 -1 1 -1s1 0.44771 1 1Zm2.5 1c0.55228 0 1 -0.4477 1 -1 0 -0.55229 -0.44772 -1 -1 -1s-1 0.44771 -1 1c0 0.5523 0.44772 1 1 1Zm4.5 -5c0 0.55228 -0.4477 1 -1 1 -0.55229 0 -1 -0.44772 -1 -1s0.44771 -1 1 -1c0.5523 0 1 0.44772 1 1Z\"\n clip-rule=\"evenodd\"\n stroke-width=\"1\"></path>\n </g>\n </svg>\n <desy-content>\n <ng-container *ngTemplateOutlet=\"calendarContent\"></ng-container>\n <ul class=\"flex flex-wrap justify-between gap-sm p-sm\">\n <li>\n <desy-button [id]=\"id + '-submit'\"\n classes=\"c-button--primary c-button--sm\">\n Aceptar\n </desy-button>\n </li>\n <li>\n <desy-button [id]=\"id + '-cancel'\"\n classes=\"c-button--sm\">\n Cancelar\n </desy-button>\n </li>\n </ul>\n </desy-content>\n </desy-dropdown>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #calendarContent>\n <div class=\"p-sm overflow-x-auto\">\n <ng-content></ng-content>\n </div>\n</ng-template>" }]
153
+ }], ctorParameters: function () { return []; }, propDecorators: { containerClasses: [{
154
+ type: Input
155
+ }], standalone: [{
156
+ type: Input
157
+ }], formGroupClasses: [{
158
+ type: Input
159
+ }], id: [{
160
+ type: Input
161
+ }], name: [{
162
+ type: Input
163
+ }], type: [{
164
+ type: Input
165
+ }], inputmode: [{
166
+ type: Input
167
+ }], describedBy: [{
168
+ type: Input
169
+ }], errorId: [{
170
+ type: Input
171
+ }], classes: [{
172
+ type: Input
173
+ }], autocomplete: [{
174
+ type: Input
175
+ }], pattern: [{
176
+ type: Input
177
+ }], placeholder: [{
178
+ type: Input
179
+ }], attributes: [{
180
+ type: Input
181
+ }], dropdownClasses: [{
182
+ type: Input
183
+ }], calendar: [{
184
+ type: ViewChild,
185
+ args: ['calendar', { static: true }]
186
+ }], errorMessage: [{
187
+ type: ContentChildren,
188
+ args: [ErrorMessageComponent]
189
+ }] } });
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktZm9ybXMvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMzRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQWF4RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsa0JBQXVCO0lBdUI5RDtRQUFnQixLQUFLLEVBQUUsQ0FBQTtRQXBCZCxlQUFVLEdBQVksS0FBSyxDQUFDO0lBb0JiLENBQUM7SUFFekIsZUFBZTtRQUNiLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFD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VTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVtQyxRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR0MsWUFBWTtzQkFBbkQsZUFBZTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGVzeUNvbnRlbnRDaGlsZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vZXJyb3ItbWVzc2FnZS9lcnJvci1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGVzeS1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVwaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIEZvcm1GaWVsZENvbXBvbmVudDxhbnk+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB7XG5cbiAgQElucHV0KCkgY29udGFpbmVyQ2xhc3Nlczogc3RyaW5nO1xuICBASW5wdXQoKSBzdGFuZGFsb25lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1Hcm91cENsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB0eXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlucHV0bW9kZTogc3RyaW5nO1xuICBASW5wdXQoKSBkZXNjcmliZWRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBlcnJvcklkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhdHRlcm46IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgYXR0cmlidXRlczogc3RyaW5nO1xuICBASW5wdXQoKSBkcm9wZG93bkNsYXNzZXM6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdjYWxlbmRhcicsIHsgc3RhdGljOiB0cnVlIH0pIGNhbGVuZGFyOiBFbGVtZW50UmVmO1xuICBcbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKEVycm9yTWVzc2FnZUNvbXBvbmVudCkgZXJyb3JNZXNzYWdlOiBFcnJvck1lc3NhZ2VDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCkgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07XG4gICAgaWYgKGlucHV0RWxlbWVudCAmJiAhdGhpcy5zdGFuZGFsb25lKSB7XG4gICAgICBjb25zdCBkcm9wZG93bklkID0gaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgIGNvbnN0IGRhdGVwaWNrZXJEcm9wZG93biA9IGlucHV0RWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoJ2Rlc3ktZHJvcGRvd24gYnV0dG9uJyk7XG4gICAgICBsZXQgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGZvY3VzQ2FsZW5kYXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0SW5pdGlhbFZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGVwaWNrZXJTZWxlY3QgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignOmlzKHNlbGVjdCknKTtcbiAgICAgICAgICBjb25zdCBkYXRlcGlja2VyQ2FsZW5kYXIgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignOmlzKGNhbGVuZGFyLWRhdGUsIGNhbGVuZGFyLW11bHRpLCBjYWxlbmRhci1yYW5nZSknKTtcbiAgICAgICAgICBjb25zdCBkYXRlcGlja2VySW5pdGlhbFZhbHVlID0gZGF0ZXBpY2tlckNhbGVuZGFyPy52YWx1ZTtcbiAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiBkYXRlcGlja2VyQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGVwaWNrZXJDYWxlbmRhcilcbiAgICAgICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhci52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgLy8gZGF0ZXBpY2tlckNhbGVuZGFyLnZhbHVlID0gdGhpcy52YWx1ZS5zcGxpdCgnLycpLnJldmVyc2UoKS5qb2luKCctJyk7XG4gICAgICAgICAgICBkYXRlcGlja2VyQ2FsZW5kYXIuZm9jdXMoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZXBpY2tlckluaXRpYWxWYWx1ZVxuICAgICAgICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGlmIChkYXRlcGlja2VyQ2FsZW5kYXIpIHtcbiAgICAgICAgICAvLyAgIGRhdGVwaWNrZXJDYWxlbmRhci5mb2N1cygpO1xuICAgICAgICAgIC8vICAgZGF0ZXBpY2tlckNhbGVuZGFyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgLy8gaW5wdXRFbGVtZW50LnZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgaWYgKGRhdGVwaWNrZXJTZWxlY3QpIHtcbiAgICAgICAgICAgIGRhdGVwaWNrZXJTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgZGF0ZXBpY2tlckNhbGVuZGFyLm1pbiA9IHNlbGVjdGVkVmFsdWUgKyBcIi0wMS0wMVwiO1xuICAgICAgICAgICAgICBkYXRlcGlja2VyQ2FsZW5kYXIubWF4ID0gc2VsZWN0ZWRWYWx1ZSArIFwiLTMxLTEyXCI7XG4gICAgICAgICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhci5mb2N1c2VkRGF0ZSA9IGRhdGVwaWNrZXJDYWxlbmRhci5taW47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhdGVwaWNrZXJTZWxlY3QuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZGF0ZXBpY2tlckNhbmNlbCA9IHRoaXMuY2FsZW5kYXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIGRyb3Bkb3duSWQgKyAnLWNhbmNlbCcpO1xuICAgICAgICAgIGNvbnN0IGRhdGVwaWNrZXJTdWJtaXQgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBkcm9wZG93bklkICsgJy1zdWJtaXQnKTtcbiAgICAgICAgICBpZiAoZGF0ZXBpY2tlckNhbmNlbCkge1xuICAgICAgICAgICAgZGF0ZXBpY2tlckNhbmNlbC5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSBpbnB1dEluaXRpYWxWYWx1ZTtcbiAgICAgICAgICAgICAgZGF0ZXBpY2tlckNhbGVuZGFyLnRlbnRhdGl2ZSA9IFwiXCI7XG4gICAgICAgICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhci52YWx1ZSA9IGRhdGVwaWNrZXJJbml0aWFsVmFsdWU7XG4gICAgICAgICAgICAgIGNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRlcGlja2VyU3VibWl0KSB7XG4gICAgICAgICAgICBkYXRlcGlja2VyU3VibWl0Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBkYXRlcGlja2VyQ2FsZW5kYXI/LnZhbHVlO1xuICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgICBjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjbG9zZURyb3Bkb3duID0gKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcbiAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdhcmlhLWV4cGFuZGVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cGFuZGVkVmFsdWUgPSAobXV0YXRpb24udGFyZ2V0IGFzIEVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFeHBhbmRlZFZhbHVlICE9PSBpc09wZW4udG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICBjb25zdCBkYXRlcGlja2VyVGltZW91dCA9IHNldFRpbWVvdXQoZm9jdXNDYWxlbmRhciwgMCk7XG4gICAgICAgICAgICAgIGlzT3BlbiA9IGN1cnJlbnRFeHBhbmRlZFZhbHVlID09PSAndHJ1ZSc7XG4gICAgICAgICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRhdGVwaWNrZXJUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICBjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGRhdGVwaWNrZXJEcm9wZG93biwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnYXJpYS1leHBhbmRlZCddIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRlcGlja2VyU2VsZWN0ID0gdGhpcy5jYWxlbmRhci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJzppcyhzZWxlY3QpJyk7XG4gICAgICBjb25zdCBkYXRlcGlja2VyQ2FsZW5kYXIgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignOmlzKGNhbGVuZGFyLWRhdGUsIGNhbGVuZGFyLW11bHRpLCBjYWxlbmRhci1yYW5nZSknKTtcbiAgICAgIGlmIChkYXRlcGlja2VyU2VsZWN0KSB7XG4gICAgICAgIGRhdGVwaWNrZXJTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhci5taW4gPSBzZWxlY3RlZFZhbHVlICsgXCItMDEtMDFcIjtcbiAgICAgICAgICBkYXRlcGlja2VyQ2FsZW5kYXIubWF4ID0gc2VsZWN0ZWRWYWx1ZSArIFwiLTMxLTEyXCI7XG4gICAgICAgICAgZGF0ZXBpY2tlckNhbGVuZGFyLmZvY3VzZWREYXRlID0gZGF0ZXBpY2tlckNhbGVuZGFyLm1pbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dChldmVudDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlcygpO1xuICAgIH1cbiAgfVxuXG4gIHNldEF0dHJpYnV0ZXMoKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07XG4gICAgY29uc3QgYXR0ciA9IHRoaXMuYXR0cmlidXRlcztcbiAgICBPYmplY3Qua2V5cyhhdHRyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpbnB1dD8uc2V0QXR0cmlidXRlKGtleSwgYXR0cltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuXG59XG4iLCI8ZGl2ICNjYWxlbmRhclxuICAgICBjbGFzcz1cImMtZGF0ZXBpY2tlclwiXG4gICAgIFtuZ0NsYXNzXT1cImNvbnRhaW5lckNsYXNzZXNcIlxuICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwidGhpc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGFuZGFsb25lXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhckNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXN0YW5kYWxvbmVcIlxuICAgICAgICAgY2xhc3M9XCJjLWZvcm0tZ3JvdXBcIlxuICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybUdyb3VwQ2xhc3Nlc1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWxhYmVsXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWhpbnRcIj48L25nLWNvbnRlbnQ+IFxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWVycm9yLW1lc3NhZ2VcIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIFwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYy1pbnB1dCBibG9jayBtdC1zbSBib3JkZXItYmxhY2sgcm91bmRlZCBmb250LXNlbWlib2xkIHBsYWNlaG9sZGVyLW5ldXRyYWwtZGFyayBmb2N1czpib3JkZXItYmxhY2sgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMtaW5wdXQgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctd2FybmluZy1iYXNlIGRpc2FibGVkOmJnLW5ldXRyYWwtbGlnaHQgZGlzYWJsZWQ6Ym9yZGVyLW5ldXRyYWwtYmFzZSBwci0xNiB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLWFsZXJ0LWJhc2UgcmluZy0yIHJpbmctYWxlcnQtYmFzZSc6IGVycm9yTWVzc2FnZX1cIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInR5cGUgfHwgJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci52YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJkZXNjcmliZWRCeSB8fCAoZXJyb3JNZXNzYWdlIHx8IGVycm9ySWQgPyBlcnJvcklkIDogbnVsbClcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cImVycm9yTWVzc2FnZSB8fCBlcnJvcklkID8gZXJyb3JJZCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJlcnJvck1lc3NhZ2UgfHwgZXJyb3JJZCA/ICd0cnVlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLnBhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuaW5wdXRtb2RlXT1cImlucHV0bW9kZVwiXG4gICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIC8+XG5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHRvcC0wIHJpZ2h0LTBcIj5cbiAgICAgICAgICAgICAgICA8ZGVzeS1kcm9wZG93biBbY2xhc3Nlc109XCJkcm9wZG93bkNsYXNzZXMgPyBkcm9wZG93bkNsYXNzZXMgOiAnYy1kcm9wZG93bi0tdHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQrJy1kcm9wZG93bidcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+U2VsZWNjaW9uYXIgZmVjaGEgY29uIHVuYSB0YWJsYSBkZSBjYWxlbmRhcmlvPC9zcGFuPjxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEuMzc1ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEuMzc1ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjUgMS41YzAgLTAuNTUyMjg1IC0wLjQ0NzcyIC0xIC0xIC0xcy0xIDAuNDQ3NzE1IC0xIDF2MUgyQzEuMTcxNTcgMi41IDAuNSAzLjE3MTU3IDAuNSA0djhjMCAwLjgyODQgMC42NzE1NyAxLjUgMS41IDEuNWgxMGMwLjgyODQgMCAxLjUgLTAuNjcxNiAxLjUgLTEuNVY0YzAgLTAuODI4NDMgLTAuNjcxNiAtMS41IC0xLjUgLTEuNWgtMC41di0xYzAgLTAuNTUyMjg1IC0wLjQ0NzcgLTEgLTEgLTEgLTAuNTUyMjkgMCAtMSAwLjQ0NzcxNSAtMSAxdjFoLTV2LTFabS0xIDUuNzVjMC41NTIyOCAwIDEgLTAuNDQ3NzIgMSAtMXMtMC40NDc3MiAtMSAtMSAtMSAtMSAwLjQ0NzcyIC0xIDEgMC40NDc3MiAxIDEgMVptMy41IDBjMC41NTIyOCAwIDEgLTAuNDQ3NzIgMSAtMXMtMC40NDc3MiAtMSAtMSAtMSAtMSAwLjQ0NzcyIC0xIDEgMC40NDc3MiAxIDEgMVptLTIuNSAzYzAgMC41NTIzIC0wLjQ0NzcyIDEgLTEgMXMtMSAtMC40NDc3IC0xIC0xYzAgLTAuNTUyMjkgMC40NDc3MiAtMSAxIC0xczEgMC40NDc3MSAxIDFabTIuNSAxYzAuNTUyMjggMCAxIC0wLjQ0NzcgMSAtMSAwIC0wLjU1MjI5IC0wLjQ0NzcyIC0xIC0xIC0xcy0xIDAuNDQ3NzEgLTEgMWMwIDAuNTUyMyAwLjQ0NzcyIDEgMSAxWm00LjUgLTVjMCAwLjU1MjI4IC0wLjQ0NzcgMSAtMSAxIC0wLjU1MjI5IDAgLTEgLTAuNDQ3NzIgLTEgLTFzMC40NDc3MSAtMSAxIC0xYzAuNTUyMyAwIDEgMC40NDc3MiAxIDFaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPGRlc3ktY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhckNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktYmV0d2VlbiBnYXAtc20gcC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc3ktYnV0dG9uIFtpZF09XCJpZCArICctc3VibWl0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzPVwiYy1idXR0b24tLXByaW1hcnkgYy1idXR0b24tLXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2VwdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVzeS1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXN5LWJ1dHRvbiBbaWRdPVwiaWQgKyAnLWNhbmNlbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcz1cImMtYnV0dG9uLS1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXN5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kZXN5LWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9kZXN5LWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJDb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJwLXNtIG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FormatDatePipe {
4
+ transform(value) {
5
+ if (!value)
6
+ return '';
7
+ const fechas = value.split('/');
8
+ const fechasConvertidas = fechas.map(fecha => {
9
+ if (fecha.includes('-')) {
10
+ const [year, month, day] = fecha.split('-');
11
+ if (year && month && day) {
12
+ return `${day}/${month}/${year}`;
13
+ }
14
+ }
15
+ else if (fecha.includes('/')) {
16
+ const [day, month, year] = fecha.split('/');
17
+ if (day && month && year) {
18
+ return `${day}/${month}/${year}`;
19
+ }
20
+ }
21
+ return fecha;
22
+ });
23
+ return fechasConvertidas.join('-');
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
26
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FormatDatePipe, name: "formatDate" }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatDatePipe, decorators: [{
29
+ type: Pipe,
30
+ args: [{
31
+ name: 'formatDate'
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS1mb3Jtcy9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUtwRCxNQUFNLE9BQU8sY0FBYztJQUV2QixTQUFTLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDckIsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtvQkFDdEIsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7aUJBQ3BDO2FBQ0o7aUJBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO29CQUN0QixPQUFPLEdBQUcsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztpQkFDcEM7YUFDSjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQzsrR0F2QlEsY0FBYzs2R0FBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUgxQixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxZQUFZO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdmb3JtYXREYXRlJ1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtYXREYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0geyAvLyBJTiBQUk9HUkVTU1xuXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG5cbiAgICAgICAgY29uc3QgZmVjaGFzID0gdmFsdWUuc3BsaXQoJy8nKTtcblxuICAgICAgICBjb25zdCBmZWNoYXNDb252ZXJ0aWRhcyA9IGZlY2hhcy5tYXAoZmVjaGEgPT4ge1xuICAgICAgICAgICAgaWYgKGZlY2hhLmluY2x1ZGVzKCctJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBmZWNoYS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgICAgIGlmICh5ZWFyICYmIG1vbnRoICYmIGRheSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZlY2hhLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBmZWNoYS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGlmIChkYXkgJiYgbW9udGggJiYgeWVhcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDsgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZlY2hhO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmVjaGFzQ29udmVydGlkYXMuam9pbignLScpO1xuICAgIH1cbn0iXX0=
@@ -1,12 +1,12 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { ChangeDetectorRef, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, QueryList, TemplateRef, ViewChild } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
4
  import { DesyContentChild } from "../../../shared/decorators/desy-content-child.decorator";
4
- import { TreeItemComponent } from "./tree-item/tree-item.component";
5
5
  import { DesyOnInputChange } from "../../../shared/decorators/desy-on-input-change.decorator";
6
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
7
- import { FormFieldComponent } from "../form-field/form-field.component";
8
6
  import { FieldsetComponent } from "../fieldset/fieldset.component";
7
+ import { FormFieldComponent } from "../form-field/form-field.component";
9
8
  import { SearchBarComponent } from "../search-bar/search-bar.component";
9
+ import { TreeItemComponent } from "./tree-item/tree-item.component";
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "@angular/common";
12
12
  import * as i2 from "../../../shared/directives/accessibility-directive";
@@ -286,13 +286,13 @@ export class TreeComponent extends FormFieldComponent {
286
286
  return list;
287
287
  }
288
288
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
289
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeComponent, selector: "desy-tree", inputs: { idPrefix: "idPrefix", classes: "classes", name: "name", type: "type", describedBy: "describedBy", formGroupClasses: "formGroupClasses", expandedFirstLevel: "expandedFirstLevel", decoupleChildFromParent: "decoupleChildFromParent", disableDefaultSearch: "disableDefaultSearch", searchMatchValues: "searchMatchValues" }, outputs: { searchMatchValuesChange: "searchMatchValuesChange" }, providers: [
289
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeComponent, selector: "desy-tree", inputs: { id: "id", idPrefix: "idPrefix", classes: "classes", name: "name", type: "type", describedBy: "describedBy", formGroupClasses: "formGroupClasses", expandedFirstLevel: "expandedFirstLevel", decoupleChildFromParent: "decoupleChildFromParent", disableDefaultSearch: "disableDefaultSearch", searchMatchValues: "searchMatchValues" }, outputs: { searchMatchValuesChange: "searchMatchValuesChange" }, providers: [
290
290
  {
291
291
  provide: NG_VALUE_ACCESSOR,
292
292
  useExisting: forwardRef(() => TreeComponent),
293
293
  multi: true
294
294
  }
295
- ], queries: [{ propertyName: "allItems", predicate: TreeItemComponent, descendants: true }, { propertyName: "fieldsetComponent", predicate: FieldsetComponent }, { propertyName: "searchBarComponent", predicate: SearchBarComponent }], viewQueries: [{ propertyName: "innerHtml", first: true, predicate: ["innerHtml"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "\n<ng-template #innerHtml>\n <ng-content select=\"desy-hint\"></ng-content>\n <ng-content select=\"desy-error-message\"></ng-content>\n <ng-content select=\"desy-search-bar\"></ng-content>\n <ul [class]=\"['c-tree', classes] | makeHtmlList\"\n [attr.role]=\"role ? role : 'tree'\"\n [desyAppAccessibility]=\"this\">\n <ng-content></ng-content>\n </ul>\n</ng-template>\n\n<!-- tree -->\n<div [class]=\"['c-form-group', formGroupClasses] | makeHtmlList\"\n [ngClass]=\"{'c-form-group--error': (hasErrorsMessage() || formGroupClasses === 'c-form-group--error') }\">\n <ng-container *ngIf=\"hasFieldsetComponent(); else innerHtml\">\n <ng-content select=\"desy-fieldset\"></ng-content>\n </ng-container>\n</div>", 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.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "pipe", type: i3.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
295
+ ], queries: [{ propertyName: "allItems", predicate: TreeItemComponent, descendants: true }, { propertyName: "fieldsetComponent", predicate: FieldsetComponent }, { propertyName: "searchBarComponent", predicate: SearchBarComponent }], viewQueries: [{ propertyName: "innerHtml", first: true, predicate: ["innerHtml"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template #innerHtml>\n <ng-content select=\"desy-hint\"></ng-content>\n <ng-content select=\"desy-error-message\"></ng-content>\n <ng-content select=\"desy-search-bar\"></ng-content>\n <ul [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : 'tree'\"\n [desyAppAccessibility]=\"this\">\n <ng-content></ng-content>\n </ul>\n</ng-template>\n\n<!-- tree -->\n<div [class]=\"['c-form-group', formGroupClasses] | makeHtmlList\"\n [ngClass]=\"{'c-form-group--error': (hasErrorsMessage() || formGroupClasses === 'c-form-group--error') }\">\n <ng-container *ngIf=\"hasFieldsetComponent(); else innerHtml\">\n <ng-content select=\"desy-fieldset\"></ng-content>\n </ng-container>\n</div>", 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.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "pipe", type: i3.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
296
296
  }
297
297
  __decorate([
298
298
  DesyOnInputChange('onSearchMatchValuesChange'),
@@ -318,8 +318,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
318
318
  useExisting: forwardRef(() => TreeComponent),
319
319
  multi: true
320
320
  }
321
- ], template: "\n<ng-template #innerHtml>\n <ng-content select=\"desy-hint\"></ng-content>\n <ng-content select=\"desy-error-message\"></ng-content>\n <ng-content select=\"desy-search-bar\"></ng-content>\n <ul [class]=\"['c-tree', classes] | makeHtmlList\"\n [attr.role]=\"role ? role : 'tree'\"\n [desyAppAccessibility]=\"this\">\n <ng-content></ng-content>\n </ul>\n</ng-template>\n\n<!-- tree -->\n<div [class]=\"['c-form-group', formGroupClasses] | makeHtmlList\"\n [ngClass]=\"{'c-form-group--error': (hasErrorsMessage() || formGroupClasses === 'c-form-group--error') }\">\n <ng-container *ngIf=\"hasFieldsetComponent(); else innerHtml\">\n <ng-content select=\"desy-fieldset\"></ng-content>\n </ng-container>\n</div>" }]
322
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { idPrefix: [{
321
+ ], template: "<ng-template #innerHtml>\n <ng-content select=\"desy-hint\"></ng-content>\n <ng-content select=\"desy-error-message\"></ng-content>\n <ng-content select=\"desy-search-bar\"></ng-content>\n <ul [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : 'tree'\"\n [desyAppAccessibility]=\"this\">\n <ng-content></ng-content>\n </ul>\n</ng-template>\n\n<!-- tree -->\n<div [class]=\"['c-form-group', formGroupClasses] | makeHtmlList\"\n [ngClass]=\"{'c-form-group--error': (hasErrorsMessage() || formGroupClasses === 'c-form-group--error') }\">\n <ng-container *ngIf=\"hasFieldsetComponent(); else innerHtml\">\n <ng-content select=\"desy-fieldset\"></ng-content>\n </ng-container>\n</div>" }]
322
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
323
+ type: Input
324
+ }], idPrefix: [{
323
325
  type: Input
324
326
  }], classes: [{
325
327
  type: Input
@@ -354,4 +356,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
354
356
  type: ViewChild,
355
357
  args: ['innerHtml', { static: true }]
356
358
  }] } });
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktZm9ybXMvY29tcG9uZW50cy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFBRSxZQUFZLEVBQzdCLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUFFLFNBQVMsRUFDRixXQUFXLEVBQUUsU0FBUyxFQUN0QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUN6RixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUM1RixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7QUFhdEUsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBeUI7SUFxQzFELFlBQW9CLGNBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBM0I1Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsNEJBQXVCLEdBQUcsS0FBSyxDQUFD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LHlCQUF5QixFQUFDLENBQUM7OEJBQ1Qsa0JBQWtCO3lEQUFDOzRGQTFCakUsYUFBYTtrQkFYekIsU0FBUzsrQkFDRSxXQUFXLGFBRVY7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDOzRCQUM1QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjt3R0FJUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBR29ELFFBQVE7c0JBQWxFLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUdyQixpQkFBaUI7c0JBQXBELGVBQWU7dUJBQUMsaUJBQWlCO2dCQUdHLGtCQUFrQjtzQkFBdEQsZUFBZTt1QkFBQyxrQkFBa0I7Z0JBRU8sU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LCBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Rlc3lDb250ZW50Q2hpbGR9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy9kZXN5LWNvbnRlbnQtY2hpbGQuZGVjb3JhdG9yXCI7XG5pbXBvcnQge1RyZWVJdGVtQ29tcG9uZW50fSBmcm9tIFwiLi90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtEZXN5T25JbnB1dENoYW5nZX0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktb24taW5wdXQtY2hhbmdlLmRlY29yYXRvclwiO1xuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge0Zvcm1GaWVsZENvbXBvbmVudH0gZnJvbSBcIi4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnRcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtGaWVsZHNldENvbXBvbmVudH0gZnJvbSBcIi4uL2ZpZWxkc2V0L2ZpZWxkc2V0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtRdWl0VHJlZUl0ZW1Gb2N1c09wdGlvbnN9IGZyb20gXCIuL2ludGVyZmFjZXMvcXVpdC10cmVlLWl0ZW0tZm9jdXMtb3B0aW9uc1wiO1xuaW1wb3J0IHtTZWFyY2hCYXJDb21wb25lbnR9IGZyb20gXCIuLi9zZWFyY2gtYmFyL3NlYXJjaC1iYXIuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUcmVlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVDb21wb25lbnQgZXh0ZW5kcyBGb3JtRmllbGRDb21wb25lbnQ8YW55W10+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGlkUHJlZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB0eXBlOiAncmFkaW8nfCdjaGVja2JveCd8bnVsbHx1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGRlc2NyaWJlZEJ5OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZm9ybUdyb3VwQ2xhc3NlczogYW55O1xuXG4gIEBJbnB1dCgpIGV4cGFuZGVkRmlyc3RMZXZlbCA9IHRydWU7XG4gIEBJbnB1dCgpIGRlY291cGxlQ2hpbGRGcm9tUGFyZW50ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGlzYWJsZURlZmF1bHRTZWFyY2ggPSBmYWxzZTtcblxuICBARGVzeU9uSW5wdXRDaGFuZ2UoJ29uU2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UnKVxuICBASW5wdXQoKSBzZWFyY2hNYXRjaFZhbHVlczogc3RyaW5nW107XG4gIEBPdXRwdXQoKSBzZWFyY2hNYXRjaFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZ1tdPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgQERlc3lPbklucHV0Q2hhbmdlKCdjb25maWd1cmVBbGxJdGVtcycpXG4gIEBDb250ZW50Q2hpbGRyZW4oVHJlZUl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgYWxsSXRlbXM6IFF1ZXJ5TGlzdDxUcmVlSXRlbUNvbXBvbmVudD47XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoeyBvblNldENhbGxiYWNrTmFtZTogJ292ZXJyaWRlRmllbGRzZXRQYXJhbXMnfSlcbiAgQENvbnRlbnRDaGlsZHJlbihGaWVsZHNldENvbXBvbmVudCkgZmllbGRzZXRDb21wb25lbnQ6IEZpZWxkc2V0Q29tcG9uZW50O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKHsgb25TZXRDYWxsYmFja05hbWU6ICdvdmVycmlkZVNlYXJjaEJhclBhcmFtcyd9KVxuICBAQ29udGVudENoaWxkcmVuKFNlYXJjaEJhckNvbXBvbmVudCkgc2VhcmNoQmFyQ29tcG9uZW50OiBTZWFyY2hCYXJDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnaW5uZXJIdG1sJywgeyBzdGF0aWM6IHRydWUgfSkgaW5uZXJIdG1sOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgcm9vdEl0ZW1zOiBUcmVlSXRlbUNvbXBvbmVudFtdID0gW107XG4gIHByaXZhdGUgX2l0ZW1MaXN0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2l0ZW1MaXN0Q2hlY2tlZFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgX2l0ZW1MaXN0UXVpdEZvY3VzU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zKTtcbiAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnMpO1xuICAgIHRoaXMuX2l0ZW1MaXN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJlQWxsSXRlbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBzb2JyZXNjcmliZSBlbCB2YWxvciBwYXJhIGFjdHVhbGl6YXIgbG9zIGl0ZW1zXG4gICAqIEBPdmVycmlkZVxuICAgKi9cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY29uZmlndXJlQWxsSXRlbXModHJ1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBzb2JyZXNjcmliZSBlbCB2YWxvciBwYXJhIGFjdHVhbGl6YXIgbG9zIGl0ZW1zXG4gICAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzdXBlci5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICAgIHRoaXMuY29uZmlndXJlQWxsSXRlbXMoKTtcbiAgfVxuXG4gIC8qXG4gICAqIEV2ZW50b3NcbiAgICovXG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCB2YWxvciBkZWwgY29tcG9uZW50ZSBhbCBjaGVja3F1ZWFyc2UgdW4gw610ZW1cbiAgICogQHBhcmFtIG9yaWdpbkl0ZW0gw610ZW0gbW9kaWZpY2Fkb1xuICAgKi9cbiAgdXBkYXRlVmFsdWVGcm9tSXRlbXMob3JpZ2luSXRlbT86IFRyZWVJdGVtQ29tcG9uZW50KTogdm9pZCB7XG5cbiAgICAvLyBTaSBlcyByYWRpbywgc2UgZGVzYWN0aXZhbiBlbCByZXN0byBkZSBpdGVtcyBjdWFuZG8gc2UgYWN0aXZhIG90cm8gaXRlbVxuICAgIGlmICh0aGlzLnR5cGUgIT09ICdjaGVja2JveCcpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtICE9PSBvcmlnaW5JdGVtICYmIGl0ZW0uY2hlY2tlZCkge1xuICAgICAgICAgIGl0ZW0uc2V0Q2hlY2tlZChmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQpIHtcbiAgICAgIHRoaXMucm9vdEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLnNldENoZWNrZWRBdXRvbWF0aWNhbGx5RGVwZW5kaW5nT25DaGlsZHJlbigpKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlID0gW107XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEFsbEl0ZW1zSW5PcmRlcigpO1xuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaChpdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlc3Rpb25hIGN1YW5kbyBlbCBmb2NvIGFiYW5kb25hIHVuIMOtdGVtIGRlc2RlIHVuIGV2ZW50byBkZSB0ZWNsYWRvIGNvbnRyb2xhZG9cbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIGhhbmRsZUl0ZW1RdWl0Rm9jdXMob3B0aW9uczogUXVpdFRyZWVJdGVtRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5uZXh0RWxlbWVudCkge1xuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEFsbEl0ZW1zSW5PcmRlcigpO1xuICAgICAgY29uc3QgZm9jdXNhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS5pc0hpZGRlbigpICYmICFpdGVtLmRpc2FibGVkICYmIGl0ZW0uYWxsUGFyZW50c0V4cGFuZGVkKTtcbiAgICAgIHN3aXRjaCAob3B0aW9ucy5uZXh0RWxlbWVudCkge1xuICAgICAgICBjYXNlIFwiZmlyc3RcIjpcbiAgICAgICAgICBmb2N1c2FibGVJdGVtc1swXS5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibGFzdFwiOlxuICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2ZvY3VzYWJsZUl0ZW1zLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwYXJlbnRcIjpcbiAgICAgICAgICBjb25zdCBjdXJyZW50U3ViTGV2ZWwgPSBvcHRpb25zLmN1cnJlbnRJdGVtLnN1YkxldmVsO1xuICAgICAgICAgIGlmIChjdXJyZW50U3ViTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUluZGV4ID0gZm9jdXNhYmxlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gb3B0aW9ucy5jdXJyZW50SXRlbSk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBmb2N1c2FibGVJdGVtcy5zbGljZSgwLCBjdXJyZW50SXRlbUluZGV4KS5yZXZlcnNlKCkuZmluZChpdGVtID0+IGl0ZW0uc3ViTGV2ZWwgPCBjdXJyZW50U3ViTGV2ZWwpO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmaXJzdENoaWxkXCI6XG4gICAgICAgIGNhc2UgXCJuZXh0XCI6XG4gICAgICAgICAgaWYgKG9wdGlvbnMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50SXRlbUluZGV4ID0gZm9jdXNhYmxlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gb3B0aW9ucy5jdXJyZW50SXRlbSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEl0ZW1JbmRleCA8IGZvY3VzYWJsZUl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgZm9jdXNhYmxlSXRlbXNbY3VycmVudEl0ZW1JbmRleCArIDFdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicHJldmlvdXNcIjpcbiAgICAgICAgICBpZiAob3B0aW9ucy5jdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2N1cnJlbnRJdGVtSW5kZXggLSAxXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVhbGl6YSBsYSBiw7pzcXVlZGEgaW50ZXJuYSBkZSBsb3MgaXRlbXMgZW4gZWwgY29tcG9uZW50ZVxuICAgKiBAcGFyYW0gdmFsdWUgdGV4dG8gZGUgYsO6c3F1ZWRhXG4gICAqL1xuICBvblNlYXJjaCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVEZWZhdWx0U2VhcmNoKSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzID0gdGhpcy5hbGxJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLm1hdGNoZXNUZXh0KHZhbHVlKSkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zIGFsIGNhbWJpYXIgcHJvcGllZGFkZXNcbiAgICovXG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBsb3MgaXRlbXMgZGVsIMOhcmJvbFxuICAgKi9cbiAgY29uZmlndXJlQWxsSXRlbXMoaXNWYWx1ZUNoYW5nZSA9IGZhbHNlKTogdm9pZCB7XG5cbiAgICBpZiAoIXRoaXMuX2FscmVhZHlDb25maWd1cmluZ0l0ZW1zKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5Q29uZmlndXJpbmdJdGVtcyA9IHRydWU7XG5cbiAgICAgIC8vIExvIHJlYWxpemFtb3MgZGVzZGUgdW4gc2V0VGltZW91dCBwYXJhIHF1ZSB0b2RvcyBsb3MgaW5wdXRzLCB2YWx1ZXMgeSBkZW3DoXMgdml2YW4gZW4gcGF6IHkgYXJtb27DrWFcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5hbGxJdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJTdWJzY3JpcHRpb25zKHRoaXMuX2l0ZW1MaXN0Q2hlY2tlZFN1YnNjcmlwdGlvbnMpO1xuICAgICAgICAgIHRoaXMuY2xlYXJTdWJzY3JpcHRpb25zKHRoaXMuX2l0ZW1MaXN0UXVpdEZvY3VzU3Vic2NyaXB0aW9ucyk7XG4gICAgICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5wYXJlbnROYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgaXRlbS50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgaXRlbS5pbmhlcml0ZWREZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnlGb3JJdGVtcygpO1xuICAgICAgICAgICAgaXRlbS5pbmhlcml0ZWRFeHBhbmRlZEZpcnN0TGV2ZWwgPSB0aGlzLmV4cGFuZGVkRmlyc3RMZXZlbDtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRGVjb3VwbGVDaGlsZEZyb21QYXJlbnQgPSB0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50O1xuICAgICAgICAgICAgaXRlbS50cmVlRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgICAgICAgICAgaWYgKCh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkgfHwgaXNWYWx1ZUNoYW5nZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZUxpc3QgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IFtdO1xuICAgICAgICAgICAgICBpdGVtLnNldENoZWNrZWQoISF2YWx1ZUxpc3QuZmluZCh2ID0+IHYgPT09IGl0ZW0udmFsdWUpLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICBjb25zdCBjaGVja2VkU3Vic2NyaXB0aW9uID0gaXRlbS5jaGVja2VkQ2hhbmdlRm9yVHJlZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVWYWx1ZUZyb21JdGVtcyhpdGVtKSk7XG4gICAgICAgICAgICB0aGlzLl9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zLnB1c2goY2hlY2tlZFN1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1aXRGb2N1c1N1YnNjcmlwdGlvbiA9IGl0ZW0ucXVpdEZvY3VzLnN1YnNjcmliZShvcHRpb25zID0+IHRoaXMuaGFuZGxlSXRlbVF1aXRGb2N1cyhvcHRpb25zKSk7XG4gICAgICAgICAgICB0aGlzLl9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnMucHVzaChxdWl0Rm9jdXNTdWJzY3JpcHRpb24pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5zZXRFcnJvckluSXRlbXModGhpcy5oYXNFcnJvck1lc3NhZ2VDb21wb25lbnQoKSk7XG5cbiAgICAgICAgICB0aGlzLmJ1aWxkVHJlZSgpO1xuICAgICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUZyb21JdGVtcygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hbGxJdGVtcyAmJiAhdGhpcy5fYWxsSXRlbUxpc3RTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLl9hbGxJdGVtTGlzdFN1YnNjcmlwdGlvbiA9IHRoaXMuYWxsSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maWd1cmVBbGxJdGVtcygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9hbHJlYWR5Q29uZmlndXJpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWNhIGxvcyBpdGVtcyB2aXNpYmxlcyBzZWfDum4gZWwgZmlsdHJvIGRlIGLDunNxdWVkYVxuICAgKi9cbiAgb25TZWFyY2hNYXRjaFZhbHVlc0NoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGxJdGVtcykge1xuICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmluaGVyaXRlZE1hdGNoZXNTZWFyY2ggPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzICE9PSBudWxsICYmIHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXMuZmluZEluZGV4KHZhbHVlID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKSA8IDApIHtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkTWF0Y2hlc1NlYXJjaCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBHZXR0ZXJzIGFuZCBzZXR0ZXJzXG4gICAqL1xuXG4gIGdldElkUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRQcmVmaXggPyB0aGlzLmlkUHJlZml4IDogdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0RGVzY3JpYmVkQnkoKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpYmVkQnkgPSAnJztcbiAgICBpZiAodGhpcy5kZXNjcmliZWRCeSkge1xuICAgICAgZGVzY3JpYmVkQnkgPSB0aGlzLmRlc2NyaWJlZEJ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0hpbnRDb21wb25lbnQoKSAmJiB0aGlzLmhpbnRDb21wb25lbnQuaWQpIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gZGVzY3JpYmVkQnkgKyAnICcgKyB0aGlzLmhpbnRDb21wb25lbnQuaWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzRXJyb3JNZXNzYWdlQ29tcG9uZW50KCkgJiYgdGhpcy5lcnJvck1lc3NhZ2VDb21wb25lbnQuaWQpIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gZGVzY3JpYmVkQnkgKyAnICcgKyB0aGlzLmVycm9yTWVzc2FnZUNvbXBvbmVudC5pZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzY3JpYmVkQnk7XG4gIH1cblxuICAvKipcbiAgICogRGV2dWVsdmUgZWwgdmFsb3IgZGUgZGVzY3JpYmVkQnkgcXVlIHNlIHRyYW5zbWl0aXLDoSBhIGxvcyBpdGVtc1xuICAgKi9cbiAgZ2V0RGVzY3JpYmVkQnlGb3JJdGVtcygpOiBzdHJpbmcge1xuICAgIGxldCBkZXNjcmliZWRCeTtcbiAgICBpZiAodGhpcy5oYXNGaWVsZHNldENvbXBvbmVudCgpKSB7XG4gICAgICBkZXNjcmliZWRCeSA9IHRoaXMuZmllbGRzZXRDb21wb25lbnQuZGVzY3JpYmVkQnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gdGhpcy5nZXREZXNjcmliZWRCeSgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZXNjcmliZWRCeTtcbiAgfVxuXG4gIGhhc0ZpZWxkc2V0Q29tcG9uZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZmllbGRzZXRDb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHN1cGVyLmdldEhpbnRJZCgpO1xuICAgKi9cbiAgZ2V0SGludElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRQcmVmaXggPyB0aGlzLmlkUHJlZml4ICsgJy1oaW50JyA6IHRoaXMuaGludENvbXBvbmVudD8uaWQ7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHN1cGVyLmdldEhpbnRJZCgpO1xuICAgKi9cbiAgZ2V0RXJyb3JJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCArICctZXJyb3InIDogdGhpcy5lcnJvck1lc3NhZ2VDb21wb25lbnQ/LmlkO1xuICB9XG5cbiAgLypcbiAgICogRnVuY2lvbmVzIHBhcmEgcmVlbXBsYXphciBlbCBjb250ZW5pZG8gZGVsIGZpZWxkc2V0LCBsYWJlbCwgaGludCBvIGVycm9ybWVzc2FnZVxuICAgKi9cblxuICBvdmVycmlkZUZpZWxkc2V0UGFyYW1zKGZpZWxkc2V0OiBGaWVsZHNldENvbXBvbmVudCk6IHZvaWQge1xuICAgIGZpZWxkc2V0LmNhbGxlciA9IHRoaXMuaW5uZXJIdG1sO1xuICAgIGZpZWxkc2V0LmVycm9ySWQgPSB0aGlzLmdldEVycm9ySWQoKTtcbiAgICBmaWVsZHNldC5kZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnkoKTtcbiAgICBmaWVsZHNldC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvdmVycmlkZVNlYXJjaEJhclBhcmFtcyhzZWFyY2hiYXI6IFNlYXJjaEJhckNvbXBvbmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRPbkNoYW5nZSA9IHNlYXJjaGJhci5vbkNoYW5nZTtcbiAgICBjb25zdCBuZXdPbkNoYW5nZSA9IHZhbHVlID0+IHtcbiAgICAgIHRoaXMub25TZWFyY2godmFsdWUpO1xuICAgICAgZGVmYXVsdE9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gICAgc2VhcmNoYmFyLnJlZ2lzdGVyT25DaGFuZ2UobmV3T25DaGFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlIGxsYW1hIGRlc2RlIEZvcm1GaWVsZFxuICAgKi9cbiAgb3ZlcnJpZGVIaW50UGFyYW1zKGhpbnQpOiB2b2lkIHtcbiAgICBoaW50LmlkID0gdGhpcy5nZXRIaW50SWQoKTtcbiAgICBoaW50LmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBsbGFtYSBkZXNkZSBGb3JtRmllbGRcbiAgICovXG4gIG92ZXJyaWRlRXJyb3JNZXNzYWdlUGFyYW1zKGVycm9yTWVzc2FnZSk6IHZvaWQge1xuICAgIGVycm9yTWVzc2FnZS5pZCA9IHRoaXMuZ2V0RXJyb3JJZCgpO1xuICAgIHRoaXMuc2V0RXJyb3JJbkl0ZW1zKHRoaXMuaGFzRXJyb3JNZXNzYWdlQ29tcG9uZW50KCkpO1xuICAgIGVycm9yTWVzc2FnZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2UgbGxhbWEgZGVzZGUgRm9ybUZpZWxkXG4gICAqL1xuICBvbkRlbGV0ZUVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnNldEVycm9ySW5JdGVtcyh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpKTtcbiAgfVxuXG4gIC8qXG4gICAqIE3DqXRvZG9zIHByaXZhZG9zXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgbGEgZXN0cnVjdHVyYSBkZWwgw6FyYm9sXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVHJlZSgpOiB2b2lkIHtcblxuICAgIC8vIFNlIGNyZWEgdW4gbWFwYSBwYXJhIHRlbmVyIGFjY2VzaWJsZXMgbG9zIGl0ZW1zIHBvciBrZXkgeSBzZSBib3JyYW4gbG9zIGxpc3RhZG9zIGV4aXN0ZW50ZXNcbiAgICBjb25zdCBpdGVtTWFwID0ge31cbiAgICB0aGlzLnJvb3RJdGVtcyA9IFtdO1xuICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGl0ZW0uZ2V0S2V5KCk7XG4gICAgICBpdGVtTWFwW2tleV0gPSBpdGVtO1xuICAgICAgaWYgKGl0ZW0uc3ViKSB7XG4gICAgICAgIGl0ZW0uc3ViLml0ZW1MaXN0ID0gW107XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTZSBhw7FhZGVuIGxvcyBpdGVtcyBhIGxvcyBsaXN0YWRvcyBjb3JyZXNwb25kaWVudGVzXG4gICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgcGFyZW50S2V5ID0gaXRlbS5nZXRQYXJlbnRLZXkoKTtcbiAgICAgIGlmIChwYXJlbnRLZXkgPT09ICdyb290Jykge1xuICAgICAgICB0aGlzLnJvb3RJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJlbnRLZXkpIHtcbiAgICAgICAgY29uc3Qgc3ViID0gaXRlbU1hcFtwYXJlbnRLZXldLnN1YjtcbiAgICAgICAgaWYgKHN1Yikge1xuICAgICAgICAgIHN1Yi5pdGVtTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTZSBjb25maWd1cmFuIGxvcyBpdGVtcyBkZXNkZSByb290XG4gICAgbGV0IG9yZGVyID0gMDtcbiAgICB0aGlzLnJvb3RJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5zZXRTdWJMZXZlbCgwKTtcbiAgICAgIGl0ZW0uc2V0RGVmYXVsdElkKGAke3RoaXMuaWRQcmVmaXh9LSR7aW5kZXh9YCk7XG4gICAgICBpdGVtLnJlZnJlc2hBbGxQYXJlbnRzRXhwYW5kZWRSZWN1cnNpdmUodHJ1ZSk7XG4gICAgICBpZiAoIXRoaXMuZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQpIHtcbiAgICAgICAgaXRlbS5zZXRDaGVja2VkQXV0b21hdGljYWxseURlcGVuZGluZ09uQ2hpbGRyZW4oKTtcbiAgICAgIH1cbiAgICAgIG9yZGVyID0gaXRlbS5zZXRPcmRlclJlY3Vyc2l2ZWx5KG9yZGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaSB0aWVuZSB1biBtZW5zYWplIGRlIGVycm9yLCBzZSBpbmRpY2EgYSBsb3MgaXRlbXNcbiAgICogQHBhcmFtIGhhc0Vycm9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldEVycm9ySW5JdGVtcyhoYXNFcnJvcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFsbEl0ZW1zPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uaW5oZXJpdGVkSGFzRXJyb3IgPSBoYXNFcnJvcjtcbiAgICAgICAgaXRlbS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIHVuIGxpc3RhZG8gZGUgc3Vic2NyaXBjaW9uZXNcbiAgICogQHBhcmFtIHN1YnNjcmlwdGlvbkxpc3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY2xlYXJTdWJzY3JpcHRpb25zKHN1YnNjcmlwdGlvbkxpc3Q6IFN1YnNjcmlwdGlvbltdKTogdm9pZCB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgc3Vic2NyaXB0aW9uTGlzdC5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgIHN1YnNjcmlwdGlvbkxpc3Quc3BsaWNlKDAsIHN1YnNjcmlwdGlvbkxpc3QubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXZ1ZWx2ZSBsb3MgaXRlbXMgZGVsIMOhcmJvbCBvcmRlbmFkb3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0QWxsSXRlbXNJbk9yZGVyKCk6IFRyZWVJdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBsaXN0ID0gW107XG4gICAgaWYgKHRoaXMuYWxsSXRlbXMpIHtcbiAgICAgIGxpc3QgPSB0aGlzLmFsbEl0ZW1zLnRvQXJyYXkoKS5zb3J0KChhLCBiKSA9PiBhLm9yZGVySW5UcmVlID4gYi5vcmRlckluVHJlZSA/IDEgOiAtMSlcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RcbiAgfVxuICBcblxufVxuIiwiXG48bmctdGVtcGxhdGUgI2lubmVySHRtbD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGVzeS1oaW50XCI+PC9uZy1jb250ZW50PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWVycm9yLW1lc3NhZ2VcIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImRlc3ktc2VhcmNoLWJhclwiPjwvbmctY29udGVudD5cbiAgPHVsIFtjbGFzc109XCJbJ2MtdHJlZScsIGNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgIFthdHRyLnJvbGVdPVwicm9sZSA/IHJvbGUgOiAndHJlZSdcIlxuICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cInRoaXNcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIHRyZWUgLS0+XG48ZGl2IFtjbGFzc109XCJbJ2MtZm9ybS1ncm91cCcsIGZvcm1Hcm91cENsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgW25nQ2xhc3NdPVwieydjLWZvcm0tZ3JvdXAtLWVycm9yJzogKGhhc0Vycm9yc01lc3NhZ2UoKSB8fCBmb3JtR3JvdXBDbGFzc2VzID09PSAnYy1mb3JtLWdyb3VwLS1lcnJvcicpIH1cIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0ZpZWxkc2V0Q29tcG9uZW50KCk7IGVsc2UgaW5uZXJIdG1sXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGVzeS1maWVsZHNldFwiPjwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj4iXX0=
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktZm9ybXMvY29tcG9uZW50cy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFBRSxZQUFZLEVBQzdCLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUFFLFNBQVMsRUFDRixXQUFXLEVBQUUsU0FBUyxFQUN0QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUM5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFhcEUsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBeUI7SUFzQzFELFlBQW9CLGNBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBM0I1Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsNEJBQXVCLEdBQUcsS0FBSyxDQUFD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LHlCQUF5QixFQUFDLENBQUM7OEJBQ1Qsa0JBQWtCO3lEQUFDOzRGQTNCakUsYUFBYTtrQkFYekIsU0FBUzsrQkFDRSxXQUFXLGFBRVY7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDOzRCQUM1QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjt3R0FJUSxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUdvRCxRQUFRO3NCQUFsRSxlQUFlO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFHckIsaUJBQWlCO3NCQUFwRCxlQUFlO3VCQUFDLGlCQUFpQjtnQkFHRyxrQkFBa0I7c0JBQXRELGVBQWU7dUJBQUMsa0JBQWtCO2dCQUVPLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCwgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBEZXN5Q29udGVudENoaWxkIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3JcIjtcbmltcG9ydCB7IERlc3lPbklucHV0Q2hhbmdlIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktb24taW5wdXQtY2hhbmdlLmRlY29yYXRvclwiO1xuaW1wb3J0IHsgRmllbGRzZXRDb21wb25lbnQgfSBmcm9tIFwiLi4vZmllbGRzZXQvZmllbGRzZXQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tIFwiLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFF1aXRUcmVlSXRlbUZvY3VzT3B0aW9ucyB9IGZyb20gXCIuL2ludGVyZmFjZXMvcXVpdC10cmVlLWl0ZW0tZm9jdXMtb3B0aW9uc1wiO1xuaW1wb3J0IHsgVHJlZUl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHJlZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGV4dGVuZHMgRm9ybUZpZWxkQ29tcG9uZW50PGFueVtdPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICBASW5wdXQoKSBpZFByZWZpeDogc3RyaW5nO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgdHlwZTogJ3JhZGlvJ3wnY2hlY2tib3gnfG51bGx8dW5kZWZpbmVkO1xuICBASW5wdXQoKSBkZXNjcmliZWRCeTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGZvcm1Hcm91cENsYXNzZXM6IGFueTtcblxuICBASW5wdXQoKSBleHBhbmRlZEZpcnN0TGV2ZWwgPSB0cnVlO1xuICBASW5wdXQoKSBkZWNvdXBsZUNoaWxkRnJvbVBhcmVudCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVEZWZhdWx0U2VhcmNoID0gZmFsc2U7XG5cbiAgQERlc3lPbklucHV0Q2hhbmdlKCdvblNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlJylcbiAgQElucHV0KCkgc2VhcmNoTWF0Y2hWYWx1ZXM6IHN0cmluZ1tdO1xuICBAT3V0cHV0KCkgc2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIEBEZXN5T25JbnB1dENoYW5nZSgnY29uZmlndXJlQWxsSXRlbXMnKVxuICBAQ29udGVudENoaWxkcmVuKFRyZWVJdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGFsbEl0ZW1zOiBRdWVyeUxpc3Q8VHJlZUl0ZW1Db21wb25lbnQ+O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKHsgb25TZXRDYWxsYmFja05hbWU6ICdvdmVycmlkZUZpZWxkc2V0UGFyYW1zJ30pXG4gIEBDb250ZW50Q2hpbGRyZW4oRmllbGRzZXRDb21wb25lbnQpIGZpZWxkc2V0Q29tcG9uZW50OiBGaWVsZHNldENvbXBvbmVudDtcblxuICBARGVzeUNvbnRlbnRDaGlsZCh7IG9uU2V0Q2FsbGJhY2tOYW1lOiAnb3ZlcnJpZGVTZWFyY2hCYXJQYXJhbXMnfSlcbiAgQENvbnRlbnRDaGlsZHJlbihTZWFyY2hCYXJDb21wb25lbnQpIHNlYXJjaEJhckNvbXBvbmVudDogU2VhcmNoQmFyQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2lubmVySHRtbCcsIHsgc3RhdGljOiB0cnVlIH0pIGlubmVySHRtbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIHJvb3RJdGVtczogVHJlZUl0ZW1Db21wb25lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9pdGVtTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9hbGxJdGVtTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIF9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgX2FscmVhZHlDb25maWd1cmluZ0l0ZW1zID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclN1YnNjcmlwdGlvbnModGhpcy5faXRlbUxpc3RDaGVja2VkU3Vic2NyaXB0aW9ucyk7XG4gICAgdGhpcy5jbGVhclN1YnNjcmlwdGlvbnModGhpcy5faXRlbUxpc3RRdWl0Rm9jdXNTdWJzY3JpcHRpb25zKTtcbiAgICB0aGlzLl9pdGVtTGlzdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9hbGxJdGVtTGlzdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogU2Ugc29icmVzY3JpYmUgZWwgdmFsb3IgcGFyYSBhY3R1YWxpemFyIGxvcyBpdGVtc1xuICAgKiBAT3ZlcnJpZGVcbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKHRydWUpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2Ugc29icmVzY3JpYmUgZWwgdmFsb3IgcGFyYSBhY3R1YWxpemFyIGxvcyBpdGVtc1xuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgc3VwZXIuc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKTtcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKCk7XG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgdmFsb3IgZGVsIGNvbXBvbmVudGUgYWwgY2hlY2txdWVhcnNlIHVuIMOtdGVtXG4gICAqIEBwYXJhbSBvcmlnaW5JdGVtIMOtdGVtIG1vZGlmaWNhZG9cbiAgICovXG4gIHVwZGF0ZVZhbHVlRnJvbUl0ZW1zKG9yaWdpbkl0ZW0/OiBUcmVlSXRlbUNvbXBvbmVudCk6IHZvaWQge1xuXG4gICAgLy8gU2kgZXMgcmFkaW8sIHNlIGRlc2FjdGl2YW4gZWwgcmVzdG8gZGUgaXRlbXMgY3VhbmRvIHNlIGFjdGl2YSBvdHJvIGl0ZW1cbiAgICBpZiAodGhpcy50eXBlICE9PSAnY2hlY2tib3gnKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0QWxsSXRlbXNJbk9yZGVyKCk7XG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbSAhPT0gb3JpZ2luSXRlbSAmJiBpdGVtLmNoZWNrZWQpIHtcbiAgICAgICAgICBpdGVtLnNldENoZWNrZWQoZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50KSB7XG4gICAgICB0aGlzLnJvb3RJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5zZXRDaGVja2VkQXV0b21hdGljYWxseURlcGVuZGluZ09uQ2hpbGRyZW4oKSk7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0uY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXN0aW9uYSBjdWFuZG8gZWwgZm9jbyBhYmFuZG9uYSB1biDDrXRlbSBkZXNkZSB1biBldmVudG8gZGUgdGVjbGFkbyBjb250cm9sYWRvXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBoYW5kbGVJdGVtUXVpdEZvY3VzKG9wdGlvbnM6IFF1aXRUcmVlSXRlbUZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubmV4dEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZUl0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uaXNIaWRkZW4oKSAmJiAhaXRlbS5kaXNhYmxlZCAmJiBpdGVtLmFsbFBhcmVudHNFeHBhbmRlZCk7XG4gICAgICBzd2l0Y2ggKG9wdGlvbnMubmV4dEVsZW1lbnQpIHtcbiAgICAgICAgY2FzZSBcImZpcnN0XCI6XG4gICAgICAgICAgZm9jdXNhYmxlSXRlbXNbMF0uZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImxhc3RcIjpcbiAgICAgICAgICBmb2N1c2FibGVJdGVtc1tmb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicGFyZW50XCI6XG4gICAgICAgICAgY29uc3QgY3VycmVudFN1YkxldmVsID0gb3B0aW9ucy5jdXJyZW50SXRlbS5zdWJMZXZlbDtcbiAgICAgICAgICBpZiAoY3VycmVudFN1YkxldmVsID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZm9jdXNhYmxlSXRlbXMuc2xpY2UoMCwgY3VycmVudEl0ZW1JbmRleCkucmV2ZXJzZSgpLmZpbmQoaXRlbSA9PiBpdGVtLnN1YkxldmVsIDwgY3VycmVudFN1YkxldmVsKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgcGFyZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZmlyc3RDaGlsZFwiOlxuICAgICAgICBjYXNlIFwibmV4dFwiOlxuICAgICAgICAgIGlmIChvcHRpb25zLmN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSW5kZXggPCBmb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2N1cnJlbnRJdGVtSW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInByZXZpb3VzXCI6XG4gICAgICAgICAgaWYgKG9wdGlvbnMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSW5kZXggPSBmb2N1c2FibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBvcHRpb25zLmN1cnJlbnRJdGVtKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBmb2N1c2FibGVJdGVtc1tjdXJyZW50SXRlbUluZGV4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxpemEgbGEgYsO6c3F1ZWRhIGludGVybmEgZGUgbG9zIGl0ZW1zIGVuIGVsIGNvbXBvbmVudGVcbiAgICogQHBhcmFtIHZhbHVlIHRleHRvIGRlIGLDunNxdWVkYVxuICAgKi9cbiAgb25TZWFyY2godmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlRGVmYXVsdFNlYXJjaCkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNYXRjaFZhbHVlcyA9IHRoaXMuYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5tYXRjaGVzVGV4dCh2YWx1ZSkpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNYXRjaFZhbHVlcyA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWFyY2hNYXRjaFZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogRXZlbnRvcyBhbCBjYW1iaWFyIHByb3BpZWRhZGVzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgbG9zIGl0ZW1zIGRlbCDDoXJib2xcbiAgICovXG4gIGNvbmZpZ3VyZUFsbEl0ZW1zKGlzVmFsdWVDaGFuZ2UgPSBmYWxzZSk6IHZvaWQge1xuXG4gICAgaWYgKCF0aGlzLl9hbHJlYWR5Q29uZmlndXJpbmdJdGVtcykge1xuICAgICAgdGhpcy5fYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSB0cnVlO1xuXG4gICAgICAvLyBMbyByZWFsaXphbW9zIGRlc2RlIHVuIHNldFRpbWVvdXQgcGFyYSBxdWUgdG9kb3MgbG9zIGlucHV0cywgdmFsdWVzIHkgZGVtw6FzIHZpdmFuIGVuIHBheiB5IGFybW9uw61hXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWxsSXRlbXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zKTtcbiAgICAgICAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnMpO1xuICAgICAgICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50TmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgIGl0ZW0udHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRGVzY3JpYmVkQnkgPSB0aGlzLmdldERlc2NyaWJlZEJ5Rm9ySXRlbXMoKTtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRXhwYW5kZWRGaXJzdExldmVsID0gdGhpcy5leHBhbmRlZEZpcnN0TGV2ZWw7XG4gICAgICAgICAgICBpdGVtLmluaGVyaXRlZERlY291cGxlQ2hpbGRGcm9tUGFyZW50ID0gdGhpcy5kZWNvdXBsZUNoaWxkRnJvbVBhcmVudDtcbiAgICAgICAgICAgIGl0ZW0udHJlZURpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcbiAgICAgICAgICAgIGlmICgodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHx8IGlzVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVMaXN0ID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiBbXTtcbiAgICAgICAgICAgICAgaXRlbS5zZXRDaGVja2VkKCEhdmFsdWVMaXN0LmZpbmQodiA9PiB2ID09PSBpdGVtLnZhbHVlKSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgY29uc3QgY2hlY2tlZFN1YnNjcmlwdGlvbiA9IGl0ZW0uY2hlY2tlZENoYW5nZUZvclRyZWUuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlVmFsdWVGcm9tSXRlbXMoaXRlbSkpO1xuICAgICAgICAgICAgdGhpcy5faXRlbUxpc3RDaGVja2VkU3Vic2NyaXB0aW9ucy5wdXNoKGNoZWNrZWRTdWJzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBxdWl0Rm9jdXNTdWJzY3JpcHRpb24gPSBpdGVtLnF1aXRGb2N1cy5zdWJzY3JpYmUob3B0aW9ucyA9PiB0aGlzLmhhbmRsZUl0ZW1RdWl0Rm9jdXMob3B0aW9ucykpO1xuICAgICAgICAgICAgdGhpcy5faXRlbUxpc3RRdWl0Rm9jdXNTdWJzY3JpcHRpb25zLnB1c2gocXVpdEZvY3VzU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuc2V0RXJyb3JJbkl0ZW1zKHRoaXMuaGFzRXJyb3JNZXNzYWdlQ29tcG9uZW50KCkpO1xuXG4gICAgICAgICAgdGhpcy5idWlsZFRyZWUoKTtcbiAgICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVGcm9tSXRlbXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNYXRjaFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsSXRlbXMgJiYgIXRoaXMuX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5fYWxsSXRlbUxpc3RTdWJzY3JpcHRpb24gPSB0aGlzLmFsbEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY29uZmlndXJlQWxsSXRlbXMoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmljYSBsb3MgaXRlbXMgdmlzaWJsZXMgc2Vnw7puIGVsIGZpbHRybyBkZSBiw7pzcXVlZGFcbiAgICovXG4gIG9uU2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWxsSXRlbXMpIHtcbiAgICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5pbmhlcml0ZWRNYXRjaGVzU2VhcmNoID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5zZWFyY2hNYXRjaFZhbHVlcyAhPT0gbnVsbCAmJiB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzLmZpbmRJbmRleCh2YWx1ZSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSkgPCAwKSB7XG4gICAgICAgICAgICBpdGVtLmluaGVyaXRlZE1hdGNoZXNTZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogR2V0dGVycyBhbmQgc2V0dGVyc1xuICAgKi9cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldERlc2NyaWJlZEJ5KCk6IHN0cmluZyB7XG4gICAgbGV0IGRlc2NyaWJlZEJ5ID0gJyc7XG4gICAgaWYgKHRoaXMuZGVzY3JpYmVkQnkpIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gdGhpcy5kZXNjcmliZWRCeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNIaW50Q29tcG9uZW50KCkgJiYgdGhpcy5oaW50Q29tcG9uZW50LmlkKSB7XG4gICAgICBkZXNjcmliZWRCeSA9IGRlc2NyaWJlZEJ5ICsgJyAnICsgdGhpcy5oaW50Q29tcG9uZW50LmlkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpICYmIHRoaXMuZXJyb3JNZXNzYWdlQ29tcG9uZW50LmlkKSB7XG4gICAgICBkZXNjcmliZWRCeSA9IGRlc2NyaWJlZEJ5ICsgJyAnICsgdGhpcy5lcnJvck1lc3NhZ2VDb21wb25lbnQuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NyaWJlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIERldnVlbHZlIGVsIHZhbG9yIGRlIGRlc2NyaWJlZEJ5IHF1ZSBzZSB0cmFuc21pdGlyw6EgYSBsb3MgaXRlbXNcbiAgICovXG4gIGdldERlc2NyaWJlZEJ5Rm9ySXRlbXMoKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpYmVkQnk7XG4gICAgaWYgKHRoaXMuaGFzRmllbGRzZXRDb21wb25lbnQoKSkge1xuICAgICAgZGVzY3JpYmVkQnkgPSB0aGlzLmZpZWxkc2V0Q29tcG9uZW50LmRlc2NyaWJlZEJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzY3JpYmVkQnk7XG4gIH1cblxuICBoYXNGaWVsZHNldENvbXBvbmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZpZWxkc2V0Q29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBzdXBlci5nZXRIaW50SWQoKTtcbiAgICovXG4gIGdldEhpbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCArICctaGludCcgOiB0aGlzLmhpbnRDb21wb25lbnQ/LmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBzdXBlci5nZXRIaW50SWQoKTtcbiAgICovXG4gIGdldEVycm9ySWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggKyAnLWVycm9yJyA6IHRoaXMuZXJyb3JNZXNzYWdlQ29tcG9uZW50Py5pZDtcbiAgfVxuXG4gIC8qXG4gICAqIEZ1bmNpb25lcyBwYXJhIHJlZW1wbGF6YXIgZWwgY29udGVuaWRvIGRlbCBmaWVsZHNldCwgbGFiZWwsIGhpbnQgbyBlcnJvcm1lc3NhZ2VcbiAgICovXG5cbiAgb3ZlcnJpZGVGaWVsZHNldFBhcmFtcyhmaWVsZHNldDogRmllbGRzZXRDb21wb25lbnQpOiB2b2lkIHtcbiAgICBmaWVsZHNldC5jYWxsZXIgPSB0aGlzLmlubmVySHRtbDtcbiAgICBmaWVsZHNldC5lcnJvcklkID0gdGhpcy5nZXRFcnJvcklkKCk7XG4gICAgZmllbGRzZXQuZGVzY3JpYmVkQnkgPSB0aGlzLmdldERlc2NyaWJlZEJ5KCk7XG4gICAgZmllbGRzZXQuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb3ZlcnJpZGVTZWFyY2hCYXJQYXJhbXMoc2VhcmNoYmFyOiBTZWFyY2hCYXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0T25DaGFuZ2UgPSBzZWFyY2hiYXIub25DaGFuZ2U7XG4gICAgY29uc3QgbmV3T25DaGFuZ2UgPSB2YWx1ZSA9PiB7XG4gICAgICB0aGlzLm9uU2VhcmNoKHZhbHVlKTtcbiAgICAgIGRlZmF1bHRPbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICAgIHNlYXJjaGJhci5yZWdpc3Rlck9uQ2hhbmdlKG5ld09uQ2hhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBsbGFtYSBkZXNkZSBGb3JtRmllbGRcbiAgICovXG4gIG92ZXJyaWRlSGludFBhcmFtcyhoaW50KTogdm9pZCB7XG4gICAgaGludC5pZCA9IHRoaXMuZ2V0SGludElkKCk7XG4gICAgaGludC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2UgbGxhbWEgZGVzZGUgRm9ybUZpZWxkXG4gICAqL1xuICBvdmVycmlkZUVycm9yTWVzc2FnZVBhcmFtcyhlcnJvck1lc3NhZ2UpOiB2b2lkIHtcbiAgICBlcnJvck1lc3NhZ2UuaWQgPSB0aGlzLmdldEVycm9ySWQoKTtcbiAgICB0aGlzLnNldEVycm9ySW5JdGVtcyh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpKTtcbiAgICBlcnJvck1lc3NhZ2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlIGxsYW1hIGRlc2RlIEZvcm1GaWVsZFxuICAgKi9cbiAgb25EZWxldGVFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTogdm9pZCB7XG4gICAgdGhpcy5zZXRFcnJvckluSXRlbXModGhpcy5oYXNFcnJvck1lc3NhZ2VDb21wb25lbnQoKSk7XG4gIH1cblxuICAvKlxuICAgKiBNw6l0b2RvcyBwcml2YWRvc1xuICAgKi9cblxuICAvKipcbiAgICogQ29uZmlndXJhIGxhIGVzdHJ1Y3R1cmEgZGVsIMOhcmJvbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFRyZWUoKTogdm9pZCB7XG5cbiAgICAvLyBTZSBjcmVhIHVuIG1hcGEgcGFyYSB0ZW5lciBhY2Nlc2libGVzIGxvcyBpdGVtcyBwb3Iga2V5IHkgc2UgYm9ycmFuIGxvcyBsaXN0YWRvcyBleGlzdGVudGVzXG4gICAgY29uc3QgaXRlbU1hcCA9IHt9XG4gICAgdGhpcy5yb290SXRlbXMgPSBbXTtcbiAgICB0aGlzLmFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBpdGVtLmdldEtleSgpO1xuICAgICAgaXRlbU1hcFtrZXldID0gaXRlbTtcbiAgICAgIGlmIChpdGVtLnN1Yikge1xuICAgICAgICBpdGVtLnN1Yi5pdGVtTGlzdCA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2UgYcOxYWRlbiBsb3MgaXRlbXMgYSBsb3MgbGlzdGFkb3MgY29ycmVzcG9uZGllbnRlc1xuICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEtleSA9IGl0ZW0uZ2V0UGFyZW50S2V5KCk7XG4gICAgICBpZiAocGFyZW50S2V5ID09PSAncm9vdCcpIHtcbiAgICAgICAgdGhpcy5yb290SXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50S2V5KSB7XG4gICAgICAgIGNvbnN0IHN1YiA9IGl0ZW1NYXBbcGFyZW50S2V5XS5zdWI7XG4gICAgICAgIGlmIChzdWIpIHtcbiAgICAgICAgICBzdWIuaXRlbUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2UgY29uZmlndXJhbiBsb3MgaXRlbXMgZGVzZGUgcm9vdFxuICAgIGxldCBvcmRlciA9IDA7XG4gICAgdGhpcy5yb290SXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uc2V0U3ViTGV2ZWwoMCk7XG4gICAgICBpdGVtLnNldERlZmF1bHRJZChgJHt0aGlzLmlkUHJlZml4fS0ke2luZGV4fWApO1xuICAgICAgaXRlbS5yZWZyZXNoQWxsUGFyZW50c0V4cGFuZGVkUmVjdXJzaXZlKHRydWUpO1xuICAgICAgaWYgKCF0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50KSB7XG4gICAgICAgIGl0ZW0uc2V0Q2hlY2tlZEF1dG9tYXRpY2FsbHlEZXBlbmRpbmdPbkNoaWxkcmVuKCk7XG4gICAgICB9XG4gICAgICBvcmRlciA9IGl0ZW0uc2V0T3JkZXJSZWN1cnNpdmVseShvcmRlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2kgdGllbmUgdW4gbWVuc2FqZSBkZSBlcnJvciwgc2UgaW5kaWNhIGEgbG9zIGl0ZW1zXG4gICAqIEBwYXJhbSBoYXNFcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRFcnJvckluSXRlbXMoaGFzRXJyb3I6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGxJdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmluaGVyaXRlZEhhc0Vycm9yID0gaGFzRXJyb3I7XG4gICAgICAgIGl0ZW0uZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSB1biBsaXN0YWRvIGRlIHN1YnNjcmlwY2lvbmVzXG4gICAqIEBwYXJhbSBzdWJzY3JpcHRpb25MaXN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNsZWFyU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25MaXN0OiBTdWJzY3JpcHRpb25bXSk6IHZvaWQge1xuICAgIGlmIChzdWJzY3JpcHRpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHN1YnNjcmlwdGlvbkxpc3QuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICBzdWJzY3JpcHRpb25MaXN0LnNwbGljZSgwLCBzdWJzY3JpcHRpb25MaXN0Lmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV2dWVsdmUgbG9zIGl0ZW1zIGRlbCDDoXJib2wgb3JkZW5hZG9zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldEFsbEl0ZW1zSW5PcmRlcigpOiBUcmVlSXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgbGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmFsbEl0ZW1zKSB7XG4gICAgICBsaXN0ID0gdGhpcy5hbGxJdGVtcy50b0FycmF5KCkuc29ydCgoYSwgYikgPT4gYS5vcmRlckluVHJlZSA+IGIub3JkZXJJblRyZWUgPyAxIDogLTEpXG4gICAgfVxuICAgIHJldHVybiBsaXN0XG4gIH1cbiAgXG5cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjaW5uZXJIdG1sPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWhpbnRcIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImRlc3ktZXJyb3ItbWVzc2FnZVwiPjwvbmctY29udGVudD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGVzeS1zZWFyY2gtYmFyXCI+PC9uZy1jb250ZW50PlxuICA8dWwgW2F0dHIuaWRdPVwiaWQgPyBpZCA6IG51bGxcIlxuICAgICAgW2F0dHIucm9sZV09XCJyb2xlID8gcm9sZSA6ICd0cmVlJ1wiXG4gICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwidGhpc1wiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gdHJlZSAtLT5cbjxkaXYgW2NsYXNzXT1cIlsnYy1mb3JtLWdyb3VwJywgZm9ybUdyb3VwQ2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICBbbmdDbGFzc109XCJ7J2MtZm9ybS1ncm91cC0tZXJyb3InOiAoaGFzRXJyb3JzTWVzc2FnZSgpIHx8IGZvcm1Hcm91cENsYXNzZXMgPT09ICdjLWZvcm0tZ3JvdXAtLWVycm9yJykgfVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRmllbGRzZXRDb21wb25lbnQoKTsgZWxzZSBpbm5lckh0bWxcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWZpZWxkc2V0XCI+PC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==