@deeksha2309/sunbird-collection-editor 8.0.7 → 8.0.8
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/deeksha2309-sunbird-collection-editor.d.ts.map +1 -0
- package/esm2022/deeksha2309-sunbird-collection-editor.mjs +5 -0
- package/esm2022/lib/collection-editor-library.module.mjs +30 -6
- package/esm2022/lib/components/answer/answer.component.mjs +6 -3
- package/esm2022/lib/components/app-loader/app-loader.component.mjs +30 -0
- package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +30 -12
- package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +1 -1
- package/esm2022/lib/components/bulk-upload/bulk-upload.component.mjs +447 -0
- package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +30 -12
- package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +3 -3
- package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +2 -2
- package/esm2022/lib/components/editor/editor.component.mjs +143 -64
- package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +91 -9
- package/esm2022/lib/components/header/header.component.mjs +27 -9
- package/esm2022/lib/components/library/library.component.mjs +4 -4
- package/esm2022/lib/components/library-list/library-list.component.mjs +4 -4
- package/esm2022/lib/components/library-player/library-player.component.mjs +4 -4
- package/esm2022/lib/components/meta-form/meta-form.component.mjs +10 -18
- package/esm2022/lib/components/options/options.component.mjs +40 -27
- package/esm2022/lib/components/progress-status/progress-status.component.mjs +1 -1
- package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +6 -3
- package/esm2022/lib/components/question/question.component.mjs +185 -77
- package/esm2022/lib/components/question-option-sub-menu/question-option-sub-menu.component.mjs +36 -0
- package/esm2022/lib/components/quml-player/quml-player.component.mjs +2 -2
- package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +3 -3
- package/esm2022/lib/components/relational-metadata/relational-metadata.component.mjs +80 -0
- package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +3 -3
- package/esm2022/lib/components/slider/slider.component.mjs +46 -0
- package/esm2022/lib/components/template/template.component.mjs +3 -3
- package/esm2022/lib/components/translations/translations.component.mjs +132 -0
- package/esm2022/lib/directives/date-format/date-format.pipe.mjs +34 -0
- package/esm2022/lib/interfaces/CreationContext.mjs +2 -0
- package/esm2022/lib/interfaces/editor.mjs +1 -1
- package/esm2022/lib/interfaces/loader.mjs +2 -0
- package/esm2022/lib/pipes/interpolate.pipe.mjs +17 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +6 -8
- package/esm2022/lib/services/bulk-job/bulk-job.service.mjs +67 -0
- package/esm2022/lib/services/config/category.config.json +1 -0
- package/esm2022/lib/services/config/editor.config.json +29 -2
- package/esm2022/lib/services/config/label.config.json +16 -3
- package/esm2022/lib/services/config/player.config.json +3 -0
- package/esm2022/lib/services/config/url.config.json +17 -1
- package/esm2022/lib/services/editor/editor.service.mjs +64 -26
- package/esm2022/lib/services/question/question.service.mjs +27 -35
- package/esm2022/lib/services/tree/tree.service.mjs +20 -5
- package/fesm2022/{project-sunbird-sunbird-collection-editor.mjs → deeksha2309-sunbird-collection-editor.mjs} +1779 -483
- package/fesm2022/deeksha2309-sunbird-collection-editor.mjs.map +1 -0
- package/index.d.ts +2 -2
- package/lib/collection-editor-library.module.d.ts +51 -43
- package/lib/collection-editor-library.module.d.ts.map +1 -1
- package/lib/components/answer/answer.component.d.ts +2 -1
- package/lib/components/answer/answer.component.d.ts.map +1 -1
- package/lib/components/app-loader/app-loader.component.d.ts +18 -0
- package/lib/components/app-loader/app-loader.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -1
- package/lib/components/bulk-upload/bulk-upload.component.d.ts +71 -0
- package/lib/components/bulk-upload/bulk-upload.component.d.ts.map +1 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +1 -1
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -1
- package/lib/components/editor/editor.component.d.ts +11 -7
- package/lib/components/editor/editor.component.d.ts.map +1 -1
- package/lib/components/fancy-tree/fancy-tree.component.d.ts +11 -3
- package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -1
- package/lib/components/header/header.component.d.ts +6 -2
- package/lib/components/header/header.component.d.ts.map +1 -1
- package/lib/components/library/library.component.d.ts +1 -1
- package/lib/components/library/library.component.d.ts.map +1 -1
- package/lib/components/meta-form/meta-form.component.d.ts +3 -4
- package/lib/components/meta-form/meta-form.component.d.ts.map +1 -1
- package/lib/components/options/options.component.d.ts +15 -7
- package/lib/components/options/options.component.d.ts.map +1 -1
- package/lib/components/publish-checklist/publish-checklist.component.d.ts +2 -1
- package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -1
- package/lib/components/question/question.component.d.ts +21 -28
- package/lib/components/question/question.component.d.ts.map +1 -1
- package/lib/components/question-option-sub-menu/question-option-sub-menu.component.d.ts +27 -0
- package/lib/components/question-option-sub-menu/question-option-sub-menu.component.d.ts.map +1 -0
- package/lib/components/relational-metadata/relational-metadata.component.d.ts +25 -0
- package/lib/components/relational-metadata/relational-metadata.component.d.ts.map +1 -0
- package/lib/components/slider/slider.component.d.ts +25 -0
- package/lib/components/slider/slider.component.d.ts.map +1 -0
- package/lib/components/translations/translations.component.d.ts +70 -0
- package/lib/components/translations/translations.component.d.ts.map +1 -0
- package/lib/directives/date-format/date-format.pipe.d.ts +20 -0
- package/lib/directives/date-format/date-format.pipe.d.ts.map +1 -0
- package/lib/interfaces/CreationContext.d.ts +11 -0
- package/lib/interfaces/CreationContext.d.ts.map +1 -0
- package/lib/interfaces/editor.d.ts +10 -5
- package/lib/interfaces/editor.d.ts.map +1 -1
- package/lib/interfaces/loader.d.ts +11 -0
- package/lib/interfaces/loader.d.ts.map +1 -0
- package/lib/pipes/interpolate.pipe.d.ts +8 -0
- package/lib/pipes/interpolate.pipe.d.ts.map +1 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +4 -4
- package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -1
- package/lib/services/bulk-job/bulk-job.service.d.ts +17 -0
- package/lib/services/bulk-job/bulk-job.service.d.ts.map +1 -0
- package/lib/services/editor/editor.service.d.ts +7 -4
- package/lib/services/editor/editor.service.d.ts.map +1 -1
- package/lib/services/question/question.service.d.ts +2 -2
- package/lib/services/question/question.service.d.ts.map +1 -1
- package/lib/services/tree/tree.service.d.ts +3 -1
- package/lib/services/tree/tree.service.d.ts.map +1 -1
- package/package.json +5 -5
- package/esm2022/project-sunbird-sunbird-collection-editor.mjs +0 -5
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +0 -1
- package/project-sunbird-sunbird-collection-editor.d.ts.map +0 -1
|
@@ -25,6 +25,11 @@ export class FancyTreeComponent {
|
|
|
25
25
|
this.dialcodeService = dialcodeService;
|
|
26
26
|
this.treeEventEmitter = new EventEmitter();
|
|
27
27
|
this.showLibraryButton = false;
|
|
28
|
+
this.unsubscribe$ = new Subject();
|
|
29
|
+
this.bulkUploadProcessingStatus = false;
|
|
30
|
+
this.nodeParentDependentMap = {};
|
|
31
|
+
this.treeData = [];
|
|
32
|
+
this.branchingObject = {};
|
|
28
33
|
this.rootMenuTemplate = `<span class="ui dropdown sb-dotted-dropdown" autoclose="itemClick" suidropdown="" tabindex="0">
|
|
29
34
|
<span id="contextMenu" class="p-0 w-auto"><i class="icon ellipsis vertical sb-color-black"></i></span>
|
|
30
35
|
<span id= "contextMenuDropDown" class="menu transition hidden" suidropdownmenu="" style="">
|
|
@@ -49,10 +54,15 @@ export class FancyTreeComponent {
|
|
|
49
54
|
if (!_.has(this.config, 'maxDepth')) { // TODO:: rethink this
|
|
50
55
|
this.config.maxDepth = 4;
|
|
51
56
|
}
|
|
52
|
-
this.
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
this.editorService.bulkUploadStatus$.subscribe((status) => {
|
|
58
|
+
if (status === 'processing') {
|
|
59
|
+
this.bulkUploadProcessingStatus = true;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.bulkUploadProcessingStatus = false;
|
|
63
|
+
}
|
|
55
64
|
});
|
|
65
|
+
this.initialize();
|
|
56
66
|
}
|
|
57
67
|
ngAfterViewInit() {
|
|
58
68
|
this.renderTree(this.getTreeConfig());
|
|
@@ -150,6 +160,7 @@ export class FancyTreeComponent {
|
|
|
150
160
|
folder: this.isFolder(child),
|
|
151
161
|
children: childTree,
|
|
152
162
|
root: false,
|
|
163
|
+
extraClasses: !_.isEmpty(this.nodeParentDependentMap[child.identifier]) ? this.nodeParentDependentMap[child.identifier] : '',
|
|
153
164
|
icon: this.getIconClass(child, data.level)
|
|
154
165
|
});
|
|
155
166
|
if (child.visibility === 'Parent') {
|
|
@@ -190,11 +201,22 @@ export class FancyTreeComponent {
|
|
|
190
201
|
}
|
|
191
202
|
setTimeout(() => {
|
|
192
203
|
this.treeService.reloadTree(this.rootNode);
|
|
193
|
-
this.treeService.
|
|
204
|
+
const previousNode = this.treeService.getNodeById(this.treeService.previousNode);
|
|
205
|
+
if (!_.isEmpty(previousNode)) {
|
|
206
|
+
this.treeService.setActiveNode(previousNode);
|
|
207
|
+
}
|
|
208
|
+
if (_.get(previousNode, 'folder') !== true) {
|
|
209
|
+
const prevNodeParent = this.treeService.getParent();
|
|
210
|
+
if (!_.isEmpty(prevNodeParent.data)) {
|
|
211
|
+
this.treeService.setActiveNode(prevNodeParent);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
194
214
|
const rootNode = this.treeService.getFirstChild();
|
|
195
215
|
rootNode.setExpanded(true);
|
|
196
216
|
this.eachNodeActionButton(rootNode);
|
|
197
217
|
this.dialcodeService.readExistingQrCode();
|
|
218
|
+
this.treeService.nextTreeStatus('loaded');
|
|
219
|
+
this.showTree = true;
|
|
198
220
|
});
|
|
199
221
|
if (_.get(this.editorService, 'editorConfig.config.renderTaxonomy') === true && _.isEmpty(_.get(this.nodes, 'data.children'))) {
|
|
200
222
|
_.forEach(this.rootNode[0]?.children, (child) => {
|
|
@@ -276,6 +298,7 @@ export class FancyTreeComponent {
|
|
|
276
298
|
},
|
|
277
299
|
activate: (event, data) => {
|
|
278
300
|
this.treeEventEmitter.emit({ type: 'nodeSelect', data: data.node });
|
|
301
|
+
this.treeService.previousNode = _.get(data, 'node.data.id');
|
|
279
302
|
setTimeout(() => {
|
|
280
303
|
this.attachContextMenu(data.node, true);
|
|
281
304
|
this.eachNodeActionButton(data.node);
|
|
@@ -353,7 +376,8 @@ export class FancyTreeComponent {
|
|
|
353
376
|
return $(this.tree.nativeElement).fancytree('getTree').getActiveNode();
|
|
354
377
|
}
|
|
355
378
|
attachContextMenu(node, activeNode) {
|
|
356
|
-
|
|
379
|
+
// tslint:disable-next-line:max-line-length
|
|
380
|
+
if (this.bulkUploadProcessingStatus || _.get(this.config, 'mode') !== 'edit' || (node.data.root === true && _.isEmpty(this.config.hierarchy))) {
|
|
357
381
|
return;
|
|
358
382
|
}
|
|
359
383
|
const $nodeSpan = $(node.span);
|
|
@@ -414,7 +438,13 @@ export class FancyTreeComponent {
|
|
|
414
438
|
dropAllowed = false;
|
|
415
439
|
}
|
|
416
440
|
if (dropAllowed) {
|
|
417
|
-
|
|
441
|
+
const currentNodeDependency = this.editorService.getDependentNodes(currentNode.otherNode.data.id);
|
|
442
|
+
if (!_.isEmpty(currentNodeDependency)) {
|
|
443
|
+
this.moveDependentNodes(targetNode, currentNode);
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
currentNode.otherNode.moveTo(targetNode, currentNode.hitMode);
|
|
447
|
+
}
|
|
418
448
|
this.treeService.nextTreeStatus('reorder');
|
|
419
449
|
return true;
|
|
420
450
|
}
|
|
@@ -490,6 +520,9 @@ export class FancyTreeComponent {
|
|
|
490
520
|
addFromLibrary() {
|
|
491
521
|
this.editorService.emitshowLibraryPageEvent('showLibraryPage');
|
|
492
522
|
}
|
|
523
|
+
addQuestionFromLibrary() {
|
|
524
|
+
this.editorService.emitshowQuestionLibraryPageEvent('showQuestionLibraryPage');
|
|
525
|
+
}
|
|
493
526
|
getTelemetryInteractEdata(id) {
|
|
494
527
|
return {
|
|
495
528
|
id: id || 'collection-toc',
|
|
@@ -504,16 +537,65 @@ export class FancyTreeComponent {
|
|
|
504
537
|
createNewContent() {
|
|
505
538
|
this.treeEventEmitter.emit({ type: 'createNewContent' });
|
|
506
539
|
}
|
|
540
|
+
moveDependentNodes(targetNode, currentNode) {
|
|
541
|
+
const currentNodeDependency = this.editorService.getDependentNodes(currentNode.otherNode.data.id);
|
|
542
|
+
const currentSectionId = _.get(currentNode, 'otherNode.parent.data.id');
|
|
543
|
+
let movingNodeIds = [];
|
|
544
|
+
if (!_.isEmpty(currentNodeDependency)) {
|
|
545
|
+
// tslint:disable-next-line:max-line-length
|
|
546
|
+
const nodeId = _.get(currentNode, 'otherNode.data.id');
|
|
547
|
+
if (!_.isEmpty(currentNodeDependency.target) || !_.isEmpty(currentNodeDependency.sourceTarget)) {
|
|
548
|
+
if (currentNode.hitMode === 'after') {
|
|
549
|
+
// tslint:disable-next-line:max-line-length
|
|
550
|
+
movingNodeIds = _.uniq(_.compact(_.concat(currentNodeDependency.source, currentNodeDependency.target, currentNodeDependency.sourceTarget, nodeId)));
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
// tslint:disable-next-line:max-line-length
|
|
554
|
+
movingNodeIds = _.uniq(_.compact(_.concat(currentNodeDependency.source, nodeId, currentNodeDependency.target, currentNodeDependency.sourceTarget)));
|
|
555
|
+
}
|
|
556
|
+
_.forEach(movingNodeIds, id => {
|
|
557
|
+
const dependentNode = this.treeService.getNodeById(id);
|
|
558
|
+
dependentNode.moveTo(targetNode, currentNode.hitMode);
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
const isFolder = _.get(targetNode, 'folder');
|
|
562
|
+
const targetNodeId = isFolder ? _.get(targetNode, 'data.id') : _.get(targetNode, 'parent.data.id');
|
|
563
|
+
// tslint:disable-next-line:max-line-length
|
|
564
|
+
this.rearrangeBranchingLogic(nodeId, currentSectionId, targetNodeId, currentNodeDependency, movingNodeIds);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
rearrangeBranchingLogic(nodeId, currentSectionId, targetSectionId, dependentNodeIDs, movingNodeIds) {
|
|
568
|
+
const currentSectionBranchingLogic = this.editorService.getBranchingLogicByFolder(currentSectionId);
|
|
569
|
+
const targetSectionBranchingLogic = this.editorService.getBranchingLogicByFolder(targetSectionId);
|
|
570
|
+
const movingNodesBranchingEntry = _.pick(currentSectionBranchingLogic, movingNodeIds);
|
|
571
|
+
const updateCurrentSectionBranchingLogic = _.omit(currentSectionBranchingLogic, movingNodeIds);
|
|
572
|
+
const updateTargetSectionBranchingLogic = _.assign({}, targetSectionBranchingLogic, movingNodesBranchingEntry);
|
|
573
|
+
const currentSectionName = _.get(this.treeService.getNodeById(currentSectionId), 'data.metadata.name');
|
|
574
|
+
const targetSectionName = _.get(this.treeService.getNodeById(targetSectionId), 'data.metadata.name');
|
|
575
|
+
this.updateTreeCache(currentSectionName, updateCurrentSectionBranchingLogic, currentSectionId);
|
|
576
|
+
this.updateTreeCache(targetSectionName, updateTargetSectionBranchingLogic, targetSectionId);
|
|
577
|
+
}
|
|
578
|
+
updateTreeCache(name, branchingLogic, id, additionalMetadata) {
|
|
579
|
+
const primaryCategoryName = this.editorService.getPrimaryCategoryName(id);
|
|
580
|
+
const metadata = {
|
|
581
|
+
name,
|
|
582
|
+
primaryCategory: primaryCategoryName,
|
|
583
|
+
...(!_.isUndefined(additionalMetadata) && { ...additionalMetadata }),
|
|
584
|
+
allowBranching: 'Yes',
|
|
585
|
+
...(!_.isUndefined(branchingLogic) && { branchingLogic })
|
|
586
|
+
};
|
|
587
|
+
this.treeService.updateTreeNodeMetadata(metadata, id, primaryCategoryName);
|
|
588
|
+
}
|
|
507
589
|
ngOnDestroy() {
|
|
508
590
|
this.onComponentDestroy$.next();
|
|
509
591
|
this.onComponentDestroy$.complete();
|
|
510
592
|
}
|
|
511
593
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FancyTreeComponent, deps: [{ token: i1.TreeService }, { token: i2.EditorService }, { token: i3.EditorTelemetryService }, { token: i4.HelperService }, { token: i5.ToasterService }, { token: i0.ChangeDetectorRef }, { token: i6.ConfigService }, { token: i7.DialcodeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
512
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FancyTreeComponent, selector: "lib-fancy-tree", inputs: { nodes: "nodes", options: "options", buttonLoaders: "buttonLoaders" }, outputs: { treeEventEmitter: "treeEventEmitter" }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["fancyTree"], descendants: true }], ngImport: i0, template: "<div #fancyTree></div>\n<div class=\"sb-fixed-with-whitebg pr-20 d-flex flex-jc-space-between\" *ngIf=\"config && config.mode === 'edit'\">\n <div class=\"d-flex w-25\">\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addSibling ? '' : 'sb-disabled'\" (click)=\"addSibling();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius p-0 b-none\"><i aria-hidden=\"true\" class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_sibling_btn_label}} </button>\n </div>\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addChild ? '' : 'sb-disabled'\" (click)=\"addChild();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius b-none p-0\"><i class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_child_btn_label}} </button>\n </div>\n </div>\n <button *ngIf=\"config.objectType !== 'QuestionSet'\" (click)=\"addFromLibrary();\"\n [disabled]=\"!visibility?.addFromLibrary\"\n [ngClass]=\"[!visibility?.addFromLibrary ? 'sb-btn-outline-disabled' : '', (visibility?.addFromLibrary && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal mt-10 mr-30\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_from_library','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" aria-hidden=\"true\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.add_from_library_btn_label}}\n </button>\n <
|
|
594
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FancyTreeComponent, selector: "lib-fancy-tree", inputs: { nodes: "nodes", options: "options", buttonLoaders: "buttonLoaders" }, outputs: { treeEventEmitter: "treeEventEmitter" }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["fancyTree"], descendants: true }], ngImport: i0, template: "<div #fancyTree></div>\n<div class=\"sb-fixed-with-whitebg pr-20 d-flex flex-jc-space-between\" *ngIf=\"config && config.mode === 'edit'\">\n <div class=\"d-flex w-25\">\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addSibling ? '' : 'sb-disabled'\" (click)=\"addSibling();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius p-0 b-none\"><i aria-hidden=\"true\" class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_sibling_btn_label}} </button>\n </div>\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addChild ? '' : 'sb-disabled'\" (click)=\"addChild();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius b-none p-0\"><i class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_child_btn_label}} </button>\n </div>\n </div>\n <button *ngIf=\"config.objectType !== 'QuestionSet'\" (click)=\"addFromLibrary();\"\n [disabled]=\"!visibility?.addFromLibrary\"\n [ngClass]=\"[!visibility?.addFromLibrary ? 'sb-btn-outline-disabled' : '', (visibility?.addFromLibrary && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal mt-10 mr-30\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_from_library','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" aria-hidden=\"true\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.add_from_library_btn_label}}\n </button>\n <div class=\"d-flex mt-10 mr-30\" *ngIf=\"config.objectType === 'QuestionSet'\">\n <button [disabled]=\"!visibility?.addQuestionFromLibrary\" (click)=\"addQuestionFromLibrary();\"\n [ngClass]=\"[!visibility?.addQuestionFromLibrary ? 'sb-btn-outline-disabled' : 'sb-btn-outline-primary', (visibility?.addQuestionFromLibrary && buttonLoaders?.addQuestionFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n class=\"sb-btn sb-btn-normal mr-10\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_from_library','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" aria-hidden=\"true\" *ngIf=\"!buttonLoaders?.addQuestionFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addQuestionFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.add_from_library_btn_label}}\n </button>\n <button class=\"sb-btn sb-btn-normal sb-btn-primary\" [disabled]=\"!visibility?.createNew\"\n [ngClass]=\"[!visibility?.createNew ? 'sb-btn-outline-disabled' : '', (visibility?.createNew && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n type=\"button\" (click)=\"createNewContent()\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('create_new','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.create_new_btn_label}}\n </button>\n </div>\n</div>\n", styles: [".sb-collectionTree-fancyTreelist ul{padding:0!important}.sb-collectionTree-fancyTreelist .ui-fancytree{margin-bottom:1rem!important}.sb-collectionTree-fancyTreelist .ui-fancytree:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree ul:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title{color:var(--primary-color)!important;font-size:.9286rem!important;font-weight:700!important;padding-left:5px;width:inherit!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title.highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title.highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li{padding:0;margin:0 0 1px}.sb-collectionTree-fancyTreelist .ui-fancytree li .highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-ico-c{padding-left:5px!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-expanded{padding:15px 33px;border:1px solid transparent;background-color:#fff}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-active{border:1px solid #d0e0f3;background-color:var(--primary-0);padding:15px 33px;border-top:none}.sb-collectionTree-fancyTreelist .ui-fancytree li:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul{padding-top:1px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li{list-style-type:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-top:2px;float:left;margin-left:6px;font-size:16px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon.highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node{padding:6px 6px 8px 5px;margin-left:45px;border:1px solid transparent}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-active,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-focused,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node:hover{border:1px solid #d0e0f3;background-color:var(--primary-0);border-right:0}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.dependent{margin-left:65px}.sb-collectionTree-fancyTreelist .ui-fancytree li:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .sb-fancyTree-icon{color:var(--gray-300)!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-left:5px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-down{margin-top:6px;display:block;width:10px;padding-left:2px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-right{margin-top:6px;display:block;width:10px;padding-left:6px}.sb-collectionTree-fancyTreelist .ui-fancytree{padding-right:.785rem;margin:0;padding:0;list-style-type:none}.sb-fixed-with-whitebg{position:fixed;width:100%;border-top:1px solid #ddd;left:0;right:0;bottom:0;background-color:#fff;z-index:99999;padding:0!important}.sb-fixed-with-whitebg .sb-btn-cover{padding:.5rem;border-right:solid 1px #ccc;width:50%;text-align:center}.sb-fixed-with-whitebg .sb-btn-cover .sb-btn:hover{background:none!important;color:var(--primary-400)}.sb-dotted-dropdown{position:absolute!important;right:6px;padding-left:33px}.sb-dotted-dropdown .menu{right:0!important;left:inherit!important}.sb-dotted-dropdown .menu .item{font-size:.785rem!important}.eight.bg-white{border-left:solid 1px var(--gray-100);padding-bottom:4.5rem!important}.b-none{border:none!important}.w-25{width:25.1%;max-width:25.1%}#removeNodeIcon{padding-right:24px}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.TelemetryInteractDirective, selector: "[libTelemetryInteract]", inputs: ["telemetryInteractEdata"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
513
595
|
}
|
|
514
596
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FancyTreeComponent, decorators: [{
|
|
515
597
|
type: Component,
|
|
516
|
-
args: [{ selector: 'lib-fancy-tree', encapsulation: ViewEncapsulation.None, template: "<div #fancyTree></div>\n<div class=\"sb-fixed-with-whitebg pr-20 d-flex flex-jc-space-between\" *ngIf=\"config && config.mode === 'edit'\">\n <div class=\"d-flex w-25\">\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addSibling ? '' : 'sb-disabled'\" (click)=\"addSibling();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius p-0 b-none\"><i aria-hidden=\"true\" class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_sibling_btn_label}} </button>\n </div>\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addChild ? '' : 'sb-disabled'\" (click)=\"addChild();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius b-none p-0\"><i class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_child_btn_label}} </button>\n </div>\n </div>\n <button *ngIf=\"config.objectType !== 'QuestionSet'\" (click)=\"addFromLibrary();\"\n [disabled]=\"!visibility?.addFromLibrary\"\n [ngClass]=\"[!visibility?.addFromLibrary ? 'sb-btn-outline-disabled' : '', (visibility?.addFromLibrary && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal mt-10 mr-30\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_from_library','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" aria-hidden=\"true\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.add_from_library_btn_label}}\n </button>\n <
|
|
598
|
+
args: [{ selector: 'lib-fancy-tree', encapsulation: ViewEncapsulation.None, template: "<div #fancyTree></div>\n<div class=\"sb-fixed-with-whitebg pr-20 d-flex flex-jc-space-between\" *ngIf=\"config && config.mode === 'edit'\">\n <div class=\"d-flex w-25\">\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addSibling ? '' : 'sb-disabled'\" (click)=\"addSibling();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius p-0 b-none\"><i aria-hidden=\"true\" class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_sibling_btn_label}} </button>\n </div>\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addChild ? '' : 'sb-disabled'\" (click)=\"addChild();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius b-none p-0\"><i class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_child_btn_label}} </button>\n </div>\n </div>\n <button *ngIf=\"config.objectType !== 'QuestionSet'\" (click)=\"addFromLibrary();\"\n [disabled]=\"!visibility?.addFromLibrary\"\n [ngClass]=\"[!visibility?.addFromLibrary ? 'sb-btn-outline-disabled' : '', (visibility?.addFromLibrary && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal mt-10 mr-30\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_from_library','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" aria-hidden=\"true\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.add_from_library_btn_label}}\n </button>\n <div class=\"d-flex mt-10 mr-30\" *ngIf=\"config.objectType === 'QuestionSet'\">\n <button [disabled]=\"!visibility?.addQuestionFromLibrary\" (click)=\"addQuestionFromLibrary();\"\n [ngClass]=\"[!visibility?.addQuestionFromLibrary ? 'sb-btn-outline-disabled' : 'sb-btn-outline-primary', (visibility?.addQuestionFromLibrary && buttonLoaders?.addQuestionFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n class=\"sb-btn sb-btn-normal mr-10\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_from_library','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" aria-hidden=\"true\" *ngIf=\"!buttonLoaders?.addQuestionFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addQuestionFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.add_from_library_btn_label}}\n </button>\n <button class=\"sb-btn sb-btn-normal sb-btn-primary\" [disabled]=\"!visibility?.createNew\"\n [ngClass]=\"[!visibility?.createNew ? 'sb-btn-outline-disabled' : '', (visibility?.createNew && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n type=\"button\" (click)=\"createNewContent()\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('create_new','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.create_new_btn_label}}\n </button>\n </div>\n</div>\n", styles: [".sb-collectionTree-fancyTreelist ul{padding:0!important}.sb-collectionTree-fancyTreelist .ui-fancytree{margin-bottom:1rem!important}.sb-collectionTree-fancyTreelist .ui-fancytree:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree ul:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title{color:var(--primary-color)!important;font-size:.9286rem!important;font-weight:700!important;padding-left:5px;width:inherit!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title.highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title.highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li{padding:0;margin:0 0 1px}.sb-collectionTree-fancyTreelist .ui-fancytree li .highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-ico-c{padding-left:5px!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-expanded{padding:15px 33px;border:1px solid transparent;background-color:#fff}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-active{border:1px solid #d0e0f3;background-color:var(--primary-0);padding:15px 33px;border-top:none}.sb-collectionTree-fancyTreelist .ui-fancytree li:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul{padding-top:1px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li{list-style-type:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-top:2px;float:left;margin-left:6px;font-size:16px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon.highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node{padding:6px 6px 8px 5px;margin-left:45px;border:1px solid transparent}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-active,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-focused,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node:hover{border:1px solid #d0e0f3;background-color:var(--primary-0);border-right:0}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.dependent{margin-left:65px}.sb-collectionTree-fancyTreelist .ui-fancytree li:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .sb-fancyTree-icon{color:var(--gray-300)!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-left:5px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-down{margin-top:6px;display:block;width:10px;padding-left:2px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-right{margin-top:6px;display:block;width:10px;padding-left:6px}.sb-collectionTree-fancyTreelist .ui-fancytree{padding-right:.785rem;margin:0;padding:0;list-style-type:none}.sb-fixed-with-whitebg{position:fixed;width:100%;border-top:1px solid #ddd;left:0;right:0;bottom:0;background-color:#fff;z-index:99999;padding:0!important}.sb-fixed-with-whitebg .sb-btn-cover{padding:.5rem;border-right:solid 1px #ccc;width:50%;text-align:center}.sb-fixed-with-whitebg .sb-btn-cover .sb-btn:hover{background:none!important;color:var(--primary-400)}.sb-dotted-dropdown{position:absolute!important;right:6px;padding-left:33px}.sb-dotted-dropdown .menu{right:0!important;left:inherit!important}.sb-dotted-dropdown .menu .item{font-size:.785rem!important}.eight.bg-white{border-left:solid 1px var(--gray-100);padding-bottom:4.5rem!important}.b-none{border:none!important}.w-25{width:25.1%;max-width:25.1%}#removeNodeIcon{padding-right:24px}\n"] }]
|
|
517
599
|
}], ctorParameters: function () { return [{ type: i1.TreeService }, { type: i2.EditorService }, { type: i3.EditorTelemetryService }, { type: i4.HelperService }, { type: i5.ToasterService }, { type: i0.ChangeDetectorRef }, { type: i6.ConfigService }, { type: i7.DialcodeService }]; }, propDecorators: { tree: [{
|
|
518
600
|
type: ViewChild,
|
|
519
601
|
args: ['fancyTree']
|
|
@@ -526,4 +608,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
526
608
|
}], treeEventEmitter: [{
|
|
527
609
|
type: Output
|
|
528
610
|
}] } });
|
|
529
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFuY3ktdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9mYW5jeS10cmVlL2ZhbmN5LXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvZmFuY3ktdHJlZS9mYW5jeS10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQWlCLEtBQUssRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLFlBQVksRUFDekQsaUJBQWlCLEVBQ3JDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7QUFVL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFVcEMsTUFBTSxPQUFPLGtCQUFrQjtJQStCN0IsWUFBbUIsV0FBd0IsRUFBVSxhQUE0QixFQUM5RCxnQkFBd0MsRUFBVSxhQUE0QixFQUM3RSxjQUE4QixFQUFVLEdBQXNCLEVBQy9ELGFBQTRCLEVBQVUsZUFBZ0M7UUFIdEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM5RCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDN0UsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDL0Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxvQkFBZSxH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TCxFQUFFLEVBQUUsRUFBRSxJQUFJLGdCQUFnQjtZQUMxQixJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZTtZQUM3QyxLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDOUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDOytHQWhoQlUsa0JBQWtCO21HQUFsQixrQkFBa0IsNFJDMUIvQiw0cEZBa0NNOzs0RkRSTyxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGlCQUdYLGlCQUFpQixDQUFDLElBQUk7c1RBR04sSUFBSTtzQkFBbEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNOLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixLQUFLO2dCQUNXLGdCQUFnQjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgJ2pxdWVyeS5mYW5jeXRyZWUnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmVlL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRpdG9yL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWxwZXIvaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbGVtZXRyeS90ZWxlbWV0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RvYXN0ZXIvdG9hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgIERpYWxjb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxjb2RlL2RpYWxjb2RlLnNlcnZpY2UnO1xuXG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1mYW5jeS10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZhbmN5LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mYW5jeS10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEZhbmN5VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnZmFuY3lUcmVlJykgcHVibGljIHRyZWU6IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIHB1YmxpYyBub2RlczogYW55O1xuICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogYW55O1xuICBASW5wdXQoICkgYnV0dG9uTG9hZGVyczogYW55O1xuICBAT3V0cHV0KCkgcHVibGljIHRyZWVFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgY29uZmlnOiBhbnk7XG4gIHB1YmxpYyBzaG93VHJlZTogYm9vbGVhbjtcbiAgcHVibGljIHZpc2liaWxpdHk6IGFueTtcbiAgcHVibGljIHNob3dBZGRDaGlsZEJ1dHRvbjogYm9vbGVhbjtcbiAgcHVibGljIHNob3dBZGRTaWJsaW5nQnV0dG9uOiBib29sZWFuO1xuICBwdWJsaWMgcm9vdE5vZGU6IGFueTtcbiAgcHVibGljIHNob3dMaWJyYXJ5QnV0dG9uID0gZmFsc2U7XG4gIHB1YmxpYyByb290TWVudVRlbXBsYXRlID0gYDxzcGFuIGNsYXNzPVwidWkgZHJvcGRvd24gc2ItZG90dGVkLWRyb3Bkb3duXCIgYXV0b2Nsb3NlPVwiaXRlbUNsaWNrXCIgc3VpZHJvcGRvd249XCJcIiB0YWJpbmRleD1cIjBcIj5cbiAgPHNwYW4gaWQ9XCJjb250ZXh0TWVudVwiIGNsYXNzPVwicC0wIHctYXV0b1wiPjxpIGNsYXNzPVwiaWNvbiBlbGxpcHNpcyB2ZXJ0aWNhbCBzYi1jb2xvci1ibGFja1wiPjwvaT48L3NwYW4+XG4gIDxzcGFuIGlkPSBcImNvbnRleHRNZW51RHJvcERvd25cIiBjbGFzcz1cIm1lbnUgdHJhbnNpdGlvbiBoaWRkZW5cIiBzdWlkcm9wZG93bm1lbnU9XCJcIiBzdHlsZT1cIlwiPlxuICAgIDxkaXYgaWQ9XCJhZGRjaGlsZFwiIGNsYXNzPVwiaXRlbVwiPkFkZCBDaGlsZDwvZGl2PlxuICA8L3NwYW4+XG4gIDwvc3Bhbj5gO1xuICBwdWJsaWMgZm9sZGVyTWVudVRlbXBsYXRlID0gYDxzcGFuIGlkPSBcInJlbW92ZU5vZGVJY29uXCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIHR5cGU9XCJidXR0b25cIj48L2k+IDwvc3Bhbj48c3BhbiBjbGFzcz1cInVpIGRyb3Bkb3duIHNiLWRvdHRlZC1kcm9wZG93blwiIGF1dG9jbG9zZT1cIml0ZW1DbGlja1wiIHN1aWRyb3Bkb3duPVwiXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxzcGFuIGlkPVwiY29udGV4dE1lbnVcIiBjbGFzcz1cInAtMCB3LWF1dG9cIj48aSBjbGFzcz1cImljb24gZWxsaXBzaXMgdmVydGljYWwgc2ItY29sb3ItYmxhY2tcIj48L2k+PC9zcGFuPlxuICA8c3BhbiBpZD0gXCJjb250ZXh0TWVudURyb3BEb3duXCIgY2xhc3M9XCJtZW51IHRyYW5zaXRpb24gaGlkZGVuXCIgc3VpZHJvcGRvd25tZW51PVwiXCIgc3R5bGU9XCJcIj5cbiAgICA8ZGl2IGlkPVwiYWRkc2libGluZ1wiIGNsYXNzPVwiaXRlbVwiPkFkZCBTaWJsaW5nPC9kaXY+XG4gICAgPGRpdiBpZD1cImFkZGNoaWxkXCIgY2xhc3M9XCJpdGVtXCI+QWRkIENoaWxkPC9kaXY+XG4gICAgPGRpdiBpZD1cImRlbGV0ZVwiIGNsYXNzPVwiaXRlbVwiPkRlbGV0ZTwvZGl2PlxuICA8L3NwYW4+XG4gIDwvc3Bhbj5gO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIHB1YmxpYyBjb250ZW50TWVudVRlbXBsYXRlID0gYDxzcGFuIGlkPVwiY29udGV4dE1lbnVcIj48c3BhbiBpZD0gXCJyZW1vdmVOb2RlSWNvblwiIHR5cGU9XCJjb250ZW50XCIgPiA8aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiB0eXBlPVwiYnV0dG9uXCI+PC9pPiA8L3NwYW4+PC9zcGFuPmA7XG4gIHB1YmxpYyBub2RlUGFyZW50RGVwZW5kZW50TWFwOiBhbnk7XG4gIHB1YmxpYyBidWxrVXBsb2FkUHJvY2Vzc2luZ1N0YXR1czogYW55O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLCBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyB0ZWxlbWV0cnlTZXJ2aWNlOiBFZGl0b3JUZWxlbWV0cnlTZXJ2aWNlLCBwcml2YXRlIGhlbHBlclNlcnZpY2U6IEhlbHBlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLCBwcml2YXRlIGRpYWxjb2RlU2VydmljZTogRGlhbGNvZGVTZXJ2aWNlKSB7IH1cbiAgcHJpdmF0ZSBvbkNvbXBvbmVudERlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZmlnID0gXy5jbG9uZURlZXAodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZy5jb25maWcpO1xuICAgIHRoaXMuY29uZmlnLm1vZGUgPSAgXy5nZXQodGhpcy5jb25maWcsICdtb2RlJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIV8uaGFzKHRoaXMuY29uZmlnLCAnbWF4RGVwdGgnKSkgeyAvLyBUT0RPOjogcmV0aGluayB0aGlzXG4gICAgICB0aGlzLmNvbmZpZy5tYXhEZXB0aCA9IDQ7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuZWRpdG9yU2VydmljZS5idWxrVXBsb2FkU3RhdHVzJC5zdWJzY3JpYmUoc3RhdHVzID0+IHtcbiAgICAgIHRoaXMuYnVsa1VwbG9hZFByb2Nlc3NpbmdTdGF0dXMgPSBzdGF0dXM7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZW5kZXJUcmVlKHRoaXMuZ2V0VHJlZUNvbmZpZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ub2Rlcy5kYXRhO1xuICAgIHRoaXMubm9kZVBhcmVudERlcGVuZGVudE1hcCA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXRQYXJlbnREZXBlbmRlbnRNYXAodGhpcy5ub2Rlcy5kYXRhKTtcbiAgICBsZXQgdHJlZURhdGE7XG4gICAgaWYgKF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZSwgJ2VkaXRvckNvbmZpZy5jb25maWcucmVuZGVyVGF4b25vbXknKSA9PT0gdHJ1ZSAmJiBfLmlzRW1wdHkoXy5nZXQodGhpcy5ub2RlcywgJ2RhdGEuY2hpbGRyZW4nKSkpIHtcbiAgICAgIHRoaXMuaGVscGVyU2VydmljZS5hZGREZXB0aFRvSGllcmFyY2h5KHRoaXMubm9kZXMuZGF0YS5jaGlsZHJlbik7XG4gICAgICB0aGlzLm5vZGVzLmRhdGEuY2hpbGRyZW4gPSAgIHRoaXMucmVtb3ZlSW50ZXJtZWRpYXRlTGV2ZWxzRnJvbUZyYW1ld29yayh0aGlzLm5vZGVzLmRhdGEuY2hpbGRyZW4pO1xuICAgICAgdHJlZURhdGEgPSB0aGlzLmJ1aWxkVHJlZUZyb21GcmFtZXdvcmsodGhpcy5ub2Rlcy5kYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJlZURhdGEgPSB0aGlzLmJ1aWxkVHJlZSh0aGlzLm5vZGVzLmRhdGEpO1xuICAgIH1cbiAgICB0aGlzLmVkaXRvclNlcnZpY2UudHJlZURhdGEgPSB0cmVlRGF0YTtcbiAgICB0aGlzLnJvb3ROb2RlID0gW3tcbiAgICAgIGlkOiBkYXRhLmlkZW50aWZpZXIgfHwgdXVpZHY0KCksXG4gICAgICB0aXRsZTogZGF0YS5uYW1lLFxuICAgICAgdG9vbHRpcDogZGF0YS5uYW1lLFxuICAgICAgLi4uKGRhdGEuY29udGVudFR5cGUgJiYge2NvbnRlbnRUeXBlOiBkYXRhLmNvbnRlbnRUeXBlfSksXG4gICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGRhdGEucHJpbWFyeUNhdGVnb3J5LFxuICAgICAgb2JqZWN0VHlwZTogZGF0YS5vYmplY3RUeXBlLFxuICAgICAgbWV0YWRhdGE6IF8ub21pdChkYXRhLCBbJ2NoaWxkcmVuJywgJ2NvbGxlY3Rpb25zJ10pLFxuICAgICAgZm9sZGVyOiB0cnVlLFxuICAgICAgY2hpbGRyZW46IHRyZWVEYXRhLFxuICAgICAgcm9vdDogdHJ1ZSxcbiAgICAgIGljb246IF8uZ2V0KHRoaXMuY29uZmlnLCAnaWNvbkNsYXNzJylcbiAgICB9XTtcbiAgfVxuXG4gIGJ1aWxkVHJlZUZyb21GcmFtZXdvcmsoZGF0YSwgdHJlZT8sIGxldmVsPykge1xuICAgIHRyZWUgPSB0cmVlIHx8IFtdO1xuICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7IGRhdGEuY2hpbGRyZW4gPSBfLnNvcnRCeShkYXRhLmNoaWxkcmVuLCBbJ2luZGV4J10pOyB9XG4gICAgXy5mb3JFYWNoKGRhdGEuY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRUcmVlID0gW107XG4gICAgICB0cmVlLnB1c2goe1xuICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgIHRpdGxlOiBjaGlsZC5uYW1lLFxuICAgICAgICB0b29sdGlwOiBjaGlsZC5uYW1lLFxuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGNoaWxkLnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgbWV0YWRhdGE6IF8ub21pdChjaGlsZCwgWydjaGlsZHJlbicsICdjb2xsZWN0aW9ucyddKSxcbiAgICAgICAgZm9sZGVyOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRUcmVlLFxuICAgICAgICByb290OiBmYWxzZSxcbiAgICAgICAgaWNvbjogJ2ZhIGZhLWZvbGRlci1vJ1xuICAgICAgfSk7XG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5idWlsZFRyZWVGcm9tRnJhbWV3b3JrKGNoaWxkLCBjaGlsZFRyZWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0cmVlO1xuICB9XG5cbiAgcmVtb3ZlSW50ZXJtZWRpYXRlTGV2ZWxzRnJvbUZyYW1ld29yayhkYXRhLCBwYXJlbnREYXRhPykge1xuICAgIGNvbnN0IHRyZWUgPSBbXTtcbiAgICBfLmZvckVhY2goZGF0YSwgY2hpbGQgPT4ge1xuICAgICAgaWYgKGNoaWxkLmRlcHRoID09PSAwIHx8IGNoaWxkLmRlcHRoID09PSB0aGlzLmhlbHBlclNlcnZpY2UudHJlZURlcHRoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgLi4uXy5vbWl0KGNoaWxkLCBbJ2NoaWxkcmVuJ10pLFxuICAgICAgICAgIC4uLihjaGlsZC5jaGlsZHJlbiAmJiB7Y2hpbGRyZW46IHRoaXMucmVtb3ZlSW50ZXJtZWRpYXRlTGV2ZWxzRnJvbUZyYW1ld29yayhjaGlsZC5jaGlsZHJlbiwgY2hpbGQpfSlcbiAgICAgICAgfTtcbiAgICAgICAgdHJlZS5wdXNoKFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoKGNoaWxkLmRlcHRoICE9PSAwIHx8IGNoaWxkLmRlcHRoICE9PSB0aGlzLmhlbHBlclNlcnZpY2UudHJlZURlcHRoKSkge1xuICAgICAgICBwYXJlbnREYXRhLmNoaWxkcmVuICA9IF8uZmlsdGVyKHBhcmVudERhdGEuY2hpbGRyZW4sIGl0ZW0gPT4gKGl0ZW0uZGVwdGggPT09IDAgfHwgaXRlbS5kZXB0aCA9PT0gdGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVEZXB0aCkpO1xuICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5yZW1vdmVJbnRlcm1lZGlhdGVMZXZlbHNGcm9tRnJhbWV3b3JrKGNoaWxkLmNoaWxkcmVuLCBjaGlsZCk7XG4gICAgICAgICAgcGFyZW50RGF0YS5jaGlsZHJlbiA9IF8uY29uY2F0KHBhcmVudERhdGEuY2hpbGRyZW4sIGNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnREYXRhLmNoaWxkcmVuID0gXy5jb25jYXQocGFyZW50RGF0YS5jaGlsZHJlbiwgY2hpbGQuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICFfLmlzRW1wdHkodHJlZSkgPyB0cmVlIDogXy5mbGF0dGVuKHBhcmVudERhdGEuY2hpbGRyZW4pO1xuICB9XG5cbiAgYnVpbGRUcmVlKGRhdGEsIHRyZWU/LCBsZXZlbD8pIHtcbiAgICB0cmVlID0gdHJlZSB8fCBbXTtcbiAgICBpZiAoZGF0YS5jaGlsZHJlbikgeyBkYXRhLmNoaWxkcmVuID0gXy5zb3J0QnkoZGF0YS5jaGlsZHJlbiwgWydpbmRleCddKTsgfVxuICAgIGRhdGEubGV2ZWwgPSBsZXZlbCA/IChsZXZlbCArIDEpIDogMTtcbiAgICBfLmZvckVhY2goZGF0YS5jaGlsZHJlbiwgKGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZFRyZWUgPSBbXTtcbiAgICAgIHRyZWUucHVzaCh7XG4gICAgICAgIGlkOiBjaGlsZC5pZGVudGlmaWVyIHx8IHV1aWR2NCgpLFxuICAgICAgICB0aXRsZTogY2hpbGQubmFtZSxcbiAgICAgICAgdG9vbHRpcDogY2hpbGQubmFtZSxcbiAgICAgICAgLi4uKGNoaWxkLmNvbnRlbnRUeXBlICYmIHtjb250ZW50VHlwZTogY2hpbGQuY29udGVudFR5cGV9KSxcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgICAgIG9iamVjdFR5cGU6IGNoaWxkLm9iamVjdFR5cGUsXG4gICAgICAgIG1ldGFkYXRhOiBfLm9taXQoY2hpbGQsIFsnY2hpbGRyZW4nLCAnY29sbGVjdGlvbnMnXSksXG4gICAgICAgIGZvbGRlcjogdGhpcy5pc0ZvbGRlcihjaGlsZCksXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZFRyZWUsXG4gICAgICAgIHJvb3Q6IGZhbHNlLFxuICAgICAgICBpY29uOiB0aGlzLmdldEljb25DbGFzcyhjaGlsZCwgZGF0YS5sZXZlbClcbiAgICAgIH0pO1xuICAgICAgaWYgKGNoaWxkLnZpc2liaWxpdHkgPT09ICdQYXJlbnQnKSB7XG4gICAgICAgIHRoaXMuYnVpbGRUcmVlKGNoaWxkLCBjaGlsZFRyZWUsIGRhdGEubGV2ZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0cmVlO1xuICB9XG5cbiAgaXNGb2xkZXIoY2hpbGQ6IGFueSkge1xuICAgIGlmICh0aGlzLmlzQ29udGVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNoaWxkLnZpc2liaWxpdHkgPT09ICdQYXJlbnQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldEljb25DbGFzcyhjaGlsZDogYW55LCBsZXZlbDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaXNDb250ZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuICdmYSBmYS1maWxlLW8nO1xuICAgIH0gZWxzZSBpZiAoY2hpbGQudmlzaWJpbGl0eSA9PT0gJ1BhcmVudCcpIHtcbiAgICAgICAgcmV0dXJuIF8uZ2V0KHRoaXMuY29uZmlnLCBgaGllcmFyY2h5LmxldmVsLiR7bGV2ZWx9Lmljb25DbGFzc2ApIHx8ICdmYSBmYS1mb2xkZXItbyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnZmEgZmEtZmlsZS1vJztcbiAgICB9XG4gIH1cblxuICBpc0NvbnRlbnQoY2hpbGQ6IGFueSkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICByZXR1cm4gKF8uZ2V0KHRoaXMuY29uZmlnLCAnb2JqZWN0VHlwZScpID09PSAnUXVlc3Rpb25TZXQnICYmIGNoaWxkLm9iamVjdFR5cGUgPT09ICdRdWVzdGlvbicpO1xuICB9XG5cbiAgcmVuZGVyVHJlZShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgLi4udGhpcy5vcHRpb25zIH07XG4gICAgJCh0aGlzLnRyZWUubmF0aXZlRWxlbWVudCkuZmFuY3l0cmVlKG9wdGlvbnMpO1xuICAgIHRoaXMudHJlZVNlcnZpY2Uuc2V0VHJlZUVsZW1lbnQodGhpcy50cmVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0Nvbm5lY3RvcnMpIHtcbiAgICAgICQoJy5mYW5jeXRyZWUtY29udGFpbmVyJykuYWRkQ2xhc3MoJ2ZhbmN5dHJlZS1jb25uZWN0b3JzJyk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmVlU2VydmljZS5yZWxvYWRUcmVlKHRoaXMucm9vdE5vZGUpO1xuICAgICAgdGhpcy50cmVlU2VydmljZS5zZXRBY3RpdmVOb2RlKCk7XG4gICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0Rmlyc3RDaGlsZCgpO1xuICAgICAgcm9vdE5vZGUuc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgICB0aGlzLmVhY2hOb2RlQWN0aW9uQnV0dG9uKHJvb3ROb2RlKTtcbiAgICAgIHRoaXMuZGlhbGNvZGVTZXJ2aWNlLnJlYWRFeGlzdGluZ1FyQ29kZSgpO1xuICAgIH0pO1xuICAgIGlmIChfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29uZmlnLnJlbmRlclRheG9ub215JykgPT09IHRydWUgJiYgXy5pc0VtcHR5KF8uZ2V0KHRoaXMubm9kZXMsICdkYXRhLmNoaWxkcmVuJykpKSB7XG4gICAgICBfLmZvckVhY2godGhpcy5yb290Tm9kZVswXT8uY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlVHJlZU5vZGVNZXRhZGF0YShjaGlsZC5tZXRhZGF0YSwgY2hpbGQuaWQsIGNoaWxkLnByaW1hcnlDYXRlZ29yeSwgY2hpbGQub2JqZWN0VHlwZSk7XG4gICAgICAgICAgXy5mb3JFYWNoKGNoaWxkLmNoaWxkcmVuLCAoZWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlVHJlZU5vZGVNZXRhZGF0YShlbC5tZXRhZGF0YSwgZWwuaWQsIGVsLnByaW1hcnlDYXRlZ29yeSwgZWwub2JqZWN0VHlwZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRUcmVlQ29uZmlnKCkge1xuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcbiAgICAgIGV4dGVuc2lvbnM6IFsnZ2x5cGgnLCAnZG5kNSddLFxuICAgICAgY2xpY2tGb2xkZXJNb2RlOiAzLFxuICAgICAgc291cmNlOiB0aGlzLnJvb3ROb2RlLFxuICAgICAgZXNjYXBlVGl0bGVzOiB0cnVlLFxuICAgICAgZ2x5cGg6IHtcbiAgICAgICAgcHJlc2V0OiAnYXdlc29tZTQnLFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICBmb2xkZXI6ICdpY29uIGZvbGRlciBzYi1mYW5jeVRyZWUtaWNvbicsXG4gICAgICAgICAgZm9sZGVyT3BlbjogJ2ljb24gZm9sZGVyIG91dGxpbmUgc2ItZmFuY3lUcmVlLWljb24nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkbmQ1OiB7XG4gICAgICAgIGF1dG9FeHBhbmRNUzogNDAwLFxuICAgICAgICAvLyBmb2N1c09uQ2xpY2s6IHRydWUsXG4gICAgICAgIHByZXZlbnRWb2lkTW92ZXM6IHRydWUsIC8vIFByZXZlbnQgZHJvcHBpbmcgbm9kZXMgJ2JlZm9yZSBzZWxmJywgZXRjLlxuICAgICAgICBwcmV2ZW50UmVjdXJzaW9uOiB0cnVlLCAvLyBQcmV2ZW50IGRyb3BwaW5nIG5vZGVzIG9uIG93biBkZXNjZW5kYW50c1xuICAgICAgICBkcmFnU3RhcnQ6IChub2RlLCBkYXRhKSA9PiB7XG4gICAgICAgICAgLyoqIFRoaXMgZnVuY3Rpb24gTVVTVCBiZSBkZWZpbmVkIHRvIGVuYWJsZSBkcmFnZ2luZyBmb3IgdGhlIHRyZWUuXG4gICAgICAgICAgICogIFJldHVybiBmYWxzZSB0byBjYW5jZWwgZHJhZ2dpbmcgb2Ygbm9kZS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBkcmFnZ2FibGUgPSBfLmdldCh0aGlzLmNvbmZpZywgJ21vZGUnKSA9PT0gJ2VkaXQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBkcmFnZ2FibGU7XG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdFbnRlcjogKG5vZGUsIGRhdGEpID0+IHtcbiAgICAgICAgICAvKiogZGF0YS5vdGhlck5vZGUgbWF5IGJlIG51bGwgZm9yIG5vbi1mYW5jeXRyZWUgZHJvcHBhYmxlcy5cbiAgICAgICAgICAgKiAgUmV0dXJuIGZhbHNlIHRvIGRpc2FsbG93IGRyb3BwaW5nIG9uIG5vZGUuIEluIHRoaXMgY2FzZVxuICAgICAgICAgICAqICBkcmFnT3ZlciBhbmQgZHJhZ0xlYXZlIGFyZSBub3QgY2FsbGVkLlxuICAgICAgICAgICAqICBSZXR1cm4gJ292ZXInLCAnYmVmb3JlLCBvciAnYWZ0ZXInIHRvIGZvcmNlIGEgaGl0TW9kZS5cbiAgICAgICAgICAgKiAgUmV0dXJuIFsnYmVmb3JlJywgJ2FmdGVyJ10gdG8gcmVzdHJpY3QgYXZhaWxhYmxlIGhpdE1vZGVzLlxuICAgICAgICAgICAqICBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHdpbGwgY2FsYyB0aGUgaGl0TW9kZSBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24uXG4gICAgICAgICAgICovXG4gICAgICAgICAgLy8gUHJldmVudCBkcm9wcGluZyBhIHBhcmVudCBiZWxvdyBhbm90aGVyIHBhcmVudCAob25seSBzb3J0XG4gICAgICAgICAgLy8gbm9kZXMgdW5kZXIgdGhlIHNhbWUgcGFyZW50KVxuICAgICAgICAgIC8qICAgICAgICAgICBpZihub2RlLnBhcmVudCAhPT0gZGF0YS5vdGhlck5vZGUucGFyZW50KXtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgZHJvcHBpbmcgKm92ZXIqIGEgbm9kZSAod291bGQgY3JlYXRlIGEgY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXCJiZWZvcmVcIiwgXCJhZnRlclwiXTtcbiAgICAgICAgICAqL1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkcmFnRHJvcDogKG5vZGUsIGRhdGEpID0+IHtcbiAgICAgICAgICAvKiogVGhpcyBmdW5jdGlvbiBNVVNUIGJlIGRlZmluZWQgdG8gZW5hYmxlIGRyb3BwaW5nIG9mIGl0ZW1zIG9uXG4gICAgICAgICAgICogIHRoZSB0cmVlLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIC8vIGRhdGEub3RoZXJOb2RlLm1vdmVUbyhub2RlLCBkYXRhLmhpdE1vZGUpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wKG5vZGUsIGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBhdXRvQXBwbHk6IHRydWUsXG4gICAgICAgICAgYXV0b0V4cGFuZDogZmFsc2UsXG4gICAgICAgICAgY291bnRlcjogdHJ1ZSxcbiAgICAgICAgICBmdXp6eTogZmFsc2UsXG4gICAgICAgICAgaGlkZUV4cGFuZGVkQ291bnRlcjogdHJ1ZSxcbiAgICAgICAgICBoaWRlRXhwYW5kZXJzOiBmYWxzZSxcbiAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXG4gICAgICAgICAgbGVhdmVzT25seTogZmFsc2UsXG4gICAgICAgICAgbm9kYXRhOiB0cnVlLFxuICAgICAgICAgIG1vZGU6ICdkaW1tJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5pdDogKGV2ZW50LCBkYXRhKSA9PiB7IH0sXG4gICAgICBjbGljazogKGV2ZW50LCBkYXRhKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHRoaXMudHJlZS5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS5pbnRlcmFjdCh7IGVkYXRhOiB0aGlzLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoKSB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgYWN0aXZhdGU6IChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLnRyZWVFdmVudEVtaXR0ZXIuZW1pdCh7IHR5cGU6ICdub2RlU2VsZWN0JywgZGF0YTogZGF0YS5ub2RlIH0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmF0dGFjaENvbnRleHRNZW51KGRhdGEubm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5lYWNoTm9kZUFjdGlvbkJ1dHRvbihkYXRhLm5vZGUpO1xuICAgICAgICB9LCAxMCk7XG4gICAgICB9LFxuICAgICAgcmVuZGVyTm9kZTogKGV2ZW50LCBkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBkYXRhLm5vZGU7XG4gICAgICAgIGNvbnN0ICRub2RlU3BhbiA9ICQobm9kZS5zcGFuKTtcblxuICAgICAgICAvLyBjaGVjayBpZiBzcGFuIG9mIG5vZGUgYWxyZWFkeSByZW5kZXJlZFxuICAgICAgICBpZiAoISRub2RlU3Bhbi5kYXRhKCdyZW5kZXJlZCcpKSB7XG4gICAgICAgICAgdGhpcy5hdHRhY2hDb250ZXh0TWVudShub2RlKTtcbiAgICAgICAgICAvLyBzcGFuIHJlbmRlcmVkXG4gICAgICAgICAgJG5vZGVTcGFuLmRhdGEoJ3JlbmRlcmVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgZWFjaE5vZGVBY3Rpb25CdXR0b24obm9kZSkge1xuICAgIHRoaXMudmlzaWJpbGl0eSA9IHt9O1xuICAgIGlmICh0aGlzLmJ1bGtVcGxvYWRQcm9jZXNzaW5nU3RhdHVzKSB7XG4gICAgdGhpcy52aXNpYmlsaXR5LmFkZENoaWxkID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmlsaXR5LmFkZFNpYmxpbmcgPSAgZmFsc2U7XG4gICAgdGhpcy52aXNpYmlsaXR5LmFkZEZyb21MaWJyYXJ5ID0gIGZhbHNlO1xuICAgIHRoaXMudmlzaWJpbGl0eS5hZGRRdWVzdGlvbkZyb21MaWJyYXJ5ID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmlsaXR5LmNyZWF0ZU5ldyA9ICBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9kZUxldmVsID0gbm9kZS5nZXRMZXZlbCgpIC0gMTtcbiAgICAgIHRoaXMudmlzaWJpbGl0eS5hZGRDaGlsZCA9ICgobm9kZS5mb2xkZXIgPT09IGZhbHNlKSB8fCAobm9kZUxldmVsID49IHRoaXMuY29uZmlnLm1heERlcHRoKSkgPyBmYWxzZSA6IHRydWU7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICB0aGlzLnZpc2liaWxpdHkuYWRkU2libGluZyA9ICgobm9kZS5mb2xkZXIgPT09IHRydWUpICYmICghbm9kZS5kYXRhLnJvb3QpICYmICEoKG5vZGUuZ2V0TGV2ZWwoKSAtIDEpID4gdGhpcy5jb25maWcubWF4RGVwdGgpKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGlmIChub2RlTGV2ZWwgPT09IDApIHtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5LmFkZEZyb21MaWJyYXJ5ID0gXy5pc0VtcHR5KF8uZ2V0KHRoaXMuY29uZmlnLCAnY2hpbGRyZW4nKSkgfHwgXy5nZXQodGhpcy5jb25maWcsICdlbmFibGVRdWVzdGlvbkNyZWF0aW9uJykgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkuY3JlYXRlTmV3ID0gXy5pc0VtcHR5KF8uZ2V0KHRoaXMuY29uZmlnLCAnY2hpbGRyZW4nKSkgfHwgXy5nZXQodGhpcy5jb25maWcsICdlbmFibGVRdWVzdGlvbkNyZWF0aW9uJykgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkuYWRkUXVlc3Rpb25Gcm9tTGlicmFyeSA9ICFfLmlzRW1wdHkoXy5nZXQodGhpcy5jb25maWcsICdjaGlsZHJlbicpKSAmJiBfLmdldCh0aGlzLmNvbmZpZywgJ2VuYWJsZUFkZEZyb21MaWJyYXJ5JykgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBoaWVyYXJjaHlsZXZlbERhdGEgPSB0aGlzLmNvbmZpZy5oaWVyYXJjaHlbYGxldmVsJHtub2RlTGV2ZWx9YF07XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5LmFkZEZyb21MaWJyYXJ5ID0gKChub2RlLmZvbGRlciA9PT0gZmFsc2UpIHx8IF8uaXNFbXB0eShfLmdldChoaWVyYXJjaHlsZXZlbERhdGEsICdjaGlsZHJlbicpKSB8fCBfLmdldCh0aGlzLmNvbmZpZywgJ2VuYWJsZVF1ZXN0aW9uQ3JlYXRpb24nKSA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHRoaXMudmlzaWJpbGl0eS5jcmVhdGVOZXcgPSAoKG5vZGUuZm9sZGVyID09PSBmYWxzZSkgfHwgXy5pc0VtcHR5KF8uZ2V0KGhpZXJhcmNoeWxldmVsRGF0YSwgJ2NoaWxkcmVuJykpIHx8IF8uZ2V0KHRoaXMuY29uZmlnLCAnZW5hYmxlUXVlc3Rpb25DcmVhdGlvbicpID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eS5hZGRRdWVzdGlvbkZyb21MaWJyYXJ5ID0gKChub2RlLmZvbGRlciA9PT0gdHJ1ZSkgJiYgIV8uaXNFbXB0eShfLmdldChoaWVyYXJjaHlsZXZlbERhdGEsICdjaGlsZHJlbicpKSAmJiBfLmdldCh0aGlzLmNvbmZpZywgJ2VuYWJsZUFkZEZyb21MaWJyYXJ5JykgPT09IHRydWUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLCAnZWRpdG9yQ29uZmlnLmNvbmZpZy5yZW5kZXJUYXhvbm9teScpID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnZpc2liaWxpdHkuYWRkQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHRoaXMudmlzaWJpbGl0eS5hZGRTaWJsaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFkZENoaWxkKCkge1xuICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS5pbnRlcmFjdCh7IGVkYXRhOiB0aGlzLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FkZF9jaGlsZCcpIH0pO1xuICAgIGNvbnN0IHRyZWUgPSAkKHRoaXMudHJlZS5uYXRpdmVFbGVtZW50KS5mYW5jeXRyZWUoJ2dldFRyZWUnKTtcbiAgICBjb25zdCBub2RlQ29uZmlnID0gdGhpcy5jb25maWcuaGllcmFyY2h5W3RyZWUuZ2V0QWN0aXZlTm9kZSgpLmdldExldmVsKCldO1xuICAgIGNvbnN0IGNoaWxkcmVuVHlwZXMgPSBfLmdldChub2RlQ29uZmlnLCAnY2hpbGRyZW4uQ29udGVudCcpO1xuICAgIGlmICgoKCh0cmVlLmdldEFjdGl2ZU5vZGUoKS5nZXRMZXZlbCgpIC0gMSkgPj0gdGhpcy5jb25maWcubWF4RGVwdGgpKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDA3JykpO1xuICAgIH1cbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmFkZE5vZGUoJ2NoaWxkJyk7XG4gIH1cblxuICBhZGRTaWJsaW5nKCkge1xuICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS5pbnRlcmFjdCh7IGVkYXRhOiB0aGlzLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FkZF9zaWJsaW5nJykgfSk7XG4gICAgY29uc3QgdHJlZSA9ICQodGhpcy50cmVlLm5hdGl2ZUVsZW1lbnQpLmZhbmN5dHJlZSgnZ2V0VHJlZScpO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRyZWUuZ2V0QWN0aXZlTm9kZSgpO1xuICAgIGlmICghbm9kZS5kYXRhLnJvb3QpIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UuYWRkTm9kZSgnc2libGluZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLmVycm9yLjAwNycpKTtcbiAgICB9XG4gIH1cblxuICBnZXRBY3RpdmVOb2RlKCkge1xuICAgIHJldHVybiAkKHRoaXMudHJlZS5uYXRpdmVFbGVtZW50KS5mYW5jeXRyZWUoJ2dldFRyZWUnKS5nZXRBY3RpdmVOb2RlKCk7XG4gIH1cblxuICBhdHRhY2hDb250ZXh0TWVudShub2RlLCBhY3RpdmVOb2RlPykge1xuICAgIGlmIChfLmdldCh0aGlzLmNvbmZpZywgJ21vZGUnKSAhPT0gJ2VkaXQnIHx8IChub2RlLmRhdGEucm9vdCA9PT0gdHJ1ZSAmJiBfLmlzRW1wdHkodGhpcy5jb25maWcuaGllcmFyY2h5KSApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0ICRub2RlU3BhbiA9ICQobm9kZS5zcGFuKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoICAgLy8gVE9ETzo6IChub2RlLmRhdGEuY29udGVudFR5cGUgPT09ICdDb3Vyc2VVbml0JykgY2hlY2sgdGhpcyBjb25kaXRpb25cbiAgICBjb25zdCBtZW51VGVtcGxhdGUgPSBub2RlLmRhdGEucm9vdCA9PT0gdHJ1ZSA/IHRoaXMucm9vdE1lbnVUZW1wbGF0ZSA6IChub2RlLmRhdGEucm9vdCA9PT0gZmFsc2UgJiYgbm9kZS5mb2xkZXIgPT09IHRydWUgID8gdGhpcy5mb2xkZXJNZW51VGVtcGxhdGUgOiB0aGlzLmNvbnRlbnRNZW51VGVtcGxhdGUpO1xuICAgIGNvbnN0IGljb25zQnV0dG9uID0gJChtZW51VGVtcGxhdGUpO1xuICAgIGlmICgobm9kZS5nZXRMZXZlbCgpIC0gMSkgPj0gdGhpcy5jb25maWcubWF4RGVwdGgpIHtcbiAgICAgIGljb25zQnV0dG9uLmZpbmQoJyNhZGRjaGlsZCcpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGxldCBjb250ZXh0TWVudSA9ICQoJG5vZGVTcGFuWzBdKS5maW5kKGAjY29udGV4dE1lbnVgKTtcblxuICAgIGlmICghY29udGV4dE1lbnUubGVuZ3RoKSB7XG4gICAgICAkbm9kZVNwYW4uYXBwZW5kKGljb25zQnV0dG9uKTtcblxuICAgICAgaWYgKCFhY3RpdmVOb2RlKSB7XG4gICAgICAgIGljb25zQnV0dG9uLmhpZGUoKTtcbiAgICAgIH1cblxuICAgICAgJG5vZGVTcGFuWzBdLm9ubW91c2VvdmVyID0gKCkgPT4ge1xuICAgICAgICBpY29uc0J1dHRvbi5zaG93KCk7XG4gICAgICB9O1xuXG4gICAgICAkbm9kZVNwYW5bMF0ub25tb3VzZW91dCA9ICgpID0+IHtcbiAgICAgICAgaWNvbnNCdXR0b24uaGlkZSgpO1xuICAgICAgfTtcblxuICAgICAgY29udGV4dE1lbnUgPSAkKCRub2RlU3BhblswXSkuZmluZChgI2NvbnRleHRNZW51YCk7XG5cbiAgICAgIGNvbnRleHRNZW51Lm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNsb3NlUHJldk9wZW5lZERyb3BEb3duKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5TcGFuID0gJCh0aGlzLmdldEFjdGl2ZU5vZGUoKS5zcGFuKTtcblxuICAgICAgICAgIGNvbnN0IGRyb3BEb3duRWxlbWVudCA9ICQoblNwYW5bMF0pLmZpbmQoYCNjb250ZXh0TWVudURyb3BEb3duYCk7XG4gICAgICAgICAgZHJvcERvd25FbGVtZW50LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgICBkcm9wRG93bkVsZW1lbnQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgICAgICBfLmZvckVhY2goXy5nZXQoXy5maXJzdChkcm9wRG93bkVsZW1lbnQpLCAnY2hpbGRyZW4nKSwgaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuY2xvc2VQcmV2T3BlbmVkRHJvcERvd24oKTtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb25CdXR0b25zKGV2LmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgICAvLyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0pO1xuXG4gICAgICAkKCRub2RlU3BhblswXSkuZmluZChgI3JlbW92ZU5vZGVJY29uYCkub24oJ2NsaWNrJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNDb250ZW50ID0gIGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0eXBlJykgJiYgZXZlbnQuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2NvbnRlbnQnO1xuICAgICAgICB0aGlzLnJlbW92ZU5vZGUoaXNDb250ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgZHJvcE5vZGUodGFyZ2V0Tm9kZSwgY3VycmVudE5vZGUpIHtcblxuICAgIGxldCBkcm9wQWxsb3dlZDtcbiAgICBkcm9wQWxsb3dlZCA9IHRydWU7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIGlmIChjdXJyZW50Tm9kZS5vdGhlck5vZGUuZ2V0TGV2ZWwoKSA9PT0gdGFyZ2V0Tm9kZS5nZXRMZXZlbCgpICYmIGN1cnJlbnROb2RlLm90aGVyTm9kZS5mb2xkZXIgPT09IHRydWUgJiYgIGN1cnJlbnROb2RlLmhpdE1vZGUgIT09ICdvdmVyJykge1xuICAgICAgZHJvcEFsbG93ZWQgPSB0cnVlO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnROb2RlLm90aGVyTm9kZS5mb2xkZXIgPT09IHRydWUgJiYgKHRoaXMubWF4VHJlZURlcHRoKGN1cnJlbnROb2RlLm90aGVyTm9kZSkgKyAodGFyZ2V0Tm9kZS5nZXRMZXZlbCgpIC0gMSkpID4gXy5nZXQodGhpcy5jb25maWcsICdtYXhEZXB0aCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wTm90QWxsb3dlZCgpO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE5vZGUub3RoZXJOb2RlLmZvbGRlciA9PT0gZmFsc2UgJiYgIXRoaXMuY2hlY2tDb250ZW50QWRkaXRpb24odGFyZ2V0Tm9kZSwgY3VycmVudE5vZGUpKSB7XG4gICAgICBkcm9wQWxsb3dlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChkcm9wQWxsb3dlZCkge1xuICAgICAgICBjdXJyZW50Tm9kZS5vdGhlck5vZGUubW92ZVRvKHRhcmdldE5vZGUsIGN1cnJlbnROb2RlLmhpdE1vZGUpO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLm5leHRUcmVlU3RhdHVzKCdyZW9yZGVyJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybmluZyhgJHtjdXJyZW50Tm9kZS5vdGhlck5vZGUudGl0bGV9IGNhbm5vdCBiZSBhZGRlZCB0byAke2N1cnJlbnROb2RlLm5vZGUudGl0bGV9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgfVxuXG4gIGRyYWdEcm9wKG5vZGUsIGRhdGEpIHtcbiAgICBpZiAoKGRhdGEuaGl0TW9kZSA9PT0gJ2JlZm9yZScgfHwgZGF0YS5oaXRNb2RlID09PSAnYWZ0ZXInIHx8IGRhdGEuaGl0TW9kZSA9PT0gJ292ZXInKSAmJiBkYXRhLm5vZGUuZGF0YS5yb290KSB7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wTm90QWxsb3dlZCgpO1xuICAgIH1cbiAgICBpZiAoXy5oYXModGhpcy5jb25maWcsICdtYXhEZXB0aCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wTm9kZShub2RlLCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBkcm9wTm90QWxsb3dlZCgpIHtcbiAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm5pbmcoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDA3JykpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG1heFRyZWVEZXB0aChyb290KSB7XG4gICAgY29uc3QgYnVmZmVyID0gW3sgbm9kZTogcm9vdCwgZGVwdGg6IDEgfV07XG4gICAgbGV0IGN1cnJlbnQgPSBidWZmZXIucG9wKCk7XG4gICAgbGV0IG1heCA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50Lm5vZGUpIHtcbiAgICAgIC8vIEZpbmQgYWxsIGNoaWxkcmVuIG9mIHRoaXMgbm9kZS5cbiAgICAgIF8uZm9yRWFjaChjdXJyZW50Lm5vZGUuY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgICBidWZmZXIucHVzaCh7IG5vZGU6IGNoaWxkLCBkZXB0aDogY3VycmVudC5kZXB0aCArIDEgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChjdXJyZW50LmRlcHRoID4gbWF4KSB7XG4gICAgICAgIG1heCA9IGN1cnJlbnQuZGVwdGg7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gYnVmZmVyLnBvcCgpO1xuICAgIH1cbiAgICByZXR1cm4gbWF4O1xuICB9XG5cbiAgY2hlY2tDb250ZW50QWRkaXRpb24odGFyZ2V0Tm9kZSwgY29udGVudE5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAodGFyZ2V0Tm9kZS5mb2xkZXIgPT09IGZhbHNlICYmIChjb250ZW50Tm9kZS5oaXRNb2RlID09PSAnYmVmb3JlJyB8fCBjb250ZW50Tm9kZS5oaXRNb2RlID09PSAnYWZ0ZXInKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0YXJnZXROb2RlLmZvbGRlciA9PT0gZmFsc2UgJiYgY29udGVudE5vZGUuaGl0TW9kZSA9PT0gJ292ZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVDb25maWcgPSB0aGlzLmNvbmZpZy5oaWVyYXJjaHlbYGxldmVsJHt0YXJnZXROb2RlLmdldExldmVsKCkgLSAxfWBdO1xuICAgIGNvbnN0IGNvbnRlbnRQcmltYXJ5Q2F0ZWdvcmllcyA9IF8uZmxhdE1hcChfLmdldChub2RlQ29uZmlnLCAnY2hpbGRyZW4nKSk7XG4gICAgaWYgKCFfLmlzRW1wdHkoY29udGVudFByaW1hcnlDYXRlZ29yaWVzKSkge1xuICAgICAgcmV0dXJuIF8uaW5jbHVkZXMoY29udGVudFByaW1hcnlDYXRlZ29yaWVzLCBfLmdldChjb250ZW50Tm9kZSwgJ290aGVyTm9kZS5kYXRhLm1ldGFkYXRhLnByaW1hcnlDYXRlZ29yeScpKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmVtb3ZlTm9kZShpc0NvbnRlbnQ/OiBib29sZWFuKSB7XG4gICAgdGhpcy50cmVlRXZlbnRFbWl0dGVyLmVtaXQoeyB0eXBlOiAnZGVsZXRlTm9kZScsIGlzQ29udGVudCB9KTtcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UuaW50ZXJhY3QoeyBlZGF0YTogdGhpcy5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdkZWxldGUnKSB9KTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbkJ1dHRvbnMoZWwpIHtcbiAgICBjb25zb2xlLmxvZygnYWN0aW9uIGJ1dHRvbnMgLS0tLS0tLS0+JywgZWwuaWQpO1xuICAgIHN3aXRjaCAoZWwuaWQpIHtcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHRoaXMucmVtb3ZlTm9kZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FkZHNpYmxpbmcnOlxuICAgICAgICB0aGlzLmFkZFNpYmxpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGRjaGlsZCc6XG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGRyZXNvdXJjZSc6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFkZEZyb21MaWJyYXJ5KCkge1xuICAgIHRoaXMuZWRpdG9yU2VydmljZS5lbWl0c2hvd0xpYnJhcnlQYWdlRXZlbnQoJ3Nob3dMaWJyYXJ5UGFnZScpO1xuICB9XG4gIGdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoaWQ/KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpZCB8fCAnY29sbGVjdGlvbi10b2MnLFxuICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgIHN1YnR5cGU6ICdsYXVuY2gnLFxuICAgICAgcGFnZWlkOiB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkLFxuICAgICAgZXh0cmE6IHtcbiAgICAgICAgdmFsdWVzOiBbXy5nZXQodGhpcy5nZXRBY3RpdmVOb2RlKCksICdkYXRhJyldXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZU5ld0NvbnRlbnQoKSB7XG4gICAgdGhpcy50cmVlRXZlbnRFbWl0dGVyLmVtaXQoeyB0eXBlOiAnY3JlYXRlTmV3Q29udGVudCcgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uQ29tcG9uZW50RGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25Db21wb25lbnREZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59IiwiPGRpdiAjZmFuY3lUcmVlPjwvZGl2PlxuPGRpdiBjbGFzcz1cInNiLWZpeGVkLXdpdGgtd2hpdGViZyBwci0yMCBkLWZsZXggZmxleC1qYy1zcGFjZS1iZXR3ZWVuXCIgKm5nSWY9XCJjb25maWcgJiYgY29uZmlnLm1vZGUgPT09ICdlZGl0J1wiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMjVcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2ItYnRuLWNvdmVyXCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInZpc2liaWxpdHk/LmFkZFNpYmxpbmcgPyAnJyA6ICdzYi1kaXNhYmxlZCdcIiAoY2xpY2spPVwiYWRkU2libGluZygpO1wiXG4gICAgICAgIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1vdXRsaW5lLXByaW1hcnkgc2ItYnRuLW5vcm1hbCBzYi1idG4tcmFkaXVzIHAtMCBiLW5vbmVcIj48aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24gcGx1c1wiPjwvaT5cbiAgICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5hZGRfc2libGluZ19idG5fbGFiZWx9fSA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2ItYnRuLWNvdmVyXCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInZpc2liaWxpdHk/LmFkZENoaWxkID8gJycgOiAnc2ItZGlzYWJsZWQnXCIgKGNsaWNrKT1cImFkZENoaWxkKCk7XCJcbiAgICAgICAgY2xhc3M9XCJzYi1idG4gc2ItYnRuLW91dGxpbmUtcHJpbWFyeSBzYi1idG4tbm9ybWFsIHNiLWJ0bi1yYWRpdXMgYi1ub25lIHAtMFwiPjxpIGNsYXNzPVwiaWNvbiBwbHVzXCI+PC9pPlxuICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmFkZF9jaGlsZF9idG5fbGFiZWx9fSA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxidXR0b24gKm5nSWY9XCJjb25maWcub2JqZWN0VHlwZSAhPT0gJ1F1ZXN0aW9uU2V0J1wiIChjbGljayk9XCJhZGRGcm9tTGlicmFyeSgpO1wiXG4gICAgW2Rpc2FibGVkXT1cIiF2aXNpYmlsaXR5Py5hZGRGcm9tTGlicmFyeVwiXG4gICAgW25nQ2xhc3NdPVwiWyF2aXNpYmlsaXR5Py5hZGRGcm9tTGlicmFyeSA/ICdzYi1idG4tb3V0bGluZS1kaXNhYmxlZCcgOiAnJywgKHZpc2liaWxpdHk/LmFkZEZyb21MaWJyYXJ5ICYmIGJ1dHRvbkxvYWRlcnM/LmFkZEZyb21MaWJyYXJ5QnV0dG9uTG9hZGVyKSA/ICdzYi1idG4tbG9hZGluZy1zcGlubmVyIHNiLWJ0bi1vdXRsaW5lLWRpc2FibGVkJzogJyddXCJcbiAgICBjbGFzcz1cInNiLWJ0biBzYi1idG4tb3V0bGluZS1wcmltYXJ5IHNiLWJ0bi1ub3JtYWwgbXQtMTAgbXItMzBcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnYWRkX2Zyb21fbGlicmFyeScsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgPGkgY2xhc3M9XCJpY29uIHBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIiFidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiPjwvaT5cbiAgICA8ZGl2IGNsYXNzPVwic2ItbG9hZGluZy1zcGlubmVyXCIgKm5nSWY9XCJidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8L2Rpdj5cbiAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmFkZF9mcm9tX2xpYnJhcnlfYnRuX2xhYmVsfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gKm5nSWY9XCJjb25maWcub2JqZWN0VHlwZSA9PT0gJ1F1ZXN0aW9uU2V0J1wiIFtkaXNhYmxlZF09XCIhdmlzaWJpbGl0eT8uY3JlYXRlTmV3XCJcbiAgICBbbmdDbGFzc109XCJbIXZpc2liaWxpdHk/LmNyZWF0ZU5ldyA/ICdzYi1idG4tb3V0bGluZS1kaXNhYmxlZCcgOiAnJywgKHZpc2liaWxpdHk/LmNyZWF0ZU5ldyAmJiBidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlcikgPyAnc2ItYnRuLWxvYWRpbmctc3Bpbm5lciBzYi1idG4tb3V0bGluZS1kaXNhYmxlZCc6ICcnXVwiXG4gICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLXByaW1hcnkgbXQtMTAgbXItMzBcIiAoY2xpY2spPVwiY3JlYXRlTmV3Q29udGVudCgpXCJcbiAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnY3JlYXRlX25ldycsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgPGkgY2xhc3M9XCJpY29uIHBsdXNcIiAqbmdJZj1cIiFidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiPjwvaT5cbiAgICA8ZGl2IGNsYXNzPVwic2ItbG9hZGluZy1zcGlubmVyXCIgKm5nSWY9XCJidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8L2Rpdj5cbiAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmNyZWF0ZV9uZXdfYnRuX2xhYmVsfX1cbiAgPC9idXR0b24+XG48L2Rpdj4iXX0=
|
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFuY3ktdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9mYW5jeS10cmVlL2ZhbmN5LXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvZmFuY3ktdHJlZS9mYW5jeS10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQWlCLEtBQUssRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLFlBQVksRUFDekQsaUJBQWlCLEVBQ3JDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7QUFVL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFVcEMsTUFBTSxPQUFPLGtCQUFrQjtJQWtDN0IsWUFBbUIsV0FBd0IsRUFBVSxhQUE0QixFQUM5RCxnQkFBd0MsRUFBVSxhQUE0QixFQUM3RSxjQUE4QixFQUFVLEdBQXNCLEVBQy9ELGFBQTRCLEVBQVUsZUFBZ0M7UUFIdEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM5RCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDN0UsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDL0Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxvQkFBZSxH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Q0UsZ0JBQWdCLGlCQUdYLGlCQUFpQixDQUFDLElBQUk7c1RBR04sSUFBSTtzQkFBbEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNOLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixLQUFLO2dCQUNXLGdCQUFnQjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgJ2pxdWVyeS5mYW5jeXRyZWUnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmVlL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRpdG9yL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWxwZXIvaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbGVtZXRyeS90ZWxlbWV0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RvYXN0ZXIvdG9hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgIERpYWxjb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxjb2RlL2RpYWxjb2RlLnNlcnZpY2UnO1xuXG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1mYW5jeS10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZhbmN5LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mYW5jeS10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEZhbmN5VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnZmFuY3lUcmVlJykgcHVibGljIHRyZWU6IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIHB1YmxpYyBub2RlczogYW55O1xuICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogYW55O1xuICBASW5wdXQoICkgYnV0dG9uTG9hZGVyczogYW55O1xuICBAT3V0cHV0KCkgcHVibGljIHRyZWVFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgY29uZmlnOiBhbnk7XG4gIHB1YmxpYyBzaG93VHJlZTogYm9vbGVhbjtcbiAgcHVibGljIHZpc2liaWxpdHk6IGFueTtcbiAgcHVibGljIHNob3dBZGRDaGlsZEJ1dHRvbjogYm9vbGVhbjtcbiAgcHVibGljIHNob3dBZGRTaWJsaW5nQnV0dG9uOiBib29sZWFuO1xuICBwdWJsaWMgcm9vdE5vZGU6IGFueTtcbiAgcHVibGljIHNob3dMaWJyYXJ5QnV0dG9uID0gZmFsc2U7XG4gIHB1YmxpYyB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwdWJsaWMgYnVsa1VwbG9hZFByb2Nlc3NpbmdTdGF0dXMgPSBmYWxzZTtcbiAgcHVibGljIG5vZGVQYXJlbnREZXBlbmRlbnRNYXAgPSB7fTtcbiAgcHVibGljIHRyZWVEYXRhOiBhbnkgPSBbXTtcbiAgcHVibGljIGJyYW5jaGluZ09iamVjdCA9IHt9O1xuICBwdWJsaWMgcm9vdE1lbnVUZW1wbGF0ZSA9IGA8c3BhbiBjbGFzcz1cInVpIGRyb3Bkb3duIHNiLWRvdHRlZC1kcm9wZG93blwiIGF1dG9jbG9zZT1cIml0ZW1DbGlja1wiIHN1aWRyb3Bkb3duPVwiXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxzcGFuIGlkPVwiY29udGV4dE1lbnVcIiBjbGFzcz1cInAtMCB3LWF1dG9cIj48aSBjbGFzcz1cImljb24gZWxsaXBzaXMgdmVydGljYWwgc2ItY29sb3ItYmxhY2tcIj48L2k+PC9zcGFuPlxuICA8c3BhbiBpZD0gXCJjb250ZXh0TWVudURyb3BEb3duXCIgY2xhc3M9XCJtZW51IHRyYW5zaXRpb24gaGlkZGVuXCIgc3VpZHJvcGRvd25tZW51PVwiXCIgc3R5bGU9XCJcIj5cbiAgICA8ZGl2IGlkPVwiYWRkY2hpbGRcIiBjbGFzcz1cIml0ZW1cIj5BZGQgQ2hpbGQ8L2Rpdj5cbiAgPC9zcGFuPlxuICA8L3NwYW4+YDtcbiAgcHVibGljIGZvbGRlck1lbnVUZW1wbGF0ZSA9IGA8c3BhbiBpZD0gXCJyZW1vdmVOb2RlSWNvblwiPiA8aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiB0eXBlPVwiYnV0dG9uXCI+PC9pPiA8L3NwYW4+PHNwYW4gY2xhc3M9XCJ1aSBkcm9wZG93biBzYi1kb3R0ZWQtZHJvcGRvd25cIiBhdXRvY2xvc2U9XCJpdGVtQ2xpY2tcIiBzdWlkcm9wZG93bj1cIlwiIHRhYmluZGV4PVwiMFwiPlxuICA8c3BhbiBpZD1cImNvbnRleHRNZW51XCIgY2xhc3M9XCJwLTAgdy1hdXRvXCI+PGkgY2xhc3M9XCJpY29uIGVsbGlwc2lzIHZlcnRpY2FsIHNiLWNvbG9yLWJsYWNrXCI+PC9pPjwvc3Bhbj5cbiAgPHNwYW4gaWQ9IFwiY29udGV4dE1lbnVEcm9wRG93blwiIGNsYXNzPVwibWVudSB0cmFuc2l0aW9uIGhpZGRlblwiIHN1aWRyb3Bkb3dubWVudT1cIlwiIHN0eWxlPVwiXCI+XG4gICAgPGRpdiBpZD1cImFkZHNpYmxpbmdcIiBjbGFzcz1cIml0ZW1cIj5BZGQgU2libGluZzwvZGl2PlxuICAgIDxkaXYgaWQ9XCJhZGRjaGlsZFwiIGNsYXNzPVwiaXRlbVwiPkFkZCBDaGlsZDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJkZWxldGVcIiBjbGFzcz1cIml0ZW1cIj5EZWxldGU8L2Rpdj5cbiAgPC9zcGFuPlxuICA8L3NwYW4+YDtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBwdWJsaWMgY29udGVudE1lbnVUZW1wbGF0ZSA9IGA8c3BhbiBpZD1cImNvbnRleHRNZW51XCI+PHNwYW4gaWQ9IFwicmVtb3ZlTm9kZUljb25cIiB0eXBlPVwiY29udGVudFwiID4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgdHlwZT1cImJ1dHRvblwiPjwvaT4gPC9zcGFuPjwvc3Bhbj5gO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLCBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyB0ZWxlbWV0cnlTZXJ2aWNlOiBFZGl0b3JUZWxlbWV0cnlTZXJ2aWNlLCBwcml2YXRlIGhlbHBlclNlcnZpY2U6IEhlbHBlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLCBwcml2YXRlIGRpYWxjb2RlU2VydmljZTogRGlhbGNvZGVTZXJ2aWNlKSB7IH1cbiAgcHJpdmF0ZSBvbkNvbXBvbmVudERlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZmlnID0gXy5jbG9uZURlZXAodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZy5jb25maWcpO1xuICAgIHRoaXMuY29uZmlnLm1vZGUgPSAgXy5nZXQodGhpcy5jb25maWcsICdtb2RlJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIV8uaGFzKHRoaXMuY29uZmlnLCAnbWF4RGVwdGgnKSkgeyAvLyBUT0RPOjogcmV0aGluayB0aGlzXG4gICAgICB0aGlzLmNvbmZpZy5tYXhEZXB0aCA9IDQ7XG4gICAgfVxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5idWxrVXBsb2FkU3RhdHVzJC5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ3Byb2Nlc3NpbmcnKSB7XG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZFByb2Nlc3NpbmdTdGF0dXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkUHJvY2Vzc2luZ1N0YXR1cyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucmVuZGVyVHJlZSh0aGlzLmdldFRyZWVDb25maWcoKSk7XG4gIH1cblxuICBpbml0aWFsaXplKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLm5vZGVzLmRhdGE7XG4gICAgdGhpcy5ub2RlUGFyZW50RGVwZW5kZW50TWFwID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmdldFBhcmVudERlcGVuZGVudE1hcCh0aGlzLm5vZGVzLmRhdGEpO1xuICAgIGxldCB0cmVlRGF0YTtcbiAgICBpZiAoXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLCAnZWRpdG9yQ29uZmlnLmNvbmZpZy5yZW5kZXJUYXhvbm9teScpID09PSB0cnVlICYmIF8uaXNFbXB0eShfLmdldCh0aGlzLm5vZGVzLCAnZGF0YS5jaGlsZHJlbicpKSkge1xuICAgICAgdGhpcy5oZWxwZXJTZXJ2aWNlLmFkZERlcHRoVG9IaWVyYXJjaHkodGhpcy5ub2Rlcy5kYXRhLmNoaWxkcmVuKTtcbiAgICAgIHRoaXMubm9kZXMuZGF0YS5jaGlsZHJlbiA9ICAgdGhpcy5yZW1vdmVJbnRlcm1lZGlhdGVMZXZlbHNGcm9tRnJhbWV3b3JrKHRoaXMubm9kZXMuZGF0YS5jaGlsZHJlbik7XG4gICAgICB0cmVlRGF0YSA9IHRoaXMuYnVpbGRUcmVlRnJvbUZyYW1ld29yayh0aGlzLm5vZGVzLmRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmVlRGF0YSA9IHRoaXMuYnVpbGRUcmVlKHRoaXMubm9kZXMuZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuZWRpdG9yU2VydmljZS50cmVlRGF0YSA9IHRyZWVEYXRhO1xuICAgIHRoaXMucm9vdE5vZGUgPSBbe1xuICAgICAgaWQ6IGRhdGEuaWRlbnRpZmllciB8fCB1dWlkdjQoKSxcbiAgICAgIHRpdGxlOiBkYXRhLm5hbWUsXG4gICAgICB0b29sdGlwOiBkYXRhLm5hbWUsXG4gICAgICAuLi4oZGF0YS5jb250ZW50VHlwZSAmJiB7Y29udGVudFR5cGU6IGRhdGEuY29udGVudFR5cGV9KSxcbiAgICAgIHByaW1hcnlDYXRlZ29yeTogZGF0YS5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgICBvYmplY3RUeXBlOiBkYXRhLm9iamVjdFR5cGUsXG4gICAgICBtZXRhZGF0YTogXy5vbWl0KGRhdGEsIFsnY2hpbGRyZW4nLCAnY29sbGVjdGlvbnMnXSksXG4gICAgICBmb2xkZXI6IHRydWUsXG4gICAgICBjaGlsZHJlbjogdHJlZURhdGEsXG4gICAgICByb290OiB0cnVlLFxuICAgICAgaWNvbjogXy5nZXQodGhpcy5jb25maWcsICdpY29uQ2xhc3MnKVxuICAgIH1dO1xuICB9XG5cbiAgYnVpbGRUcmVlRnJvbUZyYW1ld29yayhkYXRhLCB0cmVlPywgbGV2ZWw/KSB7XG4gICAgdHJlZSA9IHRyZWUgfHwgW107XG4gICAgaWYgKGRhdGEuY2hpbGRyZW4pIHsgZGF0YS5jaGlsZHJlbiA9IF8uc29ydEJ5KGRhdGEuY2hpbGRyZW4sIFsnaW5kZXgnXSk7IH1cbiAgICBfLmZvckVhY2goZGF0YS5jaGlsZHJlbiwgKGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZFRyZWUgPSBbXTtcbiAgICAgIHRyZWUucHVzaCh7XG4gICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgdGl0bGU6IGNoaWxkLm5hbWUsXG4gICAgICAgIHRvb2x0aXA6IGNoaWxkLm5hbWUsXG4gICAgICAgIHByaW1hcnlDYXRlZ29yeTogY2hpbGQucHJpbWFyeUNhdGVnb3J5LFxuICAgICAgICBtZXRhZGF0YTogXy5vbWl0KGNoaWxkLCBbJ2NoaWxkcmVuJywgJ2NvbGxlY3Rpb25zJ10pLFxuICAgICAgICBmb2xkZXI6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZFRyZWUsXG4gICAgICAgIHJvb3Q6IGZhbHNlLFxuICAgICAgICBpY29uOiAnZmEgZmEtZm9sZGVyLW8nXG4gICAgICB9KTtcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLmJ1aWxkVHJlZUZyb21GcmFtZXdvcmsoY2hpbGQsIGNoaWxkVHJlZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyZWU7XG4gIH1cblxuICByZW1vdmVJbnRlcm1lZGlhdGVMZXZlbHNGcm9tRnJhbWV3b3JrKGRhdGEsIHBhcmVudERhdGE/KSB7XG4gICAgY29uc3QgdHJlZSA9IFtdO1xuICAgIF8uZm9yRWFjaChkYXRhLCBjaGlsZCA9PiB7XG4gICAgICBpZiAoY2hpbGQuZGVwdGggPT09IDAgfHwgY2hpbGQuZGVwdGggPT09IHRoaXMuaGVscGVyU2VydmljZS50cmVlRGVwdGgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICAuLi5fLm9taXQoY2hpbGQsIFsnY2hpbGRyZW4nXSksXG4gICAgICAgICAgLi4uKGNoaWxkLmNoaWxkcmVuICYmIHtjaGlsZHJlbjogdGhpcy5yZW1vdmVJbnRlcm1lZGlhdGVMZXZlbHNGcm9tRnJhbWV3b3JrKGNoaWxkLmNoaWxkcmVuLCBjaGlsZCl9KVxuICAgICAgICB9O1xuICAgICAgICB0cmVlLnB1c2goXG4gICAgICAgICAgbm9kZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICgoY2hpbGQuZGVwdGggIT09IDAgfHwgY2hpbGQuZGVwdGggIT09IHRoaXMuaGVscGVyU2VydmljZS50cmVlRGVwdGgpKSB7XG4gICAgICAgIHBhcmVudERhdGEuY2hpbGRyZW4gID0gXy5maWx0ZXIocGFyZW50RGF0YS5jaGlsZHJlbiwgaXRlbSA9PiAoaXRlbS5kZXB0aCA9PT0gMCB8fCBpdGVtLmRlcHRoID09PSB0aGlzLmhlbHBlclNlcnZpY2UudHJlZURlcHRoKSk7XG4gICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiBjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnJlbW92ZUludGVybWVkaWF0ZUxldmVsc0Zyb21GcmFtZXdvcmsoY2hpbGQuY2hpbGRyZW4sIGNoaWxkKTtcbiAgICAgICAgICBwYXJlbnREYXRhLmNoaWxkcmVuID0gXy5jb25jYXQocGFyZW50RGF0YS5jaGlsZHJlbiwgY2hpbGRyZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudERhdGEuY2hpbGRyZW4gPSBfLmNvbmNhdChwYXJlbnREYXRhLmNoaWxkcmVuLCBjaGlsZC5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gIV8uaXNFbXB0eSh0cmVlKSA/IHRyZWUgOiBfLmZsYXR0ZW4ocGFyZW50RGF0YS5jaGlsZHJlbik7XG4gIH1cblxuICBidWlsZFRyZWUoZGF0YSwgdHJlZT8sIGxldmVsPykge1xuICAgIHRyZWUgPSB0cmVlIHx8IFtdO1xuICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7IGRhdGEuY2hpbGRyZW4gPSBfLnNvcnRCeShkYXRhLmNoaWxkcmVuLCBbJ2luZGV4J10pOyB9XG4gICAgZGF0YS5sZXZlbCA9IGxldmVsID8gKGxldmVsICsgMSkgOiAxO1xuICAgIF8uZm9yRWFjaChkYXRhLmNoaWxkcmVuLCAoY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkVHJlZSA9IFtdO1xuICAgICAgdHJlZS5wdXNoKHtcbiAgICAgICAgaWQ6IGNoaWxkLmlkZW50aWZpZXIgfHwgdXVpZHY0KCksXG4gICAgICAgIHRpdGxlOiBjaGlsZC5uYW1lLFxuICAgICAgICB0b29sdGlwOiBjaGlsZC5uYW1lLFxuICAgICAgICAuLi4oY2hpbGQuY29udGVudFR5cGUgJiYge2NvbnRlbnRUeXBlOiBjaGlsZC5jb250ZW50VHlwZX0pLFxuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGNoaWxkLnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgb2JqZWN0VHlwZTogY2hpbGQub2JqZWN0VHlwZSxcbiAgICAgICAgbWV0YWRhdGE6IF8ub21pdChjaGlsZCwgWydjaGlsZHJlbicsICdjb2xsZWN0aW9ucyddKSxcbiAgICAgICAgZm9sZGVyOiB0aGlzLmlzRm9sZGVyKGNoaWxkKSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkVHJlZSxcbiAgICAgICAgcm9vdDogZmFsc2UsXG4gICAgICAgIGV4dHJhQ2xhc3NlczogIV8uaXNFbXB0eSh0aGlzLm5vZGVQYXJlbnREZXBlbmRlbnRNYXBbY2hpbGQuaWRlbnRpZmllcl0pID8gdGhpcy5ub2RlUGFyZW50RGVwZW5kZW50TWFwW2NoaWxkLmlkZW50aWZpZXJdIDogJycsXG4gICAgICAgIGljb246IHRoaXMuZ2V0SWNvbkNsYXNzKGNoaWxkLCBkYXRhLmxldmVsKVxuICAgICAgfSk7XG4gICAgICBpZiAoY2hpbGQudmlzaWJpbGl0eSA9PT0gJ1BhcmVudCcpIHtcbiAgICAgICAgdGhpcy5idWlsZFRyZWUoY2hpbGQsIGNoaWxkVHJlZSwgZGF0YS5sZXZlbCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyZWU7XG4gIH1cblxuICBpc0ZvbGRlcihjaGlsZDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNDb250ZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2hpbGQudmlzaWJpbGl0eSA9PT0gJ1BhcmVudCcgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0SWNvbkNsYXNzKGNoaWxkOiBhbnksIGxldmVsOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5pc0NvbnRlbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm4gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgfSBlbHNlIGlmIChjaGlsZC52aXNpYmlsaXR5ID09PSAnUGFyZW50Jykge1xuICAgICAgICByZXR1cm4gXy5nZXQodGhpcy5jb25maWcsIGBoaWVyYXJjaHkubGV2ZWwuJHtsZXZlbH0uaWNvbkNsYXNzYCkgfHwgJ2ZhIGZhLWZvbGRlci1vJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdmYSBmYS1maWxlLW8nO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29udGVudChjaGlsZDogYW55KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIHJldHVybiAoXy5nZXQodGhpcy5jb25maWcsICdvYmplY3RUeXBlJykgPT09ICdRdWVzdGlvblNldCcgJiYgY2hpbGQub2JqZWN0VHlwZSA9PT0gJ1F1ZXN0aW9uJyk7XG4gIH1cblxuICByZW5kZXJUcmVlKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0geyAuLi5vcHRpb25zLCAuLi50aGlzLm9wdGlvbnMgfTtcbiAgICAkKHRoaXMudHJlZS5uYXRpdmVFbGVtZW50KS5mYW5jeXRyZWUob3B0aW9ucyk7XG4gICAgdGhpcy50cmVlU2VydmljZS5zZXRUcmVlRWxlbWVudCh0aGlzLnRyZWUubmF0aXZlRWxlbWVudCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29ubmVjdG9ycykge1xuICAgICAgJCgnLmZhbmN5dHJlZS1jb250YWluZXInKS5hZGRDbGFzcygnZmFuY3l0cmVlLWNvbm5lY3RvcnMnKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLnJlbG9hZFRyZWUodGhpcy5yb290Tm9kZSk7XG4gICAgICBjb25zdCBwcmV2aW91c05vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldE5vZGVCeUlkKHRoaXMudHJlZVNlcnZpY2UucHJldmlvdXNOb2RlKTtcbiAgICAgIGlmICghXy5pc0VtcHR5KHByZXZpb3VzTm9kZSkpIHtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5zZXRBY3RpdmVOb2RlKHByZXZpb3VzTm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAoXy5nZXQocHJldmlvdXNOb2RlLCAnZm9sZGVyJykgIT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcHJldk5vZGVQYXJlbnQgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFBhcmVudCgpO1xuICAgICAgICBpZiAoIV8uaXNFbXB0eShwcmV2Tm9kZVBhcmVudC5kYXRhKSkge1xuICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2Uuc2V0QWN0aXZlTm9kZShwcmV2Tm9kZVBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy50cmVlU2VydmljZS5nZXRGaXJzdENoaWxkKCk7XG4gICAgICByb290Tm9kZS5zZXRFeHBhbmRlZCh0cnVlKTtcbiAgICAgIHRoaXMuZWFjaE5vZGVBY3Rpb25CdXR0b24ocm9vdE5vZGUpO1xuICAgICAgdGhpcy5kaWFsY29kZVNlcnZpY2UucmVhZEV4aXN0aW5nUXJDb2RlKCk7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLm5leHRUcmVlU3RhdHVzKCdsb2FkZWQnKTtcbiAgICAgIHRoaXMuc2hvd1RyZWUgPSB0cnVlO1xuICAgIH0pO1xuICAgIGlmIChfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29uZmlnLnJlbmRlclRheG9ub215JykgPT09IHRydWUgJiYgXy5pc0VtcHR5KF8uZ2V0KHRoaXMubm9kZXMsICdkYXRhLmNoaWxkcmVuJykpKSB7XG4gICAgICBfLmZvckVhY2godGhpcy5yb290Tm9kZVswXT8uY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlVHJlZU5vZGVNZXRhZGF0YShjaGlsZC5tZXRhZGF0YSwgY2hpbGQuaWQsIGNoaWxkLnByaW1hcnlDYXRlZ29yeSwgY2hpbGQub2JqZWN0VHlwZSk7XG4gICAgICAgICAgXy5mb3JFYWNoKGNoaWxkLmNoaWxkcmVuLCAoZWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlVHJlZU5vZGVNZXRhZGF0YShlbC5tZXRhZGF0YSwgZWwuaWQsIGVsLnByaW1hcnlDYXRlZ29yeSwgZWwub2JqZWN0VHlwZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRUcmVlQ29uZmlnKCkge1xuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcbiAgICAgIGV4dGVuc2lvbnM6IFsnZ2x5cGgnLCAnZG5kNSddLFxuICAgICAgY2xpY2tGb2xkZXJNb2RlOiAzLFxuICAgICAgc291cmNlOiB0aGlzLnJvb3ROb2RlLFxuICAgICAgZXNjYXBlVGl0bGVzOiB0cnVlLFxuICAgICAgZ2x5cGg6IHtcbiAgICAgICAgcHJlc2V0OiAnYXdlc29tZTQnLFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICBmb2xkZXI6ICdpY29uIGZvbGRlciBzYi1mYW5jeVRyZWUtaWNvbicsXG4gICAgICAgICAgZm9sZGVyT3BlbjogJ2ljb24gZm9sZGVyIG91dGxpbmUgc2ItZmFuY3lUcmVlLWljb24nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkbmQ1OiB7XG4gICAgICAgIGF1dG9FeHBhbmRNUzogNDAwLFxuICAgICAgICAvLyBmb2N1c09uQ2xpY2s6IHRydWUsXG4gICAgICAgIHByZXZlbnRWb2lkTW92ZXM6IHRydWUsIC8vIFByZXZlbnQgZHJvcHBpbmcgbm9kZXMgJ2JlZm9yZSBzZWxmJywgZXRjLlxuICAgICAgICBwcmV2ZW50UmVjdXJzaW9uOiB0cnVlLCAvLyBQcmV2ZW50IGRyb3BwaW5nIG5vZGVzIG9uIG93biBkZXNjZW5kYW50c1xuICAgICAgICBkcmFnU3RhcnQ6IChub2RlLCBkYXRhKSA9PiB7XG4gICAgICAgICAgLyoqIFRoaXMgZnVuY3Rpb24gTVVTVCBiZSBkZWZpbmVkIHRvIGVuYWJsZSBkcmFnZ2luZyBmb3IgdGhlIHRyZWUuXG4gICAgICAgICAgICogIFJldHVybiBmYWxzZSB0byBjYW5jZWwgZHJhZ2dpbmcgb2Ygbm9kZS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBkcmFnZ2FibGUgPSBfLmdldCh0aGlzLmNvbmZpZywgJ21vZGUnKSA9PT0gJ2VkaXQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBkcmFnZ2FibGU7XG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdFbnRlcjogKG5vZGUsIGRhdGEpID0+IHtcbiAgICAgICAgICAvKiogZGF0YS5vdGhlck5vZGUgbWF5IGJlIG51bGwgZm9yIG5vbi1mYW5jeXRyZWUgZHJvcHBhYmxlcy5cbiAgICAgICAgICAgKiAgUmV0dXJuIGZhbHNlIHRvIGRpc2FsbG93IGRyb3BwaW5nIG9uIG5vZGUuIEluIHRoaXMgY2FzZVxuICAgICAgICAgICAqICBkcmFnT3ZlciBhbmQgZHJhZ0xlYXZlIGFyZSBub3QgY2FsbGVkLlxuICAgICAgICAgICAqICBSZXR1cm4gJ292ZXInLCAnYmVmb3JlLCBvciAnYWZ0ZXInIHRvIGZvcmNlIGEgaGl0TW9kZS5cbiAgICAgICAgICAgKiAgUmV0dXJuIFsnYmVmb3JlJywgJ2FmdGVyJ10gdG8gcmVzdHJpY3QgYXZhaWxhYmxlIGhpdE1vZGVzLlxuICAgICAgICAgICAqICBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHdpbGwgY2FsYyB0aGUgaGl0TW9kZSBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24uXG4gICAgICAgICAgICovXG4gICAgICAgICAgLy8gUHJldmVudCBkcm9wcGluZyBhIHBhcmVudCBiZWxvdyBhbm90aGVyIHBhcmVudCAob25seSBzb3J0XG4gICAgICAgICAgLy8gbm9kZXMgdW5kZXIgdGhlIHNhbWUgcGFyZW50KVxuICAgICAgICAgIC8qICAgICAgICAgICBpZihub2RlLnBhcmVudCAhPT0gZGF0YS5vdGhlck5vZGUucGFyZW50KXtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgZHJvcHBpbmcgKm92ZXIqIGEgbm9kZSAod291bGQgY3JlYXRlIGEgY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXCJiZWZvcmVcIiwgXCJhZnRlclwiXTtcbiAgICAgICAgICAqL1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkcmFnRHJvcDogKG5vZGUsIGRhdGEpID0+IHtcbiAgICAgICAgICAvKiogVGhpcyBmdW5jdGlvbiBNVVNUIGJlIGRlZmluZWQgdG8gZW5hYmxlIGRyb3BwaW5nIG9mIGl0ZW1zIG9uXG4gICAgICAgICAgICogIHRoZSB0cmVlLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIC8vIGRhdGEub3RoZXJOb2RlLm1vdmVUbyhub2RlLCBkYXRhLmhpdE1vZGUpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wKG5vZGUsIGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBhdXRvQXBwbHk6IHRydWUsXG4gICAgICAgICAgYXV0b0V4cGFuZDogZmFsc2UsXG4gICAgICAgICAgY291bnRlcjogdHJ1ZSxcbiAgICAgICAgICBmdXp6eTogZmFsc2UsXG4gICAgICAgICAgaGlkZUV4cGFuZGVkQ291bnRlcjogdHJ1ZSxcbiAgICAgICAgICBoaWRlRXhwYW5kZXJzOiBmYWxzZSxcbiAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXG4gICAgICAgICAgbGVhdmVzT25seTogZmFsc2UsXG4gICAgICAgICAgbm9kYXRhOiB0cnVlLFxuICAgICAgICAgIG1vZGU6ICdkaW1tJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5pdDogKGV2ZW50LCBkYXRhKSA9PiB7IH0sXG4gICAgICBjbGljazogKGV2ZW50LCBkYXRhKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHRoaXMudHJlZS5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS5pbnRlcmFjdCh7IGVkYXRhOiB0aGlzLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoKSB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgYWN0aXZhdGU6IChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLnRyZWVFdmVudEVtaXR0ZXIuZW1pdCh7IHR5cGU6ICdub2RlU2VsZWN0JywgZGF0YTogZGF0YS5ub2RlIH0pO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnByZXZpb3VzTm9kZSA9IF8uZ2V0KGRhdGEsICdub2RlLmRhdGEuaWQnKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hdHRhY2hDb250ZXh0TWVudShkYXRhLm5vZGUsIHRydWUpO1xuICAgICAgICAgIHRoaXMuZWFjaE5vZGVBY3Rpb25CdXR0b24oZGF0YS5ub2RlKTtcbiAgICAgICAgfSwgMTApO1xuICAgICAgfSxcbiAgICAgIHJlbmRlck5vZGU6IChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gZGF0YS5ub2RlO1xuICAgICAgICBjb25zdCAkbm9kZVNwYW4gPSAkKG5vZGUuc3Bhbik7XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgc3BhbiBvZiBub2RlIGFscmVhZHkgcmVuZGVyZWRcbiAgICAgICAgaWYgKCEkbm9kZVNwYW4uZGF0YSgncmVuZGVyZWQnKSkge1xuICAgICAgICAgIHRoaXMuYXR0YWNoQ29udGV4dE1lbnUobm9kZSk7XG4gICAgICAgICAgLy8gc3BhbiByZW5kZXJlZFxuICAgICAgICAgICRub2RlU3Bhbi5kYXRhKCdyZW5kZXJlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIGVhY2hOb2RlQWN0aW9uQnV0dG9uKG5vZGUpIHtcbiAgICB0aGlzLnZpc2liaWxpdHkgPSB7fTtcbiAgICBpZiAodGhpcy5idWxrVXBsb2FkUHJvY2Vzc2luZ1N0YXR1cykge1xuICAgIHRoaXMudmlzaWJpbGl0eS5hZGRDaGlsZCA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJpbGl0eS5hZGRTaWJsaW5nID0gIGZhbHNlO1xuICAgIHRoaXMudmlzaWJpbGl0eS5hZGRGcm9tTGlicmFyeSA9ICBmYWxzZTtcbiAgICB0aGlzLnZpc2liaWxpdHkuYWRkUXVlc3Rpb25Gcm9tTGlicmFyeSA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJpbGl0eS5jcmVhdGVOZXcgPSAgZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGVMZXZlbCA9IG5vZGUuZ2V0TGV2ZWwoKSAtIDE7XG4gICAgICB0aGlzLnZpc2liaWxpdHkuYWRkQ2hpbGQgPSAoKG5vZGUuZm9sZGVyID09PSBmYWxzZSkgfHwgKG5vZGVMZXZlbCA+PSB0aGlzLmNvbmZpZy5tYXhEZXB0aCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgdGhpcy52aXNpYmlsaXR5LmFkZFNpYmxpbmcgPSAoKG5vZGUuZm9sZGVyID09PSB0cnVlKSAmJiAoIW5vZGUuZGF0YS5yb290KSAmJiAhKChub2RlLmdldExldmVsKCkgLSAxKSA+IHRoaXMuY29uZmlnLm1heERlcHRoKSkgPyB0cnVlIDogZmFsc2U7XG4gICAgICBpZiAobm9kZUxldmVsID09PSAwKSB7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eS5hZGRGcm9tTGlicmFyeSA9IF8uaXNFbXB0eShfLmdldCh0aGlzLmNvbmZpZywgJ2NoaWxkcmVuJykpIHx8IF8uZ2V0KHRoaXMuY29uZmlnLCAnZW5hYmxlUXVlc3Rpb25DcmVhdGlvbicpID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5LmNyZWF0ZU5ldyA9IF8uaXNFbXB0eShfLmdldCh0aGlzLmNvbmZpZywgJ2NoaWxkcmVuJykpIHx8IF8uZ2V0KHRoaXMuY29uZmlnLCAnZW5hYmxlUXVlc3Rpb25DcmVhdGlvbicpID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5LmFkZFF1ZXN0aW9uRnJvbUxpYnJhcnkgPSAhXy5pc0VtcHR5KF8uZ2V0KHRoaXMuY29uZmlnLCAnY2hpbGRyZW4nKSkgJiYgXy5nZXQodGhpcy5jb25maWcsICdlbmFibGVBZGRGcm9tTGlicmFyeScpID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaGllcmFyY2h5bGV2ZWxEYXRhID0gdGhpcy5jb25maWcuaGllcmFyY2h5W2BsZXZlbCR7bm9kZUxldmVsfWBdO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHRoaXMudmlzaWJpbGl0eS5hZGRGcm9tTGlicmFyeSA9ICgobm9kZS5mb2xkZXIgPT09IGZhbHNlKSB8fCBfLmlzRW1wdHkoXy5nZXQoaGllcmFyY2h5bGV2ZWxEYXRhLCAnY2hpbGRyZW4nKSkgfHwgXy5nZXQodGhpcy5jb25maWcsICdlbmFibGVRdWVzdGlvbkNyZWF0aW9uJykgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICB0aGlzLnZpc2liaWxpdHkuY3JlYXRlTmV3ID0gKChub2RlLmZvbGRlciA9PT0gZmFsc2UpIHx8IF8uaXNFbXB0eShfLmdldChoaWVyYXJjaHlsZXZlbERhdGEsICdjaGlsZHJlbicpKSB8fCBfLmdldCh0aGlzLmNvbmZpZywgJ2VuYWJsZVF1ZXN0aW9uQ3JlYXRpb24nKSA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkuYWRkUXVlc3Rpb25Gcm9tTGlicmFyeSA9ICgobm9kZS5mb2xkZXIgPT09IHRydWUpICYmICFfLmlzRW1wdHkoXy5nZXQoaGllcmFyY2h5bGV2ZWxEYXRhLCAnY2hpbGRyZW4nKSkgJiYgXy5nZXQodGhpcy5jb25maWcsICdlbmFibGVBZGRGcm9tTGlicmFyeScpID09PSB0cnVlKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZSwgJ2VkaXRvckNvbmZpZy5jb25maWcucmVuZGVyVGF4b25vbXknKSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy52aXNpYmlsaXR5LmFkZENoaWxkID0gZmFsc2U7XG4gICAgICB0aGlzLnZpc2liaWxpdHkuYWRkU2libGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhZGRDaGlsZCgpIHtcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UuaW50ZXJhY3QoeyBlZGF0YTogdGhpcy5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdhZGRfY2hpbGQnKSB9KTtcbiAgICBjb25zdCB0cmVlID0gJCh0aGlzLnRyZWUubmF0aXZlRWxlbWVudCkuZmFuY3l0cmVlKCdnZXRUcmVlJyk7XG4gICAgY29uc3Qgbm9kZUNvbmZpZyA9IHRoaXMuY29uZmlnLmhpZXJhcmNoeVt0cmVlLmdldEFjdGl2ZU5vZGUoKS5nZXRMZXZlbCgpXTtcbiAgICBjb25zdCBjaGlsZHJlblR5cGVzID0gXy5nZXQobm9kZUNvbmZpZywgJ2NoaWxkcmVuLkNvbnRlbnQnKTtcbiAgICBpZiAoKCgodHJlZS5nZXRBY3RpdmVOb2RlKCkuZ2V0TGV2ZWwoKSAtIDEpID49IHRoaXMuY29uZmlnLm1heERlcHRoKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLmVycm9yLjAwNycpKTtcbiAgICB9XG4gICAgdGhpcy50cmVlU2VydmljZS5hZGROb2RlKCdjaGlsZCcpO1xuICB9XG5cbiAgYWRkU2libGluZygpIHtcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UuaW50ZXJhY3QoeyBlZGF0YTogdGhpcy5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdhZGRfc2libGluZycpIH0pO1xuICAgIGNvbnN0IHRyZWUgPSAkKHRoaXMudHJlZS5uYXRpdmVFbGVtZW50KS5mYW5jeXRyZWUoJ2dldFRyZWUnKTtcblxuICAgIGNvbnN0IG5vZGUgPSB0cmVlLmdldEFjdGl2ZU5vZGUoKTtcbiAgICBpZiAoIW5vZGUuZGF0YS5yb290KSB7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLmFkZE5vZGUoJ3NpYmxpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMDcnKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0aXZlTm9kZSgpIHtcbiAgICByZXR1cm4gJCh0aGlzLnRyZWUubmF0aXZlRWxlbWVudCkuZmFuY3l0cmVlKCdnZXRUcmVlJykuZ2V0QWN0aXZlTm9kZSgpO1xuICB9XG5cbiAgYXR0YWNoQ29udGV4dE1lbnUobm9kZSwgYWN0aXZlTm9kZT8pIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgaWYgKHRoaXMuYnVsa1VwbG9hZFByb2Nlc3NpbmdTdGF0dXMgfHwgXy5nZXQodGhpcy5jb25maWcsICdtb2RlJykgIT09ICdlZGl0JyB8fCAobm9kZS5kYXRhLnJvb3QgPT09IHRydWUgJiYgXy5pc0VtcHR5KHRoaXMuY29uZmlnLmhpZXJhcmNoeSkgKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCAkbm9kZVNwYW4gPSAkKG5vZGUuc3Bhbik7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aCAgIC8vIFRPRE86OiAobm9kZS5kYXRhLmNvbnRlbnRUeXBlID09PSAnQ291cnNlVW5pdCcpIGNoZWNrIHRoaXMgY29uZGl0aW9uXG4gICAgY29uc3QgbWVudVRlbXBsYXRlID0gbm9kZS5kYXRhLnJvb3QgPT09IHRydWUgPyB0aGlzLnJvb3RNZW51VGVtcGxhdGUgOiAobm9kZS5kYXRhLnJvb3QgPT09IGZhbHNlICYmIG5vZGUuZm9sZGVyID09PSB0cnVlICA/IHRoaXMuZm9sZGVyTWVudVRlbXBsYXRlIDogdGhpcy5jb250ZW50TWVudVRlbXBsYXRlKTtcbiAgICBjb25zdCBpY29uc0J1dHRvbiA9ICQobWVudVRlbXBsYXRlKTtcbiAgICBpZiAoKG5vZGUuZ2V0TGV2ZWwoKSAtIDEpID49IHRoaXMuY29uZmlnLm1heERlcHRoKSB7XG4gICAgICBpY29uc0J1dHRvbi5maW5kKCcjYWRkY2hpbGQnKS5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dE1lbnUgPSAkKCRub2RlU3BhblswXSkuZmluZChgI2NvbnRleHRNZW51YCk7XG5cbiAgICBpZiAoIWNvbnRleHRNZW51Lmxlbmd0aCkge1xuICAgICAgJG5vZGVTcGFuLmFwcGVuZChpY29uc0J1dHRvbik7XG5cbiAgICAgIGlmICghYWN0aXZlTm9kZSkge1xuICAgICAgICBpY29uc0J1dHRvbi5oaWRlKCk7XG4gICAgICB9XG5cbiAgICAgICRub2RlU3BhblswXS5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgaWNvbnNCdXR0b24uc2hvdygpO1xuICAgICAgfTtcblxuICAgICAgJG5vZGVTcGFuWzBdLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGljb25zQnV0dG9uLmhpZGUoKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnRleHRNZW51ID0gJCgkbm9kZVNwYW5bMF0pLmZpbmQoYCNjb250ZXh0TWVudWApO1xuXG4gICAgICBjb250ZXh0TWVudS5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5jbG9zZVByZXZPcGVuZWREcm9wRG93bigpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBuU3BhbiA9ICQodGhpcy5nZXRBY3RpdmVOb2RlKCkuc3Bhbik7XG5cbiAgICAgICAgICBjb25zdCBkcm9wRG93bkVsZW1lbnQgPSAkKG5TcGFuWzBdKS5maW5kKGAjY29udGV4dE1lbnVEcm9wRG93bmApO1xuICAgICAgICAgIGRyb3BEb3duRWxlbWVudC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgZHJvcERvd25FbGVtZW50LmFkZENsYXNzKCd2aXNpYmxlJyk7XG4gICAgICAgICAgXy5mb3JFYWNoKF8uZ2V0KF8uZmlyc3QoZHJvcERvd25FbGVtZW50KSwgJ2NoaWxkcmVuJyksIGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNsb3NlUHJldk9wZW5lZERyb3BEb3duKCk7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uQnV0dG9ucyhldi5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgLy8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9KTtcblxuICAgICAgJCgkbm9kZVNwYW5bMF0pLmZpbmQoYCNyZW1vdmVOb2RlSWNvbmApLm9uKCdjbGljaycsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQ29udGVudCA9ICBldmVudC5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgndHlwZScpICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdjb250ZW50JztcbiAgICAgICAgdGhpcy5yZW1vdmVOb2RlKGlzQ29udGVudCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGRyb3BOb2RlKHRhcmdldE5vZGUsIGN1cnJlbnROb2RlKSB7XG5cbiAgICBsZXQgZHJvcEFsbG93ZWQ7XG4gICAgZHJvcEFsbG93ZWQgPSB0cnVlO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICBpZiAoY3VycmVudE5vZGUub3RoZXJOb2RlLmdldExldmVsKCkgPT09IHRhcmdldE5vZGUuZ2V0TGV2ZWwoKSAmJiBjdXJyZW50Tm9kZS5vdGhlck5vZGUuZm9sZGVyID09PSB0cnVlICYmICBjdXJyZW50Tm9kZS5oaXRNb2RlICE9PSAnb3ZlcicpIHtcbiAgICAgIGRyb3BBbGxvd2VkID0gdHJ1ZTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgfSBlbHNlIGlmIChjdXJyZW50Tm9kZS5vdGhlck5vZGUuZm9sZGVyID09PSB0cnVlICYmICh0aGlzLm1heFRyZWVEZXB0aChjdXJyZW50Tm9kZS5vdGhlck5vZGUpICsgKHRhcmdldE5vZGUuZ2V0TGV2ZWwoKSAtIDEpKSA+IF8uZ2V0KHRoaXMuY29uZmlnLCAnbWF4RGVwdGgnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJvcE5vdEFsbG93ZWQoKTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnROb2RlLm90aGVyTm9kZS5mb2xkZXIgPT09IGZhbHNlICYmICF0aGlzLmNoZWNrQ29udGVudEFkZGl0aW9uKHRhcmdldE5vZGUsIGN1cnJlbnROb2RlKSkge1xuICAgICAgZHJvcEFsbG93ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZHJvcEFsbG93ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlRGVwZW5kZW5jeSA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXREZXBlbmRlbnROb2RlcyhjdXJyZW50Tm9kZS5vdGhlck5vZGUuZGF0YS5pZCk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShjdXJyZW50Tm9kZURlcGVuZGVuY3kpKSB7XG4gICAgICAgIHRoaXMubW92ZURlcGVuZGVudE5vZGVzKHRhcmdldE5vZGUsIGN1cnJlbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnROb2RlLm90aGVyTm9kZS5tb3ZlVG8odGFyZ2V0Tm9kZSwgY3VycmVudE5vZGUuaGl0TW9kZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLm5leHRUcmVlU3RhdHVzKCdyZW9yZGVyJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybmluZyhgJHtjdXJyZW50Tm9kZS5vdGhlck5vZGUudGl0bGV9IGNhbm5vdCBiZSBhZGRlZCB0byAke2N1cnJlbnROb2RlLm5vZGUudGl0bGV9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgfVxuXG4gIGRyYWdEcm9wKG5vZGUsIGRhdGEpIHtcbiAgICBpZiAoKGRhdGEuaGl0TW9kZSA9PT0gJ2JlZm9yZScgfHwgZGF0YS5oaXRNb2RlID09PSAnYWZ0ZXInIHx8IGRhdGEuaGl0TW9kZSA9PT0gJ292ZXInKSAmJiBkYXRhLm5vZGUuZGF0YS5yb290KSB7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wTm90QWxsb3dlZCgpO1xuICAgIH1cbiAgICBpZiAoXy5oYXModGhpcy5jb25maWcsICdtYXhEZXB0aCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wTm9kZShub2RlLCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBkcm9wTm90QWxsb3dlZCgpIHtcbiAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm5pbmcoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDA3JykpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG1heFRyZWVEZXB0aChyb290KSB7XG4gICAgY29uc3QgYnVmZmVyID0gW3sgbm9kZTogcm9vdCwgZGVwdGg6IDEgfV07XG4gICAgbGV0IGN1cnJlbnQgPSBidWZmZXIucG9wKCk7XG4gICAgbGV0IG1heCA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50Lm5vZGUpIHtcbiAgICAgIC8vIEZpbmQgYWxsIGNoaWxkcmVuIG9mIHRoaXMgbm9kZS5cbiAgICAgIF8uZm9yRWFjaChjdXJyZW50Lm5vZGUuY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgICBidWZmZXIucHVzaCh7IG5vZGU6IGNoaWxkLCBkZXB0aDogY3VycmVudC5kZXB0aCArIDEgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChjdXJyZW50LmRlcHRoID4gbWF4KSB7XG4gICAgICAgIG1heCA9IGN1cnJlbnQuZGVwdGg7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gYnVmZmVyLnBvcCgpO1xuICAgIH1cbiAgICByZXR1cm4gbWF4O1xuICB9XG5cbiAgY2hlY2tDb250ZW50QWRkaXRpb24odGFyZ2V0Tm9kZSwgY29udGVudE5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAodGFyZ2V0Tm9kZS5mb2xkZXIgPT09IGZhbHNlICYmIChjb250ZW50Tm9kZS5oaXRNb2RlID09PSAnYmVmb3JlJyB8fCBjb250ZW50Tm9kZS5oaXRNb2RlID09PSAnYWZ0ZXInKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0YXJnZXROb2RlLmZvbGRlciA9PT0gZmFsc2UgJiYgY29udGVudE5vZGUuaGl0TW9kZSA9PT0gJ292ZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVDb25maWcgPSB0aGlzLmNvbmZpZy5oaWVyYXJjaHlbYGxldmVsJHt0YXJnZXROb2RlLmdldExldmVsKCkgLSAxfWBdO1xuICAgIGNvbnN0IGNvbnRlbnRQcmltYXJ5Q2F0ZWdvcmllcyA9IF8uZmxhdE1hcChfLmdldChub2RlQ29uZmlnLCAnY2hpbGRyZW4nKSk7XG4gICAgaWYgKCFfLmlzRW1wdHkoY29udGVudFByaW1hcnlDYXRlZ29yaWVzKSkge1xuICAgICAgcmV0dXJuIF8uaW5jbHVkZXMoY29udGVudFByaW1hcnlDYXRlZ29yaWVzLCBfLmdldChjb250ZW50Tm9kZSwgJ290aGVyTm9kZS5kYXRhLm1ldGFkYXRhLnByaW1hcnlDYXRlZ29yeScpKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmVtb3ZlTm9kZShpc0NvbnRlbnQ/OiBib29sZWFuKSB7XG4gICAgdGhpcy50cmVlRXZlbnRFbWl0dGVyLmVtaXQoeyB0eXBlOiAnZGVsZXRlTm9kZScsIGlzQ29udGVudCB9KTtcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UuaW50ZXJhY3QoeyBlZGF0YTogdGhpcy5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdkZWxldGUnKSB9KTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbkJ1dHRvbnMoZWwpIHtcbiAgICBjb25zb2xlLmxvZygnYWN0aW9uIGJ1dHRvbnMgLS0tLS0tLS0+JywgZWwuaWQpO1xuICAgIHN3aXRjaCAoZWwuaWQpIHtcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHRoaXMucmVtb3ZlTm9kZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FkZHNpYmxpbmcnOlxuICAgICAgICB0aGlzLmFkZFNpYmxpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGRjaGlsZCc6XG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGRyZXNvdXJjZSc6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFkZEZyb21MaWJyYXJ5KCkge1xuICAgIHRoaXMuZWRpdG9yU2VydmljZS5lbWl0c2hvd0xpYnJhcnlQYWdlRXZlbnQoJ3Nob3dMaWJyYXJ5UGFnZScpO1xuICB9XG4gIGFkZFF1ZXN0aW9uRnJvbUxpYnJhcnkoKSB7XG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmVtaXRzaG93UXVlc3Rpb25MaWJyYXJ5UGFnZUV2ZW50KCdzaG93UXVlc3Rpb25MaWJyYXJ5UGFnZScpO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YShpZD8pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGlkIHx8ICdjb2xsZWN0aW9uLXRvYycsXG4gICAgICB0eXBlOiAnY2xpY2snLFxuICAgICAgc3VidHlwZTogJ2xhdW5jaCcsXG4gICAgICBwYWdlaWQ6IHRoaXMudGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQsXG4gICAgICBleHRyYToge1xuICAgICAgICB2YWx1ZXM6IFtfLmdldCh0aGlzLmdldEFjdGl2ZU5vZGUoKSwgJ2RhdGEnKV1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlTmV3Q29udGVudCgpIHtcbiAgICB0aGlzLnRyZWVFdmVudEVtaXR0ZXIuZW1pdCh7IHR5cGU6ICdjcmVhdGVOZXdDb250ZW50JyB9KTtcbiAgfVxuXG4gIG1vdmVEZXBlbmRlbnROb2Rlcyh0YXJnZXROb2RlLCBjdXJyZW50Tm9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnROb2RlRGVwZW5kZW5jeSA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXREZXBlbmRlbnROb2RlcyhjdXJyZW50Tm9kZS5vdGhlck5vZGUuZGF0YS5pZCk7XG4gICAgY29uc3QgY3VycmVudFNlY3Rpb25JZCA9IF8uZ2V0KGN1cnJlbnROb2RlLCAnb3RoZXJOb2RlLnBhcmVudC5kYXRhLmlkJyk7XG4gICAgbGV0IG1vdmluZ05vZGVJZHMgPSBbXTtcbiAgICBpZiAoIV8uaXNFbXB0eShjdXJyZW50Tm9kZURlcGVuZGVuY3kpKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIGNvbnN0IG5vZGVJZCA9ICBfLmdldChjdXJyZW50Tm9kZSwgJ290aGVyTm9kZS5kYXRhLmlkJyk7XG4gICAgaWYgKCFfLmlzRW1wdHkoY3VycmVudE5vZGVEZXBlbmRlbmN5LnRhcmdldCkgfHwgIV8uaXNFbXB0eShjdXJyZW50Tm9kZURlcGVuZGVuY3kuc291cmNlVGFyZ2V0KSkge1xuICAgICAgaWYgKGN1cnJlbnROb2RlLmhpdE1vZGUgPT09ICdhZnRlcicpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICBtb3ZpbmdOb2RlSWRzID0gXy51bmlxKF8uY29tcGFjdChfLmNvbmNhdChjdXJyZW50Tm9kZURlcGVuZGVuY3kuc291cmNlLCBjdXJyZW50Tm9kZURlcGVuZGVuY3kudGFyZ2V0LCBjdXJyZW50Tm9kZURlcGVuZGVuY3kuc291cmNlVGFyZ2V0LG5vZGVJZCkpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIG1vdmluZ05vZGVJZHMgPSBfLnVuaXEoXy5jb21wYWN0KF8uY29uY2F0KGN1cnJlbnROb2RlRGVwZW5kZW5jeS5zb3VyY2UsIG5vZGVJZCwgY3VycmVudE5vZGVEZXBlbmRlbmN5LnRhcmdldCwgY3VycmVudE5vZGVEZXBlbmRlbmN5LnNvdXJjZVRhcmdldCkpKTtcbiAgICAgIH1cbiAgICAgIF8uZm9yRWFjaChtb3ZpbmdOb2RlSWRzLCBpZCA9PiB7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVudE5vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldE5vZGVCeUlkKGlkKTtcbiAgICAgICAgZGVwZW5kZW50Tm9kZS5tb3ZlVG8odGFyZ2V0Tm9kZSwgY3VycmVudE5vZGUuaGl0TW9kZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaXNGb2xkZXI6IGJvb2xlYW4gPSBfLmdldCh0YXJnZXROb2RlLCAnZm9sZGVyJyk7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZUlkID0gaXNGb2xkZXIgPyBfLmdldCh0YXJnZXROb2RlLCAnZGF0YS5pZCcpIDogXy5nZXQodGFyZ2V0Tm9kZSwgJ3BhcmVudC5kYXRhLmlkJyk7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgdGhpcy5yZWFycmFuZ2VCcmFuY2hpbmdMb2dpYyhub2RlSWQsIGN1cnJlbnRTZWN0aW9uSWQsIHRhcmdldE5vZGVJZCwgY3VycmVudE5vZGVEZXBlbmRlbmN5LCBtb3ZpbmdOb2RlSWRzKTtcbiAgIH1cbiAgfVxuXG5cbiAgcmVhcnJhbmdlQnJhbmNoaW5nTG9naWMobm9kZUlkLCBjdXJyZW50U2VjdGlvbklkLCB0YXJnZXRTZWN0aW9uSWQsIGRlcGVuZGVudE5vZGVJRHMsIG1vdmluZ05vZGVJZHMpIHtcbiAgICBjb25zdCBjdXJyZW50U2VjdGlvbkJyYW5jaGluZ0xvZ2ljID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmdldEJyYW5jaGluZ0xvZ2ljQnlGb2xkZXIoY3VycmVudFNlY3Rpb25JZCk7XG4gICAgY29uc3QgdGFyZ2V0U2VjdGlvbkJyYW5jaGluZ0xvZ2ljID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmdldEJyYW5jaGluZ0xvZ2ljQnlGb2xkZXIodGFyZ2V0U2VjdGlvbklkKTtcbiAgICBjb25zdCBtb3ZpbmdOb2Rlc0JyYW5jaGluZ0VudHJ5ID0gXy5waWNrKGN1cnJlbnRTZWN0aW9uQnJhbmNoaW5nTG9naWMsIG1vdmluZ05vZGVJZHMpO1xuICAgIGNvbnN0IHVwZGF0ZUN1cnJlbnRTZWN0aW9uQnJhbmNoaW5nTG9naWMgPSBfLm9taXQoY3VycmVudFNlY3Rpb25CcmFuY2hpbmdMb2dpYywgbW92aW5nTm9kZUlkcyk7XG4gICAgY29uc3QgdXBkYXRlVGFyZ2V0U2VjdGlvbkJyYW5jaGluZ0xvZ2ljID0gXy5hc3NpZ24oe30sIHRhcmdldFNlY3Rpb25CcmFuY2hpbmdMb2dpYywgbW92aW5nTm9kZXNCcmFuY2hpbmdFbnRyeSk7XG4gICAgY29uc3QgY3VycmVudFNlY3Rpb25OYW1lID0gXy5nZXQodGhpcy50cmVlU2VydmljZS5nZXROb2RlQnlJZChjdXJyZW50U2VjdGlvbklkKSwgJ2RhdGEubWV0YWRhdGEubmFtZScpO1xuICAgIGNvbnN0IHRhcmdldFNlY3Rpb25OYW1lID0gXy5nZXQodGhpcy50cmVlU2VydmljZS5nZXROb2RlQnlJZCh0YXJnZXRTZWN0aW9uSWQpLCAnZGF0YS5tZXRhZGF0YS5uYW1lJyk7XG4gICAgdGhpcy51cGRhdGVUcmVlQ2FjaGUoY3VycmVudFNlY3Rpb25OYW1lLCB1cGRhdGVDdXJyZW50U2VjdGlvbkJyYW5jaGluZ0xvZ2ljLCBjdXJyZW50U2VjdGlvbklkKTtcbiAgICB0aGlzLnVwZGF0ZVRyZWVDYWNoZSh0YXJnZXRTZWN0aW9uTmFtZSwgdXBkYXRlVGFyZ2V0U2VjdGlvbkJyYW5jaGluZ0xvZ2ljLCB0YXJnZXRTZWN0aW9uSWQpO1xuICB9XG5cbiAgdXBkYXRlVHJlZUNhY2hlKG5hbWUsIGJyYW5jaGluZ0xvZ2ljLCBpZCwgYWRkaXRpb25hbE1ldGFkYXRhPykge1xuICAgIGNvbnN0IHByaW1hcnlDYXRlZ29yeU5hbWUgPSB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0UHJpbWFyeUNhdGVnb3J5TmFtZShpZCk7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICBuYW1lLFxuICAgICAgcHJpbWFyeUNhdGVnb3J5OiBwcmltYXJ5Q2F0ZWdvcnlOYW1lLFxuICAgICAgLi4uKCAhXy5pc1VuZGVmaW5lZChhZGRpdGlvbmFsTWV0YWRhdGEpICYmICB7Li4uYWRkaXRpb25hbE1ldGFkYXRhfSksXG4gICAgICBhbGxvd0JyYW5jaGluZzogJ1llcycsXG4gICAgICAuLi4oIV8uaXNVbmRlZmluZWQoYnJhbmNoaW5nTG9naWMpICYmIHticmFuY2hpbmdMb2dpY30pXG4gICAgfTtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLnVwZGF0ZVRyZWVOb2RlTWV0YWRhdGEobWV0YWRhdGEsIGlkLCBwcmltYXJ5Q2F0ZWdvcnlOYW1lKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25Db21wb25lbnREZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5vbkNvbXBvbmVudERlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgI2ZhbmN5VHJlZT48L2Rpdj5cbjxkaXYgY2xhc3M9XCJzYi1maXhlZC13aXRoLXdoaXRlYmcgcHItMjAgZC1mbGV4IGZsZXgtamMtc3BhY2UtYmV0d2VlblwiICpuZ0lmPVwiY29uZmlnICYmIGNvbmZpZy5tb2RlID09PSAnZWRpdCdcIj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTI1XCI+XG4gICAgPGRpdiBjbGFzcz1cInNiLWJ0bi1jb3ZlclwiPlxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ2aXNpYmlsaXR5Py5hZGRTaWJsaW5nID8gJycgOiAnc2ItZGlzYWJsZWQnXCIgKGNsaWNrKT1cImFkZFNpYmxpbmcoKTtcIlxuICAgICAgICBjbGFzcz1cInNiLWJ0biBzYi1idG4tb3V0bGluZS1wcmltYXJ5IHNiLWJ0bi1ub3JtYWwgc2ItYnRuLXJhZGl1cyBwLTAgYi1ub25lXCI+PGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpY29uIHBsdXNcIj48L2k+XG4gICAgICAgIHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8uYWRkX3NpYmxpbmdfYnRuX2xhYmVsfX0gPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNiLWJ0bi1jb3ZlclwiPlxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ2aXNpYmlsaXR5Py5hZGRDaGlsZCA/ICcnIDogJ3NiLWRpc2FibGVkJ1wiIChjbGljayk9XCJhZGRDaGlsZCgpO1wiXG4gICAgICAgIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1vdXRsaW5lLXByaW1hcnkgc2ItYnRuLW5vcm1hbCBzYi1idG4tcmFkaXVzIGItbm9uZSBwLTBcIj48aSBjbGFzcz1cImljb24gcGx1c1wiPjwvaT5cbiAgICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5hZGRfY2hpbGRfYnRuX2xhYmVsfX0gPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLm9iamVjdFR5cGUgIT09ICdRdWVzdGlvblNldCdcIiAoY2xpY2spPVwiYWRkRnJvbUxpYnJhcnkoKTtcIlxuICAgIFtkaXNhYmxlZF09XCIhdmlzaWJpbGl0eT8uYWRkRnJvbUxpYnJhcnlcIlxuICAgIFtuZ0NsYXNzXT1cIlshdmlzaWJpbGl0eT8uYWRkRnJvbUxpYnJhcnkgPyAnc2ItYnRuLW91dGxpbmUtZGlzYWJsZWQnIDogJycsICh2aXNpYmlsaXR5Py5hZGRGcm9tTGlicmFyeSAmJiBidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlcikgPyAnc2ItYnRuLWxvYWRpbmctc3Bpbm5lciBzYi1idG4tb3V0bGluZS1kaXNhYmxlZCc6ICcnXVwiXG4gICAgY2xhc3M9XCJzYi1idG4gc2ItYnRuLW91dGxpbmUtcHJpbWFyeSBzYi1idG4tbm9ybWFsIG10LTEwIG1yLTMwXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FkZF9mcm9tX2xpYnJhcnknLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgIDxpIGNsYXNzPVwiaWNvbiBwbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCIhYnV0dG9uTG9hZGVycz8uYWRkRnJvbUxpYnJhcnlCdXR0b25Mb2FkZXJcIj48L2k+XG4gICAgPGRpdiBjbGFzcz1cInNiLWxvYWRpbmctc3Bpbm5lclwiICpuZ0lmPVwiYnV0dG9uTG9hZGVycz8uYWRkRnJvbUxpYnJhcnlCdXR0b25Mb2FkZXJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPC9kaXY+XG4gICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5hZGRfZnJvbV9saWJyYXJ5X2J0bl9sYWJlbH19XG4gIDwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTEwIG1yLTMwXCIgKm5nSWY9XCJjb25maWcub2JqZWN0VHlwZSA9PT0gJ1F1ZXN0aW9uU2V0J1wiPlxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiF2aXNpYmlsaXR5Py5hZGRRdWVzdGlvbkZyb21MaWJyYXJ5XCIgKGNsaWNrKT1cImFkZFF1ZXN0aW9uRnJvbUxpYnJhcnkoKTtcIlxuICAgIFtuZ0NsYXNzXT1cIlshdmlzaWJpbGl0eT8uYWRkUXVlc3Rpb25Gcm9tTGlicmFyeSA/ICdzYi1idG4tb3V0bGluZS1kaXNhYmxlZCcgOiAnc2ItYnRuLW91dGxpbmUtcHJpbWFyeScsICh2aXNpYmlsaXR5Py5hZGRRdWVzdGlvbkZyb21MaWJyYXJ5ICYmIGJ1dHRvbkxvYWRlcnM/LmFkZFF1ZXN0aW9uRnJvbUxpYnJhcnlCdXR0b25Mb2FkZXIpID8gJ3NiLWJ0bi1sb2FkaW5nLXNwaW5uZXIgc2ItYnRuLW91dGxpbmUtZGlzYWJsZWQnOiAnJ11cIlxuICAgIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgIG1yLTEwXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FkZF9mcm9tX2xpYnJhcnknLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgIDxpIGNsYXNzPVwiaWNvbiBwbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCIhYnV0dG9uTG9hZGVycz8uYWRkUXVlc3Rpb25Gcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiPjwvaT5cbiAgICA8ZGl2IGNsYXNzPVwic2ItbG9hZGluZy1zcGlubmVyXCIgKm5nSWY9XCJidXR0b25Mb2FkZXJzPy5hZGRRdWVzdGlvbkZyb21MaWJyYXJ5QnV0dG9uTG9hZGVyXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDwvZGl2PlxuICAgIHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8uYWRkX2Zyb21fbGlicmFyeV9idG5fbGFiZWx9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBjbGFzcz1cInNiLWJ0biBzYi1idG4tbm9ybWFsIHNiLWJ0bi1wcmltYXJ5XCIgW2Rpc2FibGVkXT1cIiF2aXNpYmlsaXR5Py5jcmVhdGVOZXdcIlxuICAgIFtuZ0NsYXNzXT1cIlshdmlzaWJpbGl0eT8uY3JlYXRlTmV3ID8gJ3NiLWJ0bi1vdXRsaW5lLWRpc2FibGVkJyA6ICcnLCAodmlzaWJpbGl0eT8uY3JlYXRlTmV3ICYmIGJ1dHRvbkxvYWRlcnM/LmFkZEZyb21MaWJyYXJ5QnV0dG9uTG9hZGVyKSA/ICdzYi1idG4tbG9hZGluZy1zcGlubmVyIHNiLWJ0bi1vdXRsaW5lLWRpc2FibGVkJzogJyddXCJcbiAgICB0eXBlPVwiYnV0dG9uXCIgIChjbGljayk9XCJjcmVhdGVOZXdDb250ZW50KClcIlxuICAgIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdjcmVhdGVfbmV3JywnY2xpY2snLCdsYXVuY2gnLCB0ZWxlbWV0cnlTZXJ2aWNlLnRlbGVtZXRyeVBhZ2VJZClcIj5cbiAgICA8aSBjbGFzcz1cImljb24gcGx1c1wiICpuZ0lmPVwiIWJ1dHRvbkxvYWRlcnM/LmFkZEZyb21MaWJyYXJ5QnV0dG9uTG9hZGVyXCI+PC9pPlxuICAgIDxkaXYgY2xhc3M9XCJzYi1sb2FkaW5nLXNwaW5uZXJcIiAqbmdJZj1cImJ1dHRvbkxvYWRlcnM/LmFkZEZyb21MaWJyYXJ5QnV0dG9uTG9hZGVyXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDwvZGl2PlxuICAgIHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8uY3JlYXRlX25ld19idG5fbGFiZWx9fVxuICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|