ng-tailwind 6.2.0 → 6.4.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.
- package/components/ngt-checkbox/ngt-checkbox.component.d.ts +6 -6
- package/components/ngt-datatable/ngt-datatable.component.d.ts +24 -24
- package/components/ngt-date/ngt-date.component.d.ts +8 -8
- package/components/ngt-dropdown/ngt-dropdown.component.d.ts +6 -6
- package/components/ngt-floating-button/ngt-floating-button.component.d.ts +13 -13
- package/components/ngt-form/ngt-form.component.d.ts +4 -4
- package/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.d.ts +5 -5
- package/components/ngt-popover/ngt-popover.component.d.ts +6 -6
- package/components/ngt-select/ngt-select.component.d.ts +8 -8
- package/components/ngt-shining/ngt-shining.component.d.ts +6 -6
- package/components/ngt-slider/ngt-slider.component.d.ts +6 -6
- package/components/ngt-svg/ngt-svg.module.d.ts +2 -3
- package/fesm2022/ng-tailwind.mjs +464 -455
- package/fesm2022/ng-tailwind.mjs.map +1 -1
- package/package.json +1 -3
- package/services/http/ngt-http-validation.service.d.ts +3 -5
- package/esm2022/animations/ngt-angular-animations.mjs +0 -34
- package/esm2022/base/ngt-base-ng-model.mjs +0 -90
- package/esm2022/components/ngt-action/ngt-action.component.mjs +0 -96
- package/esm2022/components/ngt-action/ngt-action.module.mjs +0 -28
- package/esm2022/components/ngt-button/ngt-button.component.mjs +0 -142
- package/esm2022/components/ngt-button/ngt-button.module.mjs +0 -28
- package/esm2022/components/ngt-checkbox/ngt-checkbox.component.mjs +0 -192
- package/esm2022/components/ngt-checkbox/ngt-checkbox.module.mjs +0 -28
- package/esm2022/components/ngt-content/ngt-content.component.mjs +0 -32
- package/esm2022/components/ngt-content/ngt-content.module.mjs +0 -20
- package/esm2022/components/ngt-context-menu/ngt-context-menu.component.mjs +0 -25
- package/esm2022/components/ngt-context-menu/ngt-context-menu.directive.mjs +0 -89
- package/esm2022/components/ngt-context-menu/ngt-context-menu.module.mjs +0 -33
- package/esm2022/components/ngt-datatable/ngt-datatable.component.mjs +0 -470
- package/esm2022/components/ngt-datatable/ngt-datatable.module.mjs +0 -99
- package/esm2022/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +0 -57
- package/esm2022/components/ngt-datatable/ngt-td/ngt-td.component.mjs +0 -62
- package/esm2022/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +0 -113
- package/esm2022/components/ngt-datatable/ngt-th/ngt-th.component.mjs +0 -228
- package/esm2022/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +0 -127
- package/esm2022/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +0 -55
- package/esm2022/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +0 -86
- package/esm2022/components/ngt-date/ngt-date.component.mjs +0 -436
- package/esm2022/components/ngt-date/ngt-date.module.mjs +0 -40
- package/esm2022/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +0 -19
- package/esm2022/components/ngt-dropdown/ngt-dropdown.component.mjs +0 -205
- package/esm2022/components/ngt-dropdown/ngt-dropdown.module.mjs +0 -21
- package/esm2022/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +0 -54
- package/esm2022/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +0 -66
- package/esm2022/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +0 -94
- package/esm2022/components/ngt-dropzone/ngt-dropzone.component.mjs +0 -496
- package/esm2022/components/ngt-dropzone/ngt-dropzone.meta.mjs +0 -24
- package/esm2022/components/ngt-dropzone/ngt-dropzone.module.mjs +0 -55
- package/esm2022/components/ngt-floating-button/ngt-floating-button.component.mjs +0 -119
- package/esm2022/components/ngt-floating-button/ngt-floating-button.module.mjs +0 -28
- package/esm2022/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +0 -22
- package/esm2022/components/ngt-form/ngt-form.component.mjs +0 -207
- package/esm2022/components/ngt-form/ngt-form.module.mjs +0 -29
- package/esm2022/components/ngt-header-nav/ngt-header-nav.component.mjs +0 -39
- package/esm2022/components/ngt-header-nav/ngt-header-nav.module.mjs +0 -20
- package/esm2022/components/ngt-helper/ngt-helper.component.mjs +0 -69
- package/esm2022/components/ngt-helper/ngt-helper.module.mjs +0 -28
- package/esm2022/components/ngt-input/ngt-input.component.mjs +0 -844
- package/esm2022/components/ngt-input/ngt-input.module.mjs +0 -47
- package/esm2022/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +0 -46
- package/esm2022/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +0 -33
- package/esm2022/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +0 -40
- package/esm2022/components/ngt-modal/ngt-modal.component.mjs +0 -122
- package/esm2022/components/ngt-modal/ngt-modal.module.mjs +0 -39
- package/esm2022/components/ngt-multi-select/ngt-multi-select.component.mjs +0 -503
- package/esm2022/components/ngt-multi-select/ngt-multi-select.module.mjs +0 -52
- package/esm2022/components/ngt-pagination/ngt-pagination.component.mjs +0 -162
- package/esm2022/components/ngt-pagination/ngt-pagination.module.mjs +0 -36
- package/esm2022/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +0 -59
- package/esm2022/components/ngt-popover/ngt-popover.component.mjs +0 -85
- package/esm2022/components/ngt-popover/ngt-popover.directive.mjs +0 -130
- package/esm2022/components/ngt-popover/ngt-popover.module.mjs +0 -36
- package/esm2022/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +0 -34
- package/esm2022/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +0 -35
- package/esm2022/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +0 -57
- package/esm2022/components/ngt-portlet/ngt-portlet.component.mjs +0 -74
- package/esm2022/components/ngt-portlet/ngt-portlet.module.mjs +0 -47
- package/esm2022/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +0 -19
- package/esm2022/components/ngt-radio-button/ngt-radio-button.component.mjs +0 -153
- package/esm2022/components/ngt-radio-button/ngt-radio-button.module.mjs +0 -29
- package/esm2022/components/ngt-section/ngt-section.component.mjs +0 -151
- package/esm2022/components/ngt-section/ngt-section.module.mjs +0 -32
- package/esm2022/components/ngt-select/ngt-select.component.mjs +0 -670
- package/esm2022/components/ngt-select/ngt-select.directive.mjs +0 -36
- package/esm2022/components/ngt-select/ngt-select.module.mjs +0 -65
- package/esm2022/components/ngt-shining/ngt-shining.component.mjs +0 -40
- package/esm2022/components/ngt-shining/ngt-shining.module.mjs +0 -20
- package/esm2022/components/ngt-sidenav/ngt-sidenav.component.mjs +0 -132
- package/esm2022/components/ngt-sidenav/ngt-sidenav.module.mjs +0 -20
- package/esm2022/components/ngt-slider/ngt-slider.component.mjs +0 -100
- package/esm2022/components/ngt-slider/ngt-slider.module.mjs +0 -24
- package/esm2022/components/ngt-svg/ngt-svg.component.mjs +0 -53
- package/esm2022/components/ngt-svg/ngt-svg.module.mjs +0 -28
- package/esm2022/components/ngt-tag/ngt-tag.component.mjs +0 -37
- package/esm2022/components/ngt-tag/ngt-tag.module.mjs +0 -24
- package/esm2022/components/ngt-textarea/ngt-textarea.component.mjs +0 -238
- package/esm2022/components/ngt-textarea/ngt-textarea.module.mjs +0 -43
- package/esm2022/components/ngt-validation/ngt-validation.component.mjs +0 -26
- package/esm2022/components/ngt-validation/ngt-validation.module.mjs +0 -20
- package/esm2022/directives/ngt-stylizable/ngt-stylizable.directive.mjs +0 -299
- package/esm2022/directives/ngt-stylizable/ngt-stylizable.module.mjs +0 -20
- package/esm2022/enums/size.enum.mjs +0 -11
- package/esm2022/helpers/enum/enum.mjs +0 -7
- package/esm2022/helpers/form/form.mjs +0 -14
- package/esm2022/helpers/input-mask/input-mask.helper.mjs +0 -26
- package/esm2022/helpers/promise/promise-helper.mjs +0 -4
- package/esm2022/helpers/routing/route.mjs +0 -11
- package/esm2022/helpers/uuid.mjs +0 -10
- package/esm2022/ng-tailwind.mjs +0 -5
- package/esm2022/public-api.mjs +0 -127
- package/esm2022/services/http/ngt-attachment-http.service.mjs +0 -3
- package/esm2022/services/http/ngt-http-form.service.mjs +0 -3
- package/esm2022/services/http/ngt-http-resource.service.mjs +0 -3
- package/esm2022/services/http/ngt-http-validation.service.mjs +0 -3
- package/esm2022/services/http/ngt-http.service.mjs +0 -3
- package/esm2022/services/http/ngt-translate.service.mjs +0 -3
- package/esm2022/services/ngt-stylizable/ngt-stylizable.service.mjs +0 -279
- package/esm2022/services/validation/ngt-ability-validation.service.mjs +0 -3
|
@@ -1,670 +0,0 @@
|
|
|
1
|
-
import { Component, ContentChild, EventEmitter, Host, Input, Optional, Output, Self, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { ControlContainer, NgForm } from '@angular/forms';
|
|
3
|
-
import { NgSelectComponent } from '@ng-select/ng-select';
|
|
4
|
-
import { Observable, Subject } from 'rxjs';
|
|
5
|
-
import { NgtBaseNgModel, NgtMakeProvider } from '../../base/ngt-base-ng-model';
|
|
6
|
-
import { getEnumFromString } from '../../helpers/enum/enum';
|
|
7
|
-
import { uuid } from '../../helpers/uuid';
|
|
8
|
-
import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
|
|
9
|
-
import { NgtSelectHeaderTmp, NgtSelectOptionSelectedTmp, NgtSelectOptionTmp } from './ngt-select.directive';
|
|
10
|
-
import { delay } from '../../helpers/promise/promise-helper';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "../../directives/ngt-stylizable/ngt-stylizable.directive";
|
|
13
|
-
import * as i2 from "@angular/forms";
|
|
14
|
-
import * as i3 from "../../services/http/ngt-translate.service";
|
|
15
|
-
import * as i4 from "../../services/http/ngt-http.service";
|
|
16
|
-
import * as i5 from "../ngt-form/ngt-form.component";
|
|
17
|
-
import * as i6 from "../ngt-section/ngt-section.component";
|
|
18
|
-
import * as i7 from "../ngt-modal/ngt-modal.component";
|
|
19
|
-
import * as i8 from "@angular/common";
|
|
20
|
-
import * as i9 from "@ng-select/ng-select";
|
|
21
|
-
import * as i10 from "../ngt-validation/ngt-validation.component";
|
|
22
|
-
import * as i11 from "../ngt-shining/ngt-shining.component";
|
|
23
|
-
import * as i12 from "../ngt-helper/ngt-helper.component";
|
|
24
|
-
import * as i13 from "../ngt-svg/ngt-svg.component";
|
|
25
|
-
export class NgtSelectComponent extends NgtBaseNgModel {
|
|
26
|
-
constructor(ngtStylizableDirective, formContainer, ngtTranslateService, injector, ngtHttp, changeDetector, ngtForm, ngtSection, ngtModal) {
|
|
27
|
-
super();
|
|
28
|
-
this.ngtStylizableDirective = ngtStylizableDirective;
|
|
29
|
-
this.formContainer = formContainer;
|
|
30
|
-
this.ngtTranslateService = ngtTranslateService;
|
|
31
|
-
this.injector = injector;
|
|
32
|
-
this.ngtHttp = ngtHttp;
|
|
33
|
-
this.changeDetector = changeDetector;
|
|
34
|
-
this.ngtForm = ngtForm;
|
|
35
|
-
this.ngtSection = ngtSection;
|
|
36
|
-
this.ngtModal = ngtModal;
|
|
37
|
-
/** Visual */
|
|
38
|
-
this.label = '';
|
|
39
|
-
this.helpTextColor = 'text-green-500';
|
|
40
|
-
this.shining = false;
|
|
41
|
-
this.loading = false;
|
|
42
|
-
this.loadingText = '';
|
|
43
|
-
this.notFoundText = '';
|
|
44
|
-
this.dropdownPosition = 'auto';
|
|
45
|
-
this.typeToSearchText = '';
|
|
46
|
-
this.clearAllTooltip = '';
|
|
47
|
-
this.placeholder = '';
|
|
48
|
-
this.createText = '';
|
|
49
|
-
this.labelForId = '';
|
|
50
|
-
this.dropdownPanelMinHeight = NgtSelectDropdownPanelHeight.AUTO;
|
|
51
|
-
this.helperAutoXReverse = true;
|
|
52
|
-
this.allowCreate = false;
|
|
53
|
-
this.allowOriginalItemsUnselect = true;
|
|
54
|
-
this.isDisabled = false;
|
|
55
|
-
this.isReadonly = false;
|
|
56
|
-
this.bindLabel = 'name';
|
|
57
|
-
this.items = [];
|
|
58
|
-
this.closeOnSelect = true;
|
|
59
|
-
this.clearable = true;
|
|
60
|
-
this.groupBy = null;
|
|
61
|
-
this.multiple = false;
|
|
62
|
-
this.searchable = true;
|
|
63
|
-
this.clearSearchOnAdd = true;
|
|
64
|
-
this.virtualScroll = true;
|
|
65
|
-
this.guessCompareWith = true;
|
|
66
|
-
this.autoSelectUniqueOption = false;
|
|
67
|
-
/** Validation */
|
|
68
|
-
this.isRequired = false;
|
|
69
|
-
this.onLoadRemoteResource = new EventEmitter();
|
|
70
|
-
this.onSelectedItemRemove = new EventEmitter();
|
|
71
|
-
this.onClear = new EventEmitter();
|
|
72
|
-
this.onClose = new EventEmitter();
|
|
73
|
-
this.nativeName = uuid();
|
|
74
|
-
this.componentReady = false;
|
|
75
|
-
this.originalPerPage = 15;
|
|
76
|
-
this.subscriptions = [];
|
|
77
|
-
this.currentState = {
|
|
78
|
-
filters: {},
|
|
79
|
-
sort: {
|
|
80
|
-
field: '',
|
|
81
|
-
direction: ''
|
|
82
|
-
},
|
|
83
|
-
pagination: {
|
|
84
|
-
count: null,
|
|
85
|
-
page: 1,
|
|
86
|
-
pages: null,
|
|
87
|
-
total: null,
|
|
88
|
-
from: null,
|
|
89
|
-
to: null,
|
|
90
|
-
per_page: null
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
this.compareWith = (a, b) => a === b;
|
|
94
|
-
this.itemSearchFn = (term, item) => {
|
|
95
|
-
if (this.remoteResource) {
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
let formattedValue;
|
|
99
|
-
if (typeof item == 'string') {
|
|
100
|
-
formattedValue = item;
|
|
101
|
-
}
|
|
102
|
-
if (!this.bindLabel) {
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
if (typeof item['getAttribute'] == 'function') {
|
|
106
|
-
formattedValue = item.getAttribute([this.bindLabel]);
|
|
107
|
-
}
|
|
108
|
-
else if (typeof item == 'object') {
|
|
109
|
-
formattedValue = item[this.bindLabel];
|
|
110
|
-
}
|
|
111
|
-
return formattedValue
|
|
112
|
-
? formattedValue.toLocaleLowerCase().includes(term.toLocaleLowerCase())
|
|
113
|
-
: null;
|
|
114
|
-
};
|
|
115
|
-
if (this.ngtStylizableDirective) {
|
|
116
|
-
this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
this.ngtStyle = new NgtStylizableService();
|
|
120
|
-
}
|
|
121
|
-
this.ngtStyle.load(this.injector, 'NgtSelect', {
|
|
122
|
-
h: 'h-12',
|
|
123
|
-
text: 'text-sm',
|
|
124
|
-
fontCase: '',
|
|
125
|
-
color: {
|
|
126
|
-
bg: 'bg-white'
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
ngOnInit() {
|
|
131
|
-
if (!this.formContainer) {
|
|
132
|
-
console.error("The element must be inside a <form #form='ngForm'> tag!");
|
|
133
|
-
}
|
|
134
|
-
if (!this.name) {
|
|
135
|
-
console.error("The element must contain a name attribute!");
|
|
136
|
-
}
|
|
137
|
-
if (!this.multiple && this.isRequired) {
|
|
138
|
-
this.clearable = false;
|
|
139
|
-
}
|
|
140
|
-
if (this.multiple) {
|
|
141
|
-
this.closeOnSelect = false;
|
|
142
|
-
}
|
|
143
|
-
setTimeout(() => {
|
|
144
|
-
this.componentReady = true;
|
|
145
|
-
this.initComponentValidation();
|
|
146
|
-
}, 500);
|
|
147
|
-
this.ngSelectItems = new Observable((observer) => {
|
|
148
|
-
this.ngSearchObserver = observer;
|
|
149
|
-
observer.next([]);
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
ngAfterViewInit() {
|
|
153
|
-
this.bindInnerInputUniqueId();
|
|
154
|
-
this.bindSubscriptions();
|
|
155
|
-
}
|
|
156
|
-
ngOnChanges(changes) {
|
|
157
|
-
if (changes.isRequired) {
|
|
158
|
-
this.updateValidations();
|
|
159
|
-
}
|
|
160
|
-
if (changes.remoteResource || changes.items) {
|
|
161
|
-
this.initNgSelectItems();
|
|
162
|
-
}
|
|
163
|
-
if (changes.dropdownPanelMinHeight) {
|
|
164
|
-
this.dropdownPanelMinHeight = getEnumFromString(changes.dropdownPanelMinHeight.currentValue, NgtSelectDropdownPanelHeight);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
ngDoCheck() {
|
|
168
|
-
if (!this.hadFirstItemsLoad && this.canLoadItems()) {
|
|
169
|
-
this.hadFirstItemsLoad = true;
|
|
170
|
-
this.initNgSelectItems();
|
|
171
|
-
setTimeout(() => {
|
|
172
|
-
this.replaceShowAddTag();
|
|
173
|
-
this.ngSelectComponent.itemsList.mapSelectedItems();
|
|
174
|
-
if (!this.getElementTitle() || this.getElementTitle() === 'null') {
|
|
175
|
-
this.ngSelectComponent.element.parentElement.parentElement.parentElement.title = '';
|
|
176
|
-
}
|
|
177
|
-
this.originalItems = this.ngSelectComponent.selectedItems?.map((element) => element.value);
|
|
178
|
-
this.changeDetector.detectChanges();
|
|
179
|
-
}, 500);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
ngOnDestroy() {
|
|
183
|
-
this.destroySubscriptions();
|
|
184
|
-
}
|
|
185
|
-
onOpen() {
|
|
186
|
-
const parentElements = document.querySelectorAll('#ngtSelectParentContainer');
|
|
187
|
-
if (this.dropdownPosition == 'auto' && parentElements?.length) {
|
|
188
|
-
const parentContainer = parentElements[parentElements.length - 1];
|
|
189
|
-
this.calculateDropdownPosition(parentContainer);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
removeItem(event, item) {
|
|
193
|
-
event.preventDefault();
|
|
194
|
-
event.stopPropagation();
|
|
195
|
-
return this.ngSelectComponent.clearItem(item);
|
|
196
|
-
}
|
|
197
|
-
refresh() {
|
|
198
|
-
this.initNgSelectItems();
|
|
199
|
-
this.initComponentValidation();
|
|
200
|
-
}
|
|
201
|
-
reset() {
|
|
202
|
-
this.value = undefined;
|
|
203
|
-
this.nativeValue = undefined;
|
|
204
|
-
this.refresh();
|
|
205
|
-
}
|
|
206
|
-
setFocus() {
|
|
207
|
-
setTimeout(() => {
|
|
208
|
-
this.ngSelectComponent.focus();
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
onClearSelect() {
|
|
212
|
-
if (!this.nativeValue) {
|
|
213
|
-
this.markAsPristine();
|
|
214
|
-
}
|
|
215
|
-
this.currentState.filters = {};
|
|
216
|
-
this.onClear.emit();
|
|
217
|
-
}
|
|
218
|
-
onRemoveSelectedItem(item) {
|
|
219
|
-
if (this.cantRemoveItem(item.value)) {
|
|
220
|
-
setTimeout(() => this.ngSelectComponent.select(item));
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
this.onSelectedItemRemove.emit(item.value);
|
|
224
|
-
}
|
|
225
|
-
getFilterInputValue() {
|
|
226
|
-
let inputField = this.ngSelectComponent.searchInput ?
|
|
227
|
-
this.ngSelectComponent.searchInput :
|
|
228
|
-
this.ngSelectComponent['searchInput'];
|
|
229
|
-
if (inputField &&
|
|
230
|
-
inputField.nativeElement) {
|
|
231
|
-
return inputField.nativeElement.value;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
search(filters) {
|
|
235
|
-
this.currentState.filters = { ...this.currentState.filters, ...filters };
|
|
236
|
-
if (!this.remoteResource) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
if (this.searchTimeout) {
|
|
240
|
-
clearTimeout(this.searchTimeout);
|
|
241
|
-
}
|
|
242
|
-
this.loading = true;
|
|
243
|
-
this.changeDetector.detectChanges();
|
|
244
|
-
this.searchTimeout = setTimeout(() => {
|
|
245
|
-
this.subscriptions.push(this.ngtHttp
|
|
246
|
-
.get(this.remoteResource, this.currentState.filters, this.currentState.pagination)
|
|
247
|
-
.subscribe((response) => {
|
|
248
|
-
this.loading = false;
|
|
249
|
-
this.bindCompareWithByResponse(response);
|
|
250
|
-
this.ngSearchObserver.next(response.data);
|
|
251
|
-
if (this.canAutoSelectUniqueOption(response)) {
|
|
252
|
-
this.onNativeChange(response.data[0]);
|
|
253
|
-
}
|
|
254
|
-
this.onLoadRemoteResource.emit(response.data);
|
|
255
|
-
this.currentState.pagination = response.meta.pagination;
|
|
256
|
-
this.changeDetector.detectChanges();
|
|
257
|
-
}, (error) => {
|
|
258
|
-
this.loading = false;
|
|
259
|
-
this.changeDetector.detectChanges();
|
|
260
|
-
console.error(error);
|
|
261
|
-
this.ngSearchObserver.next([]);
|
|
262
|
-
}));
|
|
263
|
-
}, 500);
|
|
264
|
-
}
|
|
265
|
-
onNativeChange(value) {
|
|
266
|
-
if (this.hasChangesBetweenModels(this.value, value)) {
|
|
267
|
-
this.value = this.sortSelectedItems(value);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
change(value) {
|
|
271
|
-
if (this.hasChangesBetweenModels(value, this.nativeValue)) {
|
|
272
|
-
if (Array.isArray(value)) {
|
|
273
|
-
value = value.map((val) => val);
|
|
274
|
-
}
|
|
275
|
-
this.nativeValue = this.sortSelectedItems(value);
|
|
276
|
-
if (!value) {
|
|
277
|
-
this.markAsPristine();
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
onScroll({ end }) {
|
|
282
|
-
let currentPerPage = this.currentState.pagination.per_page;
|
|
283
|
-
let maxItensInBackend = this.currentState.pagination.total;
|
|
284
|
-
if (end >= currentPerPage && end <= maxItensInBackend) {
|
|
285
|
-
this.currentState.pagination.per_page = parseInt(this.currentState.pagination.per_page) + this.originalPerPage;
|
|
286
|
-
this.search({});
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
hasSelectedValue() {
|
|
290
|
-
return this.value && JSON.stringify(this.value);
|
|
291
|
-
}
|
|
292
|
-
cantRemoveItem(itemValue) {
|
|
293
|
-
return (!this.allowOriginalItemsUnselect && this.hadPreviousSelection(itemValue))
|
|
294
|
-
|| (this.isAllowedToRemoveFn && !this.isAllowedToRemoveFn(itemValue));
|
|
295
|
-
}
|
|
296
|
-
getSelectClass() {
|
|
297
|
-
let selectClass = this.dropdownPanelMinHeight ? 'ng-select-dropdown-panel-' + this.dropdownPanelMinHeight : 'ng-select-dropdown-panel-auto';
|
|
298
|
-
if (this.disabled()) {
|
|
299
|
-
selectClass += ' select-border-disabled';
|
|
300
|
-
}
|
|
301
|
-
else if (this.formControl && this.formControl.errors && (this.formControl.dirty || (this.formContainer && this.formContainer['submitted']))) {
|
|
302
|
-
selectClass += ' select-border-error';
|
|
303
|
-
}
|
|
304
|
-
else {
|
|
305
|
-
selectClass += ' select-border-normal';
|
|
306
|
-
}
|
|
307
|
-
if (this.multiple) {
|
|
308
|
-
selectClass += ` h-auto ${this.ngtStyle.compile(['color.bg', 'color.text'])}`;
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
selectClass += ` ${this.ngtStyle.compile(['h', 'color.bg', 'color.text'])}`;
|
|
312
|
-
}
|
|
313
|
-
return selectClass;
|
|
314
|
-
}
|
|
315
|
-
disabled() {
|
|
316
|
-
return this.isDisabled || this.isDisabledByParent();
|
|
317
|
-
}
|
|
318
|
-
async calculateDropdownPosition(parentContainer) {
|
|
319
|
-
while (!this.componentReady || this.loading || this.ngSelectComponent.showNoItemsFound()) {
|
|
320
|
-
await delay(200);
|
|
321
|
-
if (this.ngSelectComponent.showNoItemsFound() && !this.loading && this.componentReady) {
|
|
322
|
-
break;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
this.changeDetector.detectChanges();
|
|
326
|
-
setTimeout(() => {
|
|
327
|
-
const ngSelectElement = this.ngSelectComponent.element;
|
|
328
|
-
const ngSelectHeight = ngSelectElement.offsetHeight;
|
|
329
|
-
const ngSelectYPosition = ngSelectElement.getBoundingClientRect().y;
|
|
330
|
-
const dropdownHeight = this.ngSelectComponent.dropdownPanel.contentElementRef.nativeElement.offsetHeight;
|
|
331
|
-
const openedSelectHeight = ngSelectHeight + dropdownHeight;
|
|
332
|
-
const parentYPosition = parentContainer.getBoundingClientRect().y;
|
|
333
|
-
const ngSelectYPositionInsideParent = ngSelectYPosition - parentYPosition;
|
|
334
|
-
const openedSelectTotalHeight = openedSelectHeight + ngSelectYPositionInsideParent;
|
|
335
|
-
const parentContainerHeight = parentContainer.clientHeight;
|
|
336
|
-
const fitsOnTop = openedSelectHeight < ngSelectYPositionInsideParent;
|
|
337
|
-
const fitsOnBottom = openedSelectTotalHeight < parentContainerHeight;
|
|
338
|
-
const dropdownPosition = !fitsOnBottom && fitsOnTop
|
|
339
|
-
? 'top'
|
|
340
|
-
: 'bottom';
|
|
341
|
-
this.ngSelectComponent.dropdownPanel['_currentPosition'] = dropdownPosition;
|
|
342
|
-
this.ngSelectComponent.dropdownPanel['_updateDropdownClass'](dropdownPosition);
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
initNgSelectItems() {
|
|
346
|
-
if (this.remoteResource && this.canLoadItems()) {
|
|
347
|
-
this.ngSelectItems = new Observable(observer => {
|
|
348
|
-
this.ngSearchObserver = observer;
|
|
349
|
-
this.search({});
|
|
350
|
-
});
|
|
351
|
-
this.typeahead = new Subject();
|
|
352
|
-
this.subscriptions.push(this.typeahead.subscribe((term) => {
|
|
353
|
-
this.search({ term: term });
|
|
354
|
-
}));
|
|
355
|
-
}
|
|
356
|
-
else if (this.items instanceof Observable) {
|
|
357
|
-
this.ngSelectItems = this.items;
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
360
|
-
if (!this.items) {
|
|
361
|
-
this.items = [];
|
|
362
|
-
}
|
|
363
|
-
if (this.canAutoSelectUniqueOption()) {
|
|
364
|
-
this.onNativeChange(this.items[0]);
|
|
365
|
-
}
|
|
366
|
-
this.ngSelectItems = new Observable((observer) => {
|
|
367
|
-
this.ngSearchObserver = observer;
|
|
368
|
-
observer.next(this.items);
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
initComponentValidation() {
|
|
373
|
-
if (this.formContainer && this.formContainer.control && (this.formControl = this.formContainer.control.get(this.name))) {
|
|
374
|
-
this.formControl = this.formContainer.control.get(this.name);
|
|
375
|
-
this.markAsPristine();
|
|
376
|
-
this.updateValidations();
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
sortSelectedItems(value) {
|
|
380
|
-
if (this.sortSelectedItemsFn && value instanceof Array && value.length > 1) {
|
|
381
|
-
return value.sort((a, b) => this.sortSelectedItemsFn(a, b));
|
|
382
|
-
}
|
|
383
|
-
return value;
|
|
384
|
-
}
|
|
385
|
-
getElementTitle() {
|
|
386
|
-
return this.ngSelectComponent.element.parentElement.parentElement.parentElement.title;
|
|
387
|
-
}
|
|
388
|
-
hasChangesBetweenModels(value, nativeValue) {
|
|
389
|
-
return JSON.stringify(value) !== JSON.stringify(nativeValue);
|
|
390
|
-
}
|
|
391
|
-
updateValidations() {
|
|
392
|
-
if (!this.formControl) {
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
let syncValidators = [];
|
|
396
|
-
if (this.isRequired) {
|
|
397
|
-
syncValidators.push(this.isRequiredValidator());
|
|
398
|
-
}
|
|
399
|
-
setTimeout(() => {
|
|
400
|
-
this.formControl.setValidators(syncValidators);
|
|
401
|
-
this.formControl.updateValueAndValidity();
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
isRequiredValidator() {
|
|
405
|
-
return (control) => {
|
|
406
|
-
if (this.multiple) {
|
|
407
|
-
if (Array.isArray(this.value) && this.value.length > 0) {
|
|
408
|
-
return null;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
else if (control.value && JSON.stringify(control.value)) {
|
|
412
|
-
return null;
|
|
413
|
-
}
|
|
414
|
-
return { 'required': true };
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
replaceShowAddTag() {
|
|
418
|
-
Object.defineProperty(this.ngSelectComponent, 'showAddTag', {
|
|
419
|
-
get: () => {
|
|
420
|
-
if (!this.ngSelectComponent['searchTerm']) {
|
|
421
|
-
return false;
|
|
422
|
-
}
|
|
423
|
-
const term = this.ngSelectComponent['searchTerm'].toLocaleLowerCase();
|
|
424
|
-
return this.ngSelectComponent.addTag && !this.ngSelectComponent.loading
|
|
425
|
-
&& (!this.hasTermInFilteredItems(term) && (!this.hasTermInSelectedItems(term)
|
|
426
|
-
|| !this.ngSelectComponent.hideSelected && this.ngSelectComponent.isOpen));
|
|
427
|
-
}
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
bindInnerInputUniqueId() {
|
|
431
|
-
const childInputs = this.ngSelectComponent.element.getElementsByTagName('input');
|
|
432
|
-
if (childInputs?.length) {
|
|
433
|
-
const innerInput = childInputs[0];
|
|
434
|
-
innerInput.id = uuid();
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
bindCompareWithByResponse(response) {
|
|
438
|
-
if (this.guessCompareWith) {
|
|
439
|
-
if (response.data?.length && typeof response.data[0]['getApiId'] === 'function') {
|
|
440
|
-
this.compareWith = (a, b) => a.getApiId() == b.getApiId();
|
|
441
|
-
}
|
|
442
|
-
else {
|
|
443
|
-
this.compareWith = (a, b) => a === b;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
hasTermInFilteredItems(term) {
|
|
448
|
-
const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
|
|
449
|
-
if (filteredItems?.length && this.isColoquentResource()) {
|
|
450
|
-
return filteredItems.some((element) => {
|
|
451
|
-
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
452
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
return filteredItems.some((element) => {
|
|
456
|
-
const elementValue = element.value[this.bindLabel];
|
|
457
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
458
|
-
});
|
|
459
|
-
}
|
|
460
|
-
hasTermInSelectedItems(term) {
|
|
461
|
-
const selectedItems = this.ngSelectComponent.selectedItems;
|
|
462
|
-
if (selectedItems?.length && this.isColoquentResource()) {
|
|
463
|
-
return selectedItems.some((element) => {
|
|
464
|
-
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
465
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
return selectedItems.some((element) => {
|
|
469
|
-
const elementValue = element.value[this.bindLabel];
|
|
470
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
hadPreviousSelection(item) {
|
|
474
|
-
return !!this.originalItems?.find(element => this.compareWith(element, item));
|
|
475
|
-
}
|
|
476
|
-
isColoquentResource() {
|
|
477
|
-
const items = this.ngSelectComponent.itemsList.items;
|
|
478
|
-
return items?.length && typeof items[0].value['getAttribute'] === 'function';
|
|
479
|
-
}
|
|
480
|
-
canLoadItems() {
|
|
481
|
-
return this.autoLoad || (!this.disabled() && this.wasClicked);
|
|
482
|
-
}
|
|
483
|
-
canAutoSelectUniqueOption(response) {
|
|
484
|
-
return !this.value && this.autoSelectUniqueOption
|
|
485
|
-
&& ((Array.isArray(response?.data) && response?.data?.length === 1)
|
|
486
|
-
|| (!response && Array.isArray(this.items) && this.items?.length == 1));
|
|
487
|
-
}
|
|
488
|
-
bindSubscriptions() {
|
|
489
|
-
if (this.ngtForm) {
|
|
490
|
-
this.shining = this.ngtForm.isShining();
|
|
491
|
-
this.subscriptions.push(this.ngtForm.onShiningChange.subscribe((shining) => {
|
|
492
|
-
this.shining = shining;
|
|
493
|
-
}));
|
|
494
|
-
}
|
|
495
|
-
this.changeDetector.detectChanges();
|
|
496
|
-
}
|
|
497
|
-
isDisabledByParent() {
|
|
498
|
-
return this.ngtForm?.isDisabled
|
|
499
|
-
|| this.ngtSection?.isDisabled
|
|
500
|
-
|| this.ngtModal?.isDisabled;
|
|
501
|
-
}
|
|
502
|
-
destroySubscriptions() {
|
|
503
|
-
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
504
|
-
this.subscriptions = [];
|
|
505
|
-
}
|
|
506
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtSelectComponent, deps: [{ token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtTranslateService, optional: true }, { token: i0.Injector }, { token: i4.NgtHttpService }, { token: i0.ChangeDetectorRef }, { token: i5.NgtFormComponent, optional: true, skipSelf: true }, { token: i6.NgtSectionComponent, optional: true, skipSelf: true }, { token: i7.NgtModalComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
507
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NgtSelectComponent, selector: "ngt-select", inputs: { label: "label", labelIcon: "labelIcon", labelIconColor: "labelIconColor", helpTitle: "helpTitle", helpText: "helpText", helpTextColor: "helpTextColor", shining: "shining", loading: "loading", loadingText: "loadingText", notFoundText: "notFoundText", dropdownPosition: "dropdownPosition", typeToSearchText: "typeToSearchText", clearAllTooltip: "clearAllTooltip", placeholder: "placeholder", createText: "createText", labelForId: "labelForId", dropdownPanelMinHeight: "dropdownPanelMinHeight", helperReverseYPosition: "helperReverseYPosition", helperAutoXReverse: "helperAutoXReverse", name: "name", autoLoad: "autoLoad", allowCreate: "allowCreate", allowOriginalItemsUnselect: "allowOriginalItemsUnselect", isDisabled: "isDisabled", isReadonly: "isReadonly", remoteResource: "remoteResource", hideSelected: "hideSelected", bindLabel: "bindLabel", bindValue: "bindValue", items: "items", inputAttrs: "inputAttrs", closeOnSelect: "closeOnSelect", clearable: "clearable", groupBy: "groupBy", maxSelectedItems: "maxSelectedItems", multiple: "multiple", searchable: "searchable", clearSearchOnAdd: "clearSearchOnAdd", virtualScroll: "virtualScroll", tabIndex: "tabIndex", typeahead: "typeahead", guessCompareWith: "guessCompareWith", autoSelectUniqueOption: "autoSelectUniqueOption", groupValue: "groupValue", trackBy: "trackBy", sortSelectedItemsFn: "sortSelectedItemsFn", isAllowedToRemoveFn: "isAllowedToRemoveFn", isRequired: "isRequired", compareWith: "compareWith" }, outputs: { onLoadRemoteResource: "onLoadRemoteResource", onSelectedItemRemove: "onSelectedItemRemove", onClear: "onClear", onClose: "onClose" }, providers: [
|
|
508
|
-
NgtMakeProvider(NgtSelectComponent)
|
|
509
|
-
], queries: [{ propertyName: "ngtOptionTemplate", first: true, predicate: NgtSelectOptionTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtOptionSelectedTemplate", first: true, predicate: NgtSelectOptionSelectedTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtSelectHeaderTemplate", first: true, predicate: NgtSelectHeaderTmp, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelectComponent", first: true, predicate: NgSelectComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ ngtStyle.compile(['text']) }} {{ getSelectClass() }} normal-case\"\n style=\"min-height: 2.5rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [searchFn]=\"itemSearchFn\" [disabled]='disabled() || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\" (close)=\"onClose.emit()\"\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\n (open)=\"onOpen()\" (click)=\"wasClicked = true\">\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple && !cantRemoveItem(item)\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:2.5rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i9.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i9.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i9.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: i10.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i11.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i12.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }, { kind: "component", type: i13.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }], viewProviders: [
|
|
510
|
-
{ provide: ControlContainer, useExisting: NgForm }
|
|
511
|
-
], encapsulation: i0.ViewEncapsulation.None }); }
|
|
512
|
-
}
|
|
513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NgtSelectComponent, decorators: [{
|
|
514
|
-
type: Component,
|
|
515
|
-
args: [{ selector: 'ngt-select', providers: [
|
|
516
|
-
NgtMakeProvider(NgtSelectComponent)
|
|
517
|
-
], viewProviders: [
|
|
518
|
-
{ provide: ControlContainer, useExisting: NgForm }
|
|
519
|
-
], encapsulation: ViewEncapsulation.None, template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ ngtStyle.compile(['text']) }} {{ getSelectClass() }} normal-case\"\n style=\"min-height: 2.5rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [searchFn]=\"itemSearchFn\" [disabled]='disabled() || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\" (close)=\"onClose.emit()\"\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\n (open)=\"onOpen()\" (click)=\"wasClicked = true\">\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple && !cantRemoveItem(item)\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:2.5rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"] }]
|
|
520
|
-
}], ctorParameters: () => [{ type: i1.NgtStylizableDirective, decorators: [{
|
|
521
|
-
type: Optional
|
|
522
|
-
}, {
|
|
523
|
-
type: Self
|
|
524
|
-
}] }, { type: i2.ControlContainer, decorators: [{
|
|
525
|
-
type: Optional
|
|
526
|
-
}, {
|
|
527
|
-
type: Host
|
|
528
|
-
}] }, { type: i3.NgtTranslateService, decorators: [{
|
|
529
|
-
type: Optional
|
|
530
|
-
}] }, { type: i0.Injector }, { type: i4.NgtHttpService }, { type: i0.ChangeDetectorRef }, { type: i5.NgtFormComponent, decorators: [{
|
|
531
|
-
type: Optional
|
|
532
|
-
}, {
|
|
533
|
-
type: SkipSelf
|
|
534
|
-
}] }, { type: i6.NgtSectionComponent, decorators: [{
|
|
535
|
-
type: Optional
|
|
536
|
-
}, {
|
|
537
|
-
type: SkipSelf
|
|
538
|
-
}] }, { type: i7.NgtModalComponent, decorators: [{
|
|
539
|
-
type: Optional
|
|
540
|
-
}, {
|
|
541
|
-
type: SkipSelf
|
|
542
|
-
}] }], propDecorators: { ngSelectComponent: [{
|
|
543
|
-
type: ViewChild,
|
|
544
|
-
args: [NgSelectComponent, { static: true }]
|
|
545
|
-
}], ngtOptionTemplate: [{
|
|
546
|
-
type: ContentChild,
|
|
547
|
-
args: [NgtSelectOptionTmp, { read: TemplateRef }]
|
|
548
|
-
}], ngtOptionSelectedTemplate: [{
|
|
549
|
-
type: ContentChild,
|
|
550
|
-
args: [NgtSelectOptionSelectedTmp, { read: TemplateRef }]
|
|
551
|
-
}], ngtSelectHeaderTemplate: [{
|
|
552
|
-
type: ContentChild,
|
|
553
|
-
args: [NgtSelectHeaderTmp, { read: TemplateRef }]
|
|
554
|
-
}], label: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], labelIcon: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], labelIconColor: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], helpTitle: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}], helpText: [{
|
|
563
|
-
type: Input
|
|
564
|
-
}], helpTextColor: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], shining: [{
|
|
567
|
-
type: Input
|
|
568
|
-
}], loading: [{
|
|
569
|
-
type: Input
|
|
570
|
-
}], loadingText: [{
|
|
571
|
-
type: Input
|
|
572
|
-
}], notFoundText: [{
|
|
573
|
-
type: Input
|
|
574
|
-
}], dropdownPosition: [{
|
|
575
|
-
type: Input
|
|
576
|
-
}], typeToSearchText: [{
|
|
577
|
-
type: Input
|
|
578
|
-
}], clearAllTooltip: [{
|
|
579
|
-
type: Input
|
|
580
|
-
}], placeholder: [{
|
|
581
|
-
type: Input
|
|
582
|
-
}], createText: [{
|
|
583
|
-
type: Input
|
|
584
|
-
}], labelForId: [{
|
|
585
|
-
type: Input
|
|
586
|
-
}], dropdownPanelMinHeight: [{
|
|
587
|
-
type: Input
|
|
588
|
-
}], helperReverseYPosition: [{
|
|
589
|
-
type: Input
|
|
590
|
-
}], helperAutoXReverse: [{
|
|
591
|
-
type: Input
|
|
592
|
-
}], name: [{
|
|
593
|
-
type: Input
|
|
594
|
-
}], autoLoad: [{
|
|
595
|
-
type: Input
|
|
596
|
-
}], allowCreate: [{
|
|
597
|
-
type: Input
|
|
598
|
-
}], allowOriginalItemsUnselect: [{
|
|
599
|
-
type: Input
|
|
600
|
-
}], isDisabled: [{
|
|
601
|
-
type: Input
|
|
602
|
-
}], isReadonly: [{
|
|
603
|
-
type: Input
|
|
604
|
-
}], remoteResource: [{
|
|
605
|
-
type: Input
|
|
606
|
-
}], hideSelected: [{
|
|
607
|
-
type: Input
|
|
608
|
-
}], bindLabel: [{
|
|
609
|
-
type: Input
|
|
610
|
-
}], bindValue: [{
|
|
611
|
-
type: Input
|
|
612
|
-
}], items: [{
|
|
613
|
-
type: Input
|
|
614
|
-
}], inputAttrs: [{
|
|
615
|
-
type: Input
|
|
616
|
-
}], closeOnSelect: [{
|
|
617
|
-
type: Input
|
|
618
|
-
}], clearable: [{
|
|
619
|
-
type: Input
|
|
620
|
-
}], groupBy: [{
|
|
621
|
-
type: Input
|
|
622
|
-
}], maxSelectedItems: [{
|
|
623
|
-
type: Input
|
|
624
|
-
}], multiple: [{
|
|
625
|
-
type: Input
|
|
626
|
-
}], searchable: [{
|
|
627
|
-
type: Input
|
|
628
|
-
}], clearSearchOnAdd: [{
|
|
629
|
-
type: Input
|
|
630
|
-
}], virtualScroll: [{
|
|
631
|
-
type: Input
|
|
632
|
-
}], tabIndex: [{
|
|
633
|
-
type: Input
|
|
634
|
-
}], typeahead: [{
|
|
635
|
-
type: Input
|
|
636
|
-
}], guessCompareWith: [{
|
|
637
|
-
type: Input
|
|
638
|
-
}], autoSelectUniqueOption: [{
|
|
639
|
-
type: Input
|
|
640
|
-
}], groupValue: [{
|
|
641
|
-
type: Input
|
|
642
|
-
}], trackBy: [{
|
|
643
|
-
type: Input
|
|
644
|
-
}], sortSelectedItemsFn: [{
|
|
645
|
-
type: Input
|
|
646
|
-
}], isAllowedToRemoveFn: [{
|
|
647
|
-
type: Input
|
|
648
|
-
}], isRequired: [{
|
|
649
|
-
type: Input
|
|
650
|
-
}], onLoadRemoteResource: [{
|
|
651
|
-
type: Output
|
|
652
|
-
}], onSelectedItemRemove: [{
|
|
653
|
-
type: Output
|
|
654
|
-
}], onClear: [{
|
|
655
|
-
type: Output
|
|
656
|
-
}], onClose: [{
|
|
657
|
-
type: Output
|
|
658
|
-
}], compareWith: [{
|
|
659
|
-
type: Input
|
|
660
|
-
}] } });
|
|
661
|
-
export var NgtSelectDropdownPanelHeight;
|
|
662
|
-
(function (NgtSelectDropdownPanelHeight) {
|
|
663
|
-
NgtSelectDropdownPanelHeight["AUTO"] = "auto";
|
|
664
|
-
NgtSelectDropdownPanelHeight["XS"] = "xs";
|
|
665
|
-
NgtSelectDropdownPanelHeight["MD"] = "md";
|
|
666
|
-
NgtSelectDropdownPanelHeight["SM"] = "sm";
|
|
667
|
-
NgtSelectDropdownPanelHeight["LG"] = "lg";
|
|
668
|
-
NgtSelectDropdownPanelHeight["XL"] = "xl";
|
|
669
|
-
})(NgtSelectDropdownPanelHeight || (NgtSelectDropdownPanelHeight = {}));
|
|
670
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlbGVjdC9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBOEIsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsVUFBVSxFQUFZLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFHNUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFjN0Qs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QkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLG1CQUFtQjtzQkFBbEMsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBR1UsVUFBVTtzQkFBekIsS0FBSztnQkFFVyxvQkFBb0I7c0JBQXBDLE1BQU07Z0JBQ1Usb0JBQW9CO3NCQUFwQyxNQUFNO2dCQUNVLE9BQU87c0JBQXZCLE1BQU07Z0JBQ1UsT0FBTztzQkFBdkIsTUFBTTtnQkEyRVMsV0FBVztzQkFBMUIsS0FBSzs7QUE0Z0JWLE1BQU0sQ0FBTixJQUFZLDRCQU9YO0FBUEQsV0FBWSw0QkFBNEI7SUFDcEMsNkNBQWEsQ0FBQTtJQUNiLHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0FBQ2IsQ0FBQyxFQVBXLDRCQUE0QixLQUE1Qiw0QkFBNEIsUUFPdkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRG9DaGVjayxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERyb3Bkb3duUG9zaXRpb24sIE5nT3B0aW9uLCBOZ1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd0QmFzZU5nTW9kZWwsIE5ndE1ha2VQcm92aWRlciB9IGZyb20gJy4uLy4uL2Jhc2Uvbmd0LWJhc2UtbmctbW9kZWwnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IGdldEVudW1Gcm9tU3RyaW5nIH0gZnJvbSAnLi4vLi4vaGVscGVycy9lbnVtL2VudW0nO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXVpZCc7XG5pbXBvcnQgeyBOZ3RIdHRwUmVzcG9uc2UsIE5ndEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL25ndC1mb3JtL25ndC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3RTZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LXNlY3Rpb24vbmd0LXNlY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5ndFNlbGVjdEhlYWRlclRtcCwgTmd0U2VsZWN0T3B0aW9uU2VsZWN0ZWRUbXAsIE5ndFNlbGVjdE9wdGlvblRtcCB9IGZyb20gJy4vbmd0LXNlbGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmd0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtbW9kYWwvbmd0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcHJvbWlzZS9wcm9taXNlLWhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0U2VsZWN0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIERvQ2hlY2sge1xuICAgIEBWaWV3Q2hpbGQoTmdTZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBuZ1NlbGVjdENvbXBvbmVudDogTmdTZWxlY3RDb21wb25lbnQ7XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RPcHRpb25UbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoTmd0U2VsZWN0T3B0aW9uU2VsZWN0ZWRUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RIZWFkZXJUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndFNlbGVjdEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFZpc3VhbCAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbEljb25Db2xvcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHRDb2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNTAwJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgbm90Rm91bmRUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbiA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZVRvU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyQWxsVG9vbHRpcDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsRm9ySWQ6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93blBhbmVsTWluSGVpZ2h0OiBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0ID0gTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodC5BVVRPO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwZXJSZXZlcnNlWVBvc2l0aW9uOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwZXJBdXRvWFJldmVyc2U6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqIEJlaGF2aW9yICovXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93Q3JlYXRlOiBib29sZWFuIHwgUHJvbWlzZTxhbnk+IHwgRnVuY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVtb3RlUmVzb3VyY2U6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZVNlbGVjdGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBiaW5kTGFiZWw6IHN0cmluZyA9ICduYW1lJztcbiAgICBASW5wdXQoKSBwdWJsaWMgYmluZFZhbHVlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zOiBBcnJheTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+ID0gW107XG4gICAgQElucHV0KCkgcHVibGljIGlucHV0QXR0cnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgQElucHV0KCkgcHVibGljIGNsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cEJ5OiBzdHJpbmcgfCBGdW5jdGlvbiA9IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIG1heFNlbGVjdGVkSXRlbXM6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyU2VhcmNoT25BZGQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgdGFiSW5kZXg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZWFoZWFkOiBTdWJqZWN0PGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGd1ZXNzQ29tcGFyZVdpdGg6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhdXRvU2VsZWN0VW5pcXVlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGdyb3VwVmFsdWU6IChncm91cEtleTogc3RyaW5nLCBjaWxkcmVuOiBhbnlbXSkgPT4gT2JqZWN0O1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0cmFja0J5OiAoaXRlbTogYW55KSA9PiBhbnk7XG4gICAgQElucHV0KCkgcHVibGljIHNvcnRTZWxlY3RlZEl0ZW1zRm46IChhOiBhbnksIGI6IGFueSkgPT4gYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0FsbG93ZWRUb1JlbW92ZUZuOiAoYTogYW55KSA9PiBib29sZWFuO1xuXG4gICAgLyoqIFZhbGlkYXRpb24gKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkxvYWRSZW1vdGVSZXNvdXJjZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uU2VsZWN0ZWRJdGVtUmVtb3ZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbGVhcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgcHVibGljIG5hdGl2ZU5hbWUgPSB1dWlkKCk7XG4gICAgcHVibGljIG5ndFN0eWxlOiBOZ3RTdHlsaXphYmxlU2VydmljZTtcbiAgICBwdWJsaWMgbmdTZWxlY3RJdGVtczogYW55O1xuICAgIHB1YmxpYyBuYXRpdmVWYWx1ZTogYW55O1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyB3YXNDbGlja2VkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBuZ1NlYXJjaE9ic2VydmVyOiBPYnNlcnZlcjxhbnk+O1xuICAgIHByaXZhdGUgb3JpZ2luYWxQZXJQYWdlID0gMTU7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG4gICAgcHJpdmF0ZSBvcmlnaW5hbEl0ZW1zOiBBcnJheTxhbnk+O1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RhdGUgPSB7XG4gICAgICAgIGZpbHRlcnM6IHt9LFxuICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICBmaWVsZDogJycsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIGNvdW50OiBudWxsLFxuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIHBhZ2VzOiBudWxsLFxuICAgICAgICAgICAgdG90YWw6IG51bGwsXG4gICAgICAgICAgICBmcm9tOiBudWxsLFxuICAgICAgICAgICAgdG86IG51bGwsXG4gICAgICAgICAgICBwZXJfcGFnZTogbnVsbFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2VhcmNoVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgaGFkRmlyc3RJdGVtc0xvYWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKClcbiAgICAgICAgcHVibGljIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcblxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZSxcblxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBuZ3RIdHRwOiBOZ3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RGb3JtOiBOZ3RGb3JtQ29tcG9uZW50LFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0U2VjdGlvbjogTmd0U2VjdGlvbkNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndE1vZGFsOiBOZ3RNb2RhbENvbXBvbmVudFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUuZ2V0Tmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSBuZXcgTmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmd0U3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0U2VsZWN0Jywge1xuICAgICAgICAgICAgaDogJ2gtMTInLFxuICAgICAgICAgICAgdGV4dDogJ3RleHQtc20nLFxuICAgICAgICAgICAgZm9udENhc2U6ICcnLFxuICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICBiZzogJ2JnLXdoaXRlJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEgPT09IGI7XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIGVsZW1lbnQgbXVzdCBiZSBpbnNpZGUgYSA8Zm9ybSAjZm9ybT0nbmdGb3JtJz4gdGFnIVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5uYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIGVsZW1lbnQgbXVzdCBjb250YWluIGEgbmFtZSBhdHRyaWJ1dGUhXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMuaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcmFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlT25TZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk7XG4gICAgICAgIH0sIDUwMCk7XG5cbiAgICAgICAgdGhpcy5uZ1NlbGVjdEl0ZW1zID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoW10pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmJpbmRJbm5lcklucHV0VW5pcXVlSWQoKTtcblxuICAgICAgICB0aGlzLmJpbmRTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMucmVtb3RlUmVzb3VyY2UgfHwgY2hhbmdlcy5pdGVtcykge1xuICAgICAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0ID0gZ2V0RW51bUZyb21TdHJpbmcoY2hhbmdlcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0LmN1cnJlbnRWYWx1ZSwgTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFkRmlyc3RJdGVtc0xvYWQgJiYgdGhpcy5jYW5Mb2FkSXRlbXMoKSkge1xuICAgICAgICAgICAgdGhpcy5oYWRGaXJzdEl0ZW1zTG9hZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdE5nU2VsZWN0SXRlbXMoKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlU2hvd0FkZFRhZygpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pdGVtc0xpc3QubWFwU2VsZWN0ZWRJdGVtcygpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdldEVsZW1lbnRUaXRsZSgpIHx8IHRoaXMuZ2V0RWxlbWVudFRpdGxlKCkgPT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGl0bGUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdGVkSXRlbXM/Lm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcGVuKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNuZ3RTZWxlY3RQYXJlbnRDb250YWluZXInKTtcblxuICAgICAgICBpZiAodGhpcy5kcm9wZG93blBvc2l0aW9uID09ICdhdXRvJyAmJiBwYXJlbnRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb250YWluZXIgPSBwYXJlbnRFbGVtZW50c1twYXJlbnRFbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVEcm9wZG93blBvc2l0aW9uKHBhcmVudENvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShldmVudDogRXZlbnQsIGl0ZW06IGFueSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5jbGVhckl0ZW0oaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuaW5pdE5nU2VsZWN0SXRlbXMoKTtcbiAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50VmFsaWRhdGlvbigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldCgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZvY3VzKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJTZWxlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5uYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycyA9IHt9O1xuXG4gICAgICAgIHRoaXMub25DbGVhci5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlU2VsZWN0ZWRJdGVtKGl0ZW06IE5nT3B0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbnRSZW1vdmVJdGVtKGl0ZW0udmFsdWUpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0KGl0ZW0pKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vblNlbGVjdGVkSXRlbVJlbW92ZS5lbWl0KGl0ZW0udmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWx0ZXJJbnB1dFZhbHVlKCkge1xuICAgICAgICBsZXQgaW5wdXRGaWVsZCA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VhcmNoSW5wdXQgP1xuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWFyY2hJbnB1dCA6XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hJbnB1dCddO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlucHV0RmllbGQgJiZcbiAgICAgICAgICAgIGlucHV0RmllbGQubmF0aXZlRWxlbWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXRlbVNlYXJjaEZuID0gKHRlcm06IHN0cmluZywgaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlbW90ZVJlc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gaXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5iaW5kTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWydnZXRBdHRyaWJ1dGUnXSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGl0ZW0uZ2V0QXR0cmlidXRlKFt0aGlzLmJpbmRMYWJlbF0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGl0ZW1bdGhpcy5iaW5kTGFiZWxdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFZhbHVlXG4gICAgICAgICAgICA/IGZvcm1hdHRlZFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvY2FsZUxvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH07XG5cbiAgICBwdWJsaWMgc2VhcmNoKGZpbHRlcnM6IGFueSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzID0geyAuLi50aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLCAuLi5maWx0ZXJzIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlbW90ZVJlc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RIdHRwXG4gICAgICAgICAgICAgICAgICAgIC5nZXQodGhpcy5yZW1vdGVSZXNvdXJjZSwgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycywgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZTogTmd0SHR0cFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRDb21wYXJlV2l0aEJ5UmVzcG9uc2UocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyLm5leHQocmVzcG9uc2UuZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5BdXRvU2VsZWN0VW5pcXVlT3B0aW9uKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTmF0aXZlQ2hhbmdlKHJlc3BvbnNlLmRhdGFbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkUmVtb3RlUmVzb3VyY2UuZW1pdChyZXNwb25zZS5kYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24gPSByZXNwb25zZS5tZXRhLnBhZ2luYXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKHZhbHVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHRoaXMudmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc29ydFNlbGVjdGVkSXRlbXModmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZSh2YWx1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscyh2YWx1ZSwgdGhpcy5uYXRpdmVWYWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKCh2YWwpID0+IHZhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSB0aGlzLnNvcnRTZWxlY3RlZEl0ZW1zKHZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNjcm9sbCh7IGVuZCB9KSB7XG4gICAgICAgIGxldCBjdXJyZW50UGVyUGFnZSA9IHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24ucGVyX3BhZ2U7XG4gICAgICAgIGxldCBtYXhJdGVuc0luQmFja2VuZCA9IHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24udG90YWw7XG5cbiAgICAgICAgaWYgKGVuZCA+PSBjdXJyZW50UGVyUGFnZSAmJiBlbmQgPD0gbWF4SXRlbnNJbkJhY2tlbmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24ucGVyX3BhZ2UgPSBwYXJzZUludCh0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlKSArIHRoaXMub3JpZ2luYWxQZXJQYWdlO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2goe30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1NlbGVjdGVkVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICYmIEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW50UmVtb3ZlSXRlbShpdGVtVmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKCF0aGlzLmFsbG93T3JpZ2luYWxJdGVtc1Vuc2VsZWN0ICYmIHRoaXMuaGFkUHJldmlvdXNTZWxlY3Rpb24oaXRlbVZhbHVlKSlcbiAgICAgICAgICAgIHx8ICh0aGlzLmlzQWxsb3dlZFRvUmVtb3ZlRm4gJiYgIXRoaXMuaXNBbGxvd2VkVG9SZW1vdmVGbihpdGVtVmFsdWUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VsZWN0Q2xhc3MoKSB7XG4gICAgICAgIGxldCBzZWxlY3RDbGFzcyA9IHRoaXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCA/ICduZy1zZWxlY3QtZHJvcGRvd24tcGFuZWwtJyArIHRoaXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCA6ICduZy1zZWxlY3QtZHJvcGRvd24tcGFuZWwtYXV0byc7XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLWRpc2FibGVkJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Db250cm9sICYmIHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzICYmICh0aGlzLmZvcm1Db250cm9sLmRpcnR5IHx8ICh0aGlzLmZvcm1Db250YWluZXIgJiYgdGhpcy5mb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSkpKSB7XG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSAnIHNlbGVjdC1ib3JkZXItZXJyb3InO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLW5vcm1hbCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gYCBoLWF1dG8gJHt0aGlzLm5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5iZycsICdjb2xvci50ZXh0J10pfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSBgICR7dGhpcy5uZ3RTdHlsZS5jb21waWxlKFsnaCcsICdjb2xvci5iZycsICdjb2xvci50ZXh0J10pfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0Q2xhc3M7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkIHx8IHRoaXMuaXNEaXNhYmxlZEJ5UGFyZW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjYWxjdWxhdGVEcm9wZG93blBvc2l0aW9uKHBhcmVudENvbnRhaW5lcjogRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB3aGlsZSAoIXRoaXMuY29tcG9uZW50UmVhZHkgfHwgdGhpcy5sb2FkaW5nIHx8IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2hvd05vSXRlbXNGb3VuZCgpKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxheSgyMDApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zaG93Tm9JdGVtc0ZvdW5kKCkgJiYgIXRoaXMubG9hZGluZyAmJiB0aGlzLmNvbXBvbmVudFJlYWR5KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5nU2VsZWN0RWxlbWVudCA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5nU2VsZWN0SGVpZ2h0ID0gbmdTZWxlY3RFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IG5nU2VsZWN0WVBvc2l0aW9uID0gbmdTZWxlY3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duSGVpZ2h0ID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5kcm9wZG93blBhbmVsLmNvbnRlbnRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgb3BlbmVkU2VsZWN0SGVpZ2h0ID0gbmdTZWxlY3RIZWlnaHQgKyBkcm9wZG93bkhlaWdodDtcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50WVBvc2l0aW9uID0gcGFyZW50Q29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG4gICAgICAgICAgICBjb25zdCBuZ1NlbGVjdFlQb3NpdGlvbkluc2lkZVBhcmVudCA9IG5nU2VsZWN0WVBvc2l0aW9uIC0gcGFyZW50WVBvc2l0aW9uO1xuXG4gICAgICAgICAgICBjb25zdCBvcGVuZWRTZWxlY3RUb3RhbEhlaWdodCA9IG9wZW5lZFNlbGVjdEhlaWdodCArIG5nU2VsZWN0WVBvc2l0aW9uSW5zaWRlUGFyZW50O1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVySGVpZ2h0ID0gcGFyZW50Q29udGFpbmVyLmNsaWVudEhlaWdodDtcblxuICAgICAgICAgICAgY29uc3QgZml0c09uVG9wID0gb3BlbmVkU2VsZWN0SGVpZ2h0IDwgbmdTZWxlY3RZUG9zaXRpb25JbnNpZGVQYXJlbnQ7XG4gICAgICAgICAgICBjb25zdCBmaXRzT25Cb3R0b20gPSBvcGVuZWRTZWxlY3RUb3RhbEhlaWdodCA8IHBhcmVudENvbnRhaW5lckhlaWdodDtcblxuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25Qb3NpdGlvbjogRHJvcGRvd25Qb3NpdGlvbiA9ICFmaXRzT25Cb3R0b20gJiYgZml0c09uVG9wXG4gICAgICAgICAgICAgICAgPyAndG9wJ1xuICAgICAgICAgICAgICAgIDogJ2JvdHRvbSc7XG5cbiAgICAgICAgICAgICg8YW55PnRoaXMubmdTZWxlY3RDb21wb25lbnQuZHJvcGRvd25QYW5lbFsnX2N1cnJlbnRQb3NpdGlvbiddKSA9IGRyb3Bkb3duUG9zaXRpb247XG5cbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZHJvcGRvd25QYW5lbFsnX3VwZGF0ZURyb3Bkb3duQ2xhc3MnXShkcm9wZG93blBvc2l0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0TmdTZWxlY3RJdGVtcygpIHtcbiAgICAgICAgaWYgKHRoaXMucmVtb3RlUmVzb3VyY2UgJiYgdGhpcy5jYW5Mb2FkSXRlbXMoKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdEl0ZW1zID0gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoKHt9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLnN1YnNjcmliZSgodGVybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCh7IHRlcm06IHRlcm0gfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtcyBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkF1dG9TZWxlY3RVbmlxdWVPcHRpb24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25OYXRpdmVDaGFuZ2UodGhpcy5pdGVtc1swXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5pdGVtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbXBvbmVudFZhbGlkYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1Db250YWluZXIgJiYgdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wgJiYgKHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbC5nZXQodGhpcy5uYW1lKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbC5nZXQodGhpcy5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc29ydFNlbGVjdGVkSXRlbXModmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnNvcnRTZWxlY3RlZEl0ZW1zRm4gJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc29ydCgoYSwgYikgPT4gdGhpcy5zb3J0U2VsZWN0ZWRJdGVtc0ZuKGEsIGIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVsZW1lbnRUaXRsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5lbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnRpdGxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModmFsdWUsIG5hdGl2ZVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5hdGl2ZVZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzeW5jVmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy5pc1JlcXVpcmVkVmFsaWRhdG9yKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBKU09OLnN0cmluZ2lmeShjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyAncmVxdWlyZWQnOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlU2hvd0FkZFRhZygpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubmdTZWxlY3RDb21wb25lbnQsICdzaG93QWRkVGFnJywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10udG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmFkZFRhZyAmJiAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5sb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICYmICghdGhpcy5oYXNUZXJtSW5GaWx0ZXJlZEl0ZW1zKHRlcm0pICYmICghdGhpcy5oYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm0pXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5oaWRlU2VsZWN0ZWQgJiYgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pc09wZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kSW5uZXJJbnB1dFVuaXF1ZUlkKCkge1xuICAgICAgICBjb25zdCBjaGlsZElucHV0cyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcblxuICAgICAgICBpZiAoY2hpbGRJbnB1dHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJJbnB1dCA9IGNoaWxkSW5wdXRzWzBdO1xuXG4gICAgICAgICAgICBpbm5lcklucHV0LmlkID0gdXVpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlOiBOZ3RIdHRwUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ3Vlc3NDb21wYXJlV2l0aCkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/Lmxlbmd0aCAmJiB0eXBlb2YgcmVzcG9uc2UuZGF0YVswXVsnZ2V0QXBpSWQnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEuZ2V0QXBpSWQoKSA9PSBiLmdldEFwaUlkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEgPT09IGI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1Rlcm1JbkZpbHRlcmVkSXRlbXModGVybTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zO1xuXG4gICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm06IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWxlY3RlZEl0ZW1zO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vcmlnaW5hbEl0ZW1zPy5maW5kKGVsZW1lbnQgPT4gdGhpcy5jb21wYXJlV2l0aChlbGVtZW50LCBpdGVtKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbG9xdWVudFJlc291cmNlKCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0Lml0ZW1zO1xuXG4gICAgICAgIHJldHVybiBpdGVtcz8ubGVuZ3RoICYmIHR5cGVvZiBpdGVtc1swXS52YWx1ZVsnZ2V0QXR0cmlidXRlJ10gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5Mb2FkSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9Mb2FkIHx8ICghdGhpcy5kaXNhYmxlZCgpICYmIHRoaXMud2FzQ2xpY2tlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5BdXRvU2VsZWN0VW5pcXVlT3B0aW9uKHJlc3BvbnNlPzogTmd0SHR0cFJlc3BvbnNlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy52YWx1ZSAmJiB0aGlzLmF1dG9TZWxlY3RVbmlxdWVPcHRpb25cbiAgICAgICAgICAgICYmIChcbiAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShyZXNwb25zZT8uZGF0YSkgJiYgcmVzcG9uc2U/LmRhdGE/Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICB8fCAoIXJlc3BvbnNlICYmIEFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykgJiYgdGhpcy5pdGVtcz8ubGVuZ3RoID09IDEpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5ndEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuc2hpbmluZyA9IHRoaXMubmd0Rm9ybS5pc1NoaW5pbmcoKTtcblxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RGb3JtLm9uU2hpbmluZ0NoYW5nZS5zdWJzY3JpYmUoKHNoaW5pbmc6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNEaXNhYmxlZEJ5UGFyZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ3RGb3JtPy5pc0Rpc2FibGVkXG4gICAgICAgICAgICB8fCB0aGlzLm5ndFNlY3Rpb24/LmlzRGlzYWJsZWRcbiAgICAgICAgICAgIHx8IHRoaXMubmd0TW9kYWw/LmlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0IHtcbiAgICBBVVRPID0gJ2F1dG8nLFxuICAgIFhTID0gJ3hzJyxcbiAgICBNRCA9ICdtZCcsXG4gICAgU00gPSAnc20nLFxuICAgIExHID0gJ2xnJyxcbiAgICBYTCA9ICd4bCdcbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2hpZGRlbl09J3NoaW5pbmcnXG4gICAgY2xhc3M9XCJ7eyBzaGluaW5nID8gJycgOiAnYmxvY2snIH19IHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ3RleHQnLCAnZm9udCcsICdmb250Q2FzZSddKSB9fSBtYi0yIGZsZXhcIj5cbiAgICA8bmd0LXN2ZyAqbmdJZj1cImxhYmVsSWNvblwiIGNsYXNzPVwibXItMSB7e2xhYmVsSWNvbkNvbG9yfX1cIiBzcmM9XCJ7e2xhYmVsSWNvbn19XCI+PC9uZ3Qtc3ZnPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiICpuZ0lmPVwiaXNSZXF1aXJlZFwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIlxuICAgICAgICBbaGVscGVyUmV2ZXJzZVlQb3NpdGlvbl09XCJoZWxwZXJSZXZlcnNlWVBvc2l0aW9uXCIgW2F1dG9YUmV2ZXJzZV09XCJoZWxwZXJBdXRvWFJldmVyc2VcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48ZGl2IFtoaWRkZW5dPSdzaGluaW5nJyBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWyd0ZXh0J10pIH19IHt7IGdldFNlbGVjdENsYXNzKCkgfX0gbm9ybWFsLWNhc2VcIlxuICAgIHN0eWxlPVwibWluLWhlaWdodDogMi41cmVtO1wiPlxuICAgIDxuZy1zZWxlY3QgY2xhc3M9XCJjdXN0b21cIiBbKG5nTW9kZWwpXT0nbmF0aXZlVmFsdWUnIFtuYW1lXT0nbmF0aXZlTmFtZScgW2FkZFRhZ109J2FsbG93Q3JlYXRlJ1xuICAgICAgICBbYWRkVGFnVGV4dF09XCJjcmVhdGVUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Q3JlYXRlVGV4dFwiIFtiaW5kTGFiZWxdPVwiYmluZExhYmVsXCJcbiAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW2hpZGVTZWxlY3RlZF09XCJoaWRlU2VsZWN0ZWRcIiBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZFwiXG4gICAgICAgIFtub3RGb3VuZFRleHRdPVwibm90Rm91bmRUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Tm90Rm91bmRUZXh0XCIgW3NlYXJjaGFibGVdPVwic2VhcmNoYWJsZVwiXG4gICAgICAgIFtzZWFyY2hGbl09XCJpdGVtU2VhcmNoRm5cIiBbZGlzYWJsZWRdPSdkaXNhYmxlZCgpIHx8IGlzUmVhZG9ubHknIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlICYmIGhhc1NlbGVjdGVkVmFsdWUoKVwiXG4gICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cImNsb3NlT25TZWxlY3RcIiBbdHJhY2tCeUZuXT1cInRyYWNrQnlcIiBbbGFiZWxGb3JJZF09XCJsYWJlbEZvcklkXCJcbiAgICAgICAgW3R5cGVUb1NlYXJjaFRleHRdPVwidHlwZVRvU2VhcmNoVGV4dCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdFR5cGVUb1NlYXJjaFRleHRcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RQbGFjZWhvbGRlclwiIFtkcm9wZG93blBvc2l0aW9uXT1cImRyb3Bkb3duUG9zaXRpb25cIlxuICAgICAgICBbZ3JvdXBCeV09XCJncm91cEJ5XCIgW2NsZWFyQWxsVGV4dF09XCJjbGVhckFsbFRvb2x0aXAgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RDbGVhckFsbFRvb2x0aXBcIlxuICAgICAgICBbY2xlYXJTZWFyY2hPbkFkZF09XCJjbGVhclNlYXJjaE9uQWRkXCIgW2JpbmRWYWx1ZV09XCJiaW5kVmFsdWVcIiBbdmlydHVhbFNjcm9sbF09XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgICAgICAgW2xvYWRpbmdUZXh0XT1cImxvYWRpbmdUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0TG9hZGluZ1RleHRcIiBbbWF4U2VsZWN0ZWRJdGVtc109XCJtYXhTZWxlY3RlZEl0ZW1zXCJcbiAgICAgICAgW3RhYkluZGV4XT1cInRhYkluZGV4XCIgW2l0ZW1zXT1cIm5nU2VsZWN0SXRlbXMgfCBhc3luY1wiIFtncm91cFZhbHVlXT1cImdyb3VwVmFsdWVcIiBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgICAgW2NvbXBhcmVXaXRoXT0nY29tcGFyZVdpdGgnIFtpbnB1dEF0dHJzXT1cImlucHV0QXR0cnNcIiAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIiAoY2xvc2UpPVwib25DbG9zZS5lbWl0KClcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uTmF0aXZlQ2hhbmdlKCRldmVudClcIiAoY2xlYXIpPSdvbkNsZWFyU2VsZWN0KCknIChyZW1vdmUpPSdvblJlbW92ZVNlbGVjdGVkSXRlbSgkZXZlbnQpJ1xuICAgICAgICAob3Blbik9XCJvbk9wZW4oKVwiIChjbGljayk9XCJ3YXNDbGlja2VkID0gdHJ1ZVwiPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj0nbmd0U2VsZWN0SGVhZGVyVGVtcGxhdGUnIG5nLWhlYWRlci10bXA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibmd0U2VsZWN0SGVhZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgcHItMVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aXBsZSAmJiAhY2FudFJlbW92ZUl0ZW0oaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5nLXZhbHVlLWljb24gcHgtMSBoLWZ1bGwgYm9yZGVyLXIgbXItMiB7eyBuZ3RTdHlsZS5jb21waWxlKFsnY29sb3IudGV4dCcsICd0ZXh0J10pIH19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9J3JlbW92ZUl0ZW0oJGV2ZW50LCBpdGVtKSc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibmctdmFsdWUtaWNvbiBmaWxsLWN1cnJlbnQgc2VsZi1jZW50ZXJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS4xIDE3LjJsLTUuMy01LjMgNS4zLTUuMy0xLjgtMS44LTUuMyA1LjQtNS4zLTUuMy0xLjggMS43IDUuMyA1LjMtNS4zIDUuM0w2LjcgMTlsNS4zLTUuMyA1LjMgNS4zIDEuOC0xLjh6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj0nbmd0T3B0aW9uU2VsZWN0ZWRUZW1wbGF0ZScgW25nVGVtcGxhdGVPdXRsZXRdPVwibmd0T3B0aW9uU2VsZWN0ZWRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9JyFuZ3RPcHRpb25TZWxlY3RlZFRlbXBsYXRlJyBbbmdUZW1wbGF0ZU91dGxldF09XCJuZ3RPcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0gfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1zZWFyY2g9XCJzZWFyY2hUZXJtXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibmd0T3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCwgc2VhcmNoVGVybTogc2VhcmNoIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1zZWxlY3Q+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnXSkgfX0gdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmd0LXZhbGlkYXRpb24gW2NvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbY29udGFpbmVyXT1cImZvcm1Db250YWluZXJcIj48L25ndC12YWxpZGF0aW9uPlxuXG48aW5wdXQgKm5nSWY9J2NvbXBvbmVudFJlYWR5JyB0eXBlPSdoaWRkZW4nIFtuZ01vZGVsXT1cInZhbHVlXCIgW25hbWVdPVwibmFtZVwiIFt2YWx1ZV09XCJ2YWx1ZVwiPiJdfQ==
|