@netgrif/components-core 6.4.0-beta.2 → 6.4.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/assets/i18n/de.json +5 -1
- package/esm2020/assets/i18n/en.json +5 -1
- package/esm2020/assets/i18n/sk.json +5 -1
- package/esm2020/lib/header/abstract-header.component.mjs +22 -7
- package/esm2020/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.mjs +1 -10
- package/esm2020/lib/navigation/model/group-navigation-constants.mjs +116 -35
- package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +152 -107
- package/esm2020/lib/navigation/navigation-tree/abstract-navigation-tree.component.mjs +3 -126
- package/esm2020/lib/navigation/service/uri.service.mjs +3 -3
- package/esm2020/lib/navigation/utility/filter-extraction.service.mjs +33 -9
- package/esm2020/lib/navigation/utility/navigation-item-task-utility-methods.mjs +38 -4
- package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +5 -2
- package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.mjs +5 -2
- package/esm2020/lib/routing/routing-builder/routing-builder.service.mjs +7 -5
- package/esm2020/lib/side-menu/content-components/import-net/abstract-import-net.component.mjs +10 -7
- package/esm2020/lib/side-menu/content-components/new-case/model/new-case-injection-data.mjs +1 -1
- package/esm2020/lib/utility/navigation-item-default-headers-factory.mjs +22 -0
- package/esm2020/lib/utility/public-api.mjs +2 -1
- package/esm2020/lib/view/case-view/service/case-view-service.mjs +10 -7
- package/fesm2015/netgrif-components-core.mjs +1095 -980
- package/fesm2015/netgrif-components-core.mjs.map +1 -1
- package/fesm2020/netgrif-components-core.mjs +1089 -976
- package/fesm2020/netgrif-components-core.mjs.map +1 -1
- package/lib/header/abstract-header.component.d.ts +7 -2
- package/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.d.ts +0 -1
- package/lib/navigation/model/group-navigation-constants.d.ts +115 -34
- package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +38 -28
- package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +2 -27
- package/lib/navigation/utility/filter-extraction.service.d.ts +9 -2
- package/lib/navigation/utility/navigation-item-task-utility-methods.d.ts +16 -1
- package/lib/panel/task-panel/abstract-task-panel.component.d.ts +2 -1
- package/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.d.ts +2 -1
- package/lib/routing/routing-builder/routing-builder.service.d.ts +2 -0
- package/lib/side-menu/content-components/import-net/abstract-import-net.component.d.ts +3 -1
- package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +2 -1
- package/lib/utility/navigation-item-default-headers-factory.d.ts +3 -0
- package/lib/utility/public-api.d.ts +1 -0
- package/lib/view/case-view/service/case-view-service.d.ts +2 -2
- package/package.json +1 -1
- package/src/assets/i18n/de.json +5 -1
- package/src/assets/i18n/en.json +5 -1
- package/src/assets/i18n/sk.json +5 -1
|
@@ -2,15 +2,9 @@ import { Component, Input } from '@angular/core';
|
|
|
2
2
|
import { NestedTreeControl } from '@angular/cdk/tree';
|
|
3
3
|
import { NavigationEnd } from '@angular/router';
|
|
4
4
|
import { MatTreeNestedDataSource } from '@angular/material/tree';
|
|
5
|
-
import {
|
|
5
|
+
import { ReplaySubject } from 'rxjs';
|
|
6
6
|
import { AbstractNavigationResizableDrawerComponent } from '../navigation-drawer/abstract-navigation-resizable-drawer.component';
|
|
7
|
-
import {
|
|
8
|
-
import { SimpleFilter } from '../../filter/models/simple-filter';
|
|
9
|
-
import { hasContent } from '../../utility/pagination/page-has-content';
|
|
10
|
-
import { GroupNavigationConstants } from '../model/group-navigation-constants';
|
|
11
|
-
import { refreshTree } from '../../utility/refresh-tree';
|
|
12
|
-
import { getField } from '../../utility/get-field';
|
|
13
|
-
import { extractIconAndTitle, extractRoles } from '../utility/navigation-item-task-utility-methods';
|
|
7
|
+
import { debounceTime, filter } from 'rxjs/operators';
|
|
14
8
|
import * as i0 from "@angular/core";
|
|
15
9
|
import * as i1 from "../../configuration/configuration.service";
|
|
16
10
|
import * as i2 from "@angular/router";
|
|
@@ -33,10 +27,8 @@ export class AbstractNavigationTreeComponent extends AbstractNavigationResizable
|
|
|
33
27
|
this._taskResourceService = _taskResourceService;
|
|
34
28
|
this._languageService = _languageService;
|
|
35
29
|
this._navigationRouteProvider = _navigationRouteProvider;
|
|
36
|
-
this._groupNavNodesCount = 0;
|
|
37
30
|
this.treeControl = new NestedTreeControl(node => node.children);
|
|
38
31
|
this.dataSource = new MatTreeNestedDataSource();
|
|
39
|
-
this._groupNavigationConfig = this._config.getConfigurationSubtree(['services', 'groupNavigation']);
|
|
40
32
|
this.dataSource.data = this.resolveNavigationNodes(_config.getConfigurationSubtree(['views']), '');
|
|
41
33
|
this.resolveLevels(this.dataSource.data);
|
|
42
34
|
this._reloadNavigation = new ReplaySubject(1);
|
|
@@ -103,19 +95,9 @@ export class AbstractNavigationTreeComponent extends AbstractNavigationResizable
|
|
|
103
95
|
if (!views || Object.keys(views).length === 0) {
|
|
104
96
|
return null;
|
|
105
97
|
}
|
|
106
|
-
let groupNavigationGenerated = false;
|
|
107
98
|
const nodes = [];
|
|
108
99
|
Object.keys(views).forEach((viewKey) => {
|
|
109
100
|
const view = views[viewKey];
|
|
110
|
-
if (!groupNavigationGenerated && this.isGroupNavigationNode(view)) {
|
|
111
|
-
groupNavigationGenerated = true;
|
|
112
|
-
const insertPosition = (ancestorNodeContainer ?? nodes).length;
|
|
113
|
-
this._subLangChange = this._languageService.getLangChange$().subscribe(() => {
|
|
114
|
-
this.loadGroupNavigationNodes(insertPosition, ancestorNodeContainer ?? nodes);
|
|
115
|
-
});
|
|
116
|
-
this.loadGroupNavigationNodes(insertPosition, ancestorNodeContainer ?? nodes);
|
|
117
|
-
return; // continue
|
|
118
|
-
}
|
|
119
101
|
if (!this.hasNavigation(view) && !this.hasSubRoutes(view)) {
|
|
120
102
|
return; // continue
|
|
121
103
|
}
|
|
@@ -220,111 +202,6 @@ export class AbstractNavigationTreeComponent extends AbstractNavigationResizable
|
|
|
220
202
|
}
|
|
221
203
|
this.resolveLevels(this.dataSource.data);
|
|
222
204
|
}
|
|
223
|
-
/**
|
|
224
|
-
* @returns `true` if the layout of the provided {@link View} node's name indicates it is a
|
|
225
|
-
* [group navigation outlet]{@link GroupNavigationConstants#GROUP_NAVIGATION_OUTLET}. Returns `false` otherwise.
|
|
226
|
-
*/
|
|
227
|
-
isGroupNavigationNode(view) {
|
|
228
|
-
return view?.layout?.name === GroupNavigationConstants.GROUP_NAVIGATION_OUTLET;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Forces a reload of the group navigation nodes.
|
|
232
|
-
* @param insertPosition the position in the container where group navigation nodes reside
|
|
233
|
-
* @param nodeContainer the node container that contains the group navigation nodes
|
|
234
|
-
* (can be an inner node of the navigation tree or its root)
|
|
235
|
-
*/
|
|
236
|
-
loadGroupNavigationNodes(insertPosition, nodeContainer) {
|
|
237
|
-
if (this._subGroupResolution !== undefined && !this._subGroupResolution.closed) {
|
|
238
|
-
this._subGroupResolution.unsubscribe();
|
|
239
|
-
}
|
|
240
|
-
this._subGroupResolution = this.generateGroupNavigationNodes().pipe(take(1)).subscribe(groupNavNodes => {
|
|
241
|
-
nodeContainer.splice(insertPosition, this._groupNavNodesCount, ...groupNavNodes);
|
|
242
|
-
this._groupNavNodesCount = groupNavNodes.length;
|
|
243
|
-
refreshTree(this.dataSource);
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
generateGroupNavigationNodes() {
|
|
247
|
-
return forkJoin(this._activeGroupService.activeGroups.map(groupCase => {
|
|
248
|
-
return this._taskResourceService.searchTask(SimpleFilter.fromTaskQuery({
|
|
249
|
-
case: { id: groupCase.stringId },
|
|
250
|
-
transitionId: GroupNavigationConstants.NAVIGATION_CONFIG_TRANSITION_ID
|
|
251
|
-
})).pipe(map(taskPage => {
|
|
252
|
-
if (hasContent(taskPage)) {
|
|
253
|
-
return this._taskResourceService.getData(taskPage.content[0].stringId);
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
this._log.error('Group navigation configuration task was not found.'
|
|
257
|
-
+ ' Navigation for this group cannot be constructed.');
|
|
258
|
-
return of([]);
|
|
259
|
-
}
|
|
260
|
-
}), concatMap(o => o));
|
|
261
|
-
})).pipe(map((navigationConfigurations) => {
|
|
262
|
-
const result = [];
|
|
263
|
-
for (const navConfig of navigationConfigurations) {
|
|
264
|
-
result.push(...this.convertDatagroupsToNavEntries(navConfig));
|
|
265
|
-
}
|
|
266
|
-
return result;
|
|
267
|
-
}));
|
|
268
|
-
}
|
|
269
|
-
convertDatagroupsToNavEntries(navConfigDatagroups) {
|
|
270
|
-
const result = [];
|
|
271
|
-
const entryDataGroupIndices = [];
|
|
272
|
-
navConfigDatagroups.forEach((group, index) => {
|
|
273
|
-
if (group.fields.some(field => field.stringId === GroupNavigationConstants.NAVIGATION_ENTRY_MARKER_FIELD_ID_SUFFIX)) {
|
|
274
|
-
entryDataGroupIndices.push(index);
|
|
275
|
-
}
|
|
276
|
-
});
|
|
277
|
-
let navEntriesTaskRef;
|
|
278
|
-
navConfigDatagroups.some(group => {
|
|
279
|
-
const taskRef = getField(group.fields, GroupNavigationConstants.NAVIGATION_ENTRIES_TASK_REF_FIELD_ID);
|
|
280
|
-
if (taskRef !== undefined) {
|
|
281
|
-
navEntriesTaskRef = taskRef;
|
|
282
|
-
}
|
|
283
|
-
return !!taskRef;
|
|
284
|
-
});
|
|
285
|
-
if (!navEntriesTaskRef) {
|
|
286
|
-
throw new Error('The navigation configuration task contains no task ref with entries. Navigation cannot be constructed');
|
|
287
|
-
}
|
|
288
|
-
for (let order = 0; order < navEntriesTaskRef.value.length; order++) {
|
|
289
|
-
const index = entryDataGroupIndices[order];
|
|
290
|
-
const label = extractIconAndTitle(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY));
|
|
291
|
-
const newNode = { url: '', ...label };
|
|
292
|
-
const url = this._navigationRouteProvider.route;
|
|
293
|
-
if (url === undefined) {
|
|
294
|
-
this._log.error(`No URL is configured in nae.json for configurable group navigation. Dynamic navigation entry was ignored`);
|
|
295
|
-
continue;
|
|
296
|
-
}
|
|
297
|
-
newNode.url = `/${url}/${navEntriesTaskRef.value[order]}`;
|
|
298
|
-
const allowedRoles = extractRoles(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY), GroupNavigationConstants.NAVIGATION_ENTRY_ALLOWED_ROLES_FIELD_ID_SUFFIX);
|
|
299
|
-
const bannedRoles = extractRoles(navConfigDatagroups.slice(index, index + GroupNavigationConstants.DATAGROUPS_PER_NAVIGATION_ENTRY), GroupNavigationConstants.NAVIGATION_ENTRY_BANNED_ROLES_FIELD_ID_SUFFIX);
|
|
300
|
-
const splitAllowedRoles = this.extractRoleAndNetId(allowedRoles);
|
|
301
|
-
const splitBannedRoles = this.extractRoleAndNetId(bannedRoles);
|
|
302
|
-
if ((splitAllowedRoles.length === 0
|
|
303
|
-
|| splitAllowedRoles.some(idPair => this._userService.hasRoleByIdentifier(idPair[0], idPair[1])))
|
|
304
|
-
&& !splitBannedRoles.some(idPair => this._userService.hasRoleByIdentifier(idPair[0], idPair[1]))) {
|
|
305
|
-
result.push(newNode);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
return result;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Splits the provided strings on the ':' character and returns an array of the resulting splits.
|
|
312
|
-
*
|
|
313
|
-
* If any of the input strings split into fewer or more than 2 strings an error is thrown.
|
|
314
|
-
*
|
|
315
|
-
* @param joined a list of strings in the form `<role identifier>:<net identifier>`
|
|
316
|
-
*/
|
|
317
|
-
extractRoleAndNetId(joined) {
|
|
318
|
-
const split = [];
|
|
319
|
-
for (const pair of joined) {
|
|
320
|
-
const splitPair = pair.split(':');
|
|
321
|
-
if (splitPair.length !== 2) {
|
|
322
|
-
throw new Error(`The role-net pair '${pair}' has invalid format! Cannot extract role and net identifiers.`);
|
|
323
|
-
}
|
|
324
|
-
split.push(splitPair);
|
|
325
|
-
}
|
|
326
|
-
return split;
|
|
327
|
-
}
|
|
328
205
|
}
|
|
329
206
|
AbstractNavigationTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractNavigationTreeComponent, deps: [{ token: i1.ConfigurationService }, { token: i2.Router }, { token: i3.LoggerService }, { token: i4.UserService }, { token: i5.AccessService }, { token: i6.ActiveGroupService }, { token: i7.TaskResourceService }, { token: i8.LanguageService }, { token: i9.DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
330
207
|
AbstractNavigationTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractNavigationTreeComponent, selector: "ncc-abstract-navigation-tree", inputs: { viewPath: "viewPath", parentUrl: "parentUrl", routerChange: "routerChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
|
|
@@ -341,4 +218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
341
218
|
}], routerChange: [{
|
|
342
219
|
type: Input
|
|
343
220
|
}] } });
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLXRyZWUvYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUFDLGFBQWEsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUczRSxPQUFPLEVBQ0gsMENBQTBDLEVBQzdDLE1BQU0scUVBQXFFLENBQUM7QUFFN0UsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRXJFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFDLG1CQUFtQixFQUFFLFlBQVksRUFBQyxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7Ozs7OztBQW9CbEcs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UyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxnRUFBZ0UsQ0FBQyxDQUFDO2FBQy9HO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OzZIQTFYaUIsK0JBQStCO2lIQUEvQiwrQkFBK0IsbUxBRnZDLEVBQUU7NEZBRU0sK0JBQStCO2tCQUpwRCxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLFFBQVEsRUFBRSxFQUFFO2lCQUNmO3VXQUdtQixRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZXN0ZWRUcmVlQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtTZXJ2aWNlcywgVmlldywgVmlld3N9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvc2NoZW1hJztcbmltcG9ydCB7TmF2aWdhdGlvbkVuZCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3ROYXZpZ2F0aW9uUmVzaXphYmxlRHJhd2VyQ29tcG9uZW50XG59IGZyb20gJy4uL25hdmlnYXRpb24tZHJhd2VyL2Fic3RyYWN0LW5hdmlnYXRpb24tcmVzaXphYmxlLWRyYXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHtBY3RpdmVHcm91cFNlcnZpY2V9IGZyb20gJy4uLy4uL2dyb3Vwcy9zZXJ2aWNlcy9hY3RpdmUtZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQge2NvbmNhdE1hcCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUYXNrUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7aGFzQ29udGVudH0gZnJvbSAnLi4vLi4vdXRpbGl0eS9wYWdpbmF0aW9uL3BhZ2UtaGFzLWNvbnRlbnQnO1xuaW1wb3J0IHtEYXRhR3JvdXB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtHcm91cE5hdmlnYXRpb25Db25zdGFudHN9IGZyb20gJy4uL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29uc3RhbnRzJztcbmltcG9ydCB7cmVmcmVzaFRyZWV9IGZyb20gJy4uLy4uL3V0aWxpdHkvcmVmcmVzaC10cmVlJztcbmltcG9ydCB7Z2V0RmllbGR9IGZyb20gJy4uLy4uL3V0aWxpdHkvZ2V0LWZpZWxkJztcbmltcG9ydCB7ZXh0cmFjdEljb25BbmRUaXRsZSwgZXh0cmFjdFJvbGVzfSBmcm9tICcuLi91dGlsaXR5L25hdmlnYXRpb24taXRlbS10YXNrLXV0aWxpdHktbWV0aG9kcyc7XG5pbXBvcnQge0xhbmd1YWdlU2VydmljZX0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL2xhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlXG59IGZyb20gJy4uLy4uL3JvdXRpbmcvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7QWNjZXNzU2VydmljZX0gZnJvbSBcIi4uLy4uL2F1dGhvcml6YXRpb24vcGVybWlzc2lvbi9hY2Nlc3Muc2VydmljZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25Ob2RlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbiAgICBjaGlsZHJlbj86IEFycmF5PE5hdmlnYXRpb25Ob2RlPjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICB0cmFuc2xhdGU/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1uYXZpZ2F0aW9uLXRyZWUnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdmlnYXRpb25UcmVlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3ROYXZpZ2F0aW9uUmVzaXphYmxlRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcHVibGljIHZpZXdQYXRoOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBhcmVudFVybDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByb3V0ZXJDaGFuZ2U6IGJvb2xlYW47XG5cbiAgICBwcm90ZWN0ZWQgX3JlbG9hZE5hdmlnYXRpb246IFJlcGxheVN1YmplY3Q8dm9pZD47XG4gICAgcHJvdGVjdGVkIF9ncm91cE5hdmlnYXRpb25Db25maWc6IFNlcnZpY2VzWydncm91cE5hdmlnYXRpb24nXTtcblxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj47XG4gICAgcHJpdmF0ZSBfc3ViR3JvdXBSZXNvbHV0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfc3ViTGFuZ0NoYW5nZTogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2dyb3VwTmF2Tm9kZXNDb3VudCA9IDA7XG5cbiAgICB0cmVlQ29udHJvbDogTmVzdGVkVHJlZUNvbnRyb2w8TmF2aWdhdGlvbk5vZGU+O1xuICAgIGRhdGFTb3VyY2U6IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPE5hdmlnYXRpb25Ob2RlPjtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbmZpZzogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY2Nlc3NTZXJ2aWNlOiBBY2Nlc3NTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2ZUdyb3VwU2VydmljZTogQWN0aXZlR3JvdXBTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tSZXNvdXJjZVNlcnZpY2U6IFRhc2tSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbmF2aWdhdGlvblJvdXRlUHJvdmlkZXI6IER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxOYXZpZ2F0aW9uTm9kZT4obm9kZSA9PiBub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPE5hdmlnYXRpb25Ob2RlPigpO1xuICAgICAgICB0aGlzLl9ncm91cE5hdmlnYXRpb25Db25maWcgPSB0aGlzLl9jb25maWcuZ2V0Q29uZmlndXJhdGlvblN1YnRyZWUoWydzZXJ2aWNlcycsICdncm91cE5hdmlnYXRpb24nXSk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKF9jb25maWcuZ2V0Q29uZmlndXJhdGlvblN1YnRyZWUoWyd2aWV3cyddKSwgJycpO1xuICAgICAgICB0aGlzLnJlc29sdmVMZXZlbHModGhpcy5kYXRhU291cmNlLmRhdGEpO1xuICAgICAgICB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLnZpZXdQYXRoICYmIHRoaXMucGFyZW50VXJsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5yb3V0ZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlc1dpdGhPZmZzZXRSb290KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gW1xuICAgICAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgdGhpcy5yb3V0ZXJDaGFuZ2UpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVsb2FkTmF2aWdhdGlvbi5uZXh0KCkpLFxuICAgICAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UudXNlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3JlbG9hZE5hdmlnYXRpb24ubmV4dCgpKSxcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUdyb3VwU2VydmljZS5hY3RpdmVHcm91cHMkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uLm5leHQoKSlcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5fc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFzdWIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVsb2FkTmF2aWdhdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAodGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Ykdyb3VwUmVzb2x1dGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zdWJMYW5nQ2hhbmdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YkxhbmdDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDaGlsZChfOiBudW1iZXIsIG5vZGU6IE5hdmlnYXRpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIW5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlTmF2aWdhdGlvbigpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5vZGVzO1xuICAgICAgICBpZiAodGhpcy52aWV3UGF0aCAmJiB0aGlzLnBhcmVudFVybCAhPT0gdW5kZWZpbmVkICYmIHRoaXMucm91dGVyQ2hhbmdlKSB7XG4gICAgICAgICAgICBub2RlcyA9IHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlc1dpdGhPZmZzZXRSb290KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlcyA9IHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlcyh0aGlzLl9jb25maWcuZ2V0Q29uZmlndXJhdGlvblN1YnRyZWUoWyd2aWV3cyddKSwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gbm9kZXM7XG4gICAgICAgIHRoaXMucmVzb2x2ZUxldmVscyh0aGlzLmRhdGFTb3VyY2UuZGF0YSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVOYXZpZ2F0aW9uTm9kZXNXaXRoT2Zmc2V0Um9vdCgpOiBBcnJheTxOYXZpZ2F0aW9uTm9kZT4ge1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fY29uZmlnLmdldFZpZXdCeVBhdGgodGhpcy52aWV3UGF0aCk7XG4gICAgICAgIGlmICh2aWV3ICYmIHZpZXcuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uTm9kZXModmlldy5jaGlsZHJlbiwgdGhpcy5wYXJlbnRVcmwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgcHJvdmlkZWQge0BsaW5rIFZpZXdzfSBvYmplY3QgaW50byB0aGUgY29ycmVzcG9uZGluZyBuYXZpZ2F0aW9uIHRyZWVcbiAgICAgKiBAcGFyYW0gdmlld3MgbmF2aWdhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgICogQHBhcmFtIHBhcmVudFVybCBVUkwgb2YgdGhlIHBhcmVudCBuYXZpZ2F0aW9uIHRyZWUgbm9kZVxuICAgICAqIEBwYXJhbSBhbmNlc3Rvck5vZGVDb250YWluZXIgaWYgdGhlIHBhcmVudCBub2RlIGhhcyBubyBuYXZpZ2F0aW9uIHRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIHRoZVxuICAgICAqIGNsb3Nlc3QgYW5jZXN0b3IgdGhhdCBoYXMgbmF2aWdhdGlvblxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZU5hdmlnYXRpb25Ob2RlcyhcbiAgICAgICAgdmlld3M6IFZpZXdzLFxuICAgICAgICBwYXJlbnRVcmw6IHN0cmluZyxcbiAgICAgICAgYW5jZXN0b3JOb2RlQ29udGFpbmVyPzogQXJyYXk8TmF2aWdhdGlvbk5vZGU+XG4gICAgKTogQXJyYXk8TmF2aWdhdGlvbk5vZGU+IHtcbiAgICAgICAgaWYgKCF2aWV3cyB8fCBPYmplY3Qua2V5cyh2aWV3cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBncm91cE5hdmlnYXRpb25HZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgbm9kZXM6IEFycmF5PE5hdmlnYXRpb25Ob2RlPiA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyh2aWV3cykuZm9yRWFjaCgodmlld0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdmlld3Nbdmlld0tleV07XG5cbiAgICAgICAgICAgIGlmICghZ3JvdXBOYXZpZ2F0aW9uR2VuZXJhdGVkICYmIHRoaXMuaXNHcm91cE5hdmlnYXRpb25Ob2RlKHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBOYXZpZ2F0aW9uR2VuZXJhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRQb3NpdGlvbiA9IChhbmNlc3Rvck5vZGVDb250YWluZXIgPz8gbm9kZXMpLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3N1YkxhbmdDaGFuZ2UgPSB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0TGFuZ0NoYW5nZSQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRHcm91cE5hdmlnYXRpb25Ob2RlcyhpbnNlcnRQb3NpdGlvbiwgYW5jZXN0b3JOb2RlQ29udGFpbmVyID8/IG5vZGVzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRHcm91cE5hdmlnYXRpb25Ob2RlcyhpbnNlcnRQb3NpdGlvbiwgYW5jZXN0b3JOb2RlQ29udGFpbmVyID8/IG5vZGVzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc05hdmlnYXRpb24odmlldykgJiYgIXRoaXMuaGFzU3ViUm91dGVzKHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gdGhpcy5nZXROb2RlUm91dGVTZWdtZW50KHZpZXcpO1xuXG4gICAgICAgICAgICBpZiAocm91dGVTZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvdXRlIHNlZ21lbnQgZG9lc250IGV4aXN0IGluIHZpZXcgJyArIHBhcmVudFVybCArICcvJyArIHZpZXdLZXkgKyAnICEnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcodmlldywgdGhpcy5hcHBlbmRSb3V0ZVNlZ21lbnQocGFyZW50VXJsLCByb3V0ZVNlZ21lbnQpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTmF2aWdhdGlvbih2aWV3KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGU6IE5hdmlnYXRpb25Ob2RlID0gdGhpcy5idWlsZE5vZGUodmlldywgcm91dGVTZWdtZW50LCBwYXJlbnRVcmwpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1N1YlJvdXRlcyh2aWV3KSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKHZpZXcuY2hpbGRyZW4sIG5vZGUudXJsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU3ViUm91dGVzKHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goLi4udGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kUm91dGVTZWdtZW50KHBhcmVudFVybCwgcm91dGVTZWdtZW50KSwgYW5jZXN0b3JOb2RlQ29udGFpbmVyID8/IG5vZGVzKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFzTmF2aWdhdGlvbihyb3V0ZTogVmlldyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXJvdXRlLm5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdXRlLm5hdmlnYXRpb24gPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdXRlLm5hdmlnYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5uYXZpZ2F0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJvdXRlLm5hdmlnYXRpb24pLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYXNTdWJSb3V0ZXMocm91dGU6IFZpZXcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFyb3V0ZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91dGUuY2hpbGRyZW4gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocm91dGUuY2hpbGRyZW4pLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBidWlsZE5vZGUodmlldzogVmlldywgcm91dGVTZWdtZW50OiBzdHJpbmcsIHBhcmVudFVybDogc3RyaW5nKTogTmF2aWdhdGlvbk5vZGUge1xuICAgICAgICBjb25zdCBub2RlOiBOYXZpZ2F0aW9uTm9kZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgICAgICB1cmw6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZS5uYW1lID0gdGhpcy5nZXROb2RlTmFtZSh2aWV3LCByb3V0ZVNlZ21lbnQpO1xuICAgICAgICBub2RlLmljb24gPSB0aGlzLmdldE5vZGVJY29uKHZpZXcpO1xuICAgICAgICBub2RlLnVybCA9IHRoaXMuYXBwZW5kUm91dGVTZWdtZW50KHBhcmVudFVybCwgcm91dGVTZWdtZW50KTtcbiAgICAgICAgbm9kZS50cmFuc2xhdGUgPSB0aGlzLmdldE5vZGVUcmFuc2xhdGVGbGFnKHZpZXcpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Tm9kZU5hbWUodmlldzogVmlldywgcm91dGVTZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodmlldy5uYXZpZ2F0aW9uWyd0aXRsZSddKSB7XG4gICAgICAgICAgICByZXR1cm4gdmlldy5uYXZpZ2F0aW9uWyd0aXRsZSddO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ciA9IHJvdXRlU2VnbWVudC5yZXBsYWNlKCdfJywgJyAnKTtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE5vZGVJY29uKHZpZXc6IFZpZXcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gIXZpZXcubmF2aWdhdGlvblsnaWNvbiddID8gdW5kZWZpbmVkIDogdmlldy5uYXZpZ2F0aW9uWydpY29uJ107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHZpZXcgY29uZmlndXJhdGlvbiBvZiBzb21lIHZpZXcsIHdob3NlIHJvdXRlU2VnbWVudCB3ZSB3YW50IHRvIGRldGVybWluZVxuICAgICAqIEByZXR1cm5zIHRoZSByb3V0ZVNlZ21lbnQgZm9yIHRoZSBwcm92aWRlZCB2aWV3LCBvciB1bmRlZmluZWQgaWYgbm9uZSBpcyBzcGVjaWZpZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0Tm9kZVJvdXRlU2VnbWVudCh2aWV3OiBWaWV3KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICEhdmlldy5yb3V0aW5nICYmICh0eXBlb2Ygdmlldy5yb3V0aW5nLnBhdGggPT09ICdzdHJpbmcnKSA/IHZpZXcucm91dGluZy5wYXRoIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXROb2RlVHJhbnNsYXRlRmxhZyh2aWV3OiBWaWV3KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2aWV3Lm5hdmlnYXRpb25bJ3RyYW5zbGF0ZSddID8/IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGVuZHMgdGhlIHJvdXRlIHNlZ21lbnQgdG8gdGhlIHBhcmVudCBVUkwuXG4gICAgICogQHBhcmFtIHBhcmVudFVybCBVUkwgb2YgdGhlIHBhcmVudC4gU2hvdWxkIG5vdCBlbmQgd2l0aCAnLydcbiAgICAgKiBAcGFyYW0gcm91dGVTZWdtZW50IFVSTCBzZWdtZW50IG9mIHRoZSBjaGlsZFxuICAgICAqIEByZXR1cm5zIGBwYXJlbnRVcmwvcm91dGVTZWdtZW50YCBpZiB0aGUgYHJvdXRlU2VnbWVudGAgaXMgdHJ1dGh5IChub3QgYW4gZW1wdHkgc3RyaW5nKS5cbiAgICAgKiBSZXR1cm5zIGBwYXJlbnRVcmxgIGlmIGByb3V0ZVNlZ21lbnRgIGlzIGZhbHN5IChlbXB0eSBzdHJpbmcpLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhcHBlbmRSb3V0ZVNlZ21lbnQocGFyZW50VXJsOiBzdHJpbmcsIHJvdXRlU2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlU2VnbWVudCA/IHBhcmVudFVybCArICcvJyArIHJvdXRlU2VnbWVudCA6IHBhcmVudFVybDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUxldmVscyhub2RlczogQXJyYXk8TmF2aWdhdGlvbk5vZGU+LCBwYXJlbnRMZXZlbD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIW5vZGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudExldmVsID0gcGFyZW50TGV2ZWwgPT09IG51bGwgfHwgcGFyZW50TGV2ZWwgPT09IHVuZGVmaW5lZCA/IDAgOiBwYXJlbnRMZXZlbCArIDE7XG4gICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBub2RlLmxldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMZXZlbHMobm9kZS5jaGlsZHJlbiwgY3VycmVudExldmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9jb25maWcuZ2V0Vmlld0J5UGF0aCh0aGlzLnZpZXdQYXRoKTtcbiAgICAgICAgaWYgKHZpZXcgJiYgdmlldy5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uTm9kZXModmlldy5jaGlsZHJlbiwgdGhpcy5wYXJlbnRVcmwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzb2x2ZUxldmVscyh0aGlzLmRhdGFTb3VyY2UuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBsYXlvdXQgb2YgdGhlIHByb3ZpZGVkIHtAbGluayBWaWV3fSBub2RlJ3MgbmFtZSBpbmRpY2F0ZXMgaXQgaXMgYVxuICAgICAqIFtncm91cCBuYXZpZ2F0aW9uIG91dGxldF17QGxpbmsgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzI0dST1VQX05BVklHQVRJT05fT1VUTEVUfS4gUmV0dXJucyBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNHcm91cE5hdmlnYXRpb25Ob2RlKHZpZXc6IFZpZXcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZpZXc/LmxheW91dD8ubmFtZSA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLkdST1VQX05BVklHQVRJT05fT1VUTEVUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcmNlcyBhIHJlbG9hZCBvZiB0aGUgZ3JvdXAgbmF2aWdhdGlvbiBub2Rlcy5cbiAgICAgKiBAcGFyYW0gaW5zZXJ0UG9zaXRpb24gdGhlIHBvc2l0aW9uIGluIHRoZSBjb250YWluZXIgd2hlcmUgZ3JvdXAgbmF2aWdhdGlvbiBub2RlcyByZXNpZGVcbiAgICAgKiBAcGFyYW0gbm9kZUNvbnRhaW5lciB0aGUgbm9kZSBjb250YWluZXIgdGhhdCBjb250YWlucyB0aGUgZ3JvdXAgbmF2aWdhdGlvbiBub2Rlc1xuICAgICAqIChjYW4gYmUgYW4gaW5uZXIgbm9kZSBvZiB0aGUgbmF2aWdhdGlvbiB0cmVlIG9yIGl0cyByb290KVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsb2FkR3JvdXBOYXZpZ2F0aW9uTm9kZXMoaW5zZXJ0UG9zaXRpb246IG51bWJlciwgbm9kZUNvbnRhaW5lcjogQXJyYXk8TmF2aWdhdGlvbk5vZGU+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9zdWJHcm91cFJlc29sdXRpb24gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJHcm91cFJlc29sdXRpb24gPSB0aGlzLmdlbmVyYXRlR3JvdXBOYXZpZ2F0aW9uTm9kZXMoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShncm91cE5hdk5vZGVzID0+IHtcbiAgICAgICAgICAgIG5vZGVDb250YWluZXIuc3BsaWNlKGluc2VydFBvc2l0aW9uLCB0aGlzLl9ncm91cE5hdk5vZGVzQ291bnQsIC4uLmdyb3VwTmF2Tm9kZXMpO1xuICAgICAgICAgICAgdGhpcy5fZ3JvdXBOYXZOb2Rlc0NvdW50ID0gZ3JvdXBOYXZOb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICByZWZyZXNoVHJlZSh0aGlzLmRhdGFTb3VyY2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVHcm91cE5hdmlnYXRpb25Ob2RlcygpOiBPYnNlcnZhYmxlPEFycmF5PE5hdmlnYXRpb25Ob2RlPj4ge1xuICAgICAgICByZXR1cm4gZm9ya0pvaW4odGhpcy5fYWN0aXZlR3JvdXBTZXJ2aWNlLmFjdGl2ZUdyb3Vwcy5tYXAoZ3JvdXBDYXNlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLnNlYXJjaFRhc2soU2ltcGxlRmlsdGVyLmZyb21UYXNrUXVlcnkoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjYXNlOiB7aWQ6IGdyb3VwQ2FzZS5zdHJpbmdJZH0sXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25JZDogR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLk5BVklHQVRJT05fQ09ORklHX1RSQU5TSVRJT05fSUQgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAodGFza1BhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29udGVudCh0YXNrUGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldERhdGEodGFza1BhZ2UuY29udGVudFswXS5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0dyb3VwIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0YXNrIHdhcyBub3QgZm91bmQuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJyBOYXZpZ2F0aW9uIGZvciB0aGlzIGdyb3VwIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAobyA9PiBvKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSkpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG5hdmlnYXRpb25Db25maWd1cmF0aW9uczogQXJyYXk8QXJyYXk8RGF0YUdyb3VwPj4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5hdkNvbmZpZyBvZiBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5jb252ZXJ0RGF0YWdyb3Vwc1RvTmF2RW50cmllcyhuYXZDb25maWcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnZlcnREYXRhZ3JvdXBzVG9OYXZFbnRyaWVzKG5hdkNvbmZpZ0RhdGFncm91cHM6IEFycmF5PERhdGFHcm91cD4pOiBBcnJheTxOYXZpZ2F0aW9uTm9kZT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgZW50cnlEYXRhR3JvdXBJbmRpY2VzID0gW107XG4gICAgICAgIG5hdkNvbmZpZ0RhdGFncm91cHMuZm9yRWFjaChcbiAgICAgICAgICAgIChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkID0+IGZpZWxkLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuTkFWSUdBVElPTl9FTlRSWV9NQVJLRVJfRklFTERfSURfU1VGRklYXG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeURhdGFHcm91cEluZGljZXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBuYXZFbnRyaWVzVGFza1JlZjtcbiAgICAgICAgbmF2Q29uZmlnRGF0YWdyb3Vwcy5zb21lKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tSZWYgPSBnZXRGaWVsZChncm91cC5maWVsZHMsIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5OQVZJR0FUSU9OX0VOVFJJRVNfVEFTS19SRUZfRklFTERfSUQpO1xuICAgICAgICAgICAgaWYgKHRhc2tSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5hdkVudHJpZXNUYXNrUmVmID0gdGFza1JlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhIXRhc2tSZWY7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghbmF2RW50cmllc1Rhc2tSZWYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0YXNrIGNvbnRhaW5zIG5vIHRhc2sgcmVmIHdpdGggZW50cmllcy4gTmF2aWdhdGlvbiBjYW5ub3QgYmUgY29uc3RydWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IG9yZGVyID0gMDsgb3JkZXIgPCBuYXZFbnRyaWVzVGFza1JlZi52YWx1ZS5sZW5ndGg7IG9yZGVyKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZW50cnlEYXRhR3JvdXBJbmRpY2VzW29yZGVyXTtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZXh0cmFjdEljb25BbmRUaXRsZShuYXZDb25maWdEYXRhZ3JvdXBzLnNsaWNlKGluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4ICsgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLkRBVEFHUk9VUFNfUEVSX05BVklHQVRJT05fRU5UUlkpKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGU6IE5hdmlnYXRpb25Ob2RlID0ge3VybDogJycsIC4uLmxhYmVsfTtcblxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fbmF2aWdhdGlvblJvdXRlUHJvdmlkZXIucm91dGU7XG4gICAgICAgICAgICBpZiAodXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYE5vIFVSTCBpcyBjb25maWd1cmVkIGluIG5hZS5qc29uIGZvciBjb25maWd1cmFibGUgZ3JvdXAgbmF2aWdhdGlvbi4gRHluYW1pYyBuYXZpZ2F0aW9uIGVudHJ5IHdhcyBpZ25vcmVkYCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdOb2RlLnVybCA9IGAvJHt1cmx9LyR7bmF2RW50cmllc1Rhc2tSZWYudmFsdWVbb3JkZXJdfWA7XG4gICAgICAgICAgICBjb25zdCBhbGxvd2VkUm9sZXMgPSBleHRyYWN0Um9sZXMobmF2Q29uZmlnRGF0YWdyb3Vwcy5zbGljZShpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggKyBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuREFUQUdST1VQU19QRVJfTkFWSUdBVElPTl9FTlRSWSksXG4gICAgICAgICAgICAgICAgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLk5BVklHQVRJT05fRU5UUllfQUxMT1dFRF9ST0xFU19GSUVMRF9JRF9TVUZGSVgpO1xuXG4gICAgICAgICAgICBjb25zdCBiYW5uZWRSb2xlcyA9IGV4dHJhY3RSb2xlcyhuYXZDb25maWdEYXRhZ3JvdXBzLnNsaWNlKGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBpbmRleCArIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5EQVRBR1JPVVBTX1BFUl9OQVZJR0FUSU9OX0VOVFJZKSxcbiAgICAgICAgICAgICAgICBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuTkFWSUdBVElPTl9FTlRSWV9CQU5ORURfUk9MRVNfRklFTERfSURfU1VGRklYKTtcblxuICAgICAgICAgICAgY29uc3Qgc3BsaXRBbGxvd2VkUm9sZXMgPSB0aGlzLmV4dHJhY3RSb2xlQW5kTmV0SWQoYWxsb3dlZFJvbGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0QmFubmVkUm9sZXMgPSB0aGlzLmV4dHJhY3RSb2xlQW5kTmV0SWQoYmFubmVkUm9sZXMpO1xuXG4gICAgICAgICAgICBpZiAoKHNwbGl0QWxsb3dlZFJvbGVzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICB8fCBzcGxpdEFsbG93ZWRSb2xlcy5zb21lKGlkUGFpciA9PiB0aGlzLl91c2VyU2VydmljZS5oYXNSb2xlQnlJZGVudGlmaWVyKGlkUGFpclswXSwgaWRQYWlyWzFdKSkpXG4gICAgICAgICAgICAgICAgJiYgIXNwbGl0QmFubmVkUm9sZXMuc29tZShpZFBhaXIgPT4gdGhpcy5fdXNlclNlcnZpY2UuaGFzUm9sZUJ5SWRlbnRpZmllcihpZFBhaXJbMF0sIGlkUGFpclsxXSkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdHMgdGhlIHByb3ZpZGVkIHN0cmluZ3Mgb24gdGhlICc6JyBjaGFyYWN0ZXIgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBzcGxpdHMuXG4gICAgICpcbiAgICAgKiBJZiBhbnkgb2YgdGhlIGlucHV0IHN0cmluZ3Mgc3BsaXQgaW50byBmZXdlciBvciBtb3JlIHRoYW4gMiBzdHJpbmdzIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBqb2luZWQgYSBsaXN0IG9mIHN0cmluZ3MgaW4gdGhlIGZvcm0gYDxyb2xlIGlkZW50aWZpZXI+OjxuZXQgaWRlbnRpZmllcj5gXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RSb2xlQW5kTmV0SWQoam9pbmVkOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgICAgICBjb25zdCBzcGxpdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2Ygam9pbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFBhaXIgPSBwYWlyLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAoc3BsaXRQYWlyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHJvbGUtbmV0IHBhaXIgJyR7cGFpcn0nIGhhcyBpbnZhbGlkIGZvcm1hdCEgQ2Fubm90IGV4dHJhY3Qgcm9sZSBhbmQgbmV0IGlkZW50aWZpZXJzLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BsaXQucHVzaChzcGxpdFBhaXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGxpdDtcbiAgICB9XG59XG4iXX0=
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLXRyZWUvYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUFDLGFBQWEsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxhQUFhLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFHakQsT0FBTyxFQUNILDBDQUEwQyxFQUM3QyxNQUFNLHFFQUFxRSxDQUFDO0FBRTdFLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBcUJwRCxNQUFNLE9BQWdCLCtCQUFnQyxTQUFRLDBDQUEwQztJQWVwRyxZQUFnQyxPQUE2QixFQUM3QixPQUFlLEVBQ2YsSUFBbUIsRUFDbkIsWUFBeUIsRUFDekIsY0FBNkIsRUFDN0IsbUJBQXVDLEVBQ3ZDLG9CQUF5QyxFQUN6QyxnQkFBaUMsRUFDakMsd0JBQStEO1FBQzNGLEtBQUssRUFBRSxDQUFDO1FBVG9CLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzdCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLHdCQUFtQixHQUFuQixtQkFB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QUU7NEZBRU0sK0JBQStCO2tCQUpwRCxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLFFBQVEsRUFBRSxFQUFFO2lCQUNmO3VXQUdtQixRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZXN0ZWRUcmVlQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtWaWV3LCBWaWV3c30gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9zY2hlbWEnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge01hdFRyZWVOZXN0ZWREYXRhU291cmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcbmltcG9ydCB7UmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3ROYXZpZ2F0aW9uUmVzaXphYmxlRHJhd2VyQ29tcG9uZW50XG59IGZyb20gJy4uL25hdmlnYXRpb24tZHJhd2VyL2Fic3RyYWN0LW5hdmlnYXRpb24tcmVzaXphYmxlLWRyYXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHtBY3RpdmVHcm91cFNlcnZpY2V9IGZyb20gJy4uLy4uL2dyb3Vwcy9zZXJ2aWNlcy9hY3RpdmUtZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvdGFzay1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7TGFuZ3VhZ2VTZXJ2aWNlfSBmcm9tICcuLi8uLi90cmFuc2xhdGUvbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2Vcbn0gZnJvbSAnLi4vLi4vcm91dGluZy9keW5hbWljLW5hdmlnYXRpb24tcm91dGUtcHJvdmlkZXIvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtBY2Nlc3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uL2FjY2Vzcy5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvbk5vZGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIHVybDogc3RyaW5nO1xuICAgIGNoaWxkcmVuPzogQXJyYXk8TmF2aWdhdGlvbk5vZGU+O1xuICAgIGxldmVsPzogbnVtYmVyO1xuICAgIHRyYW5zbGF0ZT86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LW5hdmlnYXRpb24tdHJlZScsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0TmF2aWdhdGlvblRyZWVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE5hdmlnYXRpb25SZXNpemFibGVEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgdmlld1BhdGg6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgcGFyZW50VXJsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHJvdXRlckNoYW5nZTogYm9vbGVhbjtcblxuICAgIHByb3RlY3RlZCBfcmVsb2FkTmF2aWdhdGlvbjogUmVwbGF5U3ViamVjdDx2b2lkPjtcblxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj47XG4gICAgcHJpdmF0ZSBfc3ViR3JvdXBSZXNvbHV0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfc3ViTGFuZ0NoYW5nZTogU3Vic2NyaXB0aW9uO1xuXG4gICAgdHJlZUNvbnRyb2w6IE5lc3RlZFRyZWVDb250cm9sPE5hdmlnYXRpb25Ob2RlPjtcbiAgICBkYXRhU291cmNlOiBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxOYXZpZ2F0aW9uTm9kZT47XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWNjZXNzU2VydmljZTogQWNjZXNzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmVHcm91cFNlcnZpY2U6IEFjdGl2ZUdyb3VwU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX25hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyOiBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8TmF2aWdhdGlvbk5vZGU+KG5vZGUgPT4gbm9kZS5jaGlsZHJlbik7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxOYXZpZ2F0aW9uTm9kZT4oKTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uTm9kZXMoX2NvbmZpZy5nZXRDb25maWd1cmF0aW9uU3VidHJlZShbJ3ZpZXdzJ10pLCAnJyk7XG4gICAgICAgIHRoaXMucmVzb2x2ZUxldmVscyh0aGlzLmRhdGFTb3VyY2UuZGF0YSk7XG4gICAgICAgIHRoaXMuX3JlbG9hZE5hdmlnYXRpb24gPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgaWYgKHRoaXMudmlld1BhdGggJiYgdGhpcy5wYXJlbnRVcmwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvdXRlckNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzV2l0aE9mZnNldFJvb3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiB0aGlzLnJvdXRlckNoYW5nZSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uLm5leHQoKSksXG4gICAgICAgICAgICB0aGlzLl91c2VyU2VydmljZS51c2VyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVsb2FkTmF2aWdhdGlvbi5uZXh0KCkpLFxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlR3JvdXBTZXJ2aWNlLmFjdGl2ZUdyb3VwcyQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3JlbG9hZE5hdmlnYXRpb24ubmV4dCgpKVxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMuX3JlbG9hZE5hdmlnYXRpb24ucGlwZShkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHN1YiBvZiB0aGlzLl9zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXN1Yi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICh0aGlzLl9zdWJHcm91cFJlc29sdXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3N1YkxhbmdDaGFuZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fc3ViTGFuZ0NoYW5nZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0NoaWxkKF86IG51bWJlciwgbm9kZTogTmF2aWdhdGlvbk5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgICAgICBsZXQgbm9kZXM7XG4gICAgICAgIGlmICh0aGlzLnZpZXdQYXRoICYmIHRoaXMucGFyZW50VXJsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5yb3V0ZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIG5vZGVzID0gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzV2l0aE9mZnNldFJvb3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGVzID0gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKHRoaXMuX2NvbmZpZy5nZXRDb25maWd1cmF0aW9uU3VidHJlZShbJ3ZpZXdzJ10pLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBub2RlcztcbiAgICAgICAgdGhpcy5yZXNvbHZlTGV2ZWxzKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZU5hdmlnYXRpb25Ob2Rlc1dpdGhPZmZzZXRSb290KCk6IEFycmF5PE5hdmlnYXRpb25Ob2RlPiB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9jb25maWcuZ2V0Vmlld0J5UGF0aCh0aGlzLnZpZXdQYXRoKTtcbiAgICAgICAgaWYgKHZpZXcgJiYgdmlldy5jaGlsZHJlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlcyh2aWV3LmNoaWxkcmVuLCB0aGlzLnBhcmVudFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBwcm92aWRlZCB7QGxpbmsgVmlld3N9IG9iamVjdCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG5hdmlnYXRpb24gdHJlZVxuICAgICAqIEBwYXJhbSB2aWV3cyBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0gcGFyZW50VXJsIFVSTCBvZiB0aGUgcGFyZW50IG5hdmlnYXRpb24gdHJlZSBub2RlXG4gICAgICogQHBhcmFtIGFuY2VzdG9yTm9kZUNvbnRhaW5lciBpZiB0aGUgcGFyZW50IG5vZGUgaGFzIG5vIG5hdmlnYXRpb24gdGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgdGhlXG4gICAgICogY2xvc2VzdCBhbmNlc3RvciB0aGF0IGhhcyBuYXZpZ2F0aW9uXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNvbHZlTmF2aWdhdGlvbk5vZGVzKFxuICAgICAgICB2aWV3czogVmlld3MsXG4gICAgICAgIHBhcmVudFVybDogc3RyaW5nLFxuICAgICAgICBhbmNlc3Rvck5vZGVDb250YWluZXI/OiBBcnJheTxOYXZpZ2F0aW9uTm9kZT5cbiAgICApOiBBcnJheTxOYXZpZ2F0aW9uTm9kZT4ge1xuICAgICAgICBpZiAoIXZpZXdzIHx8IE9iamVjdC5rZXlzKHZpZXdzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZXM6IEFycmF5PE5hdmlnYXRpb25Ob2RlPiA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyh2aWV3cykuZm9yRWFjaCgodmlld0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdmlld3Nbdmlld0tleV07XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNOYXZpZ2F0aW9uKHZpZXcpICYmICF0aGlzLmhhc1N1YlJvdXRlcyh2aWV3KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlU2VnbWVudCA9IHRoaXMuZ2V0Tm9kZVJvdXRlU2VnbWVudCh2aWV3KTtcblxuICAgICAgICAgICAgaWYgKHJvdXRlU2VnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3V0ZSBzZWdtZW50IGRvZXNudCBleGlzdCBpbiB2aWV3ICcgKyBwYXJlbnRVcmwgKyAnLycgKyB2aWV3S2V5ICsgJyAhJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fYWNjZXNzU2VydmljZS5jYW5BY2Nlc3NWaWV3KHZpZXcsIHRoaXMuYXBwZW5kUm91dGVTZWdtZW50KHBhcmVudFVybCwgcm91dGVTZWdtZW50KSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc05hdmlnYXRpb24odmlldykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlOiBOYXZpZ2F0aW9uTm9kZSA9IHRoaXMuYnVpbGROb2RlKHZpZXcsIHJvdXRlU2VnbWVudCwgcGFyZW50VXJsKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTdWJSb3V0ZXModmlldykpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlcyh2aWV3LmNoaWxkcmVuLCBub2RlLnVybCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1N1YlJvdXRlcyh2aWV3KSkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKC4uLnRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFJvdXRlU2VnbWVudChwYXJlbnRVcmwsIHJvdXRlU2VnbWVudCksIGFuY2VzdG9yTm9kZUNvbnRhaW5lciA/PyBub2RlcylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhc05hdmlnYXRpb24ocm91dGU6IFZpZXcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFyb3V0ZS5uYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5uYXZpZ2F0aW9uID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZS5uYXZpZ2F0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91dGUubmF2aWdhdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyb3V0ZS5uYXZpZ2F0aW9uKS5sZW5ndGggIT09IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFzU3ViUm91dGVzKHJvdXRlOiBWaWV3KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcm91dGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdXRlLmNoaWxkcmVuID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJvdXRlLmNoaWxkcmVuKS5sZW5ndGggIT09IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYnVpbGROb2RlKHZpZXc6IFZpZXcsIHJvdXRlU2VnbWVudDogc3RyaW5nLCBwYXJlbnRVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25Ob2RlIHtcbiAgICAgICAgY29uc3Qgbm9kZTogTmF2aWdhdGlvbk5vZGUgPSB7XG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgICAgdXJsOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIG5vZGUubmFtZSA9IHRoaXMuZ2V0Tm9kZU5hbWUodmlldywgcm91dGVTZWdtZW50KTtcbiAgICAgICAgbm9kZS5pY29uID0gdGhpcy5nZXROb2RlSWNvbih2aWV3KTtcbiAgICAgICAgbm9kZS51cmwgPSB0aGlzLmFwcGVuZFJvdXRlU2VnbWVudChwYXJlbnRVcmwsIHJvdXRlU2VnbWVudCk7XG4gICAgICAgIG5vZGUudHJhbnNsYXRlID0gdGhpcy5nZXROb2RlVHJhbnNsYXRlRmxhZyh2aWV3KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE5vZGVOYW1lKHZpZXc6IFZpZXcsIHJvdXRlU2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZpZXcubmF2aWdhdGlvblsndGl0bGUnXSkge1xuICAgICAgICAgICAgcmV0dXJuIHZpZXcubmF2aWdhdGlvblsndGl0bGUnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHIgPSByb3V0ZVNlZ21lbnQucmVwbGFjZSgnXycsICcgJyk7XG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXROb2RlSWNvbih2aWV3OiBWaWV3KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICF2aWV3Lm5hdmlnYXRpb25bJ2ljb24nXSA/IHVuZGVmaW5lZCA6IHZpZXcubmF2aWdhdGlvblsnaWNvbiddO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB2aWV3IGNvbmZpZ3VyYXRpb24gb2Ygc29tZSB2aWV3LCB3aG9zZSByb3V0ZVNlZ21lbnQgd2Ugd2FudCB0byBkZXRlcm1pbmVcbiAgICAgKiBAcmV0dXJucyB0aGUgcm91dGVTZWdtZW50IGZvciB0aGUgcHJvdmlkZWQgdmlldywgb3IgdW5kZWZpbmVkIGlmIG5vbmUgaXMgc3BlY2lmaWVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldE5vZGVSb3V0ZVNlZ21lbnQodmlldzogVmlldyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAhIXZpZXcucm91dGluZyAmJiAodHlwZW9mIHZpZXcucm91dGluZy5wYXRoID09PSAnc3RyaW5nJykgPyB2aWV3LnJvdXRpbmcucGF0aCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Tm9kZVRyYW5zbGF0ZUZsYWcodmlldzogVmlldyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmlldy5uYXZpZ2F0aW9uWyd0cmFuc2xhdGUnXSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIHRoZSByb3V0ZSBzZWdtZW50IHRvIHRoZSBwYXJlbnQgVVJMLlxuICAgICAqIEBwYXJhbSBwYXJlbnRVcmwgVVJMIG9mIHRoZSBwYXJlbnQuIFNob3VsZCBub3QgZW5kIHdpdGggJy8nXG4gICAgICogQHBhcmFtIHJvdXRlU2VnbWVudCBVUkwgc2VnbWVudCBvZiB0aGUgY2hpbGRcbiAgICAgKiBAcmV0dXJucyBgcGFyZW50VXJsL3JvdXRlU2VnbWVudGAgaWYgdGhlIGByb3V0ZVNlZ21lbnRgIGlzIHRydXRoeSAobm90IGFuIGVtcHR5IHN0cmluZykuXG4gICAgICogUmV0dXJucyBgcGFyZW50VXJsYCBpZiBgcm91dGVTZWdtZW50YCBpcyBmYWxzeSAoZW1wdHkgc3RyaW5nKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXBwZW5kUm91dGVTZWdtZW50KHBhcmVudFVybDogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiByb3V0ZVNlZ21lbnQgPyBwYXJlbnRVcmwgKyAnLycgKyByb3V0ZVNlZ21lbnQgOiBwYXJlbnRVcmw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVMZXZlbHMobm9kZXM6IEFycmF5PE5hdmlnYXRpb25Ob2RlPiwgcGFyZW50TGV2ZWw/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHBhcmVudExldmVsID09PSBudWxsIHx8IHBhcmVudExldmVsID09PSB1bmRlZmluZWQgPyAwIDogcGFyZW50TGV2ZWwgKyAxO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgbm9kZS5sZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGV2ZWxzKG5vZGUuY2hpbGRyZW4sIGN1cnJlbnRMZXZlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fY29uZmlnLmdldFZpZXdCeVBhdGgodGhpcy52aWV3UGF0aCk7XG4gICAgICAgIGlmICh2aWV3ICYmIHZpZXcuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKHZpZXcuY2hpbGRyZW4sIHRoaXMucGFyZW50VXJsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc29sdmVMZXZlbHModGhpcy5kYXRhU291cmNlLmRhdGEpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -171,8 +171,8 @@ export class UriService {
|
|
|
171
171
|
if (!node)
|
|
172
172
|
node = this.activeNode;
|
|
173
173
|
const lastDelimiter = node.uriPath.lastIndexOf('/');
|
|
174
|
-
if (lastDelimiter ===
|
|
175
|
-
return '
|
|
174
|
+
if (lastDelimiter === 0)
|
|
175
|
+
return '/';
|
|
176
176
|
return node.uriPath.substring(0, lastDelimiter);
|
|
177
177
|
}
|
|
178
178
|
splitNodePath(node) {
|
|
@@ -215,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
215
215
|
type: Inject,
|
|
216
216
|
args: [NAE_URI_NODE_CASES_PAGE_SIZE]
|
|
217
217
|
}] }]; } });
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL25hdmlnYXRpb24vc2VydmljZS91cmkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFNL0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7QUFJaEY7O0tBRUs7QUFJTCxNQUFNLE9BQU8sVUFBVTtJQVFuQixZQUFzQixPQUFzQixFQUN0QixnQkFBb0MsRUFDcEMsb0JBQXlDLEVBQ3pDLG1CQUF1QyxFQUNXLFFBQXlCO1FBSjNFLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNwQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDVyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUM3RixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFD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QjtRQUNqRCxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN0QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssY0FBYyxDQUFDLElBQXFCO1FBQ3hDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTztZQUM5QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztBQS9NYyxlQUFJLEdBQVcsTUFBTyxDQUFBO3dHQUY1QixVQUFVLHNKQVlhLDRCQUE0Qjs0R0FabkQsVUFBVSxjQUZQLE1BQU07NEZBRVQsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQWFnQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Nhc2VTZWFyY2hSZXF1ZXN0Qm9keSwgUGV0cmlOZXRTZWFyY2hSZXF1ZXN0fSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL2Nhc2Utc2VhcmNoLXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7QWN0aXZlR3JvdXBTZXJ2aWNlfSBmcm9tICcuLi8uLi9ncm91cHMvc2VydmljZXMvYWN0aXZlLWdyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0Nhc2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvY2FzZSc7XG5pbXBvcnQge1BhZ2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvcGFnZSc7XG5pbXBvcnQge0xvYWRpbmdFbWl0dGVyfSBmcm9tICcuLi8uLi91dGlsaXR5L2xvYWRpbmctZW1pdHRlcic7XG5pbXBvcnQge1BhZ2luYXRpb25QYXJhbXN9IGZyb20gJy4uLy4uL3V0aWxpdHkvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLXBhcmFtcyc7XG5pbXBvcnQge05BRV9VUklfTk9ERV9DQVNFU19QQUdFX1NJWkV9IGZyb20gJy4uL21vZGVsL3NpemUtbWVudS1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtVcmlOb2RlUmVzb3VyY2V9IGZyb20gJy4uL21vZGVsL3VyaS1yZXNvdXJjZSc7XG5pbXBvcnQge1VyaVJlc291cmNlU2VydmljZX0gZnJvbSAnLi91cmktcmVzb3VyY2Uuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljZSBmb3IgbWFuYWdpbmcgVVJJc1xuICogKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFVyaVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgUk9PVDogc3RyaW5nID0gJ3Jvb3QnO1xuICAgIHByaXZhdGUgX3Jvb3ROb2RlOiBVcmlOb2RlUmVzb3VyY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcm9vdExvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZlTm9kZSQ6IEJlaGF2aW9yU3ViamVjdDxVcmlOb2RlUmVzb3VyY2U+O1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9sb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9yZXNvdXJjZVNlcnZpY2U6IFVyaVJlc291cmNlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2Nhc2VSZXNvdXJjZVNlcnZpY2U6IENhc2VSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmVHcm91cFNlcnZpY2U6IEFjdGl2ZUdyb3VwU2VydmljZSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9VUklfTk9ERV9DQVNFU19QQUdFX1NJWkUpIHByb3RlY3RlZCBwYWdlU2l6ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICAgIGlmICghcGFnZVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemUgPSAyMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFyc2VJbnQodGhpcy5wYWdlU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckID0gbmV3IExvYWRpbmdFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX3BhcmVudExvYWRpbmckID0gbmV3IExvYWRpbmdFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZU5vZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcmlOb2RlUmVzb3VyY2U+KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMubG9hZFJvb3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3Jvb3RMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9wYXJlbnRMb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm9vdCgpOiBVcmlOb2RlUmVzb3VyY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdE5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb290TG9hZGVkJCgpOiBMb2FkaW5nRW1pdHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290TG9hZGluZyQ7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUm9vdChub2RlOiBVcmlOb2RlUmVzb3VyY2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuaWQgPT09IHRoaXMuX3Jvb3ROb2RlLmlkICYmIG5vZGUudXJpUGF0aCA9PT0gdGhpcy5fcm9vdE5vZGUudXJpUGF0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZU5vZGUoKTogVXJpTm9kZVJlc291cmNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5vZGUkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhY3RpdmVOb2RlKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCAmJiAhbm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudElkID09PSB0aGlzLl9yb290Tm9kZS5pZCkge1xuICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gdGhpcy5fcm9vdE5vZGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudExvYWRpbmckLm9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXROb2RlQnlQYXRoKHRoaXMucmVzb2x2ZVBhcmVudFBhdGgobm9kZSkpLnN1YnNjcmliZShuID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSAhbiA/IHRoaXMuX3Jvb3ROb2RlIDogbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRMb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlJC5uZXh0KG5vZGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTm9kZSQoKTogT2JzZXJ2YWJsZTxVcmlOb2RlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5vZGUkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFyZW50Tm9kZUxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50TG9hZGluZyQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyByb290IElEIGludG8gdmFyaWFibGUuXG4gICAgICogV2hlbiByb290IG5vZGUgaXMgbG9hZGVkIGFuZCBhY3RpdmUgbm9kZSBpcyBub3Qgc2V0IHlldCB0aGUgcm9vdCBub2RlIGlzIHNldCBhcyBhY3RpdmUgbm9kZVxuICAgICAqICovXG4gICAgcHJpdmF0ZSBsb2FkUm9vdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckLm9uKCk7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU2VydmljZS5nZXRSb290KCkuc3Vic2NyaWJlKG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCEhbm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlID0gbm9kZTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB0aGlzLl9yb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9yb290TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLl9yb290TG9hZGluZyQub2ZmKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldCgpOiBVcmlOb2RlUmVzb3VyY2Uge1xuICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB0aGlzLl9yb290Tm9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3ROb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB1cmkgbm9kZSBieSB1cmkgcGF0aC5cbiAgICAgKiBAcGFyYW0gcGF0aFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROb2RlQnlQYXRoKHBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8VXJpTm9kZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVNlcnZpY2UuZ2V0Tm9kZUJ5VXJpKHBhdGgpLnBpcGUoXG4gICAgICAgICAgICBtYXAobiA9PiB0aGlzLmNhcGl0YWxpemVOYW1lKG4pKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2hpbGQgbm9kZXMgb2YgcHJvdmlkZXMgbm9kZS5cbiAgICAgKiBAcGFyYW0gbm9kZSBwYXJlbnQgbm9kZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDaGlsZE5vZGVzKG5vZGU/OiBVcmlOb2RlUmVzb3VyY2UpOiBPYnNlcnZhYmxlPEFycmF5PFVyaU5vZGVSZXNvdXJjZT4+IHtcbiAgICAgICAgaWYgKCFub2RlKSBub2RlID0gdGhpcy5hY3RpdmVOb2RlO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTZXJ2aWNlLmdldE5vZGVzQnlQYXJlbnQobm9kZS5pZCkucGlwZShcbiAgICAgICAgICAgIG1hcChub2RlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXBpdGFsaXplTmFtZXMobm9kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjYXNlcyB1bmRlciB1cmkgbm9kZVxuICAgICAqIEBwYXJhbSBub2RlIHBhcmVudCBub2RlIG9mIGNhc2VzXG4gICAgICogQHBhcmFtIHByb2Nlc3NJZGVudGlmaWVycyBvcHRpb25hbCBzZWFyY2ggZmlsdGVyIGZvciBwcm9jZXNzIGlkZW50aWZpZXIgdG8gZ2V0IG9ubHkgY2FzZXMgZnJvbSB0aGUgcHJvY2Vzc1xuICAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIG9wdGlvbmFsIHBhcmFtZXRlciBmb3IgbG9hZCBwYWdlIG9uIHRoZSBpbmRleC4gRGVmYXVsdCB2YWx1ZSBpcyAwICh0aGUgZmlyc3QgcGFnZSkuXG4gICAgICogQHBhcmFtIHBhZ2VTaXplIG9wdGlvbmFsIHBhcmFtZXRlciBmb3IgbG9hZGVkIHBhZ2Ugc2l6ZS4gRGVmYXVsdHMgdG8gdmFsdWUgb2YgaW5qZWN0aW9uIHRva2VuIFVSSV9OT0RFX0NBU0VTX1BBR0VfU0laRSBvciB0byB2YWx1ZSBcIjIwXCIuXG4gICAgICovXG4gICAgcHVibGljIGdldENhc2VzT2ZOb2RlKG5vZGU/OiBVcmlOb2RlUmVzb3VyY2UsIHByb2Nlc3NJZGVudGlmaWVycz86IEFycmF5PHN0cmluZz4sIHBhZ2VOdW1iZXI6IG51bWJlciA9IDAsIHBhZ2VTaXplOiBzdHJpbmcgfCBudW1iZXIgPSB0aGlzLnBhZ2VTaXplKTogT2JzZXJ2YWJsZTxQYWdlPENhc2U+PiB7XG4gICAgICAgIGlmICghbm9kZSkgbm9kZSA9IHRoaXMuYWN0aXZlTm9kZTtcbiAgICAgICAgY29uc3Qgc2VhcmNoQm9keTogQ2FzZVNlYXJjaFJlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgICAgdXJpTm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoISFwcm9jZXNzSWRlbnRpZmllcnMpIHtcbiAgICAgICAgICAgIHNlYXJjaEJvZHkucHJvY2VzcyA9IHByb2Nlc3NJZGVudGlmaWVycy5tYXAoaWQgPT4gKHtpZGVudGlmaWVyOiBpZH0gYXMgUGV0cmlOZXRTZWFyY2hSZXF1ZXN0KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBhY3RpdmUgZ3JvdXAgaXMgYnJva2VuIGEgZ2l2ZW4gdGhlIHdyb25nIGlkXG4gICAgICAgIC8vIGlmICghIXRoaXMuX2FjdGl2ZUdyb3VwU2VydmljZS5hY3RpdmVHcm91cCkge1xuICAgICAgICAvLyAgICAgc2VhcmNoQm9keS5kYXRhID0ge307XG4gICAgICAgIC8vICAgICBzZWFyY2hCb2R5LmRhdGFbJ3BhcmVudElkJ10gPSB0aGlzLl9hY3RpdmVHcm91cFNlcnZpY2UuYWN0aXZlR3JvdXAuc3RyaW5nSWQ7XG4gICAgICAgIC8vIH1cbiAgICAgICAgbGV0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgICAgICAuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9TSVpFLCBwYWdlU2l6ZSlcbiAgICAgICAgICAgIC5zZXQoUGFnaW5hdGlvblBhcmFtcy5QQUdFX05VTUJFUiwgcGFnZU51bWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLnNlYXJjaENhc2VzKFNpbXBsZUZpbHRlci5mcm9tQ2FzZVF1ZXJ5KHNlYXJjaEJvZHkpLCBodHRwUGFyYW1zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2libGluZ3Mgbm9kZSBvZiB0aGUgcHJvdmlkZWQgbm9kZVxuICAgICAqIEBwYXJhbSBub2RlIHNpYmxpbmdzIG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2libGluZ3NPZk5vZGUobm9kZT86IFVyaU5vZGVSZXNvdXJjZSk6IE9ic2VydmFibGU8QXJyYXk8VXJpTm9kZVJlc291cmNlPj4ge1xuICAgICAgICBpZiAoIW5vZGUpIG5vZGUgPSB0aGlzLmFjdGl2ZU5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVNlcnZpY2UuZ2V0Tm9kZXNCeVBhcmVudChub2RlLnBhcmVudElkKS5waXBlKFxuICAgICAgICAgICAgbWFwKG5vZGVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcGl0YWxpemVOYW1lcyhub2Rlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG5vZGVzIG9uIHRoZSBzYW1lIHVyaSBsZXZlbCBzdGFydGluZyBmcm9tIDAuIFJvb3Qgbm9kZSBpcyBubyAwIGxldmVsLlxuICAgICAqIEBwYXJhbSBsZXZlbFxuICAgICAqIEBwYXJhbSBwYXJlbnQgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIGZpbHRlciBub2RlcyB3aXRoIGNvbW1vbiBwYXJlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm9kZXNPbkxldmVsKGxldmVsOiBudW1iZXIsIHBhcmVudD86IFVyaU5vZGVSZXNvdXJjZSk6IE9ic2VydmFibGU8QXJyYXk8VXJpTm9kZVJlc291cmNlPj4ge1xuICAgICAgICBpZiAobGV2ZWwgPT09IDApIHJldHVybiBvZihbdGhpcy5yb290XSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVNlcnZpY2UuZ2V0QnlMZXZlbChsZXZlbCkucGlwZShcbiAgICAgICAgICAgIG1hcChub2RlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnMgPSAhIXBhcmVudD8uaWQgPyBub2Rlcy5maWx0ZXIobiA9PiBuLnBhcmVudElkID09PSBwYXJlbnQuaWQpIDogbm9kZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXBpdGFsaXplTmFtZXMobnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBucztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlUGFyZW50UGF0aChub2RlPzogVXJpTm9kZVJlc291cmNlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFub2RlKSBub2RlID0gdGhpcy5hY3RpdmVOb2RlO1xuICAgICAgICBjb25zdCBsYXN0RGVsaW1pdGVyID0gbm9kZS51cmlQYXRoLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICAgIGlmIChsYXN0RGVsaW1pdGVyID09PSAtMSkgcmV0dXJuICdyb290JztcbiAgICAgICAgcmV0dXJuIG5vZGUudXJpUGF0aC5zdWJzdHJpbmcoMCwgbGFzdERlbGltaXRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNwbGl0Tm9kZVBhdGgobm9kZTogVXJpTm9kZVJlc291cmNlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBub2RlPy51cmlQYXRoLnNwbGl0KCcvJykuZmlsdGVyKHMgPT4gcyAhPT0gVXJpU2VydmljZS5ST09UKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhcGl0YWxpemVOYW1lcyhub2RlczogQXJyYXk8VXJpTm9kZVJlc291cmNlPikge1xuICAgICAgICBpZiAoIShub2RlcyBpbnN0YW5jZW9mIEFycmF5KSkgcmV0dXJuO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG4gPT4gdGhpcy5jYXBpdGFsaXplTmFtZShuKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIC9uZXRncmlmL25hZV9zeXN0ZW0vcHJvY2Vzc2VzLy4uLiA9PiBOZXRncmlmIC0+IE5hZSBTeXN0ZW1zIC0+IFByb2Nlc3Nlc1xuICAgICAqIEBwYXJhbSBub2RlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhcGl0YWxpemVOYW1lKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICBsZXQgcGFydHMgPSBub2RlLm5hbWUuc3BsaXQoJ18nKTtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5tYXAocCA9PiB7XG4gICAgICAgICAgICBpZiAocCA9PT0gdW5kZWZpbmVkIHx8IHAubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBpZiAocC5sZW5ndGggPT09IDEpIHJldHVybiBwLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHAuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgbm9kZS5uYW1lID0gcGFydHMuam9pbignICcpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG59XG4iXX0=
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL25hdmlnYXRpb24vc2VydmljZS91cmkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFNL0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7QUFJaEY7O0tBRUs7QUFJTCxNQUFNLE9BQU8sVUFBVTtJQVFuQixZQUFzQixPQUFzQixFQUN0QixnQkFBb0MsRUFDcEMsb0JBQXlDLEVBQ3pDLG1CQUF1QyxFQUNXLFFBQXlCO1FBSjNFLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNwQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDVyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUM3RixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFD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akQsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDdEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGNBQWMsQ0FBQyxJQUFxQjtRQUN4QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU87WUFDOUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0MsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7QUEvTWMsZUFBSSxHQUFXLE1BQU8sQ0FBQTt3R0FGNUIsVUFBVSxzSkFZYSw0QkFBNEI7NEdBWm5ELFVBQVUsY0FGUCxNQUFNOzRGQUVULFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFhZ0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDYXNlU2VhcmNoUmVxdWVzdEJvZHksIFBldHJpTmV0U2VhcmNoUmVxdWVzdH0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9jYXNlLXNlYXJjaC1yZXF1ZXN0LWJvZHknO1xuaW1wb3J0IHtTaW1wbGVGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvc2ltcGxlLWZpbHRlcic7XG5pbXBvcnQge0FjdGl2ZUdyb3VwU2VydmljZX0gZnJvbSAnLi4vLi4vZ3JvdXBzL3NlcnZpY2VzL2FjdGl2ZS1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7Q2FzZVJlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9jYXNlLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtQYWdlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL3BhZ2UnO1xuaW1wb3J0IHtMb2FkaW5nRW1pdHRlcn0gZnJvbSAnLi4vLi4vdXRpbGl0eS9sb2FkaW5nLWVtaXR0ZXInO1xuaW1wb3J0IHtQYWdpbmF0aW9uUGFyYW1zfSBmcm9tICcuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnaW5hdGlvbi1wYXJhbXMnO1xuaW1wb3J0IHtOQUVfVVJJX05PREVfQ0FTRVNfUEFHRV9TSVpFfSBmcm9tICcuLi9tb2RlbC9zaXplLW1lbnUtaW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7VXJpTm9kZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC91cmktcmVzb3VyY2UnO1xuaW1wb3J0IHtVcmlSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4vdXJpLXJlc291cmNlLnNlcnZpY2UnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIG1hbmFnaW5nIFVSSXNcbiAqICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBVcmlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHByaXZhdGUgc3RhdGljIFJPT1Q6IHN0cmluZyA9ICdyb290JztcbiAgICBwcml2YXRlIF9yb290Tm9kZTogVXJpTm9kZVJlc291cmNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jvb3RMb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50TG9hZGluZyQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZU5vZGUkOiBCZWhhdmlvclN1YmplY3Q8VXJpTm9kZVJlc291cmNlPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfcmVzb3VyY2VTZXJ2aWNlOiBVcmlSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZlR3JvdXBTZXJ2aWNlOiBBY3RpdmVHcm91cFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChOQUVfVVJJX05PREVfQ0FTRVNfUEFHRV9TSVpFKSBwcm90ZWN0ZWQgcGFnZVNpemU6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICBpZiAoIXBhZ2VTaXplKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gMjA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2VTaXplID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHBhcnNlSW50KHRoaXMucGFnZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jvb3RMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9wYXJlbnRMb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcigpO1xuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXJpTm9kZVJlc291cmNlPih1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmxvYWRSb290KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9yb290TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fcGFyZW50TG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlTm9kZSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvb3QoKTogVXJpTm9kZVJlc291cmNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3ROb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm9vdExvYWRlZCQoKTogTG9hZGluZ0VtaXR0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdExvYWRpbmckO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Jvb3Qobm9kZTogVXJpTm9kZVJlc291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBub2RlLmlkID09PSB0aGlzLl9yb290Tm9kZS5pZCAmJiBub2RlLnVyaVBhdGggPT09IHRoaXMuX3Jvb3ROb2RlLnVyaVBhdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVOb2RlKCk6IFVyaU5vZGVSZXNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVOb2RlJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYWN0aXZlTm9kZShub2RlOiBVcmlOb2RlUmVzb3VyY2UpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50SWQgJiYgIW5vZGUucGFyZW50KSB7XG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnRJZCA9PT0gdGhpcy5fcm9vdE5vZGUuaWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHRoaXMuX3Jvb3ROb2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRMb2FkaW5nJC5vbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm9kZUJ5UGF0aCh0aGlzLnJlc29sdmVQYXJlbnRQYXRoKG5vZGUpKS5zdWJzY3JpYmUobiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gIW4gPyB0aGlzLl9yb290Tm9kZSA6IG47XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudExvYWRpbmckLm9mZigpO1xuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50TG9hZGluZyQub2ZmKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWN0aXZlTm9kZSQubmV4dChub2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZU5vZGUkKCk6IE9ic2VydmFibGU8VXJpTm9kZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVOb2RlJDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudE5vZGVMb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudExvYWRpbmckO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgcm9vdCBJRCBpbnRvIHZhcmlhYmxlLlxuICAgICAqIFdoZW4gcm9vdCBub2RlIGlzIGxvYWRlZCBhbmQgYWN0aXZlIG5vZGUgaXMgbm90IHNldCB5ZXQgdGhlIHJvb3Qgbm9kZSBpcyBzZXQgYXMgYWN0aXZlIG5vZGVcbiAgICAgKiAqL1xuICAgIHByaXZhdGUgbG9hZFJvb3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jvb3RMb2FkaW5nJC5vbigpO1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVNlcnZpY2UuZ2V0Um9vdCgpLnN1YnNjcmliZShub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghIW5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb290Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5fcm9vdE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fcm9vdExvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKTogVXJpTm9kZVJlc291cmNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5fcm9vdE5vZGU7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdXJpIG5vZGUgYnkgdXJpIHBhdGguXG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm9kZUJ5UGF0aChwYXRoOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVyaU5vZGVSZXNvdXJjZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTZXJ2aWNlLmdldE5vZGVCeVVyaShwYXRoKS5waXBlKFxuICAgICAgICAgICAgbWFwKG4gPT4gdGhpcy5jYXBpdGFsaXplTmFtZShuKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNoaWxkIG5vZGVzIG9mIHByb3ZpZGVzIG5vZGUuXG4gICAgICogQHBhcmFtIG5vZGUgcGFyZW50IG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2hpbGROb2Rlcyhub2RlPzogVXJpTm9kZVJlc291cmNlKTogT2JzZXJ2YWJsZTxBcnJheTxVcmlOb2RlUmVzb3VyY2U+PiB7XG4gICAgICAgIGlmICghbm9kZSkgbm9kZSA9IHRoaXMuYWN0aXZlTm9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU2VydmljZS5nZXROb2Rlc0J5UGFyZW50KG5vZGUuaWQpLnBpcGUoXG4gICAgICAgICAgICBtYXAobm9kZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FwaXRhbGl6ZU5hbWVzKG5vZGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2FzZXMgdW5kZXIgdXJpIG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZSBwYXJlbnQgbm9kZSBvZiBjYXNlc1xuICAgICAqIEBwYXJhbSBwcm9jZXNzSWRlbnRpZmllcnMgb3B0aW9uYWwgc2VhcmNoIGZpbHRlciBmb3IgcHJvY2VzcyBpZGVudGlmaWVyIHRvIGdldCBvbmx5IGNhc2VzIGZyb20gdGhlIHByb2Nlc3NcbiAgICAgKiBAcGFyYW0gcGFnZU51bWJlciBvcHRpb25hbCBwYXJhbWV0ZXIgZm9yIGxvYWQgcGFnZSBvbiB0aGUgaW5kZXguIERlZmF1bHQgdmFsdWUgaXMgMCAodGhlIGZpcnN0IHBhZ2UpLlxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBvcHRpb25hbCBwYXJhbWV0ZXIgZm9yIGxvYWRlZCBwYWdlIHNpemUuIERlZmF1bHRzIHRvIHZhbHVlIG9mIGluamVjdGlvbiB0b2tlbiBVUklfTk9ERV9DQVNFU19QQUdFX1NJWkUgb3IgdG8gdmFsdWUgXCIyMFwiLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXNlc09mTm9kZShub2RlPzogVXJpTm9kZVJlc291cmNlLCBwcm9jZXNzSWRlbnRpZmllcnM/OiBBcnJheTxzdHJpbmc+LCBwYWdlTnVtYmVyOiBudW1iZXIgPSAwLCBwYWdlU2l6ZTogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5wYWdlU2l6ZSk6IE9ic2VydmFibGU8UGFnZTxDYXNlPj4ge1xuICAgICAgICBpZiAoIW5vZGUpIG5vZGUgPSB0aGlzLmFjdGl2ZU5vZGU7XG4gICAgICAgIGNvbnN0IHNlYXJjaEJvZHk6IENhc2VTZWFyY2hSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHVyaU5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCEhcHJvY2Vzc0lkZW50aWZpZXJzKSB7XG4gICAgICAgICAgICBzZWFyY2hCb2R5LnByb2Nlc3MgPSBwcm9jZXNzSWRlbnRpZmllcnMubWFwKGlkID0+ICh7aWRlbnRpZmllcjogaWR9IGFzIFBldHJpTmV0U2VhcmNoUmVxdWVzdCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gYWN0aXZlIGdyb3VwIGlzIGJyb2tlbiBhIGdpdmVuIHRoZSB3cm9uZyBpZFxuICAgICAgICAvLyBpZiAoISF0aGlzLl9hY3RpdmVHcm91cFNlcnZpY2UuYWN0aXZlR3JvdXApIHtcbiAgICAgICAgLy8gICAgIHNlYXJjaEJvZHkuZGF0YSA9IHt9O1xuICAgICAgICAvLyAgICAgc2VhcmNoQm9keS5kYXRhWydwYXJlbnRJZCddID0gdGhpcy5fYWN0aXZlR3JvdXBTZXJ2aWNlLmFjdGl2ZUdyb3VwLnN0cmluZ0lkO1xuICAgICAgICAvLyB9XG4gICAgICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgICAgICAgLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgcGFnZVNpemUpXG4gICAgICAgICAgICAuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9OVU1CRVIsIHBhZ2VOdW1iZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FzZVJlc291cmNlU2VydmljZS5zZWFyY2hDYXNlcyhTaW1wbGVGaWx0ZXIuZnJvbUNhc2VRdWVyeShzZWFyY2hCb2R5KSwgaHR0cFBhcmFtcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNpYmxpbmdzIG5vZGUgb2YgdGhlIHByb3ZpZGVkIG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZSBzaWJsaW5ncyBub2RlXG4gICAgICovXG4gICAgcHVibGljIGdldFNpYmxpbmdzT2ZOb2RlKG5vZGU/OiBVcmlOb2RlUmVzb3VyY2UpOiBPYnNlcnZhYmxlPEFycmF5PFVyaU5vZGVSZXNvdXJjZT4+IHtcbiAgICAgICAgaWYgKCFub2RlKSBub2RlID0gdGhpcy5hY3RpdmVOb2RlO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTZXJ2aWNlLmdldE5vZGVzQnlQYXJlbnQobm9kZS5wYXJlbnRJZCkucGlwZShcbiAgICAgICAgICAgIG1hcChub2RlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXBpdGFsaXplTmFtZXMobm9kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBub2RlcyBvbiB0aGUgc2FtZSB1cmkgbGV2ZWwgc3RhcnRpbmcgZnJvbSAwLiBSb290IG5vZGUgaXMgbm8gMCBsZXZlbC5cbiAgICAgKiBAcGFyYW0gbGV2ZWxcbiAgICAgKiBAcGFyYW0gcGFyZW50IG9wdGlvbmFsIHBhcmFtZXRlciB0byBmaWx0ZXIgbm9kZXMgd2l0aCBjb21tb24gcGFyZW50XG4gICAgICovXG4gICAgcHVibGljIGdldE5vZGVzT25MZXZlbChsZXZlbDogbnVtYmVyLCBwYXJlbnQ/OiBVcmlOb2RlUmVzb3VyY2UpOiBPYnNlcnZhYmxlPEFycmF5PFVyaU5vZGVSZXNvdXJjZT4+IHtcbiAgICAgICAgaWYgKGxldmVsID09PSAwKSByZXR1cm4gb2YoW3RoaXMucm9vdF0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTZXJ2aWNlLmdldEJ5TGV2ZWwobGV2ZWwpLnBpcGUoXG4gICAgICAgICAgICBtYXAobm9kZXMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5zID0gISFwYXJlbnQ/LmlkID8gbm9kZXMuZmlsdGVyKG4gPT4gbi5wYXJlbnRJZCA9PT0gcGFyZW50LmlkKSA6IG5vZGVzO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FwaXRhbGl6ZU5hbWVzKG5zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzb2x2ZVBhcmVudFBhdGgobm9kZT86IFVyaU5vZGVSZXNvdXJjZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghbm9kZSkgbm9kZSA9IHRoaXMuYWN0aXZlTm9kZTtcbiAgICAgICAgY29uc3QgbGFzdERlbGltaXRlciA9IG5vZGUudXJpUGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgICBpZiAobGFzdERlbGltaXRlciA9PT0gMCkgcmV0dXJuICcvJztcbiAgICAgICAgcmV0dXJuIG5vZGUudXJpUGF0aC5zdWJzdHJpbmcoMCwgbGFzdERlbGltaXRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNwbGl0Tm9kZVBhdGgobm9kZTogVXJpTm9kZVJlc291cmNlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBub2RlPy51cmlQYXRoLnNwbGl0KCcvJykuZmlsdGVyKHMgPT4gcyAhPT0gVXJpU2VydmljZS5ST09UKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhcGl0YWxpemVOYW1lcyhub2RlczogQXJyYXk8VXJpTm9kZVJlc291cmNlPikge1xuICAgICAgICBpZiAoIShub2RlcyBpbnN0YW5jZW9mIEFycmF5KSkgcmV0dXJuO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG4gPT4gdGhpcy5jYXBpdGFsaXplTmFtZShuKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIC9uZXRncmlmL25hZV9zeXN0ZW0vcHJvY2Vzc2VzLy4uLiA9PiBOZXRncmlmIC0+IE5hZSBTeXN0ZW1zIC0+IFByb2Nlc3Nlc1xuICAgICAqIEBwYXJhbSBub2RlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhcGl0YWxpemVOYW1lKG5vZGU6IFVyaU5vZGVSZXNvdXJjZSkge1xuICAgICAgICBsZXQgcGFydHMgPSBub2RlLm5hbWUuc3BsaXQoJ18nKTtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5tYXAocCA9PiB7XG4gICAgICAgICAgICBpZiAocCA9PT0gdW5kZWZpbmVkIHx8IHAubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBpZiAocC5sZW5ndGggPT09IDEpIHJldHVybiBwLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHAuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgbm9kZS5uYW1lID0gcGFydHMuam9pbignICcpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -4,21 +4,45 @@ import { getFieldFromDataGroups, getFieldIndexFromDataGroups } from '../../utili
|
|
|
4
4
|
import { UserFilterConstants } from '../../filter/models/user-filter-constants';
|
|
5
5
|
import { TextField } from '../../data-fields/text-field/models/text-field';
|
|
6
6
|
import { MergeOperator } from '../../filter/models/merge-operator';
|
|
7
|
+
import { GroupNavigationConstants } from "../model/group-navigation-constants";
|
|
8
|
+
import { navigationItemTaskAllowedNetsServiceFactory } from "../../allowed-nets/services/factory/allowed-nets-service-factory";
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
10
|
import * as i1 from "../../filter/filter.repository";
|
|
9
11
|
import * as i2 from "../../resources/engine-endpoint/task-resource.service";
|
|
10
|
-
import * as i3 from "../../
|
|
12
|
+
import * as i3 from "../../allowed-nets/services/factory/allowed-nets-service-factory";
|
|
13
|
+
import * as i4 from "../../allowed-nets/services/base-allowed-nets.service";
|
|
14
|
+
import * as i5 from "../../logger/services/logger.service";
|
|
11
15
|
/**
|
|
12
16
|
* This service is able to load the full saved filter including all of its ancestor filters.
|
|
13
17
|
*/
|
|
14
18
|
export class FilterExtractionService {
|
|
15
|
-
constructor(_filterRepository, _taskResourceService, _log) {
|
|
19
|
+
constructor(_filterRepository, _taskResourceService, _factory, baseAllowedNets, _log) {
|
|
16
20
|
this._filterRepository = _filterRepository;
|
|
17
21
|
this._taskResourceService = _taskResourceService;
|
|
22
|
+
this._factory = _factory;
|
|
23
|
+
this.baseAllowedNets = baseAllowedNets;
|
|
18
24
|
this._log = _log;
|
|
19
25
|
}
|
|
20
|
-
|
|
21
|
-
const
|
|
26
|
+
extractAdditionalFilterAllowedNets(dataSection) {
|
|
27
|
+
const taskRefIndex = getFieldIndexFromDataGroups(dataSection, GroupNavigationConstants.ITEM_FIELD_ID_ADDITIONAL_FILTER_TASKREF);
|
|
28
|
+
if (taskRefIndex === undefined) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const sliced = dataSection.slice(taskRefIndex.dataGroupIndex + 1);
|
|
32
|
+
if (sliced.length == 0) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
return navigationItemTaskAllowedNetsServiceFactory(this._factory, this.baseAllowedNets, sliced);
|
|
36
|
+
}
|
|
37
|
+
extractCompleteAdditionalFilterFromData(dataSection) {
|
|
38
|
+
const taskRefIndex = getFieldIndexFromDataGroups(dataSection, GroupNavigationConstants.ITEM_FIELD_ID_ADDITIONAL_FILTER_TASKREF);
|
|
39
|
+
if (taskRefIndex === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
return this.extractCompleteFilterFromData(dataSection.slice(taskRefIndex.dataGroupIndex + 1));
|
|
43
|
+
}
|
|
44
|
+
extractCompleteFilterFromData(dataSection, fieldId = UserFilterConstants.FILTER_FIELD_ID) {
|
|
45
|
+
const filterIndex = getFieldIndexFromDataGroups(dataSection, fieldId);
|
|
22
46
|
if (filterIndex === undefined) {
|
|
23
47
|
return undefined;
|
|
24
48
|
}
|
|
@@ -30,7 +54,7 @@ export class FilterExtractionService {
|
|
|
30
54
|
throw new Error('Filter segment could not be extracted from filter field');
|
|
31
55
|
}
|
|
32
56
|
const parentFilter = this.extractCompleteFilterFromData(dataSection.slice(filterIndex.dataGroupIndex + 1));
|
|
33
|
-
if (parentFilter !== undefined) {
|
|
57
|
+
if (parentFilter !== undefined && parentFilter.type === filterSegment.type) {
|
|
34
58
|
return filterSegment.merge(parentFilter, MergeOperator.AND);
|
|
35
59
|
}
|
|
36
60
|
// Is the filter view rooted?
|
|
@@ -62,14 +86,14 @@ export class FilterExtractionService {
|
|
|
62
86
|
return appOriginFilter;
|
|
63
87
|
}
|
|
64
88
|
}
|
|
65
|
-
// the same
|
|
89
|
+
// the same regex is used in a backend filter process action. Please keep them in sync
|
|
66
90
|
FilterExtractionService.UNTABBED_VIEW_ID_EXTRACTOR = '^.*?(-\\d+)?$';
|
|
67
|
-
FilterExtractionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, deps: [{ token: i1.FilterRepository }, { token: i2.TaskResourceService }, { token: i3.LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
91
|
+
FilterExtractionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, deps: [{ token: i1.FilterRepository }, { token: i2.TaskResourceService }, { token: i3.AllowedNetsServiceFactory }, { token: i4.BaseAllowedNetsService }, { token: i5.LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
68
92
|
FilterExtractionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, providedIn: 'root' });
|
|
69
93
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterExtractionService, decorators: [{
|
|
70
94
|
type: Injectable,
|
|
71
95
|
args: [{
|
|
72
96
|
providedIn: 'root'
|
|
73
97
|
}]
|
|
74
|
-
}], ctorParameters: function () { return [{ type: i1.FilterRepository }, { type: i2.TaskResourceService }, { type: i3.LoggerService }]; } });
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWV4dHJhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvbmF2aWdhdGlvbi91dGlsaXR5L2ZpbHRlci1leHRyYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRixPQUFPLEVBQUMsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUU5RSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFFekUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9DQUFvQyxDQUFDOzs7OztBQUtqRTs7R0FFRztBQUlILE1BQU0sT0FBTyx1QkFBdUI7SUFLaEMsWUFBc0IsaUJBQW1DLEVBQ25DLG9CQUF5QyxFQUN6QyxJQUFtQjtRQUZuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsU0FBSSxHQUFKLElBQUksQ0FBZTtJQUN6QyxDQUFDO0lBRU0sNkJBQTZCLENBQUMsV0FBNkI7UUFDOUQsTUFBTSxXQUFXLEdBQUcsMkJBQTJCLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWxHLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtZQUMzQixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELElBQUksYUFBcUIsQ0FBQztRQUMxQixJQUFJO1lBQ0EsYUFBYSxHQUFHLDRCQUE0QixDQUN4QyxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFnQixDQUN4RixDQUFDO1NBQ0w7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztTQUM5RTtRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDNUIsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0Q7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDekcsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQy9CLE9BQU8sYUFBYSxDQUFDO1NBQ3hCO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9ELElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUM5QixPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqRTtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxpQkFBaUM7UUFDekQsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLGlCQUFpQixZQUFZLFNBQVMsQ0FBQyxFQUFFO1lBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztTQUM1RTtRQUNELE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUU3QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDckYsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUMxRjtRQUNELE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDL0UsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxvQkFBb0IsaUNBQWlDLENBQUMsQ0FBQztZQUN4SCxPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUNELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7O0FBNURELHVGQUF1RjtBQUM3RCxrREFBMEIsR0FBRyxlQUFnQixDQUFBO3FIQUg5RCx1QkFBdUI7eUhBQXZCLHVCQUF1QixjQUZwQixNQUFNOzRGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyJztcbmltcG9ydCB7RGF0YUdyb3VwfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2RhdGEtZ3JvdXBzJztcbmltcG9ydCB7ZXh0cmFjdEZpbHRlckZyb21GaWx0ZXJGaWVsZH0gZnJvbSAnLi9uYXZpZ2F0aW9uLWl0ZW0tdGFzay11dGlsaXR5LW1ldGhvZHMnO1xuaW1wb3J0IHtnZXRGaWVsZEZyb21EYXRhR3JvdXBzLCBnZXRGaWVsZEluZGV4RnJvbURhdGFHcm91cHN9IGZyb20gJy4uLy4uL3V0aWxpdHkvZ2V0LWZpZWxkJztcbmltcG9ydCB7VXNlckZpbHRlckNvbnN0YW50c30gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy91c2VyLWZpbHRlci1jb25zdGFudHMnO1xuaW1wb3J0IHtGaWx0ZXJSZXBvc2l0b3J5fSBmcm9tICcuLi8uLi9maWx0ZXIvZmlsdGVyLnJlcG9zaXRvcnknO1xuaW1wb3J0IHtUZXh0RmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3RleHQtZmllbGQvbW9kZWxzL3RleHQtZmllbGQnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtNZXJnZU9wZXJhdG9yfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL21lcmdlLW9wZXJhdG9yJztcbmltcG9ydCB7VGFza1Jlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC90YXNrLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtGaWx0ZXJGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvZmlsdGVyLWZpZWxkL21vZGVscy9maWx0ZXItZmllbGQnO1xuaW1wb3J0IHtEYXRhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9hYnN0cmFjdC1kYXRhLWZpZWxkJztcblxuLyoqXG4gKiBUaGlzIHNlcnZpY2UgaXMgYWJsZSB0byBsb2FkIHRoZSBmdWxsIHNhdmVkIGZpbHRlciBpbmNsdWRpbmcgYWxsIG9mIGl0cyBhbmNlc3RvciBmaWx0ZXJzLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckV4dHJhY3Rpb25TZXJ2aWNlIHtcblxuICAgIC8vIHRoZSBzYW1lIHJlZ2V4cyBpcyB1c2VkIGluIGEgYmFja2VuZCBmaWx0ZXIgcHJvY2VzcyBhY3Rpb24uIFBsZWFzZSBrZWVwIHRoZW0gaW4gc3luY1xuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgVU5UQUJCRURfVklFV19JRF9FWFRSQUNUT1IgPSAnXi4qPygtXFxcXGQrKT8kJztcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfZmlsdGVyUmVwb3NpdG9yeTogRmlsdGVyUmVwb3NpdG9yeSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tSZXNvdXJjZVNlcnZpY2U6IFRhc2tSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXh0cmFjdENvbXBsZXRlRmlsdGVyRnJvbURhdGEoZGF0YVNlY3Rpb246IEFycmF5PERhdGFHcm91cD4pOiBGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJJbmRleCA9IGdldEZpZWxkSW5kZXhGcm9tRGF0YUdyb3VwcyhkYXRhU2VjdGlvbiwgVXNlckZpbHRlckNvbnN0YW50cy5GSUxURVJfRklFTERfSUQpO1xuXG4gICAgICAgIGlmIChmaWx0ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbHRlclNlZ21lbnQ6IEZpbHRlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZpbHRlclNlZ21lbnQgPSBleHRyYWN0RmlsdGVyRnJvbUZpbHRlckZpZWxkKFxuICAgICAgICAgICAgICAgIGRhdGFTZWN0aW9uW2ZpbHRlckluZGV4LmRhdGFHcm91cEluZGV4XS5maWVsZHNbZmlsdGVySW5kZXguZmllbGRJbmRleF0gYXMgRmlsdGVyRmllbGRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsdGVyIHNlZ21lbnQgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIGZpbHRlciBmaWVsZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50RmlsdGVyID0gdGhpcy5leHRyYWN0Q29tcGxldGVGaWx0ZXJGcm9tRGF0YShkYXRhU2VjdGlvbi5zbGljZShmaWx0ZXJJbmRleC5kYXRhR3JvdXBJbmRleCArIDEpKTtcblxuICAgICAgICBpZiAocGFyZW50RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJTZWdtZW50Lm1lcmdlKHBhcmVudEZpbHRlciwgTWVyZ2VPcGVyYXRvci5BTkQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSXMgdGhlIGZpbHRlciB2aWV3IHJvb3RlZD9cbiAgICAgICAgY29uc3Qgcm9vdFZpZXdJZEZpZWxkID0gZ2V0RmllbGRGcm9tRGF0YUdyb3VwcyhkYXRhU2VjdGlvbiwgVXNlckZpbHRlckNvbnN0YW50cy5PUklHSU5fVklFV19JRF9GSUVMRF9JRCk7XG4gICAgICAgIGlmIChyb290Vmlld0lkRmllbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb290Vmlld0ZpbHRlciA9IHRoaXMuZXh0cmFjdFZpZXdGaWx0ZXIocm9vdFZpZXdJZEZpZWxkKTtcbiAgICAgICAgaWYgKHJvb3RWaWV3RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJTZWdtZW50Lm1lcmdlKHJvb3RWaWV3RmlsdGVyLCBNZXJnZU9wZXJhdG9yLkFORCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlclNlZ21lbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RWaWV3RmlsdGVyKG9yaWdpblZpZXdJZEZpZWxkOiBEYXRhRmllbGQ8YW55Pik6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChvcmlnaW5WaWV3SWRGaWVsZCA9PT0gdW5kZWZpbmVkIHx8ICEob3JpZ2luVmlld0lkRmllbGQgaW5zdGFuY2VvZiBUZXh0RmllbGQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBleHRyYWN0IG9yaWdpbiB2aWV3IGlkIGZpZWxkIGZyb20gdGFzayBkYXRhJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ2luVmlld0lkID0gb3JpZ2luVmlld0lkRmllbGQudmFsdWU7XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSBvcmlnaW5WaWV3SWQubWF0Y2goRmlsdGVyRXh0cmFjdGlvblNlcnZpY2UuVU5UQUJCRURfVklFV19JRF9FWFRSQUNUT1IpO1xuICAgICAgICBpZiAobWF0Y2ggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzdGF0ZS4gVmlldyBJZCBvZiBvcmlnaW4gYXBwIHZpZXcgY291bGQgbm90IGJlIGV4dHJhY3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpblVudGFiYmVkVmlld0lkID0gb3JpZ2luVmlld0lkLnN1YnN0cmluZygwLCBvcmlnaW5WaWV3SWQubGVuZ3RoIC0gKG1hdGNoWzFdPy5sZW5ndGggPz8gMCkpO1xuICAgICAgICBjb25zdCBhcHBPcmlnaW5GaWx0ZXIgPSB0aGlzLl9maWx0ZXJSZXBvc2l0b3J5LmdldEZpbHRlcihvcmlnaW5VbnRhYmJlZFZpZXdJZCk7XG4gICAgICAgIGlmIChhcHBPcmlnaW5GaWx0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBDb3VsZCBub3QgcmV0cmlldmUgb3JpZ2luIGFwcCBmaWx0ZXIgd2l0aCBpZCAnJHtvcmlnaW5VbnRhYmJlZFZpZXdJZH0nLiBGYWxsaW5nIGJhY2sgdG8gZW1wdHkgZmlsdGVyYCk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBPcmlnaW5GaWx0ZXI7XG4gICAgfVxuXG59XG4iXX0=
|
|
98
|
+
}], ctorParameters: function () { return [{ type: i1.FilterRepository }, { type: i2.TaskResourceService }, { type: i3.AllowedNetsServiceFactory }, { type: i4.BaseAllowedNetsService }, { type: i5.LoggerService }]; } });
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWV4dHJhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvbmF2aWdhdGlvbi91dGlsaXR5L2ZpbHRlci1leHRyYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRixPQUFPLEVBQUMsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUU5RSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFFekUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBSWpFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBRTdFLE9BQU8sRUFFSCwyQ0FBMkMsRUFDOUMsTUFBTSxrRUFBa0UsQ0FBQzs7Ozs7OztBQUcxRTs7R0FFRztBQUlILE1BQU0sT0FBTyx1QkFBdUI7SUFLaEMsWUFBc0IsaUJBQW1DLEVBQ25DLG9CQUF5QyxFQUN6QyxRQUFtQyxFQUNuQyxlQUF1QyxFQUN2QyxJQUFtQjtRQUpuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsYUFBUSxHQUFSLFFBQVEsQ0FBMkI7UUFDbkMsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFNBQUksR0FBSixJQUFJLENBQWU7SUFDekMsQ0FBQztJQUVNLGtDQUFrQyxDQUFDLFdBQTZCO1FBQ25FLE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUFDLFdBQVcs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S0FBSyxLQUFLLElBQUksRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7U0FDMUY7UUFDRCxNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9FLElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpREFBaUQsb0JBQW9CLGlDQUFpQyxDQUFDLENBQUM7WUFDeEgsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDOztBQW5GRCxzRkFBc0Y7QUFDNUQsa0RBQTBCLEdBQUcsZUFBZ0IsQ0FBQTtxSEFIOUQsdUJBQXVCO3lIQUF2Qix1QkFBdUIsY0FGcEIsTUFBTTs0RkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlcic7XG5pbXBvcnQge0RhdGFHcm91cH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5pbXBvcnQge2V4dHJhY3RGaWx0ZXJGcm9tRmlsdGVyRmllbGR9IGZyb20gJy4vbmF2aWdhdGlvbi1pdGVtLXRhc2stdXRpbGl0eS1tZXRob2RzJztcbmltcG9ydCB7Z2V0RmllbGRGcm9tRGF0YUdyb3VwcywgZ2V0RmllbGRJbmRleEZyb21EYXRhR3JvdXBzfSBmcm9tICcuLi8uLi91dGlsaXR5L2dldC1maWVsZCc7XG5pbXBvcnQge1VzZXJGaWx0ZXJDb25zdGFudHN9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvdXNlci1maWx0ZXItY29uc3RhbnRzJztcbmltcG9ydCB7RmlsdGVyUmVwb3NpdG9yeX0gZnJvbSAnLi4vLi4vZmlsdGVyL2ZpbHRlci5yZXBvc2l0b3J5JztcbmltcG9ydCB7VGV4dEZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy90ZXh0LWZpZWxkL21vZGVscy90ZXh0LWZpZWxkJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7TWVyZ2VPcGVyYXRvcn0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9tZXJnZS1vcGVyYXRvcic7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvdGFzay1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7RmlsdGVyRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2ZpbHRlci1maWVsZC9tb2RlbHMvZmlsdGVyLWZpZWxkJztcbmltcG9ydCB7RGF0YUZpZWxkfSBmcm9tICcuLi8uLi9kYXRhLWZpZWxkcy9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZCc7XG5pbXBvcnQge0dyb3VwTmF2aWdhdGlvbkNvbnN0YW50c30gZnJvbSBcIi4uL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29uc3RhbnRzXCI7XG5pbXBvcnQge0FsbG93ZWROZXRzU2VydmljZX0gZnJvbSBcIi4uLy4uL2FsbG93ZWQtbmV0cy9zZXJ2aWNlcy9hbGxvd2VkLW5ldHMuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBBbGxvd2VkTmV0c1NlcnZpY2VGYWN0b3J5LFxuICAgIG5hdmlnYXRpb25JdGVtVGFza0FsbG93ZWROZXRzU2VydmljZUZhY3Rvcnlcbn0gZnJvbSBcIi4uLy4uL2FsbG93ZWQtbmV0cy9zZXJ2aWNlcy9mYWN0b3J5L2FsbG93ZWQtbmV0cy1zZXJ2aWNlLWZhY3RvcnlcIjtcbmltcG9ydCB7QmFzZUFsbG93ZWROZXRzU2VydmljZX0gZnJvbSBcIi4uLy4uL2FsbG93ZWQtbmV0cy9zZXJ2aWNlcy9iYXNlLWFsbG93ZWQtbmV0cy5zZXJ2aWNlXCI7XG5cbi8qKlxuICogVGhpcyBzZXJ2aWNlIGlzIGFibGUgdG8gbG9hZCB0aGUgZnVsbCBzYXZlZCBmaWx0ZXIgaW5jbHVkaW5nIGFsbCBvZiBpdHMgYW5jZXN0b3IgZmlsdGVycy5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJFeHRyYWN0aW9uU2VydmljZSB7XG5cbiAgICAvLyB0aGUgc2FtZSByZWdleCBpcyB1c2VkIGluIGEgYmFja2VuZCBmaWx0ZXIgcHJvY2VzcyBhY3Rpb24uIFBsZWFzZSBrZWVwIHRoZW0gaW4gc3luY1xuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgVU5UQUJCRURfVklFV19JRF9FWFRSQUNUT1IgPSAnXi4qPygtXFxcXGQrKT8kJztcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfZmlsdGVyUmVwb3NpdG9yeTogRmlsdGVyUmVwb3NpdG9yeSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tSZXNvdXJjZVNlcnZpY2U6IFRhc2tSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9mYWN0b3J5OiBBbGxvd2VkTmV0c1NlcnZpY2VGYWN0b3J5LFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBiYXNlQWxsb3dlZE5ldHM6IEJhc2VBbGxvd2VkTmV0c1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXh0cmFjdEFkZGl0aW9uYWxGaWx0ZXJBbGxvd2VkTmV0cyhkYXRhU2VjdGlvbjogQXJyYXk8RGF0YUdyb3VwPik6IEFsbG93ZWROZXRzU2VydmljZSB7XG4gICAgICAgIGNvbnN0IHRhc2tSZWZJbmRleCA9IGdldEZpZWxkSW5kZXhGcm9tRGF0YUdyb3VwcyhkYXRhU2VjdGlvbiwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfQURESVRJT05BTF9GSUxURVJfVEFTS1JFRik7XG4gICAgICAgIGlmICh0YXNrUmVmSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzbGljZWQgPSBkYXRhU2VjdGlvbi5zbGljZSh0YXNrUmVmSW5kZXguZGF0YUdyb3VwSW5kZXggKyAxKVxuICAgICAgICBpZiAoc2xpY2VkLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hdmlnYXRpb25JdGVtVGFza0FsbG93ZWROZXRzU2VydmljZUZhY3RvcnkodGhpcy5fZmFjdG9yeSwgdGhpcy5iYXNlQWxsb3dlZE5ldHMsIHNsaWNlZClcbiAgICB9XG5cbiAgICBwdWJsaWMgZXh0cmFjdENvbXBsZXRlQWRkaXRpb25hbEZpbHRlckZyb21EYXRhKGRhdGFTZWN0aW9uOiBBcnJheTxEYXRhR3JvdXA+KTogRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgdGFza1JlZkluZGV4ID0gZ2V0RmllbGRJbmRleEZyb21EYXRhR3JvdXBzKGRhdGFTZWN0aW9uLCBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9BRERJVElPTkFMX0ZJTFRFUl9UQVNLUkVGKTtcbiAgICAgICAgaWYgKHRhc2tSZWZJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdENvbXBsZXRlRmlsdGVyRnJvbURhdGEoZGF0YVNlY3Rpb24uc2xpY2UodGFza1JlZkluZGV4LmRhdGFHcm91cEluZGV4ICsgMSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHRyYWN0Q29tcGxldGVGaWx0ZXJGcm9tRGF0YShkYXRhU2VjdGlvbjogQXJyYXk8RGF0YUdyb3VwPiwgZmllbGRJZDogc3RyaW5nID0gVXNlckZpbHRlckNvbnN0YW50cy5GSUxURVJfRklFTERfSUQpOiBGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJJbmRleCA9IGdldEZpZWxkSW5kZXhGcm9tRGF0YUdyb3VwcyhkYXRhU2VjdGlvbiwgZmllbGRJZCk7XG5cbiAgICAgICAgaWYgKGZpbHRlckluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmlsdGVyU2VnbWVudDogRmlsdGVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsdGVyU2VnbWVudCA9IGV4dHJhY3RGaWx0ZXJGcm9tRmlsdGVyRmllbGQoXG4gICAgICAgICAgICAgICAgZGF0YVNlY3Rpb25bZmlsdGVySW5kZXguZGF0YUdyb3VwSW5kZXhdLmZpZWxkc1tmaWx0ZXJJbmRleC5maWVsZEluZGV4XSBhcyBGaWx0ZXJGaWVsZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWx0ZXIgc2VnbWVudCBjb3VsZCBub3QgYmUgZXh0cmFjdGVkIGZyb20gZmlsdGVyIGZpZWxkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRGaWx0ZXIgPSB0aGlzLmV4dHJhY3RDb21wbGV0ZUZpbHRlckZyb21EYXRhKGRhdGFTZWN0aW9uLnNsaWNlKGZpbHRlckluZGV4LmRhdGFHcm91cEluZGV4ICsgMSkpO1xuXG4gICAgICAgIGlmIChwYXJlbnRGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRGaWx0ZXIudHlwZSA9PT0gZmlsdGVyU2VnbWVudC50eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyU2VnbWVudC5tZXJnZShwYXJlbnRGaWx0ZXIsIE1lcmdlT3BlcmF0b3IuQU5EKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElzIHRoZSBmaWx0ZXIgdmlldyByb290ZWQ/XG4gICAgICAgIGNvbnN0IHJvb3RWaWV3SWRGaWVsZCA9IGdldEZpZWxkRnJvbURhdGFHcm91cHMoZGF0YVNlY3Rpb24sIFVzZXJGaWx0ZXJDb25zdGFudHMuT1JJR0lOX1ZJRVdfSURfRklFTERfSUQpO1xuICAgICAgICBpZiAocm9vdFZpZXdJZEZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJTZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm9vdFZpZXdGaWx0ZXIgPSB0aGlzLmV4dHJhY3RWaWV3RmlsdGVyKHJvb3RWaWV3SWRGaWVsZCk7XG4gICAgICAgIGlmIChyb290Vmlld0ZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyU2VnbWVudC5tZXJnZShyb290Vmlld0ZpbHRlciwgTWVyZ2VPcGVyYXRvci5BTkQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJTZWdtZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBleHRyYWN0Vmlld0ZpbHRlcihvcmlnaW5WaWV3SWRGaWVsZDogRGF0YUZpZWxkPGFueT4pOiBGaWx0ZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAob3JpZ2luVmlld0lkRmllbGQgPT09IHVuZGVmaW5lZCB8fCAhKG9yaWdpblZpZXdJZEZpZWxkIGluc3RhbmNlb2YgVGV4dEZpZWxkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZXh0cmFjdCBvcmlnaW4gdmlldyBpZCBmaWVsZCBmcm9tIHRhc2sgZGF0YScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpblZpZXdJZCA9IG9yaWdpblZpZXdJZEZpZWxkLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoID0gb3JpZ2luVmlld0lkLm1hdGNoKEZpbHRlckV4dHJhY3Rpb25TZXJ2aWNlLlVOVEFCQkVEX1ZJRVdfSURfRVhUUkFDVE9SKTtcbiAgICAgICAgaWYgKG1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc3RhdGUuIFZpZXcgSWQgb2Ygb3JpZ2luIGFwcCB2aWV3IGNvdWxkIG5vdCBiZSBleHRyYWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmlnaW5VbnRhYmJlZFZpZXdJZCA9IG9yaWdpblZpZXdJZC5zdWJzdHJpbmcoMCwgb3JpZ2luVmlld0lkLmxlbmd0aCAtIChtYXRjaFsxXT8ubGVuZ3RoID8/IDApKTtcbiAgICAgICAgY29uc3QgYXBwT3JpZ2luRmlsdGVyID0gdGhpcy5fZmlsdGVyUmVwb3NpdG9yeS5nZXRGaWx0ZXIob3JpZ2luVW50YWJiZWRWaWV3SWQpO1xuICAgICAgICBpZiAoYXBwT3JpZ2luRmlsdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgQ291bGQgbm90IHJldHJpZXZlIG9yaWdpbiBhcHAgZmlsdGVyIHdpdGggaWQgJyR7b3JpZ2luVW50YWJiZWRWaWV3SWR9Jy4gRmFsbGluZyBiYWNrIHRvIGVtcHR5IGZpbHRlcmApO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwT3JpZ2luRmlsdGVyO1xuICAgIH1cblxufVxuIl19
|