@skyux/list-builder 5.0.0 → 5.0.1
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/bundles/skyux-list-builder.umd.js +312 -332
- package/bundles/skyux-list-builder.umd.js.map +1 -1
- package/documentation.json +184 -179
- package/esm2015/modules/list/list-data-response.model.js +1 -1
- package/esm2015/modules/list/list-data.provider.js +1 -1
- package/esm2015/modules/list/list-paging.component.js +1 -1
- package/esm2015/modules/list/list-view.component.js +8 -8
- package/esm2015/modules/list/list.component.js +45 -42
- package/esm2015/modules/list/list.module.js +8 -16
- package/esm2015/modules/list/state/filters/filters.orchestrator.js +2 -3
- package/esm2015/modules/list/state/items/items.orchestrator.js +10 -9
- package/esm2015/modules/list/state/items/load.action.js +1 -1
- package/esm2015/modules/list/state/list-state-action.type.js +1 -1
- package/esm2015/modules/list/state/list-state.model.js +1 -1
- package/esm2015/modules/list/state/list-state.rxstate.js +4 -4
- package/esm2015/modules/list/state/list-state.state-node.js +5 -6
- package/esm2015/modules/list/state/paging/paging.orchestrator.js +2 -3
- package/esm2015/modules/list/state/paging/set-max-pages.action.js +1 -1
- package/esm2015/modules/list/state/paging/set-page-number.action.js +1 -1
- package/esm2015/modules/list/state/search/search.orchestrator.js +5 -4
- package/esm2015/modules/list/state/search/set-functions.action.js +1 -1
- package/esm2015/modules/list/state/selected/selected.orchestrator.js +9 -10
- package/esm2015/modules/list/state/selected/set-items-selected.action.js +1 -1
- package/esm2015/modules/list/state/sort/set-field-selectors.action.js +1 -1
- package/esm2015/modules/list/state/sort/sort.model.js +1 -1
- package/esm2015/modules/list/state/sort/sort.orchestrator.js +4 -5
- package/esm2015/modules/list/state/toolbar/disable.action.js +1 -1
- package/esm2015/modules/list/state/toolbar/load.action.js +1 -1
- package/esm2015/modules/list/state/toolbar/toolbar.orchestrator.js +3 -4
- package/esm2015/modules/list/state/views/load.action.js +1 -1
- package/esm2015/modules/list/state/views/view.model.js +1 -1
- package/esm2015/modules/list/state/views/views.model.js +1 -1
- package/esm2015/modules/list/state/views/views.orchestrator.js +2 -4
- package/esm2015/modules/list-data-provider-in-memory/list-data-in-memory.provider.js +24 -14
- package/esm2015/modules/list-filters/filter.model.js +1 -1
- package/esm2015/modules/list-filters/list-filter-button.component.js +9 -9
- package/esm2015/modules/list-filters/list-filter-inline-item-renderer.component.js +7 -7
- package/esm2015/modules/list-filters/list-filter-inline-item.component.js +9 -8
- package/esm2015/modules/list-filters/list-filter-inline.component.js +12 -11
- package/esm2015/modules/list-filters/list-filter-inline.model.js +1 -1
- package/esm2015/modules/list-filters/list-filter-summary.component.js +8 -8
- package/esm2015/modules/list-filters/list-filters.module.js +10 -17
- package/esm2015/modules/list-paging/list-paging.component.js +14 -15
- package/esm2015/modules/list-paging/list-paging.module.js +8 -19
- package/esm2015/modules/list-toolbar/list-multiselect-toolbar.component.js +26 -25
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.js +8 -8
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-action.js +1 -1
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.js +7 -7
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.js +10 -16
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.js +10 -14
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.js +5 -5
- package/esm2015/modules/list-toolbar/list-toolbar-item-renderer.component.js +7 -7
- package/esm2015/modules/list-toolbar/list-toolbar-item.component.js +6 -6
- package/esm2015/modules/list-toolbar/list-toolbar-search-actions.component.js +5 -5
- package/esm2015/modules/list-toolbar/list-toolbar-sort.component.js +5 -5
- package/esm2015/modules/list-toolbar/list-toolbar-view-actions.component.js +5 -5
- package/esm2015/modules/list-toolbar/list-toolbar.component.js +69 -67
- package/esm2015/modules/list-toolbar/list-toolbar.module.js +10 -10
- package/esm2015/modules/list-toolbar/state/config/config.orchestrator.js +2 -4
- package/esm2015/modules/list-toolbar/state/toolbar-state-action.type.js +1 -1
- package/esm2015/modules/list-toolbar/state/toolbar-state.rxstate.js +4 -4
- package/esm2015/modules/list-toolbar/state/toolbar-state.state-node.js +5 -7
- package/esm2015/modules/shared/sky-list-builder-resources.module.js +24 -12
- package/fesm2015/skyux-list-builder.js +356 -373
- package/fesm2015/skyux-list-builder.js.map +1 -1
- package/package.json +13 -13
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { combineLatest as observableCombineLatest, Subject } from 'rxjs';
|
|
2
|
-
import { map as observableMap, takeUntil, take, distinctUntilChanged } from 'rxjs/operators';
|
|
3
|
-
import { ChangeDetectionStrategy, Component, ContentChildren, Input, TemplateRef, ViewChild } from '@angular/core';
|
|
1
|
+
import { combineLatest as observableCombineLatest, Subject, } from 'rxjs';
|
|
2
|
+
import { map as observableMap, takeUntil, take, distinctUntilChanged, } from 'rxjs/operators';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, ContentChildren, Input, TemplateRef, ViewChild, } from '@angular/core';
|
|
4
4
|
import { getValue } from '@skyux/list-builder-common';
|
|
5
5
|
import { SkySearchComponent } from '@skyux/lookup';
|
|
6
6
|
import { ListToolbarItemModel } from '../list/state/toolbar/toolbar-item.model';
|
|
@@ -80,7 +80,9 @@ export class SkyListToolbarComponent {
|
|
|
80
80
|
return this._inMemorySearchEnabled;
|
|
81
81
|
}
|
|
82
82
|
get isFilterBarDisplayed() {
|
|
83
|
-
return !this.isToolbarDisabled &&
|
|
83
|
+
return (!this.isToolbarDisabled &&
|
|
84
|
+
this.hasInlineFilters &&
|
|
85
|
+
this.inlineFilterBarExpanded);
|
|
84
86
|
}
|
|
85
87
|
get filterButtonAriaControls() {
|
|
86
88
|
return this.isFilterBarDisplayed ? this.listFilterInlineId : undefined;
|
|
@@ -111,23 +113,20 @@ export class SkyListToolbarComponent {
|
|
|
111
113
|
id: 'sort-selector',
|
|
112
114
|
template: this.sortSelectorTemplate,
|
|
113
115
|
location: 'left',
|
|
114
|
-
index: this.sortSelectorItemToolbarIndex
|
|
115
|
-
})
|
|
116
|
+
index: this.sortSelectorItemToolbarIndex,
|
|
117
|
+
}),
|
|
116
118
|
]);
|
|
117
119
|
}
|
|
118
120
|
else if (currentSort.length < 1 && this.hasSortSelectors) {
|
|
119
121
|
this.hasSortSelectors = false;
|
|
120
|
-
this.dispatcher.toolbarRemoveItems([
|
|
121
|
-
'sort-selector'
|
|
122
|
-
]);
|
|
122
|
+
this.dispatcher.toolbarRemoveItems(['sort-selector']);
|
|
123
123
|
}
|
|
124
124
|
});
|
|
125
|
-
this.searchTextInput = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(s => s.search.searchText), distinctUntilChanged());
|
|
126
|
-
this.view = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(s => s.views.active), distinctUntilChanged());
|
|
125
|
+
this.searchTextInput = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.search.searchText), distinctUntilChanged());
|
|
126
|
+
this.view = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.views.active), distinctUntilChanged());
|
|
127
127
|
this.watchTemplates();
|
|
128
128
|
this.type = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((state) => state.toolbar.type), distinctUntilChanged());
|
|
129
|
-
this.type.pipe(takeUntil(this.ngUnsubscribe))
|
|
130
|
-
.subscribe((toolbarType) => {
|
|
129
|
+
this.type.pipe(takeUntil(this.ngUnsubscribe)).subscribe((toolbarType) => {
|
|
131
130
|
if (toolbarType === 'search') {
|
|
132
131
|
this.dispatcher.toolbarRemoveItems(['search']);
|
|
133
132
|
}
|
|
@@ -136,80 +135,77 @@ export class SkyListToolbarComponent {
|
|
|
136
135
|
new ListToolbarItemModel({
|
|
137
136
|
id: 'search',
|
|
138
137
|
template: this.searchTemplate,
|
|
139
|
-
location: 'right'
|
|
140
|
-
})
|
|
138
|
+
location: 'right',
|
|
139
|
+
}),
|
|
141
140
|
]);
|
|
142
141
|
}
|
|
143
142
|
});
|
|
144
|
-
this.isSearchEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap(s => s.config), distinctUntilChanged(), observableMap(c => c.searchEnabled));
|
|
145
|
-
this.state
|
|
146
|
-
.
|
|
147
|
-
|
|
148
|
-
this.
|
|
149
|
-
this.
|
|
143
|
+
this.isSearchEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.config), distinctUntilChanged(), observableMap((c) => c.searchEnabled));
|
|
144
|
+
this.state
|
|
145
|
+
.pipe(observableMap((s) => s.toolbar), takeUntil(this.ngUnsubscribe), distinctUntilChanged(), observableMap((c) => c.disabled))
|
|
146
|
+
.subscribe((isDisabled) => (this.isToolbarDisabled = isDisabled));
|
|
147
|
+
this.isSortSelectorEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.config), distinctUntilChanged(), observableMap((c) => c.sortSelectorEnabled));
|
|
148
|
+
this.isMultiselectEnabled = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.toolbar), distinctUntilChanged(), observableMap((t) => t.showMultiselectToolbar));
|
|
149
|
+
this.hasAppliedFilters = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap((s) => s.filters), distinctUntilChanged(), observableMap((filters) => {
|
|
150
150
|
let activeFilters = filters.filter((f) => {
|
|
151
|
-
return f.value !== '' &&
|
|
151
|
+
return (f.value !== '' &&
|
|
152
152
|
f.value !== undefined &&
|
|
153
153
|
f.value !== false &&
|
|
154
|
-
f.value !== f.defaultValue;
|
|
154
|
+
f.value !== f.defaultValue);
|
|
155
155
|
});
|
|
156
156
|
return activeFilters.length > 0;
|
|
157
157
|
}));
|
|
158
|
-
this.state.pipe(takeUntil(this.ngUnsubscribe))
|
|
159
|
-
.
|
|
160
|
-
this.hasAdditionalToolbarSection = (current.toolbar.items.length > 0);
|
|
158
|
+
this.state.pipe(takeUntil(this.ngUnsubscribe)).subscribe((current) => {
|
|
159
|
+
this.hasAdditionalToolbarSection = current.toolbar.items.length > 0;
|
|
161
160
|
this.changeDetector.detectChanges();
|
|
162
161
|
});
|
|
163
162
|
}
|
|
164
163
|
ngAfterContentInit() {
|
|
165
164
|
// Inject custom toolbar items.
|
|
166
165
|
this.toolbarItems.forEach((toolbarItem) => {
|
|
167
|
-
this.dispatcher.toolbarAddItems([
|
|
168
|
-
new ListToolbarItemModel(toolbarItem)
|
|
169
|
-
]);
|
|
166
|
+
this.dispatcher.toolbarAddItems([new ListToolbarItemModel(toolbarItem)]);
|
|
170
167
|
this.customItemIds.push(toolbarItem.id);
|
|
171
168
|
});
|
|
172
|
-
this.toolbarItems.changes
|
|
169
|
+
this.toolbarItems.changes
|
|
170
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
173
171
|
.subscribe((newItems) => {
|
|
174
|
-
newItems.forEach(item => {
|
|
172
|
+
newItems.forEach((item) => {
|
|
175
173
|
if (this.customItemIds.indexOf(item.id) < 0) {
|
|
176
|
-
this.dispatcher.toolbarAddItems([
|
|
177
|
-
new ListToolbarItemModel(item)
|
|
178
|
-
]);
|
|
174
|
+
this.dispatcher.toolbarAddItems([new ListToolbarItemModel(item)]);
|
|
179
175
|
this.customItemIds.push(item.id);
|
|
180
176
|
}
|
|
181
177
|
});
|
|
182
178
|
const itemsToRemove = [];
|
|
183
179
|
this.customItemIds.forEach((itemId, index) => {
|
|
184
|
-
if (!newItems.find(item => item.id === itemId)) {
|
|
180
|
+
if (!newItems.find((item) => item.id === itemId)) {
|
|
185
181
|
itemsToRemove.push(itemId);
|
|
186
182
|
this.customItemIds.splice(index, 1);
|
|
187
183
|
}
|
|
188
184
|
});
|
|
189
185
|
this.dispatcher.toolbarRemoveItems(itemsToRemove);
|
|
190
186
|
});
|
|
191
|
-
const sortModels = this.toolbarSorts.map(sort => new ListSortLabelModel({
|
|
187
|
+
const sortModels = this.toolbarSorts.map((sort) => new ListSortLabelModel({
|
|
192
188
|
text: sort.label,
|
|
193
189
|
fieldSelector: sort.field,
|
|
194
190
|
fieldType: sort.type,
|
|
195
191
|
global: true,
|
|
196
|
-
descending: sort.descending
|
|
192
|
+
descending: sort.descending,
|
|
197
193
|
}));
|
|
198
194
|
this.dispatcher.sortSetGlobal(sortModels);
|
|
199
195
|
// Add inline filters.
|
|
200
|
-
this.showFilterSummary =
|
|
201
|
-
this.hasInlineFilters =
|
|
196
|
+
this.showFilterSummary = this.filterSummary.length > 0;
|
|
197
|
+
this.hasInlineFilters = this.inlineFilter.length > 0;
|
|
202
198
|
if (this.hasInlineFilters) {
|
|
203
199
|
this.dispatcher.toolbarAddItems([
|
|
204
200
|
new ListToolbarItemModel({
|
|
205
201
|
template: this.inlineFilterButtonTemplate,
|
|
206
202
|
location: 'left',
|
|
207
|
-
index: this.inlineFiltersItemToolbarIndex
|
|
208
|
-
})
|
|
203
|
+
index: this.inlineFiltersItemToolbarIndex,
|
|
204
|
+
}),
|
|
209
205
|
]);
|
|
210
206
|
}
|
|
211
207
|
// Check for view actions
|
|
212
|
-
this.hasViewActions =
|
|
208
|
+
this.hasViewActions = this.viewActions.length > 0;
|
|
213
209
|
}
|
|
214
210
|
ngOnDestroy() {
|
|
215
211
|
this.searchApplied.complete();
|
|
@@ -218,10 +214,13 @@ export class SkyListToolbarComponent {
|
|
|
218
214
|
}
|
|
219
215
|
setSort(sort) {
|
|
220
216
|
this.state.pipe(take(1)).subscribe((currentState) => {
|
|
221
|
-
if (currentState.paging.pageNumber &&
|
|
217
|
+
if (currentState.paging.pageNumber &&
|
|
218
|
+
currentState.paging.pageNumber !== 1) {
|
|
222
219
|
this.dispatcher.next(new ListPagingSetPageNumberAction(Number(1)));
|
|
223
220
|
}
|
|
224
|
-
this.dispatcher.sortSetFieldSelectors([
|
|
221
|
+
this.dispatcher.sortSetFieldSelectors([
|
|
222
|
+
{ fieldSelector: sort.fieldSelector, descending: sort.descending },
|
|
223
|
+
]);
|
|
225
224
|
});
|
|
226
225
|
}
|
|
227
226
|
inlineFilterButtonClick() {
|
|
@@ -231,7 +230,8 @@ export class SkyListToolbarComponent {
|
|
|
231
230
|
this.searchApplied.next(searchText);
|
|
232
231
|
if (this.inMemorySearchEnabled) {
|
|
233
232
|
this.state.pipe(take(1)).subscribe((currentState) => {
|
|
234
|
-
if (currentState.paging.pageNumber &&
|
|
233
|
+
if (currentState.paging.pageNumber &&
|
|
234
|
+
currentState.paging.pageNumber !== 1) {
|
|
235
235
|
this.dispatcher.next(new ListPagingSetPageNumberAction(Number(1)));
|
|
236
236
|
}
|
|
237
237
|
this.dispatcher.searchSetText(searchText);
|
|
@@ -239,16 +239,17 @@ export class SkyListToolbarComponent {
|
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
241
|
itemIsInView(itemView, activeView) {
|
|
242
|
-
return
|
|
242
|
+
return itemView === undefined || itemView === activeView;
|
|
243
243
|
}
|
|
244
244
|
getSortSelectors() {
|
|
245
|
-
return observableCombineLatest(this.state.pipe(observableMap(s => s.sort.available), distinctUntilChanged()), this.state.pipe(observableMap(s => s.sort.global), distinctUntilChanged()), this.state.pipe(observableMap(s => s.sort.fieldSelectors), distinctUntilChanged()), (available, global, fieldSelectors) => {
|
|
245
|
+
return observableCombineLatest(this.state.pipe(observableMap((s) => s.sort.available), distinctUntilChanged()), this.state.pipe(observableMap((s) => s.sort.global), distinctUntilChanged()), this.state.pipe(observableMap((s) => s.sort.fieldSelectors), distinctUntilChanged()), (available, global, fieldSelectors) => {
|
|
246
246
|
// Get sorts that are in the global that are not in the available
|
|
247
|
-
let sorts = global.filter(g => available.filter(a => a.fieldSelector === g.fieldSelector)
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
247
|
+
let sorts = global.filter((g) => available.filter((a) => a.fieldSelector === g.fieldSelector)
|
|
248
|
+
.length === 0);
|
|
249
|
+
let resultSortSelectors = [...sorts, ...available].map((sortLabels) => {
|
|
250
|
+
let fs = fieldSelectors.filter((f) => {
|
|
251
|
+
return (f.fieldSelector === sortLabels.fieldSelector &&
|
|
252
|
+
f.descending === sortLabels.descending);
|
|
252
253
|
});
|
|
253
254
|
let selected = false;
|
|
254
255
|
if (fs.length > 0) {
|
|
@@ -256,14 +257,14 @@ export class SkyListToolbarComponent {
|
|
|
256
257
|
}
|
|
257
258
|
return {
|
|
258
259
|
sort: sortLabels,
|
|
259
|
-
selected: selected
|
|
260
|
+
selected: selected,
|
|
260
261
|
};
|
|
261
262
|
});
|
|
262
263
|
return resultSortSelectors;
|
|
263
264
|
}).pipe(takeUntil(this.ngUnsubscribe));
|
|
264
265
|
}
|
|
265
266
|
watchTemplates() {
|
|
266
|
-
observableCombineLatest(this.state.pipe(observableMap(s => s.toolbar), distinctUntilChanged()), this.view.pipe(distinctUntilChanged()), (toolbar, view) => {
|
|
267
|
+
observableCombineLatest(this.state.pipe(observableMap((s) => s.toolbar), distinctUntilChanged()), this.view.pipe(distinctUntilChanged()), (toolbar, view) => {
|
|
267
268
|
const items = toolbar.items.filter((i) => {
|
|
268
269
|
return this.itemIsInView(i.view, view);
|
|
269
270
|
});
|
|
@@ -273,7 +274,8 @@ export class SkyListToolbarComponent {
|
|
|
273
274
|
templates[item.location].push(item);
|
|
274
275
|
});
|
|
275
276
|
return templates;
|
|
276
|
-
})
|
|
277
|
+
})
|
|
278
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
277
279
|
.subscribe((value) => {
|
|
278
280
|
this.leftTemplates = value.left;
|
|
279
281
|
this.centerTemplates = value.center;
|
|
@@ -282,13 +284,13 @@ export class SkyListToolbarComponent {
|
|
|
282
284
|
});
|
|
283
285
|
}
|
|
284
286
|
}
|
|
285
|
-
SkyListToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
|
286
|
-
SkyListToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.
|
|
287
|
+
SkyListToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyListToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ListState }, { token: i2.ListStateDispatcher }, { token: i3.ListToolbarState }, { token: i4.ListToolbarStateDispatcher }], target: i0.ɵɵFactoryTarget.Component });
|
|
288
|
+
SkyListToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: SkyListToolbarComponent, selector: "sky-list-toolbar", inputs: { inMemorySearchEnabled: "inMemorySearchEnabled", placeholder: "placeholder", searchEnabled: "searchEnabled", sortSelectorEnabled: "sortSelectorEnabled", toolbarType: "toolbarType", searchText: "searchText" }, providers: [
|
|
287
289
|
ListToolbarState,
|
|
288
290
|
ListToolbarStateDispatcher,
|
|
289
|
-
ListToolbarStateModel
|
|
290
|
-
], queries: [{ propertyName: "toolbarItems", predicate: SkyListToolbarItemComponent }, { propertyName: "toolbarSorts", predicate: SkyListToolbarSortComponent }, { propertyName: "filterSummary", predicate: SkyListFilterSummaryComponent }, { propertyName: "inlineFilter", predicate: SkyListFilterInlineComponent }, { propertyName: "viewActions", predicate: SkyListToolbarViewActionsComponent }], viewQueries: [{ propertyName: "searchComponent", first: true, predicate: SkySearchComponent, descendants: true, read: SkySearchComponent }, { propertyName: "searchTemplate", first: true, predicate: ["search"], descendants: true, read: TemplateRef, static: true }, { propertyName: "sortSelectorTemplate", first: true, predicate: ["sortSelector"], descendants: true, read: TemplateRef, static: true }, { propertyName: "inlineFilterButtonTemplate", first: true, predicate: ["inlineFilterButton"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div class=\"sky-list-toolbar-container\">\n <sky-toolbar *ngIf=\"(type | async) !== 'search'\">\n
|
|
291
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
|
291
|
+
ListToolbarStateModel,
|
|
292
|
+
], queries: [{ propertyName: "toolbarItems", predicate: SkyListToolbarItemComponent }, { propertyName: "toolbarSorts", predicate: SkyListToolbarSortComponent }, { propertyName: "filterSummary", predicate: SkyListFilterSummaryComponent }, { propertyName: "inlineFilter", predicate: SkyListFilterInlineComponent }, { propertyName: "viewActions", predicate: SkyListToolbarViewActionsComponent }], viewQueries: [{ propertyName: "searchComponent", first: true, predicate: SkySearchComponent, descendants: true, read: SkySearchComponent }, { propertyName: "searchTemplate", first: true, predicate: ["search"], descendants: true, read: TemplateRef, static: true }, { propertyName: "sortSelectorTemplate", first: true, predicate: ["sortSelector"], descendants: true, read: TemplateRef, static: true }, { propertyName: "inlineFilterButtonTemplate", first: true, predicate: ["inlineFilterButton"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div class=\"sky-list-toolbar-container\">\n <sky-toolbar *ngIf=\"(type | async) !== 'search'\">\n <sky-toolbar-section>\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item\n *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content select=\"sky-list-toolbar-view-actions\"> </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n\n <sky-toolbar-section\n *ngIf=\"showFilterSummary && (hasAppliedFilters | async)\"\n >\n <ng-content select=\"sky-list-filter-summary\"> </ng-content>\n </sky-toolbar-section>\n </sky-toolbar>\n\n <div\n *ngIf=\"\n (type | async) === 'search' &&\n ((isSearchEnabled | async) || hasAdditionalToolbarSection)\n \"\n class=\"sky-list-toolbar-search\"\n >\n <sky-toolbar>\n <sky-toolbar-section *ngIf=\"isSearchEnabled | async\">\n <sky-toolbar-item>\n <sky-list-toolbar-item-renderer\n sky-cmp-id=\"search\"\n [template]=\"search\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n </sky-toolbar-section>\n <sky-toolbar-section [hidden]=\"!hasAdditionalToolbarSection\">\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item\n *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer\n *ngIf=\"item.id !== 'search'\"\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content select=\"sky-list-toolbar-view-actions\"> </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n </div>\n <div\n *ngIf=\"isFilterBarDisplayed\"\n [attr.aria-labelledby]=\"filterButtonId\"\n [id]=\"listFilterInlineId\"\n >\n <ng-content select=\"sky-list-filter-inline\"> </ng-content>\n </div>\n <sky-list-multiselect-toolbar *ngIf=\"isMultiselectEnabled | async\">\n </sky-list-multiselect-toolbar>\n</div>\n\n<ng-template #search>\n <div *ngIf=\"isSearchEnabled | async\" class=\"sky-list-toolbar-search-wrapper\">\n <sky-search\n [disabled]=\"isToolbarDisabled\"\n [expandMode]=\"(type | async) === 'search' ? 'fit' : 'responsive'\"\n [placeholderText]=\"placeholder\"\n [searchText]=\"searchTextInput | async\"\n (searchApply)=\"updateSearchText($event)\"\n >\n </sky-search>\n <ng-content select=\"sky-list-toolbar-search-actions\"></ng-content>\n </div>\n</ng-template>\n\n<ng-template #sortSelector>\n <div\n *ngIf=\"\n (isSortSelectorEnabled | async) && (sortSelectors | async).length > 0\n \"\n class=\"sky-toolbar-item-sort-container\"\n >\n <sky-sort [showButtonText]=\"true\">\n <sky-sort-item\n *ngFor=\"let item of sortSelectors | async\"\n [active]=\"item.selected\"\n (itemSelect)=\"setSort(item.sort)\"\n >\n {{ item.sort.text }}\n </sky-sort-item>\n </sky-sort>\n </div>\n</ng-template>\n\n<ng-template #inlineFilterButton>\n <sky-filter-button\n [active]=\"hasAppliedFilters | async\"\n [ariaControls]=\"filterButtonAriaControls\"\n [ariaExpanded]=\"inlineFilterBarExpanded\"\n [disabled]=\"isToolbarDisabled\"\n [filterButtonId]=\"filterButtonId\"\n [showButtonText]=\"true\"\n (filterButtonClick)=\"inlineFilterButtonClick()\"\n >\n </sky-filter-button>\n</ng-template>\n", styles: [".sky-list-toolbar-search-wrapper{display:flex}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-dismiss-absolute{padding:0;position:static}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-container{position:relative;height:100%}.sky-list-toolbar-search-wrapper ::ng-deep sky-search{flex:1 1 auto}.sky-list-toolbar-search-wrapper ::ng-deep sky-list-toolbar-search-actions{flex:0 0 auto;z-index:1}.sky-list-toolbar-container ::ng-deep .sky-toolbar-section-items sky-toolbar-item{flex:0 1 auto;align-self:flex-start}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section{padding-top:0}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section-items{display:block;width:100%}.sky-list-toolbar-search ::ng-deep .sky-toolbar-item{margin:0}.sky-list-toolbar-search ::ng-deep .sky-toolbar-container,.sky-list-toolbar-search ::ng-deep .sky-search-dismiss-absolute{background-color:#eeeeef}.sky-list-toolbar-search ::ng-deep input[type=text]:disabled,.sky-list-toolbar-search ::ng-deep .sky-search-btn:disabled{background-color:#cdcfd2;opacity:1}.sky-list-toolbar-container ::ng-deep sky-toolbar-item[sky-toolbar-id=sort-selector] .sky-toolbar-item{margin-right:0}.sky-list-toolbar-container ::ng-deep sky-checkbox{position:relative;top:-2px}\n"], components: [{ type: i5.λ37, selector: "sky-toolbar" }, { type: i5.λ38, selector: "sky-toolbar-section" }, { type: i5.λ39, selector: "sky-toolbar-item" }, { type: i6.SkyListToolbarItemRendererComponent, selector: "sky-list-toolbar-item-renderer", inputs: ["template"] }, { type: i5.λ40, selector: "sky-toolbar-view-actions" }, { type: i7.SkyListMultiselectToolbarComponent, selector: "sky-list-multiselect-toolbar", inputs: ["showOnlySelected"] }, { type: i8.SkySearchComponent, selector: "sky-search", inputs: ["searchText", "expandMode", "debounceTime", "disabled", "placeholderText"], outputs: ["searchApply", "searchChange", "searchClear"] }, { type: i9.λ14, selector: "sky-sort", inputs: ["showButtonText"] }, { type: i9.λ13, selector: "sky-sort-item", inputs: ["active"], outputs: ["itemSelect"] }, { type: i9.λ1, selector: "sky-filter-button", inputs: ["filterButtonId", "ariaControls", "ariaExpanded", "active", "disabled", "showButtonText"], outputs: ["filterButtonClick"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i10.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
293
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyListToolbarComponent, decorators: [{
|
|
292
294
|
type: Component,
|
|
293
295
|
args: [{
|
|
294
296
|
selector: 'sky-list-toolbar',
|
|
@@ -297,9 +299,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.8", ngImpor
|
|
|
297
299
|
providers: [
|
|
298
300
|
ListToolbarState,
|
|
299
301
|
ListToolbarStateDispatcher,
|
|
300
|
-
ListToolbarStateModel
|
|
302
|
+
ListToolbarStateModel,
|
|
301
303
|
],
|
|
302
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
304
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
303
305
|
}]
|
|
304
306
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ListState }, { type: i2.ListStateDispatcher }, { type: i3.ListToolbarState }, { type: i4.ListToolbarStateDispatcher }]; }, propDecorators: { inMemorySearchEnabled: [{
|
|
305
307
|
type: Input
|
|
@@ -311,7 +313,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.8", ngImpor
|
|
|
311
313
|
type: ViewChild,
|
|
312
314
|
args: [SkySearchComponent, {
|
|
313
315
|
read: SkySearchComponent,
|
|
314
|
-
static: false
|
|
316
|
+
static: false,
|
|
315
317
|
}]
|
|
316
318
|
}], sortSelectorEnabled: [{
|
|
317
319
|
type: Input
|
|
@@ -338,19 +340,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.8", ngImpor
|
|
|
338
340
|
type: ViewChild,
|
|
339
341
|
args: ['search', {
|
|
340
342
|
read: TemplateRef,
|
|
341
|
-
static: true
|
|
343
|
+
static: true,
|
|
342
344
|
}]
|
|
343
345
|
}], sortSelectorTemplate: [{
|
|
344
346
|
type: ViewChild,
|
|
345
347
|
args: ['sortSelector', {
|
|
346
348
|
read: TemplateRef,
|
|
347
|
-
static: true
|
|
349
|
+
static: true,
|
|
348
350
|
}]
|
|
349
351
|
}], inlineFilterButtonTemplate: [{
|
|
350
352
|
type: ViewChild,
|
|
351
353
|
args: ['inlineFilterButton', {
|
|
352
354
|
read: TemplateRef,
|
|
353
|
-
static: true
|
|
355
|
+
static: true,
|
|
354
356
|
}]
|
|
355
357
|
}] } });
|
|
356
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpc3QtYnVpbGRlci9zcmMvbW9kdWxlcy9saXN0LXRvb2xiYXIvbGlzdC10b29sYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpc3QtYnVpbGRlci9zcmMvbW9kdWxlcy9saXN0LXRvb2xiYXIvbGlzdC10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxhQUFhLElBQUksdUJBQXVCLEVBRXhDLE9BQU8sRUFDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBQyxHQUFHLElBQUksYUFBYSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRixPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUlMLFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLFFBQVEsRUFDVCxNQUFNLDRCQUE0QixDQUFDO0FBTXBDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUNMLG9CQUFvQixFQUNyQixNQUFNLDBDQUEwQyxDQUFDO0FBRWxELE9BQU8sRUFDTCx3QkFBd0IsRUFDekIsTUFBTSx1Q0FBdUMsQ0FBQztBQVUvQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ25CLE1BQU0sZ0NBQWdDLENBQUM7QUFNeEMsT0FBTyxFQUNMLDZCQUE2QixFQUM5QixNQUFNLDZDQUE2QyxDQUFDO0FBRXJELE9BQU8sRUFDTCw0QkFBNEIsRUFDN0IsTUFBTSw4Q0FBOEMsQ0FBQztBQUV0RCxPQUFPLEVBQ0wsNkJBQTZCLEVBQzlCLE1BQU0sK0NBQStDLENBQUM7QUFFdkQsT0FBTyxFQUNM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QUFDLDZCQUE2QjtnQkFJdEMsWUFBWTtzQkFEbkIsZUFBZTt1QkFBQyw0QkFBNEI7Z0JBSXJDLFdBQVc7c0JBRGxCLGVBQWU7dUJBQUMsa0NBQWtDO2dCQU8zQyxjQUFjO3NCQUpyQixTQUFTO3VCQUFDLFFBQVEsRUFBRTt3QkFDbkIsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQU9PLG9CQUFvQjtzQkFKM0IsU0FBUzt1QkFBQyxjQUFjLEVBQUU7d0JBQ3pCLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPTywwQkFBMEI7c0JBSmpDLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUU7d0JBQy9CLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QgYXMgb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7bWFwIGFzIG9ic2VydmFibGVNYXAsIHRha2VVbnRpbCwgdGFrZSwgZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIGdldFZhbHVlXG59IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcblxuaW1wb3J0IHtcbiAgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWxcbn0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG5pbXBvcnQge1xuICBTa3lTZWFyY2hDb21wb25lbnRcbn0gZnJvbSAnQHNreXV4L2xvb2t1cCc7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyTW9kZWxcbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS90b29sYmFyL3Rvb2xiYXIubW9kZWwnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhckl0ZW1Nb2RlbFxufSBmcm9tICcuLi9saXN0L3N0YXRlL3Rvb2xiYXIvdG9vbGJhci1pdGVtLm1vZGVsJztcblxuaW1wb3J0IHtcbiAgTGlzdFRvb2xiYXJTZXRUeXBlQWN0aW9uXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvdG9vbGJhci9zZXQtdHlwZS5hY3Rpb24nO1xuXG5pbXBvcnQge1xuICBMaXN0U3RhdGVcbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9saXN0LXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5pbXBvcnQge1xuICBMaXN0U3RhdGVEaXNwYXRjaGVyXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvbGlzdC1zdGF0ZS5yeHN0YXRlJztcblxuaW1wb3J0IHtcbiAgTGlzdFNvcnRMYWJlbE1vZGVsXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvc29ydC9sYWJlbC5tb2RlbCc7XG5cbmltcG9ydCB7XG4gIExpc3RGaWx0ZXJNb2RlbFxufSBmcm9tICcuLi9saXN0LWZpbHRlcnMvZmlsdGVyLm1vZGVsJztcblxuaW1wb3J0IHtcbiAgTGlzdFBhZ2luZ1NldFBhZ2VOdW1iZXJBY3Rpb25cbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9wYWdpbmcvc2V0LXBhZ2UtbnVtYmVyLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIFNreUxpc3RGaWx0ZXJJbmxpbmVDb21wb25lbnRcbn0gZnJvbSAnLi4vbGlzdC1maWx0ZXJzL2xpc3QtZmlsdGVyLWlubGluZS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0RmlsdGVyU3VtbWFyeUNvbXBvbmVudFxufSBmcm9tICcuLi9saXN0LWZpbHRlcnMvbGlzdC1maWx0ZXItc3VtbWFyeS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhckl0ZW1Db21wb25lbnRcbn0gZnJvbSAnLi9saXN0LXRvb2xiYXItaXRlbS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnRcbn0gZnJvbSAnLi9saXN0LXRvb2xiYXItc29ydC5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhclZpZXdBY3Rpb25zQ29tcG9uZW50XG59IGZyb20gJy4vbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhckNvbmZpZ1NldFNlYXJjaEVuYWJsZWRBY3Rpb25cbn0gZnJvbSAnLi9zdGF0ZS9jb25maWcvc2V0LXNlYXJjaC1lbmFibGVkLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyQ29uZmlnU2V0U29ydFNlbGVjdG9yRW5hYmxlZEFjdGlvblxufSBmcm9tICcuL3N0YXRlL2NvbmZpZy9zZXQtc29ydC1zZWxlY3Rvci1lbmFibGVkLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyU3RhdGVcbn0gZnJvbSAnLi9zdGF0ZS90b29sYmFyLXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhclN0YXRlRGlzcGF0Y2hlclxufSBmcm9tICcuL3N0YXRlL3Rvb2xiYXItc3RhdGUucnhzdGF0ZSc7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyU3RhdGVNb2RlbFxufSBmcm9tICcuL3N0YXRlL3Rvb2xiYXItc3RhdGUubW9kZWwnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIHRvb2xiYXIgZm9yIGEgU0tZIFVYLXRoZW1lZCBsaXN0IG9mIGRhdGEuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIExpc3RUb29sYmFyU3RhdGUsXG4gICAgTGlzdFRvb2xiYXJTdGF0ZURpc3BhdGNoZXIsXG4gICAgTGlzdFRvb2xiYXJTdGF0ZU1vZGVsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgdGhlIGluLW1lbW9yeSBzZWFyY2guXG4gICAqIFNldHRpbmcgdGhpcyB0byBgZmFsc2VgIHdpbGwgYWxsb3cgY29uc3VtZXJzIHRvIHJ1biB0aGVpciBvd24gc2VhcmNoZXMgcmVtb3RlbHksXG4gICAqIGFuZCBwdXNoIG5ldyB2YWx1ZXMgdG8gdGhlIGxpc3QgY29tcG9uZW50IGJ5IHVwZGF0aW5nIHRoZSBgZGF0YWAgcHJvcGVydHkuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluTWVtb3J5U2VhcmNoRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBpbk1lbW9yeVNlYXJjaEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIHNlYXJjaCBiYXIgdGhhdCB0aGUgbGlzdCB0b29sYmFyIGNyZWF0ZXMgd2l0aFxuICAgKiBhIFtzZWFyY2ggY29tcG9uZW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvc2VhcmNoKS5cbiAgICogQGRlZmF1bHQgJ0ZpbmQgaW4gdGhpcyBsaXN0J1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgc2VhcmNoIGJhci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIEBWaWV3Q2hpbGQoU2t5U2VhcmNoQ29tcG9uZW50LCB7XG4gICAgcmVhZDogU2t5U2VhcmNoQ29tcG9uZW50LFxuICAgIHN0YXRpYzogZmFsc2VcbiAgfSlcbiAgcHVibGljIHNlYXJjaENvbXBvbmVudDogU2t5U2VhcmNoQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgdGhlIHNvcnQgc2VsZWN0b3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc29ydFNlbGVjdG9yRW5hYmxlZDogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIHNlYXJjaCBiYXIgaW4gdGhlIHN0YW5kYXJkIHBvc2l0aW9uIG9yIGluIGEgc2VwYXJhdGUgc2VjdGlvbi5cbiAgICogVG8gaGlnaGxpZ2h0IHRoZSBzZWFyY2ggYmFyIGluIGEgc2VjdGlvbiBhYm92ZSBhbGwgb3RoZXIgdG9vbGJhciBpdGVtcyxcbiAgICogc2V0IHRoaXMgcHJvcGVydHkgdG8gYHNlYXJjaGAuXG4gICAqIEBkZWZhdWx0ICdzdGFuZGFyZCdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyVHlwZTogc3RyaW5nID0gJ3N0YW5kYXJkJztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgdGV4dCBzdHJpbmcgdG8gc2VhcmNoIHdpdGguXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoVGV4dDogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHB1YmxpYyBnZXQgaXNGaWx0ZXJCYXJEaXNwbGF5ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzVG9vbGJhckRpc2FibGVkICYmIHRoaXMuaGFzSW5saW5lRmlsdGVycyAmJiB0aGlzLmlubGluZUZpbHRlckJhckV4cGFuZGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJCdXR0b25BcmlhQ29udHJvbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckJhckRpc3BsYXllZCA/IHRoaXMubGlzdEZpbHRlcklubGluZUlkIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNvcnRTZWxlY3RvcnM6IE9ic2VydmFibGU8QXJyYXk8YW55Pj47XG4gIHB1YmxpYyBzZWFyY2hUZXh0SW5wdXQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIHZpZXc6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGxlZnRUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyBjZW50ZXJUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyByaWdodFRlbXBsYXRlczogTGlzdFRvb2xiYXJJdGVtTW9kZWxbXTtcbiAgcHVibGljIHR5cGU6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGlzU2VhcmNoRW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc011bHRpc2VsZWN0RW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzU29ydFNlbGVjdG9yRW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGFwcGxpZWRGaWx0ZXJzOiBPYnNlcnZhYmxlPEFycmF5PExpc3RGaWx0ZXJNb2RlbD4+O1xuICBwdWJsaWMgaGFzQXBwbGllZEZpbHRlcnM6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBzaG93RmlsdGVyU3VtbWFyeTogYm9vbGVhbjtcbiAgcHVibGljIGhhc0lubGluZUZpbHRlcnM6IGJvb2xlYW47XG4gIHB1YmxpYyBpbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaGFzQWRkaXRpb25hbFRvb2xiYXJTZWN0aW9uID0gZmFsc2U7XG4gIHB1YmxpYyBoYXNWaWV3QWN0aW9ucyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBmaWx0ZXJCdXR0b25JZDogc3RyaW5nID0gYHNreS1saXN0LXRvb2xiYXItZmlsdGVyLWJ1dHRvbi0keysrbmV4dElkfWA7XG4gIHB1YmxpYyBsaXN0RmlsdGVySW5saW5lSWQ6IHN0cmluZyA9IGBza3ktbGlzdC10b29sYmFyLWZpbHRlci1pbmxpbmUtJHsrK25leHRJZH1gO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHN1Ym1pdCBhIHNlYXJjaC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoQXBwbGllZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJJdGVtQ29tcG9uZW50KVxuICBwcml2YXRlIHRvb2xiYXJJdGVtczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFySXRlbUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnQpXG4gIHByaXZhdGUgdG9vbGJhclNvcnRzOiBRdWVyeUxpc3Q8U2t5TGlzdFRvb2xiYXJTb3J0Q29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFNreUxpc3RGaWx0ZXJTdW1tYXJ5Q29tcG9uZW50KVxuICBwcml2YXRlIGZpbHRlclN1bW1hcnk6IFF1ZXJ5TGlzdDxTa3lMaXN0RmlsdGVyU3VtbWFyeUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0RmlsdGVySW5saW5lQ29tcG9uZW50KVxuICBwcml2YXRlIGlubGluZUZpbHRlcjogUXVlcnlMaXN0PFNreUxpc3RGaWx0ZXJJbmxpbmVDb21wb25lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJWaWV3QWN0aW9uc0NvbXBvbmVudClcbiAgcHJpdmF0ZSB2aWV3QWN0aW9uczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFyVmlld0FjdGlvbnNDb21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaCcsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWVcbiAgfSlcbiAgcHJpdmF0ZSBzZWFyY2hUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKCdzb3J0U2VsZWN0b3InLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlXG4gIH0pXG4gIHByaXZhdGUgc29ydFNlbGVjdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgnaW5saW5lRmlsdGVyQnV0dG9uJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZVxuICB9KVxuICBwcml2YXRlIGlubGluZUZpbHRlckJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgY3VzdG9tSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBoYXNTb3J0U2VsZWN0b3JzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5saW5lRmlsdGVyc0l0ZW1Ub29sYmFySW5kZXg6IG51bWJlciA9IDUwMDA7XG4gIHByaXZhdGUgc29ydFNlbGVjdG9ySXRlbVRvb2xiYXJJbmRleDogbnVtYmVyID0gNjAwMDtcbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIF9pbk1lbW9yeVNlYXJjaEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdGF0ZTogTGlzdFN0YXRlLFxuICAgIHByaXZhdGUgZGlzcGF0Y2hlcjogTGlzdFN0YXRlRGlzcGF0Y2hlcixcbiAgICBwcml2YXRlIHRvb2xiYXJTdGF0ZTogTGlzdFRvb2xiYXJTdGF0ZSxcbiAgICBwdWJsaWMgdG9vbGJhckRpc3BhdGNoZXI6IExpc3RUb29sYmFyU3RhdGVEaXNwYXRjaGVyXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyRXhpc3RzKHRydWUpO1xuXG4gICAgZ2V0VmFsdWUodGhpcy5zZWFyY2hUZXh0LCAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaFRleHQoc2VhcmNoVGV4dCk7XG4gICAgfSk7XG5cbiAgICBnZXRWYWx1ZSh0aGlzLnNlYXJjaEVuYWJsZWQsIChzZWFyY2hFbmFibGVkOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnRvb2xiYXJEaXNwYXRjaGVyLm5leHQoXG4gICAgICAgIG5ldyBMaXN0VG9vbGJhckNvbmZpZ1NldFNlYXJjaEVuYWJsZWRBY3Rpb24oXG4gICAgICAgICAgc2VhcmNoRW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNlYXJjaEVuYWJsZWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGdldFZhbHVlKHRoaXMudG9vbGJhclR5cGUsICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5uZXh0KG5ldyBMaXN0VG9vbGJhclNldFR5cGVBY3Rpb24odGhpcy50b29sYmFyVHlwZSkpO1xuICAgIH0pO1xuXG4gICAgZ2V0VmFsdWUodGhpcy5zb3J0U2VsZWN0b3JFbmFibGVkLCAoc29ydFNlbGVjdG9yRW5hYmxlZDogYW55KSA9PiB7XG4gICAgICB0aGlzLnRvb2xiYXJEaXNwYXRjaGVyLm5leHQoXG4gICAgICAgIG5ldyBMaXN0VG9vbGJhckNvbmZpZ1NldFNvcnRTZWxlY3RvckVuYWJsZWRBY3Rpb24oXG4gICAgICAgICAgc29ydFNlbGVjdG9yRW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNvcnRTZWxlY3RvckVuYWJsZWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc29ydFNlbGVjdG9ycyA9IHRoaXMuZ2V0U29ydFNlbGVjdG9ycygpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgc29ydCB0b29sYmFyIGl0ZW0gaWYgbmVjZXNzYXJ5XG4gICAgdGhpcy5zb3J0U2VsZWN0b3JzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbnRTb3J0KSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50U29ydC5sZW5ndGggPiAwICYmICF0aGlzLmhhc1NvcnRTZWxlY3RvcnMpIHtcbiAgICAgICAgICB0aGlzLmhhc1NvcnRTZWxlY3RvcnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyQWRkSXRlbXMoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh7XG4gICAgICAgICAgICAgICAgaWQ6ICdzb3J0LXNlbGVjdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5zb3J0U2VsZWN0b3JUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLnNvcnRTZWxlY3Rvckl0ZW1Ub29sYmFySW5kZXhcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTb3J0Lmxlbmd0aCA8IDEgJiYgdGhpcy5oYXNTb3J0U2VsZWN0b3JzKSB7XG4gICAgICAgICAgdGhpcy5oYXNTb3J0U2VsZWN0b3JzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhbXG4gICAgICAgICAgICAnc29ydC1zZWxlY3RvcidcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnNlYXJjaFRleHRJbnB1dCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMuc2VhcmNoLnNlYXJjaFRleHQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICB0aGlzLnZpZXcgPSB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLnZpZXdzLmFjdGl2ZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgIHRoaXMud2F0Y2hUZW1wbGF0ZXMoKTtcblxuICAgIHRoaXMudHlwZSA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgoc3RhdGUpID0+IHN0YXRlLnRvb2xiYXIudHlwZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgIHRoaXMudHlwZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh0b29sYmFyVHlwZSkgPT4ge1xuICAgICAgICBpZiAodG9vbGJhclR5cGUgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhbJ3NlYXJjaCddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwoe1xuICAgICAgICAgICAgICAgIGlkOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5zZWFyY2hUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5pc1NlYXJjaEVuYWJsZWQgPSB0aGlzLnRvb2xiYXJTdGF0ZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBvYnNlcnZhYmxlTWFwKHMgPT4gcy5jb25maWcpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoYyA9PiBjLnNlYXJjaEVuYWJsZWQpKTtcblxuICAgIHRoaXMuc3RhdGUucGlwZShvYnNlcnZhYmxlTWFwKHMgPT4gcy50b29sYmFyKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoYyA9PiBjLmRpc2FibGVkKSlcbiAgICAgIC5zdWJzY3JpYmUoaXNEaXNhYmxlZCA9PiB0aGlzLmlzVG9vbGJhckRpc2FibGVkID0gaXNEaXNhYmxlZCk7XG5cbiAgICB0aGlzLmlzU29ydFNlbGVjdG9yRW5hYmxlZCA9IHRoaXMudG9vbGJhclN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLmNvbmZpZyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChjID0+IGMuc29ydFNlbGVjdG9yRW5hYmxlZCkpO1xuXG4gICAgdGhpcy5pc011bHRpc2VsZWN0RW5hYmxlZCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMudG9vbGJhciksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCh0ID0+IHQuc2hvd011bHRpc2VsZWN0VG9vbGJhcikpO1xuXG4gICAgdGhpcy5oYXNBcHBsaWVkRmlsdGVycyA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMuZmlsdGVycyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgoZmlsdGVycykgPT4ge1xuICAgICAgICBsZXQgYWN0aXZlRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGYudmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICBmLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGYudmFsdWUgIT09IGZhbHNlICYmXG4gICAgICAgICAgICBmLnZhbHVlICE9PSBmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhY3RpdmVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmhhc0FkZGl0aW9uYWxUb29sYmFyU2VjdGlvbiA9IChjdXJyZW50LnRvb2xiYXIuaXRlbXMubGVuZ3RoID4gMCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIEluamVjdCBjdXN0b20gdG9vbGJhciBpdGVtcy5cbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5mb3JFYWNoKCh0b29sYmFySXRlbSkgPT4ge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJBZGRJdGVtcyhcbiAgICAgICAgW1xuICAgICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh0b29sYmFySXRlbSlcbiAgICAgICAgXVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jdXN0b21JdGVtSWRzLnB1c2godG9vbGJhckl0ZW0uaWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50b29sYmFySXRlbXMuY2hhbmdlcy5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChuZXdJdGVtczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFySXRlbUNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgbmV3SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jdXN0b21JdGVtSWRzLmluZGV4T2YoaXRlbS5pZCkgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgbmV3IExpc3RUb29sYmFySXRlbU1vZGVsKGl0ZW0pXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tSXRlbUlkcy5wdXNoKGl0ZW0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaXRlbXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICB0aGlzLmN1c3RvbUl0ZW1JZHMuZm9yRWFjaCgoaXRlbUlkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICghbmV3SXRlbXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGl0ZW1JZCkpIHtcbiAgICAgICAgICAgIGl0ZW1zVG9SZW1vdmUucHVzaChpdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21JdGVtSWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhclJlbW92ZUl0ZW1zKGl0ZW1zVG9SZW1vdmUpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBzb3J0TW9kZWxzID0gdGhpcy50b29sYmFyU29ydHMubWFwKHNvcnQgPT5cbiAgICAgIG5ldyBMaXN0U29ydExhYmVsTW9kZWwoXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBzb3J0LmxhYmVsLFxuICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IHNvcnQuZmllbGQsXG4gICAgICAgICAgZmllbGRUeXBlOiBzb3J0LnR5cGUsXG4gICAgICAgICAgZ2xvYmFsOiB0cnVlLFxuICAgICAgICAgIGRlc2NlbmRpbmc6IHNvcnQuZGVzY2VuZGluZ1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hlci5zb3J0U2V0R2xvYmFsKHNvcnRNb2RlbHMpO1xuXG4gICAgLy8gQWRkIGlubGluZSBmaWx0ZXJzLlxuICAgIHRoaXMuc2hvd0ZpbHRlclN1bW1hcnkgPSAodGhpcy5maWx0ZXJTdW1tYXJ5Lmxlbmd0aCA+IDApO1xuICAgIHRoaXMuaGFzSW5saW5lRmlsdGVycyA9ICh0aGlzLmlubGluZUZpbHRlci5sZW5ndGggPiAwKTtcblxuICAgIGlmICh0aGlzLmhhc0lubGluZUZpbHRlcnMpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyQWRkSXRlbXMoXG4gICAgICAgIFtcbiAgICAgICAgICBuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwoe1xuICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuaW5saW5lRmlsdGVyQnV0dG9uVGVtcGxhdGUsXG4gICAgICAgICAgICBsb2NhdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5saW5lRmlsdGVyc0l0ZW1Ub29sYmFySW5kZXhcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB2aWV3IGFjdGlvbnNcbiAgICB0aGlzLmhhc1ZpZXdBY3Rpb25zID0gKHRoaXMudmlld0FjdGlvbnMubGVuZ3RoID4gMCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWFyY2hBcHBsaWVkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTb3J0KHNvcnQ6IExpc3RTb3J0TGFiZWxNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGN1cnJlbnRTdGF0ZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5wYWdpbmcucGFnZU51bWJlciAmJiBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgIT09IDEpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLm5leHQoXG4gICAgICAgICAgbmV3IExpc3RQYWdpbmdTZXRQYWdlTnVtYmVyQWN0aW9uKE51bWJlcigxKSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXNwYXRjaGVyLnNvcnRTZXRGaWVsZFNlbGVjdG9ycyhcbiAgICAgICAgW3sgZmllbGRTZWxlY3Rvcjogc29ydC5maWVsZFNlbGVjdG9yLCBkZXNjZW5kaW5nOiBzb3J0LmRlc2NlbmRpbmcgfV1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5saW5lRmlsdGVyQnV0dG9uQ2xpY2soKSB7XG4gICAgdGhpcy5pbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZCA9ICF0aGlzLmlubGluZUZpbHRlckJhckV4cGFuZGVkO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNlYXJjaFRleHQoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hBcHBsaWVkLm5leHQoc2VhcmNoVGV4dCk7XG4gICAgaWYgKHRoaXMuaW5NZW1vcnlTZWFyY2hFbmFibGVkKSB7XG4gICAgICB0aGlzLnN0YXRlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50U3RhdGUpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5wYWdpbmcucGFnZU51bWJlciAmJiBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgIT09IDEpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIubmV4dChcbiAgICAgICAgICAgIG5ldyBMaXN0UGFnaW5nU2V0UGFnZU51bWJlckFjdGlvbihOdW1iZXIoMSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5zZWFyY2hTZXRUZXh0KHNlYXJjaFRleHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpdGVtSXNJblZpZXcoaXRlbVZpZXc6IHN0cmluZywgYWN0aXZlVmlldzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpdGVtVmlldyA9PT0gdW5kZWZpbmVkIHx8IGl0ZW1WaWV3ID09PSBhY3RpdmVWaWV3KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydFNlbGVjdG9ycygpIHtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QoXG4gICAgICB0aGlzLnN0YXRlLnBpcGUob2JzZXJ2YWJsZU1hcChzID0+IHMuc29ydC5hdmFpbGFibGUpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgIHRoaXMuc3RhdGUucGlwZShvYnNlcnZhYmxlTWFwKHMgPT4gcy5zb3J0Lmdsb2JhbCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgdGhpcy5zdGF0ZS5waXBlKG9ic2VydmFibGVNYXAocyA9PiBzLnNvcnQuZmllbGRTZWxlY3RvcnMpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgIChcbiAgICAgICAgYXZhaWxhYmxlOiBBcnJheTxMaXN0U29ydExhYmVsTW9kZWw+LFxuICAgICAgICBnbG9iYWw6IEFycmF5PExpc3RTb3J0TGFiZWxNb2RlbD4sXG4gICAgICAgIGZpZWxkU2VsZWN0b3JzOiBBcnJheTxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD5cbiAgICAgICkgPT4ge1xuXG4gICAgICAgIC8vIEdldCBzb3J0cyB0aGF0IGFyZSBpbiB0aGUgZ2xvYmFsIHRoYXQgYXJlIG5vdCBpbiB0aGUgYXZhaWxhYmxlXG4gICAgICAgIGxldCBzb3J0cyA9IGdsb2JhbC5maWx0ZXIoXG4gICAgICAgICAgZyA9PiBhdmFpbGFibGUuZmlsdGVyKGEgPT4gYS5maWVsZFNlbGVjdG9yID09PSBnLmZpZWxkU2VsZWN0b3IpLmxlbmd0aCA9PT0gMFxuICAgICAgICApO1xuXG4gICAgICAgIGxldCByZXN1bHRTb3J0U2VsZWN0b3JzID0gWy4uLnNvcnRzLCAuLi5hdmFpbGFibGVdLm1hcChzb3J0TGFiZWxzID0+IHtcbiAgICAgICAgICBsZXQgZnMgPSBmaWVsZFNlbGVjdG9ycy5maWx0ZXIoZiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZi5maWVsZFNlbGVjdG9yID09PSBzb3J0TGFiZWxzLmZpZWxkU2VsZWN0b3JcbiAgICAgICAgICAgICAgJiYgZi5kZXNjZW5kaW5nID09PSBzb3J0TGFiZWxzLmRlc2NlbmRpbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc29ydDogc29ydExhYmVscyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRTb3J0U2VsZWN0b3JzO1xuICAgICAgfVxuICAgICkucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hUZW1wbGF0ZXMoKSB7XG4gICAgb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QoXG4gICAgICB0aGlzLnN0YXRlLnBpcGUob2JzZXJ2YWJsZU1hcChzID0+IHMudG9vbGJhciksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgdGhpcy52aWV3LnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgICAodG9vbGJhcjogTGlzdFRvb2xiYXJNb2RlbCwgdmlldzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdG9vbGJhci5pdGVtcy5maWx0ZXIoKGk6IExpc3RUb29sYmFySXRlbU1vZGVsKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUlzSW5WaWV3KGkudmlldywgdmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlczogYW55ID0ge307XG5cbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogTGlzdFRvb2xiYXJJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICB0ZW1wbGF0ZXNbaXRlbS5sb2NhdGlvbl0gPSB0ZW1wbGF0ZXNbaXRlbS5sb2NhdGlvbl0gfHwgW107XG4gICAgICAgICAgdGVtcGxhdGVzW2l0ZW0ubG9jYXRpb25dLnB1c2goaXRlbSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXM7XG4gICAgICB9XG4gICAgKS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSlcbiAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmxlZnRUZW1wbGF0ZXMgPSB2YWx1ZS5sZWZ0O1xuICAgICAgICB0aGlzLmNlbnRlclRlbXBsYXRlcyA9IHZhbHVlLmNlbnRlcjtcbiAgICAgICAgdGhpcy5yaWdodFRlbXBsYXRlcyA9IHZhbHVlLnJpZ2h0O1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktbGlzdC10b29sYmFyLWNvbnRhaW5lclwiPlxuICA8c2t5LXRvb2xiYXIgKm5nSWY9XCIodHlwZSB8IGFzeW5jKSAhPT0gJ3NlYXJjaCdcIj5cblxuICAgIDxza3ktdG9vbGJhci1zZWN0aW9uPlxuICAgICAgPHNreS10b29sYmFyLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGVmdFRlbXBsYXRlc1wiPlxuICAgICAgICA8c2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyXG4gICAgICAgICAgW2F0dHIuc2t5LWNtcC1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiaXRlbS50ZW1wbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXI+XG4gICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICA8c2t5LXRvb2xiYXItaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjZW50ZXJUZW1wbGF0ZXNcIj5cbiAgICAgICAgPHNreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlclxuICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIml0ZW0udGVtcGxhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuICAgICAgPHNreS10b29sYmFyLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmlnaHRUZW1wbGF0ZXNcIlxuICAgICAgICBbYXR0ci5za3ktdG9vbGJhci1pZF09XCJpdGVtLmlkXCJcbiAgICAgID5cbiAgICAgICAgPHNreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlclxuICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIml0ZW0udGVtcGxhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDxza3ktdG9vbGJhci12aWV3LWFjdGlvbnMgKm5nSWY9XCJoYXNWaWV3QWN0aW9uc1wiPlxuICAgICAgICA8bmctY29udGVudFxuICAgICAgICAgIHNlbGVjdD1cInNreS1saXN0LXRvb2xiYXItdmlldy1hY3Rpb25zXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRlbnQ+XG4gICAgICA8L3NreS10b29sYmFyLXZpZXctYWN0aW9ucz5cbiAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG5cbiAgICA8c2t5LXRvb2xiYXItc2VjdGlvbiAqbmdJZj1cInNob3dGaWx0ZXJTdW1tYXJ5ICYmIChoYXNBcHBsaWVkRmlsdGVycyB8IGFzeW5jKVwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWxpc3QtZmlsdGVyLXN1bW1hcnlcIj5cbiAgICAgIDwvbmctY29udGVudD5cbiAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gIDwvc2t5LXRvb2xiYXI+XG5cbiAgPGRpdiAqbmdJZj1cIih0eXBlIHwgYXN5bmMpID09PSAnc2VhcmNoJyAmJlxuICAgICgoaXNTZWFyY2hFbmFibGVkIHwgYXN5bmMpIHx8IGhhc0FkZGl0aW9uYWxUb29sYmFyU2VjdGlvbilcIlxuICAgIGNsYXNzPVwic2t5LWxpc3QtdG9vbGJhci1zZWFyY2hcIlxuICA+XG4gICAgPHNreS10b29sYmFyPlxuICAgICAgPHNreS10b29sYmFyLXNlY3Rpb24gKm5nSWY9XCIoaXNTZWFyY2hFbmFibGVkIHwgYXN5bmMpXCI+XG4gICAgICAgIDxza3ktdG9vbGJhci1pdGVtPlxuICAgICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXJcbiAgICAgICAgICAgIHNreS1jbXAtaWQ9XCJzZWFyY2hcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cInNlYXJjaFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gICAgICA8c2t5LXRvb2xiYXItc2VjdGlvbiBbaGlkZGVuXT1cIiFoYXNBZGRpdGlvbmFsVG9vbGJhclNlY3Rpb25cIj5cbiAgICAgICAgPHNreS10b29sYmFyLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGVmdFRlbXBsYXRlc1wiPlxuICAgICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICBbdGVtcGxhdGVdPVwiaXRlbS50ZW1wbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICAgIDxza3ktdG9vbGJhci1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNlbnRlclRlbXBsYXRlc1wiPlxuICAgICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICBbdGVtcGxhdGVdPVwiaXRlbS50ZW1wbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICAgIDxza3ktdG9vbGJhci1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJpZ2h0VGVtcGxhdGVzXCJcbiAgICAgICAgICBbYXR0ci5za3ktdG9vbGJhci1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXIgKm5nSWY9XCJpdGVtLmlkICE9PSAnc2VhcmNoJ1wiXG4gICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cIml0ZW0udGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3NreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlcj5cbiAgICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPHNreS10b29sYmFyLXZpZXctYWN0aW9ucyAqbmdJZj1cImhhc1ZpZXdBY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnRcbiAgICAgICAgICAgIHNlbGVjdD1cInNreS1saXN0LXRvb2xiYXItdmlldy1hY3Rpb25zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy1jb250ZW50PlxuICAgICAgICA8L3NreS10b29sYmFyLXZpZXctYWN0aW9ucz5cbiAgICAgIDwvc2t5LXRvb2xiYXItc2VjdGlvbj5cbiAgICA8L3NreS10b29sYmFyPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiaXNGaWx0ZXJCYXJEaXNwbGF5ZWRcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJmaWx0ZXJCdXR0b25JZFwiXG4gICAgW2lkXT1cImxpc3RGaWx0ZXJJbmxpbmVJZFwiXG4gID5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktbGlzdC1maWx0ZXItaW5saW5lXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbiAgPHNreS1saXN0LW11bHRpc2VsZWN0LXRvb2xiYXIgKm5nSWY9XCJpc011bHRpc2VsZWN0RW5hYmxlZCB8IGFzeW5jXCI+XG4gIDwvc2t5LWxpc3QtbXVsdGlzZWxlY3QtdG9vbGJhcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaD5cbiAgPGRpdiAqbmdJZj1cImlzU2VhcmNoRW5hYmxlZCB8IGFzeW5jXCJcbiAgICBjbGFzcz1cInNreS1saXN0LXRvb2xiYXItc2VhcmNoLXdyYXBwZXJcIlxuICA+XG4gICAgPHNreS1zZWFyY2hcbiAgICAgIFtkaXNhYmxlZF09XCJpc1Rvb2xiYXJEaXNhYmxlZFwiXG4gICAgICBbZXhwYW5kTW9kZV09XCIodHlwZSB8IGFzeW5jKSA9PT0gJ3NlYXJjaCcgPyAnZml0JyA6ICdyZXNwb25zaXZlJ1wiXG4gICAgICBbcGxhY2Vob2xkZXJUZXh0XT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaFRleHRJbnB1dCB8IGFzeW5jXCJcbiAgICAgIChzZWFyY2hBcHBseSk9XCJ1cGRhdGVTZWFyY2hUZXh0KCRldmVudClcIlxuICAgID5cbiAgICA8L3NreS1zZWFyY2g+XG4gICAgPG5nLWNvbnRlbnRcbiAgICAgIHNlbGVjdD1cInNreS1saXN0LXRvb2xiYXItc2VhcmNoLWFjdGlvbnNcIlxuICAgID48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzb3J0U2VsZWN0b3I+XG4gIDxkaXYgKm5nSWY9XCIoaXNTb3J0U2VsZWN0b3JFbmFibGVkIHwgYXN5bmMpICYmIChzb3J0U2VsZWN0b3JzIHwgYXN5bmMpLmxlbmd0aCA+IDBcIlxuICAgIGNsYXNzPVwic2t5LXRvb2xiYXItaXRlbS1zb3J0LWNvbnRhaW5lclwiXG4gID5cbiAgICA8c2t5LXNvcnQgW3Nob3dCdXR0b25UZXh0XT1cInRydWVcIj5cbiAgICAgIDxza3ktc29ydC1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNvcnRTZWxlY3RvcnMgfCBhc3luY1wiXG4gICAgICAgIFthY3RpdmVdPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgIChpdGVtU2VsZWN0KT1cInNldFNvcnQoaXRlbS5zb3J0KVwiXG4gICAgICA+XG4gICAgICAgIHt7IGl0ZW0uc29ydC50ZXh0IH19XG4gICAgICA8L3NreS1zb3J0LWl0ZW0+XG4gICAgPC9za3ktc29ydD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lubGluZUZpbHRlckJ1dHRvbj5cbiAgPHNreS1maWx0ZXItYnV0dG9uXG4gICAgW2FjdGl2ZV09XCJoYXNBcHBsaWVkRmlsdGVycyB8IGFzeW5jXCJcbiAgICBbYXJpYUNvbnRyb2xzXT1cImZpbHRlckJ1dHRvbkFyaWFDb250cm9sc1wiXG4gICAgW2FyaWFFeHBhbmRlZF09XCJpbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZFwiXG4gICAgW2Rpc2FibGVkXT1cImlzVG9vbGJhckRpc2FibGVkXCJcbiAgICBbZmlsdGVyQnV0dG9uSWRdPVwiZmlsdGVyQnV0dG9uSWRcIlxuICAgIFtzaG93QnV0dG9uVGV4dF09XCJ0cnVlXCJcbiAgICAoZmlsdGVyQnV0dG9uQ2xpY2spPVwiaW5saW5lRmlsdGVyQnV0dG9uQ2xpY2soKVwiXG4gID5cbiAgPC9za3ktZmlsdGVyLWJ1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpc3QtYnVpbGRlci9zcmMvbW9kdWxlcy9saXN0LXRvb2xiYXIvbGlzdC10b29sYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpc3QtYnVpbGRlci9zcmMvbW9kdWxlcy9saXN0LXRvb2xiYXIvbGlzdC10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxhQUFhLElBQUksdUJBQXVCLEVBRXhDLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxHQUFHLElBQUksYUFBYSxFQUNwQixTQUFTLEVBQ1QsSUFBSSxFQUNKLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixLQUFLLEVBSUwsV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSW5ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBTWpGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXBFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRTVGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRTVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRTlGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTNGLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRW5HLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWhILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7QUFFcEUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7O0dBRUc7QUFZSCxNQUFNLE9BQU8sdUJBQXVCO0lBa0psQyxZQUNVLGNBQWlDLEVBQ2pDLEtBQWdCLEVBQ2hCLFVBQStCLEVBQy9CLFlBQThCLEVBQy9CLGlCQUE2QztRQUo1QyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsVUFBSyxHQUFMLEtBQUssQ0FBVztRQUNoQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDL0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE0QjtRQXJHdEQ7Ozs7O1dBS0c7UUFFSSxnQkFBVyxHQUFXLFVBQVUsQ0FBQztRQTRCakMsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBT25DLDRCQUF1QixHQUFZLEtBQUssQ0FBQztRQUN6QyxnQ0FBMkIsR0FBRyxLQUFLLENBQUM7UUFDcEMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsbUJBQWMsR0FBVyxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0RSx1QkFBa0IsR0FBVyxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUVqRjs7O1dBR0c7UUFDSSxrQkFBYSxHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO1FBbUN0RCxrQkFBYSxHQUFhLEVBQUUsQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsa0NBQTZCLEdBQVcsSUFBSSxDQUFDO1FBQzdDLGlDQUE0QixHQUFXLElBQUksQ0FBQztRQUM1QyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFVbkMsQ0FBQztJQXJKSjs7Ozs7O09BTUc7SUFDSCxJQUNXLHFCQUFxQixDQUFDLEtBQWM7UUFDN0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBVyxxQkFBcUI7UUFDOUIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBNkNELElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsdUJBQXVCLENBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyx3QkFBd0I7UUFDakMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pFLENBQUM7SUErRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsVUFBa0IsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsYUFBc0IsRUFBRSxFQUFFO1lBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3pCLElBQUksdUNBQXVDLENBQ3pDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUNuRCxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxtQkFBd0IsRUFBRSxFQUFFO1lBQzlELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3pCLElBQUksNkNBQTZDLENBQy9DLG1CQUFtQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FDL0QsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTdDLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsYUFBYTthQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUM7YUFDM0QsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDekIsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7b0JBQzlCLElBQUksb0JBQW9CLENBQUM7d0JBQ3ZCLEVBQUUsRUFBRSxlQUFlO3dCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjt3QkFDbkMsUUFBUSxFQUFFLE1BQU07d0JBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsNEJBQTRCO3FCQUN6QyxDQUFDO2lCQUNILENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzthQUN2RDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUN6QyxvQkFBb0IsRUFBRSxDQUN2QixDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUNwQyxvQkFBb0IsRUFBRSxDQUN2QixDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLGFBQWEsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDNUMsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0RSxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO29CQUM5QixJQUFJLG9CQUFvQixDQUFDO3dCQUN2QixFQUFFLEVBQUUsUUFBUTt3QkFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWM7d0JBQzdCLFFBQVEsRUFBRSxPQUFPO3FCQUNsQixDQUFDO2lCQUNILENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMzQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFDOUIsb0JBQW9CLEVBQUUsRUFDdEIsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQ3RDLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSzthQUNQLElBQUksQ0FDSCxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0Isb0JBQW9CLEVBQUUsRUFDdEIsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQ2pDO2FBQ0EsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDakQsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQzlCLG9CQUFvQixFQUFFLEVBQ3RCLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQzVDLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUMvQixvQkFBb0IsRUFBRSxFQUN0QixhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUMvQyxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFDL0Isb0JBQW9CLEVBQUUsRUFDdEIsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN2QyxPQUFPLENBQ0wsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO29CQUNkLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUztvQkFDckIsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLO29CQUNqQixDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQzNCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsMkJBQTJCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTzthQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxRQUFnRCxFQUFFLEVBQUU7WUFDOUQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRWxFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDbEM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztZQUVuQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUU7b0JBQ2hELGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDckM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDdEMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUksa0JBQWtCLENBQUM7WUFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2hCLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDcEIsTUFBTSxFQUFFLElBQUk7WUFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQyxDQUNMLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQyxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRXJELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO2dCQUM5QixJQUFJLG9CQUFvQixDQUFDO29CQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjtvQkFDekMsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsNkJBQTZCO2lCQUMxQyxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1NBQ0o7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUF3QjtRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUNsRCxJQUNFLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDOUIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUNwQztnQkFDQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEU7WUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDO2dCQUNwQyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO2FBQ25FLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLHVCQUF1QjtRQUM1QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDL0QsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQWtCO1FBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUNsRCxJQUNFLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVTtvQkFDOUIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUNwQztvQkFDQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BFO2dCQUVELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLFFBQWdCLEVBQUUsVUFBa0I7UUFDdkQsT0FBTyxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsS0FBSyxVQUFVLENBQUM7SUFDM0QsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixPQUFPLHVCQUF1QixDQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDYixhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3RDLG9CQUFvQixFQUFFLENBQ3ZCLEVBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ2IsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUNuQyxvQkFBb0IsRUFBRSxDQUN2QixFQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDM0Msb0JBQW9CLEVBQUUsQ0FDdkIsRUFDRCxDQUNFLFNBQW9DLEVBQ3BDLE1BQWlDLEVBQ2pDLGNBQWlELEVBQ2pELEVBQUU7WUFDRixpRUFBaUU7WUFDakUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDdkIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQztpQkFDekQsTUFBTSxLQUFLLENBQUMsQ0FDbEIsQ0FBQztZQUVGLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUNwRSxJQUFJLEVBQUUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ25DLE9BQU8sQ0FDTCxDQUFDLENBQUMsYUFBYSxLQUFLLFVBQVUsQ0FBQyxhQUFhO3dCQUM1QyxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQ3ZDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNqQixRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjtnQkFFRCxPQUFPO29CQUNMLElBQUksRUFBRSxVQUFVO29CQUNoQixRQUFRLEVBQUUsUUFBUTtpQkFDbkIsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxtQkFBbUIsQ0FBQztRQUM3QixDQUFDLENBQ0YsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLHVCQUF1QixDQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDYixhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFDL0Isb0JBQW9CLEVBQUUsQ0FDdkIsRUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQ3RDLENBQUMsT0FBeUIsRUFBRSxJQUFZLEVBQUUsRUFBRTtZQUMxQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQXVCLEVBQUUsRUFBRTtnQkFDN0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLFNBQVMsR0FBUSxFQUFFLENBQUM7WUFFMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQTBCLEVBQUUsRUFBRTtnQkFDM0MsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQ0Y7YUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7cUhBM2RVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLHFRQVB2QjtRQUNULGdCQUFnQjtRQUNoQiwwQkFBMEI7UUFDMUIscUJBQXFCO0tBQ3RCLHVEQTRHZ0IsMkJBQTJCLCtDQUczQiwyQkFBMkIsZ0RBRzNCLDZCQUE2QiwrQ0FHN0IsNEJBQTRCLDhDQUc1QixrQ0FBa0MsOEVBaEZ4QyxrQkFBa0IsMkJBQ3JCLGtCQUFrQixtR0FtRmxCLFdBQVcsNkhBTVgsV0FBVyx5SUFNWCxXQUFXLDJDQzFOckIsZzRKQXFKQTs0RkRoRWEsdUJBQXVCO2tCQVhuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFdBQVcsRUFBRSwrQkFBK0I7b0JBQzVDLFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDO29CQUM1QyxTQUFTLEVBQUU7d0JBQ1QsZ0JBQWdCO3dCQUNoQiwwQkFBMEI7d0JBQzFCLHFCQUFxQjtxQkFDdEI7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzBPQVlZLHFCQUFxQjtzQkFEL0IsS0FBSztnQkFrQkMsV0FBVztzQkFEakIsS0FBSztnQkFRQyxhQUFhO3NCQURuQixLQUFLO2dCQU9DLGVBQWU7c0JBSnJCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUU7d0JBQzdCLElBQUksRUFBRSxrQkFBa0I7d0JBQ3hCLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2dCQVFNLG1CQUFtQjtzQkFEekIsS0FBSztnQkFVQyxXQUFXO3NCQURqQixLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLEtBQUs7Z0JBNENFLFlBQVk7c0JBRG5CLGVBQWU7dUJBQUMsMkJBQTJCO2dCQUlwQyxZQUFZO3NCQURuQixlQUFlO3VCQUFDLDJCQUEyQjtnQkFJcEMsYUFBYTtzQkFEcEIsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBSXRDLFlBQVk7c0JBRG5CLGVBQWU7dUJBQUMsNEJBQTRCO2dCQUlyQyxXQUFXO3NCQURsQixlQUFlO3VCQUFDLGtDQUFrQztnQkFPM0MsY0FBYztzQkFKckIsU0FBUzt1QkFBQyxRQUFRLEVBQUU7d0JBQ25CLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPTyxvQkFBb0I7c0JBSjNCLFNBQVM7dUJBQUMsY0FBYyxFQUFFO3dCQUN6QixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7Z0JBT08sMEJBQTBCO3NCQUpqQyxTQUFTO3VCQUFDLG9CQUFvQixFQUFFO3dCQUMvQixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21iaW5lTGF0ZXN0IGFzIG9ic2VydmFibGVDb21iaW5lTGF0ZXN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgbWFwIGFzIG9ic2VydmFibGVNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFrZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBnZXRWYWx1ZSB9IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcblxuaW1wb3J0IHsgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWwgfSBmcm9tICdAc2t5dXgvbGlzdC1idWlsZGVyLWNvbW1vbic7XG5cbmltcG9ydCB7IFNreVNlYXJjaENvbXBvbmVudCB9IGZyb20gJ0Bza3l1eC9sb29rdXAnO1xuXG5pbXBvcnQgeyBMaXN0VG9vbGJhck1vZGVsIH0gZnJvbSAnLi4vbGlzdC9zdGF0ZS90b29sYmFyL3Rvb2xiYXIubW9kZWwnO1xuXG5pbXBvcnQgeyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCB9IGZyb20gJy4uL2xpc3Qvc3RhdGUvdG9vbGJhci90b29sYmFyLWl0ZW0ubW9kZWwnO1xuXG5pbXBvcnQgeyBMaXN0VG9vbGJhclNldFR5cGVBY3Rpb24gfSBmcm9tICcuLi9saXN0L3N0YXRlL3Rvb2xiYXIvc2V0LXR5cGUuYWN0aW9uJztcblxuaW1wb3J0IHsgTGlzdFN0YXRlIH0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9saXN0LXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5pbXBvcnQgeyBMaXN0U3RhdGVEaXNwYXRjaGVyIH0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9saXN0LXN0YXRlLnJ4c3RhdGUnO1xuXG5pbXBvcnQgeyBMaXN0U29ydExhYmVsTW9kZWwgfSBmcm9tICcuLi9saXN0L3N0YXRlL3NvcnQvbGFiZWwubW9kZWwnO1xuXG5pbXBvcnQgeyBMaXN0RmlsdGVyTW9kZWwgfSBmcm9tICcuLi9saXN0LWZpbHRlcnMvZmlsdGVyLm1vZGVsJztcblxuaW1wb3J0IHsgTGlzdFBhZ2luZ1NldFBhZ2VOdW1iZXJBY3Rpb24gfSBmcm9tICcuLi9saXN0L3N0YXRlL3BhZ2luZy9zZXQtcGFnZS1udW1iZXIuYWN0aW9uJztcblxuaW1wb3J0IHsgU2t5TGlzdEZpbHRlcklubGluZUNvbXBvbmVudCB9IGZyb20gJy4uL2xpc3QtZmlsdGVycy9saXN0LWZpbHRlci1pbmxpbmUuY29tcG9uZW50JztcblxuaW1wb3J0IHsgU2t5TGlzdEZpbHRlclN1bW1hcnlDb21wb25lbnQgfSBmcm9tICcuLi9saXN0LWZpbHRlcnMvbGlzdC1maWx0ZXItc3VtbWFyeS5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBTa3lMaXN0VG9vbGJhckl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2xpc3QtdG9vbGJhci1pdGVtLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFNreUxpc3RUb29sYmFyU29ydENvbXBvbmVudCB9IGZyb20gJy4vbGlzdC10b29sYmFyLXNvcnQuY29tcG9uZW50JztcblxuaW1wb3J0IHsgU2t5TGlzdFRvb2xiYXJWaWV3QWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBMaXN0VG9vbGJhckNvbmZpZ1NldFNlYXJjaEVuYWJsZWRBY3Rpb24gfSBmcm9tICcuL3N0YXRlL2NvbmZpZy9zZXQtc2VhcmNoLWVuYWJsZWQuYWN0aW9uJztcblxuaW1wb3J0IHsgTGlzdFRvb2xiYXJDb25maWdTZXRTb3J0U2VsZWN0b3JFbmFibGVkQWN0aW9uIH0gZnJvbSAnLi9zdGF0ZS9jb25maWcvc2V0LXNvcnQtc2VsZWN0b3ItZW5hYmxlZC5hY3Rpb24nO1xuXG5pbXBvcnQgeyBMaXN0VG9vbGJhclN0YXRlIH0gZnJvbSAnLi9zdGF0ZS90b29sYmFyLXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5pbXBvcnQgeyBMaXN0VG9vbGJhclN0YXRlRGlzcGF0Y2hlciB9IGZyb20gJy4vc3RhdGUvdG9vbGJhci1zdGF0ZS5yeHN0YXRlJztcblxuaW1wb3J0IHsgTGlzdFRvb2xiYXJTdGF0ZU1vZGVsIH0gZnJvbSAnLi9zdGF0ZS90b29sYmFyLXN0YXRlLm1vZGVsJztcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogRGlzcGxheXMgYSB0b29sYmFyIGZvciBhIFNLWSBVWC10aGVtZWQgbGlzdCBvZiBkYXRhLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktbGlzdC10b29sYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpc3QtdG9vbGJhci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBMaXN0VG9vbGJhclN0YXRlLFxuICAgIExpc3RUb29sYmFyU3RhdGVEaXNwYXRjaGVyLFxuICAgIExpc3RUb29sYmFyU3RhdGVNb2RlbCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSB0aGUgaW4tbWVtb3J5IHNlYXJjaC5cbiAgICogU2V0dGluZyB0aGlzIHRvIGBmYWxzZWAgd2lsbCBhbGxvdyBjb25zdW1lcnMgdG8gcnVuIHRoZWlyIG93biBzZWFyY2hlcyByZW1vdGVseSxcbiAgICogYW5kIHB1c2ggbmV3IHZhbHVlcyB0byB0aGUgbGlzdCBjb21wb25lbnQgYnkgdXBkYXRpbmcgdGhlIGBkYXRhYCBwcm9wZXJ0eS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW5NZW1vcnlTZWFyY2hFbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5NZW1vcnlTZWFyY2hFbmFibGVkID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluTWVtb3J5U2VhcmNoRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5faW5NZW1vcnlTZWFyY2hFbmFibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW5NZW1vcnlTZWFyY2hFbmFibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgc2VhcmNoIGJhciB0aGF0IHRoZSBsaXN0IHRvb2xiYXIgY3JlYXRlcyB3aXRoXG4gICAqIGEgW3NlYXJjaCBjb21wb25lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9zZWFyY2gpLlxuICAgKiBAZGVmYXVsdCAnRmluZCBpbiB0aGlzIGxpc3QnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBzZWFyY2ggYmFyLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoRW5hYmxlZDogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgQFZpZXdDaGlsZChTa3lTZWFyY2hDb21wb25lbnQsIHtcbiAgICByZWFkOiBTa3lTZWFyY2hDb21wb25lbnQsXG4gICAgc3RhdGljOiBmYWxzZSxcbiAgfSlcbiAgcHVibGljIHNlYXJjaENvbXBvbmVudDogU2t5U2VhcmNoQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgdGhlIHNvcnQgc2VsZWN0b3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc29ydFNlbGVjdG9yRW5hYmxlZDogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIHNlYXJjaCBiYXIgaW4gdGhlIHN0YW5kYXJkIHBvc2l0aW9uIG9yIGluIGEgc2VwYXJhdGUgc2VjdGlvbi5cbiAgICogVG8gaGlnaGxpZ2h0IHRoZSBzZWFyY2ggYmFyIGluIGEgc2VjdGlvbiBhYm92ZSBhbGwgb3RoZXIgdG9vbGJhciBpdGVtcyxcbiAgICogc2V0IHRoaXMgcHJvcGVydHkgdG8gYHNlYXJjaGAuXG4gICAqIEBkZWZhdWx0ICdzdGFuZGFyZCdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyVHlwZTogc3RyaW5nID0gJ3N0YW5kYXJkJztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgdGV4dCBzdHJpbmcgdG8gc2VhcmNoIHdpdGguXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoVGV4dDogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHB1YmxpYyBnZXQgaXNGaWx0ZXJCYXJEaXNwbGF5ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzVG9vbGJhckRpc2FibGVkICYmXG4gICAgICB0aGlzLmhhc0lubGluZUZpbHRlcnMgJiZcbiAgICAgIHRoaXMuaW5saW5lRmlsdGVyQmFyRXhwYW5kZWRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJCdXR0b25BcmlhQ29udHJvbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckJhckRpc3BsYXllZCA/IHRoaXMubGlzdEZpbHRlcklubGluZUlkIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNvcnRTZWxlY3RvcnM6IE9ic2VydmFibGU8QXJyYXk8YW55Pj47XG4gIHB1YmxpYyBzZWFyY2hUZXh0SW5wdXQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIHZpZXc6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGxlZnRUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyBjZW50ZXJUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyByaWdodFRlbXBsYXRlczogTGlzdFRvb2xiYXJJdGVtTW9kZWxbXTtcbiAgcHVibGljIHR5cGU6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGlzU2VhcmNoRW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc011bHRpc2VsZWN0RW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzU29ydFNlbGVjdG9yRW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGFwcGxpZWRGaWx0ZXJzOiBPYnNlcnZhYmxlPEFycmF5PExpc3RGaWx0ZXJNb2RlbD4+O1xuICBwdWJsaWMgaGFzQXBwbGllZEZpbHRlcnM6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBzaG93RmlsdGVyU3VtbWFyeTogYm9vbGVhbjtcbiAgcHVibGljIGhhc0lubGluZUZpbHRlcnM6IGJvb2xlYW47XG4gIHB1YmxpYyBpbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaGFzQWRkaXRpb25hbFRvb2xiYXJTZWN0aW9uID0gZmFsc2U7XG4gIHB1YmxpYyBoYXNWaWV3QWN0aW9ucyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBmaWx0ZXJCdXR0b25JZDogc3RyaW5nID0gYHNreS1saXN0LXRvb2xiYXItZmlsdGVyLWJ1dHRvbi0keysrbmV4dElkfWA7XG4gIHB1YmxpYyBsaXN0RmlsdGVySW5saW5lSWQ6IHN0cmluZyA9IGBza3ktbGlzdC10b29sYmFyLWZpbHRlci1pbmxpbmUtJHsrK25leHRJZH1gO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHN1Ym1pdCBhIHNlYXJjaC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoQXBwbGllZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJJdGVtQ29tcG9uZW50KVxuICBwcml2YXRlIHRvb2xiYXJJdGVtczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFySXRlbUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnQpXG4gIHByaXZhdGUgdG9vbGJhclNvcnRzOiBRdWVyeUxpc3Q8U2t5TGlzdFRvb2xiYXJTb3J0Q29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFNreUxpc3RGaWx0ZXJTdW1tYXJ5Q29tcG9uZW50KVxuICBwcml2YXRlIGZpbHRlclN1bW1hcnk6IFF1ZXJ5TGlzdDxTa3lMaXN0RmlsdGVyU3VtbWFyeUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0RmlsdGVySW5saW5lQ29tcG9uZW50KVxuICBwcml2YXRlIGlubGluZUZpbHRlcjogUXVlcnlMaXN0PFNreUxpc3RGaWx0ZXJJbmxpbmVDb21wb25lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJWaWV3QWN0aW9uc0NvbXBvbmVudClcbiAgcHJpdmF0ZSB2aWV3QWN0aW9uczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFyVmlld0FjdGlvbnNDb21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaCcsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHByaXZhdGUgc2VhcmNoVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgnc29ydFNlbGVjdG9yJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSBzb3J0U2VsZWN0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKCdpbmxpbmVGaWx0ZXJCdXR0b24nLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGlubGluZUZpbHRlckJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgY3VzdG9tSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBoYXNTb3J0U2VsZWN0b3JzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5saW5lRmlsdGVyc0l0ZW1Ub29sYmFySW5kZXg6IG51bWJlciA9IDUwMDA7XG4gIHByaXZhdGUgc29ydFNlbGVjdG9ySXRlbVRvb2xiYXJJbmRleDogbnVtYmVyID0gNjAwMDtcbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIF9pbk1lbW9yeVNlYXJjaEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdGF0ZTogTGlzdFN0YXRlLFxuICAgIHByaXZhdGUgZGlzcGF0Y2hlcjogTGlzdFN0YXRlRGlzcGF0Y2hlcixcbiAgICBwcml2YXRlIHRvb2xiYXJTdGF0ZTogTGlzdFRvb2xiYXJTdGF0ZSxcbiAgICBwdWJsaWMgdG9vbGJhckRpc3BhdGNoZXI6IExpc3RUb29sYmFyU3RhdGVEaXNwYXRjaGVyXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJFeGlzdHModHJ1ZSk7XG5cbiAgICBnZXRWYWx1ZSh0aGlzLnNlYXJjaFRleHQsIChzZWFyY2hUZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoVGV4dChzZWFyY2hUZXh0KTtcbiAgICB9KTtcblxuICAgIGdldFZhbHVlKHRoaXMuc2VhcmNoRW5hYmxlZCwgKHNlYXJjaEVuYWJsZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMudG9vbGJhckRpc3BhdGNoZXIubmV4dChcbiAgICAgICAgbmV3IExpc3RUb29sYmFyQ29uZmlnU2V0U2VhcmNoRW5hYmxlZEFjdGlvbihcbiAgICAgICAgICBzZWFyY2hFbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogc2VhcmNoRW5hYmxlZFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgZ2V0VmFsdWUodGhpcy50b29sYmFyVHlwZSwgKHR5cGU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLm5leHQobmV3IExpc3RUb29sYmFyU2V0VHlwZUFjdGlvbih0aGlzLnRvb2xiYXJUeXBlKSk7XG4gICAgfSk7XG5cbiAgICBnZXRWYWx1ZSh0aGlzLnNvcnRTZWxlY3RvckVuYWJsZWQsIChzb3J0U2VsZWN0b3JFbmFibGVkOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudG9vbGJhckRpc3BhdGNoZXIubmV4dChcbiAgICAgICAgbmV3IExpc3RUb29sYmFyQ29uZmlnU2V0U29ydFNlbGVjdG9yRW5hYmxlZEFjdGlvbihcbiAgICAgICAgICBzb3J0U2VsZWN0b3JFbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogc29ydFNlbGVjdG9yRW5hYmxlZFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zb3J0U2VsZWN0b3JzID0gdGhpcy5nZXRTb3J0U2VsZWN0b3JzKCk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBzb3J0IHRvb2xiYXIgaXRlbSBpZiBuZWNlc3NhcnlcbiAgICB0aGlzLnNvcnRTZWxlY3RvcnNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnN1YnNjcmliZSgoY3VycmVudFNvcnQpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRTb3J0Lmxlbmd0aCA+IDAgJiYgIXRoaXMuaGFzU29ydFNlbGVjdG9ycykge1xuICAgICAgICAgIHRoaXMuaGFzU29ydFNlbGVjdG9ycyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJBZGRJdGVtcyhbXG4gICAgICAgICAgICBuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwoe1xuICAgICAgICAgICAgICBpZDogJ3NvcnQtc2VsZWN0b3InLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5zb3J0U2VsZWN0b3JUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgbG9jYXRpb246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuc29ydFNlbGVjdG9ySXRlbVRvb2xiYXJJbmRleCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTb3J0Lmxlbmd0aCA8IDEgJiYgdGhpcy5oYXNTb3J0U2VsZWN0b3JzKSB7XG4gICAgICAgICAgdGhpcy5oYXNTb3J0U2VsZWN0b3JzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhbJ3NvcnQtc2VsZWN0b3InXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zZWFyY2hUZXh0SW5wdXQgPSB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMuc2VhcmNoLnNlYXJjaFRleHQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICB0aGlzLnZpZXcgPSB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMudmlld3MuYWN0aXZlKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuXG4gICAgdGhpcy53YXRjaFRlbXBsYXRlcygpO1xuXG4gICAgdGhpcy50eXBlID0gdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBvYnNlcnZhYmxlTWFwKChzdGF0ZSkgPT4gc3RhdGUudG9vbGJhci50eXBlKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuXG4gICAgdGhpcy50eXBlLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodG9vbGJhclR5cGUpID0+IHtcbiAgICAgIGlmICh0b29sYmFyVHlwZSA9PT0gJ3NlYXJjaCcpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhbJ3NlYXJjaCddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyQWRkSXRlbXMoW1xuICAgICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh7XG4gICAgICAgICAgICBpZDogJ3NlYXJjaCcsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5zZWFyY2hUZW1wbGF0ZSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiAncmlnaHQnLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuaXNTZWFyY2hFbmFibGVkID0gdGhpcy50b29sYmFyU3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy5jb25maWcpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKGMpID0+IGMuc2VhcmNoRW5hYmxlZClcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMudG9vbGJhciksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBvYnNlcnZhYmxlTWFwKChjKSA9PiBjLmRpc2FibGVkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoaXNEaXNhYmxlZCkgPT4gKHRoaXMuaXNUb29sYmFyRGlzYWJsZWQgPSBpc0Rpc2FibGVkKSk7XG5cbiAgICB0aGlzLmlzU29ydFNlbGVjdG9yRW5hYmxlZCA9IHRoaXMudG9vbGJhclN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMuY29uZmlnKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBvYnNlcnZhYmxlTWFwKChjKSA9PiBjLnNvcnRTZWxlY3RvckVuYWJsZWQpXG4gICAgKTtcblxuICAgIHRoaXMuaXNNdWx0aXNlbGVjdEVuYWJsZWQgPSB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMudG9vbGJhciksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgodCkgPT4gdC5zaG93TXVsdGlzZWxlY3RUb29sYmFyKVxuICAgICk7XG5cbiAgICB0aGlzLmhhc0FwcGxpZWRGaWx0ZXJzID0gdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBvYnNlcnZhYmxlTWFwKChzKSA9PiBzLmZpbHRlcnMpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKGZpbHRlcnMpID0+IHtcbiAgICAgICAgbGV0IGFjdGl2ZUZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcigoZikgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBmLnZhbHVlICE9PSAnJyAmJlxuICAgICAgICAgICAgZi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBmLnZhbHVlICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgZi52YWx1ZSAhPT0gZi5kZWZhdWx0VmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3RhdGUucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChjdXJyZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuaGFzQWRkaXRpb25hbFRvb2xiYXJTZWN0aW9uID0gY3VycmVudC50b29sYmFyLml0ZW1zLmxlbmd0aCA+IDA7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgLy8gSW5qZWN0IGN1c3RvbSB0b29sYmFyIGl0ZW1zLlxuICAgIHRoaXMudG9vbGJhckl0ZW1zLmZvckVhY2goKHRvb2xiYXJJdGVtKSA9PiB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFtuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwodG9vbGJhckl0ZW0pXSk7XG5cbiAgICAgIHRoaXMuY3VzdG9tSXRlbUlkcy5wdXNoKHRvb2xiYXJJdGVtLmlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMudG9vbGJhckl0ZW1zLmNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobmV3SXRlbXM6IFF1ZXJ5TGlzdDxTa3lMaXN0VG9vbGJhckl0ZW1Db21wb25lbnQ+KSA9PiB7XG4gICAgICAgIG5ld0l0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jdXN0b21JdGVtSWRzLmluZGV4T2YoaXRlbS5pZCkgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFtuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwoaXRlbSldKTtcblxuICAgICAgICAgICAgdGhpcy5jdXN0b21JdGVtSWRzLnB1c2goaXRlbS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpdGVtc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIHRoaXMuY3VzdG9tSXRlbUlkcy5mb3JFYWNoKChpdGVtSWQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKCFuZXdJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpdGVtSWQpKSB7XG4gICAgICAgICAgICBpdGVtc1RvUmVtb3ZlLnB1c2goaXRlbUlkKTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tSXRlbUlkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhpdGVtc1RvUmVtb3ZlKTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgc29ydE1vZGVscyA9IHRoaXMudG9vbGJhclNvcnRzLm1hcChcbiAgICAgIChzb3J0KSA9PlxuICAgICAgICBuZXcgTGlzdFNvcnRMYWJlbE1vZGVsKHtcbiAgICAgICAgICB0ZXh0OiBzb3J0LmxhYmVsLFxuICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IHNvcnQuZmllbGQsXG4gICAgICAgICAgZmllbGRUeXBlOiBzb3J0LnR5cGUsXG4gICAgICAgICAgZ2xvYmFsOiB0cnVlLFxuICAgICAgICAgIGRlc2NlbmRpbmc6IHNvcnQuZGVzY2VuZGluZyxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5kaXNwYXRjaGVyLnNvcnRTZXRHbG9iYWwoc29ydE1vZGVscyk7XG5cbiAgICAvLyBBZGQgaW5saW5lIGZpbHRlcnMuXG4gICAgdGhpcy5zaG93RmlsdGVyU3VtbWFyeSA9IHRoaXMuZmlsdGVyU3VtbWFyeS5sZW5ndGggPiAwO1xuICAgIHRoaXMuaGFzSW5saW5lRmlsdGVycyA9IHRoaXMuaW5saW5lRmlsdGVyLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAodGhpcy5oYXNJbmxpbmVGaWx0ZXJzKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFtcbiAgICAgICAgbmV3IExpc3RUb29sYmFySXRlbU1vZGVsKHtcbiAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5pbmxpbmVGaWx0ZXJCdXR0b25UZW1wbGF0ZSxcbiAgICAgICAgICBsb2NhdGlvbjogJ2xlZnQnLFxuICAgICAgICAgIGluZGV4OiB0aGlzLmlubGluZUZpbHRlcnNJdGVtVG9vbGJhckluZGV4LFxuICAgICAgICB9KSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB2aWV3IGFjdGlvbnNcbiAgICB0aGlzLmhhc1ZpZXdBY3Rpb25zID0gdGhpcy52aWV3QWN0aW9ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoQXBwbGllZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U29ydChzb3J0OiBMaXN0U29ydExhYmVsTW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50U3RhdGUpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudFN0YXRlLnBhZ2luZy5wYWdlTnVtYmVyICYmXG4gICAgICAgIGN1cnJlbnRTdGF0ZS5wYWdpbmcucGFnZU51bWJlciAhPT0gMVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5uZXh0KG5ldyBMaXN0UGFnaW5nU2V0UGFnZU51bWJlckFjdGlvbihOdW1iZXIoMSkpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXNwYXRjaGVyLnNvcnRTZXRGaWVsZFNlbGVjdG9ycyhbXG4gICAgICAgIHsgZmllbGRTZWxlY3Rvcjogc29ydC5maWVsZFNlbGVjdG9yLCBkZXNjZW5kaW5nOiBzb3J0LmRlc2NlbmRpbmcgfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlubGluZUZpbHRlckJ1dHRvbkNsaWNrKCkge1xuICAgIHRoaXMuaW5saW5lRmlsdGVyQmFyRXhwYW5kZWQgPSAhdGhpcy5pbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTZWFyY2hUZXh0KHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoQXBwbGllZC5uZXh0KHNlYXJjaFRleHQpO1xuICAgIGlmICh0aGlzLmluTWVtb3J5U2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zdGF0ZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoY3VycmVudFN0YXRlKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgJiZcbiAgICAgICAgICBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgIT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLm5leHQobmV3IExpc3RQYWdpbmdTZXRQYWdlTnVtYmVyQWN0aW9uKE51bWJlcigxKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnNlYXJjaFNldFRleHQoc2VhcmNoVGV4dCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGl0ZW1Jc0luVmlldyhpdGVtVmlldzogc3RyaW5nLCBhY3RpdmVWaWV3OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gaXRlbVZpZXcgPT09IHVuZGVmaW5lZCB8fCBpdGVtVmlldyA9PT0gYWN0aXZlVmlldztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydFNlbGVjdG9ycygpIHtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QoXG4gICAgICB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMuc29ydC5hdmFpbGFibGUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICApLFxuICAgICAgdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgICBvYnNlcnZhYmxlTWFwKChzKSA9PiBzLnNvcnQuZ2xvYmFsKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKSxcbiAgICAgIHRoaXMuc3RhdGUucGlwZShcbiAgICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy5zb3J0LmZpZWxkU2VsZWN0b3JzKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKSxcbiAgICAgIChcbiAgICAgICAgYXZhaWxhYmxlOiBBcnJheTxMaXN0U29ydExhYmVsTW9kZWw+LFxuICAgICAgICBnbG9iYWw6IEFycmF5PExpc3RTb3J0TGFiZWxNb2RlbD4sXG4gICAgICAgIGZpZWxkU2VsZWN0b3JzOiBBcnJheTxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD5cbiAgICAgICkgPT4ge1xuICAgICAgICAvLyBHZXQgc29ydHMgdGhhdCBhcmUgaW4gdGhlIGdsb2JhbCB0aGF0IGFyZSBub3QgaW4gdGhlIGF2YWlsYWJsZVxuICAgICAgICBsZXQgc29ydHMgPSBnbG9iYWwuZmlsdGVyKFxuICAgICAgICAgIChnKSA9PlxuICAgICAgICAgICAgYXZhaWxhYmxlLmZpbHRlcigoYSkgPT4gYS5maWVsZFNlbGVjdG9yID09PSBnLmZpZWxkU2VsZWN0b3IpXG4gICAgICAgICAgICAgIC5sZW5ndGggPT09IDBcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgcmVzdWx0U29ydFNlbGVjdG9ycyA9IFsuLi5zb3J0cywgLi4uYXZhaWxhYmxlXS5tYXAoKHNvcnRMYWJlbHMpID0+IHtcbiAgICAgICAgICBsZXQgZnMgPSBmaWVsZFNlbGVjdG9ycy5maWx0ZXIoKGYpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGYuZmllbGRTZWxlY3RvciA9PT0gc29ydExhYmVscy5maWVsZFNlbGVjdG9yICYmXG4gICAgICAgICAgICAgIGYuZGVzY2VuZGluZyA9PT0gc29ydExhYmVscy5kZXNjZW5kaW5nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChmcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvcnQ6IHNvcnRMYWJlbHMsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFNvcnRTZWxlY3RvcnM7XG4gICAgICB9XG4gICAgKS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hUZW1wbGF0ZXMoKSB7XG4gICAgb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QoXG4gICAgICB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMudG9vbGJhciksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICksXG4gICAgICB0aGlzLnZpZXcucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgICh0b29sYmFyOiBMaXN0VG9vbGJhck1vZGVsLCB2aWV3OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0b29sYmFyLml0ZW1zLmZpbHRlcigoaTogTGlzdFRvb2xiYXJJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtSXNJblZpZXcoaS52aWV3LCB2aWV3KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdGVtcGxhdGVzOiBhbnkgPSB7fTtcblxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBMaXN0VG9vbGJhckl0ZW1Nb2RlbCkgPT4ge1xuICAgICAgICAgIHRlbXBsYXRlc1tpdGVtLmxvY2F0aW9uXSA9IHRlbXBsYXRlc1tpdGVtLmxvY2F0aW9uXSB8fCBbXTtcbiAgICAgICAgICB0ZW1wbGF0ZXNbaXRlbS5sb2NhdGlvbl0ucHVzaChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcztcbiAgICAgIH1cbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMubGVmdFRlbXBsYXRlcyA9IHZhbHVlLmxlZnQ7XG4gICAgICAgIHRoaXMuY2VudGVyVGVtcGxhdGVzID0gdmFsdWUuY2VudGVyO1xuICAgICAgICB0aGlzLnJpZ2h0VGVtcGxhdGVzID0gdmFsdWUucmlnaHQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNreS1saXN0LXRvb2xiYXItY29udGFpbmVyXCI+XG4gIDxza3ktdG9vbGJhciAqbmdJZj1cIih0eXBlIHwgYXN5bmMpICE9PSAnc2VhcmNoJ1wiPlxuICAgIDxza3ktdG9vbGJhci1zZWN0aW9uPlxuICAgICAgPHNreS10b29sYmFyLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGVmdFRlbXBsYXRlc1wiPlxuICAgICAgICA8c2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyXG4gICAgICAgICAgW2F0dHIuc2t5LWNtcC1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiaXRlbS50ZW1wbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9za3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXI+XG4gICAgICA8L3NreS10b29sYmFyLWl0ZW0+XG4gICAgICA8c2t5LXRvb2xiYXItaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjZW50ZXJUZW1wbGF0ZXNcIj5cbiAgICAgICAgPHNreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlclxuICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIml0ZW0udGVtcGxhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuICAgICAgPHNreS10b29sYmFyLWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmlnaHRUZW1wbGF0ZXNcIlxuICAgICAgICBbYXR0ci5za3ktdG9vbGJhci1pZF09XCJpdGVtLmlkXCJcbiAgICAgID5cbiAgICAgICAgPHNreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlclxuICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIml0ZW0udGVtcGxhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvc2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyPlxuICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDxza3ktdG9vbGJhci12aWV3LWFjdGlvbnMgKm5nSWY9XCJoYXNWaWV3QWN0aW9uc1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktbGlzdC10b29sYmFyLXZpZXctYWN0aW9uc1wiPiA8L25nLWNvbnRlbnQ+XG4gICAgICA8L3NreS10b29sYmFyLXZpZXctYWN0aW9ucz5cbiAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG5cbiAgICA8c2t5LXRvb2xiYXItc2VjdGlvblxuICAgICAgKm5nSWY9XCJzaG93RmlsdGVyU3VtbWFyeSAmJiAoaGFzQXBwbGllZEZpbHRlcnMgfCBhc3luYylcIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1saXN0LWZpbHRlci1zdW1tYXJ5XCI+IDwvbmctY29udGVudD5cbiAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gIDwvc2t5LXRvb2xiYXI+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwiXG4gICAgICAodHlwZSB8IGFzeW5jKSA9PT0gJ3NlYXJjaCcgJiZcbiAgICAgICgoaXNTZWFyY2hFbmFibGVkIHwgYXN5bmMpIHx8IGhhc0FkZGl0aW9uYWxUb29sYmFyU2VjdGlvbilcbiAgICBcIlxuICAgIGNsYXNzPVwic2t5LWxpc3QtdG9vbGJhci1zZWFyY2hcIlxuICA+XG4gICAgPHNreS10b29sYmFyPlxuICAgICAgPHNreS10b29sYmFyLXNlY3Rpb24gKm5nSWY9XCJpc1NlYXJjaEVuYWJsZWQgfCBhc3luY1wiPlxuICAgICAgICA8c2t5LXRvb2xiYXItaXRlbT5cbiAgICAgICAgICA8c2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyXG4gICAgICAgICAgICBza3ktY21wLWlkPVwic2VhcmNoXCJcbiAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJzZWFyY2hcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3NreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlcj5cbiAgICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuICAgICAgPC9za3ktdG9vbGJhci1zZWN0aW9uPlxuICAgICAgPHNreS10b29sYmFyLXNlY3Rpb24gW2hpZGRlbl09XCIhaGFzQWRkaXRpb25hbFRvb2xiYXJTZWN0aW9uXCI+XG4gICAgICAgIDxza3ktdG9vbGJhci1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxlZnRUZW1wbGF0ZXNcIj5cbiAgICAgICAgICA8c2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyXG4gICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cIml0ZW0udGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3NreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlcj5cbiAgICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuICAgICAgICA8c2t5LXRvb2xiYXItaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjZW50ZXJUZW1wbGF0ZXNcIj5cbiAgICAgICAgICA8c2t5LWxpc3QtdG9vbGJhci1pdGVtLXJlbmRlcmVyXG4gICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cIml0ZW0udGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3NreS1saXN0LXRvb2xiYXItaXRlbS1yZW5kZXJlcj5cbiAgICAgICAgPC9za3ktdG9vbGJhci1pdGVtPlxuICAgICAgICA8c2t5LXRvb2xiYXItaXRlbVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJpZ2h0VGVtcGxhdGVzXCJcbiAgICAgICAgICBbYXR0ci5za3ktdG9vbGJhci1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxza3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pZCAhPT0gJ3NlYXJjaCdcIlxuICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJpdGVtLnRlbXBsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9za3ktbGlzdC10b29sYmFyLWl0ZW0tcmVuZGVyZXI+XG4gICAgICAgIDwvc2t5LXRvb2xiYXItaXRlbT5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxza3ktdG9vbGJhci12aWV3LWFjdGlvbnMgKm5nSWY9XCJoYXNWaWV3QWN0aW9uc1wiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNreS1saXN0LXRvb2xiYXItdmlldy1hY3Rpb25zXCI+IDwvbmctY29udGVudD5cbiAgICAgICAgPC9za3ktdG9vbGJhci12aWV3LWFjdGlvbnM+XG4gICAgICA8L3NreS10b29sYmFyLXNlY3Rpb24+XG4gICAgPC9za3ktdG9vbGJhcj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cImlzRmlsdGVyQmFyRGlzcGxheWVkXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiZmlsdGVyQnV0dG9uSWRcIlxuICAgIFtpZF09XCJsaXN0RmlsdGVySW5saW5lSWRcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2t5LWxpc3QtZmlsdGVyLWlubGluZVwiPiA8L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8c2t5LWxpc3QtbXVsdGlzZWxlY3QtdG9vbGJhciAqbmdJZj1cImlzTXVsdGlzZWxlY3RFbmFibGVkIHwgYXN5bmNcIj5cbiAgPC9za3ktbGlzdC1tdWx0aXNlbGVjdC10b29sYmFyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoPlxuICA8ZGl2ICpuZ0lmPVwiaXNTZWFyY2hFbmFibGVkIHwgYXN5bmNcIiBjbGFzcz1cInNreS1saXN0LXRvb2xiYXItc2VhcmNoLXdyYXBwZXJcIj5cbiAgICA8c2t5LXNlYXJjaFxuICAgICAgW2Rpc2FibGVkXT1cImlzVG9vbGJhckRpc2FibGVkXCJcbiAgICAgIFtleHBhbmRNb2RlXT1cIih0eXBlIHwgYXN5bmMpID09PSAnc2VhcmNoJyA/ICdmaXQnIDogJ3Jlc3BvbnNpdmUnXCJcbiAgICAgIFtwbGFjZWhvbGRlclRleHRdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoVGV4dElucHV0IHwgYXN5bmNcIlxuICAgICAgKHNlYXJjaEFwcGx5KT1cInVwZGF0ZVNlYXJjaFRleHQoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvc2t5LXNlYXJjaD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJza3ktbGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc29ydFNlbGVjdG9yPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIChpc1NvcnRTZWxlY3RvckVuYWJsZWQgfCBhc3luYykgJiYgKHNvcnRTZWxlY3RvcnMgfCBhc3luYykubGVuZ3RoID4gMFxuICAgIFwiXG4gICAgY2xhc3M9XCJza3ktdG9vbGJhci1pdGVtLXNvcnQtY29udGFpbmVyXCJcbiAgPlxuICAgIDxza3ktc29ydCBbc2hvd0J1dHRvblRleHRdPVwidHJ1ZVwiPlxuICAgICAgPHNreS1zb3J0LWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc29ydFNlbGVjdG9ycyB8IGFzeW5jXCJcbiAgICAgICAgW2FjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgKGl0ZW1TZWxlY3QpPVwic2V0U29ydChpdGVtLnNvcnQpXCJcbiAgICAgID5cbiAgICAgICAge3sgaXRlbS5zb3J0LnRleHQgfX1cbiAgICAgIDwvc2t5LXNvcnQtaXRlbT5cbiAgICA8L3NreS1zb3J0PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5saW5lRmlsdGVyQnV0dG9uPlxuICA8c2t5LWZpbHRlci1idXR0b25cbiAgICBbYWN0aXZlXT1cImhhc0FwcGxpZWRGaWx0ZXJzIHwgYXN5bmNcIlxuICAgIFthcmlhQ29udHJvbHNdPVwiZmlsdGVyQnV0dG9uQXJpYUNvbnRyb2xzXCJcbiAgICBbYXJpYUV4cGFuZGVkXT1cImlubGluZUZpbHRlckJhckV4cGFuZGVkXCJcbiAgICBbZGlzYWJsZWRdPVwiaXNUb29sYmFyRGlzYWJsZWRcIlxuICAgIFtmaWx0ZXJCdXR0b25JZF09XCJmaWx0ZXJCdXR0b25JZFwiXG4gICAgW3Nob3dCdXR0b25UZXh0XT1cInRydWVcIlxuICAgIChmaWx0ZXJCdXR0b25DbGljayk9XCJpbmxpbmVGaWx0ZXJCdXR0b25DbGljaygpXCJcbiAgPlxuICA8L3NreS1maWx0ZXItYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|